文档章节

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

ybak
 ybak
发布于 2017/02/14 17:34
字数 1642
阅读 25
收藏 3

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

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

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

  1. 缺少全面考察程序员动手能力笔试过程.
  2. 低估了逻辑思维严密的重要性.

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

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

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

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


题目1

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

用户ID积分修改日期
1202016-12-23 10:55:33
2492015-09-12 11:11:23
3602016-10-22 23:55:55

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

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

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

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

D2中用户数据样例如下:

用户ID用户等级积分修改日期状态
11202016-12-23 10:55:331
21492015-09-12 11:11:230
32602016-10-22 23:55:551

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

用户等级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分页大偏移量带来的性能问题.

那如何评判答案呢?

  1. 如果面试者不能给出基本的解决方案, 直接pass.
  2. 如果面试者能给出基本解决方案, 但需要在面试官的指导下才能意识到自己方案的不足. 对于5年以上的程序员直接pass. 对于5年以下程序员, 如果他能在指导下给出方案的改进措施, 并能写出步骤, 则可以酌情考虑.
  3. 如果面试者能给出基本解决方案, 能主动发现方案中的不足, 指出需要改进的点, 并能写出改进措施的详细步骤. 说明该程序员的逻辑思维和动手能力都非常不错. 是很好的备选人员.
  4. 如果面试者能直接给出优化后的方案, 甚至给出不止一种解决方案, 同时能将细节用笔写出来. 则说明他是一名非常有经验和动手能力较强的程序员, 是不错的人选.

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

© 著作权归作者所有

共有 人打赏支持
ybak
粉丝 17
博文 7
码字总数 11038
作品 0
成都
程序员
私信 提问
阿里、百度等多家公司Java面试记录与总结

算算自己大概面试了近十家公司,也拿到了几个Offer,现在面试告一段落,简单总结下面试经验。 我现在主要的方向是Java服务端开发,把遇到的问题和大家分享一下,也谈谈关于技术人员如何有方向...

07/02
0
0
作为一名java程序员你的薪资为什么上不去?

不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。 很多人在问我,...

java高级架构牛人
05/07
0
0
我是如何在毕业2年内逆袭成为BAT年薪40W的资深开发工程师的?

  坐标:杭州 | 工作时间:2年 | 年薪:40W   毕业院校:普通二本(非计算机专业)   现任职位:BAT某公司资深开发工程师   身边的师弟师妹经常问到:非计算机专业出身,你是在2年内...

java进阶架构师
12/05
0
0
阿里、百度、搜狐等公司社招面试记录与总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/82889763 这个跳槽季大概面试了近十家公司,也拿到了几个Offer,现在面试告...

JAVA高级架构v
09/28
0
0
终于了解了java并发还有数据库对象缓存机制,我很想知道 企业产品场景中 如何应用这两块的,我该去什么样的公司?

终于了解了java并发还有数据库对象缓存机制,我很想知道 企业产品场景中 如何应用这两块的,我该去什么样的公司? 如题 现在 我想的是 1、公司 有几个 理论知识特别强的 项目经理或者高级程序...

你是错的我恒对
2014/02/16
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
14
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
7
0
my.ini

1

architect刘源源
今天
9
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
10
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部