曾经有个段子,“面试造火箭,入职拧螺丝”,其实还是挺形象的。
招聘的目标的是找到能力和意愿满足要求,气场相和,未来可以一起克服困难、交付项目的团队伙伴,因此面试时设计的题目,主要意愿在于从候选人中筛选出满足要求的伙伴,而不是为了刻意增加难度,为难小伙伴。
程序员的圈子不大,风水轮流转,说不定哪天就会遇到熟人,没有必要为自己培养仇人。
因此选择的题目可以支撑筛选出潜在的团队成员即可。
在程序员必备的面试技巧中列举了一些常见的话题,这里引用一些,比如:
- JVM是做什么的,和业务应用之间的关系。
- JVM和Java语言之间是什么关系,比如版本兼容性等。
- JVM的常见选项,比如运行时编译器、垃圾回收算法输出的日志,垃圾回收算法等。
- JVM在日常开发过程,生产环境中
- 经常遇到的问题。
- 处理相关问题时常用的工具。
- 常见思路和方法。
- 个人处理的问题的一个案例。
- JVM调优时的常见思路和方法。
- JVM的内存分布。
- JVM的常见垃圾回收算法,各算法的特点,使用场景。
- JVM运行时输出的GC日志的使用方法。
- JVM运行时输出的crash日志的使用方法。
- Java对象的生命周期。
- Java对象占用空间的特点,评估方法。
- Java类的加载机制。
常见一点的问题,比如:
- JVM的堆、栈,有什么不同。
- Java的堆内存、堆外内存,使用场景有什么不同
- Java的内存泄漏,是什么表现。
- HashMap类为什么是线程不安全的。
- HashMap和HashTable有什么不同。
- StringBuilder和StringBuffer有什么区别。
- String类为什么是不可变的。
- Java的线程有哪些状态。
- Java的锁有哪些种类。
- Java的线程池的工作模式。
- Java的线程类的常见方法,哪些方法不推荐使用,以及为什么。
常见开发框架的相关问题,比如:
- Spring框架的用途,常用注解,曾经遇到过的问题以及如何解决的。
- SpringBoot的用途,使用方法,曾经遇到过的问题以及如何解决的。
- SpringCloud的用途,常用组件,各个组件的用途,曾经遇到过的问题以及如何解决的。
- Tomcat的用途,使用方法。
- Lombok的用途,及使用方法,曾经遇到过的问题以及如何解决的。
- 单元测试框架的使用方法。
其它发散一点的话题,比如:
- 使用浏览器时,在地址栏输入URL后回车,发生哪些事情。
- 在数据库客户端输入SQL,点击执行,发生哪些事情。
以我个人作为面试官的经历看,前述问题会依据候选人简历的情况,面试的状态,随机挑一些问题来交流,交流过程中依据候选人表现,可能会增加一些难度。
在交流过程中,主要观察候选人的表现和状态,对于候选人的回答是否准确,则不会特别刻意关注。
对于新手而言,基本以背书为主,如果背不上来,则说明准确不充分,会影响招聘时的排序;完全背不上来,则影响印象分。
对于老手而言,则关注其工作经历是否真实,对于题目的个人理解,是否具备个人的思考能力,有没有背书,其实不关键,没有必要抠细节。