




个人介绍
Java:Java语言基础扎实,了解多线程编程,了解jvm相关知识,熟悉java web开发常用框架,包括spring及springboot,mybatis等,熟悉HSF分布式服务开发,了解dubbo及spring cloud等常用rpc框架,了解redis,zookeeper,kafka,rocketMq,drds分布式数据库,elaticsearch等中间件使用及相关原理
其他:了解前端相关技术,会使用python进行一些相关的数据处理,掌握基本linux操作命令,查看日志并定位相关问题
工作经历
2018-08-01 -2020-09-30中国联通软件研究院高级后端工程师
主要负责内容:多种活动模版前台配置,实现资源池额度、活动互斥组等多样化活动管理模式;以kafka为触点活动,消费CBSS kafka集群消息(protobuf格式),过滤数据存入ES,订购接口利用redis实现分布式锁,使用缓存框架Ehcache将活动规则加载到内存提升活动校验速率,利用java反射进行结构化配置及规则引擎公式校验活动规则,后续流程通过rocketMq消息队列解耦跨库事件,调用资源中心HSF微服务进行资源的发送,其中规则校验使用工厂模式获取用户相关参数,支撑全国级圣代包活动,订购量达300万笔,全年kafka活动订购量1300万。
教育经历
2013-09-01 - 2017-06-21西南交通大学数学与应用数学本科
专业top10%,院综合奖学金4次,cet6级,计算机2级
技能

# springmvc_simple ### Tomcat启动 1. 加载war包xxx.war 2. 创建容器:创建Map iocMap = new HashMap(); 3. ScanBasePackage:扫描war下的@Controller,@Service注解的类 4. 实例化:将扫描到的类通过反射进行实例化,并存入iocMap容器中 5. 依赖注入:将存在依赖的bean进行注入 6. urlMapping:http请求路径于Method建立映射关系 ### Tomcat启动成功运行阶段 1. 发送http请求,调用servlet的doGet和doPost方法 2. 找到从UrlMapping中对应的Method方法对象 3. 找到Method方法对象后,直接调用method.invoke()方法 4. 返回响应结果 ### 反射知识 1. 获取Class对象 ``` Class clazz = Class.forName(cn.luckyqiang.service.impl.LuckyServiceImpl) ``` 2.反射创建LuckyServiceImpl实例 ``` LuckyServiceImpl luckyServiceImpl = clazz.newInstance(); ``` 3.根据实例拿到类实例Class对象 ``` Class clazz = luckyServiceImpl.getClass() ``` 4.拿到类里面定义的所有属性 ``` Field[] fields = clazz.getDeclaredFields(); ``` 5.获取类里面的所有方法 ``` Method[] methods = clazz.getMethods(); ``` 6.从底层调用方法,方法里的参数数组为args[] ``` method.invoke(instance, args); ``` 7.获取请求路径 ``` // ~~ip:端口~~/springmvc_simple_war_exploded/lucky/query String uri = request.getRequestURI(); ```


创建SqlSessionFactory实例 实例化过程中,加载配置文件创建configuration对象; 通过factory创建SqlSession 通过SqlSession获取dao接口动态代理 动态代理回调SqlSession某查询方法 SqlSession将查询方法转发给Executor Executor基JDBC访问数据库获取数据; Executor通过反射将数据转换成POJO并返回给SqlSession 将数据返回给调用者
