JD 信息
岗位职责:
-
负责研产供数字化一个业务方向的解耦性、扩展性开发
-
负责研产供数字化业务系统的技术演进规划
-
参与业务发展方向的讨论
-
指导初中级工程师的日常工作
任职要求:
1、计算机科学与技术、软件工程等相关专业毕业
2、8年以上后端开发,熟悉Java开发语言,熟悉springcloud、spring boot等开发框架
3、熟练掌握Java基础知识,熟悉IO、多线程、集合等相关技术,对JVM有一定了解,有调优经验优先
4、熟练掌握MySQL数据库,对sql有较强的调优经验,熟练使用Redis等缓存中间件,理解其原理和使用场景
5、对企业级应用的开发模式熟悉者优先,有供应链项目经验者优先,有实际微服务架构项目经验者优先
6、良好的的沟通能力和业务理解能力,有较强的责任心和学习意识
HR 告知的关键信息是「业务场景是给小米内部硬件研发、生产制造提供 IPD ISC 的 IT 服务,对业务复杂度的处理能力会有要求」。
首先我要仔细阅读 JD 要求,根据要求分类,在每个类别上检索自己曾经对口的工作经验,证明自己可以胜任岗位。我需要分析业务、能力(硬实力技术能力、架构能力和软实力跨部门沟通、合作)、和个人品质(靠谱、忠诚、责任、平和)。
其次我要了解面试官和 HR 的期望,在老曾的课程中讲到,面试官看重当下状态和未来潜力;HR 看重人员是否达标。所以我要在简历和面试过程注意站在对方角度思考。
最后我要调研公司目前的状态,思考自身哪些能力、特点可能是加分项,并在面试中展示出来。
业务
首先,我要分析 JD 的业务场景,职责前三点重点是 「产研供数字化业务方向的解耦性、扩展性开发」,关键词 IPC、ISC,我需要找一下资料学习。
应该是和小米汽车供应链相关的研发、产品、供应链数字化系统,可能是一套内部系统用于管理小米汽车所有的供应链相关事项,对解耦性和扩展性有很高的要求。
我调研并写下了研产供数字化概念和思考,现在我已经了解研产供数字化整体情况,通过数字化深度融合的方式,实现降本增效。并在文末附上了自己的思考,关于如何做出成功率更高的决策,以及如何在执行层面更好推进。
能力
业务理解能力
JD 中提到对业务复杂度的处理能力有要求。我可以讲解 24 年成功的项目经历,这是个从 0 到 1 完整的项目,我是项目负责人和主程,也参与业务、需求上的决策。
我可以列举一些复杂的业务场景,说明我是如何解决的,总结了哪些方法论。
24 年我在做一个从 0 到 1 的完整项目,我是项目负责人和主程,我们找到了一个非常好的 MVP 模型,想办法做放大和增量,24 年做到了 600w+ GMV,今年还在增长。
我在过程中做两大块事情,1:业务决策,2:编写代码。
业务理解能力决定项目最终能否成功,600w+ GMV 的事实已经证明了这点,具体业务模式在面试时细说,相信在「业务复杂度的处理能力」能够胜任。
以下是从业务中复盘总结和学习到的方法论:
如何分析业务成功概率?
对对对
如何帮助需求方定位真实需求?
使用 互联网必备职场知识(2)------ 靠谱 中提及的目标 5 元素。
- 要做什么
- 为什么要做
- 怎么做
- 截止时间 deadline
- 需要的资源
如何在执行侧优化?
创新性项目经验 中总结了未来再次做类似项目时,哪些地方是我可以改进的。
技术能力
这是体现我专业性的地方,但不能以八股文的方式去死记硬背,重心应该放在技术架构设计和解决方案上。
在这些设计和解决方案中,使用的工具尽量匹配 JD 要求的技能项。
我常用的技术栈有多线程、MySQL、Redis、Kafka,下面是组合他们解决业务场景的案例。
2PC 方案异步结算 业务场景:
随着订单量增多,依靠数据库同步结算的方式
1.Redis 开启事物, 存入前缀 key + 结算单号到 Redis,value 是 prepare,24 小时后自动过期。 2. 加款先发 kafka 再改 Redis 用户余额;减款先改 Redis 余额再发 Kafka。 3. Redis 提交事物,成功或失败,都会发送一条延时核对消息,判断 Redis 和 MySQL 是否都有结算单记录。失败时候要根据失败场景写补偿逻辑。
额外配置:
- Kafka 发送者开启 acks = all,使用同步发送;接收者使用 Acknowledgment 手动提交,3 次消费失败进入死信队列人工处理。消费时做 MySQL 数据库唯一键幂等。保证发送成功的消息一定成功,且只会消费一次。
- 以上任何节点导致的失败,最终结果一定是 MySQL 中的余额 > Redis 中的余额。写好补偿逻辑,比如 key 都没有就重发;Kafka 发成功 Redis 改失败,则同步 MySQL 余额到 Redis 中。
- 全局使用 Redis 分布式锁,颗粒度设为用户 Id,等待时间 2s。
企微活码多线程
随着业务增长,流量企微活码有 100 多个,调用企微更新接口耗时 2 分钟 +,需优化。
最开始使用 ForkJoinPool 多线程处理,但是我们线上服务器配置是 1 核 2G,不能完全发挥作用。
于是拆解了下业务场景,配置多个线程池各司其职,经验如下Java 线程池经验。
排行榜缓存
延时任务系统;
商户订单支付系统;
团队合作
大公司需要的软实力,部门沟通,老曾课程
学习能力
cursor,AI,RPA 机器人 两个架构师,枫哥华哥,近期请枫哥吃饭,他给我一套架构设计,愿意腾讯会议远程指导我理解架构。
带队经验
个人品质
靠谱
理解到靠谱不是什么事情的都接,而是分辨事情重要性,只做最重要的事情,在做的过程中对事项的复杂度和自身能力有清晰认知,主动向上级汇报工作进度,保证项目进度可控。
事情分给其他同事做,时刻跟进。
待续......