1.深入理解设计模式,主要知晓spring源码中所运用的各设计模式(如工程模式,适配器模式,装饰模式,代理模式,观察者模式,策略模式,责任链模式等),并部分有在项目中实践。
2.深入理解Java基础, jdk 集合,并阅读过其部分源码(如List,Set,HashMap等)。
3.深入理解java并发編程,理解 synchronized 、 volatile 底层原理,深入理解 MESI 缓存一致性协议,理解 CAS 、AQS 原理,并阅读过一些AQS相关组件源码,并熟练使用各juc包下工具类。
4.深入理解 JVM 内存模型、java线程内存模型、类加载机制,双亲委派。 熟悉JVM垃圾回收算法,及常用的垃圾回收器及其原理, 熟悉一些常用的jvm 配置参数,根据要求或者问题来理配置 jvm 各参数实现jvm调优有一定的了解。
SSM开源框架
深入理解 spring、spring mvc 、spring boot、mybatis 等开源框架,并精读springIOC、IOP,spring boot自动装配,spring mvc dispatchServlet源码等,并仿写过spring IOC的代码;熟悉spring框架底层各种扩展点,并可针对其做二次开发,可开发其他项目与spring整合的中间件,熟悉插拔式stater编写并在项目中使用。
数据库
1.熟悉 mysql查询优化、 mysql隔离级别、 MVCC 机制、索引实现原理; MyISAM 和 InnoDB 引擎区别; mysql锁、 mysql 读写分离等。
2.熟悉缓存框架 redis使用,redis数据结构等,理解redis单线程模型原理;了解redis持久化方案及其优缺点,了解redis主从、哨兵、集群模式搭建。
3.了解elasticsearch的使用。
微服务
1.深入理解分布式中间件zookeeper原理及其应用,并精读过其源码;深入理解分布式事务、分布式锁、分布式系统接口幂等性处理等分布式解决方案,并根据2PC原理写过简易版的分布式事务框架代码。
2.熟悉微服务架构spring cloud及spring cloud alibaba 各组件及其应用,了解rpc框架dubbo,并仿写过@reference注解功能代码。
3.熟练使用rabbitmq使用
项目经验
中介借款平台(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、多线程等;
项目介绍:身份验证系统是用于考试前考生进场时进行人脸识别验证考生身份的。分为客户端跟后台管理端,后台管理端,主要用于创建所有所需基础数据,客户端主要是先从管理后台拿到考生数据,进行考生验证,并把验证结果上传至后台管理端,管理人员可实时查看各省市区
我负以上全部后台架构设计,数据库设计,以及研发和运维工作。 项目难点及解决方案: 1、当系统有大量的产品不符合用户或者没有产品符合用户时,尤其需要调其他第三方接口时,需要等待较长时间,才能出结果。 优化方案:把每一个待匹配的操作都封装成一个任务,并用线程池去执行并返回结果。
卯丁产品需求介绍: 远程协同、跨组织协同,实现工程设计企业关键业务的集成融合与业财一体化运营↓ 实现工程建设项目的一体化设计,支持全生命周期多源异构数据的共享与开发利用 以项目为中心,实现项目生产(设计协同),项目收付全过程管控,所有业务产生的支出与收入汇入财务管理中,实现