腾讯音乐暑期一面
自我介绍并讲一下为什么选择前端。
参考『根据个人实际情况和技术发展』
面试官您好,我叫 xxx,目前是 xxx 大学 xxx 专业的在读大三生。在校期间,我系统地学习过操作系统、计算机网络知识以及 Web 前端开发。我对前端也很热爱,因此选择前端作为我的本科就业方向。我在熟悉马车三件套的基础上,学习了 Vue 和 React 等主流框架,也对 Webpack/Vite 等构建工具和工程化有所认知。业余时间内,我也做过一些简单的项目或者 Demo,我选择其中 x 个体现在了简历上,一个是 xxx,另一个是 xxx。当然我也在关心前端新技术和周边生态,上手过一些跨端框架。最后,对于事件循环、异步编程、渲染管线以及源码等底层机理我也有相应的知识储备。
前端,是人机交互的一种方式。目前 AI 势头正大,身边人也不乏选择 AI、算法等方向,但在我看来,人机交互的方式在未来很长一段时间内都不会被取代。选择前端以后,我能更好地接触到用户,也能更好地理解用户的需求,从而更好地设计产品。另外,有一种互联网说法管前端叫切图仔,但事实上,前端的广度和深度并不如人们想象的浅显,跨端开发、跨平台开发、性能与安全以及各种新兴框架和技术等,都是前端工程师未来可能接触的。最后,前端因为生态大爆炸,目前没有形成最佳实践,包括尤雨溪也正在贡献 Void 0,前端的未来是非常广阔的。
看你的低代码平台项目用到了部署,你是怎么部署的?
手动部署和自动部署有什么区别?
如何让自动部署和你的钩子交互,你需要那些手动操作?
讲一讲对 JavaScript 的理解。
参考
JavaScript 是网景公司推出的一门语言,刚开始叫 LiveScript。JavaScript 发展到现在主要分为三部分:ECMAScript、DOM、BOM。ECMAScript 是 JavaScript 的核心,DOM 是文档对象模型,BOM 是浏览器对象模型。
我们接触的编程语言分为解释型语言和编译型语言,解释型语言的特点是边解释边执行,编译型语言的特点是编译成二进制文件再执行。JavaScript 是一门解释型语言,但是它有编译器,编译器在运行时将 JavaScript 代码编译成字节码,然后由解释器解释执行。JavaScript 的解释器是 V8,V8 是由 Google 开发的,它将 JavaScript 代码编译成机器码,然后由 CPU 执行。V8 的编译器是即时编译器(JIT),它会在运行时将热点代码编译成机器码,从而提高代码执行效率。
和其它语言一样,JS 中有变量、条件、循环等基本概念,值得一提的是函数在 JS 这门动态类型语言中是一等公民,因此这也造就它起初没有面向对象这个概念。而快速发明也埋下一些历史遗留问题,比如 typeof null 返回 object。但是随着 ES 每年推陈出新,各种新特性也涌入开发过程,比如 Promise、集合操作、可选链等。
另外,让我觉得很有设计感的一点是,JS 不像 Java 等有多线程的概念,但是它有事件循环,所以它有异步编程的概念。起初,我们需要使用回调函数,但是回调函数会带来回调地狱的问题,所以 ES6 引入了 Promise,Promise 通过链式调用解决了回调地狱的问题。但是 Promise 也有缺点,比如无法取消 Promise。所以后来的 ES 版本引入了 async/await/AbortController 等新概念,帮助开发人员更好地掌控异步编程。
现代开发中,JS 已经不单单用于前端了,现在也涌现了各种新的运行时。比如 NodeJS,这是一个基于 V8 的 JavaScript 运行时,这是广为人知的。近几年,也出现了一些新的运行时,Deno 构建在 JavaScript 的 V8 引擎和 Rust 的 Tokio 之上,Bun 是 Rust 编写的 JavaScript 运行时,它使用 WebAssembly 来运行 JavaScript 代码。而这些技术,可以帮助我们涉足后端。
前端人员如何做浏览器的兼容?
有没有深入学习过网络?如何学习的网络?
在前端你觉得哪里会用到网络知识?
讲一讲跨域问题以及常用的解决办法。
看你用过 Webpack/Vite,挑一个讲一讲背景和作用。
工程化有没有了解过 AMD/CMD?
讲一讲括号匹配问题怎么解决。
作为大三的学生,你业余时间怎么安排?
说一说你未来的路线和规划。
「反问」聊到部署,在部门内部需要前端负责部署嘛?
「反问」部门内部技术栈是什么?
「反问」对学习路线和规划的个人建议。
面试感受
腾讯音乐面试略微轻松,不过有些问题面试结束后感觉自己答得不够多,典型的嘴比脑子快。
所以面试的时候大家要预留一些思考时间再回答。
整体来说能感受到有超出面试官预料,11:30 结束一面,15:25 收到复试通知。