# 一、前言
当时投这家公司的时候其实还没咋了解,以为是和腾讯官网校招地位一样的,后来了解了一下,实际上就是腾讯降本增效的产物,干的是本部差不多的活,但是待遇啥的比本部要低。 因此也更好进 。
面试官是女的,感觉面试过程中心不在焉,收获也相对比较少。
这边一面比较顺利的就通过了,不过目前由于已经蔚来 OC 了,因此就不进行下一轮面试了。
# 二、题目列表
-
自我介绍 + 项目介绍。项目介绍讲的是我去年暑假字节青训营带队参与并且最终拿了个小奖的项目,比较详细的向我追问了一些关于 Swagger 文档导入功能的前后端对接解析流程,以及数据库是怎么保存这些 API 接口数据的。之后问了我一些关于这个项目的权限架构设计(RBAC)是怎么实现的。
-
问我 node.js 我觉得比较好用的点,或者是相较于其他传统后端开发有什么特别的优势。
我当时按照我的开发经验,讲了一些我自认为的优点。
-
单线程、非阻塞 I/O 模型:Node.js 采用单线程事件循环机制,使得它在处理高并发请求时表现出色。通过非阻塞 I/O,它可以在等待 I/O 操作完成时执行其他任务,提高了系统的整体吞吐量和性能。
-
JavaScript 全栈开发:Node.js 使得前后端都可以使用 JavaScript 来进行开发,这种一致性的开发环境简化了开发人员的学习成本和工作流程,提高了开发效率。
-
生态系统丰富:Node.js 拥有庞大的开源生态系统,有丰富的模块和库可供使用,开发人员可以轻松地找到适合自己需求的解决方案,加速开发过程。
-
轻量和灵活性:相较于传统的后端框架,Node.js 是轻量级的,它的模块化设计和灵活性使得开发人员可以根据项目需求自由选择和定制功能,更好地满足特定业务场景的要求。
-
社区支持和更新迭代:Node.js 拥有一个庞大的开发者社区,持续不断地为其提供更新和改进,使得它在技术上始终保持活跃,并能够及时响应新的技术挑战和需求。
-
-
你觉得 JavaScript/TypeScript 的缺点是什么呢?它们不适用于哪些项目呢?
缺点:
-
动态类型:JavaScript/TypeScript 是一种动态类型语言,这意味着在编译时无法捕获所有类型错误,导致在运行时可能出现一些难以调试的问题。
-
异步编程模型:虽然异步编程是 JavaScript/TypeScript 的优势之一,但对于初学者来说,理解和处理异步代码可能会比较困难,容易导致回调地狱 (callback hell) 和代码可读性降低的问题。
-
浏览器兼容性:虽然浏览器对 JavaScript 的支持日趋完善,但仍然存在一些浏览器之间的兼容性问题,需要开发人员花费额外的时间和精力来解决。
-
性能限制:相较于一些静态类型语言,JavaScript/TypeScript 在某些场景下可能存在性能上的限制,特别是在处理大量数据或执行复杂计算时。
-
生态系统碎片化:JavaScript/TypeScript 生态系统庞大而丰富,但也相对碎片化,存在大量的第三方库和框架,开发人员需要花费时间来选择和学习合适的工具。
不适用于:
-
对性能要求极高的项目:如果项目需要处理大规模数据或执行高性能计算,可能会更适合使用静态类型语言,如 C++ 或 Go 等。
-
需要严格类型检查的项目:对于对类型安全性要求非常高的项目,JavaScript/TypeScript 可能无法满足其需求,因为它们是动态类型语言,类型检查发生在运行时而非编译时。
-
对浏览器兼容性要求极高的项目:如果项目需要在各种老旧浏览器中保持良好的兼容性,JavaScript/TypeScript 可能会遇到一些挑战,需要额外的兼容性处理和测试工作。
-
-
你刚刚一直讲到 pm2 ,那你知道 pm2 它运行和守护进程的原理是什么吗?
-
守护进程:PM2 利用 Node.js 的 child_process 模块创建一个守护进程,该守护进程负责监控和管理所有 Node.js 应用程序的运行状态。它会周期性地轮询已启动的应用程序,检查它们的运行状态,并根据需要采取相应的措施,如启动、停止或重启应用程序。
-
进程管理:PM2 通过调用 Node.js 的 child_process 模块创建子进程来启动 Node.js 应用程序。每个应用程序都会被启动为一个单独的子进程,并且会被分配一个唯一的进程 ID(PID)。
-
信号处理:PM2 通过注册信号处理器来处理系统信号,例如 SIGINT(Ctrl+C)、SIGTERM 等。当接收到这些信号时,PM2 会相应地终止所有正在运行的应用程序,并进行清理工作,以确保应用程序的正常退出。
-
日志管理:PM2 会将应用程序的输出重定向到日志文件中,以便开发人员可以查看和分析应用程序的输出信息。它还提供了日志切割和归档的功能,以避免日志文件过大导致的性能问题。
-
事件驱动:PM2 采用事件驱动的设计模式来管理应用程序的运行状态。它会触发各种事件,如启动、停止、重启、异常等,开发人员可以通过监听这些事件来执行相应的操作,以实现自定义的管理逻辑。
-
-
详细的描述一下你是怎么设计的 Markdown 目录递归组件,并实现的锚点定位。
-
讲一下你是怎么二次封装的 axios ,以及对于
-
讲一下 vite 的原理以及如何对 vite 项目进行打包优化。
-
讲一下你参与的那个开源项目 Create-Neat。
-
讲一下 Vue2 和 Vue3 的区别。
-
讲一下 HTTP 和 WebSocket 的区别。
-
了解过 CDN 缓存吗?你知道为什么要把资源放到 CDN 上去做优化吗?
-
反问阶段。
# 三、后记
题目出得中规中矩,至少没有考我代码题。基本上全程是八股吟唱,比较少的和面试官本身进行交流。因此收获不是特别大。
后续是过了,不过拒了二面,因为 base 武汉,我本人在杭州。