腾讯云前端微服务中心 面试复盘

4/23/2021

以下内容只是复盘,不包含题解(个别可能附带了答案)。

面试官来自腾讯云微服务中心

实际时间:19:00 - 20:10

四个环节:

  1. 简单的自我介绍
  2. 问答
  3. 笔试题
  4. 反馈

# 1. 自我介绍

阶段1:初步认识

Q: 简单介绍一下自己

A: 我叫xx,自己在学校有学习的学科如计算机组成原理,操作系统和计算机网络等,在语言的方面,比较熟悉 JavaScript 和 TypeScript,在校有学习 C++,Java 和 Python,但我最喜欢的还是 JS。在技术方面,我比较喜欢前端的开发环境,能带给我很多乐趣。学习方面,我有比较强的学习能力,能顶住一个较强的工作压力。

阶段2:职业经历与选择

Q: 这里我想问一个问题,请问接触前端多久了呢?

A: 接触前端是从大二开始,现在大四。

Q: 两年呗,是吧

A: 两年到三年的样子,嗯,两年多的样子

Q: 那问一下,您是校招还是实习?

A: 我是校招,我是 21 届的应届生。

Q: OK OK,为什么会选择前端呢,我看你简历上也接触过后端开发吧。

A: 确实有接触过,因为不管是做毕设还是其他实际的项目实际上都是需要很多后端知识。

Q: 为什么会选择前端呢?

A:因为我更喜欢前端的开发环境吧,我对美术这些也比较喜欢。

# 2. 问答环节

考点1:JavaScript 继承机制

Q: JavaScript 中如何实现继承?

提到了 1. class 的 extends 2. prototype 原型

考点2:JavaScript 原型与原型链

Q: JavaScript 原型链有听说过吗,介绍一下?

Q: 原型链的顶端是什么

考点3:JavaScript 基本数据类型

Q: JavaScript 基础数据类型

回答提到了 null

Q: null 是基础类型吗,typeof null === 'object'

面试官问:

undefined === undefined // true

null === null // true

面试官问:

NaN === NaN // false

Infinity === Infinity // true

考点4:JavaScript 作用域与作用域链

Q: 那你描述一下作用域,作用域链,查找变量时是先查哪一个作用域呢?

Q: 从作用域链角度介绍一下递归的执行原理

Q: 作用域链的顶端是?

浏览器环境下的话是 window,node 环境下是 global

考点5:JavaScript 闭包

Q: 说一下闭包,闭包的用途和原理

Q: 平时会在什么场景下使用闭包

回答提到了 redux

考点6:JavaScript 变量提升

Q: 我在对话框里发了一段代码,读完之后说一下应该输出什么

function a() {
    console.log(A);  // undefined
    var A = 9;
    console.log(A); // 9
}

function a() {
    console.log(A);  // Error
    let A = 9;
    console.log(A); // 会执行吗
}
1
2
3
4
5
6
7
8
9
10
11

回答提到了变量提升

Q: 你刚刚说到了变量提升,变量提升除了 var 还有其他的吗?

还有 function

Q: 还有呢? const 会提升么?class会提升么?箭头函数会提升么?

回答提到了 this 指向

考点7:JavaScript this

Q: 对比一下,箭头函数和普通函数的区别?刚刚你答了一个 this

提到了 bind/call/apply

Q: 普通函数的 this 指向的是?

var a = {
    b: function(){}
}
a.b() // 问:b 中的 this 指向的是?
1
2
3
4

Q: 如果我想改变 this 的话,有什么方法么?

主要是 Object#bind/apply/call 三个方法

Q: bind/apply/call,这三个函数的区别.

Q: call/apply 有什么区别

考点8:JavaScript 运行机制:宏任务与微任务

Q: 我给你提供一段代码,你看一下这段代码的输出

console.log(1);

setTimeout(function() {
  console.log(2);
}, 0);

new Promise(res=>{
    console.log(6);
    res()
})
  .then(function() {
    console.log(3);
  })
  .then(function() {
    console.log(4);
  });

console.log(5);
// 1 6 5 3 4 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

上面代码里有 setTimeout

Q: setTimeout 定时器是否准时的呢?比如我设定 2000,会不会一定 2s 之后执行呢?

Q: 既然不准时,有什么情况会导致不准时呢?

考点9:洋葱模型

Q: 既然你接触过 Node.js,那你说一下洋葱模型吧

回答描述了 koa2 的洋葱模型

Q: 刚刚你说了 koa2 里的模型,那 express 里的洋葱模型是怎样的呢

回答提到了设计模式的作用链

Q: 假设我用 koa2 开发一个程序,要统计请求的处理时延,应该怎么设计中间件?

回答提到了 async/await

考点10:Promise,async / await

Q: 既然提到了 await,那 await 本质是个什么,介绍一下。

回答提到了 Promise

Q: Promise 有几种状态呢?

考点11:JavaScript 生成器

Q: Generator function 有听说过吗,做什么用的。

回答提到了 yield/next

Q: 生成器函数的返回值是什么?

回答提到了 协程

Q: 那你介绍一下协程。JS 里有没有什么类似与协程的实现?

考点12:浏览器同源策略与 http 协议

Q: 浏览器的同源策略介绍一下

回答提到了域名,协议

Q: 我想启一个服务,你接触过 Node.js 的服务,服务主要包括哪些东西呢

Q: 同源策略除了域名协议,还有其他东西么?你听说过端口号这个东西么?端口号会造成同源协议吗?

Q: 那 https 协议的端口号是多少,53 端口一般是哪个

a.www.qq.com www.qq.com
// 会跨域么?
1
2

Q: 怎么解决跨域问题?

  • 服务端添加响应头

Q: 要添加哪些响应头呢?

Q: 还有怎么方案可以解决跨域问题?前端代理是怎么代理呢

Q: http 常用方法呢?

GET / POST / PUT / DELETE / OPTIONS / UPDATE

Q: 描述一下 HTTP 的 OPTIONS 是做什么的?

Q: 如果我有一个网站,限流 1000 TPS,然后我现在有 1000 个用户同时访问这台机器,服务器端配置了跨域头,浏览器会发起 OPTIONS 请求么?

Q: 那我有 1000 个用户,本来服务器的 1000 TPS 是够的,那它发起了 OPTIONS 请求,我如何解决因为 OPTIONS 请求导致的 TPS 不够的问题呢?

回答提到了 OPTIONS 提前返回(但并发量依然下去了)

# 3. 笔试

算法基础测试

525. 连续数组 (opens new window)

Q:有思路吗?有思路可以先讲一下思路

Q: 输入 0 1 0 0 0 0 1 0 1 的输出结果是多少

4 ?

Q: 有思路么?有思路么?有思路么?...... 沉默十分钟

...

框架基础测试

Q: 三个前端框架哪一个你接触得多一些?Vue,React,Angular

Vue

Q: 那你介绍一下 Vue 的双向绑定吧

回答提到 v-model,语法糖,单向绑定 + 标签监听 input 的 onchange 事件

Q: Vue 是怎么把一个变量输出到页面上的呢?怎么做到动态改变的呢?

回答提到了观察/订阅模式,defineProperties()

Q: 使用 defineProperties() 有什么问题,或者说缺陷吗?

回答提到了深层嵌套,数组

Q: 那怎么解决呢?有什么更好的解决方式

回答提到了 Vue3 的 Proxy 代理

Q: Vue 的依赖收集是怎么做到的呢

... 一脸懵逼

# 4.反馈

反馈问答

Q: 你有什么想问我的么?

Last Updated: 10/23/2021, 4:31:30 PM