前言
这本来是一次愉快的面试沟通,我也没必要写这个文章来怼这个素不相识的面试官,只是过程发生的事情,实在是让我对字节飞书的面试体系产生的严重的质疑。我希望能通过这篇文章把我遇到事情的前因后果讲清楚,至于孰对孰错,各位小伙伴可以自行斟酌。
面试前,hr 联系我
在我工作的某一个下午,字节飞书的 hr
打电话来,说看到我的简历,觉得很不错,想约我面试他们的飞书人事部门,有很多的 HC
。一开始我对这些大厂是不太感兴趣的,后面她又发消息跟我说他们部门对我很感兴趣,balabala....
然后,我看了一下他们团队的介绍和 JD,说他们需要有零代码和低代码经验的人加入,我自己本来也是对零代码这块有一定研究的,自己也写了本有关于零代码方向的掘金小册:
所以我自认为我对零代码还是有一定认知和理解的。也打算试试看,奔着沟通学习交流的目的,面试的时候大家交流探讨一下也挺好的。
面试环节
面试过程我从没有录音的习惯,所以这次面试我也没有录音,我先回忆一下问我的主要内容吧。
1. 面聊环节
面试官:先自我介绍
我:balablabala... (这些都是常规回答,没啥好说的)
面试官:我对你简历里面提到的 noCode(零代码)
项目挺感兴趣的,可以简单介绍一下你这个项目。
我:这个零代码项目主要用户是公司内部的 产品
、运营
同学,这些用户可以通过我们提供的 可视化搭建平台
拖拉拽自由组合生成活动页、落地页、产品页...,这些页面都是面向 C 端用户
的。
面试官:我看你之前在 51 信用卡
也做过 0 代码平台,这次在这家公司做的和 51 的有啥不一样的点?
我:在 51 做 0 代码的时候,那个时候是 17 年的样子,在那时,业界几乎没有完整的零代码经验可以参考学习,所以当时的零代码项目是我自己摸爬滚打想出来的一套解决方案,最大的问题有以下几个:
- 组件和模板强耦合,遇到多个模板依赖一个组件的时候,必须将组件从一个模版 copy past 到下一个模版,这会导致维护、迭代成本直线上升,也非常低效。
- 不同组件之间没法通信,比如 A 组件触发了一个点击事件,需要 B 组件弹出一个弹窗,但是做不到。
- 重复请求问题:比如一个页面中的 组件a 和 组件b 都有一个一模一样的请求用户积分数据的接口,因为组件之间无法感知到彼此的存在,所以会发出两个一模一样的接口。
- 数据回流问题:一个完整的活动页生命周期不仅仅是投放,还需要回流,回流的目的一方面可以给运营直观的展示投放页数据和链路,也方便做 AB 实验,快速决策出最优转化效果的页面。但是在51的时候这一步没有做,只有做了活动页生成和投放,并没有完成回流这一步。
- 稳定性策略不够好,模版和页面没有解耦,容易出现新版本的页面+老版本的数据 不兼容的情况。
- 最后,在代码实现逻辑和细节上也有欠缺...balabala
如果有小伙伴对我在 51做的零代码平台感兴趣,可以阅读我之前在 51 写的文章: 厌倦了写活动页?快来撸一个页面生成器吧!
面试官:那你是如何解决这些问题的?
我:51 那边我碰到了这些问题,是因为我的天花板不够,后面我去了蚂蚁集团,在蚂蚁我看到了他们的闪蝶项目,我大受震撼,当时我才意识到我遇到的这些问题,原来别人已经有非常完善的解决方案,也学习到了很多知识,以下是我在最近公司的解决方案:
- 我们对组件进行了分类,一类是模版组件,这类组件是紧紧跟着模版走的,脱离模版没有意义,比如基于
tiny.js
红包雨模版的红包雨组件。还有一类是通用组件,这类组件是可能会被复用到多个模版的,比如引导用户下载 APP
的组件。对于通用组件实现原理就是通过Vue 的单文件组件
打包来实现的,将一个Vue
组件打包成一个 umd 格式js
和css
,在可视化平台预览模式下,当运营拖拽这些组件进入可视化区域时,这些组件打包的js
和css
会被动态append
到html
中。在生产环境中,我们有一个 server render 服务器,会将这些js
和css
在server render
阶段inject
到html
中。js
运行的时候,会在window
上提供一个全局变量供模版进行加载。balabala... (有兴趣的小伙伴可以参考我这篇文章:全局组件设计) - 原则上,我们是不建议跨组件通信的,建议尽量保持一个组件的逻辑自闭环,因为我们面向的用户是没有任何开发经验的运营和产品同学,希望尽可能减少他们的心智负担,将零代码做的足够好用。但是我们也开了高阶功能的口子,以满足极端情况下的需求。实现原理是通过发布订阅机制实现不同组件之间的互通,需要响应事件的组件会订阅需要的事件,页面会对这些事件进行收集,当另一个组件触发对应事件后,页面会触发这些订阅的事件。
- 重复请求的问题:通过就对数据源进行了 自由组合 + 统一管理 + 合并同类请求 + 聚合分发 的模式来进行管理,balabala....
- 对接了埋点平台,然后通过
Echarts
对数据、渠道分类进行展示,只不过会多做一些漏斗图、多渠道对比度、转化率、模块点击率等等个性化图标 - 模版和页面通过类似于 git 协作的方式进行接口,页面是模版仓库的 fork 版本,模版升级不影响页面,页面可以选择性是否同步更新。balabala... (有兴趣的小伙伴可以参考我写的文章:稳定性-模板的更新策略)
- 重构了服务端渲染逻辑,重构了可视化平台的展示逻辑,然后我说了一些细节点.... 有兴趣的小伙伴可以参考我的这个小册: 《从零开发H5可视化搭建项目》
面试官:那我理解模版和组件还是需要人肉开发,并没有提效多少呀?有什么值得说的呢?
我:(当时我就蒙圈了,这么面试官是不是不明白零代码的意义啊?)首先,零代码解决了开发重复开发落地页的低效重复问题,对于之前开发好的活动,有了零代码平台我们对这个活动页进行了组件化设计后,他的这些组件就可以自由组合生成新的活动页了,而这些新的活动页是不需要任何开发投入的。
其次,对于已上线的活动,我们可以很方便的通过可视化平台中暴露出来的组件 props
对页面进行重新调整和优化,这对那些 短、频、快
的活动无疑是效率最高的手段。
另外,我们提供了数据回流的手段,和快速 AB 的能力,以往运营做活动都得找 BI 捞数据,自己分析,自己画图,现在,在我们平台可以直观的看到不同渠道的数据对比和效果展示。
再者,两代码平台式面向运营的,以前他们提需求是不是都得走流程:产品 -> 设计 -> 开发 -> 联调 -> 发布 .... 现在自己可以直接上手一条龙,这中间节省了不仅仅是前端成本,还有其他协同部门的成本,也减少了不必要的对齐沟通会议。
最后,我提供了一个数据,在这家公司,我们的零代码平台全年产出落地页 3000+ 个,单模版仅仅只有14个左右,可以看到他的效果。
面试官:(这里不太记得了大致是我从零代码引出了我做的 D2C 这个东西)什么是 D2C,这玩意是个啥?
我:(我心里已经有点疑惑了,字节面试官 D2C 不知道吗?难道他是想要考我?嗯,肯定是这样的,他一定是装不懂)D2C 就是 Design to Code
设计稿转代码,可以将设计师的 Sketch
、Figma
这样的设计源文件直出成前端需要的 Vue、React、小程序
静态代码。
面试官:有必要转成三端代码吗?直接转成 Vue 或者 React 不就好了?
我:我们有历史包袱呀,有的项目是 Vue
有的项目是 React
。
面试官:我还是理解不了,为什么会需要即转成 Vue 也转成 React?
我:(这面试官是来搞笑的吧,看来是真的不懂 D2C 能做什么了)因为 D2C 没有直出可以上生产环境的单文件页面,他转出的只是静态页面,一个页面=视图+数据绑定,业界几乎所有的 D2C 在编译侧只会做视图层,也就是生成静态视图,数据绑定需要在可视化平台上进行或者开发者自行下载转换好的代码在编辑器面进行接口调用和数据绑定。转出的页面大多是一个产品页,这些产品页是需要内嵌到具体的项目中使用的,假如我这个项目是个 React 项目,那么,就需要转出 React 代码呀。
面试官:哦,我了解了,原来是这么回事(语气上有点满意我的回答)
我:....
面试官:我不了解 D2C,你跟我讲讲 D2C 是如何架构实现的
我:(你不懂?你不懂我跟你说啥呢?说深了我怕你听不懂,说浅了我怕你觉得我 low,算了,给你讲讲吧)大致我就讲了我之前自己画的架构图:
有兴趣的小伙伴可以看我之前的文章:视觉稿转前端代码能力探索(一)基础架构设计
2. 笔试环节
一个算法题,给了我大概半个小时吧,我10分钟不到就完成了,我觉得写的完美,他自己也评价写的没啥问题,有一点点小小的瑕疵,然后就结束了。
3. 面试自我感受
面试大概一个半小时,整体面试下来,我感觉我回答的行云流水,期间我也给了他讲解了很多零代码和 D2C 的知识,我以前待过大厂,也面试过很多选手,以我做面试官的经验来说,他应该是对我很满意的,从对话的语气中也可以看得出来有些东西是我占上风主导了整个面试过程的,我觉得他应该也能学到点东西吧。
反馈
离谱的事情开始逐步显现,我面试完了后,找 hr,跟 hr
说我觉得我聊的不错,应该大概率稳了,结果:
好吧,你跟我不通过是因为人才结构的问题(是没有专家岗的 HC?)不通过就不通过吧,本身也是抱着交流学习的目的,我没啥意见。我也没放在心上。
过了几天,一个猎头找我,帮我内推了字节另一个部门,结果刚内推进去就给我挂了,猎头帮我问了一下原因
我很好奇,这个面试官到底给我评价了啥呀!?不通过就不能好好写评价?!难道面试官的职业素养就是面试不通过就瞎 jb 写评价?而且这个评价是会一直跟着我的!然后我就找 HR 反馈:
最后
面试过程和回答,小伙伴们可以自行斟酌,这个面试官全程就问了一个 0 代码方向的问题,而且我自认为我的回答是有理有据甚至可以给到他一些建议和帮助,如果需要挂一个人你确实可以不提供任何理由,因为你们是用人部门,你们有主导权,但是我只想说的是一个面试官的基本素养是:
- 专业知识和技能: 面试官应该具备相关领域的专业知识和技能,以便理解候选人的背景和能力,并提出深入的问题。
- 客观公正: 面试官需要能够客观公正地评估候选人的表现,避免主观偏见和歧视,并基于事实和证据做出决定。
- 沟通能力: 良好的沟通能力是面试官的重要素养,包括倾听技巧、清晰表达和有效的问询能力。
- 分析能力: 面试官应该具备分析候选人的能力,从他们的回答、行为和经历中提取重要信息,并评估他们是否符合岗位要求。
- 敬业精神: 面试官应该对工作尽职尽责,以确保面试过程的有效性和公平性,同时保护候选人的隐私和权益。
- 灵活性和适应性: 面试官需要能够灵活应对不同情况和挑战,调整面试方法和问题,以最大程度地了解候选人的真实能力和潜力。