临近年关,今年面试跳槽的人特别多,关注个人朋友都知道我不轻易作分享,由于这没有标准答案,见解也因人而异。但我发现有些面试问题还挺广泛的,今天就说说我作面试官这几年的经验,从面试官的角度去看面试,但愿对在准备面试以及想要提高的程序员们有点启发,如下仅是我的经验总结:程序员
阅读候选人的简历,这是招聘流程中的第一项工做。候选人的简历各式各样,工程师们通常都比较忙,如何快速的阅读简历又不失重点呢?我根据本身的经验总结了几点,供你们参考:面试
首先,对于候选人来说,大公司的工做经历是很重要的能力,并且级别越高能够粗略等同认为越优秀,虽然也会有个例,但通常状况下,阿里 P8 要比 P7 技术能力优秀,百度的 T7 要比 T6 优秀。可是这种状况只针对大公司,对于一些小公司,Title 并不与能力划等号,小公司技术总监的技术能力不如大公司的一个普通的资深工程师的状况也是常有的事情。算法
其次,有比较有技术含量的项目经历,我发现有不少工做年限比较长的候选人,简历十几页,项目大大小小几十个,而不少项目都是 3,5 个月就作完,用到的技术也比较重复、浅显。对于候选人的技术积累来讲,10 年的经验跟一年的经验差很少,因此项目不在多,而在于能提现候选人的技术能力。spring
还有,有高质量的开源项目;项目背景比较切合;有在技术网站发表过文章或高质量的技术博客;作过一些业余项目等,均可以做为加分项。编程
有些 JAVA 面试官逢人便问 JVM 几种垃圾回收算法优劣对比,这种文科题目在我看来是没有太大意义的,一方面没有区分度,另外一方便容易突击准备,每每考察不出候选人的真实能力。因此我面试不直接问记忆性问题,也不直接问理论性问题,而是换个问法,将这些记忆性的、理论性的知识融入实践。安全
好比,有些面试官为了考察候选人多线程方面的知识,常常会问到的题目好比 ConcurrentHashMap 的实现原理,volatile 关键词的做用等,我以前也屡次拿这些题目当作过面试题,但总结下来发现,大部分候选人都能答得七七八八,区分度很低。我以后换了一种问法,要求候选人将一个线程不安全的类改写成线程安全的类,这期间涉及到 volatile,lock, 并发容器,Atomic 原子操做,CAS 无锁编程等,发现只有极少部分候选人给出锁粒度小,并发度高的代码,部分候选人在提示下能够解决,一些候选人则仅能写出一把 synchorinzed 大锁的并发度很低的代码。性能优化
事实很明显,那些可以给出优秀答案的候选人,一定是有着实践经验,而且深刻思考过,真正理解的人,而相反,其余人可能只是临时看了几篇技术博客而已。多线程
白板编程外企面试比较流行,国内有些候选人不怎么接受,特别是工做年限较长的,一说要写个代码,求职者就以为是在“羞辱”他,以为不该该从这么基础的问起。架构
不过根据个人面试经验发现,这种拒绝写代码的大龄码农,满嘴架构,高可用,高性能,分布式,每每一写代码就抓瞎,代码写的惨不忍睹。并发
白板编程通常会问哪一种类型的题目呢?举一个我以前常常用的例子:
“写一个函数将 ipv4 地址字符串 (仅包含数字,点,空格) 转化成 32 位整数,另外,数字和点之间的空格是合法的,其余状况均为非法地址,要求输出合法地址的 32 位整型结果。”
这个题目不须要任何的算法背景和技巧,纯粹考察候选人的基本编程素质:逻辑思惟是否清晰,细节是否考虑全面,是否能写出 bug free 的代码,是否有计算机思惟能关注时间空间复杂度等。并且在候选人完成代码以后,我还会要求候选人将代码讲给我听,固然不是由于我看不懂,而是这样还能顺带考察候选人的表达能力,沟通能力,毕竟讲给别人听让别人理解要比单纯本身理解难不少。
咱们常常在网上看到说谷歌,微软等大外企常常会面试智力题目,我认为智力问题不在于候选人最终是否能提出标准答案,而在于提供一个话题跟面试者讨论。考察候选人是不是一个有想法的人,思路是否清晰,逻辑推理能力是否够强,总结能力是否够强等等基本素质。
智力问题最好是比较开放性的问题,必定不要太难的问题,也不要是抖机灵的问题。有不少面试官拿数学难题考候选人,但愿 45 分钟答出来标准答案,这自己就是不可能,除非以前候选人已经看过,这样的问题也就没有意义了。
固然,智力问题也并非适合全部的公司。通常成熟型的大公司,对候选人能够接受比较长的培养时间,并且默认聪明的人学习能力都很强,因此对过往技术经验并不是特别的看中,因此通常喜欢面试算法,智力问题。对于一些创业型公司,更看重候选人的工做经验,青睐技术多面手,来了就能产出,因此就不适合在智力问题上浪费太多的面试时间。
筛选候选人就是筛选未来与你共事的人,因此为了更准确的反应候选人在之后的工做中的表现,不妨把面试当作一场与将来同事的技术讨论,在讨论的过程当中感觉候选人的技术能力。
技术面试就比如打乒乓球,一来一往中感觉彼此的技术实力,面试的过程切忌相似与笔试同样的一问一答单向沟通。特别是一些开放性问题,架构设计的问题,自己就没有标准答案,背景又过于复杂开放,若是只是丢给候选人回答,中间没有任何沟通交流和引导,候选人是很难抓住重点展示出面试官内心指望的表现。
好比咱们面试过程当中常常会让候选人介绍某个项目的架构设计,若是面试官能一语中的的提出设计中的缺陷,或者追问架构中的技术难点,深刻的跟候选人讨论,这样一方面能给候选人充分发挥的机会,另外一方面,也会赢来候选人对公司技术的承认。
相信不少工程师随着面试经验的积累,即使没有通过培训,面试工做也能够作的很是好,由于毕竟优秀的工程师都逻辑清晰思惟敏锐,而对于正在进阶学习的程序员们,则须要经过系统地梳理来提升本身的技术水平和造成架构思惟。
针对当前互联网公司的技术需求以及结合主流技术,我本身整理了一套系统的架构技术体系。很多公司都很重视高并发高可用的技术,特别是一线互联网公司,分布式、JVM、spring源码分析、微服务等知识点已经是面试的必考题,这些东西可能大家平时在工做中接触过,可是缺乏的全面系统的学习,加入资源分享群:854601507,或是关注公众号:Java资讯库,回复“架构”,免费领取架构资料,但愿本文能给你们在成长的过程提供一点帮助。
1、工程化专题
2、性能优化专题
3、源码分析
4、分布式专题