跳槽这件事情,每时每刻都在身边发生,送走了老伙计,迎来了新伙伴。在新老交替中,面试环节必不可少,这也是最让人头疼的,能遇到一个让人满意的候选人,犹如炭中取栗,很难!!!
面试结果是双方决定的,你看上候选人,觉得他和当前职位特别合适,可惜他只是来练手的。
作为面试官这一方,经过这么久的面试经历,我总结了以下几条,如果都能满足,那就可以十拿九稳拿到高offer。
工作经历
一般面试的开头,都是让候选人自我介绍,还是介绍最近所做的项目。
这个环节可以考察两点:
1、沟通表达能力,候选人能否清晰、准确、简练的介绍自己和项目。
2、业务理解能力,候选人能否用简短的几句话,介绍项目的实现架构、业务模型、以及所使用的技术栈。
遇到过不少候选人,简历上写的一堆项目,大部分都是参与开发,深入问一些细节问题,就开始支支吾吾,把锅甩到队友身上:这块功能是xxx开发的,具体细节我没去了解过。
没去了解过,你写在简历上就是你的了?
编程能力
手写完整的简单算法,当然了,算法题不会太难,不要总想着手撕红黑树,一般5到10分钟可以完成,如果这个都不能胜任,基本上就see u again了
写出来之后,需要能够非常清楚地讲清算法思路,分析算法空间、时间复杂度,是否还有可优化的空间,如果有,怎么优化。
Java基本功
Java基础是否扎实,从简单慢慢深入,有些毛脚候选人,在简单的部分就跪了,比如
HashMap和HashTable有什么区别,很简单!但就是不知道。
但是,大部分能够通过简历筛选的,都可以走的比较远。
一般,我会侧重考察线程池的相关原理,因为其内部实现涉及到了很多并发相关的知识点。能够把它的实现原理讲清楚的候选人,其它方面也差不到哪里去。
除了JDK相关的考察,JVM的也是必不可少,这方面的内容,我一般不会问的特别细致,没有必要,主要提问三个问题:
1、讲讲你对JVM的理解,越多越好。
等他讲完,大概就能够知道他对JVM的了解程度了
2、是否有过JVM调优经验
3、是否遇到过GC问题?你是如果解决的?
对于2、3问题,就等于在考察候选人的实战经验,包括解决问题的能力
问题解决能力
这是一个开放性问题,自己所负责的项目中是否遇到过什么问题,或者是故障,如果查找问题,如何解决问题。
可以考察候选人思路是否开阔,能否从本质上解决问题。
系统设计
如果候选人独立负责过整个项目的系统设计,系统架构、设计模块的选型,这对于面试结果来说,绝对是一个加分项。
一般会从以下几个方面考察:
- 可用性
- 可扩展性
- 性能
- 安全性
- 大数据量
- 高并发
- 分布式设计
学习能力
为了考察候选人的潜力,一般会这样问:
- 最近在学习哪方面的东西
- 具体怎么学习的
- 学习过程中,有遇到什么坑
- 学习这些东西,主要解决了什么问题