Javascript

置顶 蚂蚁投顾招聘高级前端工程师

简历投递:坤霆 <wenjin.ywj@antgroup.com>


岗位

蚂蚁投顾 - 高级前端工程师

职位描述

  1. 参与投顾业务前端、Hybrid、Node.js/BFF 及智能化研发体系建设,支撑核心业务与技术产品演进;
  2. 负责投顾核心场景的全栈研发工作,推动大模型能力在内容、投顾、运营、客服等场景中的业务落地;
  3. 参与前端工程体系和 AI Native 研发范式建设,包含应用框架、组件体系、构建发布、监控运维、性能稳定性、安全合规等方向;
  4. 探索智能助手、知识检索、工作流编排、Agent 等 AI 应用形态,建设可复用的智能化技术能力;
  5. 持续推动研发效能提升,结合 AI Coding、自动化测试、智能评审和知识工程等手段提升交付效率和工程质量。

职位要求

做得太好,反而升不上去

上周看到一个热搜话题:一个人用AI做出了过去需要一个团队才能做的产品。评论区一片焦虑,有人说"技术管理者要失业了"。

我觉得这话说反了。AI越能干,越需要有人决定让它干什么、不干什么。真正该焦虑的,是那些还在用"做得好"来定义自己价值的技术管理者。

做得太好,是一种甜蜜的陷阱

我见过不少技术leader,包括我自己,刚做管理时的第一反应是——代码review我得上,架构设计我得参与,关键技术选型我得拍板。

原因很简单:这是我们最擅长的事,也是最有安全感的事。写出一段精巧的代码、解决一个棘手的bug,那种成就感是开会、写文档、做1on1给不了的。

但问题是,如果你的时间都花在review代码上,谁来做技术规划?谁来协调跨团队的需求冲突?谁来处理团队里那个能力强但态度差的人?

没人做。因为这些事"不急"。或者更准确地说,我们下意识觉得这些事没有"亲手写出一个漂亮的函数"来得有成就感。

身份认同才是真正的瓶颈

我在金融科技团队里见过一个典型场景。新业务要上线,技术方案讨论时,CTO问了一个架构层面的问题。整个会议室沉默了十秒,所有人看向那个最强的工程师。

他答得很好。但我在想:如果这个团队继续发展,他还是那个被提问的人,还是那个回答问题的人?

招人不看代码,看什么

做了这么多年技术面试,回头看,最贵的成本不是招错一个人,而是你根本不知道自己错在哪里。

早期我面试有个执念:能把算法题写出来的人,工程能力不会差。这个信念让我错过了一些人,也让我招错了一些人。直到有次被现实教育——一个面试表现非常出色的候选人,入职三个月就让我开始怀疑自己的判断力。

第一次看走眼

那个候选人来的时候,我们聊了两个小时。从系统设计到编码细节,他都能接住。我问他一个并发场景怎么处理,他几乎是脱口而出地给了三种方案,还主动比较了优劣。

面试结束我就跟团队说,这个人我要了。

入职后呢?代码确实写得不错,Review也能过。但慢慢地问题浮出来了:跟产品对需求理解有偏差时,他不会主动澄清,而是按自己的理解做完再说。跟后端联调遇到接口不一致,他倾向于等别人改而不是沟通解决。分配任务时,他永远选技术最有趣的那个,而不是业务最紧急的那个。

三个月后我开始反思:我在面试里到底看到了什么?

答案是:我看到了一个"面试能力强"的人,但没看到一个"工程能力强"的人。这两个东西,重叠度远没有我想象的高。

"流畅"的陷阱

没权力怎么推事

你有没有遇到过这种场景——

你是前端技术负责人,发现跨团队项目里有个架构设计有明显问题。如果按现有方案走,半年后一定踩坑。你去找后端团队负责人沟通,对方听了,点点头,然后说:"嗯,我们再看看。"

然后就没有然后了。

你跟老板汇报,老板说"你自己去协调"。你没有对那个团队的考核权,没有晋升推荐权,甚至跟他不在一个BU。你唯一能依靠的,是你的"技术判断力"和——怎么说呢——某种说不清道不明的"影响力"。

