面试分享:1 年经验初探前端社招

5,851 阅读3分钟

本文首发于 我的Github

年中决定离开当前所在的公司,想受一受外面社会的毒打。也面了 2 家还不错的公司(字节跳动 和 拼多多),在此记录分享一下。

字节跳动

字节跳动的技术面试都是以视频面试的形式进行的。

第 1 轮

1.1 自我介绍

1.2 js 基本知识

主要考察 js 中的基本类型、typeofinstanceof 等。

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 之前工作做过的项目挑一个介绍

这道题注意考察对整体项目的理解和把握程度。

  1. 项目背景
  2. 项目如何进行的,进行过程中遇到了哪些问题以及如何解决
  3. 项目如何保证代码质量(单元测试、代码规范、提交规范以及自动 CI 等)
  4. 项目的版本控制

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 年,可以去阿里。