暑假实习

转眼暑假就快结束了,对于博主来说这可能就是最后的一个暑假了,接下来的夏天只会在公司当牛马度过了。而这个暑假从七月三号开始,到上个星期五结束,博主也进行了差不多快两个月的Java开发实习。

实习上确实也没干啥说的上来的事,每天都是干干增删改查的事情,还要经常写点前端,ReactVUE都有写,真就全栈实习了。虽然说是没干啥事,但是由于公司离学校太远,来回通勤时间要两个多小时,每天七点半起床,七点钟才能回到学校,感觉每天都累的不想动弹,视力还又下降了几十度。本来秋招在即,自己又是半桶水的水平,应该好好准备的才对,结果现在暑假都快结束了,不仅没学啥东西,原来背的哪些面经都还忘得差不多了,这下真就寄中之寄了。不过现在也是只能霸王硬上弓了,现在就好好写写简历,背背面经,准备一下项目,还有把实习经历也完善一下,秋招找个好班上。

下面总结一下面试可能问到的问题,不至于到时候支支吾吾放不出一个屁出来。

实习经历

Q:你在实习期间都做了哪些项目?请简要介绍一下。

A:实习期间我主要参加的项目是一个叫湘快车的项目

项目背景:

随着私家车在中国的兴起,私家车出行顺路接送朋友、同事、邻居等成为潮流,而中国互联网的兴起为这种行为提供了便利,在湘快车这类的网约车企业推出的应用之前,私家车司机与乘客之间已通过QQ、微信以及本地的社交平台建立联系,在各个城市之间存在着不少拼车群,在一二线城市建立的老乡群也承担了部分拼车功能,可以说这种私家车拼车已存在多年。私家车拼车的存在为用户提供巨大的便利,对于一二线城市的郊区楼盘居民来说,私家车拼车让他们更方面的进入市区工作、娱乐,填补了公共交通工具的不足;对于在城市的打工者来说,私家车拼车以较低的价格、便捷的服务满足了他们迅速回乡的需求,特别是在春节、国庆等长假期私家车拼有效的弥补了各地运力的不足。

长期以来,由于缺乏专业平台的构建与领导,“顺风车”,“私家车”存在着各种隐患:司机信息模糊,水平不一;票价不统一,存在乱收费现象等。随着国家政策的开放和支持,将这一产业专业化,平台化,已经迫在眉睫。

湘快车主要包括后台管理和小程序两个大的模块,车站调度人员通过登录管理后台,对车站站点,线路,班次依次进行设置,进行计划班次排班,之后每天的班次就会自动生成,对于生成的班次,调度人员还能进行手动配置,如配置实际发班司机,实际车辆,还能调整实际车票价格;同时财务人员还能登录系统查看与下载各种营收报表,便捷的进行营收报账处理。小程序主要分为司机端和乘客端,司机端登录小程序可以有待自己处理的班次信息和乘客乘车信息,实现点对点联系和接送乘客,还能进行报班和营收信息查看。乘客端主要是乘客购票的窗口,乘客选择乘车起始点,填写乘客信息实现买票,同时还能在订单中心查看自己的历史订单,进行退单和改签等操作。


Q:聊聊项目技术栈

A:湘快车项目采用前后端分离架构,后端服务采用Spring微服务架构,以MySql作为数据库,Mybatis作为数据持久层框架,同时使用了tk mapper来处理Mybatis繁琐的单表CURD;使用SpringMVC来处理请求和响应,实现Restful接口。采用Shiro框架管理用户认证和授权,保障系统安全性。

微服务中间件使用Redis来实现数据缓存和分布式会话和分布式锁,通过使用 Redis,我们有效地解决了数据访问速度、分布式会话管理和数据一致性等方面的问题,提高了系统的性能、可扩展性和用户体验;我们使用 Nacos 作为服务注册中心,所有的微服务在启动时都会向 Nacos 注册自己的信息,包括服务名称、IP 地址和端口号等。其他微服务可以通过 Nacos 的服务发现功能来动态地发现和调用其他微服务,实现了微服务架构中的服务之间的解耦和动态扩展,我们使用 Nacos 作为配置中心,将微服务的配置信息集中管理。我们可以在 Nacos 中定义不同环境下的配置项,如数据库连接、缓存配置等。通过 Nacos 提供的配置动态刷新机制,我们可以在不重启应用的情况下更新配置,提高了系统的灵活性和可维护性;我们使用 Kafka 作为不同微服务之间进行异步通信的消息中间件。每个微服务可以作为 Kafka 的生产者,将产生的事件和消息发送到 Kafka 集群,而其他微服务可以作为消费者,订阅并处理这些消息。这种松耦合的异步通信模型有助于解耦和扩展我们的微服务架构。我们使用 xxl-job 定时调度平台,配置和管理各种定时任务。例如,我们可以通过 xxl-job 创建定时任务来实现每天的班次数据更新、消息通知、统计报表生成等业务逻辑。

