一面
- 上来照例还是问了问项目。
答:我介绍了自己的项目背景,项目的整个流程,由于是一个多人合作的项目,还介绍了自己负责项目的哪个模块,以及这个模块如何实现的,我感觉我个人说话语速比较快,建议大家尽量语速慢一些,可以多说个几分钟~ - 项目亮点可以作为你面试的项目亮点的文章,不来看看吗?
https://mp.weixin.qq.com/s/oXVi8WgCt3BYuwpSuAMk_Q - 然后他就说那就来问一下基础的java问题吧,问了java的8种基本数据类型
答:byte short int long float double boolean char - 字符集和编码的区别?
答:字符集是多个字符的集合,比如说ASC码就说字符集;编码的话就是计算机底层是01这样存储每个字符,编码就是按照一定的规则(比如说多长一串二进制)去读取二进制数的规则; - 说的数据类型,然后问了我short s1 = 1; s1 = s1+1;对不对?
答:我说不对,s1+1发生强制类型转换变成了int类型,应该是这样s1=short(s1+1);我顺带说了s1++就行,编译器自动进行特殊处理 - Final修饰词作用?
答:final修饰变量如果修饰的是基本数据类型,那么这个值一经赋值那么无法改变,如果修饰的是引用数据类型,那么引用不可以改变,但是引用中的对象内容是可以变化的;final修饰的方法不可以被子类修改,修饰的类不可被继承; - 接着问了final修饰有啥好处?
答:final的关键字提高了性能,JVM和java应用会缓存final变量;final变量可以在多线程环境下保持线程安全;使用final关键字,JVM会对方法变量类进行优化; - 还问了String中重写equals不重写hashcode会出现什么问题?答:这个我说了集合类中中hashset,存储着某一个对象,如果重写了对象的equals方法,但是没有重写hashcode方法,那么hashset中可能存储两个hashcode值相同也就是两个相同的对象,这样会破坏了hashset存储对象的唯一性。
- 由于我上面提到了集合,然后问我让我讲一讲hashmap。
答:hashmap我讲了hashmap的数据结构数组链表结构,讲了hashmap的put,get,扩容的底层原理,讲了hashmap不是线程安全的,以及它为什么不是线程安全,举了在多线程下插入,扩容带来的非线程安全的例子;同时讲了hashmap在1.7与1.8中的区别,put中引入了红黑树,以及扩容的时候不同,这些就讲了挺长时间; - 由于我上面提到了hashmap非线程安全,就问了我ConCurrentHashmap
答: