27日常实习 小红书后端二面 40min
八股大拷打
1.synchronized和volatile的底层原理以及使用场景
2.知道单例模式吗,手写双重检锁,写完描述一下思路
3.volatile在这个过程中,具体防止哪个指令重排
4.JVM分代年龄
5.JVM调优中“15次”是什么概念
6.项目有用过调优吗
7.手撕:旋转有序数组中找目标值
1.synchronized和volatile的底层原理以及使用场景
2.知道单例模式吗,手写双重检锁,写完描述一下思路
3.volatile在这个过程中,具体防止哪个指令重排
4.JVM分代年龄
5.JVM调优中“15次”是什么概念
6.项目有用过调优吗
7.手撕:旋转有序数组中找目标值
全部评论
1. synchronized和volatile原理与场景
synchronized通过监视器锁保证原子性与可见性,底层对应monitorenter/exit指令,用于方法或代码块同步。volatile通过内存屏障保证可见性与禁止指令重排,仅修饰变量,常用于状态标志或双重检锁场景。
2. 双重检锁单例
首次判空避免每次加锁,同步块内再次判空确保唯一实例。需用volatile修饰实例,防止初始化时“分配内存-初始化-赋值”步骤重排导致其他线程获得未初始化对象。
3. volatile防止的指令重排
在`instance = new Singleton()`中,防止“1.分配对象内存、2.初始化对象、3.引用指向内存”这三步被重排序为1-3-2,从而避免返回半初始化状态的对象。
4. JVM分代年龄
对象在Survivor区每经历一次Minor GC则年龄加1,年龄存储在对象头中。默认达到15岁时会晋升老年代(CMS收集器默认为6岁)。
5. “15次”概念
指对象晋升老年代的年龄阈值(MaxTenuringThreshold默认值15)。是Young GC时对象在Survivor区间复制的次数上限,超过即进入老年代,避免在年轻代过度复制。
6. 项目调优经验
常见如调整堆大小及各区域比例、选择G1/CMS等收集器、或通过日志及监控定位Full GC/OOM原因。例如通过调整SurvivorRatio优化对象在年轻代的留存时间。
8. 旋转有序数组搜索
核心是二分查找变体。先判断mid左右哪部分有序,再检查target是否在有序区间内,以此决定搜索方向。需注意边界条件,如`numsleft <= numsmid`时左半部有序。
啥时候面的呀
相关推荐
点赞 评论 收藏
分享
02-05 22:43
武汉大学 Java 点赞 评论 收藏
分享
OPPO公司福利 1202人发布
查看8道真题和解析