今日在南京面试人感想

2018-04-21 21:19:01 +08:00
 ewBuyVmLZMZE

面试了一个人,工作时间很长,5 年多。主要是给华为做外包,工作上多以运维数据迁移为主,在 17 年之后有过类似大数据开发的工作经验。

简单问了一下项目,了解大概涉及技术栈,告知其我准备问一些 Java 基础(我司主要开发语言为 Java )。被立刻打断告知我不要问其 StringBuilder、StringBuffer 区别,HashMap 知识点这种没有意思的问题。

我说我不会问这种问题,但也不会上来问一道很难题目。要其写一 List 去重,基于这个准备扩展,发散一些有意思的问题。其面有难色,问能否只说思路,我说,此题既然有思路,必然能写出来。其尝试写了一下,把笔一丢,表示不愿意书面写代码。

我说要不要我拿电脑让你写,其说可以。电脑拿来,其开始批斗我,云云感觉其被鄙视,像其这样的水平和工作经验的人应该重点考察项目经验,而不是笔试代码这么 Low B 的事情。期间列举其在阿里被面试经历,从 Tomcat 启动开始问,由浅到深。

我言,可以按照你的方式,通过问一些有意思的问题让你来解答的方式面试,笔试写代码只是我个人的习惯。其言内心受到伤害。遂将简历交还,其拂袖而去。

PS,电话面试和现场面试的结论,其为简历侠。

17312 次点击
所在节点    职场话题
121 条回复
oszlso
2018-04-22 13:15:43 +08:00
挺能装的
ZengLeiPro
2018-04-22 13:20:53 +08:00
两种语言习惯无缝切换?
ewBuyVmLZMZE
2018-04-22 13:25:48 +08:00
@fange01 V2EX 社区的诸位都有自己的想法,必然存在不同观点,被喷正常。
只是不喜欢主观意识的判断,一般很少发帖。萌新瑟瑟发抖。
gouchaoer
2018-04-22 13:34:18 +08:00
@syhily 繁体看着累。。。另外我觉得考察代码真的很重要,很多时候问一个东西也许答得好,但是代码基本功没问题的大概率更优秀
gouchaoer
2018-04-22 13:35:41 +08:00
写代码代表一个人的基础“码力”,不管你用啥语言,你要把这个逻辑表达出来,否则说啥都是扯淡
ewBuyVmLZMZE
2018-04-22 14:08:06 +08:00
@sagaxu 这类细节还是能用到的,比如我说说这里问的 List 去重和接下来要问的内容。

List 去重原题是 List("a", "a", "b", "c", "c", "c", "d", "d") => List("a", "b", "c", "d") (这里用的是类 Scala 语法定义)

1. 如果其上来写的是:

public void distintList(List<String> rawList) {
List<String> list = new ArrayList<>();
for (int i = 0; i < rawList.size(), i++) {
String item = rawList.get(i);
if (!list.contains(item)) {
list.add(item);
}
}
}

那么可以问的点可能就有:
Q. 这里循环 List 还有什么别的方式?
A. foreach 的方式。
Q. foreach 和这里的 fori 的方式有何区别。对 ArrayList 等不同 List 什么情况下该用哪个?
A. foreach 的语法糖实现,不同数据量迭代器的创建开销。
Q. 这里定义 ArrayList 未给定大小,那么如果去重后的元素数量很大,这里会有什么可能?
A. ArrayList 的实现原理,默认大小,超出后的数组拷贝。
Q. 这个实现最极端的算法时长大概多少,如何优化?
A. 大概是 O(N^2),可以用 HashSet 优化。
Q. 那么 HashSet 的去重实现原理你是否知道?
A. HashSet 内部定义一个 HashMap,使用其 Key 去重。
Q. HashMap 的默认大小是多少,如果超出会怎么样?
...演变到了集合的提问。
Q. 我看你的简历上写会 Java 8,这里能不能用 Java 8 来实现?

2. 如果其比较熟悉 Java 8,写出来这样的代码:

public void distintList(List<String> rawList) {
rawList.stream().distinct().collect(toList());
}

那么可以新的提问啦:

Q. List .stream() 之外 还有什么 stream ?
A. 还有 parallelStream。
Q. 这里可以用 parallelStream 么,有无区别?
A. 可以用,结果一样。parallelStream 在某些场景下可以并行执行,效率高。
Q. 那能否说一下,这里 stream 和 parallelStream 的去重原理?
A. Stream 里面定义了 DistinctOps 用于去重操作,对于一般的 stream,使用 LinkedHashSet 去重,对于 parallelStream,使用 ConcurrentHashMap 去重。
Q. 为何用 ConcurrentHashMap,ConcurrentHashMap Java 7、8 的区别...演变到了集合的提问。
Q. 扩展提问:collect 后如果不想结束流该怎么办?

