⭐项目经验常见问题解答(补充)
如果你的学历比较一般的话,格外注意要把重心放在自己的项目经历上。投递简历之前,思考一下:自己的项目经历是否有亮点?是否还有亮点未被挖掘?是否吃透项目经历中的涉及到的知识点?.....
建议你先整理完善自己的项目经历,再去吃透项目经历上对应的知识点。在学习对应的知识点的 过程中,反过来进一步完善自己的项目经历,相辅相成。
如果你没有项目经验的话,建议你尽量一边学习各种框架和中间件一边做一个完整且有一些亮点的项目作为自己的项目经验。
你面试中的重点就是你的项目经历涉及到的知识点,如果你的项目经历比较简单的话,面试官直接不知道问啥了。另外,你的项目经历中不涉及的知识点,但在技能介绍中提到的知识点也很大概率会被问到。像 Redis 这种基本是面试 Java 后端岗位必备的技能,我觉得大部分面试官应该都会问。
一个项目的话不是不可以,但你一定要保证这个项目不能太鸡肋。如果太鸡肋的话,简历关可能就直接 pass,而且面试官提问都不好提。
⭐面试官一般如何考察项目经历?
不同面试官考察项目经历的风格略有不同,但大体思路都是相似的。
大部分面试官会先让你简单介绍一下你的项目,以考察你对项目的了解程度。你可以从项目背景、核心功能、技术栈、自己主要负责的功能、亮点、难点、个人收获等角度去准备项目介绍。实际面试的时候,根据具体情况和要求去介绍项目即可,注意表达简洁,突出重点。
在你介绍的期间,面试官也会去看你写在简历上的项目经历介绍。如果你介绍到他想深入了解的点,他可能还会打断你,提一些项目技术实现相关的问题(后面有总结),让你进行详细介绍。
一些面试官还很可能会以直接提问的方式询问项目基本情况。项目基本情况常见问题考察:
- 这个项目主要是做什么的?是真实的项目的吗?
- 你在这个项目中主要做了哪些工作?
- 聊聊项目的亮点?
- 项目开发过程中有没有遇到什么困难?如何解决的?
- 通过这个项目,你最大的收获是什么?
- ……
了解了项目的基本情况之后,面试关一般就会开始对项目技术实现提问了。项目技术实现常见问题考察:
- 项目是如何上线的?
- 画一下系统的架构图。
- 介绍一下 xxx 模块或功能的数据库表设计。
- 介绍一下 xxx 功能的具体实现。
- 系统的 xxx 功能为什么使用 xxx 技术实现?
- 系统的 xxx 功能有其他实现方案吗?
- ……
这里的重点是把你项目经历上写的工作内容给吃透搞懂,面试官一般不会问你工作内容之外的技术实现。
需要注意的是,面试官通常还会针对你的项目用到的技术进行深挖,考察你的技术功底。比如你的项目用到了缓存 Redis,那面试官就可能会追问你 Redis 相关的问题也就是 Redis 八股。甚至说,有的面试官会给你提出一些挑战性的问题,比如让你解决一些项目中遇到的或者可能遇到的问题、扩展一些项目中没有实现的功能、对比一下不同的技术方案。
⭐如何准备项目经历的回答?
上面已经介绍了面试官一般会如何考察项目经历。这里再介绍一下作为求职者,我们可以从哪些方面去准备项目经历的回答:
- 你对项目基本情况(比如项目背景、核心功能)以及整体设计(比如技术栈、 系统架构)的了解(面试官可能会让你画系统的架构图、让你讲解某个模块或功能的数据库表设计)
- 你在这个项目中你担任了什么角色?负责了什么?有什么贡献?(具体说明你在项目中的职责和贡献)
- 你在这个项目中是否解决过什么问题?怎么解决的?收获了什么?(展现解决问题的能力)
- 你在这个项目用到了哪些技术?这些技术你吃透了没有?(举个例子,你的项目经历使用了 Seata 来做分布式事务,那 Seata 相关的问题你要提前准备一下吧,比如说 Seata 支持哪些配置中心、Seata 的事务分组是怎么做的、Seata 支持哪些事务模式,怎么选择?)
- 你在这个项目中犯过的错误,最后是怎么弥补的?(承认不足并改进才能走的更远)
- 从这个项目中你学会了那些东西?学会了那些新技术的使用?(总结你在这个项目中的收获)
另外,强烈推荐你看看这篇文章:
如何介绍项目架构?
如果在面试中被问到项目架构,条件允许的情况下,建议画一下项目应用架构简略图,然后对照着图来讲。项目应用架构简略图需要展示出系统的分层结构,包含业务逻辑层、中间件层、数据存储层等。
商城系统应用架构图示例:
在介绍项目架构的时候,可以包含以下信息:
- 分层结构:介绍系统的各个层次,每一层的作用是什么?
- 服务划分&通信方式:如果是微服务项目的话,需要详细介绍服务是如何划分的以及各个服务之间的通信方式。
- 技术选型:说明项目中使用的主要技术例如框架、数据库,它们的作用是什么?为什么这样选择?如果有技术亮点,可以重点介绍一下。
- 安全:介绍项目中实施的安全措施,如用户身份认证、权限控制、数据加密。
- 监控:介绍项目使用的监控系统,监控指标以及告警机制。
- 部署方式:项目是如何被部署的,服务器还是 Docker/Kubernetes 或者是其他部署方式?
- 挑战与解决方案:介绍你在架构设计过程中遇到的挑战以及你是如何解决这些问题的。
- 改进建议:没有完美的项目架构,时间允许的情况下,可以聊聊你对如何改进当前项目架构的看法。
相关阅读:架构设计类别有哪些?如何画好架构图?。
⭐简历上的项目太简单怎么办?
这种情况挺常见的,很正常的,毕竟绝大部分人接触到的项目其实都是比较一般的。我经常听到有球友抱怨自己做的项目涉及到的技术亮点非常少,主要都是一些业务相关的东西。
项目太简单主要会导致两个问题:
- 如果你的 项目经历太简单,主要都是一些业务或者 CRUD 相关内容的话,一般就会直接卡在简历筛选这一步,面试机会很少很少,甚至没有面试机会。
- 对技术面试不太友好,毕竟有水平的面试官主要都是根据项目经历去问一些技术问题。如果你的项目经历太简单,面试官很难去提问,你自己也没办法通过项目经历来缩小技术面试的重点范围。
如果自己的项目太简单的话,如何去弥补呢?
有几点方法可以参考:
- 参与开源项目,在开源项目的基础上进行学习改进,包装成真实的项目。开源项目建议优先选择自己过往工作中接触过的业务类型,这样能更快上手,也更容易包装成真实的项目。Java 类的实战开源项目可以参考我的总结:Java 优质开源实战项目 ,里面有很多非常赞的项目。
- 对自己过往的项目进行改进完善,例如加入一些性能优化、对原项目的一些技术实现进行修改、新增一些合适的功能等等。这是我比较推荐的一种方法,也是绝大部分求职者采用的办法(下面会详细介绍到如何优化自己的项目)。
- 在网上找一个符合自己能力与找工作需求的实战项目视频或者专栏,跟着教程一起做。跟着教程做的过程中,你一定要有自己的思考,不要浅尝辄止。对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去深入学习。另外,不要完全按照原教程来,尤其是那种热门项目(很容易和别人撞车),适当加入一些不一样的东西,比如简单改变一下技术选型、优化一下原项目的某个模块的技术实现。