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

  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. 最好知道声明式事务的做法。

如果你要应聘高级开发,那在上述基础上,最好了解如下的知识点:

  1. Spring Bean的周期
  2. 最好能通过阅读源代码,说下IOC,AOP以及Spring MVC的工作流程
  3. 最好能结合反射,说下IOC等的实现原理
  4. Spring Boot和Spring Cloud的一些知识点

四、 数据库方面需要准备的点

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

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

  1. 索引怎么建的,怎么用的?比如我建好了一个索引,在where 语句里写 name like '123%'会不会走索引,怎么情况下不该建索引,哪些语句不会走索引。
  2. 除了索引之外,你有过哪些SQL优化方面的经验,比如分库分表,或通过执行计划查看SQL的优化点。这最好是能结合你做的项目实际来讲。
  3. 这里,我面试下来,大概有70%的候选人只知道基本SQL的写法,所以哪怕你是只有理论经验,会说一些优化点,也是非常有利的。
  4. 这块对于高级开发而言,更得了解优化方面的技能。

五. Java Core方面需要准备的点

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

这块主要会从集合,多线程,异常处理流程以及JVM虚拟机这些方面来问。

集合方面:

  1. hashcode有没有重写过?在什么场景下需要重写。如果可以,结合hash表的算法,说下hashmap的实现原理。
  2. 对于高级开发而言,最好通过ConcurrentHashMap来说明下并发方面的底层实现代码。
  3. ArrayList,LinkedList的差别,比如一个基于数组,一个基于链表,它们均是线程不安全的,ArrayList的扩容做法等。
  4. Set如何实现防重的,比如TreeSet和HashSet等。
  5. Collection的一些方法,比如比较方法,包装成线程安全的方法等。
  6. 可能有些面试官会问,如何通过ArrayList实现队列或堆栈,这个可以准备下。

多线程方面:

  1. 其实在项目里不怎么会用到,但会问如下的问题:
  2. synchronized和可重入锁的差别,然后可能会顺便问下信号量等防并发的机制。
  3. 在线程里该如何返回值,其实就是callable runnable 区别。
  4. 一定得通过ThreadLocal或volatile关键字,来说明线程的内存模型。
  5. 线程池方面,会用,了解些常用参数
  6. 线程方面,可能问得比较多的就是并发机制,如果是高级开发,可能会问得深些。

虚拟机方面:

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

架构方面:

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

数据库方面:

  1. 其实讲清楚一个问题即可:如何进行SQL调优,比如通过索引,看执行计划即可,如果有其它的优化点,说清楚即可。

Java Core方面:

这里给出些诀窍:

  1. 能结合ConcurrentHashMap的源代码,说出final,volatile,transient的用法,以及在其中如何用Lock对象防止写并发。
  2. 结合一个项目实际,说下设计模式的实践。

多线程方面:

能说出Lock或volatile等高级知识点的用法。

  1. 这块最取巧:说下GC的流程,以及如何通过日志和Dump文件排查OOM异常,如果再高级些的话,说下如何在代码中优化内存代码。

诀窍点归结成一个:能结合源代码或项目实际,说出些比较资深的问题。

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

这块好准备,不过话说哪怕这些没回答好,但能证明有相关技能的项目经验,一般也会让过。

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

七. 我面试的感受&听到哪类回答就能证明候选人比较资深

大多数的候选人(大概7成)直接就来了,不做任何准备。要知道,面试和项目其实有些脱节,哪怕项目做得再好,不做准备照样通不过,只要我确认过这类人确实无法达标,我拒掉他们没任何心理负担,谁让他们不准备?

还有些候选人态度很好,明显准备过,但没准备到位,比如像刚才所说,只准备了算法,或者在Java Core方面,只看了集合方面的面试题。对于这些同学,哪怕是过了,我也会感到惋惜,毕竟如果面试好些的话,工资也能更高些,至于哪些过不了的,我敢说,如果他们准备过,估计就不是这个结果了。

其实我也知道,人无完人,哪怕我自己去面试,也不可能面面俱到,所以,我不会要求候选人什么问题都能回答出,甚至大多答错也没关系,只要能证明自己的能力即可通过面试。

我也和不少面试官交流过,根据我们的经验,如果候选人能说出如下的知识点,即能证明他在这个领域比较资深了,在这块,我可能就不会过多地问问题了。

写在最后:欢迎留言讨论,加关注,持续更新!

最新文章

  1. js 表格实现
  2. [转]七天学会NodeJS
  3. TXT导入出现乱码
  4. Android设备上i-jetty环境的搭建-手机上的web服务器
  5. 【感悟】看Hyouka的感想 (1)
  6. Asp.net实现在线人数统计功能代码实例
  7. php __FILE__,__CLASS__等魔术变量,及实例
  8. hdu1372 Knight Moves BFS 搜索
  9. 前端到后台ThinkPHP开发整站(7)
  10. 【jQuery】(5)---jQuery CSS
  11. 牛客网练习赛7-B-购物
  12. iOS开发-简单抽奖
  13. Windows键盘消息处理
  14. windows分区
  15. C++ error C2440: “类型转换” : 无法从“std::vector::iterator”转换为“
  16. 【hdu4347】The Closest M Points 【KD树模板】
  17. 求证:a^4+b^4 ≧a^3*b+a*b^3
  18. List ArrayList LinkedList 集合三
  19. IDEA 跑spring项目找不到get,set的问题
  20. MySQL学习思维导图

热门文章

  1. Druid Monitor监控Java Web和Java SE项目
  2. 使用 mencoder 制作幻灯片
  3. 【leetcode】509. Fibonacci Number
  4. Flutter 获取网络数据及渲染列表
  5. 小程序签名MD5加密
  6. Allegro静态铜皮避让问题
  7. Oracle中替换字符中空格、制表符、换行符、回车符
  8. Packages window(包窗口)
  9. zabbix案例实例
  10. 【机器学习】sigmoid函数求导 手写过程