经过一周的打击,终于确认了自己是个fw。
这里整理一下前两家面试公司问到的一些问题。
redis数据结构
String,Set,SortedSet,Hash,List。这五个应该是能立刻反应过来的,因为只要说到redis这五个数据结构应该是常识。
但是面试官一般随后还会问这五个分别使用在什么场景下,这下子就懵b了,因为基本都是无脑String的,很少去特意使用过其他类型。
string stringbuffer stringbuilder的区别
String每次进行改变的时候相当于新创建了一个对象,而后两者由于append等方法的存在,每次都是直接修改,这里它们的效率较String要高上许多
StringBuffer是线程安全的,StringBuilder是线程不安全的,也因此StringBuilder的效率更高,速度更快
StringBuffer是多线程操作String的,而StringBuilder是单线程操作的
Java中集合的区别
这个问题太常见了,不再赘述,引用一个网上的文章,写的确实比较详细
https://blog.csdn.net/zhangqunshuai/article/details/80660974
展开说一下,基本回答这个问题,要从继承的接口,底层数据结构,读取和增删的效率,线程是否安全,以及比如set不能存放重复元素等特性来回答,最好要回答完整,java的集合一直是考察的重点,这一块回答得越好,很能反映基础的扎实程度。最好在描述项目经验的时候适当提一提,比如笔者的项目中为了一些SDK接口的开发,参数需要按序排列,所以使用到了TreeMap,可以提一嘴,当然最好准备好你对TreeMap的一些理解和底层原理的洞悉。
HashSet重写方法
当说起set的特性的时候,面试官直接就插了一句“你既然知道了set去重,想问一下用set的时候你们重写了什么方法?”
这个问题的回答主要还是取决于业务层面,说白了到底往set里放什么东西,这里有两个情况,如果是存放的8大基本类型或者String,这里并不需要重写hashcode和equals方法
但是如果是自定义的类,那么就需要重写hashcode和equals方法
事务隔离由hibernate还是mysql决定
事务的隔离由数据库系统来实现
事务特性
原子性 (atomicity):强调事务的不可分割.
一致性 (consistency):事务的执行的前后数据的完整性保持一致.
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
持久性(durability) :事务一旦结束,数据就持久到数据库
hashmap的key和value是否可以为空
HashMap 支持key=null 但是 Hashtable 不支持 key =null
jdk8新特性
这个是这轮面试遇到的第一个问题,属实把小白我给难住了,引用一下网上的一篇文章
https://blog.csdn.net/qq_29411737/article/details/80835658
JDK8的新特性实在有点多,我个人认为回答这个问题需要一点策略,首先不可能全都知道,但是可以讨巧联系开发项目的实际来说,也就是说把问题转化为JDK8对你开发的影响,这里举个例子,比如突出一个重点lambda表达式,然后重点介绍一下lambda表达式是干嘛的,项目里用在了什么地方,好在哪里,然后扩展一下lambda表达式和匿名内部类的区别,加深理解。
本轮心得体会
面完之后才知道自己知道的还是太少,可能平时开发的过程中,由于对一些业务的理解很深入,对一些功能的使用很熟练,因此产生了一定的自信心。但是这些技巧在面试官这里可能并没有很大的作用,面试官可能一开始会听完你生动的项目经历讲解,然后适当提出一些问题,这里可能你的声音还很响,很自信。但是接下来你会面对两个问题,你重点介绍的这个项目所用的技术可能并不是面试官需要的,以及面试官所需要的知识并不停留在你所说的应用层面。
这会导致两个现象
1 面试官打着哈欠,似懂非懂的听完你的慷慨陈词,然后开始问“你对xxx了解吗?”这样的面试可能会很尴尬,因为你知道他需要的并不是这些,甚至你在这家公司可能会接触很多你之前并不了解的技术,一来你并不是很对口,二来就算你表现出了强大的学习能力和意愿,但是你还是会面对很大的学习成本,甚至影响你开口要高薪。
2 面试官抓着其中几个点“撕咬”,一路问到底,举个个人的例子,String能不能被继承,不能。为什么不能被继承,因为有final修饰。final能修饰哪些东西分别什么作用,修饰类不能被继承,修饰方法不能被重写,修饰变量一旦被初始化不能被修改。然后最后来了最骚的问题,为什么要用final修饰String,这下子只能顾左右而言他了。其实相信大部分面试者都能回答上前面的问题,但是体现你价值的地方可能恰恰在最后这个问题,如果这个问题能说出个所以然来,很可能在面试官心中,你就有超然的地位。
所以总结下来针对这两个问题有两个调整方案。
1 面试前对公司所需要的技术做一个了解,从业务和招聘要求的角度了解公司所需,对症下药,比如要求Spring的,就不要花时间去搞微服务了。
2 平时要加强对底层原理的了解,不管是看源码,还是看博客,不能停留于表面,innodb就说个B+树,HashMap就加了个红黑树,需要知道为啥用,好在哪里,甚至可以去深究一下比如红黑树和平衡二叉树的区别之类的问题。面试中一旦遇到,哪怕面试官没问,你也可以顺着问题强行谈一段你的理解,相信面试官会不住的点头。