公司题库

阿里巴巴面经题库第 6 页

399 道题 11 个岗位 147 个标签

阿里巴巴相关面试题第 6 页

箭头函数和普通函数有什么区别?

箭头函数是 ES6 引入的一种更简洁的函数写法,但它不只是语法糖。它最大的特点是没有自己的 this、arguments、super 和 new.target,其中 this 会按词法作用域从外层函数或模块环境中捕获,因此特别适合回调、数组方法和需要保留外层 this 的场景;但它不能作为构造函数,也没有 prototype,不适合对象方法、原型方法、构造器、事件处理器中依赖动态 this 的场景。

ES6的新特性有什么?

ES6 是 JavaScript 现代化的关键版本,核心价值不是新增若干语法糖,而是系统性解决了旧版 JavaScript 在变量作用域、异步流程、模块组织、数据结构、面向对象表达、可迭代协议和元编程能力上的工程问题。面试回答应从语法特性切入,再说明它们分别改善了可读性、可维护性、作用域安全、异步可控性、模块边界和复杂数据建模能力。

v-model的原理?

v-model 本质上是 Vue 提供的双向绑定语法糖,它把数据到视图的绑定和视图到数据的事件更新组合起来。理解它不能只停留在自动同步四个字上,还要能区分原生表单元素、组件封装、Vue2 与 Vue3 约定、修饰符处理、多 v-model 以及响应式更新链路。

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。

怎么优化网络链接速度?

优化网络连接速度,本质是缩短从用户发起请求到可用响应返回的整条链路耗时。前端不能只盯着资源体积,还要拆开 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 执行的基本单位,协程是用户态组织异步流程的轻量执行单元。面试时不能只背“进程重、线程轻、协程更轻”,要讲清地址空间、调度权、上下文切换成本、通信方式,以及在 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?

登录界面测试用例设计不能只停留在用户名密码正确或错误。一个测试开发视角的完整答案,应从业务入口、账号体系、认证链路、安全风控、状态保持、跳转权限、兼容性、性能、可用性、可观测性和自动化回归等维度展开。核心目标是验证用户能正确、安全、稳定地完成登录,同时防止越权、撞库、会话泄露、验证码绕过、弱交互导致误操作,以及高并发下认证服务不可用等问题。

手游一般多少帧率比较合适?

手游合适帧率没有唯一答案,核心判断不是越高越好,而是在游戏类型、目标设备、输入响应、功耗发热和长时间稳定性之间取平衡。轻度休闲、棋牌、放置类游戏稳定 30 FPS 或 45 FPS 往往可以接受;大多数主流手游以稳定 60 FPS 作为推荐目标;射击、竞速、动作、音游等强操作品类可以在高端设备上提供 90 FPS 或 120 FPS,但必须验证温升、电量和帧时间稳定性。

为什么要做测试?

测试的核心价值不是简单找 bug,而是用系统化方法识别、评估和控制质量风险。它贯穿需求、设计、开发、发布和线上运行全过程,帮助团队更早发现问题、更低成本修复问题、更稳定地交付产品。对于测试开发角色来说,测试还意味着建设自动化、质量门禁、监控告警、回归体系和质量度量,让发布从依赖个人经验变成依赖可验证的数据和机制。

怎么排查性能问题?

排查性能问题不能从单点经验出发,而要先把问题定义清楚:慢在哪里、影响谁、从什么时候开始、哪个指标异常、是否可复现。标准思路是先量化现象,再按调用链从客户端、网关、应用、缓存、数据库、网络和机器资源逐层缩小范围,结合压测、监控、日志、链路追踪、慢查询、线程栈、GC 日志、火焰图以及 CPU、内存、IO、网络等指标定位根因,最后通过修复验证和回归压测证明问题真正解决。