这种"没权力但要把事推成"的经历,大概是技术管理者最日常的困境之一。

权力为什么不好使

先说一个反直觉的结论:在技术团队里,靠权力推事情,往往是最低效的方式。

你可能觉得,如果我是总监,我说的话别人就会听。事实上,在大厂的组织架构里,你日常需要协作的人,大概率跟你不存在汇报关系。跨团队、跨BU甚至跨公司(外部合作),你的职级对别人没有直接约束力。

而且,即使在团队内部,纯粹的权力推动也会产生副作用。团队成员会因为"你是leader"而执行你的决策,但他们不会投入额外的思考。你在的时候执行,你不在的时候走样。这不是执行力问题,是动力问题。

真正的技术影响力,是让对方觉得"这事值得做",而不是"这人我惹不起"。

同步不再将就

上个月,一个朋友在群里吐槽:他们的在线文档产品要加多人协作功能,技术负责人评估了一下,给了个方案——用 WebSocket 广播所有编辑操作,冲突了就提示用户"文档已被他人修改,请刷新后重试"。

我问他,你们打算让用户刷新多少次才能写完一段话?

这不是段子。在我见过的技术选型里,"广播 + 冲突提示"仍然是很多团队处理实时协作的第一反应。理由很简单——实现成本低,逻辑好理解。但这条路的尽头,是一个永远填不完的坑。

冲突不是边缘情况

想象一个场景:两个人同时编辑同一份文档的同一行。A 把"用户协议"改成了"服务条款",B 在同一位置加了个逗号。两个操作几乎同时发生,网络延迟让它们到达服务器的顺序不确定。

传统做法要么让 A 的修改覆盖 B 的(后到的覆盖先到的),要么把文档锁住让 B 等 A 改完。前者丢数据,后者体验差。

CRDT(Conflict-free Replicated Data Type,无冲突复制数据类型)提供了第三条路:从数学上保证,只要操作满足交换律和结合律,无论网络传输顺序如何、延迟多长,所有客户端最终都会收敛到同一份数据。不需要中心服务器仲裁,不需要锁,不需要用户手动解决冲突。每个操作本身就是一个独立的、可传播的、可合并的单元。

从论文到产品的距离

微前端落地两年,我们开始往回收了

上个月,我们默默地把三个微前端子应用合并回了两个。没有发公告,没有写技术复盘,就是安安静静地把代码挪了回去,删掉了两个仓库,关掉了四条CI流水线。

如果有人在半年前问我"微前端到底好不好",我大概率会给他列一堆优点:独立部署、技术栈无关、团队自治。但现在我的回答变了:看你的团队到底有没有拆的必要。

这个判断听起来像废话,但我见过太多团队在这件事上栽跟头,包括我自己。

拆的时候有多爽,合的时候就有多痛

故事的开始总是相似的。一个大型前端项目,十几个开发者在同一个仓库里撞来撞去,merge冲突是家常便饭,发版节奏互相牵制。有人提了微前端,方案评审会上大家眼睛都亮了——每个团队自己的子应用、自己的发布节奏、自己的技术栈,互不干扰,多美好。

我们也是这么想的。2024年初,基于qiankun把主应用拆成了五个子应用,按业务域划分。前半年确实爽:团队A改了代码不用等团队B review,团队C想用新版本的React自己升,团队D甚至单独搞了一套构建流程。

问题是从第二年开始集中爆发的。

你以为流很省内存,其实在背N份账

最近帮一个 Node.js 中间层排查 OOM。一个聚合接口,把三四个下游接口的数据拼一下吐给前端,单次请求的数据量也就两三 MB,看着毫无压力。但 Grafana 上常驻内存随 QPS 线性爬升,GC 触发得越来越频繁,终于在晚高峰把进程撑爆了。

翻代码,逻辑大致是这样:

```js
const responses = await Promise.all(
endpoints.map(url => fetch(url).then(r => r.json()))
)
return res.json(merge(responses))
```

