2026-10-19 14:28:06
面试体验:面试过程非常愉快,面试官请假在家仍坚持进行面试,语气亲切,像与舍友交流一样,引导性强,使面试者能够放松并充分展示自己。
面试问题:
实验室门户网站的主要功能:
简要介绍了实验室门户网站的主要功能,如用户管理、项目管理、资源分享等。
JS资源重加载的实现:
通过修改资源的版本号或时间戳来避免浏览器缓存,实现资源重加载。
首屏加载优化及手段:
压缩图片、代码;
使用CDN加速;
异步加载非关键资源;
合并和压缩CSS、JS文件。
栈、队列、链表、二叉树的特点:
栈:后进先出(LIFO),适用于深度优先搜索。
队列:先进先出(FIFO),适用于广度优先搜索。
链表:动态数据结构,节点通过指针相连。
二叉树:每个节点最多有两个子节点,左子节点小于父节点,右子节点大于父节点。
平衡二叉树的目的:
保持二叉树的高度平衡,提高搜索效率。
优先队列的实现:
使用堆(如二叉堆)实现,堆顶元素为优先级最高的元素。
链表是否有环的判断:
使用快慢指针,快指针每次移动两步,慢指针每次移动一步,若相遇则存在环。
TCP和UDP的区别:
TCP:面向连接,可靠传输,速度慢,适用于需要可靠传输的场景。
UDP:面向无连接,不可靠传输,速度快,适用于实时性要求高的场景。
HTTP2.0与1.1的区别:
HTTP2.0支持多路复用,头部压缩,二进制传输,提高了传输效率。
服务端推送:
如HTTP/2的Server Push,可以主动向客户端推送资源,减少请求次数。
局域网实现原理:
通过交换机或路由器连接设备,设备间通过IP地址和MAC地址进行通信。
Vue生命周期:
包括创建、挂载、更新、销毁等阶段,每个阶段有对应的钩子函数。
Vue循环中添加key的原因:
提高渲染效率,避免不必要的DOM操作。
key变化及props变化的影响:
key变化:导致组件重新创建。
props变化:触发组件更新。
JS异步操作:
包括回调函数、Promise、async/await等。
宏任务与微任务队列:
宏任务:setTimeout、setInterval、I/O操作等。
微任务:Promise.then、MutationObserver等。
盒模型:
包括内容、内边距、边框、外边距,分为标准盒模型和IE盒模型。
CSS实现两边固定宽度,中间撑满:
使用浮动、flex布局、grid布局等方法。
CSS选择器优先级:
内联样式 > ID选择器 > 类选择器 > 标签选择器。
语义化标签:
如、、等,提高代码可读性和SEO效果。
Web存储:
包括localStorage、sessionStorage、cookie等。
cookie与localStorage的区别:
cookie:存储在客户端,有大小限制,随HTTP请求发送,用于会话管理。
localStorage:存储在客户端,无大小限制,不随HTTP请求发送,用于持久化存储。
扫码登录实现:
通过生成二维码,用户扫码后服务器验证并返回登录状态。
数组最大子集(首位相接):
使用动态规划或哈希表解决。
面试体验:面试官态度友好,面试过程舒适,面试时间较短,但内容充实。
面试问题:
喜欢使用Vue的原因:
简单易用,组件化开发,数据驱动视图。
ES6新特性:
包括let/const、箭头函数、模板字符串、解构赋值、Promise等。
箭头函数与call方法:
箭头函数没有自己的this,不能作为构造函数,不能使用call、apply、bind方法。
实现promise.all:
接收一个Promise数组,当所有Promise都成功时返回成功结果,有任何一个失败则返回失败结果。
了解其他框架:
如React、Angular等,简要比较与Vue的异同。
var的使用:
在ES6之前使用较多,但存在变量提升和块级作用域问题,现在推荐使用let/const。
项目中的按需加载、懒加载、异步加载:
使用Webpack的code splitting、动态import等方法实现。
路由懒加载打包后的样子:
Webpack会将路由对应的组件打包成单独的chunk,按需加载。
import()函数:
动态导入模块,返回Promise对象。
调试方法:
使用console.log、debugger、浏览器的开发者工具等。
打断点:
在代码行号处点击或使用开发者工具的“Sources”面板。
火焰图:
用于性能分析,展示函数调用关系和耗时。
原型与类的关系:
JavaScript中没有传统的类,但可以通过原型链实现继承。
原型与原型对象:
每个函数都有一个prototype属性,指向一个原型对象;每个对象都有一个__proto__属性,指向其构造函数的原型对象。
面试体验:面试过程包括八股文、coding和闲聊,编辑器出现问题导致coding部分体验不佳。
面试问题:
箭头函数与普通函数的区别:
箭头函数没有自己的this、arguments、super、new.target,不能作为构造函数,没有prototype属性。
DOM与BOM:
DOM:文档对象模型,用于操作HTML和CSS。
BOM:浏览器对象模型,用于操作浏览器窗口。
DOM渲染到页面的过程:
解析HTML生成DOM树,解析CSS生成CSSOM树,合并DOM树和CSSOM树生成渲染树,布局渲染树,绘制到屏幕上。
DOM结构:
DOM树是树形结构,但不是二叉树,因为每个节点可以有多个子节点。
计算机网络七层模型:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
盒模型:
同上。
Node中间件:
如Express的中间件,用于处理HTTP请求和响应,可以执行代码、修改请求和响应对象、调用下一个中间件等。
浏览器缓存与cookie:
浏览器缓存用于存储静态资源,提高加载速度;cookie用于会话管理,可以存储少量数据。
Vue双向数据绑定原理及map、splice的响应性:
通过Object.defineProperty或Proxy实现数据劫持,当数据变化时触发视图更新;对于map和splice等数组方法,需要手动实现响应性。
HTTP与HTTPS的区别:
HTTP:明文传输,不安全;HTTPS:加密传输,安全。
coding题1:
将数组中相同的id对象分类。
coding题2:
创建一个Vue组件,包含100个div,每排三个,颜色红绿蓝交替,点击时偶数下标元素变黄。
注意:在快手面试中遇到的编辑器问题,建议面试前提前测试好环境,确保编码过程顺利。同时,对于面试官提出的疑问,要耐心解释,确保沟通顺畅。