前端进阶面试-JS面试题(阿里、字节、腾讯、美团面试高频)(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

hw.next()

// { value: ‘ending’, done: true }

hw.next()

// { value: undefined, done: true }

3. 手写Promise实现

==========================================================================

var myPromise = new Promise((resolve, reject) => {

// 需要执行的代码

if (/* 异步执行成功 */) {

resolve(value)

} else if (/* 异步执行失败 */) {

reject(error)

}

})

myPromise.then((value) => {

// 成功后调用, 使用value值

}, (error) => {

// 失败后调用, 获取错误信息error

})

4. Promise优缺点

=========================================================================

优点: 解决回调地狱, 对异步任务写法更标准化与简洁化

缺点: 首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消; 其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部; 第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成).

极简版promise封装:

function promise () {

this.msg = ‘’ // 存放value和error

this.status = ‘pending’

var that = this

var process = arguments[0]

process (function () {

that.status = ‘fulfilled’

that.msg = arguments[0]

}, function () {

that.status = ‘rejected’

that.msg = arguments[0]

})

return this

}

promise.prototype.then = function () {

if (this.status === ‘fulfilled’) {

arguments0

} else if (this.status === ‘rejected’ && arguments[1]) {

arguments1

}

}

5. 观察者模式

====================================================================

又称发布-订阅模式, 举例子说明.

实现: 发布者管理订阅者队列, 并有新消息推送功能. 订阅者仅关注更新就行

6. 手写实现bind

=======================================================================

Function.prototype.bind = function () {

// 保存原函数

var self = this

// 取出第一个参数作为上下文, 相当于[].shift.call(arguments)

var context = Array.prototype.shift.call(arguments)

// 取剩余的参数作为arg; 因为arguments是伪数组, 所以要转化为数组才能使用数组方法

var arg = Array.prototype.slice.call(arguments)

// 返回一个新函数

return function () {

// 绑定上下文并传参

self.apply(context, Array.prototype.concat.call(arg, Array.prototype.slice.call(arguments)))

}

}

7. 手写实现4种继承

=======================================================================

function Father () {}

function Child () {}

// 1. 原型继承

Child.prototype = new Father()

// 2. 构造继承

function Child (name) {

Father.call(this, name)

}

// 3. 组合继承

function Child (name) {

Father.call(this, name)

}

Child.prototype = new Father()

// 4. 寄生继承

function cloneObj (o) {

var clone = object.create(o)

clone.sayName = …

return clone

}

// 5. 寄生组合继承

// 6. ES6 class extend继承

8. css菊花图

=====================================================================

四个小圆点一直旋转

// 父标签

animation: antRotate 1.2s infinite linear;

// 子标签

animation: antSpin 1s infinite linear;

@keyframe antSpin {

to {

opacity: 1

}

}

@keyframe antRotate {

to {

transform: rotate(405)

}

}

// animation-delay: 逐个延迟0.4s

9. http状态码

======================================================================

1**: 服务器收到请求, 需请求者进一步操作

2**: 请求成功

3**: 重定向, 资源被转移到其他URL了

4**: 客户端错误, 请求语法错误或没有找到相应资源

5**: 服务端错误, server error

304: Not Modified. 指定日期后未修改, 不返回资源

10. 变量对象

====================================================================

变量对象,是执行上下文中的一部分,可以抽象为一种 数据作用域,其实也可以理解为就是一个简单的对象,它存储着该执行上下文中的所有 变量和函数声明(不包含函数表达式)。

活动对象 (AO): 当变量对象所处的上下文为 active EC 时,称为活动对象。

11. async和await:

============================================================================

Generator函数的语法糖,将*改成async,将yield换成await。

是对Generator函数的改进, 返回promise。

异步写法同步化,遇到await先返回,执行完异步再执行接下来的.

内置执行器, 无需next()

12. 算法和数据结构:

========================================================================

算法:

解决具体问题所需要的解决方法。执行效率最快的最优算法。时间复杂度。输入,输出,有穷性,确定性,可行性。冒泡排序,二叉树遍历,最长回文,二分查找,指针,链表等,堆栈,队列等。力扣,codewar,算法导论。

