前言:当时刚写完简历,还没开始正式投,刚好有学校师姐的内推,就想着试一试,基本上全是八股拷打,算是第一份凉经了哈哈哈哈,虽然面试得很差但是面试完很兴奋!面试官挺好的不懂的他还会给我解释!
- MVVM框架的响应式原理
- 核心是数据与视图的自动同步:当数据变化时,视图自动更新;视图操作(如输入)也会自动同步到数据。
- 通过数据劫持(如 Object.defineProperty 或 Proxy )监听数据变化,结合依赖收集,在数据变动时触发视图更新逻辑。
- MVVM如何监听数据的变化更新视图
- 数据劫持:拦截数据的读取和修改操作(如 get 时收集依赖, set 时通知更新)。
- 依赖收集:记录哪些视图节点依赖该数据(即“Watcher”)。
- 通知更新:数据变化时,触发依赖的视图节点重新渲染。
- 数据劫持具体是怎么劫持 它对基础数据类型和引用数据类型有哪些不一样的操作吗
- 基础数据类型(number、string等):直接劫持其 get 和 set ,修改时可直接触发更新。
- 引用数据类型(object、array):
- 对象:劫持每个属性的 get / set ,新增属性需手动触发(如Vue的 $set )。
- 数组:重写数组原型方法(如 push 、 splice ),通过方法修改时触发更新,直接修改索引(如 arr[0] = 1 )无法监听。
- 数据更新完虚拟节点怎么更新,对DOM对应修改
- 数据变化触发虚拟DOM(VNode)重新生成,与旧VNode对比(diff算法),找出差异。
- 只将差异部分转换为真实DOM操作,最小化DOM修改(如新增、删除、移动节点),提升性能。
- 输入url地址,浏览器怎么处理url地址
- 解析URL:拆分协议、域名、路径等。
- DNS解析:将域名转换为IP地址。
- 建立连接:通过TCP三次握手与服务器建立连接(HTTPS还需TLS握手)。
- 发送请求:通过HTTP/HTTPS协议发送请求报文。
- 接收响应:服务器返回数据,浏览器解析并渲染页面。
- 接着上面那个问题,数据加载前经历了什么
- DNS解析 → TCP三次握手(HTTPS加TLS握手) → 发送HTTP请求(包含请求头、方法、路径等) → 服务器处理请求(路由匹配、业务逻辑) → 服务器返回响应数据。
- 发布订阅模式设计模型
- 包含三个角色:发布者、订阅者、事件中心。
- 流程:订阅者向事件中心注册事件及回调;发布者触发事件时,事件中心通知所有订阅者执行回调。
- 示例:Vue的 emit (发布)。
- 性能优化技术—本地缓存怎么缓存的
- 客户端存储:如 localStorage (持久化,容量较大)、 sessionStorage (会话级,关闭页面失效)。
- 用途:缓存不常变的静态数据(如用户信息、字典表),减少重复请求。
- 浏览器缓存的处理(强缓存和协商缓存)
- 强缓存:浏览器直接从本地缓存读取,不发请求。通过 Expires (绝对时间)或 Cache-Control (如 max-age ,相对时间)控制,过期则失效。
- 协商缓存:缓存过期后,浏览器发送请求带缓存标识(如 Last-Modified / If-Modified-Since 、 Etag / If-None-Match ),服务器判断是否需返回新数据,未修改则返回304,继续用缓存。
- ts中的type和interface有什么区别
- 相同点:都可定义类型结构。
- 不同点:
- interface 可多次声明合并, type 不行。
- type 可定义基本类型别名、联合类型、交叉类型等, interface 不行。
- 类可实现 interface ,但不能实现 type (除非 type 是对象类型)。
- token无感登录(Acees token和refresh token)
- Access Token:短期有效,用于接口鉴权,过期快以减少风险。
- Refresh Token:长期有效,Access Token过期时,用它请求新的Access Token,避免用户重新登录。
- 流程:登录后获取两者,Access Token过期时,自动用Refresh Token刷新,实现“无感”。
- token什么形式存在的,怎么知道token不是伪造的
- 存在形式:通常是字符串,放在请求头( Authorization: Bearer )、Cookie或请求参数中。
- 防伪造:Token由服务器用密钥签名(如JWT的HS256算法),客户端无法伪造;服务器接收后验证签名,不一致则视为伪造。
- 操作系统——硬盘管理
- 分区管理:将硬盘划分为多个逻辑分区(如NTFS、EXT格式),便于管理。
- 文件系统:负责文件的存储、组织(如树形结构)、读写控制。
- 空间分配:采用连续分配、链接分配或索引分配等方式,高效利用硬盘空间。
- 浏览器内存回收
- 自动回收:通过垃圾回收机制(如V8的标记-清除、分代回收)。
- 回收对象:不再被引用的变量、DOM节点等。
- 优化:避免内存泄漏(如未清除的事件监听、全局变量滥用)。
- 算法策略(LRU)
- LRU(最近最少使用):一种缓存淘汰策略,当缓存满时,优先淘汰最久未被使用的内容。
- 应用:浏览器缓存、Redis缓存等,提升热点数据访问效率。
- canvas闪屏怎么解决
- 双缓冲技术:先在内存中绘制,完成后一次性渲染到Canvas,避免逐帧绘制的闪烁。
- 减少重绘频率:合并绘制操作,避免频繁清空画布( clearRect )。
- 优化绘制逻辑:避免不必要的绘制步骤。
- 事件循环机制(4道题目) 哎呦,我不知道要保存下来,面试完就忘记了