乐趣区

关于java:如何准备Java初级和高级的技术面试

来自:Java 工程师 -Distance 链接:my.oschina.net/u/3739863/blog/1813292

自己最近几年始终在做 java 后端方面的技术面试官,而在最近两周,又密集面试了一些 java 高级和高级开发的候选人,在面试过程中,我自认为比拟谨慎,遇到问题答复不好的候选人,我总会再三从不同方面发问,只有当重复确认能力不行才会下结论,相同,如果候选人给我的印象不错,我也会从多个角度来掂量,免得招进会说但不会干活的“大忽悠”。

其实倒也不是我成心要尴尬候选人,毕竟入职后就是共事,但面试官的职责使然,而且,如果资深的面试官个别也这样。

写到这里,恐怕会吓到一些想要面试的敌人,能力强和能力弱都会被多问,那怎么办?

这就是本文将要讲到的主题:如何筹备 Java 高级和高级的技术面试

一. 换位思考下,如果你面试官,你会怎么做

  1. 只能通过简历和面试来掂量,别无他法。如果某位大牛确认能力很行,但面试时无奈充沛地自证能力,那对不起了,过不了,事实就这样。
  2. 如果面试官因为能力不行,招进来一个大忽悠,那预计会被领导骂。而且再也不会被让面试了,给领导的印象就不好了。所以不能评主观印象,而是会有些主观规范,具体而言,就是从多个方面问些题目,答好答坏就看候选人的。

其实一些题目都差不多,但不同能力的面试官问问题的切入点和渐进水平会不同,而且有教训的面试官会开掘候选人的劣势,并能从候选人的说辞中判断候选人是真懂还是忽悠。

二. 总体上说下筹备面试的几个方面点

记得之前考政治,某个大题 10 分,分 5 个点,每个点的标准答案不多,也就一两句话。比拟取巧的做法是,涵盖点要全,每个点无需多说,但要说到点子上。相同,如果在某个点做得再多,其它点没笼罩到,只能拿这个点的分。

同理,在面试时,该当综合筹备 java Core,数据库,框架,分布式等方面的题目。依据我面试的后果,我发现不少候选人走了弯路,他们或者罗唆不筹备,筹备时可能办法不到位,单筹备一个方面。比方只筹备了算法题,在这方面答复很好,但其它方面就无所不知了。

所以说,没有所谓的肯定能胜利的面试秘籍,但有能够帮忙晋升成功率的筹备办法。
切记,面试前肯定得筹备,否则胜利的可能性很低,筹备时,得综合看各方面的点。至于每个点要到什么水平,后文会讲到。

三. 架构方面须要筹备的点

高级开发而言,须要让面试官感觉出如下的要点。

  1. 相熟 SSM 架构,至多在我的项目里做过。
    这个的说法是,介绍我的项目时,用一个业务流程来说 spring mvc 如何做的。
  2. 晓得 Spring MVC 中的细节,比方 @Autowired 的用法,如何把 url 映射到 Controller 上,ModelAndView 对象返回的形式等。
  3. 最好联合我的项目的用法,说下你是怎么用 AOP,拦截器的,比如说能够通过拦挡 器拦挡非法申请,怎么用 AOP 输入日志等。
  4. 对于 ORM 方面,不限用过哪种,但得晓得一对一,一多多,多对多等的用法,以及 cascade 和 inverse 的用法。
  5. 最好晓得申明式事务的做法。
    如果你要应聘高级开发,那在上述根底上,最好理解如下的知识点:
  6. Spring Bean 的周期
  7. 最好能通过浏览源代码,说下 IOC,AOP 以及 Spring MVC 的工作流程
  8. 最好能联合反射,说下 IOC 等的实现原理
  9. Spring Boot 和 Spring Cloud 的一些知识点

四. 数据库方面须要筹备的点

不少候选人会看很多 SQL 的技巧,比方 select 该怎么写,insert 又该怎么写,但仅限于此,不会再筹备其它的。

这样就很吃亏,因为面试官会认为,哪怕是高级开发,SQL 语句也该会写,所以这块不会多问,而会问如下方面的问题。

  1. 索引怎么建的,怎么用的?比方我建好了一个索引,在 where 语句里写 name like ‘123%’ 会不会走索引,怎么状况下不该建索引,哪些语句不会走索引。
  2. 除了索引之外,你有过哪些 SQL 优化方面的教训,比方分库分表,或通过执行打算查看 SQL 的优化点。这最好是能联合你做的我的项目理论来讲。

这里,我面试下来,大略有 70% 的候选人只晓得根本 SQL 的写法,所以哪怕你是只有实践教训,会说一些优化点,也是十分无利的。

这块对于高级开发而言,更得理解优化方面的技能。

五. Java Core 方面须要筹备的点

这块是根底,其实很多问的问题,候选人肯定会在我的项目里用到,但很少能说好说全。

