没有项目经验怎么办?如何快速积累项目经验?(完结)




没有项目经验怎么办?如何快速积累项目经验?(完结)
针对大学生来说,往往都会比较缺项目经验,简历上把计算机基础写得再怎么扎实,没有
项目经验总会感觉缺胳膊少腿,如果不能快速积累和填补,就会成为自己的短板。
针对刚入职的新人/假期实习生来说,公司一般都会给一段缓冲的时间,去消化和理解项
目需求,那如何才能在有限的时间里充分理解项目的需求,快速上手代码呢?
针对这两种情况,我们来一一分析下。
一、没有项目经验怎么办?
大学生普遍缺少项目经验,这是国内高校普遍存在的问题,毕竟很多高校的老师上课就会
读读 PPT,完全没有能力带学生做一些比较有竞争力的实战项目,即便是做,也都是偷偷
摸摸接私活挣外快的,学生完全是用来充当廉价劳动力的,根本就获取不到有用的项目经
验。
甚至有一部分小伙伴,受限于公司的环境,做出来的项目根本没办法登大雅之堂,毫无技
术含量,尤其是做一些政企类的项目,那简直还停留在 ASP 和 JSP 的年代,那这样的项目
经验写到简历上,自己都觉得不好意思。
那针对这种情况,该怎么办呢?
1)跟付费专栏
假如你没有三高的经验,目标公司又明确要求了三高经验,怎么办?
如果自己的经济能力许可,那可以选择报班/跟付费专栏的,前提条件是这个培训班/付费
专栏的确是实打实能教到东西的。
另外就是,报了班一定要跟上进度!一旦某个环节跟不上,再去通过其他时间去补,往往
容易一拖再拖,最后不了了之。
有任何不懂的地方,要能立即向老师反馈,毕竟掏了钱的,要花得值。
2)参与到开源项目
GitHub 上和码云上还是有很多实战类项目的,你可以选择一个来研究,在原有的基础上
增加和融合其他的功能,要么成为贡献者,要么把它改造成一个属于自己的开源项目。
这里列举一些我认为比较有价值的开源实战项目。
01、网站/博客/论坛/考试系统
1)codingmore:编程喵是一个前后端分离的知识库网站项目,采用 Spring Boot+Vue 开
发。
2)vhr:微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开
发。
3)uexam:一个非常不错的考试系统!
4)PassJava-Platform:一款面试刷题的 Spring Cloud 开源系统。
5)MoguBlog:一个基于微服务架构的前后端分离博客系统。
02、电商系统
1)mall:一套电商系统,包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis
实现。
2)mall-swarm:mall 的微服务升级版。
Vue 用户移动端。
4)newbee-mall:新蜂商城,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后
台管理系统。
03、权限管理系统
1)pig:基于 Spring Boot 2.6、 Spring Cloud 2021 & Alibaba、 OAuth2 的微服务 RBAC 权
限管理系统。
2)Cloud-Platform:国内首个 Spring Cloud 微服务化 RBAC 的管理平台,核心采用 Spring
Boot 2.4、Spring Cloud 2020.0.0 & Alibaba,前端采用 d2-admin 中台框架。
3)eladmin:一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、
Redis、Vue 的前后端分离的后台管理系统。
4)RuoYi:基于 SpringBoot 的权限管理系统,核心技术采用 Spring、MyBatis、Shiro。
04、秒杀系统
1)miaosha:一套基础高并发大流量的秒杀系统。
2)springboot-seckill:基于 SpringBoot + MySQL + Redis + RabbitMQ + Guava 开发的高并
发商品限时秒杀系统。码云上也有一个同名的秒杀系统:https://gitee.com/52itstyle/spri
ng-boot-seckill
05、快速开发脚手架
1)Guns:一个现代化的 Java 应用开发框架,基于 Spring Boot。
2)jeecg-boot:一款基于代码生成器的低代码平台,主流技术包括:SpringBoot2.x,
SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT。刚参加工作那会接私活就用
过,不过还是 SSM 版本。
3)jeesite:一个企业级快速开发解决方案,采用经典开发模式,提供 Spring Boot 在线代
码生成功能。
4)ruoyi-vue-pro:基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统
+ 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短
信、商城等功能。
5)lamp-cloud:基于 Jdk11 + SpringCloud + SpringBoot 的微服务快速开发平台,可配置
SaaS。
6)SmartAdmin:一套我家人团队研发的互联网企业级的通用型中后台解决方案!
无论是做开源项目还是跟付费专栏,最重要的是动手跟着做。拿开源项目来说,mall 里
面没有秒杀功能,那能不能将秒杀功能融入进去呢?只是去跟着原项目做的话,只能是模
仿,如果能加入自己的创新,让原有的项目焕然一新,那么这样的项目经验写到简历上,
肯定会让面试官耳目一新。
二、学习类项目会不会被面试官嫌弃
有时候,在我们无法判断面试官的想法时,确实会有这种担忧。但对于应届生来说,大部
分面试官是不会在项目经验这一环吹毛求疵的!毕竟应届生啊,总不能拿社招的标准来要
求。
所以,只要自己在跟着视频做项目的时候夯实了自己的基础,又锻炼了敲代码的能力,我
想大部分面试官是不会为难的,除非遇到故意刁难的面试官。
当然了,也不要在网上随随便便找个项目应付着做,如果刚好面试官之前接触过这样的低
质量项目,那到时候的印象就会很差,这个自己要把握一个度。
还是那句话,重要的是要有创新,要思考,不要照搬全抄。比如说:
• 原有的项目没有全局搜索功能,能不能上一个 elasticsearch 进来?
• 原有的项目没有秒杀功能,能不能上一个秒杀的进来?
• 原有的项目竟然还用的是 SSM,能不能切换到 Spring Boot?
• 原有的项目没有微服务,能不能上一个微服务版?
• 原有的项目某一条 SQL 语句执行超慢,能不能做索引优化,SQL 优化?
• 原有的项目没有缓存,能不能上 Redis?
• 原有的项目没有做权限校验,能不能用 SpringSecurity 上一个?
我在做 Java 技术面试官这些年,真收到过一些没有任何项目描述的简历,或者这些项目
的描述相当简单,比如说只列出了项目的开始和结束时间,只给出了项目名,卓尔这大致
列一些项目的业务,甚至连所用到的技术都没有列出来。
像这零项目经验的,确实是比较吃亏的。
还有一些会在简历上明确说,在毕业设计中做了什么项目,在培训班里做了什么项目,比
如说 XX 电商项目、超市系统、图书管理系统等等。像这些学习类的项目经验,虽然说和
商业类的项目经验还有蛮大的差距,但至少比零项目经验的好很多。
对于应届生来说,学习类的项目经验也足够了,毕竟应届生中能给出商业项目的人不多。
总之,简历上尽量不要让自己项目经验这块是空白的。
• 在校期间,是否利用过假期和周末在软件公司里兼职过?
• 大学的老师,博导硕导,有没有教你帮忙做过项目?
• 毕业后,是否帮老师干过实验室的项目?
三、面试一般怎么确认项目经验?
第一,问项目的基本情况,比如说哪个公司做的,客户方是谁,是否上线,项目的人数和
开发管理的方式
第二,不会太关注业务,更看重你项目里用了哪些技术
第三,如果简历里写了数据库调优、OOM 排查、分布式组件的使用经验,一般会一一落
实。
第四,项目所用的管理模式,是不是敏捷开发?
第五,有没用用到分布式组件,比如说 Redis 缓存,Dubbo 做远端调用
四、如何快速积累项目经验?
第一步,搭建好环境,先把项目跑起来,就我所知,如果你没有任何项目经验的话,光让
一个项目跑起来就挺不容易的。
第二步,拿 Spring Boot 项目来说,项目跑起来后,要能拿着其中某一个业务,前后端串
联起来,比如说登录,用户名密码是如何传递的,如何校验的,如何连通数据库的,如何
返回给前端的,如何获取权限资源的。
通过这个流程,你可以了解业务请求处理时,会走哪些流程,需要哪些 API,配置文件该
如何写,又该用到哪些注解。
第三步,流程跑通后,需要关心一下常用的组件,比如说数据库连接池,比如说 logback
是如何保存日志的,比如说拦截器、过滤器是如何校验请求参数的。
第四步,原有的项目摸清楚后,从局部到全局,开始新增功能。
五、面试前准备的说辞
你在简历上写好了项目描述后,一定得准备在面试中介绍项目的说辞,这部分的说辞其实
就是你写在简历上的项目描述,这里大家可以参考如下的说辞,在简历上写项目。
1)介绍项目的背景和细节,以及来说明是商业项目
这个项目是在 xx 公司做的,是从 xx 年 x 月做到了 xx 年 x 月,项目名是 xx 超市管理项
目,这是个维护项目,我们公司是拿过拿来的新增和维护功能。项目组是 6 个人,一个项
目经理,其它是开发,测试是另外的团队。
如果你这不是在公司里做的,比如是帮实验室老师做,或者是创业,也需要说明,同时要
说,我是从这个项目里挣到了钱。
2)说下项目的管理方式和的管理软件
这个项目是用敏捷开发模式,我们每天有站会,一个月发布一次,每次发布是用迭代发布
的模式。这个项目是用 Maven 管项目,用 GIT 来存代码,用 jenkins 来部署,每次发布
时,我们会把项目打成 jar 包,然后放到 linux 服务器上。
3)说下项目用到的技术,这里也可以提一下你做的模块
这个项目用的是 spring boot+jpa,日志是用 logback 写的,是用 aop 来统一处理异常,用
到了 redis 来缓存数据,用 dubbo 实现了远端调用,在这个项目里,我做了入库和销售等
模块,在做的时候,我会用 junit 来单元测试,或者说是用其它方式来确保质量。
4)抛出亮点,引导面试官的提问
在这个项目里,我解决过数据库性能问题,解决过 OOM 内存问题,有看 linux 日志解决
线上问题的经验,甚至可以进一步说,有用 redis 实现缓存和用 dubbo 做远端调用的经
验。
比如说排查数据库性能问题的亮点
我们项目的运维(或项目经理)做了配置,一旦 linux 服务器上的 sql 语句执行时间过
长,我们就会收到邮件。收到邮件后,我们先用执行计划(execute plan)去扫一下该
sql,会发现是索引没建,对应的建下索引即可。
比如说排查 OOM 问题的亮点
我们项目的运维(或项目经理)做了配置,一旦 linux 服务器上的 JVM 内存用量超过
70%,而且时间超过 5 分钟,我们会收到邮件。(一样是先收到告警邮件)再说下排查方
式,于是我们会看 dump 文件和业务日志,看日志后,发现在导入文件格式的进货清单
时,导入后没关 IO 对象,于是就有 OOM 问题了。解决方法是导入后关掉。
比如说排查线上问题的亮点
先描述下问题,比如客户抱怨说某个付款操作有问题,于是你就去看日志,这里再详细说
下打开 linux 日志并排查问题的命令,一般是用 vi 命令打开文件,用 grep 等命令根据错
误关键字搜索,根据问题的时间点找到异常后,再根据线程号找到上下文,这样就能定位
到问题。
问题的原因你可以说,是因为这个请求的参数传入有问题,本来应该是数字,但不是,所
以导致问题,解决步骤更可以一笔带过,毕竟这里你是展示排查线上问题的经验。
总之呢,就是大家在项目经验这块不要留白。