在过去的一年里,我一共投递了 24 家公司、经历了无数次面试。现在把我的亲身经历和踩过的坑,整理成一份五部分的求职攻略,希望能让同样冲击 SDE(或者其他类似岗位)的小伙伴少走弯路。全文分为:申请、Coding、系统设计(SD)、Behavioral、Project 五个版块,下面详细分享。
一、申请
我最早在 1point3acres 上看到有人提到 LinkedIn 付费会员可以推送更精准的职位。于是我开通了“Toronto Hybrid + Remote、Software Engineer、含 Postgres”关键词的每日提醒,邮箱每天都能收到几条新职位推荐。有合适的我就马上去官方 career 页面投;千万别直接用 LinkedIn 的 Easy Apply——几乎收不到任何回复,更别提拒信。我后来发现,LinkedIn 只是告诉你“这里有招聘”,真正要从公司官网申请,才能让简历在 HR 系统里被优先看到。
除了 LinkedIn,我还每天在小红书里刷企业内推帖,晚上回家会顺便逛逛 1point3acres 上最新的求职分享。只要看到有公司正在招 SDE 相关职位,我就记下链接,定时刷新。一旦有心仪岗位,就立刻从官网投递,并在申请时备注“看到职位来自官网”,这样就不会被标成“LinkedIn 来源”。
简历方面,我最开始写得堆砌了一大堆只有本组同事才看懂的内部术语。后来我改成“职责+我是怎么做+用数据说明效果”的模板,比如写“负责用 PostgreSQL 优化查询逻辑,将延迟从 300ms 降到 100ms”,而不是“优化数据库性能”。这样一来,HR 在 10 秒内就能明白我的核心价值,而不是“看完一段话还没搞清我做了什么”。简历务必通俗易懂,尽量用数字和结果说话。
二、Coding
我知道自己刷题基础薄弱,于是早早决定把 Coding 打好根基。第一阶段,我跟着「代码随想录(programmercarl.com)」的顺序做题,断断续续花了差不多三个月,主要是下班还要打球,只能挤空子时间。那时刷到 Medium 难度就常常卡住,于是第二阶段换到「算法通关手册(algo.itcharge.cn)」,只做 Medium 题,把每道题的思路和边界条件都认真过一遍。不到两个月,我稍微能感受到“碰到熟悉题目能有思路”的感觉了。
第三阶段,我开始去做 Grind75(techinterviewhandbook.org/grind75),喜欢它能自己设定期限和每周题量。我用正序花了一个月做一遍,又用倒序再做一遍。到这时,差不多与第一天开始刷题算起来快一年了,手感终于稳定,碰到大多数经典题能迅速拆解。
最后,为了保持状态,我跟着 NeetCode Roadmap 继续练习,偶尔遇到卡壳题就停下来回顾基础方法,而不是硬啃。通过这一整年持续打磨,我才有底气在面试时看到一道中等偏上难度的题,脑子里能蹦出思路。
面试时的具体做法是:首先用注释写出小目标,比如“处理空输入”“处理重复元素”“处理边界情况”,每完成一个小点就说一句“已完成空输入处理,接下来解决重复情况”,让面试官看到我思路清晰、有计划。如果现场突然卡住,我就立刻说“我先考虑一下边界情况”,用停顿来争取时间,让对方感受到我不是毫无条理地写,而是先拆问题再动手。
三、系统设计(SD)
系统设计一直是我最不擅长的环节。一开始在网上找 ByteByteGo 的视频看,听了两天就感觉晕头转向、毫无头绪。后来一朋友推荐我先去看 NeetCode 上的两门 SD 课程,两天就把基本概念过了一遍:从“请求如何流转”“数据库如何分库分表”“缓存怎样做”这些要点全盘学习。接着我又在 YouTube 上找到了 TechPrep 频道的 SD 教程,讲得通俗易懂:什么场景适合 Kafka,什么场景该用 RabbitMQ;当需要低延迟时为什么 Redis 比 MySQL 更适合做缓存。
学习 SD 的关键在于“知其然也要知其所以然”。比如我明白要用消息队列(Message Queue)解耦,就顺手去阅读了一点 Kafka 的基本架构原理,至少知道它如何做到高吞吐、如何保证消息不丢失;用到 Redis 做缓存,便顺便了解了它基于内存存储和单线程模型带来的性能优势,以防面试官问“为什么不用 Memcached?”。这样一来,当遇到深度追问时,我能回答得更有底气,而不是只能说“因为需求这么写”。
真正面试 SD 时,我先在白板或虚拟画板上画出整体架构图:客户端 → API 网关 → 后端服务 → 消息队列 → Worker 集群 → 缓存+数据库。然后逐层展开:
- 消息队列:在高并发场景下,将用户请求先抽象成 Kafka Topic,Worker 会异步消费,保证系统吞吐不被写操作拖垮;
- 缓存层:对热点数据做二级缓存,Redis 作为第一层,后端服务再做本地内存缓存;
- 数据库:采用 PostgreSQL 分片+读写分离,事务敏感操作走主库,分析类查询走从库。
如果面试官追问“为什么不用 RabbitMQ?”或“如何防止缓存雪崩?”,我就会解释:RabbitMQ 虽然功能强大,但大规模集群扩展需要额外部署 Erlang,在运维成本上不如 Kafka 灵活;缓存雪崩时可以加上本地 LRU 缓存和随机过期时间,以及采用互斥锁打击缓存击穿,保证高可用。总之,把整个思路做到能无缝衔接,不管面试官怎样追问,我都能把每一步讲得头头是道。
四、Behavioral
如果把 Coding 和 SD 当成硬实力,Behavioral 更像软实力。但我之前把它当“随便聊一下”,结果屡屡被挂。直到某次面试结束后,面试官跟我说:“Behavioral 那一轮你基本就是自我介绍流水账一样,根本没看出你真正为团队带来了什么价值。”那才意识到,Behavioral 的难度并不低,公司很看重面试官眼中的“文化契合度”“沟通协调能力”“抗压表现”等。
我后来去 1point3acres 找到了一个叫“彻底击碎行为问题”的帖子,里面总结了 30 多个常见题型:团队冲突、项目失败、领导经历、职业转型、压力管理等。面试一般 30 分钟要问 5–6 个问题,你最多只有 10 秒思考时间,现场回答不可能完美,于是我花了两周时间,每天背 2–3 个 STAR 故事。每个故事都要包含:
- Situation(情境):场景如何;
- Task(任务):当时需要解决什么;
- Action(行动):你怎么做;
- Result(结果):最终效果是什么,用数据说话。
我准备了至少 8–10 个故事,每个故事有时可以对应多个题型,但绝不拿同一个故事硬套下一个问题。比如:我的“团队冲突”故事是——在国内某项目里,我和同组同学对于功能实现思路争执不下,我组织了一次需求复盘会议,用数据对比两种方案的优劣,最终赢得团队支持;而“项目失败”故事则是——上线时由于测试用例不全导致线上功能回滚,我负责紧急排查、补全测试用例,并从那次经验中总结出完整的测试文档流程。即使两个问题看似都能“说项目过程”,我也用不同细节来区分,避免尴尬。
面试当天,Behavioral 环节一般都会压缩到 30 分钟内打五六个问号。我会在听到问题后迅速在脑海给出“这是哪个故事”的标签,直接跳到对应 STAR 模板里,先用一句话快速概述背景和结果,然后补充过程细节。回答节奏要快、重点要明确,不绕圈子。这样不仅能让面试官感觉你思路清晰,还会把“沟通能力好”“逻辑自洽”这两个印象深深刻在他们脑里。
五、Project
Project 环节算是所有轮次里我最有把握的一轮——毕竟聊的都是我每天投入八小时做的事情。挑战在于:面试官不需要你把所有技术细节背下来,而是要在有限的时间里,让对方清楚你整个项目的全貌、你到底做了什么、为什么做、遇到的挑战和最后的产出。
我为每个重要项目都做了简单的 PPT,大概 3–5 张即可。第一张是项目背景与业务痛点:比如“这个项目是为了降低每天 2 小时的手动对账成本”;第二张是技术方案与架构设计:我用红箭头标出了数据流向、Redis 缓存层、Kafka 异步队列等;第三张是我的核心模块与挑战:比如“我负责第二层缓存,当时遇到缓存穿透问题,我设计了互斥锁策略”;第四张是结果与指标:写到“延迟从 400ms 降到 120ms,月度节省人工成本 5000 美金”;最后一张是下阶段优化方向,展现你对项目的持续思考。
在面试时,我先花 30 秒给出目录,告诉对方接下来会分三部分讲:背景痛点、技术方案、最终成果。这样对方有心理预期,也更容易跟上我的节奏。接着,我用简洁语言讲清“为什么要做”“怎么做”“遇到什么问题”“怎么解决”,并在关键地方给出量化指标。比如面试官问“为什么要用 Kafka?”,我就回答:“因为业务高并发时,如果同步写入数据库会导致延迟飙升,Kafka 可以保证消息不丢,后台慢慢消费,用户体验稳定。”如果追到“那为什么不用 Redis Pub/Sub?”,我就补充:“Redis Pub/Sub 是广播,无法保证消息可靠传递,一旦集群重启就会丢;Kafka 则有持久化机制。”
总之,Project 环节不需要过度炫技,但要 条理分明、聚焦结果、展示思考深度。
附:24 家面试速写
下面简要说一下我打过电话或做过 OA 的 24 家公司,方便大家参考节奏与常见坑。
Scotiabank:OA 通过,但 HR 说团队暂时没需求;
Capital One:OA 通过,一直没消息;
Ford Motor:Recruiter 电话问 C++ 细节,没准备好被挂;
Hightouch:Recruiter Call 完毕后没准备好,挂掉;
Wealthsimple:Recruiter 约聊得不错,但最终也没下文;
Robinhood:第一个完整面试,Project 讲时遭到印度经理打断“好好好我知道了”,最后被挂;
Instacart:面到最后一轮,SD 和 Behavioral 不够熟,挂掉;
Dropbox:OA 通过,两轮 Coding 题描述不清,我做完第一题后第二题题目就没解释清楚,等于白做;
LotusFlare:Recruiter 约了 Coding,结果没人出现,也没后续;
Stripe:Coding 通过,但职位在美国那边,我放弃了;
Fivetran VO:给了一个 Java 项目,有十多个文件,内容太杂,我没时间弄清;
Cockroach Labs:所有轮都过了,第二轮 Coding 题都做完,但给了 “weak yes” 然后卡 Headcount,等了两个月没消息;
Ideogram AI Startup:随便聊练口语,需要过去五天,最后我没去;
AWS Aurora:组看起来不错,但面试官几次爽约,后续五天 onsite 被我拒了;
Gorgias:Recruiter 要我十分熟悉 Kafka,挂掉;
TimescaleDB:和我经历高度匹配,但我面时战术太激进,一直在追问面试官,最后直接被挂;
Criteo:System Design 轮挂,反馈非常详细,但很多内容面试时根本没触及;
Morningstar:跟 Recruiter 随便聊,没下文;Pigment:Recruiter Call 后直接拒;
QuestDB:Recruiter 约电话,临时要改时间,再也没消息;
PointClickCare:很好公司,但和我经历不太匹配,后来我另有 Offer 就中止了;
Shakudo:LinkedIn 上 Recruiter 找我,要五天 onsite,最后没去;
Elastic(巴黎):体验非常好,虽然我不擅长 Java,但分布式系统强项把我加分,拿到 Java Developer 2 Offer;
Affirm:Recruiter 全程很负责,流程是 Recruiter → Coding → Manager → Coding → System → Behavior → Project,历时两个月半,中间因为他们放假拖延,最后我入职 Affirm。
每家公司都有不同节奏和侧重点,大家可以对照自己心仪的目标公司,结合这份速写去做针对性准备。
结语
这份攻略里,我把从“哪里投简历”到“怎么在行为面中脱颖而出”、再到“Project 环节到底怎么准备”所有关键信息都囊括进来了。真正拿到 Offer 之前,我也被卡过无数次,每一次被挂都像割肉一样痛,但正是这些“实战反馈”让我不断修正策略。希望看到这篇文章的你,能少走一些弯路,把每一轮都当成一次模拟演练,好好打磨自己的故事与思路。只要下定决心、狠下功夫,下一个 HR 打给你的电话,或许就是“恭喜你,明天来团队上班吧”。加油!
需要石老师帮忙全程面试陪跑,可以扫码联系报名了
📦 报名方式:
扫码添加微信:csvohelp
