本文首发于 我的Github。
年中决定离开当前所在的公司,想受一受外面社会的毒打。也面了 2 家还不错的公司(字节跳动 和 拼多多),在此记录分享一下。
字节跳动
字节跳动的技术面试都是以视频面试的形式进行的。
第 1 轮
1.1 自我介绍
1.2 js 基本知识
主要考察 js 中的基本类型、typeof
和 instanceof
等。
1.3 ==
和 ===
判断
常规的类型比较题,比较基础。
[] == false
false == false
[1] == [1];
1 === "1";
1.4 手写 debounce 函数
function debounce(func, wait, immediate) {
let timeout;
const debounced = function() {
const context = this;
const args = arguments;
const later = function() {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) {
func.apply(context, args);
}
};
debounced.cancel = () => {
clearTimeout(timeout);
};
return debounced;
}
1.5 从输入 URL ,浏览器发生了什么
1.6 手写继承(ES5、ES6)
1.7 算法题:js 计算 四则运算 字符串 "1 + 2 * 3 + 3 / 3"
第 2 轮
2.1 谈谈对 Vue 和 React 的理解
2.2 vue 为什么继续使用 react 废弃的 mixin 机制
2.3 js 怎么进行性能分析
2.4 通用组件 和 业务组件 怎么设计
2.5 webpack 打包优化
2.6 两个进程之间如何通信?子网掩码有什么作用?
突然问到了 操作系统 和 计算机网络 的知识(忘光光)。
2.7 HTTP 状态码 204 和 304 之间的区别
2.8 实现 sum
函数
sum(1) == 1;
sum(1)(2) == 3;
sum(1)(2, 3, 4)(5) == 15;
注意这道题考的还是 隐式转换。
function sum(...args) {
let value = 0;
function innerSum(...args) {
value = args.reduce((a, c) => (a += c), value);
return innerSum;
}
innerSum.valueOf = function() {
return value;
};
return innerSum(...args);
}
2.9 package.json 中的依赖是怎么进行版本控制的
2.10 算法题:js 数组三数之和
第 3 轮
3.1 之前工作做过的项目挑一个介绍
这道题注意考察对整体项目的理解和把握程度。
- 项目背景
- 项目如何进行的,进行过程中遇到了哪些问题以及如何解决
- 项目如何保证代码质量(单元测试、代码规范、提交规范以及自动 CI 等)
- 项目的版本控制
3.2 Vue 的响应式原理
3.3 React 中的高阶组件是什么?
主要考察 HOC
,举出写过哪些高阶组件,有什么作用即可。
3.4 手写观察者模式
拼多多
第 1 轮
1.1 自我介绍
1.2 之前做过的项目介绍
1.3 js 中 break、continue、return 关键字区别
1.4 js 有哪些数据类型
1.5 window 对象下面有哪些属性
1.6 html property 和 attribute 区别
1.7 es6 中 数组方法有哪些?
1.8 es6 新增的数据结构有哪些?有什么区别?
1.9 css 盒模型有哪些?不同点?
1.10 css 如何清除浮动?原理是什么?
1.11 css BFC 是什么?
1.12 webpack 如何做优化(例如构建速度优化、代码优化之类的)
1.13 如何写 webpack 插件?
1.14 webpack 中的 loader 是如何实现的?(例如 vue-loader)
1.15 vuex 的数据模型如何定义,数据模型之间的副作用怎么写?
1.16 谈一谈你对 Vue 和 React 的认识
1.17 rxjs 的一些理解,如何对请求节流
1.18 了解哪些前端新技术
第 2 轮
可能是 1 面问了相对太多问题,2 面很轻松,也很短暂。
2.1 对 React 和 Vue 的理解
2.2 说一说 React Hooks
2.3 定时器(setTimeout)为什么会不准,如何解决
2.4 聊一聊函数式编程
2.5 聊一聊之前做过的项目
和字节跳动一样,考察对项目的整体理解和把握能力。
总结
两家公司的面试难度都不是很大(虽然也可能是考虑到我只有 1 年工作经验),但是回味起来还是意犹未尽,总是想到上高中时数学老师发卷子时那痛心疾首的说道 "你看看,多简单,150 的卷子,至少 120 是基础题,你们咋就啥都不会呢" 。
最后,希望再过 2 年,可以去阿里。