今年的6月份又到了,又是一年一度的毕业季,但是你真的做好准备了吗?。应届毕业生很多,怎么让你自己在这群人中脱颖而出呢?那你就要做万分的准备,不打没准备的仗,下面小猿圈java讲师为你总结了常见的java面试题,希望对你的面试有所帮助。
1.list中存放可重复字符串,如何删除某个字符串
调用iterator相关方法删除
倒删,防止正序删除导致的数组重排,index跳过数组元素问题
2.concurrenthashmap为何读不用加锁
jdk1.7
1)HashEntry中的key、hash、next均为final型,只能表头插入、删除结点
2)HashEntry类的value域被声明为volatile型
3)不允许用null作为键和值,当读线程读到某个HashEntry的value域的值为null时,便知道产生了冲突——发生了重排序现象(put设置新value对象的字节码指令重排序),需要加锁后重新读入这个value值
4)volatile变量count协调读写线程之间的内存可见性,写操作后修改count,读操作先读count,根据happen-before传递性原则写操作的修改读操作能够看到
jdk1.8
1)Node的val和next均为volatile型
2)tabAt和casTabAt对应的unsafe操作实现了volatile语义
3.ContextClassLoader(线程上下文类加载器)的作用