实现网
这是我的战役

昵称登录后显示

500/8小时
8年工作经验

北京快手科技有限公司
Java工程师

0

被预约次数

0

被收藏次数

0

被评价次数

擅长技能

1.熟悉JDK中各种集合的底层原理,多线程,JUC并发包原理,锁,线程池原理,Java内存模型
2.熟悉JVM内存结构,常见垃圾回收器,垃圾回收算法,生产环境下JVM参数调优
3.有阅读过Spring、Mybatis、SpringMVC、SpringBoot、Spring Data Jpa等框架的源码
4.熟悉网络编程,NIO原理,Reactor线程模型,Netty底层原理
5.熟悉mysql原理,锁,事务,具有分库分表、索引优化、sql优化等丰富实战经验
6.熟悉redis原理,线程模型,缓存生产常见问题(穿透、雪崩、大key、热key、双写一致性)解决方案,生产环境集群的使用(redis cluster、redis replication、哨兵、持久化),搭配Lua脚本使用
7.熟悉分布式搜索引擎ElasticSearch ,在海量数据下优化搜索性能
8.熟悉消息中间件rabbitMQ、rocketMQ、Kafka的原理,MQ生产常见问题(消息堆积、重复消费、不丢失、顺序一致性)的解决方案
9.熟悉分布式治理中常见技术方案原理(通信组件:Dubbo/Ribbon+Feign/gRPC,网关:Zuul/Gateway,注册中心:Eureka/Nacos/consul,限流熔断:Hystrix/sentinel/retry,配置中心:Apollo,日志监控:ELK/Prometheus/Grafana/sentry,分布式追踪:Zipkin/SkyWalking,分布式协调组件:Zookeeper)
10.熟悉分布式下常见解决方案:分布式事务、分布式锁、分布式一致性、分布式限流、幂等性设计等
11.熟悉常见的大数据治理方案:Hive,Hbase,clickhouse
12.容器技术:docker、kubernetes,持续集成:jenkins、gitlab
13.熟悉DDD领域驱动设计,程序中常用设计模式,平台化设计,系统安全防控手段,项目敏捷管理流程

项目经验

快手电商-本地生活-交易平台
1.技术架构:springboot+mysql+es+SpringCloud+rocketMQ+gRPC+k8s+grafana+elk
2.项目介绍:短视频具有天然“种草”属性。用户在达人影响力和视频内容的作用下,实现从种草到消
费的转化,整个过程在APP内闭环完成。快手本地生活业务搭建了一套从商家入驻,商品上架到用户下
单,到店履约的完整流程。由商家系统、商品系统、POI系统、交易系统、营销系统、分销系统、开放
平台、结算系统组成,覆盖酒旅、美食、娱乐、医美等类目。借助直播电商和短视频社区生态,帮助商
家拉新,创作者流量变现,实现共赢
3.项目描述:交易系统按领域拆分为订单域、支付域、限购域、资产域、售后域、履约域、触达域。用
户提单下单支付生成资产为正向交易,退款赔付核销为逆向交易。直播带货场景交易TPS峰值达1.5万
交易架构设计
 使用DDD领域驱动设计完成领域拆分和业务建模
 交易编排引擎(责任链+模板+策略设计模式)。业务细粒度拆分为原子能力和不同身份下的差异性
扩展点,根据业务身份松耦合编织相应的能力和扩展点。实现交易流程可编排、模板化、可配置化,
具备中台能力
 抽象BFF层来做响应数据加工+字段编排,适配详情接口在多端或不同业务源下的展示差异、定制化
需求,产品迭代只需配置相应的查询指令。减少硬编码,搭建出低代码开发环境
 引入订单状态机。交易域订单状态和条件很多、状态间切换比较复杂,可以更好地实现对状态和领
域事件的管理
交易异步化
 老下单逻辑为全链路同步调用,无法支持高并发的直播带货场景,于是对下单交互流程做了异步化
改造,突破下单tps限制,与外部供应商解耦
 为避免掉单,异步接收渠道方回执通知信息,同时配合定时主动查询作为掉单补偿手段
 交易涉及与外部供应商交互,各个三方性能参差不齐,存在吞吐量低且响应超时的情况。系统会先
进行收单操作,然后根据三方的承受力,自适应投递请求。做到了快慢隔离,失败重试
核心链路稳定性加固
 通过熔断、降级、自适应流控、并发度控制、过载保护、热点发现、超时控制等方式进行流量治理。
