NiX 作为一个刚刚起步的团队,虽然在理念、技术实力等方面更加先进,但却缺乏一套流程化、规范化的招聘制度。大多数时候我们其实并没有明确的招新计划和相应的实施标准,导致团队难以吸引新人加入,并且在面试时出现了标准不统一、拖延、无法有效确认是否录取等状况。
为了解决以上客观存在的问题,我撰写了本文,作为以后团队招新的标准。如果你是团队负责人,请仔细阅读本文。如果你是面试官,请着重阅读“面试”和“加面”小节。
本文欢迎各位进行完善,根据团队未来的发展进行适当的修改和整理。如有需要完善的地方,请直接向 GitHub 上的项目提交 Pull Request,并在文末贡献名单上加上自己的名字!
招聘流程主要有以下几个阶段:
- 准备:需要进行宣传、新人培养、文案编写、宣讲主题准备等
- 筛选:根据上一阶段收到的简历或作品,筛选出合适的候选人
- 面试:电话面试或者现场面试,根据评分标准给出分数和意向
- 加面:假如上一阶段的面试无法确定最终结果,可以进行加面
- 意向确认:包括团队和候选人双方的意向确认
团队新人的来源有以下几个渠道:
- 熟人介绍
- 计协开发部
- QQ 群宣传
- QQ 空间宣传
- 宣讲会(暂无)
- GitHub/Gitee 项目贡献者(暂无)
根据目前阶段团队的实际情况,新人的来源主要为熟人介绍,这种方式的优点是省时省力省心,不需要做过多准备。但这不是一种可取的招新方式,因为其变数较多,不够稳定。团队应该在每个学年的开始便做好招新的准备,着手编写招新文案(可以重复利用上一年的文案),在文案确定之后,通过新生群、系总群、校总群、技术交流群、QQ 空间等渠道投放,需附上团队接收简历或者作品的邮箱和团队技术交流群群号(589024367)。文案应当简洁扼要,包括团队基本情况介绍、优势、技术栈、理念等部分。
由于团队与计算机协会的渊源,我们应该重点关注计协开发部的成员,通过各种渠道取得他们的联系方式,进行熟悉和培养。对于大一新生,可以邀请其在有空时到团队参观。在某种程度上,团队与计算机协会可以相互进行宣传,比如在电脑义诊的时候,摊位前面可以摆着团队的标记,团队在必要的时候为计协提供技术支持。
团队目前缺少举办宣讲会的经验,所以这方面需要在未来进行完善。宣讲会也是一个重要的招新渠道,在有精力举办的情况下,应该进行尝试。关于宣讲会的形式,可以由团队中演讲能力以及技术能力高的成员针对某一技术编写 TOPIC,在讲解技术的同时宣传团队。
团队后期如果有开源项目的计划,可以尝试在校内进行宣传,假如有项目贡献者,可以从贡献者中招聘新人。这需要有一个熟悉使用 GitHub/Gitee 管理一整套工作流程的团队成员。
筛选阶段只是对收到的简历或作品进行大致的筛选,从而确定候选人,主要应该关注以下几个方面:
- 技术广度:是否乐于探索陌生技术的体现
- 技术深度:是否对于某一方面技术有钻研
- 代码:是否遵循代码规范,代码可读性,代码结构是否清晰
- 个人经历:大学前是否接触过计算机技术,是否有项目经历
- 成绩:对于大一新生,这是一个重要的标准,请不要选择性地忽略
- 年级:原则上,团队主要招新方向为大一和大二学生,大三学生可酌情通过,不招聘大四学生
面试阶段应当包括以下流程:
- 将候选人拉入团队技术交流群(589024367)
- 确定面试时间和方式
- 面试官自我介绍:姓名、年级、专业、技术方向等
- 候选人自我介绍
- 个人经历考察
- 技术能力考察
- 问答环节
面试过程中,面试官应该注意以下原则:
- 优先选择电话面试或者现场面试,尽量不要通过邮件和 QQ 文字交流
- 尊重候选人,耐心倾听,准时
- 切忌聊起技术便滔滔不绝,面试是为了确认候选人是否适合团队,而不是展示面试官的个人技术水平
- 在一些有意见分歧的技术问题上,不要浪费时间企图驳倒候选人,而应该将问题的讨论放到面试之后
- 问题的设计上,应当着重考察候选人解决问题的思路,而不是某一技术细节
- 在候选人遇到困难时,应当适当地进行引导,或者放弃当前话题
- 不同年级的候选人,对于技术的理解可能也不尽相同,所以问题应该作相应调整
- 面试题目尽量选择场景题而不是简单的算法题或者技术问题
在面试准备阶段,请参考该标准设计问题。在面试过程中,请参考该标准对候选人进行评分。该标准为了方便拓展,设计为百分制,分为四大板块。其中技术占比 40%,个人经历占比 20%,个人态度占比 20%,其它能力占比 20%。
说明:由于团队以技术为核心,对于技术能力的关注至少应该占一半,所以其中技术和个人经历部分总占比 60%,而对于一个人的态度和其它能力的考察也是必要的,所以另外两部分各占 20%。
面试官根据候选人所在年级和专业情况的不同,准备适合面试的题目。大致可以分为三档,分别对应大一、大二、大三学生。
-
大一:部分大一新生进入大学之前没有学习过编程,所以着重点应该是课程上学习过的技术和计算机基础,并且考察解决问题的能力
- C 语言基础:包括对指针理解程度、对 C 语言内存分配的理解
- 计算机基础:多久前开始接触计算机、使用计算机做过什么事(折腾硬件、破解密码)、是否能熟练解决一些计算机常见问题(重装系统、解决网络问题)
- 是否在学习其它技术:前端、数据结构等,可以根据实际情况设计问题
- 简单的算法问题:排序、二分查找、计算复杂度等等
- 是否用代码做过什么作品(课设、游戏、小项目),遇到过什么坑
-
大二
- 根据候选人的发展方向选择具体技术问题:Java / .Net / Golang / 安卓 / 前端 / 美工 等
- 数据结构和算法基础
- 对于面向对象和面向过程的理解(拓展:对于面向切面和函数式编程的理解)
- 框架的使用:Spring / Struts / Vue.js / React / JQuery / Bootstrap / Django / Beego 等
- 数据库:简单的增删改查和建表 SQL 语法
- 其它基础技术:NoSQL / Git / Linux / Markdown 等
-
大三:
- 包含以上大二板块所有问题
- 计算机网络基础:网络分层,网络协议
- 操作系统基础:内存管理
- 设计模式
- 网络安全:常见的攻防手段和原理
- 并发模型、抢占式多任务与协作式多任务、IO 多路复用等
以上标准并非每一项都需要进行考察,面试官可以根据候选人的实际情况考察其中的某几项。建议挑选其中的四项,每一项占比 10 分。
- 项目经历:参与过什么项目,在项目中完成哪些功能,遇到过哪些问题,通过什么方式解决
- 学习经历:通过什么学习技术,读过什么书籍,是否习惯阅读官方文档和外文资料
- 个人经历:使用技术做过什么值得说的事(参与开源项目、个人项目、帮妹子解决电脑问题等等)
- 对于技术的热情:是否乐于尝试新技术,是否乐于花时间在钻研技术上面
- 对于团队的热情:是否乐于参与团队事务,为团队做贡献
- 沟通能力:是否能顺畅交流
- 思考能力:是否能通过思考提出解决问题的思路(建议给出实际项目场景,要求给出解决方案,如短链接解决方案、身份验证方案、权限验证方案等)
- 逻辑能力:逻辑是否清晰
- 面试官在面试之后应该向候选人说明出录取结果的具体时间(一般限制在三天以内)
- 面试官面试后立即在团队面试官页面中记录面试情况、细节和评分,具体评分模版和需要注意的点请查看 Pinned 面板
- 通知团队负责人(大三 / 大四 / 在外工作一年的负责人)到面试官页面中查看面试情况,根据团队当前的实际需求,判断是否录取或者加面
- 只有超过三分之二的负责人同意录取,才可以正式录取候选人
如果面试官对于候选人是否适合团队无法下结论,或者团队负责人对于面试结果有疑问,可以进行加面。加面一般由团队负责人负责,尽量选择现场面试,可以多人参与。加面阶段没有特定的标准,主要是根据上一阶段面试的情况进行考察,除此之外面试官可自由发挥,评分标准与上阶段相同,并且也需要记录面试情况。
加面的形式:
- 代码作业,情景题,限时完成
- 现场面试,打码,考察思考能力和学习能力
在确定录取候选人后,应该带领候选人参观团队环境、熟悉团队理念和一些规章制度、并且确认候选人没有同时加入其它组织,确认无误之后才可以正式加入团队。鉴于已经有过确认意向过慢导致候选人加入其他组织的情况发生,请各位负责人和面试官注意:意向确认务必在三天内完成,必须在确定录取之后立即告知候选人!如果无法及时完成,应该向团队负责人和候选人说明情况。团队负责人应该主动监督面试的意向确认环节,否则将对负责人进行追责。
该名单按照字母顺序排序。
- v0.1 2017/12/04 编写文档初稿(GanZiQim)
- v1.0 2017/12/05 新增通过项目贡献者招募新人和与计协合作的构想、添加脚注(wj-Mcat)、对文本进行校验(YXIAOL)
- v1.1 2018/03/20 规范文档格式(GanZiQim)
- v1.2 2018/04/12 使用盘古插件进行格式化,增加意向确认的时限和追责,面试和加面形式小改动(GanZiQim)
- v2.0 2018/04/23 微调面试阶段筛选标准、流程和技术要求,意向确认细化为评估阶段和意向确认阶段(GanZiQim)
学生是最纯粹的兴趣团体动物,追求他们认为牛逼的东西,所以一些人聚集在一起,开始搞事情,队友、朋友和激情是他们之间信任的纽带,也是整个团队能够长久存在的核心。