校招Java岗面试指南之我见
01│面试前的准备
我最近和不少同学聊了一下,主要就是倾听对方的困难和疑惑,然后我自己就我的经历体会给出我的一些建议。
总的来说,不过是一点,基础知识不会。
有的同学说,自己实习期到了,无奈裸面。回答时想不起来,最后俩周没消息。这里想说一下,俩周没消息,面试基本凉了。
其它岗我不清楚,Java岗这块必问的东西,百分百包括:Java虚拟机、多线程、集合框架,这三点每次必问,知识点就那么些,多吗?其实不多。
除了这三点,大概率会问到数据库、设计模式、算法。这些东西如果纯靠记忆的话,估计要背好久,而且还要保证面试时不被发现面试官发觉。看过我之前的文章我是如何拿到大厂offer的!可能会对我的学习方法有所了解。那就是抄书,说句真心话这种方法好处显而易见,那就是扎实,缺点也显而易见,就是费时费力。如果你马上就要面试了,或者时间紧张,我建议你去阅读一些博客笔记,比如我的博客也可以作为你的一个参考。对于Java虚拟机这块,这种方法贼好使。
02│关键得靠脑子
但是,并不是每块知识我都得靠背,有些知识你必须要理解,甚至深刻理解。为什么?因为面试官对这部分的问题千奇百怪,你不理解,没掌握,只能竟无语凝噎。这里例子很多,我随机举几个。
现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
讲真,对于问题的回答结果有很多。如果你真的熟悉多线程编程,对你来说就是easy。比如用join方法,Thread.sleep()方法等等。
还有,如果让你实现一个阻塞队列,你会怎么去做?
首先我们需要了解阻塞什么,阻塞本质就是线程被挂起(调用wait方法)。所谓的唤醒线程是什么?就是再次调用该线程的notify方法。剩下的就是阻塞的时机,阻塞时机就两个,一个是get已空,一个是put已满。很容易理解的概念。
关于这部分多线程知识的学习,我强烈建议一步一个脚印,一行代码一行代码的敲,当你对这块的知识理解达到任你出题千万,我一眼看破本质的地步,那你面试基本和玩似的。
03│关于集合框架
关于集合框架这块,说实话,看书看博客都ok。算是比较轻松的一块知识区域。内容少,质量高。区分JDK8之前之后对Map的影响,区分线程安全不安全的实例,都不是问题。
既然谈到这块,我就多说几句比较让人迷糊几个点!大家记好笔记,当然啦,最好就是收藏+关注!打赏我也是支持的。
一定明确,JDK8之前,HashMap是数组+链表,JDK8之后,HashMap是数组+链表+红黑树,具体咋做的,自行百度,我就不啰嗦了。
还有,ConcurrentHashMap的设计思路和HashMap是同步的,也就是说,ConcurrentHashMap除了锁机制这块的处理与HashMap不同,数组+链表(+红黑树)是和HashMap一样一样的。
还有一点就是map的put方法过程,这也是必须要会的。提醒你两句,使用的是hashCode()和equals()方法。由此,面试官可能会引出下面两个问题:
1.为什么重写equals()方法必须重写hashCode()方法?
2.为什么先调用hashCode()再调用equals()方法?优势?
还是那句话,自行百度去!
04│数据库常考难点
不要对数据库这块的知识掌握还停留在我会left join的水平,好不好同学们。SQL说实话,最难也就是连接查询了。一般情况下会这样,但如果面试官提了如何优化数据库,你回答了索引,那数据库索引底层的原理你就不得不去了解了。也许你会回答哈希表或者B+树,那问题又来了,来同学,说一下B+树,你整一句:B+树的内节点只存放key,只有叶子节点存放数据。虽然也不错,但是如果能回答的更具体一些,我觉得你会让面试官对你双眼一亮。至少这块知识点上,你已经领先于其他竞争者。
其它数据库方面的考点,那就是事务了。
ACID四个特性懂吧?让你解释也没问题吧?
脏读、不可重复读、幻读 也是必须会的。为啥?没有这三个问题,就没有解决这三个问题的隔离机制。
未提交读、已提交读、可重复读、串行。(不解释,自行百度)关于事务的传播行为(描述由某一个事务传播行为修饰的方法被嵌套进另一个方法的时事务如何传播),这个了解、知道就ok,因为我没被问到过。
触发器、视图、游标 这三个概念很冷门,但防不住面试官问。
我简单说一下。
触发器:由事件触发的存储过程。
视图:视图是从一个或几个基本表(或视图)中导出的虚拟的表。
游标:实际上是一种能从包含多条数据记录的结果集中每次提取一条记录的机制。
我觉得最可能让人迷糊的就是视图和游标的概念了。
05│23种设计模式
标题是23种设计模式,难道23种设计模式我都要会吗?是的,都要会。不然怎么做面霸。
拿我自己的一次面试经历来说,面试官说:我来问问你设计模式方面的东西。我说:您尽管问。(答不上来算我输)
知道为什么我对设计模式这方面的知识这么了解吗?
因为我把这些设计模式都学了一遍,并且,我找到了最本质的那个思想。设计模式说白了就是一种思想,你get到了,那你就可以从容不迫的向面试官解释说明(XX设计模式是什么?比如说怎么怎么的…)
说实话,思想才是最本质的东西。
我把这些我对设计模式的感悟用一句话的形式都写在了有道云笔记上。面试前看一看,随便面试官问,答不上来算我输。
这些笔记我都会在公众号的后面发出来,并会详细介绍我对每一种设计模式的理解。期待大家多多关注。
06│算法考察的深度
其它岗我不清楚,Java开发/研发岗对算法的要求并不高。我相信有过面试经历的人都会有这样的体会。
个人觉得,刷完剑指offer上的题只是基础。
然后再刷刷LeetCode上的题。
07│本文结语
如果你觉得不错,可以顺手给我赞赏,那将会更加的鼓励我更好的创作。
版权声明:凡未经本网站书面授权,任何媒体、网站及个人不得转载、复制、重制、改动、展示或使用本网站的局部或全部的内容或服务,或在非本网站所属服务器上建立镜像。如果已转载,请自行删除。同时,我们保留进一步追究相关行为主体的法律责任的权利。我们希望与各媒体合作,签订著作权有偿使用许可合同,故转载方须书面/邮件申请,以待商榷。