降低了服务链式雪崩,服务瞬间过载,可用性下降等风险
分布式事务
 前置链路通过tcc补偿+异步校准机制保证一致性
 后置链路采用柔性事务,实现最终一致
 系统内部间rpc中间件集成了自研重试组件,重试逻辑无侵入并且可以有效避免重试风暴
 retry框架,系统中弱依赖或者可以异步重试的操作引用此框架,解决CAP问题
消息队列
 业务中mq的选型采用rocketmq,通过配置实现全链路消息不丢失
 使用rocketmq提供的事务消息机制实现分布式事务
 使用rocketmq基于时间轮重构后的延迟消息机制(支持任意时间)实现订单超时取消
分库分表
 基于shardingsphere组件实现分库分表路由逻辑
 shard迁移过程不停机,增量数据异步双写,存量数据task滚动同步
 数据无损迁移,编写新老数据校验比对工具进行补偿
 开关动态切换新老数据源,支持回滚,发布可控
分布式id生成器
 segment号段+双buffer方式生成分布式递增id,高性能,高可用,可扩展
 id生成时融入uid基因,这样在分库场景下同一用户的数据都落到一个库里,形成绑定关系
ElasticSearch海量数据检索库
 解决分库分表后商家端或运营端等复杂条件下的数据查询,实现高性能海量数据检索
 检索库采用ES+HBase组合的方案,将索引与数据存储隔离
 订阅数据库变更日志,实时将mysql中的数据同步到检索库中。具体通过cacnl监听binlog,发送到
mq,整个链路严格保障消息的顺序性。消费者通过阻塞队列+延迟线程池,进行本地归并聚合后bulk
批量写入es中
幂等设计
 使用token令牌防止重复提单
 更新订单数据采用乐观锁
 redis setnx + 唯一流水号,实现系统幂等
资损防控
 涉及资金计算的方法自测化case覆盖,上线前自动执行
 涉及资金往来的不同系统,离线对账,T+1。数据沉淀到hive,通过离线脚本核对
全链路压测
 通过发压平台,结合压测标识传递、压测流量识别以及影子存储等手段实现全链路压测,定位出系
统瓶颈和真实水位,从而精准规划容量,进行限流降级、核心jvm、线程池等参数指标的调优
监控预警
 业务层面:程序中打点的方式,聚合上报到clikhouse,grafana可视化统计核心接口的p995,qps变
化,数据返回状态等指标,配置报警阈值
 日志层面:使用sentry捕获业务中的error级异常栈后报警通知
 系统层面:服务的cpu、内存、网络、jvm、tomcat指标,数据库慢查、连接数,mq堆积等,grafana
可视化展示
 链路追踪:通过traceId串联起整个调用链,各环节上报调用情况数据,监控请求链路各环节的可用
性和时延
灰度发布
 服务发布有一个灰度放量的过程,通过配置中心更改放量比例,结合流量回放和蓝绿多级部署,如
发现问题可以及时止损
分布式配置中心
 配置中心支持可视化配置,数据版本回滚,多环境集成
JJ百万级红包雨
1.技术架构:springboot+mysql+redis+自研rpc组件+rabbitMQ+zk+k8s+elk
2.项目介绍:分为普通红包和官方节日红包。普通红包是由玩家平日里向所在群组中发送的,由虚拟金
币组成的红包;官方节日红包是由官方,通过后台程序以红包雨的形式在统一时间节点发送给玩家。节
日红包期间,同时在线人数最高达到过200万,红包系统平均TPS达到2万
3.项目描述:
 红包金额拆分算法采用二倍均值法,提前拆分完毕入红包池
 为实现短时间内的超高并发量和极快的响应速度,红包池采用redis分桶设计,redis cluster多节
点高可用集群部署,红包id取模路由到不同的桶中,数据做AOF持久化
 红包雨期间,为应对瞬时流量保护缓存集群,打开过载保护开关,即通过令牌桶算法实现的限流器,
可动态调整速率
 Lua脚本实现抢红包原子加锁操作,既避免了多线程数据不一致问题,又解决了抢红包公平性问题(先
到先得)
 在网关和红包服务之间抽象业务层,做请求拦截,可视化统计
 使用mq异步化处理,消费者将数据持久化到数据库并调用转账接口,延迟校准方式保障数据一致性
 根据红包业务流量不确定性的特点,服务进行云化部署,实现弹性扩缩容
 对账系统会核对拆红包记录与转账记录,发现异常上报,进行人工干预
 rabbitmq实现延迟队列将未领红包失效退还
 rpc组件基于netty实现高吞吐非阻塞通信,采用一致性hash+映射虚拟节点方式做到路由压力的均衡
