以下面经总结自很多同学、同事高工的面试经历。
1、问到了redis 原子性
2、ArrayList内部实现,以及对于原生数组的优势(扩容,线程安全等)
3、多线程,分布式锁,分布式事务
ps:
问:如果保证3个线程都结束之后再继续执行业务?
答:我说用线程的栅栏;或者3个flag,while去判断。
问:多个线程同时访问数据库,如何保证多个线程同时成功,同时失败;如何保证同时操作数据库的时候,不发生写的覆盖?
答:若在主线程加事务,则线程结束后一起提交,性能上不是最优选项;可以在事后处理,通过日志发现哪些写操作有问题,然后补偿到数据库(部分场景适用);可以在数据库级别加锁(引出mysql隔离级别),默认写锁;redis的原子性也可以考虑是否可以解决类似问题。
4、redis
5、mysql隔离级别
6、jvm相关
https://blog.csdn.net/stanlee_0/article/details/51171382
https://blog.csdn.net/luomingkui1109/article/details/72820232
java8的JVM有变化,持久代(PSPermGen)被元空间(Metaspace)取代
https://blog.csdn.net/yechaodechuntian/article/details/40341975
这篇博文提到了GC()算法,略有晦涩
https://blog.csdn.net/hui_yan2012/article/details/70194449
一系列JVM博客,包括GC()算法,这个讲的比较清爽
http://www.importnew.com/23752.html
----
静态常量是存放在方法区的
7、map内部实现(扩容,线程安全等)
8、String内存问题,Long内存问题等
9、== 和 equal 的区别
10、shell命令