Microphone and notes visual for speaking drafts
备战面试2026年4月6日
返回文章列表

文字稿

面试官您好,我叫肖树德,毕业于华南农业大学计算机专业

文章大纲

针对 Java/后端开发岗位,重点考察核心技术能力、项目经验以及系统设计能力

个人介绍

面试官您好,我叫肖树德,毕业于华南农业大学计算机专业

毕业后一直从事 Java 后端开发的岗位

上一家公司是做供应链金融的

主要负责 toB 相关的一些 SAAS 业务的开发

21 年五月份加入分期乐 公司主业务是做消费贷的

我在公司先后参与了借钱业务迭代 以及营销平台建设

目前主要工作内容还是营销平台这块

有一些独立项目经验的积累,其中包括有偏业务方向的,也有底层支撑的工具系统

离职原因分析

  • 主观原因
    • 在分期乐积累了三年项目经验(业务方向和底层支撑工具系统)
    • 希望寻求更大平台,拓展技术视野
    • 期望更好的薪资待遇
  • 客观原因
    • 业务健康度不理想,个人发展受限
    • 营销系统基本完成闭环,进入常规迭代阶段
    • 团队架构调整,业务方向转变(冲量、科技赋能Saas、企微系统)

核心项目:Matrix 营销系统

项目背景与定位

从0到1参与设计开发及灰度上线的精细化运营体系

  • 业务诉求
    • 受众人群分层
    • 营销策略自动化部署
    • 全链路数据回收

系统架构设计

MermaidOpen SVG
Mermaid diagram

核心挑战与解决方案

1. 业务复杂度高的通用抽象设计

  • 挑战:集团级通用营销能力,涉及多业务方,策略组合多达上百种
  • 方案:自研流程引擎,实现策略灵活编排与高效扩展
  • 成果:策略部署周期从5天缩短至1小时内完成

2. 高并发系统吞吐量与稳定性保障

  • 挑战:策略消费能力跟不上,消息大量堆积(上百万数据跨天消费)
  • 方案:人群底座优化、监控告警、策略节点补偿重试机制
  • 成果:系统吞吐量提升一个量级

技术亮点:自研流程引擎

设计原理

  • 基本模式:圈选用户 → AB分流 → 人群筛选 → 业务操作(发奖/触达) → 结束
  • 执行结构:树状多叉结构执行
MermaidOpen SVG
Mermaid diagram

实现细节

  • 线程池选择:ThreadPoolExecutor而非原生Executor(避免OOM风险)
  • 设计模式:模板方法模式,顶层抽象类统一数据上报和异常处理
  • 架构原则:单一职责、开闭原则,节点聚焦内部逻辑,无依赖,并行开发
  • 策略执行上下文存储:json序列化之后放到MySQL中

开源框架选型考量

Flowable/Activiti/Camunda vs. 自研

  • 决策因素
    • 业务场景覆盖度(功能及吞吐量要求)
    • 迭代灵活性
  • 自研原因
    • 营销流程视图复杂(策略转化率等流程节点指标展示)
    • C端高流量场景,开源框架缺乏生产实践支撑
    • 重写框架研发人力成本高

性能优化专项

人群决策性能优化

MermaidOpen SVG
Mermaid diagram

关键优化点

  1. 配置预编译优化

    • 人群配置解析前置到管理端
    • 标签去重
    • 表达式预转换(Google Aviator格式)
  2. 嵌套人群递归优化

    • 问题:人群层层引用导致递归执行,IO开销大
    • 解决:深度遍历解析配置,将嵌套结构平铺,批量预取标签值
    • 效果:避免串行IO,减少网络往返
  3. 缓存策略优化

    • 调整缓存粒度:接口维度 → 单个人群ID维度
    • 缓存命中率提升:40% → 99%
    • 引入Caffeine二级缓存减少分布式缓存网络IO
  4. 缓存一致性保障

    • 监听Binlog日志,人群配置变更后旁路异步刷新缓存
    • 接受分钟级延迟更新

稳定性专项治理

  1. 策略执行异常处理

    • 线程池打爆补救
    • 策略节点补偿重试机制
  2. 业务线隔离

    • 不同优先级Topic隔离
    • 通过动态配置中心,调整消费线程数和批量拉取消息数
  3. 加锁场景优化

    • 用户维度策略执行流水写入优化
    • 乐观锁实现

工程价值与个人贡献

  1. 产品前瞻性思考

    • 主动识别业务潜在诉求和痛点
    • 预留拓展点(用户侧执行流水记录、核心流程节点解耦)
    • 支持后期并行开发
  2. 工程效能提升

    • 推进系统工具建设,提升团队效率
    • 建立需求预评审机制,防止后期留坑
    • 推动核心链路时序图等工程化规范
  3. 技术栈沉淀

    • DDD领域驱动设计实践
    • 工具箱能力沉淀
    • 合理挑战不合理产品设计

技术深度问题解析

Redis Lua脚本限流原理

  • 基本原理:原子性执行评估请求、计数和判断逻辑
  • 优势
    • 原子性保证
    • 减少网络往返
    • 执行效率高
  • 潜在问题
    • 复杂脚本可能阻塞Redis
    • 需考虑分布式一致性

乐观锁实现用户策略执行流水

  • 业务场景:营销画布执行记录(可达20M+JSON数据)需并发安全
  • 实现方式:版本号控制,CAS更新
  • 性能影响:减少数据库锁竞争,提高并发能力

研发流程与最佳实践

  • 敏捷开发:2周一个Sprint,每个迭代产出可工作软件
  • DDD实践:领域驱动设计,聚焦业务建模
  • 架构设计原则
    • 清晰理解架构设计概念、本质和目的
    • 遵循通用设计原则
    • 标准化设计流程
    • 深入理解架构模式

性能优化通用原则

  1. 减少重复数据库查询

    • 方法间传递已查询结果
    • ThreadLocal临时缓存
  2. 并发处理

    • 将串行操作并行化
    • 示例:两个3秒查询,串行需6秒,并行仅需3秒
  3. 非核心操作异步化

    • 子线程异步执行
    • 消息队列实现
  4. 减少数据量

    • 使用高效序列化库(如Kryo)
    • 实例:数据体积缩小1倍,处理时间从700ms降至200ms
  5. 合并查询

    • 批量ID查询替代单条查询
    • 减少数据库请求次数和全表扫描

Continue Reading

关联文档推荐

查看全部

备战面试

事务

B+树与哈希索引的核心区别在于数据结构与适用查询类型。 B+树是平衡多叉树,支持范围查询和排序,适合磁盘存储的OLAP场景; 哈希通过哈希函数实现O(1)等值查询,但无法处理范围操作,常用于内存键值存储。

备战面试

sorted set

哨兵机制是保证 Redis 的高可用性 监测主节点是否存活 - 发现主节点挂了,会选举一个从节点切换成主节点 - 同时将新的主节点信息通知给其他从节点

备战面试

场景设计

设计一个抢红包系统 如何拆包 随机数 线性切割 二倍均值法