Skip to main content

Common 综合

随机全部
顺序全部
随机置顶
随机 ⭐
顺序 ⭐
5道(0)
重置
0
🌗

项目与经历​

自我介绍 CN​

我叫XXX,在深圳做了 6 年前端,先后就职于万兴、腾讯、百度和影石。

最近一年多在影石做无人机 Antigravity 的全球电商,业务覆盖 60+ 个国家和地区。我主要参与了 C 端交易链路和对应中后台的开发,包括商品、购物车、订单、以旧换新和分销等核心模块,以及统一登录与官网 SSR 的前端接入和登录态策略;工程上则独立完成了事务邮件模板,并主导了组件库的开发。

而之前在百度我从零搭了文心千帆大模型的官方 SDK,包括对应的鉴权和流式解析等功能开发,以及平台侧的低代码建模、可视化画布和微前端工程的接入。

所以我比较擅长的是复杂业务的前端架构、工程化和对应的组件开发;在工作之外我自己也钻研了不少地图和三维可视化的实践。

以上是我的自我介绍,非常感谢!

讲讲做过的项目​

关于做过的项目,我在影石这边主要做的是无人机的全球电商,负责商品、购物车、订单、以旧换新和分销等交易链路的开发。

  • 其中除了 C 端和中后台的需求迭代外,统一登录和官网的服务端渲染我也参与了,主要是把登录凭证写在父域上,让各子域能直接读到,从而共用登录态;官网这边则在 Next.js 外套一层 Express 来做编排,让同一个链接按手机和电脑出对应页面;
  • 在工程上,我独立做了事务邮件模板:用 FreeMarker 写条件和公共页头,再用脚手架生成九种语言的完整模板,交给后端邮件发送服务;
  • 在基建上,我沉淀了数据埋点,做了 Tracker 统一门控与分区上报,并主导了组件库开发及文档站搭建;

然后之前在百度,参与的是文心千帆大模型平台的开发,负责数据管理和知识库。

  • 其中数据集上传我用 Resumable.js 实现了断点续传;
  • 知识库则做了切片管理,并用 qiankun 接入微前端,解决多应用协同开发的一些问题;
  • 项目还涉及到低代码建模,我基于 ZRender 二次封装了低代码建模的可视化画布,并实现了拖拽、连线和节点渲染等功能;
  • 另外我还从零做了千帆大模型的官方 SDK,包括流式解析、鉴权和 npm 发版这些。

在工作之外,我也有自己的一些开源实现和博客网站,以上是我做过的一些项目。

说说最有挑战性的项目​

比较有挑战的是一次掉登录的问题,它的背景是海外站点在用户同意之前不能去使用统计和营销 Cookie,所以我接入了 Cookiebot 做同意弹窗,根据用户的选择来决定清掉哪些 Cookie,但接入之后,有些用户用着用着登录态就掉了。

我一开始以为是登录凭证过期,或用户切换地区时把登录态给清掉了,但对了日志发现账号服务是正常的,是 Cookie 在页面中途被清掉了。

后面排查到,接入的 Cookiebot 有个白名单,决定该保留哪些 Cookie,这个白名单没从 CDN 拉取之前是空的,登录凭证这时不在白名单中,所以会被清掉,导致用户退出登录。

解决办法是在它删除 Cookie 的地方加一层守卫,如果白名单还没就绪就不给放行,避免误删登录凭证,从而解决这个问题。

讲讲项目中的统一登录 SSO​

统一登录 SSO 是在登录成功后,把登录凭证写在父域上,其他子站打开时会自动带上,不用再专门登录;而我主要是做前端接入这一层,因为海外站点在用户同意之前不能去使用统计和营销 Cookie,所以我接入了 Cookiebot 做同意弹窗,根据用户的选择来决定清掉哪些 Cookie;另外就是在国内和海外切换地区时清掉登录,避免串号。

为什么在 Next.js 外面还套一层 Express​

因为官网在 PC 和移动端虽然是同一链接,但展示的内容和资源区别很大,需要出两套页面;而且在页面出来之前要去获取标题导航等公共数据,这些也不该写进页面,可以套一层 Express 去编排,等它做完再交给 Next.js 去出页面。

官网是 Pages Router 还是 App Router​

官网是 Pages Router,等数据齐了才出整页,其中会套一层 Express,在出页前会把设备和页面数据准备好;而统一登录才是 App Router,出页前的地区判断和登录这些流程会走它自带的中间件,不需要额外套一层 Express。

最有成就感的一个产出​

最有成就感的是事务邮件工程,它的背景是下单、发货、售后等各种场景都会给用户发邮件,涉及到几十个邮件模板,每个模板有九种语言,每种语言各维护一套代码,每套代码中的文案、条件判断和字段都堆在一块,而且如果有模板要改,各语言的每套代码都要跟着改,维护成本很高。

