文档章节

如何面试筛选出动手能力强的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
阿里、百度、搜狐等公司社招面试记录与总结

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

JAVA高级架构v
09/28
0
0
想跳槽?还是先看看这些Github上的面试项目吧

对于很多人来说,找到一份工作不是问题,但找到一个合适而满意的工作,却不那么简单。 本文我们将盘点几个面试的开源项目,希望对你们有所帮助。 1coding-interview-university https://git...

程序员之家_
09/01
0
0
转: 面试感悟:3年工作经验java程序员应有的技能

第一阶段:三年 我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级...

欧阳海阳
06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

cacti监控安装

cacti是用PHP实现的一个软件,它用snmp服务获取数据,然后用rrdtool存储和更新数据,并生成图表展示。比较适合用于交换机、路由器的网络监控,插件众多,可图示化显示网络状况。 cacti官方推...

hiwill
7分钟前
0
0
shell特殊符号、cut、sort、uniq、wc、tee、tr、split命令

10月15日任务 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 cut 命令 cut作用:截取字符串 用法如下:cat /etc/passwd |head -2 |cut -d ...

hhpuppy
36分钟前
1
0
Springboot实现filter拦截token验证和跨域

背景 web验证授权合法的一般分为下面几种 1使用session作为验证合法用户访问的验证方式 使用自己实现的token 使用OCA标准 在使用API接口授权验证时,token是自定义的方式实现起来不需要引入其...

funnymin
今天
3
0
linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部