系统服务组成主要有用户管理ums服务,网关gateway等基本的微服务,其中最主要的是小程序后台服务和后台管理服务。小程序后台服务就是之前说的提供给司机和乘客的那两个小程序所需的微服务接口,后台管理服务就是给管理人员进行调度排班和报表查看的服务。


Q:你实习都干了些什么?

A:我是从七月初开始实习的,由于九月初就要开学了,于是实习到了八月底。两个月的时间说长不长,说短不短。

刚开始的两个星期主要让我们熟悉系统,熟悉系统用的技术栈和业务场景。由于是实习生,也确实没给我分配什么重要的核心的业务,所以后面的几个星期主要是做一些零零星星的项目优化,比如需要返回的数据里面加几个字段,或者就是写一些CURD的接口,还有就是项目文档完善。后面让我实现的比较完整的功能就是利用微信公众号推送乘客的订单信息。

具体业务场景就是,湘快车定制客运需要司机和乘客之间有紧密联系。在乘客购买车票下单之后,需要即使的推送订单信息通知司机,原来的业务是通过发送短信通知,于是就有几个问题,首先是我们的短信通知是使用腾讯云的短信包,一条短信就有几毛钱,虽然看起来便宜但是在用户量巨大的情况下也是一笔不小的费用,所以为了节省成本就要求我们把原来的订单推送业务通过微信公众号实现;再者就是短信推送订单信息无法和已有的微信小程序之间进行很好的联动,改成微信公众号推送之后就可以直接通过点击订单跳转到小程序;同时还可以实现微信公众号引流,带动微信公众号关注人数的上升。

回到这个微信公众号订单推送的功能上,由于之前我们的系统没有对微信公众号后台服务进行开发,原来的公众号功能只有一些自带的关键字回复之类的功能,而要实现微信公众号订单推送功能,就只有自己实现公众号后台服务。所以虽然说是只有一个功能点,其实我是从头开始开发这个功能同时还开发了微信公众号服务后台,实现了一些其他基本的微信公众号功能。具体的业务就是两点:订单消息发给谁?发送什么样的订单消息?对于第一点可以在原有的后台用户管理基础上加上绑定微信功能,扫描生成的唯一二维码跳转到微信公众号,通过关注公众号将携带的场景值回传给微信公众号后台接口,后台获取到用户的微信openid,添加到数据库中,完成绑定;第二点的业务其实实在原来业务的基础上进行修改,之前发送的短信替换成微信公众号推送消息就行了。


Q:实习遇到了哪些问题?

A:由于分配业务其实都不是很难,所以在业务开发上反而我没有遇到什么问题,反而在其他方面,比如业务协商,业务分析,多人协调开发上我遇到了一些以前没有遇到的问题。比如刚才说的微信公众号后台开发,由于之前没有及时地讨论需求,所以开发的时候我只开发了乘客下单的订单消息,后面更新需求的时候又提出让我增加乘客改签和退单的消息推送,这就导致我又要修改我之前已经开发好的功能,虽然改动不是很大,但是其实我能更好的同步需求,积极的讨论和分析需求,在开发的时候留足以后的拓展空间,其实就能更快更好的完成开发了。另外就是之前说的微信公众号绑定,原来的用户表并没有预留出存储微信openid的字段,对于这个我刚开始没有经验,不知该不该加字段,之后和导师反应与协商之后才解决。


Q:实习你学到了哪些?

A:就像我刚才说的,实习我学到更多的是实际企业开发中到底是如何提出需求,分析需求,代码实现,测试和上线这样的从头到尾开发流程。比如在蓝狐里面查看功能设计原型,在tapd里面同步进度,对着文档写请求参数映射字段,git切出分支开发特性功能再合并,测试和上线。这些在平时自己开发可能就完全没有机会遇到这种问题和经历。当自己开发的功能实际上线的时候还是有点成就感。其实让我体会最深的其实是,在企业实际开发中,代码实现功能反而不是最重要的,反而是如何和他人沟通。比如多分枝开发的时候,有一次我的代码和其他人的冲突了,我就必须和他仔细协商,问他的业务是如何的,实现在不影响它的代码的基础上完成自己的功能。所以让我感受最大的是无论是在业务需求和功能分析上,如果有问题一定要及时的和负责人沟通,而不是自己干自己的,开发不是一个人而是一个团队的事情。