后端服务每种语言都需要一套完整的代码,所以我的解决办法是用 FreeMarker 写条件判断和公共页头,然后用脚手架将同一模板生成九种语言的完整代码,再交给后端去发送;这期间还同时解决了桌面邮箱的排版限制和兼容问题。

以上一整套事务邮件工程,大幅降低了运营后台的邮件开发及维护成本。

邮件的样式问题有哪些,怎么解决​

针对邮件不支持弹性布局或内边距,可以通过表格布局来解决;针对不兼容圆角核切角,可以通过矢量写法来解决;针对图片默认被拦截,可以让图片独占一行并补充替代文字来解决。

沉淀数据埋点,Tracker 统一门控与分区上报做了什么​

其实就是把埋点上报做成各页面统一走一个入口,这个入口会补上环境和地区等公共信息,再按地区选择上报地址,把国内和海外分开上报;而在门控这一层,如果用户没同意就不采集。

说说千帆业务​

千帆有点类似字节的火山方舟,本质是个 AI 生产平台,上面包括两大块:一块是模型开发,包括数据管理做数据集和清洗标注,训练做精调,最后部署成服务;另一块是应用开发,包括知识库问答、Agent 和工作流编排等。

说说项目中的低代码开发​

低代码我主要做的是可视化建模画布。基于 ZRender 二次封装了一层画布引擎,支持节点拖拽、框选、连线和自动排版;节点和连线本质上就是一份 JSON schema,画布编辑相当于于改 schema,然后渲染引擎再按 schema 去出图。这其中也遇到过一些交互流畅度的问题,例如节点多的时候拖拽会有性能压力,一般可以按视口去裁剪绘制、拖拽过程走轻量影子节点、松手才提交真实位置,以此来进行优化。

配置或描述怎么生成可交互界面​

我不会让生成结果直接变成可执行代码,因为里面可能藏脚本,而且半截内容还会把页面画坏。所以我定一套白名单协议,只允许约定好的类型、数据和操作,前端再按类型注册组件来渲染。流式的时候先占位,等拼完整了再替换。用户改过的参数会随下次请求带回去,同时留一份快照;两边对不上,就按最新意图合并,也能回退到上一版。以后要加类型,只加一个注册项就行。

长时间任务的状态该归谁​

浏览器只留马上要交互的状态,比如输入、当前选中,还有流式还没拼完的内容。至于做完没有、为什么失败、能不能重试,都以后端或执行器为准,前端只是订阅过来显示。所以刷新或者断线之后,我会重新拉一次,不靠本地记着的旧状态。这样换一个页面,看到的还是同一个结果。

实时监控页你怎么拆​

我把它拆成主画面、对象列表、告警和回放四块。位置变得很快,所以按帧合并,并且只画当前视口里的。告警再分轻重,严重的放在最上面。回放和实时用同一套数据结构,时间以服务端为准,不用电脑自己的时间。断线之后先拉一份全量,再补后续增量。如果只是看状态,单向推送就够;要下发命令,再用双向通道。

说说 sdk 项目​

千帆 SDK 主要是为百度的文心千帆大模型平台提供一系列的接口,快速实现对话、补全等各种 AI 功能;其中我主要基于 Rollup 构建了 SDK 的基础架构,并通过 SSE 实现流式传输等各类功能;另外,针对浏览器和 Node 两种环境的兼容,我则通过 rollup 的 plugin-node-resolve 来处理第三方模块路径,通过 plugin-commonjs 来完成 CommonJS 模块的转换,以及通过环境变量来区分不同环境的构建产物,做了一系列的适配。

浏览器直连大模型 API 有什么安全风险​

有可能导致密钥泄露;因为页面前端代码是公开的,像 AK/SK 这种长期密钥一旦打进前端,很容易被其他人获取,所以浏览器不能带着密钥去调模型;一般是请求先走我们自己的代理服务,由这层服务去加上密钥再做转发。

千帆的数据集上传和清洗标注的前端是怎么做的​

我在数据集上传中主要通过 Resumable.js 来做断点续传,配置好上传地址、切片大小和并发上传数量等属性,然后配合 Resumable 提供的 API 来实现文件分块和添加标识;接着服务端根据标识的完整性来决定是否秒传,不能就只传缺失的部分做断点续传,全部传完之后在服务端进行合并。

清洗标注这块算法主要在服务端,前端这边做的是选择数据和配置规则,并在页面中生成预览效果;标注的话是把回答一条条去修改,然后保存。

组件库从 0 到 1 你怎么设计​

先定好主题变量;再定好组件实现规范,例如要传哪些参数、类型怎么写、受控和非受控的处理、无障碍的支持等等;然后打包发布前要做好类型和规范检查;文档站这块则可以基于 React-live 去实现可视化交互编辑器,实时预览组件效果,方便调试;还可以配合 Algolia 去做组件文档的全文搜索等。

