大家好呀,我是楼仔。
之前有粉丝反馈自己的项目经历太少,不好写简历,影响找工作,不知道你有没有这样的困惑。
今天我就针对校招毕业生,以及工作 0-3 年的同学,手把手教大家如何将技术派项目写到自己的简历中。
明天五一放假,对于还没有找到工作的同学,可以再好好准备一下。
01 校招毕业生
校招毕业生对于项目的考察,主要还是偏基础和应用。
1.1 如何写简历
项目名称:技术派社区项目(2022.7-2023.1)
技术栈:Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、RabbitMQ、MongoDB、Docker
项目描述:技术派是一个前后端分离的社区项目,包括前端 PC 和管理后台,用于帮助开发者成长的社区,面向互联网技术人的内容分享平台。
责任描述:作为核心研发人员,主要负责登录认证、消息通知、文章模块、以及管理后台的开发工作。
核心技术:
- 通过验证码和前端保持半长链接映射关系,当用户扫码关注公众号并输入验证码后,发起回调,识别用户信息并找到对应半长链接,实现系统自动登录;
- 将消息发送到 RabbitMQ,实现消息异步解耦,提升系统效率和服务稳定性;
- 通过 Redis 实现计数统计和用户活跃度排行,并通过 Redis + MySQL,提高系统并发;
- 借助开源的 Markdown 文本编辑器,结合 OSS 图片服务器,实现图片自动转链和上传。
- 借助开源组建,完成管理后台的二次开发,支撑日常的运营配置工作。
1.2 核心面试点
考点1:微信公众号自动登录
用户在前端点击登录时,会展示公众号二维码和待输入的验证码,并会和前端构建一个半长连接,同时保存验证码和半长连接之间的映射关系。
当用户向公众号发送验证码时,微信公众平台会将用户发送信息转发给技术派的服务器,然后通过验证码来识别请求登录的用户身份。
由于验证码保存了和半长链接的映射关系,所以可以找到该半长连接,实现用户的自动登录跳转。
那如何保证验证码的唯一性、唯一设备、唯一用户识别,以及刷新验证码时,如何将之前的验证码置为失效呢?
登录后,如何通过 Cookie 和 Seesion 机制实现登录鉴权呢?
由于内容较多,这块详见技术派教程。
考点2:通过 RabbitMQ 实现消息异步解耦
首先说一下,为什么要异步解耦?
当用户订阅、点赞、评论时,就会触发消息通知,如果当用户操作时,消息同步发送,当消息出现异常时,会影响主流程,或者当消息过多时,也会有影响服务的性能,所以需要对消息进行异步解耦。
选择 RabbitMQ 的原因是什么呢?
首先是社区活跃度高,然后 RabbitMQ 还提供了有一个易用的用户界面,可以让用户监控和管理消息,同时我们的系统对并发要求没有那么高,消息通知也可以无序,且 RabbitMQ 也支持消息路由,宕机后的消息也能自动恢复,所以就选择了 RabbitMQ。
由于是应届生,所以面试官一般不会考察消息队列的选型,万一考了,可以看看后面"工作 0-3 年"的回复。
考点3:MySQL + Redis 相关知识点
问题 1:如何提高系统并发呢?
其实主要是在 MySQL 上游加一层 Redis 缓存,因为 Redis 支持集群、分片,单机就可以支持上万 QPS,所以可以大大提高系统性能。
实现方式主要是将热点数据放入 Redis 缓存,比如文中的分类和标签,使用频率会非常高,因为这些数据不会经常变动,且后台配置完毕后,会实时存入缓存中,非常适合作为热点缓存,并对热点缓存设置失效时间,比如 30 分钟,可以作为 Redis 和 MySQL 不一致的兜底策略。
然后对于计数、排行榜等,也可以依托 Redis 来实现。
问题 2:为什么可以用 Redis 实现计数和排行榜?如何实现?
由于 Reids 的内存具有高性能和存储能力,并且实现原子性操作,所以非常适合用来做简单的计数统计,通常会使用 INCR 或者 INCRBY 来完成自增操作,就可以实现实时计数功能。
对于如何通过 Redis 实现排行榜,详见技术派教程。
问题 3:如何解决 MySQL 和 Redis 缓存的一致性问题呢?
这个问题应届生一般问的不多,可以参考 "工作 0-3 年" 的回答。
考点4:图片自动转换等其它知识点
由于很多博主会将 MarkDown 格式的数据,直接 Copy 到我们的文本编辑器,但是里面的图片链接,由于是通过第三方工具生成,所以不一定能打开,所以需要将这些图片的链接进行转换。
我们会识别文章里面所有的图片链接,然后将这些图片批量上传到 OSS 图片服务器,实现图片链接的自动转换。
除了实现了 MarkDown 格式的图片链接自动转换,用户也可以手动上传本地图片,主要是为了方便习惯在文章编辑器直接写文的同学,支持功能的多样性。
考点5:管理后台相关知识考点
后台界面是基于 React 的一套开源系统,采用前后端分离的方式,我们是基于该套框架进行二次开发。
管理后台主要是用于 PC 端日常的运营和配置工作,主要包括 6 大模块,分别是运营配置、文章管理、教程配置、数据统计、标签和分类管理、用户权限管理。
由于我们有专门的前端同学,所以我主要负责后台这块,后台的功能开发其实都不难,但是很好地锻炼我的编程能力。
02 工作 0-3 年
工作 3 年的同学对于项目的考察,主要还是技术点,会问的相对深入。
2.1 如何写简历
项目名称:技术派社区项目(2022.7-2023.1)
项目描述:技术派是一个前后端分离的社区项目,包括前端 PC 和管理后台,用于帮助开发者成长的社区,面向互联网技术人的内容分享平台。
责任描述:作为项目负责人,主要负责系统设计、以及核心模块的开发工作,比如登录认证、文章模块、教程模块等。
核心技术:
- 依托主流技术栈,结合异步、分布式缓存、集群、多线程等技术,实现后端服务的高可用、可扩展和伸缩性。
- 通过验证码和前端保持半长链接映射关系,当用户扫码关注公众号并输入验证码后,发起回调,识别用户信息并找到对应半长链接,实现系统自动登录;
- 通过 MySQL + Redis,热点数据 Redis 缓存,实现系统高吞吐和高可用,并保证两者一致性;
- 通过 RabbitMQ 对消息进行异步解耦,提升系统并发和处理效率,同时也提升消息的容错性和可观测性;
- 借助开源的 Markdown 文本编辑器,结合 OSS 图片服务器,实现图片自动转链和上传。
2.2 核心面试点
考点1:架构和方案设计
该系统包括前端和运营后台,前端主要划分 5 大模块,包括登录鉴权、用户中心、文章教程、评论、消息通知,整个生态其实主要围绕用户和文章来展开;运营后台主要对文章、教程、标签、广告位、用户权限进行管理。
对于登录鉴权,我们主要依托微信公众号,通过扫描完成系统自动登录,这个主要是和微信第三方信息对接,同时借助 Cookie 和 Session 机制,实现登录鉴权。
对于文章教程,借助开源的 Markdown 文本编辑器,结合 OSS 图片服务器,实现图片自动转链和上传。
同时在高并发、异步、效率这块,也进行了很多设计,通过 RabbitMQ 实现消息异步解耦;通过 Redis 承接高并发流量,并解决 MySQL 和 Redis 的一致性问题;通过 ES 去承接文章搜索功能,提高文章搜索效率;通过 MongoDB 实现高效计数等。
目前服务也是通过多机部署,DB 采用分库分表 + 集群模式,Redis 也是集群模式,进一步提升服务的稳定性、容错性和吞吐量。
考点2:微信公众号自动登录
用户在前端点击登录时,会展示公众号二维码和待输入的验证码,并会和前端构建一个半长连接,同时保存验证码和半长连接之间的映射关系。
当用户向公众号发送验证码时,微信公众平台会将用户发送信息转发给技术派的服务器,然后通过验证码来识别请求登录的用户身份。
由于验证码保存了和半长链接的映射关系,所以可以找到该半长连接,实现用户的自动登录跳转。
那如何保证验证码的唯一性、唯一设备、唯一用户识别,以及刷新验证码时,如何将之前的验证码置为失效呢?
登录后,如何通过 Cookie 和 Seesion 机制实现登录鉴权呢?
由于内容较多,这块详见技术派教程。
考点3:通过 RabbitMQ 实现消息异步解耦
首先说一下,为什么要异步解耦?
当用户订阅、点赞、评论时,就会触发消息通知,如果当用户操作时,消息同步发送,当消息出现异常时,会影响主流程,或者当消息过多时,也会有影响服务的性能,所以需要对消息进行异步解耦。
为什么选择 RabbitMQ,不选择其它的消息队列呢?
目前常用的消息队列有 Kafka、RocketMQ 、RabbitMQ 和 ActiveMQ,对于 Kafka,它主要适用于大量数据的互联网服务的数据收集业务;对于 RocketMQ,吞吐量非常高,支持消息时序,对可靠性要求很高的场景会更合适,比如电商业务;对于 ActiveMQ,目前社区维护少,就直接放弃。
那么对于 RabbitMQ,虽然语言是 erlang,不利于二次开发和维护,但是社区活跃度高,同时我们的系统对并发要求没有那么高,消息通知也可以无序,同时 RabbitMQ 也支持消息路由,宕机后的消息也能自动恢复,还提供了有一个易用的用户界面,可以让用户监控和管理消息,所以就选择了 RabbitMQ。
考点4:MySQL + Redis 相关知识点
问题 1:如何提高系统并发呢?
其实主要是在 MySQL 上游加一层 Redis 缓存,因为 Redis 支持集群、分片,单机就可以支持上万 QPS,所以可以大大提高系统性能。
实现方式主要是将热点数据放入 Redis 缓存,比如文中的分类和标签,使用频率会非常高,因为这些数据不会经常变动,且后台配置完毕后,会实时存入缓存中,非常适合作为热点缓存,并对热点缓存设置失效时间,比如 30 分钟,可以作为 Redis 和 MySQL 不一致的兜底策略。
然后对于计数、排行榜等,也可以依托 Redis 来实现。
问题 2:如何解决 MySQL 和 Redis 缓存的一致性问题呢?
刚才说的通过增加缓存失效时间,如果缓存失效,会重新将 DB 数据持久化到缓存,可以解决两者不一致问题,但是这个只是兜底策略,但是在缓存未失效的这段时间,其实还是存在两者不一致的问题。
其实对于两者的一致性问题,不可能完全解决,只能尽量去规避,我们使用的是"先写 MySQL,再删除 Redis"的方式,即先将数据写入 MySQL,再删除 Redis 数据的方式。
不过这种方式也有个弊端,当同时有 2 个查询请求过来时,当缓存刚好失效,且写入 MySQL 和删除 Redis 中间出现较大时间间隔时,当第一次查询时,缓存还没有被删除,那么第一次查询的数据是旧值,第二个查询是在缓存删除之后,那么第二次查询是从 DB 获取,所以查询的是新值。
由于第二次查询会回写到 Redis,所以后续的查询,两者都会保存一致,仅在一些极端情况下,会查询偶尔不一致的情况。
如果面试官有问题你,有没有最终的一致性方案,或者和你讨论其它的缓存一致性解决方案,你能回答上来么?
考点5:图片自动转换等其它知识点
由于很多博主会将 MarkDown 格式的数据,直接 Copy 到我们的文本编辑器,但是里面的图片链接,由于是通过第三方工具生成,所以不一定能打开,所以需要将这些图片的链接进行转换。
我们会识别文章里面所有的图片链接,然后将这些图片批量上传到 OSS 图片服务器,实现图片链接的自动转换。
除了实现了 MarkDown 格式的图片链接自动转换,用户也可以手动上传本地图片,主要是为了方便习惯在文章编辑器直接写文的同学,支持功能的多样性。
03 写在最后
这篇文章,从"校招毕业生"和"工作 0-3 年"两个群体,告诉大家如何在项目中加入技术派项目,上面的项目内容,完全可以直接 Copy 到你的简历中。
对于大家比较恐惧的面试官提问环节,我也准备了大量的高频考点,主要是给你提供问题解答的思路。
除了上面的一些考点外,技术派项目里面还有很多其它考点,比如 ES 查询、数据库版本管理、配置中心、大厂的项目管理、方案设计等,可以根据自己的兴趣点,或者自己擅长的领域,再往里面加。
最后提醒一点,对于里面的知识点,大家一定要吃透,比如微信公众号自动登录,可能面试官再问得稍微深入一点,你可能就打不上来了,所以还是建议大家结合我们的技术派教程,来对项目进行学习。
04 技术派教程
技术派教程,原计划是 110 篇,目前已经完成 46 篇,下面是已经完成的文章。
开篇(4 篇):
- 技术答疑(⭐️)
- 技术派问题反馈及解决方案(⭐️)
- 踩坑实录之本地缓存Caffeine采坑实录(⭐️)
- 技术派系统架构、功能模块一览(⭐️⭐️⭐️⭐️⭐️)
大厂篇(8 篇):
- 技术派产品调研,让你了解产品诞生背后的故事(⭐️⭐️)
- 技术派产品设计(⭐️)
- 技术派交互视觉设计(⭐️)
- 技术派整体架构方案设计全过程(⭐️⭐️⭐️)
- 技术方案详细设计(⭐️⭐️⭐️⭐️)
- 技术派项目管理流程(⭐️⭐️)
- 技术派项目管理研发阶段(⭐️⭐️⭐️)
- 技术派的代码约束规范(⭐️)
基础篇(20 篇):
- 技术派整合Knife4j,美化丑陋的Swagger(⭐️)
- 技术派中实体对象 DO、DTO、VO 到底代表了什么(⭐️)
- 通过技术派项目讲解 MVC 分层架构的应用(⭐️⭐️)
- 技术派整合本地缓存之Guava(⭐️⭐️⭐️)
- 技术派整合本地缓存之Caffeine(⭐️⭐️⭐️⭐️)
- 技术派整合 Redis(⭐️)
- 技术派中基于 Redis 的缓存示例(⭐️⭐️⭐️)
- 技术派中基于 Redis 实现白名单(⭐️)
- 技术派中基于Cacheable注解实现缓存示例(⭐️⭐️)
- 技术派中的事务使用实例(⭐️⭐️⭐️)
- 事务使用的 7 条注意事项(⭐️⭐️⭐️)
- 技术派中的全局异常处理(⭐️⭐️)
- 技术派中的多配置文件说明(⭐️)
- 技术派中的定时任务@Schedule(⭐️)
- 技术派整合 Logback/lombok 配置日志输出(⭐️)
- 技术派整合邮件服务实现邮件发送(⭐️)
- Web 三大组件之 Filter 在技术派中的应用(⭐️)
- Web 三大组件之 Servlet 在技术派中的应用(⭐️)
- Web 三大组件之 listenter 在技术派中的应用(⭐️)
- 技术派实时在线人数统计-单机版(⭐️)
进阶篇(6 篇):
- 技术派之扫码登录实现原理(⭐️⭐️⭐️)
- 技术派身份验证之session与 cookie(⭐️⭐️)
- 技术派中的微信公众号自动登录方案(⭐️⭐️⭐️)
- 技术派中是如何实现原生图片上传的(⭐️⭐️)
- 技术派中基于异常日志的报警通知(⭐️⭐️⭐️)
- 技术派之深入理解HikariCP(⭐️⭐️⭐️⭐️)
扩展篇(2 篇):
- 技术派的数据库表自动初始化实现方案(⭐️⭐️⭐️⭐️⭐️)
- 技术派中基于 filter 实现请求日志记录(⭐️)
工程篇(6 篇):
- 技术派项目工程搭建手册(⭐️⭐️⭐️⭐️)
- 技术派本地多机器部署开发教程(⭐️⭐️)
- 技术派服务器部署指导手册(⭐️⭐️)
- 技术派的 MVC 分层架构(⭐️⭐️)
- 技术派 Docker 本机部署开发手册(⭐️⭐️⭐️)
- 技术派多环境配置管理(⭐️)
如何查看技术派教程呢?详见下面的网站哈~~
技术派网站:www.paicoding.com/