项目经验
中介借款平台(2022.08 - 现在)
使用技术: Spring Boot、MyBatisPlus、Mysql、Redis、rabbitmq, 多线程等;
项目介绍:中介借款平台,是一个提供各种线上线下的贷款产品平台,它不提供给贷款,用户只需在上面填写自己的一些信息,系统便可为用户的信息为用户推荐最精确的贷款产品或者贷款平台,方便客户方便且快速借到钱。 本平台分为app客户端,线上推广H5, 下游数据分发平台, 数据统计端,以及后台管理端。
个人职责:我负以上全部后台架构设计,数据库设计,以及研发和运维工作。
项目难点及解决方案:
1、当系统有大量的产品不符合用户或者没有产品符合用户时,尤其需要调其他第三方接口时,需要等待较长时间,才能出结果。
优化方案:把每一个待匹配的操作都封装成一个任务,并用线程池去执行并返回结果。
2、上游渠道大量调用系统接口检测某用户是否存在。
解决方案:采用布隆过滤器来快速响应系统中不存在的用户。尽量减少对数据库的访问,同时对要检查字段加数据库索引。快速高效检测用户是否真的存在。
3、系统埋点,记录用户的所有行为,并生成用户的行为链。并且实时统计各种行为的统计数据
优化方案:采用临时表+消息队列,用临时表快速记录埋点数据,采用消息中间件来异步处理和统计各行为数据,使得系统解耦。
◆工作经历
工作时间:2016.07 - 2022.04 所在公司:深圳市海云天科技股份有限公司
工作职位:Java开发工程师
◆项目经验
无纸化体检(2021.09 - 2022.04)
使用技术:Spring Boot、MyBatisPlus、Mysql、Redis、多线程等;
项目介绍:无纸化体检用于高考考生体检使用,把医生记录考生体检数据以及给出意见完全线上化。本系统分为后台管理端和客户端两部分,管理平台用于创建整个系统基础数据,及各种查询展示。客户端从管理平台获取考生数据包,记录考生体检数据,并上传到管理平台。后台管理平台可查看各考点考生的体检数据以及相关结果等。
个人职责:我负责整个系统的架构设计;用户权限管理,全系统公共服务等模块开发(日志记录,异常统一处理及分类,关键数据加解密组件等),实时数据统计推送,数据回收接口,动态实现特殊功能,关键部分数据库设计,系统中接口优化等。
项目难点及解决方案:
1、客户端大量数据同时上报,系统相应时间过长,系统吞吐量不高。
优化方案:快速校验并保存数据并返回,后续阻塞队列加单线程模式来顺序的处理每一个考生的数据。
2、系统需要保存客户端提交的所有中间数据,且不同省份的数据分组不一样,采用单行最小项存储考生数据,会造成数据库表数据量超大。
优化方案:采用最终表单行存储一个考生的所有数据;同时把所有检查项按类别进行分类,每个分类都对应一张中间表(这个分类实际上包含一个或者几个分组),同时采用json字符串来表明该行有哪几个最小分组,可实现最小分组的动态伸缩。这样就解决了针对百万考生情况下,既方便数据查询,又保证单表数据量不会过大,避免分库分表,减少系统的复杂度。
3、在不重新开发和部署的情况下,实现一些功能的动态修改。
解决方案:把动态修改的方法关键代码存入数据库,并采用类似于JDK动态代理技术,组装成一个类,采用自定义类加载器重新加载并生成新的对象替换系统中原有的对象来实现功能的动态加载。
4、客户端数据包生成时间过长。
优化方案:通过测试时间监控,发现考生数据下载那个环节耗时最多。因此把考生数据下载单独抽出来采用多线程方案来解决IO密集型任务,把数据下载分解成多个任务,同时采用快速失败机制(当某个线程任务失败时,迅速终止其他任务)。最终优化后,大幅减少数据包生成时间。
5、无侵入式的添加系统关键数据加解密功能。并且可在配置文件中配置该功能是否生效。
身份验证系统(2021.03 - 2021.09)
使用技术:Spring Boot、MyBatisPlus、Mysql、Redis、多线程等;
项目介绍:身份验证系统是用于考试前考生进场时进行人脸识别验证考生身份的。分为客户端跟后台管理端,后台管理端,主要用于创建所有所需基础数据,客户端主要是先从管理后台拿到考生数据,进行考生验证,并把验证结果上传至后台管理端,管理人员可实时查看各省市区