分布,提供熔断限流和降级容错的保护机制
JJ社区
1.技术架构:springboot+cdn+redis+mysql+本地cache+rabbitmq+kafka+SpringCloud+elk+k8s
2.项目介绍:此项目是一个可支撑高访问量(日UV200万、高峰期QPS达10万)的ugc内容平台。可根据
用户的兴趣精确推送图文和视频的聚合列表。同时也支持建立用户关系链,在feed流中查看所有关注人
发送的内容。支持发布,浏览,投票,点赞,收藏,评论,站内留言等功能,可在后台实时查看统计数
据。用户可在社区平台里实现有效互动,实现增加留存率的作用
3.项目描述:
 服务云化部署,支持根据负载动态伸缩集群节点,承载量可线性增加,服务可优雅上下线
 服务器与浏览器之间通过gzip进行数据压缩传输,提升效率节省带宽
 详情页数据上传到cdn高速分发缓存
 redis分布式缓存:热数据存储采用kv结构设计,通过consul+sentinel实现集群高可用,资讯主体
及相关计数等数据采用redis主从架构存储实现读写分离,用户维度数据(如点赞记录)使用redis
分片策略实现快速查找
 redis中缓存热数据,缓存自动延期实现数据冷热分离
 多级缓存的容错方案:共有redis分布式缓存、本地堆缓存、网关层缓存,通过Hystrix进行降级容
错,可根据故障等级返回对应的容错数据
 redis热key自动探测,升级为本地二级缓存来扛热点流量
 redis大key监控预警,进行大key治理,切分或者清除处理
 redis双key延迟加载解决缓存失效导致的雪崩问题
 缓存更新采用串行化方案,解决数据库缓存数据一致性问题
 使用布隆过滤器防止恶意流量击穿缓存
 feed列表采用元数据与索引数据分离的架构设计方法。
 feed数据获取方式采用推/拉结合的模式,从空间和时间两个角度做到平衡,在用户体验与存储量之
间做到折衷:用户发送一条消息,会按照好友的活跃度,对活跃好友使用推模式写入其接收时间轴,
非活跃用户不处理,只更新其未处理消息计数。非活跃用户上线后,如果消息计数有增量,则自己
拉取进行实时聚合,写入接收时间轴,计数清0;redis中缓存100条用户接收时间轴数据,根据用户
登录时间相应的延长过期时间
 采用最大努力通知策略来保证分布式事务的一致性。如果通知失败,根据配置的通知规则,利用时
间轮算法延时再次发送
 采用token加redis方式实现接口幂等性,防止页面重复提交
 AC自动机算法实现敏感词过滤功能
 用户行为收集:在网关层日志记录后,导入kafka中,通知推荐算法服务
 统计功能实现:前端埋点,按照指定格式写入elk,统计服务查询es,组合数据并返回
 通过websocket长链接,推拉结合的方式,实现了IM聊天功能
JJ Saas论坛
1.技术架构:springboot+mysql+redis+本地cache+自研rpc组件+分库组件+rabbitMQ+es+quartz+zk+e
lk
2.项目介绍:JJ论坛初版是一个基于LNMP的单体应用,随着用户使用量增加,逐渐暴露出性能短板。所
以需要对原有架构进行模块化、平台化升级重构,把底层存储构建为基础服务,基于基础服务构建业务
服务平台。对数据存储进行多维度拆分,大量使用cache进行性能加速。重构后共拆分为业务层服务,
帖子服务,评论服务,喜好服务,版块服务,用户服务,搜索服务。同时,为了适配公司多款游戏孵化
上线后对游戏内置论坛的需求,将论坛升级改造成Saas多租户模式,可通过后台配置快速上线一款论坛
产品
3.项目描述:
 单库单表到分库做到不停机平滑数据迁移
 帖子id采用雪花算法生成,生成的id末端融入uid基因
 帖子数据采用基因分表法存储,保证通过uid和帖子id都能直接定位到库
 评论系统根据主体id取模分库,mq异步更新主体下的评论数量,redis中缓存部分评论数据
 点赞、浏览操作使用缓存来抗读写,异步线程定期刷DB
 用户维度数据采用冷热分离存储,redis中缓存热数据
 热点帖子缓存:为减轻热点帖子短时间内对存储层造成的压力,如帖子被判定为热点数据,帖子详
