缘起
十多年前,进入软件开发开发,这么多年,亲历了中国科技的强大,也经历了软件行业的发展。刚入行时,初入的是一家美资企业,老板是一位美籍华人,号称参加过美国的星球大战计划,当时他带着一批很有特色的迷你机箱,抱着要构建下一代互联网的雄心,开发着一套大而全的办公自动化系统,披上中国传统文化周易的外衣,开始了一段艰难的创业征程。
当时,主流开发的还是基于C/S,我的软件开发,也从作为这个办公自动化系统的一个模块的企业及时通讯项目开始了。看遗留的古董代码、寻求新的开源项目,人员来来往往,过了不到一年, 我成了这个项目组的组长了,也就差不多一年时间,我就跟着HR就到人才交流会去招聘新人了。顺利的招聘到两个小弟之后,一家大型的公司电话给我,约我去笔试面试,然后我就择木而栖了。
新到的这家公司实力比较雄厚,本身并不是开发软件产品,我所在城市只是其站点之一,我所在的IT部门开发的软件也仅是供整个公司的全球站点来使用,我进入的部门正开始导入一个大型的商业软件,而我是做个这个项目在这个站点的第一位员工,加上学习和熟悉项目,大概不到半年,就参与这个项目的人员招聘了。
一晃十多年过去了,回头看看,虽然招聘的规模都不算大,但扳扳指头算算也主导了几十次的笔试,参与了上百次的面谈,招聘的岗位基本都是Java开发相关,适逢最近又频繁的进行了多场的笔试和面试,而且这么多年,自己也应邀参加了一些笔试和面试,细细琢磨也有自己的一些心得和想法,记录为文字,供读者飨。
招聘的形式和流程
这个其实大部分的公司都大同小异,在我所经历的招聘中, 主要分为两种状况:
- 集中式招聘,在毕业季举行,主要针对的是应届毕业生。
- 需求式招聘,因为项目人力吃紧或是有人员离职, 补缺口, 这个视团队的状况和需求, 主要面对有一定经验的人员。
流程上,基本上是 :
- 简历收集
- 简历筛选
- HR沟通
- 笔试
- 面试(用人单位)
- 二面 (HR和高层主管)
在这个流程中,在某些特定状况可能省略笔试, 相关笔试的一些测试适当就汇总到一面中。
简历的筛选
现在简历获取的方式逐步的电子化了, 也有很多比较好的求职平台,类似 51job, 猎聘, Boss直聘等。
对于一份求职Java开发的简历来说,关注的两个主要部分就是学历和经验了。根据职位的要求不同,侧重点会略有不同。 初级的职位, 组织内有资源和时间进行培养则着重看重学历和学校;当招聘一些高级开发职位, 而且是项目人员比较紧缺的时候则除了学历也会对项目的相关经验比较看重。所以,对于一封Java开发的简历来说, 最好包含:
- 学历的详细信息。最好是计算机和信息相关的专业。如果是其他专业转行的, 最好有一些培训的经历。
- 合适的项目经验。简历上的项目经验不能没有, 但也不宜太多。时间太短的(比如不超过一个月的)或者自己不太熟悉的就要考虑考虑是否要写上去。一个项目经验要简单描述业务逻辑,重点标明自己负责的部门,对整个项目的技术展也需要进行列出。
另外, 年龄和性别等基本信息务必确保正确。
关于笔试
Java笔试主要考察Java基础以及一些核心知识,试题的形式主要有:
- 单选题
- 多选题
- 问答题
- 上机测试题
这几种试题形式会根据需要进行组合, 比较标准的是单选+多选+问答,一般会涵盖到Java的基本语法、核心功能、Java 8 新特性等,像 Lambda 表达式、JVM性能调优、线程等是一些高频的考核点,另外也会有一些逻辑运算题。 也有的场景会使用单独的一种,比如资深人员招募会出题量超多的问答题。
这里举两个实际的例子:
- 资深人员招募试题
30+ 道问答题。 考察应聘者的知识广度和承压力。 考察的知识点包括:
- 语法和运算符
- hibernate ,mybatis
- Spring ,Spring Boot
- Zookeeper
- Dubbo , Spring Cloud
- Elasticsearch ,搜索引擎相关
- Memcached
- Redis
- 关系数据库, 事务, 安全等
- 线程
- 异常
- OAuth
- Linux
- Node.js , Vue.js, Rect.js
- 通用招募试题
- 单选题 , 10 题 , 考核点: super 关键字、代码分析、代码补全、抽象类和方法、继承、CSS、线程、包、类型转换、逻辑符
- 多选题, 5题。接口、对象序列化、JDBC、Spring配置、Spring上下文。
- 问答题 , 10题。Java内存、异常结构、Lambda、线程、安全、代码调优、反射、设计模式、跨域、逻辑题。
很久以前, 笔试还是使用纸质试卷,现在也逐步的无纸化了, 现场或是远端的在电脑前完成, 通过一些监控确保是没有作弊的状况下完成。
面试
这里的面试主要指的是一面, 这个部分由用人单位的直属主管、技术负责人或资深工程师参与。此部分之后的二面由HR 和高阶主管进行。
这里主要说说一面的一些状况。面试的时间一般是一个小时左右, 开头不可避免的会进行自我介绍,可能会问一些个人相关的问题, 比如家庭状况,婚否? 是否有谈对象,居住地,求职的原因和意向等等。
一面最主要的是对项目经验的真实性和细致性的问询, 对于无经验的状况则主要会问一些知识性的问题。从简历描述的项目经验中找一个面试者最熟悉或者最满意的进行询问, 从业务逻辑开始,一直追寻到细节, 比如问到项目的性能调优部分, 就会问怎么发现的问题、调优的思路怎样,调优的具体参数是什么样的, 这些问题有的很随机,如果面试者对于一个问题卡住了,可能会转换一个方向,如果第二个的问答再不着边际, 基本上就宣告Over了。
另外在项目的部分,也会问一些加分的问题, 比如:
- 你觉得这项目有什么改进的地方吗? 你有向主管提过这些问题吗?(考察潜力)
在一面中, 有时也会问一些开发性的问题, 比如
- 你的同事关系怎么样? 他们怎么评判你?
- 你最有成就的事情是什么? 为什么?
在Java面试过程中, 性格内向或外放没有绝对的好坏,很根据岗位的不同要求不同, 当要求有和用户沟通需求的工作内容时,会选择外放一点的; 当要求是纯代码开发居多, 则会考虑选择沉稳和深究型的。