创业干货|腾讯架构师:程序员招聘与面试的正确姿势
创业公司如何招聘程序员有多难?
我们每招聘1个程序员,几乎要看100份简历。
梅沙科技的技术合伙人Martin来自腾讯,是BLUES以前在QQ秀产品中心的同事,高级架构师。
这篇文章来自Martin多年来面试程序员的经验总结,也有梅沙科技程序员Mask、Lemon一起作为面试官参与面试之后的总结思考。
Martin把这份开发团队的招聘文章写完,发给BLUES的时候,顺便说了一句,做好了被喷的心理准备。
这年头,观点比较鲜明的文章总会有不同看法,这是正常现象,正如互联网公司不可避免的进行需求PK。
其实,每个创业公司的奋斗过程,都不容易,我们想把在这个过程中的探索进行总结分享,但愿对更多的创业团队有帮助。
这篇文章,就是梅沙科技在创办4个月以来的开发团队招聘实录。
在团队组建过程中,产品经理的招聘,相对顺利。程序员的招聘,则经历了所有创业团队遇到的各种困难,并且,我们还是在一个办公地点相对偏远的创意园区,所幸,在坚持质量第一的前提下,我们的招聘进度符合预期。
对加入梅沙团队的每一位同事,都很感激,在团队还很小的时候,能加入进来,一起做一件对教育有价值的事情,但愿更多的小朋友都能在梅沙教育体系下快乐成长。
从5月份招聘以来,直到8月上旬,招聘历时3个多月,后端开发的招聘比较幸运,很快就招到,或许也是因为我们的技术合伙人Martin本身是后端开发,他在招聘过程中的面试官评价,一直获得应聘者很高的认可。
前端开发,是简历少,人难招。
iOS开发,简历很多,但简历质量不高。或许因为前两年的APP创业大潮之下,很多程序员开始走上iOS开发之路,不少新的程序员也选择了iOS之路,今年创业遇冷,不少iOS程序员被释放出来。
下面从技术面试的每一关通过率和每一关具体的评价情况进行统计分析。
简历:不过关的五大原因
梅沙科技目前的简历来源:BLUES的公众号、拉勾网、100offer。
iOS的简历比较多,最终应聘成功率是1%。前端应聘简历少, 相对的应聘成功率高一些3%。
这里的成功率是用招聘成功人数除以简历数。
程序员招聘的流程如下:
(1)简历筛选
(2)电话初面
(3)技术基础面
(4)第二轮技术面
(5)产品/ui 沟通
(6)HR面试
(7)CEO面试
iOS岗位从简历筛选到面试情况的统计情况如下:
前端的从简历筛选到面试情况统计如下:
从最终通过率来看, 前端的通过率是比iOS要高的。 原因是前端的简历确实比较少,我们只能尽量从可培养性方面考察。
简历不过关的五大原因如下:
上面的简历筛选中,包括iOS与前端, 大体类似。 前端的简历,转专业的情况比较多,下面也作一个专业上的统计。
前端简历按专业统计
前端这个岗位有个特点, 应聘者中有20%的人是先从事过其它行业,如化学、机械、电子等, 再通过自学或者培训转业到前端开发。
从总体的面试结果分析, 一般计算机科班出身的人无论从基础上还是深度上来说,都会比非计算机专业的应聘者要优秀。当然,也有非科班出身的牛人,只是概率比较小,所以从所学专业来看也可以从一个角度反映出简历的水平。
电话面试:项目描述不清是主要失败原因
基本问下工作经验,沟通是否顺畅。
项目描述是指, 面试的时候让应聘者描述自己做过的项目,自己在项目中担任的角色和职责,自己在项目中做了什么,有什么效果。一般对自己所做的东西描述不清楚,我们就不考虑了。
技术面试:体现核心能力
基础面与二轮技术面,问题有交错,放在一起,下表是未能通过技术面试的主要原因。
技术能力是首要的条件, 如果这个都不满足,基本上不用考虑了。
至于怎么判断是否有相关专业的知识,具体分岗位来描述。
每一个岗位都有一个对应的知识栈。
这里就后端、前端、终端来分别列举一下知识点。
计算机基础知识
无论做前端、后端,还是终端。如果有扎实的计算机基础,如进程与线程知识,TCP/IP协议,数据与结构等,那会是很大的加分项。
有很多人认为计算机基础知识只是做后端,做服务器开发的人才需要,像前端开发,根本不需要,这是绝对错误的。
对于只应付日常业务编码的普通工程师来说,扎实的计算机基础知识,是锦上添花的东西,但对于优秀的前端工程师来说,基础知识是必不可少的。
操作系统的基础知识 ,能更好的掌控代码, 避免性能上不必要的开销, 或者对其有所警觉, 同时也能避开一些逻辑上的问题。
数据结构和基本算法
清楚特定的基础数据结构的可以处理的问题, 如果已经知道这些算法,那可以跳过很多耗时的技术选型阶段,这就是知识的广度带来的优势。
网络协议知识
TCP/IP等网络协议知识,到应用层的HTTP/HTTPS等,对这些协议的深入理解,可以解决web页面在移动网络下的访问耗时长等疑难杂症,提出优化方案。
一般来说,做后端要求对计算机基础知识掌握得非常扎实。才能应对像编译、网络连接、高并发访问下的各种问题与疑难杂症。
后端程序员面试点
操作系统基础知识
文件系统、任务调度、内存管理,进程与线程、进程间通信以及同步,锁等知识必须要有。
基础语言
一般要求有C、C++基础,精通如但不限于C/C++/PHP/Java/Go等至少其中一种后端语言
扎实的网络协议知识
TCP/UDP、HTTP、HTTPS协议,Linux网络编程
存储数据库知识
包含数据库原理,sql语句的使用、优化。积累搭建mysql和运维mysql的经验。
数据结构知识
不要求能写出RB树的算法,但对常用的排序要熟悉。熟悉常用软件设计模式
熟识常用的框架与组件nginx, mysql,redis等
实际的项目经验
能分析出系统各个模块的关系,为什么这样设计。系统瓶颈在哪里,如何优化性能
前端程序员面试点
主要分为两大部分:前端代码技能部分(html、css和javascript),前端架构部分(构建工具,新生框架,优化以及安全性)。
如果把一张网页比喻为一栋楼房,那么html相当于搭建一个主体结构,css相当于来做粉刷,javascript发挥的作用就是类似于水泥的粘合剂。其中任何一个环节出现问题,都会可能导致房屋出现问题。
html基础,如各种Element的含义和用法。
dom结构与事件模型。
css样式部分
得熟悉最基础的布局方式和一些常用定位的作用和区别和css的一些常用的选择器以及选择器的权重,另外就是css的浮动部分,掌握浮动的应用场景和消除浮动的一些常用方法。
看是否熟悉响应式布局这块,对最新的css3的知识掌握熟练程度以及移动端这块的经验,这块属于面试之中比较看重的一块,css3中出现了很多的新的浏览器特性和效果,使用熟练程度之余还要知道它的兼容性。
javascript基础
理解闭包的概念和用途,原型链和继承的概念。
网络基本知识像HTTP协议,Get/Post的区别与联系。
前端与后端交互的数据格式Xml/Json等。
进阶部分包括得熟悉使用javascript的流行mvvm框架(vue,angular,avalon等等)其中的一种到两种,构建工具(webpack,fis,gulp等等),以及系统后期的一个优化过程(包括静态资源压缩,合并,按需加载,分流)
前端安全这块的知识,如跨域机制,CSRF/XSS 漏洞等知识以及如何防范。
客户端程序员面试点
首先要对系统如何启动App,App如何运行有一个整体的了解, 这里就包含App启动过程,沙盒机制的目的,实现原理等。
App说到底就是一个可以运行在手机操作系统上的程序与资源的集合,所以对于操作系统中进程与线程的知识点,App怎样处理图片与外部网络资源,也要有一个整体的认识。
再有就是App界面布局和交互的知识。以iOS为例,要掌握:语言基础包含OC,Swift,至少精通其中一种。对象的生命周期,面向对象思想。
App界面知识点,自动布局, 自开发组件。和UIView,UIControl,UIScrollView,UIViewController等核心类型的概念和关系。
App屏幕旋转及屏幕适配,触摸、手势、加速计的使用。
手机功能,定位、电话、短信、邮件、日历和通信录的操作知识。
网络协议HTTP/TCP等基础知识,Socket/CFNetwork/NSURLConnection等类的使用
代码管理如Git/Svn的使用,开发测试流程,Bug管理,打包上架到苹果审核发布等知识。
常用类库框架UIKit/Foundation/MapKit。
热门技术如微信支付/友盟分享/第三方统计等的使用和注意事项。
性能调优方面,内存泄漏、网络流量、耗电量方面的优化知识,Analyze的使用。
程序员的进取心
除了自己工作上用到的知识, 对业界新动态,新技术也有所学习和了解。
这里涉及到业余时间怎么安排分配,如下班后,就只有在家里/寝室通宵玩游戏,看电影,从来没有想过要为自己的发展加一把油,充电学习的人, 会被判断为没有进取心,得过且过的人。
当然,不是要求没有娱乐,从不休息,但至少有过学习的安排,所谓学无止境,没有人敢说自己的知识是足够的。如果只靠工作时间学习充电,是没有多少时间去深入反思和总结的。
尽量要避免的减分项
在约定好的时间下,面试迟到。
在面试场景里, 如果见面是给面试官的第一印象的话, 那么是否能准时是给面试官的第第一印象。参加面试不准时,留给人的评判空间有:
不尊重面试官。时间对真正想做事情的人来说,是很宝贵的,面试者迟到,其实是浪费了面试官的等待时间。虽然这时候面试官也可做工作上的其它事情,但时间也是碎片的,而且不能投入。
参加面试都不能按时,那么以后的工作任务也不一定能按时完成。参加面试是获得工作机会的一个相当重要的步骤,不准时参加面试,要么是没有分析能力,不知轻重,要么是时间把握能力太差。
所以说,尽量不要迟到。可以提前些时间出门,避免交通堵塞等意外耗时。
万一真的是迟到,怎么办。有如下补救方法, 提前告知会迟到,让面试官可以做其它事情;见到面试官后, 要表明一下歉意。这样给人的感觉是有时间观念的,不至于被扣分扣得很么严重。
如何找到面试的地点,这其实也是一个考验。如果连找一个地点的能力都没有,那如何做好工作上的事情。
曾经遇到一个面试者, 直到约好的面试时间,才打电话来问,坐车到哪一个地铁站。过一会又打电话问,到地铁站后从哪个出口,坐哪一路公交车到哪一个站。
这种问题相当低级,完全没有一点准备,如何放心让这种人去做事情。
解决方案是:提前查好路线,规划好时间。像坐什么车这种事情,自己动动手指在地图上搜索一下的事情就真的不要打电话问了。如果确实找不到地点,可以打电话表明一下自己的歉意,寻求面试官(或公司招聘联系人)的帮助,因为面试官没有义务为你指路。
面试姿势不正
面试毕竟是一个比较正式的会话场合,坐姿和行为举止都需要有分寸。 如果应聘者坐姿不正,对面试官不尊重,那么这场面试基本没戏了。曾遇到个应聘者,工作5年,一副老成的姿态,本来工作经验和知识尚可,但行为和表现非常没有分寸,除了坐姿不正,空隙期间还翻动办公室器材。兄弟公司团队的人都看不过去了,结果自然是让他回去了。
跨岗位面试看缘分
这个包括与产品经理、u设计师、测试等相关岗位的沟通, 通过之后,还有hr面,具体就不细讲了。
基本要求
三观正常,为人正直,诚信。 身心健康。如果年轻、热情有朝气,当然更受欢迎。
写在最后
有句话说招聘就像相亲一样,很难找到合适的。的确,从应聘方和招聘方来说,要找到合适的公司职位/候选人都不容易。虽然像BAT这样的高帅富很容易吸引大批人才,但要在上千的应聘者中挑选出合心意的人才也要花费很大的成本。招聘说到底是信息匹配的过程,如果能做到信息的透明化,做到精准匹配,当然可以节约大量成本,也有招聘网站在做,但实际上依然很难做到完全匹配。
另外一点,无论从应聘方还是招聘方,要收获到高质量的职位或人才,都要不断的提升自己的价值,符合对方的标准,才能达到自己的目标。