# 马驹 - 后端工程师 - java


马驹/男/1994.02

渭南师范学院/电子信息科学与技术

本科/2016年毕业


blog https://ydfm.cc

email 1099874269@qq.com

phone 18392346358



## 介绍

于2016年从事java后台开发，掌握java开发技能，对前端和微信小程序有一些了解。

排查定位线上问题能力强，平时喜欢折腾研究一些前沿技术和开源项目。

喜欢一些有挑战性的问题。

## 技能

- 计算机⽹络、数据结构、算法、操作系统等课内基础知识：掌握

- Java 基础知识：掌握

- ⾼并发、⾼可⽤、⾼性能系统开发：掌握

- Struts2、Spring、Hibernate、Ajax、Mybatis、Mybatis-plus、Springboot、SpringCloud、JQuery：掌握

- JVM 虚拟机（Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理）：掌握

- Linux：掌握

- MySQL常⻅优化⼿段：掌握

- 常⻅消息队列：了解

- K8s、Docker：了解

- arthas：了解

- Vue、微信小程序：了解

## 工作经历

### 旺龙智能科技有限公司 （2021.4-至今）

`后台开发` `框架搭建` `公共模块封装` `方案设计` `代码优化`

- 开发旺龙开放平台

- 老系统优化重构，排查线上问题

- 开发机器人通行云门禁功能

- 基础框架搭建，基础组件集成，提供使用Demo以及配置代码生成模版；提供新旧平台微服务调用方案；解耦数据加解密功能，学习利用JavaFX开发桌面加解密小工具。

- 开发者认证以及权限缓存功能

- 开发在线报价功能，根据所选配置生成报价清单

- 搭建ELK并集成ElastAlert告警插件

- 对一些技术难题提出解决方案

### 深圳中科闻歌科技有限公司 （2020.4-2021.4）

`后台开发` `运维维护` `任务分配` 

- 与客户进行交流，了解客户需求

- 开发维护医药大数据平台，爬取录入公开数据

- 开发经济大数据平台数据中台，包括元数据管理、数据清洗以及可视化页面后台数据提供

### 深圳如莲科技 （2018.4-2020.2）

`后台开发` `消息推送`

- 开发物业sass平台，包括任务跟踪，任务状态维护等

- 微信与物业系统用户关联、公众号消息推送

- 安卓极光推送插件封装、蓝牙电子称插件封装

### 西安软通动力 （2016.10-2018.3）

`后台开发` 

- 华为C端数据分析工具迁移到云端

## 项目概况

### 旺龙开放平台

#### 项目周期：6个月

`Springboot` `SpringCloud` `Nacos`  `Redis` `Mysql` `Mybatis-plus` `RabbitMQ` `Seata`

#### 项目难点

1. 存在与老平台兼容调用问题，原平台和新平台使用注册中心不一样；

2. 接口数据需要加密，原平台采用切点方式对数据进行拦截统一处理，所有上层服务都需要维护这套逻辑，并且不方便调试；

3. 原有设备状态采用key-value模式存放在Redis，当获取所有在线设备时存在遍历查询Redis，效率低。

4. 排查线上问题，解决服务超时问题以及数据库崩溃。

#### 解决方案

token和老平台使用一套，服务层直接通过服务地址实现新平台调用原平台接口

将加解密功能转移到网关，实现请求参数解密以及响应加密，调试时直接启动上层服务，无需考虑加解密问题；

在原有设备状态维护的基础上，存放一套新的状态维护，采用hash数据结构，一次获取设备类型所有的状态，在内存中进行判断在线状态；

修改原有spring提供的定时任务为XXL-JOB，解决多节点问题以及方便维护；

定位Seata回滚失败问题，解决Seata与MyCat兼容性问题；

使用pinpoint和Arthas查看慢接口以及导致超时原因，解决循环调用数据库，修改部分接口逻辑，将数据存到Redis。

### 机器人云门禁

`Springboot`  `Mybatis-plus` `Redis` `Mysql`  `IOT`

#### 项目周期：3个月

#### 项目难点

1. 机器人发送开门指令存和获取设备状态并发高；

2. 一个设备需要维护一个队列；

3. 机器人需要发送心跳，超时需要移除队列。

#### 解决方案

因为存在并发高，采用线程池对接口最大并发进行限制；

队列采用Redis的list数据结构leftpush先进先出策略，防止直接操作数据库导致数据库压力过大；

机器人定时发送心跳对指定Redis key进行延时，参考Redis惰性删除策略，每次获取机器人所处队列位置时检查对应key是否过期，如果过期移除队列；

IOT通过回调方式将设备状态上报，将数据维护在Redis；

开发开发者认证功能，根据申请开通应用，传入appId和秘钥进行鉴权，并将权限缓存到Redis，防止直接查询数据库导致数据库压力过大；

配置集成Sentinel-Dashboard对AppId和IP进行限流。

### 医药大数据平台

`Springboot`  `Mybatis-plus` `Redis` `Mysql` `ES` `MongoDB`

#### 项目周期：3个月

#### 项目难点

1. 需要定时对数据维护，录入互联网上公开数据；

2. 实体与实体之间的关系支持自定义和关系搜索；

3. 媒体数据量大，存在重复数据，且需要标记实体

#### 解决方案

编写Python脚本爬取互联网公开数据并录入到数据库；

将实体信息存放到MongoDB,在将实体以及关系同步到Neo4j，使用Neo4j搜索引擎，将关系数据渲染到页面；

采用开源的NLP自然语言识别组件，对媒体数据中的实体进行识别并打上标签；

与客户进行对接，了解客户需求，设计原型图，搭建脚手架，定时迭代上线；

### 数据中台

`Springboot`  `Mybatis-plus` `Redis` `Mysql` `ES` `MongoDB`

#### 项目周期：6个月

#### 项目难点

1. 数据来源不一致，结构性差；

2. 数据字段不统一；

3. 数据直接利用率低。

#### 解决方案

统计数据来源渠道以及数据格式，开发对应导入或者同步功能，使用Datax完成部分数据同步；

建立元数据管理，统一字段名，建立对应别名，将数据整理到新表；

定义一些解析规则，建立规范表，通过配置解析规则将数据拆分解析到新表；

开发数据接口服务，提供基础数据接口。


