2022.06-2022.11实习总结

基于JSON Schema的配置平台

背景:这是公司的新人入职练手项目,总共两周时间,实现一个基于JSON Schema的表单配置平台。
需求:表单配置指的是通过可视化界面配置 表单的每个字段,包括名称、输入类型、输入限制等。mentor给了一个方向叫JSON Schema
调研:JSON Schema是描述json数据的元数据,本身也是json字符串,一般两个作用,1. 后端用 JSON Schema 对前端传的json传进行格式校验;2. 前端通过 JSON Schema生成表单

图 3

开发:前端使用Vue、后端使用Spring Boot
难点:JSON Schema和表单的双向转换。用户可以手动编辑JSON Schema生成表单项,也可以通过可视化界面增加表单项来修改JSON Schema。
解决方案:尝试过写一套解析方案,但是dom操作太复杂作罢。调研了一些开源方案,最终选用vue-json-schema-form

Excel比对与合并系统

背景:接手的第一个项目,关于Excel比对与合并,主要参与系统的优化与维护工作
主要工作:

  1. 批量文件比对的多线程优化(比对方法涉及对象完全栈封闭)
  2. 批量文件合并OOM排查(合并需要先反序列化比对结果,若有多个版本的比对结果需要合并到另一分支上的同名文件,需要循环处理,每个比对结果合并之后需要置空,否则内存无法释放,排查工具:visualvm,发现调用合并方法时,Minor GC非常快,内存居高不下导致OOM;根本原因:自己开发的Excel解析工具+Java自带的序列化导致序列化产物非常大)

算法介绍可以参看《Excel比对与合并系统》

助理系统

需求:公司员工反馈行政问题都是在公司的聊天软件里反馈,反馈途径包括事业群、私聊行政助理、以及服务号反馈(类似微信公众号),行政助理需要在多个系统进行处理,助理系统为助理统一了消息来源,助理可以在助理系统中回复所有渠道的问题反馈。
调研:spring-boot-starter-websocket,实现了客户端与服务器全双工通信
难点:助理系统需要给每个反馈问题的员工生成唯一的对话,初次反馈消息时,快速发送消息会创建多个对话。这是因为后端多线程处理消息,每个线程都先去数据库查询此条消息的员工是否存在对话,如果不存在就创建。这里出现了并发经典错误 check-then-act。
解决方案:给会话表的员工id字段建唯一索引,插入新会话使用insert ignore。