本次跳槽大作战的杂七杂八
date
Jul 23, 2022
slug
About many interviews
status
Published
tags
Singapore
Life
summary
一些面试的心得和时间线
type
Post
起因
首先我很早就开始准备跳槽了,有些事情经历过一次,就发现,这些教训就算写在书本上,写在课本里,人依然会去重蹈覆辙。
现在的公司在牛市疯狂扩招,但是在业务上却总是慢友商不止一两拍,看似欣欣向荣,但就像找不到方向似的,招一批人,然后往各个赛道派人去试错。
我一直觉得“快速试错”不是什么好事,尤其是不停的快速试错。
对于试错的实施者,这件事到底能不能成功,心里没有底,这个事情做了没价值,生产了一堆垃圾,短期来看,不能给自己带来绩效收益;长期来看,这些错误经验带来的收益也没特别的作用。失败可能是多方面的,可能这个产品设计的太复杂,用户根本看不懂;也可能这个产品的 UI 不是很舒适,让一部分用户望而却步;也可能是产品上线出了点 bug,用户失去了信心。
这些东西,前人都写在书里。而公司招的资深管理者却想是从未踏足过一样,从头开始试错,不停的快速试错。
刷题
这些都只是公司走向不良方向的现象而已,还有许多乱七八糟其他的事情,这些在 2021 年的 10 月就让我坚定了我得开始刷题的决心。我购买了 Leetcode 会员,从各个大公司的 tag 开始刷题,得益于我之前已经刷过了一轮,所以这次我依然把每道题目的解法记录下来。
Leetcode阅读了刷题和面试做题的技巧对自己十分有帮助,比如《算法小抄》和《剑指 Offer》
从 10 月 1 日开始,每天一道题,直到今年 5 月才结束。 目前已经做完 398 道题。会员非常有用,可以让自己有明确的刷题方向去刷题,这些题目是面试中经常出现的,在后续面试中,我只遇到了一个没做过的题。同时建议做算法题用 Python,能少考虑许多东西,专注于解法。

面试准备
面试本质还是信息战。
首先,面试可以根据面试官的地区和公司做划分:
- 欧美大公司面试流程标准化,OA 做算法题 → 技术面试 leetcode + system design + project → 交叉面可能是行为面试也可能还是技术面 → hr 和 manager 则是行为面试
- 欧美小公司有的喜欢布置 homework,在规定时间内把这个 homework 做的像一个成熟的工程产品,包括但不限于:单元测试、CICD、集成测试、文档等,通过 homework 之后,还是类似大公司的面试流程
- 中国公司和面试官的风格则是八股文 + leetcode,八股文会问的很深入,比如 kafka 高吞吐的原因 → append log and zero copy → 零拷贝的原理 → 各个操作系统实现的区别
我这次在做一家公司的 homework 的时候,选择了看似简单的 XX 管理系统,CRUD 整体做起来其实可以尽善尽美的地方特别多,比如数据库索引、参数检验、自动化部署脚本等,整体耗时特别长,做完基础功能已经没有时间了。
第二次选择了 top K 问题,这道题本身代码量极少,那么可以花大量时间在完善整个项目上,去画漂亮的流程图、做好高覆盖率的单元测试和集成测试,这些工作可以极大地提升通过的概率。
八股文
我毕竟是中国公司摸爬滚打出来的,八股文我自己采用 MindMap 来做归纳整理,但是面试该忘的还是忘,涉及不到的就是涉及不到,八股文的深度和广度实在太大,工作中不可能面面俱到。不过在面试中要有自信,不知道的就说不知道,然后引导面试官讨论自己知道的点。
对后端程序非 Java 程序员来说,一般问的也就是三板斧:
- 消息队列
- 数据库(包括关系型和非关系型)
- 领域内问题,大多是如何处理复杂情况或者海量数据
后端语言非常多,双方语言不吻合,面试官一般不会到你的领域蹦迪,不过如果是同语言使用者,那么就需要收集常见的面试题。我用过一年 Java 也见过 Java 那丰富的知识点,问起来可以问三天三夜,然后再把 N 种设计模式拿出来一个个问(虽然设计模式和语言无关,但是对于 Java 实在是可以问的很多)
这些八股文沉淀下来,下次跳槽就能节省很多功夫。

