我们组的老板还蛮有意思的,推荐我们每半年就出去面试一次,见一下世面。的确啊,
面了才知道LeetCode 的重要性,面试之前只做了二十几道,当然啦,找第一份工作那
会儿CC150 还是完完整整写代码写过一轮,C++ Premier的。
个人的背景是工程好学校一般工程专业(不喜欢用牛这个词),两年工作经验。半年前
尝试过Wealthfront 和 braintree,都没有怎么搭理我,通过论坛认识一位热心的朋友
,大概看我背景相符,直接内推到了HM,很是感激,然后就面试了。
初面一小时,是team lead,聊聊背景,兴趣爱好半小时,剩下半小时写程序。早已经
准备好了VS,就写呗。题目很简单,输入三个小数,判断三角形类型。在最好的IDE 的
帮助下,和最好的IM Lync in Web 的帮助下,很快写好了。第三天就安排了下周五
onsite。
onsite四轮,第一轮讨论设计题,设计car pooling,前端没细说,中间件是Web API,
然后Car Pool 要用动态规划等优化方法来设定最短距离,最佳资源搭配,没有写代码
,但写了方程。代码写了简单的class 是怎么设计,其中我说要用Actor Pattern,说
到数据和操作分离,操作做到读写分离。DB接MSSQL,或者NoSQL,干脆In-memory也可
以。中途询问瓶颈会是什么,解决方案是什么,我能想到的除了读写分离,还有就是创
建Slave DB,还有注意死锁问题。讲到死锁,就问了两个连续的Async call 如何做到
并行执行,想ErLang 那样...这一点没有回答很好。最后还剩下一点时间,问了一个简
单的jQuery 的syntax 问题。
第二轮 是一个年轻的阿三,第一题是提供一个随机数函数,产生Int32, 求写一个随
机函数,产生闭区间A,B。我上来就写了,将随机产生的数求绝对值后除以Int32.
MaxValue ,可以得到0 - 0.5 的数字,如果本身的数是正数,加上0.5可以得到0-1 的
小数,然后乘以AB的距离,求Floor 得到这个数。他愣了好久,我带了好几个数字进去
,他看懂了,告诉我有点麻烦,我想了两三分钟,说出了取模的方法。他说ok给过。第
二轮是复制一个Linked List, 但是这个Linked List 里面还有别的指针,指向非邻的
元素,我悲剧在这里了。第一次只是复制了引用,第二次才复制了元素,等于写了两回
。这一点不满意这个阿三,写的时候从来没有交流的,气氛很平静,尽管我一直说说说。
第三轮是一个老阿三,这个是真的大牛,非常从容淡定,题目基本上是当下想的,而且
你能做出第一题,肯定还有下一题更难的扩展。合并排序,合并排序控制空间
(即不允许复制额外的n空间),hashing, hashing conflicts,如何判定好的
hashing function,最佳空间的hashing 是怎样的。最后一个最佳空间hashing 后来知
道是叫Bloom filter。
最后一轮是这个大组的老大,之前说过因为我的项目经历和该组做的东西相关,所以我
介绍完我的东西之后,他哈哈大笑,笑问为什么不用XXX技术,这样你这些就都不用写
了。当然,我也是陪笑说架构说的啦。然后就追问我项目中遇到的performance 的问题
,我怎么解决,我下一步这个项目还要开发什么之类的。剩下二十五分钟写一个zero-
out matrix 的问题,就是CC150 里面的题啦。这个一下子就写好了,但也有反馈是代
码风格不好,因为我使用了error code,而不是自然的throw error。这个当然已经超
过这个题目范围了,也就是说换一个题可能我也会不小心这么写了《-- 因为我公司是
多语言多平台的,全公司share 统一的error code。
这样面经是有很多主观色彩的,看客们很自然觉得软软的题目不难,而且我回答得也很
顺利。今天收到了邮件,HR不是写Thank-you letter 的,是约了一个时间,我以为是
录取信,结果是HR缓缓地告诉我抱歉,感谢我来西雅图之类的话。最后是意见的反馈,
说我 反应快,拿到题目就马上implement, 而没有沟通,没有细问具体的细节。好吧
,我也认了。话说我在公司的确是写得比较快的,我今天看了一下我的stash,历史300
天内有1200+的commit,可我也只是拿75K的年薪,还没有奖金,没有你们说的什么RSU
,RUS,还有什么签字啥费的。算了,我回去继续看赵三本吧。
大概就是这么多了。这个号是小号,认识的就别揭穿了,算是匿了。写得不对,折叠吧
。我估计我再练习一下,半年后再面吧。