滴滴前端实习面经

183 阅读4分钟

前言:当时刚写完简历,还没开始正式投,刚好有学校师姐的内推,就想着试一试,基本上全是八股拷打,算是第一份凉经了哈哈哈哈,虽然面试得很差但是面试完很兴奋!面试官挺好的不懂的他还会给我解释!

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