携程Java实习(二面)
大概问的问题:
- 一些Java基础问题
- GC ,分代管理,优势
- 排序算法的一些问题,稳定是什么意思
- 用过哪些设计模式
- 单例代码实现
- 算法题:(挺简单的算法题)
- 十进制转八进制
- 反转链表
- 树的最大深度
面试官问我final 关键字的四个使用场景和语义,其中我说了final有内存屏障。
根据《Java并发编程的艺术》书上说描述的:
final域重排序规则
final域是基础数据类型:
在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。
Final域是引用数据类型:
在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
谢谢Tandejian评论区补充:
X86处理器确实对final不会插入任何内存屏障,但是其他处理器可能,估计面试官默认是x86吧。
最后总结,虽然final有内存屏障的语义,但是X86处理器上并没有相应的实现,是我回答有些问题。抱歉,收回之前的吐槽,携程是上海互联网扛把子,里面各个都是人才,说话又好听。
觉得不错就点个赞。
#携程春招##携程##实习##面经##Java#