你不看绝对血亏的Volatile全方位解析!你还看不明白?
Posted 程序员环西
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你不看绝对血亏的Volatile全方位解析!你还看不明白?相关的知识,希望对你有一定的参考价值。
什么是自旋锁和互斥锁?
由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么?
自旋锁说白了也是一种互斥锁,只不过没有抢到锁的线程会一直自旋等待锁的释放,处于busy-waiting的状态,此时等待锁的线程不会进入休眠状态,而是一直忙等待浪费CPU周期。因此自旋锁适用于锁占用时间短的场合。
这里谈到了自旋锁,那么我们也顺便说下互斥锁。这里的互斥锁说的是传统意义的互斥锁,就是多个线程并发竞争锁的时候,没有抢到锁的线程会进入休眠状态即sleep-waiting,当锁被释放的时候,处于休眠状态的一个线程会再次获取到锁。缺点就是这一些列过程需要线程切换,需要执行很多CPU指令,同样需要时间。如果CPU执行线程切换的时间比锁占用的时间还长,那么可能还不如使用自旋锁。因此互斥锁适用于锁占用时间长的场合。
一面:
- hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移?
- Linux的共享内存如何实现,大概说了一下。
- Linux 中的用户模式和内核模式是什么含意?
- 在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允 许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
- socket网络编程,说一下TCP的三次握手和四次挥手
- 同步IO和异步IO的区别?
- Java GC机制?GC Roots有哪些?
- 如和判断一个对象是否存活?(或者 GC 对象的判定方法)
- 红黑树讲一下,五个特性,插入删除操作,时间复杂度?
- 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少
第一轮非常重要,第一面能通过,后续被录用的可能性就比较高
二面
- 自我介绍,主要讲讲做了什么和擅长什么
- 设计模式了解哪些?
- Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
- 什么是元数据?元数据分为哪些类型?包括哪些内容?与 cluster 相关的元数据
- AtomicInteger怎么实现原子修改的?
- RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?
- ConcurrentHashMap 在Java7和Java8中的区别?为什么Java8并发效率更好?什么情况下用HashMap,什么情况用ConcurrentHashMap?
- redis数据结构?
- redis数据淘汰机制?
- Redis 集群方案应该怎么做?都有哪些方案?
三面(约五十分钟)
- mysql实现事务的原理(MVCC)
- MySQL 中控制内存分配的全局参数,有哪些?
- Redis 有哪些适合的场景?
- 有哪些数据库优化方面的经验?MySQL数据主从同步是如何实现的?
- MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
- 如果Redis有1亿个key,使用keys命令是否会影响线上服务?
- Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么?
- 遇到最大困难是什么?怎么克服?
- 未来的规划是什么?
- 你想问我什么?
独家面经总结,超级精彩
本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!
Java面试准备
准确的说这里又分为两部分:
- Java刷题
- 算法刷题
Java刷题:此份文档详细记录了千道面试题与详解;
…(img-HzbDpiso-1624607336170)]
[外链图片转存中…(img-WDd18MD9-1624607336172)]
以上所有文档已经打包好,只需要动动手指点击【转发+关注】,然后点击即可免费获取!
以上是关于你不看绝对血亏的Volatile全方位解析!你还看不明白?的主要内容,如果未能解决你的问题,请参考以下文章