通过 准备篇 里提到的渠道发现感兴趣的公司和职位后,可能需要做的几件事:
需要向中介进一步了解的情况包括:
决定了工资的上限。一般跳槽的薪水涨幅是 20-30 % 左右。对底层的码农而言,一个比较粗暴的薪水和级别对应关系是:初级 5-7 W,中级 7-9 W,高级 9-12 W。13 及上需要看运气,14 基本到顶,架构 15 - 18,管理另算。
P.S. 这里所提及的薪水只针对 Permanent Full Time 全职员工,非 Contractor 合同工 (对应的薪水一般是 80-120 / 小时)
悄悄说一句,之前并没有遇到过要求提供之前工资流水的情况……所以如果之前薪水严重低于市场或与实际能力不符,觉得可以直接要期望薪水,而不用基于当前薪水加 20% 这么严格。
了解了基本情况后,可以根据职位紧急程度,自身稀缺性,市场趋势,以及职位匹配度等方面来确定要价,建议向中介或公司 HR 提供一个薪水范围,并表明可议价。如果要价过高且远超对方预算并且没有议价空间的话,就木有然后了……
其他信息确认渠道,比如在 Linkedin 查看公司 all employees,看是否有认识的。我曾经就遇到过,拿到 Offer 后,才发现新公司里有国内的前同事……
如果可以了解到内幕消息,比如,不差钱公司下的不靠谱项目紧急缺人,如果有勇往直前虽千万坑吾往矣的精神,那工资往高了要准没错。身边就有这样的成功例子,远高于市场价。
同样是内推,在得到内部消息后,可以在职位正式放出去前,“内部”消化掉,从而尽可能避免和市场上大量的求职者竞争。打的是个时间差。
不过,这个“早”是相对的。比如通过中介在公司职位放出的第一时间推了过去(虽然也很快,但已经正式对外了),而如果自己是头一两个面试者,公司一般会等面完所有的,才会做决定是否来第二轮,期间的时间很难控制,这样也就没法达到在多个 Offer 之间进行权衡和相互 match 的理想情况了。后面「薪资」部分会作讨论。
具体可参考 简历篇,不再赘述。
不同的公司,可能情况不同。
所有正式 Onsite 面之前的(不看脸 / 无听说交流)的步骤都归在这里。基于个人经历,大部分情况在这一步是动手居多。
可能是在线做技术题(code 或非 code,限时或不严格限时)。纯代码的测试可能会使用 Codility,当然自己拿 LeetCode 和 Geeksforgeeks 练手也绝对没问题,不过可能会有点杀鸡用牛刀的感觉。
也可能是在线做智力题,类公务员考试。当时听了中介推荐,脑子一抽就去了一家公司。被老板娘一面后(后来才知道),先让回去做一套冗长的在线智力题,花几小时做到头晕眼花完成后,过几天告诉我 fail 掉了。又过了几天,通过中介告诉我当时打分有问题,问我有没有时间再重做一次。SB 公司,抱歉我爆粗口了,直接拉黑。对,就是「Propellerhead」,原谅我无脑一生黑。
这里「动口」不是爆粗口,而是把口条练顺溜。
理论上来说,只要简历中写出来的,都有可能被问到。这也是为什么 简历篇 里提到的,要定制简历并使用版本控制,以便在面试前可以先过一遍提交的简历,以免坑到自己。
针对一些常见的问题,比如「自我介绍」或者「描述最有成就感的项目或技术解决方案」,笨办法可以先写下来并不断改进内容,然后背下来,最终达到不假思索说出来的程度。
比如自我介绍,可以基于 KISS (Keep It Simple, Stupid) 原则,尝试按「电梯演讲」来推销自己。
self-introduction:http://bit.ly/2WHM9jN
同时,最大程度地回忆项目和技术细节,需要达到随时上手白板画图并讲解的水平。比如项目的背景描述、规模、系统架构 、数据流转、技术难点及如何解决,方案优缺点及后续优化思考等等。细致到每次做面试回顾时,都让我想起了公司内部的职级评审。
公司用到的技术,或者简历中涉及到的,至少需要能用英语解释基本概念、原理、技术优缺点和比较等等。尽量使用数字或实际案例来阐述或支撑自己的观点。常见的热门技术,比如 Docker
/ Microservices
/ Kubernetes
等等。
其他还有一些算是锦上添花的内容。
比如留意日常技术文章里的通用说法,面试时会显得更专业一些:
Back-of-the-envelope calculations
粗略估计Single-pane-of-glass
一站式 [体验 / 解决方案]e.g. Cost Optimization Monitor solution as a reference deployment which provides dashboard and reporting capabilities giving customers a single-pane-of-glass view of their current AWS service inventory.
比如注意某些易读错的技术单词的发音,让自己更容易被理解,清晰无误地表达自己的观点:
程序员容易发音错误的单词:http://bit.ly/2HTDOWA
或者参考割韭菜能手的自我修养,「你若有心,吃我这半盏儿鸡汤」:
人人都能用英语:http://bit.ly/2WGsbWG
半小时或一小时不等。
这里可能是 HR 来问些 behavioural questions。比如:
更多关于行为面试的问题,可以参考这里:
behavioral questions:http://bit.ly/2WC3aMb
电话面试也可能是技术面。
不过,个人感觉在电话里讨论纯技术细节的情况并不多。一般就是自我介绍,项目,用来做初步筛选的通用技术,比如 OS 基本概念 / 编程基本概念 / Git / Troubleshooting 等等。
如果是公司 HR 打来的电话,通话结束后,可以存下号码,下次再来电时有所准备。
这里,一般是直属 Lead 和骨干组员来面。
对于 SRE / DevOps:
可能会根据简历,着重问之前的项目细节,以及对方重度使用的技术栈比如 K8S / ECS / Lambda / ES / Kafka 等等。
现在新兴技术和新工具琳琅满目,让人目不暇接。学海无涯,只能保持终身学习。「再也学不动了」的说法可以休矣,别得罪有娃的中年人,他们狠起来什么都可以学。
拿 CNCF (Cloud Native Computing Foundation) 为例,来感受下:https://goo.gl/GG8Kq8
还有 DevOps 工具界的氢氦锂铍硼碳氮氧氟氖 :https://goo.gl/S9J5BP
对于 Dev 面试:
可能会基于之前 code test 的完成情况来询问细节。也可能会基于公司的技术栈来做进一步询问,比如和编程语言相关的内容。Github 上已有人整理了和语言相关的技术面问题:
Awesome Interview Questions:https://goo.gl/fvXWKs
Front-end Developer Interview Questions:https://goo.gl/D8uvTa
同时贴一份整理的关于 coding 面试的建议:
Basic Steps:
Make sure you understand the problem.
When you understand the question, try a simple example. Starting with an example also demonstrates a methodical, logical thought process.
Focus on the algorithm and data structures you will use to solve the problems.
After you figure out your algorithm and how you can implement it, explain your solution to the interviewer.
While you code, explain what you're doing.
Ask questions when necessary.
After you write the code for a problem, immediately verify that code works by tracing through it with an example. It also illustrates a logical thought process and your intention to check your work and search for bugs.
Make sure you check your code all error and special cases, especially boundary conditions. The interviewer may ask you questions about what you wrote, focus on running time, alternative implementations, and complexity. If your interviewer does not ask you these questions, you should volunteer the information.
When You get stuck:
Show interest in the problem and keep trying to solve it.
Go back to an example.
Try a different data structure.
Consider the less-commonly used or more-advanced aspects of a language.
可能会是直属 Lead / 架构师 / 其他相关组 (比如 Data Team Mgr) 面试。
这里个人更倾向于在「系统设计 & 解决方案」层面来做准备。虽然 NZ 的技术面可能还没到这种级别,不过「取乎其上,得乎其中」,这也是硅谷 Senior 级别必须要打的硬仗。这个领域更多的和实际工作经验相关。问题包括但不限于系统架构,数据库设计,分布式系统设计,高可用高扩展系统等。这个课题过于庞大,很难短时间速成,只能多看多思考,慢慢积累。具体可参考以下资料:
system-design-primer:http://bit.ly/2WGCB8K
highscalability:http://bit.ly/2WDznCK
遇到过硬核技术 Lead,拿着一张问题清单一个一个往下问的,边听边做笔记和打勾。
也有可能群面,遇到过 5 个人群面的,不过见过大场面的咱怕过谁?
对于 SRE / DevOps,这里会要求白板画图,以及分析解决基于实际场景的 Troubleshooting 问题等等。其实更考验在遇到实际问题时,如何有效提问交流,快速获取有用信息,进而做出合理推断,并提出可行性方案及优化措施。
还有遇到问题,问如何做技术选型,需要考虑哪些方面,如果做 trade-off 等等。之前做过的技术方案调研分析和实操经验,就派上用场了。可以算有过相应的思考总结和沉淀,从而在极短的反应时间内给出相对不错的回答。
也有考查技术广度和深度的常见问题,比如「点击某网址,背后发生了什么」。该问题可深可浅,需要基于具体职位,做出最合适的回答。
到了这里,个人感觉其实更依赖于之前的积累和思考,输入和输出。包括技术和非技术的。
一般会是 Director / CTO / Head of Engineering 来面。到了这里,估计也就走走过场了,只要没什么严重失误。
其他奇葩的,比如三四五轮有 PM / Agile Coach / Scrum Master / CXO Personal Assistant 来加面的小众情况,就不展开讨论了。
这里,需要表现出对公司和职位的强烈兴趣,否则干嘛来了,对吧? 所以当听到这个问题时,千万不要胸中百转千回,最后觉得无话可说没啥可问,只微微一笑道:「All is well」。一点都不倾城好不啦!
不同级别的面试官,问的问题最好也可以区别对待。
针对 Hiring Manager,未来的直属 Lead,常见的问题比如:
What are the most important skills for the job? How would you describe your ideal candidate? What are the biggest challenges that the team is facing right now? What's a common career path at the company for someone in this role?
针对 Co-worker,可以问些更细节的问题,比如:
What's a typical day like for this role in the department? How would you describe the work environment at the company? What's the most enjoyable part of your job? What's the most challenging part?
而针对 CTO 级别的,可以问些偏公司管理、产品战略等方面的问题可能会更好些。
这里给出了一些例子以供参考:
questions-to-ask:http://bit.ly/2WyRw4s
即使通过中介而不是直接面对 HR,讨价还价总是最难的部分。
这个主题对我而言过于宏大,而且自己也不擅长。有兴趣的可以看下 这篇文章 ,里面总结了比较实用的原则以供参考:https://goo.gl/RZCJ3b
这里只简单列下自己的处理方案和注意事项。
关于薪资(包括福利)可以在多个纬度进行谈判。通常 package 的组成包括:
贴一下某公司的福利:
我个人会比较关心的包括:
遇到的大部分情况,都是电话下口头 Offer,并在电话里讨论具体的薪水。如果觉得通过电话自己不能达到最好的状态,可以尝试通过邮件的方式。
比如:
Hi recruiter, I hope your day is treating you well! Re: your previous e-mail, I’d prefer to discuss the details of the offer over e-mail. I sometimes get nervous during important phone calls, so discussing the offer over e-mail helps me to keep a clear head and communicate more clearly. I hope this is okay with you. :)
常见的情况是手拿多个 offer 并以此进行谈判:
Yeah, [COMPANY_NAME] sounds great! I really thought this was a good fit, and I’m glad that you guys agree. Right now I’m talking with a few other companies so I can’t speak to the specific details of the offer until I’m done with the process and get closer to making a decision. But I’m sure we’ll be able to find a package that we’re both happy with, because I really would love to be a part of the team.
策略固然重要,这里列一些个人认为比较重要的点:
《Cracking the Coding Interview》
《Programming Interviews Exposed》
[往期精彩]