这块次要会从汇合,多线程,异样解决流程以及 JVM 虚拟机这些方面来问。

汇合方面:

  1. hashcode 有没有重写过?在什么场景下须要重写。如果能够,联合 hash 表的算法,说下 hashmap 的实现原理。

对于高级开发而言,最好通过 ConcurrentHashMap 来阐明下并发方面的底层实现代码。

  1. ArrayList,LinkedList 的差异,比方一个基于数组,一个基于链表,它们均是线程不平安的,ArrayList 的扩容做法等。

对于高级而言,最难看下底层的代码。

  1. Set 如何实现防重的,比方 TreeSet 和 HashSet 等。
  2. Collection 的一些办法,比方比拟办法,包装成线程平安的办法等。
  3. 可能有些面试官会问,如何通过 ArrayList 实现队列或堆栈,这个能够筹备下。

多线程方面

其实在我的项目里不怎么会用到,但会问如下的问题:

  1. synchronized 和可重入锁的差异,而后可能会顺便问下信号量等防并发的机制。
  2. 在线程里该如何返回值,其实就是 callable runnable 区别。
  3. 肯定得通过 ThreadLocal 或 volatile 关键字,来阐明线程的内存模型。
  4. 线程池方面,会用,理解些罕用参数

线程方面,可能问得比拟多的就是并发机制,如果是高级开发,可能会问得深些。

虚拟机方面

  1. 结构图和流程能够大抵说下。
  2. 肯定得理解针对堆的垃圾回收机制,具体而言,能够画个图,说下年老代年轻代等。
  3. 说下垃圾回收的流程,而后针对性地说下如何在代码中优化内存性能。
  4. 最好说下如果呈现了 OOM 异样,该怎么排查?如何看 Dump 文件。
  5. GC 的一些概念,比方强弱软援用,finalize 办法等,这些能够筹备下。

六. 算法,设计模式等,其实是虚的

这块好筹备,不过话说哪怕这些没答复好,但能证实有相干技能的我的项目教训,个别也会让过。

不过在这块,不少候选人就轻重倒置了,比方就筹备算法,设计模式,方才提到的框架,数据库和 Java Core 方面就不筹备了。这样很吃亏,就好比考政治只温习了一个点,其它一点也不筹备。

七. 我面试的感触 & 听到哪类答复就能证实候选人比拟资深

  1. 大多数的候选人(大略 7 成)间接就来了,不做任何筹备。要晓得,面试和我的项目其实有些脱节,哪怕我的项目做得再好,不做筹备照样通不过,只有我确认过这类人的确无奈达标,我拒掉他们没任何心理累赘,谁让他们不筹备?
  2. 还有些候选人态度很好,显著筹备过,但没筹备到位,比方像方才所说,只筹备了算法,或者在 Java Core 方面,只看了汇合方面的面试题。

对于这些同学,哪怕是过了,我也会感到可惜,毕竟如果面试好些的话,工资也能更高些,至于哪些过不了的,我敢说,如果他们筹备过,预计就不是这个后果了。

其实我也晓得,人无完人,哪怕我本人去面试,也不可能八面玲珑,所以,我不会要求候选人什么问题都能答复出,甚至大多答错也没关系,只有能证实本人的能力即可通过面试。

我也和不少面试官交换过,依据咱们的教训,如果候选人能说出如下的知识点,即能证实他在这个畛域比拟资深了,在这块,我可能就不会过多地问问题了。

架构方面

  1. 能证实本人能够干活(这不难),同时能联合底层代码说出 IOC,AOP 或 Spring MVC 的流程,只有能说出一个即可。或者能说出拦截器,Controller 等的高级用法。
  2. 能证实本人有 Spring Boot 或 Spring Cloud 的教训,比方能说出些 Spring Cloud 组件的用法。
  3. 如果能证实本人有分布式开发的教训,那最好了,其实这不难证实,比方能说出服务的包是放在多台机器上(大多数公司其实都这样),而且能说出如何部署,如何通过 nginx 等做到负载平衡。

数据库方面

其实讲清楚一个问题即可:如何进行 SQL 调优,比方通过索引,看执行打算即可,如果有其它的优化点,说分明即可。

Java Core 方面

这里给出些窍门:

  1. 能联合 ConcurrentHashMap 的源代码,说出 final,volatile,transient 的用法,以及在其中如何用 Lock 对象避免写并发。
  2. 联合一个我的项目理论,说下设计模式的实际。
  3. 多线程方面,能说出 Lock 或 volatile 等高级知识点的用法。
  4. 这块最取巧:说下 GC 的流程,以及如何通过日志和 Dump 文件排查 OOM 异样,如果再高级些的话,说下如何在代码中优化内存代码。

逆锋起笔 是一个专一于程序员圈子的技术平台,你能够播种 最新技术动静 最新内测资格 BAT 等大厂大佬的教训 增长本身 学习材料 职业路线 等等,微信搜寻 逆锋起笔 关注!

退出移动版