我在阿里做技术面试官的一些经验
我可能是在同龄人中做面试官经验比较丰富的,在某乎实习的时候就参与了前端的技术面试。后来在阿里以及另一家公司也面试过不少候选人,校招、社招、外包都有面试过。这里以一个面试官的角度来给大家谈谈在面试的时候怎么能给面试官留下更好的印象,更容易拿到大厂的Offer。为了不造成任何面试题泄露,这里我不会涉及到任何具体的面试题。
社招和校招的面试重点
社招其实和校招的面试重点有一些区别,以前端为例,社招更看重对前端技术体系的深入理解,以及解决问题的能力。比如对React的实现原理的理解,性能、安全等方面问题。为了避免泄题嫌疑这里就不举具体例子,具体大家可以自行搜索一下。
社招的通常简历中会有很多项目经历,面试官也会挑一两个项目问的比较深入,所以写在简历上的项目一定要自己有比较深的理解,不然面试的时候深入问一下答不上来就会非常不好。
相对的,校招更看重的其实是基本功和学习能力(或者说是潜力)。前端知识更多会考一些基础的JS和CSS,框架的原理方面不会问的很深,数据结构和算法、网络协议等会问的比较多,如果有靠谱的项目/比赛经历也会是考察重点。
还有比较敏感的学历问题,坦白说,如果一个HR/面试官要从成百上千的简历中初步筛选,是没有精力一个个认真看的,学历作为一个重要指标这个时候非常值得参考。而实际情况也是高学历的候选人大部分时候会明显强于低学历的候选人,即使一些人的简历看起来非常华丽。
大厂的面试流程
一般阿里腾讯这样的大公司,校招面试的流程是一轮统一笔试+三轮技术面试+一轮HR面试,如果对候选人的水平有争议,技术面试有可能会增加一轮,以2019年春招(实习生招聘)为例:
- 统一的笔试。
- 技术初面,一般这一轮都是由你将来同一个团队的比较资深的同事来面试
- 技术二面,一般是由你的未来主管面试
- 技术交叉面,一般是其他事业部的主管面试
- HR终面,非技术问题
对应届生来说,大厂统一校招前,如果你想进哪一个,一定要关注一下他们的内推信息。内推一般都不用笔试,可以直接参加面试。而且一般内推和统一招聘是分开的,也就是内推挂了依然可以参加统一招聘,多一次机会。当然内推具体会不会影响统招,还是要让内推人确认下。
这里说一下实习生的春招和秋招,春招和秋招都是招第二年毕业的学生,区别是春招签的是实习Offer,秋招会签正式Offer,所以区别大家应该懂得(春招不一定能转正)。
社招一般也是三/四轮技术面+一轮HR面,不过社招很多时候会有一轮是级别比较高的人(总监级)人来面试。
面试前准备
首先在面试前一定要花一些时间进行准备,特别是常见的比较典型的面试题要准备一下,避免由于长时间没有接触某一类知识而在面试的时候发挥失常,比如计算机网络、常见的算法等。大部分面试问题都能在网上找到相同类型的,但是想全部找到原题一边不太现实,很多面试官都会有自己准备的题目。比如我在每一次大规模招聘开始的时候,都会花一些时间自己准备几个题目。
然后就是简历一定要认真写,重点突出,最好一页就能写完。三四页的长篇大论一般我都不会认真看。简历中写上去的东西,一定要诚实,不懂得别乱写。技术面试至少有一轮面试官会对着你的简历来问的,如果写的精通实际却解释不清楚,会给面试官非常差的印象,降低整个人的信用。所以简历中写道的项目,如果是很久以前的最好自己再回忆整理一下。
既然简历不能写的太长,那么哪些东西写上去会让面试官特别感兴趣呢?
- 大型比赛获奖
- 靠谱的项目/实习经历
- 开源项目经历
相对的,有一类简历写法会让人比较反感,就是把各种技术名词罗列出来写成一长列,全是熟悉/精通xxxx。不是不能这么写,而是不能写的特别多。没有哪个人是能全部都精通的,如果你这么写了,面试官随便挑两个问一问结果答得不好,那么会觉得你精通的都这个水平,其他肯定更不怎么样。
面试的时候的一些建议
面试官和候选人从来不是对立关系,作为面试官非常希望候选人特别优秀,最好面一个人就能直接通过,没有人想在低质量的候选人身上不断浪费时间。所以面试的时候一定要心态放好,不是去被刁难,而是平等的交流。这里说几个我认为比较重要的点:
- 诚实,确实完全不懂的就直接说不知道,不要装也不要编,面试官的水平一般远高于你,很多时候你以为忽悠过去了,其实面试官只是懒得跟你解释太多而已。
- 主动发问,如果解决一个问题的时候有一些疑问或者不懂的地方,可以主动问面试官,一般都会给你一些提示。甚至有的题目专门会留一个模棱两可的条件就是希望你能问出来的。发现并提出问题的能力也很重要
- 不怕错误,不要放弃,即使上一个题目完全错的离谱下一题也要认真对待
- 不要刻意套近乎,我就很反感上来一口一个“哥”,甚至打听面试官私人问题的
作为面试官,绝大多数人一般都是非常友好的。很多时候一些比较难的问题,都会先抛出一个相对简单的,候选人解决完之后会提出下一个要求,比如限制条件再解决这个问题,或者指出你的实现方式存在的问题然后问你怎么解决。好的面试题通常不是一上来就特别难,而是看起来不算太难,但是随着面试官逐步引导追问会变得越来越难。
很多时候一个复杂的问题在面试的时候本来就很难用一两句话描述清楚,这个时候面试官很可能会故意只进行粗略的描述,希望候选人在读题的时候能自己发现问题并提出来。如果你感觉一个面试题有模棱两可的地方,一定要主动提出来,能给面试官留下很好的印象。
面试的时候不要因为某个题目犯了严重错误就自暴自弃,后面不专心答题了。一个题目结束后调整好心态进行下一题。没有哪一个面试官会因为某一个题目而一票否决候选人,都是面试结束后根据候选人的综合表现来评价的。所以心态放好,即使个别题目错误的离谱,整体评价依然可以做到比较好。
面试结束的时候应该问点什么
一般面试快结束的时候,面试官都会问你有没有什么问题想问他的?很多人在这个时候手足无措不知道问些什么好。其实很多问题都可以问,比如:
- 团队的一些技术栈和所承担的业务
- 如果通过了未来的工作主要是做什么?
- 有师兄师姐带我么?公司有没有一些系统的培训?
- 甚至可以问一些学习的方法
但是切记有一个问题不要问,就是“我能通过这次面试么”,这个问题非常不适合在这里问,不通过的一般也不好当面说,能通过这一轮面试的一般也会其他候选人综合对比,或者有下一轮。
面试结果?
面试结束后,如果通过了,正常都会在一周内有回复的,如果等了一周也没有见到回复,那么最好问一下面试你的人,虽然八成是没戏了。如果没有通过面试也不要太灰心,可以加一下面试官的微信,或者让他帮你拉群。很多团队自己为了以后方面抢人,都会有一些招聘群,加进去方便下一次有机会的时候能获得第一手信息。
面试官面试的时候在干嘛
这个比较有意思,其实技术面试官都是比较资深的员工,大家平时都很忙的,很多时候面试其实是额外的任务。所以面试的时候,除了和候选人沟通之外,面试官有可能还在同时做自己的事。比如在线编程环节,沟通完题目要求之后,如果候选人埋头写题目不说话,我有时候就会去干别的事,15分钟后才回来看。所以即使写代码的时候最好和面试官保持沟通,说说自己的思路,不懂的地方提出来。不然面试官无聊了可能就去干别的去了。
还有很多面试官在开头会让候选人自我介绍,其实这个时候你只要保持镇定简单说下就好,他八成没听你说的话,正在抓紧时间看你的简历呢。所以我从来不会让人自我介绍,我会在面试开始前先花两分钟看完简历,标记重点要问的问题。甚至个别自己记不清的还要google一下。
最后说一句,无论多少人在说工作难找,优秀的人才总是每个公司都要抢的。
Java程序员如何构建自己的知识体系呢?
一、学会如何分析源码?
大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。因为它是两个原因造成的:
1:我们所有的教育和培训都在强调怎么写代码,并没有教大家如何读代码
2:大多数工作场景都是一个萝卜一个坑,我们只需要了解一个系统的局部便能开展工作,读不相干的代码,似乎没用
所以,要养成源码三问的习惯:
“为什么要有这样的架构”
“他是什么样子的”
“他是怎么工作的”
二、为什么是分布式?
首先需要说明的是,分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看一两本书可能都是不能完全覆盖其所有内容的。
三、微服务为什么会这么火?
相信大家都了解业务越来越复杂,服务分层,微服务架构是架构升级的必由之路,而对于微服务的优点相信大家都不陌生。
比如:易于开发与维护 / 微服务相对小,易于理解 / 启动时间短,开发效率高 / 独立部署 / 伸缩性强 / 每个服务都可以在横向和纵向上扩展 / 微服务架构可以更好将架构和组织相匹配 / 每个团队独立负责某些服务,获得更高的生产力 / 降低尝试新技术的成本......
四、程序员到底要不要学习JVM?
总有人问这个东西好像用不上,于是要不要学这样的问题,然后又总有人担心一直搬砖成天做些重复没提升的东西。
如果你这辈子只甘心做一个平庸的Java码农,那么你完全没有必要去学习JVM相关的知识。
五、被我们忽略掉的工程化专题
在IT产业中,寡头化出现代表着创业公司减少--没人再去用声势浩大的发布会讲故事、没人再去宣传自己拿了多少融资。
这一代中国人自小的教育不比欧美的STEAM,而是重学术、轻手艺。我们往往会为工科和产能过剩画上等号。强大的资本和技术门槛为这些产业蒙上了一层神秘的面纱,让普通人很难真正了解到其中技术和工艺的复杂程度,也就更难明白其中的价值。可正是因为中国的工程化能力,才让我们有机会走到AI时代的第一梯队,而不仅仅是靠学术研究能力。
六、没有高并发经验,想进大公司该怎么办?
假如没有靠谱的公司,接触不到高并发的业务场景怎么办?你永远解决的是小问题,工作10年技术也未必提升多少。
很多程序员也经常找我说,没有经验就没有靠谱的公司收,没有靠谱的公司也就没有经验,我看了无数的书,自己做了无数的实验拼命想找个靠谱公司去深入,但是感觉好难,简直是个死循环
大家都比较关注高并发,原因很简单,想去BAT这样的大公司,你必须要有高并发的经验。今天普及下高并发的知识,希望大家对高并发有一个正确的认识。
七、学习千遍,不如项目实战成功一次
有人说:项目实战相信很多程序员都多少会有的,可是我们这个还要学习什么呢?
我的回答是:那就要看你想不想成为一个架构师了,为什么98%的程序员工作10年,一辈子还只是一个开发者,程序员们都要想一想这个问题,我是不是需要提升了。
我认为,学习项目实战最重要的还是学习项目管理,作为程序员,都应该学点项目管理。
凡事皆为“项目”项目的两类属性(复杂的逻辑,庞大的信息量)
这才是我们学习“项目实战”的终极意义。
现在作为程序员的你,或许想提升自己,却找不到突破口,公司没人带。又或许你已经工作6年了,却还是很迷茫,很多知识都还是不懂,也没有达到自己期望的一个职位,薪资。
相信大家,在学习的路上也遇到了不少的坑,有人放弃,有人坚持,但是我相信作为程序员的你不会想终其一生也只是一个开发,到年龄就会被公司辞退。
所以,大家如果想往技术路上走的,想成为架构师的,一定要保持终生学习的态度,让学习力成为核心竞争力,才能不被时代所淘汰,这里我也分享自己收集的系统的学习资料,和几套学习路径图给大家,真心的希望能帮助到大家。
学习资料获取方式:转发+关注后私信回复【架构资料】免费获取
转发+转发+转发才能领取
架构师面试
学习资料获取方式:转发+关注后私信回复【架构资料】免费获取
转发+转发+转发才能领取
关于HR面试
如果你过五关斩六将,成功地通过了所有的技术面,那么恭喜你,你离升职加薪、出任CEO、迎娶白富美、走向人生巅峰又进了一步。但是还没有到谈薪资待遇的时候,最后还有一个考验:HR面试。基本所有的大公司都有这一轮的面试,不要小看HR面试,很多公司的HR对于面试者都有一票否决权的----即使前面的面试对你的评价再高。
所以,这轮的面试也必须重视起来,HR面试主要问的是几点:
- 简历中写的过去工作经历的离职原因
- 当前公司薪资待遇
- 期望能到怎样的一家公司
- 个人未来的发展方向
我专门提一下第2点。可能有人比较排斥也不想说这个,我个人倒是持开放状态,问了就说了,当然一些的夸大还是必要的,当前公司薪资待遇多报个一千块钱完全没问题(毕竟是一家互联网公司总多多少少有些补贴啊什么的嘛)。因为这和你在新公司能拿到的薪水关系不大,新公司能拿到的薪水的决定因素是整个公司的薪资情况以及根据你的面试情况在公司的定位,都是有固定的薪资范围的。HR问这个主要也就是心里有个数并且看你是否诚信----有些公司入职时会要求你提供最近一家单位的银行流水号。
HR面试就说到这里了,总结起来其实就是四个字:滴水不漏。整个面试过程态度积极向上,不要有任何悲观消极的态度(尤其在谈到以前公司情况的时候,即使有再多的不满),就不会有问题。
关于Java
网上常看到一种说法:Java比较简单。某种程度上这会打击Java程序员的信心----原来咱们平时用的是这种小儿科的玩意儿啊,在我看来这种想法大可不必,这一部分我来讲讲对于这个话题的看法。
这种说法有些片面,得分开两部分来看,我用四个自总结一下就是:易学难精。
1、易学部分
Java易学我认为有两部分的原因:
- 很多培训公司包括大四的学生找工作都会学习Java,绝大多数是因为易学。Java从C/C++发展而来,感谢前人的智慧,它消除了C/C++中最复杂和让人困惑的语法、它消除了平台的差异性、它不需要用户手动释放内存空间、它避免了Java程序员和本地语言的交互,让程序员只需要专注于语法层面和应用层面
- Java作为一门面向对象的语言,在企业级开发中体现出了它无与伦比的特性,整个开发流程比较固定化、模块化,需求分析起来也相对容易。我举个自己以前的例子吧,我在大一学习C语言的时候,用C语言写了一个图书管理系统写了2000行+的代码,大四学了C++之后,用面向对象的语言C++取代面向过程的语言C语言重新写了一个功能相似的图书管理系统,只写了1100行的样子,这就是面向对象的优势
2、难精部分
接着咱们聊聊难精的部分。
Java语言的设计者帮助Java程序员做了这么多事情,这有利也有弊。有利的部分前面已经说过了,让Java易学,不过有弊的部分同样明显。假如在应用运行过程中遇到了语法层面和应用层面之外的错误,应当如何处理?比如线上环境出现内存溢出怎么办?GC时间过长怎么办?IO长时间没反应怎么办?方法抛出莫名其妙的异常怎么办?
凡此种种,绝不是一名只会写几个if...else...的Java程序员就可以解决的,这需要大量的经历、大量的实践、大量对Java底层实现细节的研究,而这往往是最难、最考验Java程序员的部分,一些人根本就不想往深去研究,另外一些人研究了一点点就研究不下去了。
Java为什么难精?就是这个原因。除非你水平特别高,否则五年工作经验以下的Java程序员在简历上写"精通Java"绝对是一件非常愚蠢的事情。
最后
学习资料获取方式:转发+关注后私信回复【架构资料】免费获取
转发+转发+转发才能领取