牛客最新前端面经面试题汇总(含解析)

69,460 阅读9分钟

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

前言

大家好,我是小包,如果喜欢小包,可以在 掘金 关注我,同样也可以关注我的小小公众号——小包学前端

上个月抓取了牛客 21 年最新的笔试题和面试题,笔试题上个月份就发出,当时准备不足,未准备答案。面经部分的题目我吸收上次教训,每个题目我都准备答案,有的题目答案是我的理解,有的题目我的水平可能暂时还有限,答案选取掘金高赞高访问量博客。希望能帮助到大家。

面经部分,初步决定分为两部分,一部分为所有的简答题和手写题,另一部分为程序题。此章为简答题和手写题部分。

程序题部分正在想以何种方式发出,大家也可以在评论区给阿包出出注意

我大约统计了牛客网大约 15 家大公司的前端题,考察频率大致划分如下:

  • ⭐⭐⭐⭐⭐: 在 15 家公司面试中出现 10+
  • ⭐⭐⭐⭐:在 15 家公式面试中出现 5-10
  • ⭐⭐⭐:在 15 家公司面试中出现 3-5
  • 无星:出现 1-2

下面是笔试题部分和题目分析部分传送门:

JavaScript基础部分

typeof 问题汇总

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

typeof能正确区分原始值吗

typeof的返回值有哪些

typeof function 会显示什么

typeof为什么对null错误的显示答案&解析

typeof('abc')和 typeof 'abc'都是 string, 那么 typeof 是操作符还是函数?答案&解析

JavaScript的数据类型

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

== 的隐式转换规则

undefined、null 自身相等且互相相等

考察频率: (⭐⭐⭐⭐⭐)

== 的隐式转换规则

instanceof原理

考察频率: (⭐⭐⭐)

答案&解析

["1","2","3"].map(parseInt) 结果是什么,并解释原因

如何让上述式子返回[1,2,3] 用你能想到的最简单的方案(要求使用[].map())

考察频率: (⭐⭐⭐)

答案&解析

判断数据类型的方法

答案&解析

typeof 与 instanceof 的区别

答案&解析

如何判断数组类型

答案&解析

number能表示的整数的最大范围

答案&解析

2.toFixed() 会输出什么结果

答案&解析

查询某个对象是否有某个属性的方法

答案&解析

splice和slice你能说说有啥用和区别吗

答案&解析

==和===区别

答案&解析

构造函数与普通函数的区别

答案&解析

类数组与数组区别,为什么要设置类数组

答案&解析

null 与 undefined 的区别

答案&解析

a.b.c.d 和 a['b']['c']['d'],哪个性能更高?

答案&解析

forEach与for循环,谁的性能更好

答案&解析

JavaScript深入部分

this指向

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

原型与原型链

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

你能讲一下事件循环机制吗?

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

作用域与作用域链

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

谈谈你对闭包的理解

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

预编译

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

new 操作符做了哪些事情

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

垃圾回收机制

考察频率: (⭐⭐⭐⭐)

「硬核JS」你真的了解垃圾回收机制吗

继承的多种方式和优缺点

考察频率: (⭐⭐⭐⭐)

答案&解析

JS原型链继承与Class继承

考察频率: (⭐⭐⭐⭐)

答案&解析

call、apply、bind区别

考察频率: (⭐⭐⭐⭐)

答案&解析

cookie, localStorage sessionStorage区别

考察频率: (⭐⭐⭐⭐)

答案&解析

数组高阶方法

考察频率: (⭐⭐⭐⭐)

答案&解析

防抖与节流的区别

考察频率: (⭐⭐⭐⭐)

答案&解析

script标签的defer和async属性有什么区别

考察频率: (⭐⭐⭐)

答案&解析

同步任务和异步任务区别

考察频率: (⭐⭐⭐)

答案&解析

构造函数,实例对象和原型对象关系

考察频率: (⭐⭐⭐)

答案&解析

使用new调用函数,而这个函数中有return,那它return出来的是什么

考察频率: (⭐⭐⭐)

答案&解析

setTimeout、Promise、Async/Await 的区别

答案&解析

17.Object的_proto_指向什么

答案&解析

18.Function的_proto_指向什么

答案&解析

19.promise和setTimeout分别是什么任务

答案&解析

20.js文件为什么要放在文件底部

答案&解析

ES6

什么是promise?实现一个简单的promise

考察频率: (⭐⭐⭐⭐⭐)

Promise不会??看这里!!!史上最通俗易懂的Promise!!!

Promise.all(), .race(), .allSettled()对比

考察频率: (⭐⭐⭐⭐⭐)

Promise 中的三兄弟 .all(), .race(), .allSettled()

Promise、Generator、Async三者的区别

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

async 和 await 原理

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

let const var 区别

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

箭头函数与普通函数区别

考察频率: (⭐⭐⭐⭐⭐)

答案&解析

defienProperty与proxy区别

考察频率: (⭐⭐⭐⭐)

答案&解析

map与weakMap的区别

考察频率: (⭐⭐⭐⭐)

答案&解析

set 与 weakSet 区别

考察频率: (⭐⭐⭐⭐)

答案&解析

map与object区别

考察频率: (⭐⭐⭐⭐)

答案&解析

map与set

考察频率: (⭐⭐⭐⭐)