看起来人畜无害。`fetch` 拿到的是流,`.json()` 一次性消费它,`merge` 拼好再 `res.json()` 序列化出去。整个链路里数据至少出现了三份:原始响应体、解析后的对象、合并后的对象。再加上序列化时的字符串缓冲,单请求峰值轻松到原始数据的四五倍。这还没算 V8 把这些短命对象塞进新生代、触发 Scavenge 的开销。

版本号说了谎:semver为什么管不住npm生态

博客分类: 

上周四晚上十点半,我收到一条告警:生产环境的理财持仓页白屏率从0.1%飙升到8%。排查了两小时,最后发现是一个间接依赖发布了"patch"更新,把一个工具函数的返回值从数组改成了迭代器。没有破坏性变更声明,没有 major 版本升级,就是一个小小的 1.2.3 到 1.2.4。

这种事在 Node.js 生态里不算新鲜。每个在前端或 BFF 层待过几年的工程师,大概率都经历过类似的"幽灵故障"——代码没动,依赖没升,线上突然就挂了。问题出在哪?出在我们把 semver 当成了契约,但它充其量只是一份君子协定。

 

semver 的承诺本身就是模糊的

 

semver 的规则看起来很简单:major 变更代表不兼容的 API 修改,minor 是向后兼容的功能新增,patch 是向后兼容的问题修复。三段式版本号,清晰明了。

越过山丘,勇立潮头:20年技术老兵的安泰"破壁"与"重构"

博客分类: 

在技术领域深耕近二十年,我先后跨越了通信、软件、互联网等多个行业,并在金融科技领域潜心笃行近十年。一路上,我经历了从后端到前端的技能迁移,也完成了从普通工程师到研发管理者的角色跃迁。我曾作为初创成员,从零开始搭建起一支高效的团队;也曾与伙伴们并肩作战,见证了核心业务突破万亿规模的高光时刻。

然而,当技术管理走到深水区,我逐渐感受到了那面无形的玻璃天花板——单纯的技术视角在面对复杂的商业战略、跨部门协同以及宏观市场变化时,常常显得力不从心。

为了突破认知瓶颈,重塑个人品牌,并构建更宽广的资源网络,我选择在职业生涯的黄金期主动求变。2026年,我顺利拿到了上海交通大学安泰MBA综合管理方向的拟录取通知。

这段备考之路,既是一次严苛的自我测试,也是一场关于"取舍"的修行。以下是我的一些实战经验,希望能为正在筹备考研的学弟学妹们提供一些落地、有价值的参考。

 

一、择校:谋定后动,选择最契合的土壤

 

对于在职备考的人来说,精力的分配是极其奢侈的,因此择校的精准度决定了备考的性价比。我选择交大安泰MBA,主要基于三个维度的考量:

写下第一行管理代码之前,没人告诉你的事

博客分类: 

上周和一个刚升 Tech Lead 的朋友吃饭,他半开玩笑说了句:"我以前觉得最焦虑的是线上故障,现在发现最焦虑的是打开 Slack 不知道该回哪条消息。"

他不是在抱怨工作量。他困惑的是一个更根本的问题——他不确定自己现在到底该干什么。

这位朋友技术能力没得说,组里最难的问题都是他啃下来的。升职之后,他给自己定的策略很简单:还是干最难的活,顺便把管理的事也带着做了。三个月下来,最难的技术活他还在干,管理的事全是"顺带"——顺带开个会,顺带审批个需求,顺带和产品对个方案。团队产出反而不如他一个人扛活的时候。

这个故事不新鲜。我见过太多优秀的工程师在走上管理岗之后经历类似的挣扎。不是能力问题,是角色切换的认知滞后——你以为只是多了一些职责,其实是在换一个职业。

 

升的是 Title,丢的是手感

 

工程师的身份建立在什么上面?解决问题的能力。一个 bug 搞定,一个功能交付,一个性能瓶颈突破——每一个都是明确的、可感知的成就。这种正反馈循环是工程师职业早期的核心驱动力。

页面