2022猿辅导(23届秋招)前端一二三面面经(已offer)
一面
8.13
- 自我介绍
- 介绍一下项目
- 介绍项目里解决的问题
- 大概讲一下一个项目从 0 到 1 的过程,比如包括 Vue 的配置,Vuex,Vue-Router,指到从 0 到 1 之后可以进行业务开发,不包括业务逻辑部分(纯技术),可以理解为如何实现一个
create-tamplate
,比如Vue CLI
、create-react-app
提供的模板,面试官会根据你讲的实现细节一个个提问 ESLint
作为一个代码检查工具都包括什么东西呢?ESLint
怎么实现代码检查呢?(比如命令行、配置文件)ESLint
需要进行怎样的配置实现代码检查呢?- 如何实现代码提交的时候也进行
ESLint
检查呢?(git Hook
(git
钩子),比如Husky
) - 介绍一下
Vue Router
的两种模式 - 域名:
www.yfd.com
,Path:se
,如果使用Hash
模式,是www.yfd.com/#se
,如果是使用History
模式,是www.yfd.com/se
,这两个路径对于浏览器和服务端的交互来说有什么不同? - 介绍一下通常项目会对
axios
怎么封装 axios
的拦截器一般会配置什么呢?- 为什么要在请求拦截器中鉴权?而不是在服务端(这个回答不是很好,没说到
token
) axios
的响应拦截器一般会配置什么呢?比如状态码- 状态码 401/403 有什么区别?跳转登录用哪个?(403 已经携带了鉴权信息,只是没有鉴权通过,forbidden,即使再跳转登录页也无法登录,401 代表 Unauthorized,即没有获取到鉴权信息,这个时候应该跳转登录页)
- 响应拦截器对
404
状态码需要做什么呢?处理状态码处理还需要做什么吗? - 有没有和后端约定数据返回的格式?怎么处理?(比如统一的状态码,一般后端会有一个通用返回结果类,CommonResult,通常会有一个状态码枚举值,比如 40001 是成功,40002 是失败...,这个时候前端可以提示相应的信息)
Vue
的Mixin
实现原理- 手撕题 - 121. 买卖股票的最佳时机 ,里面的 如果你不能获取任何利润,返回
0
,改成了-1
一面面试官的英语好好/(ㄒoㄒ)/~ ~,好几次都听不懂我的一些术语的表达,她还教了我 axios
是怎么读的
二面
8.20
- 自我介绍
- 实习做了啥
- 实习的难点,怎么解决的?
- 有没有是优化的点 - 大文件树 - 虚拟列表
- 虚拟列表快速滑动时,有啥问题?
- 看代码猜输出
// 变量指向
var a = 10;
var obj = {
a: 20,
say: () => {
console.log(this.a);
},
};
obj.say();
var anotherObj = { a: 30 };
obj.say.apply(anotherObj);
// 变量提示
var a = 10;
function foo() {
console.log(a);
let a = 20;
}
foo();
// 暂时性锁区
var a = 10;
function foo() {
console.log(a);
var a = 20;
}
foo();
// promise 系列输出
async function async1() {
console.log("async1 start"); //
await async2();
console.log("async1 end"); //
}
async function async2() {
console.log("async2"); //
}
console.log("script start"); //
setTimeout(function () {
console.log("setTimeout"); //
}, 0);
async1();
new Promise((resolve) => {
console.log("promise1"); //
resolve();
}).then(function () {
console.log("promise2"); //
});
console.log("script end"); //
- 介绍一下事件循环
- 介绍一下 DOM 渲染和 JS 的关系
- 介绍一下 Vue 的双向数据绑定原理
- 手撕
// 手写 Promise.prototype.race
function race(arr) {
return new Promise((resolve, reject) => {
for (let i = 0; i < arr.length; i++) {
if (arr[i] instanceof Promise) {
arr[i].then(
(value) => {
resolve(value);
},
(reason) => {
reject(reason);
}
);
} else {
resolve(arr[i]);
}
}
});
}
race([
new Promise((resolve) => setTimeout(resolve(2), 400)),
new Promise((resolve) => setTimeout(resolve(3), 100)),
]).then(
(value) => {
console.log(value);
},
(reason) => {
console.log(reason);
}
);
- 介绍一下学习 Vue 的过程(此类问题,可以参考‘你是如何学习一个新技术的’)
- 感兴趣的前端方向
- 反问
有些可能不太记得了
三面
9.2
- 讲一件你觉得最有成就感的事情
- 为什么要写这个项目呢?
- 服务部署了吗?有域名吗?备案了吗?
- 后端用什么写的?
- 团队有几个人,怎么分工的?
- 这个项目最难的点是在哪?
- 项目有用到什么开发工具?是怎么调试的?
- 未来希望往哪方向发展?
- 写一个钟表,输入时间戳,然后得到时间,比如
formatTime(60) // 00:01:00
formatTime(3661) // 01:01:01
formatTime(86401) // 00:00:01
- 写一个轮播图
- 反问
- 前端业务的考核标准
- 产出,两方面,交付效率和交付质量
- 交付效率,交付的稳定性,排期预估,总能在排期内完成
- 交付质量,上线之后的 bug 多不多
- 产出,两方面,交付效率和交付质量