分页解析
第 10 页面试题
筛选题目 公司、岗位、知识点
公司
公司岗位
岗位
标签
箭头函数和普通函数有什么区别?
箭头函数是 ES6 引入的一种更简洁的函数写法,但它不只是语法糖。它最大的特点是没有自己的 this、arguments、super 和 new.target,其中 this 会按词法作用域从外层函数或模块环境中捕获,因此特别适合回调、数组方法和需要保留外层 this 的场景;但它不能作为构造函数,也没有 prototype,不适合对象方法、原型方法、构造器、事件处理器中依赖动态 this 的场景。
前端从 Ajax、Node.js 到数据驱动之后,下一阶段趋势是什么?
这是一道开放型趋势判断题,重点不是猜中唯一答案,而是能把前端发展的主线讲清楚:Ajax 让页面具备局部数据交互能力,Node 把前端从浏览器内扩展到工程化、构建、SSR 和 BFF,数据驱动让 UI 开发进入组件化、声明式和状态管理阶段。下一个阶段更可能不是单点技术,而是智能化、全栈边缘化、跨端运行时、设计工程协同、性能与可观测性等方向的融合。
ES6的新特性有什么?
ES6 是 JavaScript 现代化的关键版本,核心价值不是新增若干语法糖,而是系统性解决了旧版 JavaScript 在变量作用域、异步流程、模块组织、数据结构、面向对象表达、可迭代协议和元编程能力上的工程问题。面试回答应从语法特性切入,再说明它们分别改善了可读性、可维护性、作用域安全、异步可控性、模块边界和复杂数据建模能力。
JavaScript 中 sleep 函数如何实现?
这道题考察的不是让 JavaScript 真正暂停线程,而是如何用异步机制表达“等待一段时间后继续执行”。高质量回答应说明 Promise 配合 setTimeout 的非阻塞实现、async/await 的调用方式、事件循环中宏任务与微任务的执行顺序,以及为什么忙等会卡死主线程。
如何在大文件中找出出现频率最高的前100个内容?
大文件中找出现频率最高的前 100 个内容,本质是大数据 TopK 频次统计:先统计每个内容出现次数,再从频次结果中选 Top100。答案要根据内存是否能容纳全部去重内容,选择 HashMap 计数、小根堆、哈希切分、外部排序、分布式聚合或流式近似算法。
v-model的原理?
v-model 本质上是 Vue 提供的双向绑定语法糖,它把数据到视图的绑定和视图到数据的事件更新组合起来。理解它不能只停留在自动同步四个字上,还要能区分原生表单元素、组件封装、Vue2 与 Vue3 约定、修饰符处理、多 v-model 以及响应式更新链路。
浏览器输入 URL 到页面渲染经历哪些步骤?
这道题考察的是浏览器导航生命周期的完整理解,不只是背诵 DNS、TCP、HTTP、渲染几个名词,而是要把输入 URL 后的导航调度、缓存命中、Service Worker、网络连接复用、服务端响应、HTML 增量解析、资源优先级、JS 阻塞、渲染流水线和性能指标串成一条因果链。优秀答案应体现浏览器、网络协议、前端性能和运行时机制之间的关系。
同公司岗位有 2 条面经记录
如果将列表的index设置为key会有什么问题?
把列表的 index 当作 key,最大问题不是性能差一点,而是把位置误当成了数据身份。当列表发生插入、删除、排序、过滤时,同一个 index 会指向不同数据,框架会错误复用组件实例和 DOM 节点,导致本地 state、输入值、动画状态、缓存结果和副作用都可能跟真实数据错位。
字符串"dadsa,adsadsad,dasdas,aaa"按逗号分割,怎样性能最高?
JavaScript 字符串按逗号分割时,普通业务场景下最合适的答案通常是 String.prototype.split(',')。它语义清晰、原生优化成熟、复杂度已经是线性;只有在超大数据、热点循环、严格内存控制并经过基准验证时,才考虑 indexOf 或 charCodeAt 手写扫描。
vue2是怎么进行数组的方法重写的?
Vue2 对数组响应式的核心不是给每个下标都做 Object.defineProperty,而是创建一个继承自 Array.prototype 的 arrayMethods,重写 push、pop、shift、unshift、splice、sort、reverse 这 7 个会改变数组自身的方法。数组被 observe 时会挂上 __ob__,并把当前数组实例的原型指向 arrayMethods;调用被重写的方法后,Vue2 会先执行原生数组操作,再对新增元素 observeArray,最后通过 ob.dep.notify() 通知依赖更新。
说一下position的几个属性 css 有哪些单位?
这道题可以分成两部分回答:先讲 CSS 的 position 定位机制,包括 static、relative、absolute、fixed、sticky 的行为、参照物、是否脱离文档流以及对层叠关系的影响;再讲 CSS 单位体系,包括绝对单位、字体相关相对单位、视口单位、百分比以及时间、角度、分辨率等专用单位。核心不是背属性名,而是说明元素如何确定自己的位置、尺寸如何继承或换算,以及不同单位在响应式布局、可访问性和动画中的使用边界。
react18的事件系统相比于之前有什么变化?
React 18 的事件系统不是一次彻底重写,而是在 React 17 已经完成的 root 级事件委托基础上,进一步和自动批处理、事件优先级、并发渲染调度协同。回答时应先区分 17 和 18 的边界:委托位置从 document 迁移到 root 容器主要发生在 React 17,React 18 更重要的变化是让事件更新进入统一批处理模型,并根据事件优先级影响更新调度。
JavaScript 原型链的查找机制是什么?
JavaScript 原型链的查找机制,本质是对象属性访问时的一套逐级委托规则:先查对象自身属性,找不到再沿对象内部的 [[Prototype]] 指向继续查找,直到找到属性或到达 null 为止。面试中不仅要能说出查找顺序,还要区分 __proto__、构造函数的 prototype、实例对象之间的关系,并理解属性屏蔽、hasOwnProperty、in、class 语法糖这些高频追问点。
let、const 和 var 有什么区别?
这道题考察的不只是三种声明方式的表层语法,而是 JavaScript 变量绑定模型:作用域边界、提升行为、暂时性死区、重复声明、重新赋值、全局对象映射、循环闭包以及 const 对引用值的真实约束。面试中应从执行上下文和词法环境解释差异,再落到工程实践:默认使用 const,需要变更绑定时用 let,尽量避免 var。
React Hooks 的设计约束和原理是什么?
React Hooks 的核心不是给函数组件加几个 API,而是把组件的状态、副作用和复用逻辑从 class 实例模型迁移到 render 快照模型。它解决了 class 中状态逻辑难复用、生命周期拆散同一业务逻辑、this 绑定和高阶组件嵌套等问题,但也引入了稳定调用顺序、依赖数组和闭包快照等严格约束。
Virtual DOM 和真实 DOM 的区别是什么?
Virtual DOM 是用 JavaScript 对 UI 结构和状态结果做的一层描述;真实 DOM 是浏览器直接维护、参与样式计算、布局、绘制、事件和可访问性树等流程的节点对象。二者的关键区别在层级:Virtual DOM 让框架先在 JS 层计算 UI 变化、做 reconciliation 与调度,再把必要变更提交到真实 DOM。
Vue和React在创建组件的时候,说说最应该注意哪三点?
创建 Vue 和 React 组件时最应该注意三点:职责边界是否清晰、数据流与状态归属是否合理、副作用与性能边界是否可控。Vue 和 React 写法不同,但优秀组件都应该低耦合、可组合、可预测、易测试、易维护。
前端首屏性能优化有哪些关键手段?
首屏性能优化不是单点技巧,而是围绕关键渲染路径、资源下载、代码执行、数据返回和用户感知建立一套闭环。面试中要先讲清 FCP、LCP、TTI、INP 等指标口径,再分别说明构建产物、渲染模式、缓存 CDN、图片字体、接口与监控如何共同影响首屏体验。
Promise 的状态流转和 then 链式调用机制是什么?
Promise 的核心不是“异步容器”这么简单,而是一套状态机、回调注册机制、返回值吸收规则和微任务调度规则的组合。面试回答要把 pending 到 fulfilled 或 rejected 的单向迁移、then 返回新 Promise、回调异步执行、值穿透、异常传播、thenable 展开和微任务边界串成完整链路。
浏览器跨域问题如何解决?
跨域问题的本质不是浏览器完全禁止请求发出去,而是同源策略限制脚本读取不同源响应。标准解法优先是服务端正确配置 CORS;工程上还会结合同源反向代理、本地开发代理、JSONP、postMessage、WebSocket 等方案,但它们适用场景和安全边界不同。
协程适合IO密集型还是计算密集型任务?
协程更适合 IO 密集型任务,核心原因是它能在用户态以较低成本挂起和恢复执行流,把等待网络、磁盘、RPC、数据库响应的时间让给其他任务;但协程并不会凭空提升 CPU 算力,计算密集型任务如果持续占满 CPU,仍然需要多线程、多进程、并行计算或任务切分配合调度。
怎么优化网络链接速度?
优化网络连接速度,本质是缩短从用户发起请求到可用响应返回的整条链路耗时。前端不能只盯着资源体积,还要拆开 DNS、TCP/TLS 握手、协议协商、服务器处理、传输拥塞、缓存命中、资源优先级和渲染阻塞等环节。回答应先给出度量口径,再按连接建立、协议升级、缓存复用、资源调度、传输压缩、CDN 边缘化和监控闭环展开。
HTTPS 的握手过程讲一讲?
HTTPS 的握手本质是 HTTP 通信前先通过 TLS 建立安全通道:客户端和服务端先协商 TLS 版本、密码套件和扩展参数,然后服务端用证书证明身份,双方通过密钥协商生成共享的对称会话密钥,再用 Finished 消息确认握手过程没有被篡改。握手完成后,HTTP 数据才通过对称加密、完整性校验和防重放机制进行传输。现代面试答案应以 ECDHE、TLS 1.2 和 TLS 1.3 为主,不能只讲早期 RSA 加密随机数的旧流程。
HTTP协议基于TCP做了哪些封装?
HTTP 并不是简单把数据塞进 TCP 发送,而是在 TCP 提供的可靠、有序、面向字节流的传输能力之上,定义了一整套应用层封装:报文格式、请求响应语义、头部元数据、消息体边界、连接管理、缓存协商、Cookie 状态、代理转发、安全传输以及不同版本的分帧和复用机制。TCP 只负责把字节可靠送达,不理解“请求”“响应”“URL”“状态码”“缓存”“Cookie”,这些都是 HTTP 在应用层补上的语义。
如何分析用户留存和转化漏斗?
分析用户留存和转化漏斗不要只背公式,而要先定义业务目标、用户起点、活跃口径、漏斗步骤和观察窗口,再用 cohort、分群、归因和实验闭环定位问题。留存回答用户是否持续回来,漏斗回答用户在哪一步流失,二者结合才能判断是拉新质量、首日体验、关键价值触达、交易链路还是后续运营策略出了问题。
操作系统的用户态和核心态问题?
用户态和内核态是操作系统用来隔离普通程序与高权限内核代码的两种运行状态,本质目的是保护硬件资源、内核内存和系统整体稳定性。回答时要把权限差异、CPU 特权级、进入内核态的路径、系统调用例子,以及模式切换和上下文切换的区别讲清楚。
竞品分析应该从哪些维度展开?
竞品分析不是罗列功能清单,而是围绕目标用户、核心场景、关键流程、价值主张、商业闭环与长期壁垒,判断一个产品在市场中的相对位置。高质量回答应先界定分析对象和竞品范围,再拆解用户分层、需求强弱、使用路径、功能能力、体验效率、增长渠道、变现模式、数据指标与差异化结论,最终落到产品机会和优先级判断。
用户生命周期应该如何拆解?
用户生命周期不是把用户简单分成新老用户,而是围绕用户从首次接触、完成关键行为、形成使用习惯、产生付费或价值贡献,到可能沉默、流失、被召回的全过程,建立一套可运营、可度量、可迭代的增长框架。好的拆解要同时回答三个问题:用户当前处在哪个阶段、这个阶段的核心阻力是什么、产品和运营应该用什么动作推动用户进入下一阶段。
运营老师最核心的素质和能力应该是什么?
这道题不是在问运营需要会多少工具,而是在考察候选人是否理解运营的本质:围绕业务目标,持续洞察用户、设计策略、推动执行、验证结果,并把经验沉淀成可复用的方法。高质量回答应把核心素质和核心能力分开讲:素质偏底层心智,能力偏可落地动作。
怎么理解精细化运营?
精细化运营不是把动作做得更碎,而是以数据为基础,把不同用户、不同场景、不同生命周期阶段的需求和价值差异识别出来,再匹配差异化触达、权益、内容、产品承接和实验机制,最终提升转化、留存、复购、活跃和用户长期价值。它的核心是从“面向所有人做同一件事”转向“在合适的时机,用合适的方式,给合适的用户提供合适的运营策略”,并通过指标和实验持续迭代。
针对潜在用户群体的挖掘方向,钉钉能为他们提供怎样的方案以及如何运营呢?
这道题的核心不是简单罗列钉钉功能,而是考察能否从用户增长视角拆解企业协同产品:先识别哪些组织或团队存在协同效率、流程管理、跨端沟通、知识沉淀等痛点,再按行业场景、组织规模、角色链路和数字化成熟度做分层,匹配从即时沟通、审批流程、项目协作到低代码流程搭建的解决方案,最后通过触达、激活、留存、扩展和数据复盘形成闭环。
用户运营和产品运营有什么区别?
用户运营和产品运营的核心区别在于:用户运营以人为中心,关注用户分层、生命周期、留存活跃、转化复购和关系维护;产品运营以产品能力为中心,关注功能价值传达、使用路径优化、数据反馈、产品迭代和商业目标达成。两者目标一致,都是提升业务增长,但抓手不同:用户运营更偏用户洞察和精细化触达,产品运营更偏产品机制和场景效率。
产品经理、产品运营、开发的区别是什么?
这道题考察的不是背岗位定义,而是能否理解产品从发现机会到设计方案再到交付增长的分工机制。产品经理主要对问题定义、方案取舍和产品结果负责;产品运营主要对用户触达、场景落地、策略迭代和业务指标转化负责;开发主要对技术实现、系统质量、工程效率和可持续交付负责。
如何从0-1运营一款产品?
从0到1运营一款产品,核心不是简单做拉新或发活动,而是在产品价值尚未被市场验证时,用最小成本找到目标用户、验证核心场景、建立种子用户池、打磨增长闭环,并逐步把一次性的冷启动动作沉淀为可复制的运营机制。回答要体现产品思维、用户思维、数据思维和增长思维。
并发怎么控制?
并发控制的核心不是简单加锁,而是在正确性、吞吐量、延迟和资源保护之间做取舍。高质量回答应先说明控制目标,再识别共享资源和一致性边界,最后按单机内存、线程调度、数据库、分布式协调、入口限流和异步削峰等层次选择手段。
死锁产生的条件和排查方式是什么?
死锁本质上是多个执行单元在持有部分资源的同时继续等待对方释放资源,导致所有相关线程都无法向前推进。面试回答要先讲清四个必要条件,再说明排查时如何从现象、线程状态、锁拥有关系、业务调用链和复现路径逐层定位,最后补充预防策略,例如统一加锁顺序、缩短锁范围、使用超时锁和减少共享可变状态。
进程、线程和协程有什么区别?
这道题本质是在考操作系统并发模型的分层理解:进程是资源隔离和资源分配的基本单位,线程是内核调度和 CPU 执行的基本单位,协程是用户态组织异步流程的轻量执行单元。面试时不能只背“进程重、线程轻、协程更轻”,要讲清地址空间、调度权、上下文切换成本、通信方式,以及在 I/O 密集、高并发服务中的取舍。
同题还出现在 1 个公司岗位
一个游戏场景题,多线程下更新分数排行榜?
这题核心不是选一个线程安全容器就结束,而是把排行榜拆成两个一致性问题:玩家当前分数的唯一真值,以及按分数排序的索引。多线程更新时,必须保证这两个结构的复合更新具备原子性,否则会出现丢分、重复排行项、旧分数残留、TopN 短暂错误等问题。一个成熟答案应先定义分数语义,再给出单机强一致方案,随后讨论 TopN、锁粒度、读写分离、分片、最终一致和测试验证。
TCP 和 UDP 有什么区别?
TCP 和 UDP 的核心区别在于是否提供面向连接、可靠传输、有序交付、流量控制和拥塞控制。TCP 更像一条可靠的字节流通道,适合对完整性和顺序要求高的场景;UDP 更像一次次独立投递的数据报,协议本身不保证到达、不保证顺序,但开销小、时延低、应用层可自由定制可靠性策略。
游戏用 UDP 传输,丢包了怎么办?
UDP 本身不保证可靠、有序和不重复,游戏选择 UDP 是为了把实时性放在第一位,而不是简单地追求不丢包。丢包后的处理要先区分消息类型:位置、朝向、动画等高频状态通常不重传,靠序号、快照、插值、预测和纠偏恢复体验;开火、受击、结算、道具、匹配等关键事件则需要在应用层实现可靠通道,配合 ACK/NACK、选择性重传、冗余或 FEC,在带宽和时延之间做权衡。
讲一下研发流程?
研发流程本质上是把不确定的业务目标,经过需求澄清、方案设计、开发实现、联调验证、测试准入、灰度发布、线上回归和复盘改进,逐步转化为稳定可交付能力的过程。测试开发视角不能只讲测试阶段,而要强调质量左移、自动化保障、风险识别、环境数据建设、发布门禁和线上质量闭环。
哈希冲突怎么解决?
哈希冲突是指不同 key 经过哈希函数计算后落到同一个桶或同一数组位置。回答时不能只背方法名,要先说明冲突不可完全避免,再按数据结构设计思路展开:优化哈希函数、选择冲突处理策略、控制负载因子、必要时扩容,并结合 Java HashMap 的链表转红黑树说明工程实践。
CPU 负载很高但利用率很低,可能是什么原因?
CPU 负载很高但利用率很低,核心原因通常是:load average 统计的是正在运行或等待运行的任务,以及处于不可中断睡眠状态的任务;而 CPU utilization 只反映 CPU 真正在执行用户态、内核态等计算工作的时间占比。因此,很多进程卡在 D 状态、IO wait、磁盘或网络阻塞、锁等待、容器 CPU 配额限制等场景下,系统会表现为 load average 很高,但 CPU 使用率并不高。
针对登录界面设计case?
登录界面测试用例设计不能只停留在用户名密码正确或错误。一个测试开发视角的完整答案,应从业务入口、账号体系、认证链路、安全风控、状态保持、跳转权限、兼容性、性能、可用性、可观测性和自动化回归等维度展开。核心目标是验证用户能正确、安全、稳定地完成登录,同时防止越权、撞库、会话泄露、验证码绕过、弱交互导致误操作,以及高并发下认证服务不可用等问题。
Thread.start() 和 run() 有什么区别?
Thread.start() 的本质是请求 JVM 创建并启动一个新的操作系统线程,使线程对象从 NEW 进入 RUNNABLE,就绪后由调度器安排执行,最终在新线程中回调 run()。run() 本身只是 Thread 类上的普通实例方法,直接调用不会创建新线程,不会改变线程生命周期,只会在当前调用线程里同步执行方法体。
手游一般多少帧率比较合适?
手游合适帧率没有唯一答案,核心判断不是越高越好,而是在游戏类型、目标设备、输入响应、功耗发热和长时间稳定性之间取平衡。轻度休闲、棋牌、放置类游戏稳定 30 FPS 或 45 FPS 往往可以接受;大多数主流手游以稳定 60 FPS 作为推荐目标;射击、竞速、动作、音游等强操作品类可以在高端设备上提供 90 FPS 或 120 FPS,但必须验证温升、电量和帧时间稳定性。
给定数组指针,如何访问第 50 个元素?
这道题考察的是数组下标、指针运算和数组指针类型的边界理解。核心回答应先澄清“第50位”通常指第50个元素,因此数组从 0 开始计数时应访问 arr[49],若给的是首元素指针则写成 *(p + 49)。如果题目说的是下标 50,则对应 arr[50],也就是第 51 个元素。
为什么要做测试?
测试的核心价值不是简单找 bug,而是用系统化方法识别、评估和控制质量风险。它贯穿需求、设计、开发、发布和线上运行全过程,帮助团队更早发现问题、更低成本修复问题、更稳定地交付产品。对于测试开发角色来说,测试还意味着建设自动化、质量门禁、监控告警、回归体系和质量度量,让发布从依赖个人经验变成依赖可验证的数据和机制。