作者分享了一次面试经历,时隔六年重新进入该领域,感谢猎头引荐。面试分为多轮,内容涵盖广泛技术话题。
一面涉及前端基础知识,包括Vue、React和JavaScript的常见问题。具体问题有数组去重,要求将对象a和b视为相同,使用「new Set([a,b])」但需处理对象相等,讨论时间复杂度和优化至O(1)。箭头函数的this绑定时机和可变性,Object.__proto__与Object.prototype.__proto__的区别,浏览器对ESM语法的支持,Promise链式调用,Vue与React的技术选型考量,前端设计模式,图片和组件懒加载实现,虚拟列表的元素复用原理,以及项目场景题。手撕代码部分包括实现加减法计数器、DOM结构逐层输出、用原生代码实现虚拟列表,以及PromiseAll的实现。
【噩梦般的二面】为压力面试,问题快速且深入。涉及项目中为什么使用SSE而非WebSocket或传统轮询,选择Flutter而非Uniapp的原因,Flutter性能优势,如何查看Flutter Widget信息,Get插件的底层原理和MVVM管理,以往项目中使用Node的原因,Flutter混入小程序项目及网络更新方法,Uniapp混入小程序和网络更新实现,以及硬件项目中蓝牙模块UID重复问题的解决。
三面较为轻松,主要考察Node和AI编程。问题包括是否了解Vibe Code,使用AI辅助编程工具的经历和遇到的问题,Nodejs单进程高并发实现原理,JavaScript V8垃圾回收机制,CORS Option字段的作用,TCP队头堵塞问题,UDP的使用和优势,如何使用Nest做微服务,搭建Nest完整项目框架的方法,业务接口拆分策略,简历中从MySQL切换到MongoDB的原因,以及选择全栈开发的理由。
四面讨论薪资、岗位评级和公司福利等非技术性话题。
最后,作者因数据库方面表现不佳,面试岗位从P6下调至P5,但对此结果满意,目前正在等待HC结果。