technical preparation: coding + project experience
behavior / open ended qn: use of AI, collaboration, etc.
interview mindset: collboration / not being questioned, never give up
这次面试前后我大概面了15多场,回头看,自己做得比较对的准备,主要有下面几件事。
1. Coding 还是得准备,但不用神化它
前几轮基本都会考 LeetCode。我自己比较幸运,遇到的大多是 easy / medium。面试前大概集中刷了半个月,每天做几道,主要用 Python 写,因为确实会比 Java 更适合面试时快速表达思路。
2. 项目经历一定要提前打磨
工作 1 年多后,项目经历的重要性非常高。
我以前总觉得自己做的事情很零散,impact 也不够“大”,但后来发现关键不是项目本身有多厉害,而是你能不能把它讲清楚:背景是什么、问题是什么、你做了什么、为什么这样做、最后带来了什么结果。
我平时有记录工作内容的习惯,所以在准备面试时,会把这些素材重新梳理,也会借助 ChatGPT 帮我把零散内容整理成更有逻辑的项目故事。
3. 不只是准备答案,更要准备 follow-up
我觉得很有帮助的一点是,站在面试官的角度反过来问自己。
比如:为什么这样设计?难点在哪?trade-off 是什么?如果重来一次会怎么改?
你在准备时被“追问”得越充分,真正面试时就越稳。到后面会慢慢形成一种表达惯性,就算不是每句话都提前准备过,也能比较自然地把思路组织出来。
4. 心态上,把面试当成 collaboration,会好很多
尤其是 project discussion、system design、一些 open-ended question。
后来我会更倾向于把面试看成一次合作讨论,而不是单向被 challenge。对方很多时候并不是在“卡你”,而是在看你怎么思考、怎么沟通、怎么一起推进问题。这个 mindset 对我帮助还挺大的。
5. Behavioral 和 AI usage 也值得准备
除了 coding 和项目,我这次还被问到不少 behavioral / open-ended 的问题。比较有意思的是,也有几次被问到工作中怎么使用 AI。感觉这已经慢慢变成一个挺常见的话题了,所以可以提前想一想:你平时具体怎么用、用来解决什么问题、边界是什么。
还有一个小经验是:面挂了也不要太快放弃。
在我最后拿到的 4 个 offer 里,其实有 2 家公司是一开始面试的岗位已经挂掉了。但当时我还是和 recruiter 保持了沟通,表达自己依然很希望加入这家公司,也想问问是否有其他更匹配的岗位机会。
后来 recruiter 确实帮我把简历 internal transfer 到了其他 team,重新走了一轮流程,最后也顺利拿到了 offer。
所以我这次一个很深的感受是:面试挂掉不一定代表和这家公司完全结束。 有时候只是某个岗位不太 match,如果你整体背景合适,其实可以稍微“脸皮厚”一点,多争取一下机会。当然沟通方式还是要真诚、礼貌。
整体来说,我觉得这次能比较顺,一方面当然有运气成分;但另一方面,提前把项目经历和表达方式准备好,确实会很大程度影响面试的手感。
后面如果大家感兴趣,我也可以再单独写一篇:
-
这轮面试里常见的题型 / topic
-
SWE / backend 和 SRE / DevOps 面试的异同
-
以及最后 offer 选择时我在纠结什么
接着上一篇,
综合下来发现 PR + 1-2年经验 比较好跳
这一篇分享下技术轮 (technical) 面试的一些经验
- SWE (backend)
- 算法题
- 除了 DevOps, 其他 SWE 的岗位 前几轮都逃不过 LeetCode
- 我比较幸运,遇到的大多是 easy / medium
- 面试前大概集中刷了半个月
- tips:
- 强烈建议用 python写,因为语法更简洁,也有很多实用的 built-in methods, 能省下很多 boilerplates code. 同样的实现,python的代码 可能要 比 java / c++ 的短一半
- 我自己之前一直习惯写 java,但这次就花了一两周集中练习了用python 刷题,上手很快
- 效果很好,能让我在更短时间内把思路表达清楚,省下时间可以聊更多项目经历啥的
- 项目经历
-
因为我是已经工作1.5年,所以会被问到比较多项目经历
-
一开始准备面试时,我最大的一个苦恼就是,觉得自己做的东西都很零散,更谈不上什么 impact
-
但后来发现,关键不是项目本身有多厉害,而是你能不能把它讲清楚:
- 背景 / 问题
- 你是什么角色 / 定位,做了什么
- 为什么这样做,背后是什么 rationale,考虑了什么 trade-off
- 最终带来了怎样的 impact
-
STAR method
-
对于1, 2 — 更偏技术方向,实现,可以根据你工作中的笔记、文档梳理清楚
-
对于3 — 可以把 1,2 作为背景,丢给 AI 让他 提问,challenge 你。它可以引导你思考一些更深次的问题 (meta-question),比如【为什么这样设计】、【为什么用 A 而不用B】、【假如系统某一块 break了,是否有 fallback / retry 机制】等等 —— 这些是你自己【正向思维】无法想到的,因为我们自己准备的时候只会顺着自己的思路来说,都很make sense,但它就能提供一些 why not 的问题,更像是真实面试中的状态。这个时候你越是觉得被challenged到,就能越早发现问题
-
对于4 — 丢给 AI 写,这是 AI最擅长的,能把一个微不足道的小破 project 吹上天。最好再让它加上一些具体的例子作为支撑
- 系统设计 (system design)
-
主要有两类问题,一类是比较传统的 — 比如设计一个 URL shortener service,主要考。。;还有一类非常算法、逻辑的,比如设计一个 message q, 你要懂那个 worker pool, loop啥的实现。。就很难
-
可以看system design interview
-
不用担心,对于junior来说,更多的是看中你的思维过程,trade-off, 啥的(展开简单说说)
followup questions
- 先准备一两个, show genienous curiosity.
先说说关于跳槽时机,结合自己 & 身边不少朋友的样本,一个感受:
有 PR + 1–2 年经验,在新加坡 tech 行业是一个比较好跳的阶段
不过这也看每个人的节奏和感受,个人感觉对于两年内 junior:
- 能力圈 —— 是否不断有成长,与时俱进
- 变现圈 —— 薪资是否满意
求职复盘 Part 2|技术面试(SWE Backend)
接着上篇,这篇主要聊一下 技术轮(technical interview) 的一些经验
背景依旧是:
- base 新加坡🇸🇬,有PR
- SWE Backend 方向
- 1-2年工作经验
Part 1. 算法 (Coding)
SWE 前几轮面试都逃不过 我算比较幸运,遇到的题都是 easy / medium
Tips: 建议用 Python 写
- Python 语法更简洁,而且有很多 built-in methods,可以省下很多 boilerplate code
- 同样实现一段逻辑,Python 代码长度可能只有Java / C++ 的一半
- 不习惯也没事,可以临时学 —— 我自己之前就是一直习惯写 Java,但为了面试,花了一两周集中练习用 Python 刷题,上手非常快,效果也不错
- 面试时间宝贵,你写得越快,就有更多时间去聊更有意义的 topics
Part 2. 项目经历(Project Experience)
我已经有 1.5年 经验,所以这块被问得很深入
一开始准备面试的时候,我最大的一个困扰是:
过往的项目经历比较分散,没有被系统性地整理过,也不太确定该如何在面试中讲清楚它们的价值
后来开始借鉴一些思维框架:
思维框架:STAR
网上常说的是 STAR method (Situation + Task + Action + Result) ,我根据这个自己改编了一个模版:
- 背景 / 问题是什么 (Background / Context)
- 你是什么角色,具体做了什么 (Role / Task)
- 为什么这样设计,背后的 rationale / trade-off?
- 最终带来了什么 impact
怎么准备?用 AI 来 challenge 自己
对于 1 & 2(背景 + 实现) —— 通常可以根据你平时的工作笔记、文档梳理清楚
很多时候,真正难的是 第 3 点:为什么这样设计 (rationale)
我会把项目背景和实现思路丢给 AI,让它反过来 challenge 我,比如:
- 为什么用 A 而不用 B,trade-off 是什么?
- 有没有其他实现方案 (alternative)?
- 如果系统某一块挂了,有没有 fallback / retry?
这些其实是我们自己准备的时候 很难想到的问题,因为我们自己的思路往往是 正向的:
“这个方案是合理的,所以我这么做。”
但 AI 很容易帮你提出 why not 的问题,也更接近真实面试的状态
当你在准备的时候一直感觉【被问倒】,真正面试时就会轻松很多
让 AI 来写 impact
至于第 4 点 impact,可以借助 AI 来帮助你梳理表达
AI 很擅长做的一件事是:把你已经做过的事情“讲清楚”,包括结构化信息、总结影响、甚至帮你补全更完整的表达
你会发现,很多看起来很普通的工作,其实是有价值的,只是平时没有认真总结过
最后再结合一些具体例子,会更有说服力
Part 3. 系统设计(System Design)
我大致遇过两类问题:
第一类:传统系统设计
e.g.,
- Design a URL shortener
- Design a notification system
这类题主要考:
- architecture design
- data model / flow
- scalability
- trade-off
第二类:偏逻辑 / 偏实现的问题
有些公司会问更偏 工程实现 的问题,e.g., design a message queue
这其中就涉及到,
- worker pool 机制
- event loop 怎么设计…
这种问题其实更接近 系统内部机制,
个人感觉比传统 system design 难一点,更靠【逻辑】而非【套路】
建议:不用太焦虑,专注思维过程
对于 1–2 年的 junior, 面试官其实更关注的是:
- 你的 思维过程
- 如何 拆解问题
- 是否能讨论 trade-off
而不是一定要给出一个完美答案
很多时候更像是:
你和面试官一起讨论一个问题,尝试去得到一个 conclusion,这个过程中会涉及到一些 trade-off, design decision
一些小的观察
- 所谓的【八股文】其实并没有被问很多,更重要深挖项目经历
- 很多问题都会围绕系统设计、trade-off、系统出问题如何处理
- 比起死记硬背,面试官更想知道的是你是否真正理解自己做过的系统
- 即使已经进入 AI 时代,面试形式其实并没有发生太大的改变
- coding round 依然是标配,Leetcode该刷还是要刷
- AI 改变了很多开发方式,但至少目前来看,面试本身还没有发生本质性、结构性的变化
小结
SWE 技术面试,大致可以拆成三块:
- coding
- project discussion
- system design
其中我自己感觉最重要的一点是:
项目经历一定要提前打磨好。
很多时候,技术面试不只是看你会不会写代码,
更是看你 是否真正理解自己做过的系统。
面试形式短期不会有大变化
下一篇我会分享 关于 Behavioral interview 的一些常见问题~