资讯专栏INFORMATION COLUMN

如何面试筛选出动手能力强的Java服务端程序员

cocopeak / 1695人阅读

摘要:最近要招一名中高级程序员有位同学的面试表现我们几位面试官都觉得不错思维很活跃知识面也还挺广尤其是主动提及最近还在研究这个高性能框架并说出了基本实现原理表现出喜欢钻研技术的态度唯一的缺点就是逻辑思维不太缜密工作经验只有年多但我们都觉得稍加培养

最近要招一名中高级程序员, 有位同学的面试表现我们几位面试官都觉得不错: 思维很活跃, 知识面也还挺广, 尤其是主动提及最近还在研究Disruptor这个高性能框架, 并说出了基本实现原理, 表现出喜欢钻研技术的态度. 唯一的缺点就是逻辑思维不太缜密, 工作经验只有3年多. 但我们都觉得稍加培养他就能快速上手工作, 于是就把他招了过来. 毕竟目前我手头的项目,都是业务驱动型的互联网系统--业务不太复杂, 技术难度也不算太高.

谁知该同学在试用期的表现让我们大跌眼镜: 他跟同事沟通没有任何问题, 能清楚的表达自己的想法, 也能理解简单的业务需求, 但就是无法根据简单的需求做出对应的技术设计, 同样也不能根据技术设计做出代码实现, 开发速度比同等级程序员慢几倍不说, 写出的代码也是bug百出. 无奈之下, 只能让其试用期过完后离职.

之后我开始反思这次招人经历, 暴露了我们面试中存在的两个问题:

缺少全面考察程序员动手能力笔试过程.

低估了逻辑思维严密的重要性.

对于程序员来说, 能将需求转化为代码实现的能力和写出健壮程序的能力恰恰是最基础的能力. 而我们面试时, 过多的考察了表达沟通能力和知识广度深度, 却缺失了对程序员最基本能力的考量. 结果招来了"眼高手低"的程序员.

那如何面试才能筛选出实战能力强的程序员呢?

我觉得除了基本的面试(项目经历的考察)之外, 还需要设计一些偏实战性的笔试题来测试程序员的能力.

以下是我为此设计的笔试题目之一:

题目1

现有遗留系统S1, 其关系数据库D1有一张表Table T1 , T1用户数据样例如下:

用户ID 积分 修改日期
1 20 2016-12-23 10:55:33
2 49 2015-09-12 11:11:23
3 60 2016-10-22 23:55:55

S1的主要业务为查询,修改和插入用户数据.

S1在线上运行, 目前T1每天大约会插入20万条数据, T1当前数据总量为5千万, 插入速度较慢.

由于业务发展需要, 需要开发新系统S2, 用来替换遗留系统S1.

S1的用户数据T1需要全部迁入到S2的数据库D2中, 并添加新的业务字段"用户等级","状态".

D2中用户数据样例如下:

用户ID 用户等级 积分 修改日期 状态
1 1 20 2016-12-23 10:55:33 1
2 1 49 2015-09-12 11:11:23 0
3 2 60 2016-10-22 23:55:55 1

其中"用户等级","状态"可通过以下逻辑确定:

用户等级1: 积分<50

用户等级2: 积分<100

用户等级3: 积分>=100

状态1: 修改日期 >= 2016-10-00 00:00:00

状态0: 修改日期 < 2016-10-00 00:00:00

问题1: 为了应对数据的增长速度, 减少业务响应时间, 请设计新系统S2的数据库D2, 并给出具体实现过程.

问题2: 假设S2已开发测试完毕, 请结合电商系统的日流量分布情况, 给出系统S2上线替换系统S1的方案, 列出详细实施步骤.

问题3: 假设S2的数据库D2为Mysql, D2采用针对问题1调整后的表结构保存用户数据. 请写出迁移程序, 保证在1个小时以内完成数据的迁移(所有用户字段都需要填充完).

这个笔试题比较偏实战性, 给定了一个特定的场景, 和需要解决的3个问题.

问题虽然简单, 但依然能暴露出不少面试者在思维和动手能力上的问题, 比如:

对问题1来说, 有些人能提出mysql分表, 但无法给出分表实施细节. 有人能给出mongodb自动分片方案, 但不了解如何实施自动分片.
对问题2来说, 不少人没有考虑到迁移时的数据完整性问题.
对问题3来说, 这是需要手写代码的问题, 很多动手能力差的程序员都没能写好并发处理的线程调度逻辑, 同样经验欠缺和逻辑思维不严密的程序员很多都没意识到mysql分页大偏移量带来的性能问题.

那如何评判答案呢?

如果面试者不能给出基本的解决方案, 直接pass.

如果面试者能给出基本解决方案, 但需要在面试官的指导下才能意识到自己方案的不足. 对于5年以上的程序员直接pass. 对于5年以下程序员, 如果他能在指导下给出方案的改进措施, 并能写出步骤, 则可以酌情考虑.

如果面试者能给出基本解决方案, 能主动发现方案中的不足, 指出需要改进的点, 并能写出改进措施的详细步骤. 说明该程序员的逻辑思维和动手能力都非常不错. 是很好的备选人员.

如果面试者能直接给出优化后的方案, 甚至给出不止一种解决方案, 同时能将细节用笔写出来. 则说明他是一名非常有经验和动手能力较强的程序员, 是不错的人选.

总之, 对于中高级程序员职位的面试, 用于衡量动手能力的笔试环节仍是不可或缺的一个环节.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69861.html

相关文章

  • 如何写好技术简历 —— 实例、模板及工具

    摘要:在线简历生成工具,可以导出。技巧目前写简历的方式有两种普遍被认可,一种是一种是。培养新人和带团队其他项目项目该项目是,使用技术,完成功能。阅读原文点击查看简历模板。 工欲善其事必先利其器,这是自古以来的道理,所以如果想找到一份好的工作,一定要先整理一份好的简历。 模板 写简历首先要有一个好的模板,我们做技术的不同于 UX,UED,我们不需要那么花哨,但是也需要整洁干净。好的模板能让你的...

    sunnyxd 评论0 收藏0
  • 三年百度,五年阿里,阿里p8架构师浅谈:我是如何顺利进入BAT

    摘要:三年百度,五年阿里,阿里架构师浅谈我是如何顺利进入前些天在我群里认识了以为挺有意思的老哥,他也是工作年多技术和面试都不差,最近也是在找工作,是从京城来魔都的,也和他捞了不少。 说来惭愧,也不怕你们笑话。做开发8年多,到目前还是一名不折不扣的扫地僧。年前的辞职,到现在还在家静养中。其实也没什么,就是回家总结一下自己这些年来在外工作与面试等做一个简单的总结与反思。做一下自己后面一个人生规划...

    seanlook 评论0 收藏0
  • 如何准备校招技术面试

    摘要:网易跨境电商考拉海购在线笔试现场技术面面。如何看待校招面试招聘,对公司而言,是寻找劳动力对员工而言,是寻找未来的同事。 如何准备校招技术面试 标签 : 面试 [TOC] 2017 年互联网校招已近尾声,作为一个非 CS 专业的应届生,零 ACM 经验、零期刊论文发表,我通过自己的努力和准备,从找实习到校招一路运气不错,面试全部通过,谨以此文记录我的校招感悟。 写在前面 写作动机 ...

    MkkHou 评论0 收藏0

发表评论

0条评论

cocopeak

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<