李超
个人信息
- 生日:1993/04/13
- 学历:中国计量学院 - 机械电子工程 - 全日制本科(2011 ~ 2015)
- 联系方式:15658109965,relengxing@outlook.com
自我评价
- 八年 Java 开发经验,基础扎实,项目经验丰富,在基础架构和业务开发上都有丰富的经验。
- 学习能力强,能快速上⼿新技术,具备主动学习精神,能快速适应公司的技术栈,能很快融入项目。
- 具有良好的方案设计能力和问题解决能力。沟通能力强,具有良好的团队合作精神。
技能清单
- 熟悉 Java,熟悉并发编程,熟悉分布式。
- 熟悉 Spring、SpringBoot、SpringCloud、Mybatis 等开发框架。
- 熟悉 MySQL、Redis、RabbitMQ、Kafka、Pulsar 等中间件。
- 熟悉 Linux、Docker、Kubernetes。
- 熟悉 Devops,多次搭建企业的发布流程。
- 熟悉 Go,熟练使用Gin、Gorm、Kratos 等框架进行开发。
- 熟悉 Python,能写脚本、爬虫和数据处理。
工作经历
2023.02 - 至今 深圳威趣科技有限公司 资深开发工程师
威趣科技是一家从事港美股量化交易的公司
我的主要工作内容:2023 年 2 月入职。负责基础架构建设,性能优化,底包开发,参与部分业务开发。2021.09 - 2022.12 领星网络科技有限公司 基础架构工程师
领星科技是专注于 跨境电商 Saas ERP 的公司。
我的主要工作内容:2021 年 9 月入职基础服务组,负责消息中心、Devops平台、Go语言框架开发,参与Java底包开发。2020.03 - 2021.09 深圳芥舟科技有限公司 Java 软件开发工程师
芥舟科技是一家跨境贸易全链路服务提供商。主要产品线包括:数字清关平台,Saas 微商城,跨境收银系统,SuperiorPay支付系统 等。
我的主要工作内容:
2020 年 3 月入职中台项目组:做了国际化服务,CRM,分布式事务(基于 Seata 改造)。
2020 年 8 月开始在商城项目组:业务需求开发,订单流改造,支付部分改造。
2021 年 1 月开始负责 SuperiorPay 支付系统,任开发组长,负责整个项目的开发,改造及运维。2017.02 – 2020.02 贝深科技(深圳)有限公司 Java 软件开发工程师
贝深科技是一家利用大数据和机器学习为零售商提供数据分析的美企。
我的工作内容包括:Java后端开发,云服务器运维。2014.12 – 2016.08 杭州能联科技有限公司 嵌入式软件开发工程师
能联科技的主营业务是智能水表和远程集抄。
我的工作内容包括:嵌入式软件开发,完成了多个项目和模块开发,如 GPRS 单表主动上报式采集器,无磁水表,蓝牙转串口模块等。
项目介绍
业务开发 (威趣科技)2023.02 - 至今
- 放单服务: 通过设置策略和接受盘口信息给交易所下单,是量化交易的核心服务。
- 重构策略分片模型
使用zk来选主同时监听节点上下线,主机根据前一天股票的盘口数量和当前队列运行情况作为权重来分配任务,使每台机器的压力尽可能的均衡,节点掉线时能及时的转移策略到其他机器,减少丢失的盘口。
支持分组分配,使港美股可以使用同一套代码,同一个配置中心,减少复杂度。
使用责任链模式重构调用链,使调用链节点可编排,代码结构更清晰。 - 调用链上数据懒加载,减少数据的无效加载和重复加载。
- 重构盘口队列,使用Disruptor替换以前的无界队列和拉模式。
增加观测指标,使得队列的运行情况可感知。 - 性能优化,可以承载美股的压力。
- 重构策略分片模型
- 形态服务: 通过接收上游的 K线 数据,实时计算出当前的形态。
- 设计使用 mmap 内存映射的存储方案。
该设计后来被用于公司所有类似项目,节省了大量内存成本。
该方案使用页缓存来代替堆内存,旧的数据会通过操作系统的刷新脏页机制落盘到硬盘中,释放宝贵的内存空间。
也更好的保障了数据安全,堆内存在重启后会丢失,但是使用该方案后,只会丢失掉线期间的数据。 - 使用火焰图等工具,找到热点代码和不合理的代码,进行性能优化。
使用 mapstruct 替换 bean copy 和 json 对象转换,数据加载上使用 tomcat 线程池替代 juc 的线程池等措施使延迟降低了 50%,gc 次数优化为原来的 1/10。这些优化措施都成为公司的开发规范。
- 设计使用 mmap 内存映射的存储方案。
- 放单服务: 通过设置策略和接受盘口信息给交易所下单,是量化交易的核心服务。
基础架构 (威趣科技) 2023.02 - 至今
- 全链路灰度: 用于蓝绿发布,解决美股上线后的发布问题
- 从 0 开始设计和编码到推动上线,解决中间遇到的所有问题,以及协助其他小组接入底包。
- 支持 网关,Dubbo,RestTemplate,RocketMq,Kafka 的流量染色、标识透传、灰度路由。
- 制定蓝绿发布的规范,协助运维完成蓝绿发布的 Pipeline 。
- 版本号规范:
- 推动版本号规范的建设。
- 使用 Go 开发 一些小工具简化大家的操作。
- 开发 git 自定义合并驱动减少代码合并冲突。
- 数据权限:
- 通过注解AOP来设置线程变量,该线程变量用于表示是否开启了数据权限。
- 通过Mybatis 拦截器来拦截SQL,当数据权限处于开启状态时,修改SQL语句。在对应的位置拼接数据权限的SQL。
- 通过配置是否打印修改前后的日志以及当前的用户权限信息,方便业务方排查问题。
- 全链路灰度: 用于蓝绿发布,解决美股上线后的发布问题
消息中心 (领星科技) 2021.09 - 2022.12
项⽬介绍: 集中式的MQ管理中⼼,支持kafka、Pulsar、RabbitMQ 等消息中间件。对业务方屏蔽底层细节,消息发送到消息中⼼的生产者,生产者再推送至消息中间件,再由消息中⼼消费者消费并推送到服务。⽀持多线程消费、限流、熔断、降级、隔离。
20多台8核16G服务器,普通消息 2.5亿+/天,延迟消息 1000万+/天。公司所有 PHP 业务和大部分 Java 业务都会使用消息中心来推送数据。⽣产者服务
- 通过 JVM 调优,通过修改 ParallarGc 的自适应策略以及修改新生代比例,使生产者服务不会频繁 FullGC,Qps提高了 30%。
- 发送到 kafka 前先压缩JSON数据,再使用 kafka 的LZ4压缩,显著提升性能。
- 通过调整 kafka 的参数以及修改问题代码,使得 5 台生产者机器支持每天上亿的消息推送。
消费者服务
- 消费者分片。支持多种分片方式,顺序分片,按负载分片等,使消费者组可以均衡的分在不同的机器。负载不均衡时会自动迁移消费者到其他负载低的机器。
- 支持分组分配,使不同业务方的消息可以分到不同的机器,实现隔离,也便于成本统计。
- 通过借助 redis 转储实现单 partition 的多线程消费。
- 支持聚合推送,通过把消息转储到 redis,当消息数量到了,或者等待时间到了以后再推送,实现按商户聚合推送,使下游可以进行批量操作,同时也减少调用次数,提升性能。
- 消费限流,支持多种限流方式,按 topic 限流,按服务限流,按 url 限流等。
延迟消息服务
- kafka 本身不支持延迟消息,所以设计了延迟消息服务。
- 业务方在发送消息到生产者服务时,可以传延迟时间。这类消息会先存入数据库,同时使用 Redis Zset 来存储 messageId, 延迟消息服务定时拉取到期的消息推送到消息中间件。
- 通过 hash 使 messageId 存储到多个不同的 Zset 中,多个延迟消息使用一致性Hash的方式,从不同的Zset中获取延迟消息,通过增加虚拟节点的方式解决 Hash 倾斜问题。
SDK开发
- 提供生产者SDK,方便业务方快速接入生产者服务和延迟消息服务。
- 提供消费者SDK,提供验签功能,保障安全。
Devops平台 (领星科技) 2022.04 - 2022.12
项目介绍: 通过管理系统调⽤ Jenkins, Gitlab, Sonar 等完成⼯作。
主要⼯作: 独⽴完成前后端开发,Pipeline 编写。管理系统使用JAVA开发,前端使用Vue。Pipeline 使用 Jenkins SharedLibary, 把流程放在Pipeline,可配置的参数都放在项目的 jenkinsfile 中。⽀持Java、Python、Go、前端项目⼀键创建环境,部署,回滚,单元测试覆盖率,打包,发布结果通知到钉钉等操作。动态数据源 (领星科技) 2021.11 - 2021.12
基于 dynamic-datasource-spring-boot-starter 改造,⽀持 多数据源,动态数据源,远程数据源,集成 sharding 数据源,根据传⼊的 companyId 切换数据库,实现 saas 环境优雅的切换数据库。
中台项目(芥舟科技)2020.03-2020.08
- I18N,国际化服务
根据键和值保存翻译数据,翻译人员可以通过后台页面进行翻译,前端在打包的时候批量拉取数据,使用多级缓存,压测单机(双核,2G 内存)QPS 2500。 - CRM,用户管理服务
用于 C 端用户,包括登陆注册,第三方登陆,用户管理等功能。 - Idcard,身份证服务
保存身份证数据,调用阿里云 OCR、国政通等接口对身份证信息进行校验,用于清关等场合。 - GTC,分布式事务
参考 Seata 开发的分布式事务,实现了 AT 和 Saga 模式。负责整个 JAVA 的SDK开发和协调中心开发。
- I18N,国际化服务
Staffum(贝深科技)2017.02 – 2020.02
项目介绍:该系统由 店铺管理服务,设备管理服务,人员权限管理服务,数据导入服务,数据导出服务,任务发布服务,视频采集服务,排班算法服务,预测算法服务,人流量视频解析算法服务 等模块组成。(加粗部分为我负责开发)
主要架构技术包括:SpringBoot+MySQL+Redis+Mongodb+RabbitMQ+Docker+Kubernetes 等- 店铺管理服务,设备管理服务,人员权限管理服务 是主要的业务模块,对商铺、设备、人员的数据进行管理。服务与服务之间使用 Restful API 进行通讯。
- 数据导入服务,是一套用 JAVA 写的解析客户上传的 EXCEL 数据并存储到数据库,后来开发了一套基于 Google 大数据处理工具的 ETL pipeline 替换这个服务。数据导出服务 允许客户使用 API 下载人流量数据,排班数据,预测数据等数据。
- 任务发布服务 是基于 K8S SDK 开发的,公司每天有数千个 docker 封装的任务要在 K8S 上运行,算法服务会把任务发布到 Redis 上,任务发布服务会把任务根据优先级发布到 K8S,任务结束后会发送消息到 Slack。同时会根据任务的多少对 K8S 进行扩缩容来节约成本,任务过多时还会主动告警。
- 预测算法服务,人流量视频解析算法服务 这两个算法服务就是通过任务系统发布到 K8S 上运行的。排班算法服务 从 RabbitMQ 获取店铺管理服务发布过来的任务数据,生成结果写入 Redis 中。