情将升级为JVM本地缓存,每个帖子服务都会在本地产生一份热点缓存副本
 es实现海量数据检索,数据有变动时通过mq异步更新es的索引库
 sharding分库组件:配置多个数据源并注入spring容器。将分库key放入threadlocal中传到数据路
由层,根据路由规则选出对应的数据源并改写sql语句
 rpc组件基于netty实现高吞吐非阻塞通信,采用一致性hash做到路由压力的均衡分布,提供熔断限
流和降级容错的保护机制
 支持多租户,可为不同的业务方分配租户权限,获得租户身份,不同租户间的数据通过租户标识进
行隔离
JJ大营销平台
1.技术架构:springboot+mysql+redis+本地cache+分库组件+springCloud+rabbitMQ+elk+k8s
2.项目介绍:为了更好地激发和培养用户的使用兴趣,增强日活时长和转化,搭建了一套完整的营销系
统,由抽奖系统、奖品库存系统、返利系统、积分系统、售卖系统、优惠券系统组成。可满足运营部门
对于C端人群的拉新、促活、留存等需求。用户可以通过签到,做任务(拉新、论坛灌水、达成游戏成
就等行为)从返利平台里获得积分、抽奖资格、商品兑换卡。积分可以用来兑换抽奖资格,从而通过抽
奖获得随机积分、优惠券、道具卡、第三方虚拟商品等。积分也可以用来购买商城里面的商品,如游戏
道具,三方虚拟卡等。
其中抽奖模块是整个大营销平台系统中非常重要的一个模块,此模块主要以支撑各类差异化抽奖流程,
如;通用抽奖、黑名单、标签人群策略、N消耗积分指定抽奖范围、抽奖N次解锁奖品等各类玩法的支持。
3.项目描述:
 以 DDD 分层结构,领域驱动的方式,搭建整个抽奖系统架构。在领域层拆解系统流程,按照职责边
界的领域模块进行设计开发,最终在应用层进行逻辑功能编排。
 运用模板、策略、工厂设计模式,定义抽奖过程标准和实现对应的多类型抽奖的服务模块。业务细
粒度拆分为原子能力和不同身份下的差异性扩展点,根据业务身份松耦合编织相应的能力和扩展点
 状态流转使用状态机进行统一配置和管理,方便后续的扩展
 搭建了去中心化的量化人群规则引擎组件。通过业务需求对逻辑的扩展和内置引擎执行器的使用,
完成自由组合的人群过滤服务。使用组合模式搭建用于量化人群的规则引擎,用于用户参与活动之
前,通过规则引擎过滤性别、年龄、首单消费、消费金额、忠实用户等各类身份来量化出具体可参
与的抽奖活动。通过这样的方式控制运营成本和精细化运营。基于量化决策引擎,筛选用户身份标
签,找到符合参与的活动号。拿到活动号后,就可以参与到具体的抽奖活动中了。搭建出一棵规则
树,而库表中则需要把这样一颗规则树存放进去,包括:树根、树茎、子叶、果实。在具体的逻辑
实现中则需要通过子叶判断走哪个树茎以及最终筛选出一个果实来。
 库存模型使用redis进行分桶设计,可 以 散 列 掉 热 点 ,线 性 提 升 并 发 能 力 。redis中扣减成功后,
异步同步到数据库。在Redis和数据库间做定时核对check,并结合扣减信息做数据的增量
修正。
 解耦抽奖流程,把抽奖和发奖用MQ消息串联起来,避免一个流程太长,导致用户一直等待。为了防
止掉单,使用定时任务做发货单的扫描补偿
 运营人员配置好抽奖活动后,在上线前,会进行数据的预热。预热的过程会把活动信息、策略信息、
库存信息都存储到Redis里进行使用。
 为了提高抽奖效率,抽奖算法采用空间换时间,时间复杂度达到O(1),将概率转换为对应的整数数
量,生成map集合写入到缓存中。抽奖时按照整数数量生成随机数来获取map中的奖品id
 支持不同玩法,抽奖的整套规则流程,使用责任链模式编排处理
可根据积分值调整可抽中的奖品的概率权重
可对黑名单范围的羊毛党用户,则只返回固定的奖品ID
可根据用户的抽奖次数解锁高等级的奖品
最后完成抽奖动作
 网关层做限流,屏蔽恶意流量。同时拦截无效流量,当奖品已经抽完,活动的状态会同步到网关层,
