小米 JD 调研

JD 信息

岗位职责:

  1. 负责研产供数字化一个业务方向的解耦性、扩展性开发

  2. 负责研产供数字化业务系统的技术演进规划

  3. 参与业务发展方向的讨论

  4. 指导初中级工程师的日常工作

任职要求:

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 元素。

  1. 要做什么
  2. 为什么要做
  3. 怎么做
  4. 截止时间 deadline
  5. 需要的资源

如何在执行侧优化?
创新性项目经验 中总结了未来再次做类似项目时,哪些地方是我可以改进的。

技术能力

这是体现我专业性的地方,但不能以八股文的方式去死记硬背,重心应该放在技术架构设计和解决方案上。

在这些设计和解决方案中,使用的工具尽量匹配 JD 要求的技能项。

我常用的技术栈有多线程、MySQL、Redis、Kafka,下面是组合他们解决业务场景的案例。

2PC 方案异步结算 业务场景:

随着订单量增多,依靠数据库同步结算的方式

1.Redis 开启事物, 存入前缀 key + 结算单号到 Redis,value 是 prepare,24 小时后自动过期。 2. 加款先发 kafka 再改 Redis 用户余额;减款先改 Redis 余额再发 Kafka。 3. Redis 提交事物,成功或失败,都会发送一条延时核对消息,判断 Redis 和 MySQL 是否都有结算单记录。失败时候要根据失败场景写补偿逻辑。

额外配置:

  1. Kafka 发送者开启 acks = all,使用同步发送;接收者使用 Acknowledgment 手动提交,3 次消费失败进入死信队列人工处理。消费时做 MySQL 数据库唯一键幂等。保证发送成功的消息一定成功,且只会消费一次。
  2. 以上任何节点导致的失败,最终结果一定是 MySQL 中的余额 > Redis 中的余额。写好补偿逻辑,比如 key 都没有就重发;Kafka 发成功 Redis 改失败,则同步 MySQL 余额到 Redis 中。
  3. 全局使用 Redis 分布式锁,颗粒度设为用户 Id,等待时间 2s。

企微活码多线程

随着业务增长,流量企微活码有 100 多个,调用企微更新接口耗时 2 分钟 +,需优化。

最开始使用 ForkJoinPool 多线程处理,但是我们线上服务器配置是 1 核 2G,不能完全发挥作用。

于是拆解了下业务场景,配置多个线程池各司其职,经验如下Java 线程池经验

排行榜缓存

延时任务系统;

商户订单支付系统;

团队合作

大公司需要的软实力,部门沟通,老曾课程

学习能力

cursor,AI,RPA 机器人 两个架构师,枫哥华哥,近期请枫哥吃饭,他给我一套架构设计,愿意腾讯会议远程指导我理解架构。

带队经验

个人品质

靠谱

理解到靠谱不是什么事情的都接,而是分辨事情重要性,只做最重要的事情,在做的过程中对事项的复杂度和自身能力有清晰认知,主动向上级汇报工作进度,保证项目进度可控。

事情分给其他同事做,时刻跟进。

待续......

相关推荐
键盘客35 分钟前
Spring Boot 配置明文密码加密,防泄漏
java·spring boot·后端·spring
二进制小甜豆41 分钟前
SpringBoot快速上手
java·spring boot·maven
苹果酱05671 小时前
Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
java·vue.js·spring boot·mysql·课程设计
程序员爱钓鱼1 小时前
defer关键字:延迟调用机制-《Go语言实战指南》
开发语言·后端·golang
蒟蒻小袁1 小时前
力扣面试150题--从前序与中序遍历序列构造二叉树
算法·leetcode·面试
我命由我123452 小时前
Android 动态申请 REQUEST_INSTALL_PACKAGES 权限问题:申请权限失败
android·java·开发语言·java-ee·android studio·android jetpack·android-studio
令狐少侠20112 小时前
idea2024 不知道安装了什么插件,界面都是中文的了,不习惯,怎么修改各个选项改回英文
java·idea
集成显卡2 小时前
网页 H5 微应用接入钉钉自动登录
前端·后端·钉钉
软件测试曦曦3 小时前
15:00开始面试,15:06就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
胡子发芽3 小时前
面试题:详细分析Arraylist 与 LinkedList 的异同
java