线上出过事故吗?怎么发现、排查、复盘​

有一次线上出了个事故:部分用户用着用着登录就掉了,集中在海外站。事情是从用户反馈发现的,我先以为是凭证过期,或者切地区把登录态清了,查了日志发现账号服务是正常的,所以判断是 Cookie 在页面中途被清掉了。定位下来是接入的 Cookiebot 有个白名单,没从 CDN 拉下来之前是空的,登录凭证不在里面就会被删掉。

修法是先止损:在它删 Cookie 的地方加一层守卫,白名单没就绪就不放行,线上恢复后再推彻底的方案。复盘下来,问题出在第三方脚本的初始化时序上——以后接入这类脚本,得先模拟弱网和异常场景压测一遍,确认它最坏情况下会做什么。

讲一次失败或犯错的经历,你从中学到了什么​

说一个我做过的偏理想化的决策吧。当时我负责 XX 这块,为了赶进度,方案没有做小范围验证就全量推了。上线后 XX 出了问题,我们只能先回退止损,前后大概耽误了 XX。复盘下来,问题是我把「方案能跑」当成了「方案能落地」,忽略了它对 XX 的依赖。后来我给自己定了个规矩:核心链路的方案变更,先做小范围验证,把依赖链和回滚路径都过一遍再推全量。这个习惯后来帮我提前拦下过类似的风险。

职业规划​

我自己更偏好扎根技术专家路线,短期内聚焦工程化和架构能力,确保在 AI 大环境下能保证交付质量;中长期则承担更完整的技术责任,能定方向、定规范,也能把开发到发布全套工程闭环打通;这期间也希望沉淀更多 AI 实践,帮助团队提效。

优劣势​

优势的话,我能够把复杂业务从方案做到上线,很重视交付质量;而且有严谨的工程习惯,例如做组件库时会把验收前置,专门搭建了可视化、交互和无障碍等测试面板;另外在 AI 开发上我也沉淀了不少 Skill 和规则,帮助团队提效;劣势的话在自动化测试这块还有待加强,而且架构能力和技术上也还有成长空间。

离职原因​

影石:影石这边主要是无人机业务线在大幅收窄,所以我们组织架构做了很多合并和裁撤,协商解除合同,出来看看计划;

百度:百度的话也是组织架构调整,百度 AI 相关的业务这几年变动都比较大,很多业务都在合并或关闭,我那会所在的深圳公有云团队就整体裁撤了;

腾讯:腾讯的话是当时业务后期停留在基础功能的小修小补上,那会刚毕业不久,觉得成长空间有限,而且那会正好是百度在开文心一言发布会,觉得百度 AI 团队是个不错的机会就去了百度;

万兴:万兴的话主要是当时团队要迁去长沙总部,那会更倾向于留在深圳,所以没跟着过去。

你现在看机会,最看重什么​

主要是前两家公司都经历了业务收缩和组织调整,所以我现在会更看重业务的方向及稳定性,公司在这块业务上的一个投入情况和未来规划;另外就是看重团队的技术氛围和工程习惯。

对公司的了解 / 为什么选择我们公司​

我了解到的元戎启行是国内智驾方案的第一梯队吧,技术上走的应该是不依赖高精地图的端到端路线;然后 Robotaxi 这条线我觉得应该算是在上升期,而且我感觉这边的技术方向应该都是跟基座模型和数据相关联的,跟我自身在 AI 工具链上的积累也比较贴合。

期望薪资​

我想先了解一下薪资的结构(社保基数、公积金比例、年终是固定还是浮动、是否有商业险和其他补贴)

我目前是 XX * 15,我希望在这个基础上有 10% 左右的涨幅

是否有其他 Offer​

目前手里是有两家公司的 Offer

  • Offer 待遇:具体我这边不太方便透露,不过在我的期望之内;
  • Offer 选择:我会综合对比看看,因为目前 XX 公司这边的工作内容和业务方向是我比较倾向的,而另外两家公司的话,一家是离我住的地方近点,另一家是这两年发展很快,都各有吸引我的点,所以我会综合工作内容、平台业务以及薪资待遇各方面对比看看。

有什么要问的(现场挑 3 个,别照念)​

技术面:

  • 这个岗位在 Robotaxi 算是运营线还是量产线,是新的业务吗
  • 目前业务团队的一个规模是怎样的
  • 这个项目是否是新的业务线
  • 项目涉及的技术栈大概有哪些
  • 公司、团队氛围
  • 上下班时间

总监面:

  • 这个项目是否是新的业务线
  • 业务未来的一个发展方向是怎样的
  • 公司、团队氛围

HR 面:

  • 晋升、考核机制
  • 上下班时间
  • 公司、团队氛围