2026-04-26 14:50:28
蚂蚁集团前端实习一面面经核心问题及解答如下:
JavaScript 基础Object.create(null) 和 {} 的区别
Object.create(null) 创建一个无原型链的空对象(无继承属性),适合作为纯数据字典;{} 继承自 Object.prototype,包含 toString、hasOwnProperty 等方法。
示例:Object.create(null).toString 报错,{}.toString 返回函数。
Object.keys() 和 for…in 的区别
Object.keys() 仅返回对象自身可枚举属性的数组;for…in 遍历对象自身及原型链的可枚举属性,需配合 hasOwnProperty 过滤。
示例:Object.keys({a:1, __proto__: {b:2}}) 返回 ['a'],for…in 会遍历 b。
hasOwnProperty 和 in 的区别
hasOwnProperty 检查属性是否为对象自身所有;in 检查属性是否在对象或其原型链上。
示例:({a:1}).hasOwnProperty('a') 返回 true,'toString' in {} 返回 true。
原型链属性 vs 对象自身属性
原型链属性通过 __proto__ 继承,访问时逐级向上查找;自身属性直接定义在对象上,优先级更高。
修改原型链属性会影响所有继承该原型的对象。
Array.map 用法
map 遍历数组并返回新数组,不修改原数组。常用于数据转换,如 [1,2,3].map(x => x*2) 返回 [2,4,6]。
数组去重方法
Set:[...new Set(arr)]
filter + indexOf:arr.filter((item, index) => arr.indexOf(item) === index)
reduce:arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], [])
this 指向场景
默认绑定(非严格模式指向 window,严格模式 undefined)
隐式绑定(方法调用时指向调用对象,如 obj.method())
显式绑定(call/apply/bind 强制指定 this)
new 绑定(构造函数中指向新创建的对象)
箭头函数(继承外层 this,无自身 this)。
Map 和 WeakMap
Map:键可为任意类型,迭代有序,支持大小查询;
WeakMap:键必须是对象,弱引用(不阻止垃圾回收),不可迭代,适合存储私有数据。
开发框架
蚂蚁集团小程序可能使用原生或自研框架(如支付宝小程序框架),需了解其生命周期、组件化机制。
其他框架如 Taro、WePY 可实现跨平台开发,需对比其与原生开发的差异。
与传统 Web 开发的不同
运行环境:小程序基于双线程(渲染层+逻辑层),Web 为单线程。
API 差异:小程序提供原生能力(如支付、地理位置),Web 依赖浏览器 API。
性能优化:小程序需注意包大小限制、分包加载,Web 侧重代码分割、懒加载。
开发中的奇怪问题
例如:setData 频繁触发导致性能问题,需合并数据或使用防抖;
样式隔离问题,需检查 usingComponents 或样式作用域配置。
域名注册
域名通常通过阿里云、腾讯云等注册,需备案后用于生产环境。
Git 使用
常用命令:clone、branch、commit、push、pull、merge、rebase。
协作流程:如 Git Flow 或 GitHub Flow,需掌握 feature 分支开发与 pull request 合并。
云服务与数据库
云服务:阿里云、AWS 等,可能涉及服务器部署、CDN 加速。
数据库:MySQL(关系型)、MongoDB(文档型),索引优化需了解 B+树结构及联合索引的最左匹配原则。
两个栈实现队列
入队:压入栈 A;
出队:若栈 B 为空,将栈 A 全部弹出并压入栈 B,再弹出栈 B 顶部元素。
找出重复数字
1 个重复:数学法(求和差)或位运算(异或);
2 个重复:
方法 1:哈希表统计频率;
方法 2:数学法(设重复数为 a 和 b,根据总和与平方和列方程求解)。
前端社区生态
需关注主流框架(React/Vue/Angular)、构建工具(Webpack/Vite)、状态管理(Redux/Pinia)等。
HTTP 与 CORS
CORS:跨域资源共享,需服务器配置 Access-Control-Allow-Origin。
简单请求:GET/POST/HEAD,HTTP 头无自定义字段;
复杂请求:需先发送 OPTIONS 预检请求。
CSS 了解程度
需掌握布局(Flex/Grid)、动画(transition/animation)、响应式设计(媒体查询)等。
总结:面试覆盖基础、工程化、算法及场景题,需扎实准备 JavaScript 核心、小程序开发差异及实际问题解决能力。