数据结构:

逻辑结构:集合、线性、树形、图形结构

物理结构:顺序、链式存储结构

13. 封装JSONP

=======================================================================

function jsonp ({url, param, callback}) {

return new Promise((resolve, reject) => {

var script = document.createElement(‘script’)

window.callback = function (data) {

resolve(data)

document.body.removeChild(‘script’)

}

var param = {…param, callback}

var arr = []

for (let key in param) {

arr.push(${key}=${param[key]})

}

script.src = ${url}?${arr.join('&')}

document.body.appendChild(script)

})

}

14. 手动实现map(forEach以及filter也类似)

===========================================================================================

// for循环实现

Array.prototype.myMap = function () {

var arr = this

var [fn, thisValue] = Array.prototype.slice.call(arguments)

var result = []

for (var i = 0; i < arr.length; i++) {

result.push(fn.call(thisValue, arr[i], i, arr))

}

return result

}

var arr0 = [1, 2, 3]

console.log(arr0.myMap(v => v + 1))

// forEach实现(reduce类似)

Array.prototype.myMap = function (fn, thisValue) {

var result = []

this.forEach((v, i, arr) => {

result.push(fn.call(thisValue, v, i, arr))

})

return result

}

var arr0 = [1, 2, 3]

console.log(arr0.myMap(v => v + 1))

15. js实现checkbox全选以及反选

==================================================================================

反选

全选

1

2

3

16. 对原型链的理解?prototype上都有哪些属性

========================================================================================

在js里,继承机制是原型继承。继承的起点是 对象的原型(Object prototype)。

一切皆为对象,只要是对象,就会有 proto 属性,该属性存储了指向其构造的指针。

Object prototype也是对象,其 proto 指向null。

对象分为两种:函数对象和普通对象,只有函数对象拥有『原型』对象(prototype)。

prototype的本质是普通对象。

Function prototype比较特殊,是没有prototype的函数对象。

new操作得到的对象是普通对象。

当调取一个对象的属性时,会先在本身查找,若无,就根据 proto 找到构造原型,若无,继续往上找。最后会到达顶层Object prototype,它的 proto 指向null,均无结果则返回undefined,结束。

由 proto 串起的路径就是『原型链』。

通过prototype可以给所有子类共享属性

17. 为什么使用继承

=======================================================================

通常在一般的项目里不需要,因为应用简单,但你要用纯js做一些复杂的工具或框架系统就要用到了,比如webgis、或者js框架如jquery、ext什么的,不然一个几千行代码的框架不用继承得写几万行,甚至还无法维护

18. setTimeout时间延迟为何不准

==================================================================================

单线程, 先执行同步主线程, 再执行异步任务队列

19. 事件循环述,宏任务和微任务有什么区别?

===================================================================================

先主线程后异步任务队列

先微任务再宏任务

20. let const var作用域

================================================================================

块级作用域, 暂时性死区

21. 节流和防抖

=====================================================================

函数节流是指一定时间内js方法只跑一次。比如人的眨眼睛,就是一定时间内眨一次。这是函数节流最形象的解释。

// 函数节流 滚动条滚动

var canRun = true;

document.getElementById(“throttle”).onscroll = function(){

if(!canRun){

// 判断是否已空闲,如果在执行中,则直接return

return;

}

canRun = false;

setTimeout(function(){

console.log(“函数节流”);

canRun = true;

}, 300);

};

函数防抖是指频繁触发的情况下,只有足够的空闲时间,才执行代码一次。比如生活中的坐公交,就是一定时间内,如果有人陆续刷卡上车,司机就不会开车。只有别人没刷卡了,司机才开车。

// 函数防抖

var timer = false;

document.getElementById(“debounce”).onscroll = function(){

clearTimeout(timer); // 清除未执行的代码,重置回初始化状态

timer = setTimeout(function(){

console.log(“函数防抖”);

}, 300);

};

最后

大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
earTimeout(timer); // 清除未执行的代码,重置回初始化状态

timer = setTimeout(function(){

console.log(“函数防抖”);

}, 300);

};

最后

大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-EXPkSvvP-1713067408709)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值