3. 这一通后,开始改原问题,进行第二问:如果这里 List 里面不是一个 String,而是一个自定义类型,该怎么办?

需要说重载 equals 和 hashCode 方法,为何重载,默认实现。hashCode 该如何生成,如何减少 hash 碰撞,有哪些常见 hash 算法。

4. 再将问题改到大数据范畴。Spark 和 Flink 之类的流式处理框架内都有类似 keyBy 的操作,将数据做分组,请问这里他们的实现方法。
Q. 希望说道二者自定义的 Tuple 集合和内部的 hash 算法。

6. 将原题改为 List("a", "a", "b", "c", "c", "c", "d", "d") => List(("a", 2), ("b", 1), ("c", 3), ("d", 2))

7. 再将问题扩展到常见的大数据去重统计。如何在数据量高达几个亿,QPS 上万的系统上,去做去重计数?
Q. 希望说道类似:布隆过滤,HyperLogLog,HyperLogLog++,等。

@WinterWu 这大概是我的面试思路,会按照面试者的情况随机调整。
ewBuyVmLZMZE
2018-04-22 14:19:57 +08:00
所以,最后真正想问的问题其实是最后一问:如何在数据量高达几个亿,QPS 上万的系统上,用 Spark 或者 Flink 去做实时去重计数,计算每 5 分钟内某种微度下的数量。

但是,通过前面的引导,如果能到这个提问,基本上答案呼之欲出。但如果没有到这一步,也是能知道他大概懂什么,不懂什么。如果上来就问这个问题,怕是要被人打死吧。
ctro15547
2018-04-22 14:27:09 +08:00
作为被面试者我喜欢直接了当,直说公司要用什么技术,做些什么事情,后续产品大概怎么发展。开场我都是直接这么问面试官的,确定好总体方向后再谈,免得听他天马行空乱问问题,关于工作能力都在简历上,要怎么问怎么考随你来,技术这东西做没做过懂行的一问就立马明白。手写代码可以但别搞烦人又偏门的,非要弄出 print 有几种写法,抱歉真没心思想这个
AntiGameZ
2018-04-22 14:27:16 +08:00
题外话,好奇苏宁的代码质量如何,整体的项目管理能力怎样。
yanjinbin
2018-04-22 14:33:25 +08:00
年轻人有什么优越感好秀的,你知道的别人也不一定知道,考这种细节,你过来,我可以问倒你,面试不是面那种考偏门细节技术。。。
winglight2016
2018-04-22 14:39:52 +08:00
面试这种事情,是有相性一说的,有没有戏聊两句就知道了,不喜欢你的套路也未必就是不合格——符合你的套路才能入职,这真的只是个人爱好,成不成和技术实力谈不上因果关系
Cbdy
2018-04-22 14:41:12 +08:00
List 去重,没毛病,什么时候这种基础知识也变成偏门细节了
ewBuyVmLZMZE
2018-04-22 14:41:25 +08:00
@winglight2016 所以面試裡面一直有笨蛋傳染的說法,我也一直拿這個作為對自己的警示。
winglight2016
2018-04-22 14:44:10 +08:00
@syhily 是啊,只是实际情况中,team 成员只是对于 TL 的工作量补充,你要是找来弥补短板也不行,毕竟不熟悉的东西无法把控,那还不如继续用套路
sagaxu
2018-04-22 14:58:45 +08:00
@syhily 写明 list 数据量规模,list 去重能写出高于 n*logn 来的,可以直接拒掉,不用再问下去了。拿三到五道笔试题做个初筛,能筛掉很多傻子。对于五年以上的人,你还是直接从最后想问的问题开始吧,再一步步深入下去,前面那些铺垫,跟问变量怎么定义区别不大。
skyler13
2018-04-22 15:45:45 +08:00
为什么那么多人在喷繁体字,繁体字应该是中华文化的根源吧。
winterbells
2018-04-22 15:56:51 +08:00
@skyler13 当真??
em70
2018-04-22 16:25:37 +08:00
@skyler13 这事和微信发语音一样,是发的人爽,看的人不爽, 强迫别人牺牲沟通效率满足自己的情怀,真的好吗?
dbow
2018-04-22 17:11:06 +08:00
我也碰见过种,一见算法题, 直接发脾气, 答不出来其实没有关系, 这题目出发点就是检测思考能力, 不答的直接拒绝, 性格坏。
Servo
2018-04-22 17:24:05 +08:00
非常赞赏楼主的做法,提个建议,这类文章应该使用文言文书写,再排版为直书就更佳了。另外,爱看看六字真言,别人用什么“文体”轮得到您管吗 ?

像楼主这么喜爱、维护并实践中华文化的人实在不多了,楼上某些人有何资格批评,是刺痛你们这些{ , }的丑恶的心了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/448763

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX