2017年5月8日21:08:34 于成都双流机场附近的7天酒店
周四面试完晚上和基友吃了饭第二天马不停蹄地回南京和参加婚礼的基友汇合来了成都。
折腾三天总算告一段落,有时间记录下我面试的问题和心得。
1. 如何判断一个二叉树是否平衡
没答好还是因为基础太差,不记得平衡二叉树的条件:左右子树深度相差1以内(1或0),且左右子树也是平衡二叉树。
所以知道概念之后答案就显而易见了,利用递归计算左右子树是否平衡即可。
2. 如何用Java判断字符串是否符合正则表达式
因为上家公司的输入判断都是在前端做一遍,后端没有做,导致出现了这样大的漏洞。
答案是String类的matches()方法,具体食用方法可以百度。
3. 没想到面试官会问我在学校成绩如何,当时一紧张说了个还可以。其实应该说学渣的。。也许老实承认学渣好过被追问出来。
4. ArrayList和LinkedList的查找时间复杂度
由于ArrayList是基于数组实现的,因此支持随机查找(因为元素连续存储,所以只需要知道首元素的存储地址,加上访问的元素位置*内存地址偏移量即可计算出元素位置进而访问),查找的时间复杂度为O(1)。
LinkedList基于双向链表实现,查找某个位置的元素时,需要挨个访问元素以到达指定元素的位置,时间复杂度为O(n)。
答是答对了,不过答得时候犹豫了一下,面试官还问我确不确定,应该失分了。
5. Hibernate与MyBatis以及JDBC的区别,为什么选择使用某一个?
老实说由于经验还不足,都没有深入考虑过它们有什么区别,所以就说Hibernate比较重之类的,算是没答上。
查了一番,发现说的好深奥,不是很理解,最后挑几条比较好理解的吧
1)Hibernate由于和数据库的关联只需要配置,HQL和具体使用哪个数据库无关,所以可移植性较强;MyBatis由于所有的SQL都是和所用数据库相关的,移植性差。
2)Hibernate入门和精通相比MyBatis更难。
3)MyBatis相较于Hibernate的功能更少更简单(例如Hibernate有更好的二级缓存,能使用第三方缓存工具,而MyBatis只能进行全局的缓存配置),但同时也更轻。
4)MyBatis和jdbc相比,将sql与java解耦,方便统一管理,并且提供了现成的分页查询模板;
5)面对大数据量的复杂查询,Hibernate和MyBatis会产生大量最终需要丢弃的对象,较为消耗资源,此时应选用jdbc。
总的来说还是各有优劣。
一时只回想起这几个,待补充。文章仅供参考,并非权威,有任何写得不对的地方,欢迎批评指正。