一面
1、自我介绍
答:自我介绍是面试中唯一的自己主动介绍自己的环节,一定要好好把握好,你数据结构学的号可以手撕一个红黑树你就说我数据结构掌握地很好,反正就是要把自己的优势凸显出来,比如自己对于java的知识较熟悉,我介绍完自己的本科经历以后,我就说我是保送到本校继续读研究生,然后最末尾会加上自己熟悉java,然后面试官就会问java的一些东西;
2、项目介绍及其亮点
答:使劲吹...
3、java的8种数据类型有哪些?
答:感觉这个问题被问烂了,int,short,long,float,double,byte,boolean,char;
4、问了Integer缓存数据的范围?
答:-128-127
5、紧接着问了Object类有哪些方法?
答:这个我有背过,clone,getClass,toString,finalize,equals,hashCode,wait,notify,notifyALL。(不懂面试这个什么意思)
6、问到这里然后拿出了一个题,面试官有小纸条,题目在上面,String A = "123"; String B = new String("123");,问我生成了几个String对象?
答:我说如果常量池中,原来没有“123”那么就是生成了2个对象,如果常量池中有“123”那么只要1个对象生成(面试官别他妈的问这种问题了)
7、由于提到了wait,顺带问了wait和sleep有什么区别?
答:wait的话会释放对象锁,sleep的话不会释放的对象锁
8、由于还提及了hashcode,面试官接着问我,hashcode用在哪里?
答:这个我不假思索地说,hashmap和ConcurrentMap,这里我猜面试官肯定要继续问我这两个东西了。
9、果不其然,面试官说,讲一讲hashmap?
答:hashmap我讲了hashmap的数据结构数组链表结构,讲了hashmap的put,get,扩容的底层原理,同时讲了hashmap在1.7与1.8中的区别,put中引入了红黑树,以及扩容的时候不同,这些就讲了挺长时间,最后我说了一句hashmap不是线程安全的。
10、这里提及了hashMap是非线程安全的,面试问我为啥不是线程安全的,举几个例子?
答:我说了,在扩容的时候hashmap会可能产生环,造成死循环;hashmap在插入新的阶段的时候,多个线程同时插入,会把除了最后的那个线程的其它线程插入的结点丢失;对于修改的时候,多个线程修改,对只保留最后的一个线程的修改结果;扩容的时候,会只保留最后一个线程的扩容后的那个数组;从扩容修改增加说了一遍;
11、我本以为要接着问ConCurrentMap,额,出乎我的意料,并没有问,可能觉得我hashmap准备的很充分,然后接着问了我JVM了解吗?
答:我说了解;
12、让我说意思JVM的分为哪几块?
答:方法区,虚拟机栈,本地方法栈,堆,程序计数器,然后我就自己没等面试官问新的问题,继续接着说,方法