一、项目选择
项目经历是简历上的重要组成部分,一般技术面有一半时间去拷问你做的经历,所以做好和讲好项目经历尤为关键!
这里建议项目至少有两个,一主一辅,项目经历可以是你的科研、实习,或者你的个人项目。前两者都是需要实验室和实习公司的加成,所以这部分主要讲的是个人项目的选择:
1. 项目选择-经典项目
关于烂大街项目要不要选?
每种语言都有很经典、流传甚广的项目,比如c/c++的webserver, 或者java的各种商城、管理系统。 这些项目的好处是资料多,易参考,易实现,甚至有很多面经;坏处就是容易落入俗套,无法引起面试官的兴趣。
所以我认为这些项目更适合一些准备时间不充足,速成的同学,可以快速掌握项目知识点,同时,需要在自己的了解上尽量添加一些创新点,避免千篇一律。
最后是尽量自己动手实现一遍,知道哪里有坑,面试经常会遇到你做项目过程中遇到的最难的问题是什么,回答也言之有物。
2. 项目推荐-基础项目
对于应届生来说,公司并不期待你有多么亮眼多么优秀的项目,很多时间反而更看重基础,所以一些基础类的课程实验,做的扎实了也可以很好:
- 哈工大的操作系统实验
- c++ 的STL实现
- CSAPP的八个实验
- MIT6.S081: Operating System Engineering
- …
3. 其他项目
现在很多公司越来越看重简历上的项目经历和他们工作的匹配度,所以如果有明确的求职方向,可以去做一些近似的项目,主要查找渠道:
- 一些名校的课程实验:比如分布式可以去做MIT的分布式课程实验
- github搜索查找优秀的项目
- 开源社区的一些共享,比如大数据Flink开源社区
- 付费课程实验,可以找同学拼单
二、项目准备
做完项目仅仅完成了一半,更重要地是如何在面试过程中把自己的项目讲述好:
1. 面试前:提前准备
面试官的问题无法预测,但我们要保证完全掌握我们的项目,可以提前写到word上,想好怎么讲述自己的项目。
为此,对于重要的项目经历,你需要准备两个版本。一个是精简版本,放在简历上。另外一个是详细的版本,用于面试的时候讲给面试官,准备的问题:
- 项目描述
- 项目架构、模块、主要功能,以及如何协同工作
- 所有模块可能涉及到的知识点 项目的难点,重点 你的思考和优化
- 性能指标,优化力度 有没有其他类似的工具,有没有比较
- 你的收获
- 牛客类似项目面经
2. 简历上:表明重点
- 对于重点,可以加粗表示;性能优化要量化,比如时间优化了30%
- 简历一般从这几个方面概括:
- 项目描述
- 项目内容(个人工作)
- 项目难点
- 项目收获
3. 面试中:star法则
面试前已经准备好详细版本,面试中逻辑清晰,可以回答大多数问题。毕竟没有人比你更了解你的项目,保持自信,说就完事了。
如果你有一个很突出的亮点,但对方没有发现,或没有问,你也可以主动cue, 比如回答完问题,顺着说其实我这个项目还用了xx技术,因为哪些问题,优化了什么。原则就是展现自己!
另外一个技巧,可以参考stat法则,situation, task, action, result。也就是在什么场景下遇到了什么问题,采取了什么解决办法,最后得到了什么成果。
4. 面试后:复盘
这个很好理解,把面试官的问题记录下来,复盘一下自己答得不好的,或者没有思考到的地方,查缺补漏,十几场面试下来,基本已经没有能难道你的面试问题了~