针对瞬间涌入的后续排队请求,直接暴力拦截返回抽奖结束
DB-Router数据库路由组件
1.系统架构:基于 AOP、Spring 动态数据源切换、MyBatis 插件开发、路由算法等技术,实现的
SpringBoot Starter 数据库路由组件
2.核心技术:AOP、AbstractRoutingDataSource、MyBatis Plugin StatementHandler、ThreadLocal、
jsqlparser sql语法解析器
3.项目描述
 此数据库路由组件可应对在分库分表场景下,业务自身场景多变的特点,同时又能满足日常业务简
单的维护迭代
 该组件可满足差异化不同字段的分库分表,即支持个性的分库分表、只分库或者只分表以及多字段
控制分库和分表、主从库读写分离,路由算法支持高度定制,如尾号路由、日期周期路由、哈希等
 可自定义扩展监控、扫描、策略等规则
高性能通用属性系统
1.技术架构:springboot+mysql+本地cache+springCloud+elk
2.项目介绍:整个平台中原存在1000多种属性,随着业务发展,属性的种类也随之增长。原属性表为一
个大纵表,存储属性主体和属性值的对应关系。所有类型的属性全部放在此表中,在数据量达到一定的
量级后,查询效率急剧下降。经过重构后的属性系统,通过分表+本地缓存热数据的方式提升查询效率,
并且支持聚合查询,将多种属性配置成方案,据方案id一次性查询出所需属性值
3.项目描述
 动态路由散表组件:提前初始化尾号00-99的100张属性表,根据传入的分表key(属性id),通过分
表规则生成表名写入threadlocal。自定义mybatis插件,使用sql语法解析器解析并动态替换表名
 对配置为开启缓存的属性,通过lru算法在服务本地缓存属性热数据,2分钟自动失效
 各项属性的配置信息在服务启动时load到服务内存中,更新内存中的配置信息采用CopyOnWrite机
制,做到读写可以并行,在高并发下提高程序的响应时间
 使用CountDownLatch实现属性的聚合并行查询
 CAS乐观锁解决并发条件下的数据更新问题
自研API网关
1.项目介绍:API网关是随着单体应用拆分为微服务后,所引入的统一通信管理系统。运行在外部HTTP请
求与内部RPC服务之间的一个统一流量入口。作为微服务的接入层,用于管理、控制后端所有RPC接口。实
现对外部请求的协议适配转换、请求校验、鉴权、切量、熔断、限流、监控告警、风控等各类共性的通用
服务。
2.项目描述:
基于netty作为核心通信容器,请求链路双异步化处理,并提供Disrupotor辅助netty,提高并发能力
支持多种协议的下游服务如HTTP、Dobbo等,融合异构下游服务,满足不同场景的调用需求
针对请求构建插拔式动态过滤器链条,可实现多种功能:负载均衡策略,多维度限流,热点缓存,熔
断保护,访问控制,灰度分流,链路监控,自定义mock,风控等
高性能RPC通信框架
1.项目介绍:调用方引用此框架,感觉上像调用本地服务一样调用远程服务。支持服务注册发现,提
供多种负载均衡算法,重试策略,熔断限流和降级保护功能
2.项目描述:
 基于netty组件protobuf协议,实现高吞吐非阻塞通信
 客户端调用远程服务时,通过Cglib动态代理来屏蔽网络通信细节
 使用Zookeeper搭建服务注册中心。服务将信息注册到ZK的临时节点中,消费者订阅监听,动态感知
服务上下线。服务列表缓存在客户端本地,服务端如有变动,更新本地缓存
 提供了多种客户端负载均衡算法:随机、轮询、一致性hash、动态最优响应、自适应权重调整
 使用SPI机制来实现可插拔,使用方不需硬编码,只需做好相关配置,程序会动态根据配置去找到对
应的实现类
 服务端存在着3个线程池,分别执行连接的建立、IO任务、Job任务。IO线程接收到请求后,将其加
入到Job有界队列中等待被调度执行。可设置队列阈值,大于阈值的请求fail-fast直接拒绝,以此
达到限流作用。客户端会进行moniter计数统计,如服务响应能力降低到可用阈值后,开启链路熔断

0条评论 雇主评价

暂无评论~

可兼职时间

周六全天
周日全天
工作日下班后
周六半天
周日半天

可兼职地点

海淀

被预约

0

被收藏

0

被评价

0

立即预约

可兼职时间

周六全天
周日全天
工作日下班后
周六半天
周日半天

可兼职地点

海淀