面试的业务是字节-千川,职级是 2-2,技术面一共 3 轮,每一面都要手写算法。我在 2023 年 7 月下旬被裁员,于 2024 年 2 月初面试字节-千川,没有通过第 3 轮面试,在这里记录下当时的面试问题,希望帮到大家
第一轮面试
首先是自我介绍,主要介绍在任职的公司落地了低代码平台和用户操作记录回溯,还向开源项目 rrweb 提交了两个PR,最后是公司的插件化架构。
自我介绍完毕,面试官的第一个问题是,为什么离职?我因为被裁而离职,如实回答了,之后每一轮面试官都会询问什么被裁,另,由于我从离职到面试字节中间隔了7个月左右,面试官还重点关注了,离职之后在做什么。离职之后,我首先回家休息了近 1 个月,旅游了近 2 个月,然后写书花了 1 个多月,到 11 底开始找工作,这没什么好隐瞒的,如实告知了面试官。
第一轮主要面试 JS 和 React基础知识,问题如下:
- 在 js 中有浮点数运算不正确的时候,比如 0.1 + 0.2 不等于 0.3 这是什么原因,要怎么解决
- 对 webpack 有了解吗,我看你在做低代码
- webpack中 loader 与 plugin 有什么区别
- 有没有写过 plugin
- 我们写代码的时候是 es6,浏览器运行的时候是 es5,在做代码转化的时候,webpack 帮我们做了什么事情
- 在 React 类组件中,为什么修改状态要使用 setState 而不是用 this.state.xxx = xxx
- setState 函数做了哪些事情
- React 生命周期 commpoentWillUnMount() 对应的 hooks 要怎么写
- useState 的原理是什么,背后怎么执行的,它怎么保证一个组件中写多个 useState 不会串
- 函数组件重新渲染的时候怎么拿到useState之前的状态,而不是得到初始化的状态
- React为什么要自定义合成事件
- 你的简历里写了关注资产损失,这是做什么事情。
- 你在地代码开发与实践上也做了一些事情,当时是做什么呢?
- 表单的联动是怎么处理的
- 当时做这个表单驱动的时候,为什么没有用 Formily 现成的方案呢
- 被裁的原因是什么呢
- 从离职到现在一直没有找工作吗?
- 从11月底到现在两个月了有哪些 offer 了吗
算法题
- 实现 loadsh.get 方法
- 计算二叉树的最大深度
- 岛屿的最大面积
最后是反问环节。面试时长 1 小时 40 多分钟。
第二轮面试
由于简历重点介绍了低代码,并且在自我介绍的时候,提到了我的书------《低代码平台开发实践:基于React》,因此面试官大部分问题都与低代码相关。问题如下:
- 为什么写书
- 能把你的掘金上发的低代码文章发给我吗?
- 低代码针对的中后台是什么样的
- table 中的字段也是可以配置的吗?Table 头和每一项下面展示的内容怎么配置
- 为什么要做低代码
- 做低代码系统的时候你有考虑研发量吗
- 整个低代码都是你一个人做吗?
- 当属性面板上有修改之后,画布刷新的机制是怎么样的
- 继续讨论研发量,开发规划的问题
- 没有考虑使用已有的低代码项目做二次改造吗
- 做低代码的时候有没有遇到比较难的问题,怎么解决的
- 被裁的原因
算法题
最后是反问环节。面试时长 1 个小时左右。
第三轮面试
这一轮的面试官没让做自我介绍,一开始就是写算法题
算法题
下面是询问的问题
- 为什么写书
- 在市面上类似的书有一些,你的书有什么不同
- 什么场景适合做低代码,给什么用户使用
- 低代码最适合的场景是不是no-code?
- 怎么界定低代码和无代码的边界
- 你做的低代码平台能实现的最复杂的一个场景是什么样的
- 为什么json要转化为手写代码
- 转化成手写代码是什么样的
- 源码解析器是什么
- 开发低代码的背景
- 整个项目的周期有多长
- 从酷家乐离职之后主要在写书吗?
- 用户操作记录回溯工具是为了解决什么问题
- 用户记录回溯工具有达到目的吗
- 主管有没有说被裁的原因
最后是反问环节。面试时长 1 个小时左右。
总结
面试被问到的重点问题如下:
- 为什么被裁
- 被裁之后在干什么
- 低代码项目的迭代安排和人员安排
- 市面上的已有低代码方案
需要改进的点:
- 为了迫使自己在对方问问题之后思考问题,重复一下问题里的关键字。比如,当对方问为什么 React使用 setState() 修改状态,而不是直接给 this.state 赋值去修改?重复一遍面试官的话,如果面试官说的话很长,那就提炼出关键字后重复一遍。
- 当某个方案有多个原因时,先回答1,2,3,再逐条分析。比如为什么 React 要封装合成事件?为什么要将低代码 json 转成手写代码?为了让自己回答问题更专注,使用手指头记录自己说到了第几点。(结构化)
写在后面
曾经我在公司落地的低代码,大概存在以下5个问题:
- 搭建完成的应用无法独立部署
- 无渲染沙箱,当处于编辑态时,画布无纯净的运行环境
- 无组件市场,低代码设计器能使用的组件全部写死在项目内
- 用来描述低代码应用的Schema无版本管理,无法查看以前保存的版本。
- 开发人员无法对搭建完成的应用二次开发。
《低代码平台开发实践:基于React》解决了上述 5 个问题,还涉及业务场景的需求分析,从开发技术层面来讲,读者将了解到下面这5个方面的内容:
1)JSON Schema 保存到 Git 仓库中,它不影响线上运行的低代码应用,只用于 APP 各版本的预览和重新编辑。
2)线上运行的应用与 JSON Schema 脱钩,即便低代码平台停止服务,线上的 APP 依然能正常运行。
3)引入渲染沙箱,设计器和渲染器位于不同的 Frame,此时画布拥有纯净的运行环境。
4)设计组件规范,开发脚手架,其用于开发、调试和上传低代码组件,这使设计器能使用丰富的组件去开发应用,同时让低代码组件和低代码平台解耦。
5)开发低代码平台所需的基础设施,包括 GitLab CI/CD、npm 私有库,LDAP 账号管理系统等。
《低代码平台开发实践:基于React》由 4 大部分组成,其中第 3 部分介绍开发低代码平台涉及的各个方面,这部分难度最大。如果你是一名经验丰富的软件工程师并且对低代码已有了解,建议从第 4 章开始阅读;如果你对低代码了解得不多,请一定从第 1 章的基础理论知识开始学习。
第一部分是基础篇,只包含一章,它介绍后续章节使用的理论知识,涉及的知识点有 React Context API、React Hooks、React Ref、Mobx 和 MongoDB 等,要想在本地电脑运行本图书介绍的低代码平台,你需要在自己电脑上下载 MongoDB。
第二部分为需求分析篇,包含两章,它介绍低代码平台开发的应用要满足哪些需求,同时也介绍低代码平台的功能。
第三部分为实战篇,包含五章,是本图书的重点,介绍如何开发低代码平台,其中展示了大量的代码示例,涉及的内容有低代码架构策略、低代码组件、设计器、渲染器和代码生成器。
第四部分为基础设施篇,只包含一章。低代码平台用于创建应用程序,它本身也是应用程序,值得一提的是,它对研发体系的要求相当高。如果你手上没有一套完善的研发体系,涵盖代码托管、CI/CD、CDN,npm私有库等部分,那么妄谈开发低代码平台。基础设施篇涉及的内容有,如何使用 GitLab CI/CD 建立持续部署 pipeline、如何搭建 npm 私有库,如何搭建 LDAP 账号管理系统等。
《低代码平台开发实践:基于React》提供了 7 个开源项目,全部源文件可以从github.com/react-low-c...下载。