系统设计
之前我面试微软,到第 5 轮,败在了系统设计上面,后面才知道,欧美公司系统设计回答是有模板的,拿着题目往里面套,基本就没啥问题。那么网上资源很多,这里有篇文章做了总结:
那么我自己,直接购买了 educative 的会员,里面的 Grokking the System Design Interview 是非常好的资料,大部分的模板都已经涵盖。
行为面试
以往的面试中,我得没注意过这个,导致有些问题答得很烂,评级不理想。行为面试是面试中很重要的一环,这些问题被问出来不是面试官想和你谈天说地,而是希望通过这些表面问题,看到你工作中处理问题的方法。有些面试稀里糊涂被挂就是行为面试没答好。
行为面试确实需要诚实,不是自己的很容易漏洞百出,同时也需要学会包装。先弄清楚面试官希望了解到什么,然后去包装一个故事,在面试中就能表述地十分从容,我是面试官我都想聘请你。
那么从经验上来看,对于非管理角色,面试官更喜欢问你遇到的难题以及如何给团队做贡献类的问题,更加侧重处理问题的方式以及团队协作;对于管理角色,面试官则侧重点在于内部沟通、决策以及如何处理团队内部的各种问题,比如团队内部成员产出很低怎么办,给到的信息不足如何做决策。
那么阅读这篇文章之后,自己准备一系列的故事即可:
收集面经
面经十分重要,就算你是去面 Google, leetcode 也有 Google 常见题目列表。
而且很多公司题库比较小,就那么些题目翻来覆去地考,人的精力是有限的,我们要高效率地准备面试,就要去广泛收集面经。
国内公司有很多地方可以收集,比如牛客网、掘金。
海外公司直接去看一亩三分地,多发帖子、多签到,很快就能达到看面经的积分要求。
比如我在准备 Coinbase 面试时,我读了大部分的面经,收集了大部分出现过的题目,都感觉自己已经摸清楚他们的出题意图了。然后 Coinbase 裁员了。
Coinbase 面试题在收集面经的过程中,也很容易找到靠谱的内推人员。不要选择那种投递简历就不管不顾的内推,那种专门赚内推金的员工在利益上是我们一致的,一条船上的蚂蚱能大大增加成功率,你能从他口中得到很多的信息。
如果你有不错的人际关系,能遇到愿意帮助你的朋友,那么再好不过了,大家可以互相鼓励,分享信息。本次就有一直帮助我的日本大佬、新加坡同事以及一直保持联系的猎头。
安排面试顺序
等准备的差不多了,就要开始投简历了,这个时候不要犹豫不决,想必这个时候已经身心俱疲,早点结束战斗才是上上策,免得学了后面忘了前面。
找猎头弄点小公司和不喜欢的大公司练手,让自己进入面试状态,没准结果不错,还能有意外收获。
自己最想去的几家公司放在中间,这个时候斗志昂扬,状态最好。
最后准备1,2家保底公司。
没有 Offer 不要气馁,每次 Review 自己的面试经历,下次再接再厉,会发现自己越来越厉害的!
薪资谈判
不要抵触找猎头,猎头和内推差不多,都是赚赏金的人。如果你有很大的希望拿到更好的总包,猎头也会获得不错的分成,他们会去试探对方的底线然后拿到一个不错的报价。
这里对于许多人有个误区,就是薪资谈判是最后才开始的。其实不然,在 HR 看到你简历的那一刻,谈判就开始了,每一次在面试中的失误,都会成为 HR 的筹码。
但是不要慌张,在不惹怒对面的情况下,展现自己的实力(说自己已经有了 Offer),对失误一笔带过,铁了心说自己值这个价,实在特别想去这家公司,可以适当少要点现金,多要点福利。
总而言之,当面试流程开始,各个环节都要注意,不要随便给 HR 增加压价的筹码。
培养习惯
我这次特别开心的一点是有些事情坚持下来,得到了很大的汇报:
- 英语
- 刷题
英语我从 19 年就开始背单词,每天背,虽然到我来新加坡的时候,我依然没办法讲完整的句子,但是单词储备已经很不错了。21 年底的时候,我参加了公司买的沪江私教课程,同时和同事磨嘴皮子,努力用英语对话,就算语法错误百出,只要对方能领会意思就没事。这次的全英语面试基本都能顺利进行。那么面试有个小技巧,无论是 Windows 还是 MacOS 都有字幕功能,这个功能本身是给听力障碍人士使用的,但是对于英语阅读能力没问题的程序员来说,有了这个功能,基本能理解对方的意思。
学好英语,你会发现,你就业的选择,一下子变得很宽广。就算是去日本都是用得上的。
那么如何培养习惯呢?可以参考《微习惯》这本书,把宏大的目标化为每天的重复动作,它得小,不怎么占用你的时间,接下来就是每天去做就行了。背单词我就如此坚持下来。