Skip to main content

项目相关

技术面试中,面试官通常会从以下三个主题考核项目:

主题考察内容参考题目
项目介绍了解你在项目中主要职责与参与度这个项目有哪些业务模块?你主要参与哪些模块的开发?
项目难点发现问题和解决问题的能力,有没有对项目进行总结和回顾项目中的难点是什么?最有挑战的地方是什么?为什么选择这套方案?
技术细节针对某些技术点深入提问,了解你基础能力以及对使用的工具原理是否清楚项目中是否遇过数据库操作中出现死锁?死锁的必要条件是什么?如何解决死锁问题?

项目介绍

项目介绍通常比较简单,对于每个项目,都需要用一句话来向面试官说明这个项目包括哪些业务模块以及自己主要负责的内容:

“XXX 是一个手工艺品分销系统,日活量超过 50 万,主要包括产品管理,分销商管理,利润分析等三个业务模块。项目中我负责产品管理和利润分析这两个模块的代码架构和功能开发,同时也会对旧有模块进行重构以及性能优化。

项目难点

在面试中,你可能遇到过这样的情景,明明感觉对自己的项目很熟悉,但是面试官却问了你没有准备的方案或者优化细节。导致面试表现不佳。即使在实现相似的业务功能,不同的团队会因为技术背景,开发时间,业务逻辑的差异会采取不一样的方案。面试官提问的时候,可能是以 Ta 过去的解决方案作为基础,但你很可能不熟悉 Ta 的方案也没有思考过这个方案相关的问题。

解决方案

针对你的简历上的主要项目,你需要参考项目介绍示例撰写相应的 STAR 文档。STAR 文档一方面能够强迫你对项目进行思考和回顾,并且尝试列出面试官可能提出的问题以及思考优化方案。另一方面也能够帮助你在面试沟通中更有条理地进行阐述。在 STAR 文档中,你应该尽量脱离业务,主要从功能点和技术细节方面进行阐述,例如工具的某个特性和基础原理,这样能够将面试官的提问限制在一定范围中。

技术细节

这类问题需要从两个方面进行准备:

1. 简历的描述要引导面试官

简历中的描述需要帮面试官想好问题,一些关键字例如 Consistent hashing, External consistency 本来就是面试常考的内容,你可以将其加在项目描述中,面试官就会有意识地向该方向提问。反之,一个不好的项目描述是仅仅针对业务模块,例如:

"Collaborated with developers and designers, developed a news recommendation system with over 1000 QPS;"

上述例子仅仅描述开发了 news recommendation system,面试官可能没有接触过此类系统,这时候 Ta 的提问范围可能会天马行空,既可以是系统的架构设计,常规组件的使用原理,也可以是项目的部署与测试。这种情况下,你需要花费大量精力复习与准备这些内容,并不值得。

一个更好的描述应该针对通用的功能点

"Developed a distributed real time news recommendation system using Golang, Redis and WebSocket with over 1000 QPS;"

由于 distributed 与 real time 这两个功能点在其他系统也会使用到,面试官也更可能熟悉相关的内容。Ta 不需要了解你的业务场景,就能提出一些熟悉的问题,例如:

  • 系统是如何实现 real time 的消息推送?(描述中提到了 read time 以及 WebSocket)
  • Redis 分布式相关的内容(描述中提到了 distributed 与 Redis)

2. 针对性复习

针对简历中描述的功能点进行复习,就能有效缩小复习的范围。在系统设计指南中,我们列出系统设计的知识点以及推荐阅读资料,你可以根据自己项目的功能点以及组件进行复习。

note

苹果,微软以及亚马逊对于资深工程师会更关注简历上的项目,

如果你找的是实习岗位或者校招的话,首先需要选择合适的项目,合适的项目分为两个维度,优先选择左边的项目:

选择合适的项目

如果你简历缺乏竞争力的项目的话,需要先选择合适的项目,其中整体项目开发(开发一款音乐评分软件)> 造轮子(开发简单版的服务器)> 常见项目(博客,To do list, 简易游戏),参考资源: