【前端校招面经】阿里天猫超市前端校招面经
这是去年 12 月面试的, 这次把面经补上
- 自我介绍
- CSS
垂直水平居中
有哪些方式, 用代码实现 - 背诵
flex
有哪些属性 setInterval
的间隔时间是准确的吗? 如何做到间隔时间绝对准确- 0.1 + 0.2 为什么不等于 0.3, 怎样让它等于, 你知道有哪些 js 库可以实现 js 科学运算, 你看过 js 库实现科学运算的源码吗?
浏览器缓存
- 什么场合适合用强缓存, 什么场合适合用协商缓存
https
TLS 协议四次握手- 现已知 https 对前端性能影响很大, 如何提升其性能以减少 tls 层耗时
- https 如何防止信息被劫持
- Vue 和 React 区别
Mobx
和Redux
原理, 二者在应用层面上的区别- 介绍你实习项目
- 你在实习期间做的项目有哪些价值, 收到了哪些反馈
- 代码题
// 1. 三数之和(LeetCode 15)
// 2. 单链表反转
// 3. 手写一个 EventEmitter class
// 下面是 ChatGPT 写的:
class EventEmitter {
constructor() {
this.events = {};
}
/**
* 注册事件
* @param {String} eventName 事件名
* @param {Function} cb 回调函数
*/
on(eventName, cb) {
// 如果没有注册过,则创建一个空数组
if (!this.events[eventName]) {
this.events[eventName] = [];
}
// 将回调函数添加到对应的事件数组中
this.events[eventName].push(cb);
}
/**
* 触发事件
* @param {String} eventName 事件名
* @param {...any} args 传入参数
*/
emit(eventName, ...args) {
// 获取对应的事件数组
const callbacks = this.events[eventName];
// 如果存在
if (callbacks && callbacks.length) {
// 依次执行数组中的函数
callbacks.forEach(cb => {
cb(args);
});
}
}
}