彻底弄懂ES6中的Map和Set

如何在使用async & await 时优雅的处理异常

考察频率: (⭐⭐⭐⭐)

如何在使用async & await 时优雅的处理异常

proxy优缺点

考察频率: (⭐⭐⭐)

面试官: 实现双向绑定Proxy比defineproperty优劣如何?

Object.defineProperty

考察频率: (⭐⭐⭐)

答案&解析

介绍一下symbol

考察频率: (⭐⭐⭐)

答案&解析

proxy可以监听嵌套对象的变化吗

答案&解析

你了解ES6的bigInt吗

答案&解析

map与object键值key遍历顺序

答案&解析

聊聊Promise的值穿透和异常穿透

答案&解析

Object.assign是浅拷贝还是深拷贝?实现深拷贝的方法有哪些?(2020.01.07).md

答案&解析

generator底层原理

答案&解析

BOM DOM

DOM事件流

DOM事件流

事件冒泡、事件捕获

事件冒泡、事件捕获

什么是事件委托?

什么是事件委托?

获取元素在页面位置的 API 有哪些

setTimeout与setInterval区别,两者那个更准

定时器不准时☞带你揭秘setTimeout和setInterval

在 timer = setInterval(() => {}, delay) 中,这个 timer 打印出来是什么

在 timer = setInterval(() => {}, delay) 中,这个 timer 打印出来是什么

requestAnimationFrame

requestAnimationFrame

遍历

遍历对象的方法

遍历对象的方法

for in 与 Object.keys区别

for in 与 Object.keys区别

for in 和 for of 的区别

for in 和 for of 的区别

for of 可以遍历对象吗

for of 可以遍历对象吗

手撕代码

promise

实现promise

考察频率: (⭐⭐⭐⭐⭐)

参考代码

实现promise.all

考察频率: (⭐⭐⭐⭐⭐)

参考代码

实现 promise.finally

考察频率: (⭐⭐⭐⭐⭐)

参考代码

实现promise.allSettled

考察频率: (⭐⭐⭐⭐)

参考代码

实现promise.race

考察频率: (⭐⭐⭐)

参考代码

来说一下如何串行执行多个Promise

参考代码

promise.any

参考代码

resolvev reject

参考代码

Array篇

数组去重

考察频率: (⭐⭐⭐⭐⭐)

参考代码

数组扁平化

考察频率: (⭐⭐⭐)

参考代码

forEach

考察频率: (⭐⭐⭐)

参考代码

reduce

考察频率: (⭐⭐⭐)

参考代码

map

参考代码

filter

参考代码

every

参考代码

some

参考代码

find/findIndex

参考代码

indexOf

参考代码

实现sort

参考代码

防抖节流

实现防抖函数debounce

考察频率: (⭐⭐⭐⭐⭐)

参考代码

实现节流函数throttle

考察频率: (⭐⭐⭐⭐⭐)

参考代码

Object篇

能不能写一个完整的深拷贝

考察频率: (⭐⭐⭐⭐⭐)

参考代码

实现new

考察频率: (⭐⭐⭐⭐)

参考代码

继承

考察频率: (⭐⭐⭐⭐)

原型链继承

借用构造函数(经典继承)

组合继承

原型式继承

寄生式继承

寄生组合式继承

Class实现继承(补充一下)

class Animal {
    constructor(name) {
        this.name = name
    } 
    getName() {
        return this.name
    }
}
class Dog extends Animal {
    constructor(name, age) {
        super(name)
        this.age = age
    }
}

参考代码

实现object.create

参考代码

Function篇

call

考察频率: (⭐⭐⭐⭐)

参考代码

bind

考察频率: (⭐⭐⭐⭐)

参考代码

apply

考察频率: (⭐⭐⭐⭐)

参考代码

实现柯里化

考察频率: (⭐⭐⭐)

参考代码

实现链式调用

参考代码

偏函数

参考代码

ajax 与 jsonp

考察频率: (⭐⭐⭐)

实现ajax

参考代码

实现jsonp

参考代码

ES6篇

实现set

参考代码

实现 map

参考代码

实现es6的class

参考代码

使用proxy实现arr负数索引访问

参考代码

其他

instanceof

考察频率: (⭐⭐⭐⭐)

参考代码

实现千分位分隔符

考察频率: (⭐⭐⭐)

参考代码

把一个JSON对象的key从下划线形式(Pascal)转换到小驼峰形式(Camel)

考察频率: (⭐⭐⭐)

参考代码

实现数据类型判断函数

参考代码

实现数组转树

参考代码

实现sleep函数

参考代码

实现发布订阅模式

[参考代码](21interview/imitate/eventEmitter.md

未找出答案题目

set去重原理

使用promise实现请求超时重新请求

JavaScript进阶系列

近期精彩

面试部分

快乐编程

题目仓库

传送门: 仓库

后语

整理了好久,如果大家感觉有帮助,希望可以给小包点个赞👍

伙伴们,如果大家感觉本文对你有一些帮助,给小包点一个赞👍或者关注➕都是对我最大的支持。

我是 战场小包 ,一个快速成长中的小前端,希望可以和大家一起进步。

如果喜欢小包,可以在 掘金 关注我,同样也可以关注我的小小公众号——小包学前端

一路加油,冲向未来!!!