猿辅导前端 一面面经

1.前端学习路线

2.JS单线程模型

3.为啥script脚本运行时间长会导致页面白屏

4.怎么解决白屏时间过长问题

5.想多线程,怎么做

6. webworker的任务和主线程能执行的任务

一样吗

7.两个线程如何通信

8.js引擎如何做内存管理和垃圾回收

9.如何观测浏览器中的内存管理过程

10.AI前端开发工程师相比于普通前端开发工

程师有哪些不一样的特质

11. 了解nodejs吗

面试官坐在一个很像杂物间的地方面试,旁边的货架子真的很难不让我注意到

手撕了一道算法,跟链表相关的,牛客面试系统竟然不能new ListNode里面写指向的链表头,怪越来越觉得面试要看缘分

有的面试官很愿意给反馈,不管回答案的对不对,多还是少,够不够深入,都能得到回应,面试的时候也有更多交流感,而不是单纯的一问一答

但有的面试官好像机器人,整个面试流程都是问题,回答,问题,回答。给我一种没有任何情绪波动使个假人的咸觉

全部评论

相关推荐

1.浏览器从输入url到页面渲染的过程2.浏览器做了哪些工作解析HTML最终形成页面展示(渲染过程)3.对js的解析是解析什么内容4.就是假设我们已经解析完了,不管它是解析什么内容,那解析完之后的话,它其实会有一个事件循环的机制,介绍一下js的事件循环机制5.事件循环在nodejs和浏览器的区别- 宏任务:浏览器是 “单队列”,Node.js 是 “多阶段队列”(按 timers → poll → check 等顺序执行);- 微任务:Node.js 比浏览器多一个 nextTick 队列,且优先级最高;- 执行节奏:浏览器是 “1 个宏任务 → 所有微任务”- Node.js 是 “1 个阶段的宏任务 → nextTick → 其他微任务 → 下一阶段”。6.vue3的vue2响应式的话有哪些区别7.vue3实现一个自定义的响应式的数据应该怎么实现日常开发优先用 Vue 内置的 reactive/ref,兼容性和功能更完善8.对于引用类型和基础类型的ref 实现上有什么区别基础类型通过包装对象实现响应式,引用类型则借助 reactive 转换为代理对象,两者最终都通过 .value 访问,但内部处理机制不同。基础类型(如 number、string)会被包装成含 value 属性的对象,ref 直接对这个 value 属性用 Proxy 拦截 get/set,确保修改时触发响应。引用类型(如对象、数组)传入 ref 后,会先被 reactive 转为响应式代理对象,此时 ref 的 value 指向这个代理对象,修改属性时实际触发的是 reactive 的响应逻辑。9.vite的热更新为什么比webpack快10.vite是怎么支持解析所有文件的为什么11.性能优化的方式,首屏加载优化- 资源层面,优先压缩和拆分资源,如用 Vite/Webpack 拆分代码(Code Splitting),大文件分片加载;- 图片懒加载非首屏图片- 通过 CDN 分发静态资源- 代码层面,路由懒加载(如 React.lazy、Vue 异步组件),移除未使用代码(Tree Shaking),避免大型库全量引入(如用 lodash-es 按需导入)- 缓存层面,设置 HTTP 缓存(强缓存 Cache-Control,协商缓存 ETag),利用 Service Worker 缓存关键资源12.大文件进行分片加载是如何实现的?首先前端获取文件总大小,按固定尺寸(如 1MB)计算分片数量;然后通过 HTTP Range 请求头,每次请求一个分片(如Range: bytes=0-1048575);服务端根据 Range 返回对应片段;前端接收所有分片后,用 Blob 或 ArrayBuffer 合并成完整文件。实际开发中,可结合 Promise.all 控制并发数,避免请求过多阻塞;用 localStorage 记录已下载分片,支持断点续传。例如视频网站加载大视频时,会按时间分片,用户观看时只加载当前需要的片段,既节省带宽也提升加载速度。13.强缓存的,就是说要用强缓存。那你如果强化了之后,那你怎么更新呢?就比如我发了个紧急的 V3版本,你是当前可能强化才能 V1,那我怎么更新到 V3给静态资源(JS/CSS/ 图片等)添加版本标识,如在文件名后加哈希值(app.8f3d2.js)或版本号(app.v3.js)。构建工具(Webpack/Vite)可自动生成哈希,哈希值随文件内容变化而变。当发布 V3 版本时,修改的资源会生成新哈希文件名,浏览器请求时发现是新路径,不命中强缓存,会从服务器拉取最新文件;未修改的资源因哈希不变,仍可利用缓存,兼顾性能与更新。14.标识是在哪里做的?构建工具(如 Webpack、Vite)会在打包时,根据文件内容生成唯一哈希值(如 MD5),并添加到文件名中(如index.abc123.js)。这一步由构建工具的配置实现,比如 Webpack 的contenthash、Vite 的rollupOptions.output.assetFileNames。同时,HTML 文件作为入口,引用这些带哈希的资源路径(如<script src="index.abc123.js">)。当文件内容更新,哈希值变化,HTML 中引用的路径也会更新,浏览器会识别为新资源,触发重新请求。15.那如何要设置html的强缓存,如何做到强制更新?1. 配置html的强缓存响应头(catche-control、expires)2. 叠加协商缓存(ETag、Last-Modified)(强缓存过期后,浏览器会主动请求服务器。此时需通过「协商缓存」让服务器判断 HTML 是否有更新:若未更新,返回304 Not Modified,浏览器继续用缓存;若已更新,返回200 OK和新 HTML。)3. 若发布紧急版本(如从 V1 更到 V3),即使强缓存没过期,也需让浏览器立刻放弃旧缓存、请求新 HTML。关键是让浏览器认为 “新 HTML 是一个完全不同的资源”,具体有两种落地方式:方式 1:给 HTML 文件名加版本 / 哈希(推荐,无兼容问题)直接修改 HTML 的文件名,在发布新版本时添加版本号或哈希,例如:- 旧版本:index.html → 新版本:index.v3.html- 同时,需修改服务器的 “默认访问路径”:用户访问https://xxx.com/时,服务器默认返回index.v3.html(而非旧的index.html)。原理:浏览器缓存是按 “资源 URL” 存储的,index.html和index.v3.html是两个不同的 URL,即使旧的index.html还在强缓存时效内,浏览器访问新 URL 时也会直接请求服务器,获取最新 HTML。方式 2:给 HTML 路径加查询参数(简单,但需注意服务器配置)不修改文件名,而是在 HTML 的访问路径后加版本参数,例如:- 旧版本:https://xxx.com/index.html → 新版本:https://xxx.com/index.html?v=316.RAG(检索增强生成)到底是什么东西,工作原理怎么样17.为什么要做向量化的过程18.RAG减少的原因是什么,还有什么方式可以减少幻觉19.就是你是如何去了解一个全新的一个技术领域的,就是你是怎么去做对应的一个学习的?有没有一些学习的方法论可以分享一下20.分享一下Mi-BRAG21.手撕:要实现支持并发限制和先进先出(FIFO)的异步任务调度器class TaskScheduler {constructor(concurrency) { }addTask(task) { }runTasks() { }22.追问:task返回什么类型任务执行失败了上面功能能执行么,promise如何处理失败,但是不阻塞队列->finally()catch的时候,能否将其重新加入队列重试📍面试公司:字节跳动-今日头条💻面试岗位:前端开发
查看24道真题和解析
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务