行业严峻的2023年结束时代,也迎来了紧张的2024年,大家都说2024年将会变得大不相同,将会是新的时代,也将会是两极分化的时代,好的更好,不好的一直走下坡路,大家都相信下一年会更好,不如更相信明天自己会更好,回归正题,说这个计算机行业,其实最近两年会发现,计算机行业的门槛只会越来越高,技能要求也会变得越来越严格,所以各厂在面试这个方面也是大有提升,你以为你会一点技术,就能上了,不不不,现在面试看的不仅仅是技能,更多的是个人的表达能力,个人的思维能力,大家会发现,很多面试题,都是长篇大论,根本找不到重点,不说这个又感觉会面到这个,说了吧感觉会很多余,所以我们不得不把面试这个环节注重起来,好好搞一搞面试题,将面试的东西重新捡起来。
首先,要明白两件事情:
1.面试是面试
2.工作是工作
为什么这么说,其实真正面试通过并入职的伙伴们都知道,面试的东西,压根用不到,工作中谁会在写项目的,嘶…….这个promise怎么用到,不行我得研究研究底层,vue这个双向数据绑定,用着还不错,搞搞源码,搞搞原理,其实出发点没毛病,能力的提升就是多去研究一些底层的逻辑,但是前提是你得进的进去公司啊,所以两者关系也有,但不大,所以今天咱们以面试题为主,讲讲如何将自己的面试题答案讲出来,让面试官哦……这小伙子真的懂,广度也还可以,深度也还不错,就他了就他了,废话不多讲,咱们今天就以前端面试题最火的 promise 为例,好好剖析一下怎么去讲解面试题。
面试官问你:谈一下什么是 Promise?
小伙伴:啊? 0.0 promise promise 这…解决异步……这个……,然后捂嘴一笑,嘿嘿,我不会
1. 面对一道你很懵的问题,不要说自己不会,就按照自己的理解,讲就完事了,如果实在是那种难为人的题,你可以好好整理一下你的说辞。
比如:面试官,针对这个问题,其实之前也没遇到过,(这里可不是说的promise,打个比方),但我有一些自己的看法,讲一下自己的想法,然后可以反问面试官,针对这个问题,面试官你们通常怎么解决的,一定要互动,抱着一颗学徒的心,就算面试失败了也能学到东西.
2. 语速一定要放慢,放慢语速能够提供给自己更多的思考时间,不要着急回答一个问题,可以先思考一下,总结一下自己的说词,然后再讲。
3. 眼神交流,面试的时候一定要和面试官有眼神交流,回答问题的时候,时不时问一句,对不对,是吧,哎,面试官点头,对,是的,你看,这样的互动效果不是加深了你在面试官心中的印象了吗,避免回答的时候,左顾右盼,低着头看桌子,多余的小动作,自然一些。
4. 心态一定要好,很多小伙伴面试一两家,就感觉自己啥都不会,放弃自己了一样,感觉自己不行,我想说,不要怂,面试不过再换下家呗,那有啥,讲你的就完事了。
5. 针对第四条的补充,虽然这么说,但是还是要学会总结自己,不仅是总结面试过的面试题,还要总结面试的过程,回想一下面试的过程,自己的回答,(实在记不住,录个音回去听,当然可不能问人家能不能录音),约不到面试,就去找找简历的问题,面试不过就去总结面试中的问题,不断总结反思,对自己的面试一定会有提升。
讲解的方式可以是 1 w + 1h + 1s 分别是 what(是什么--概念) how(怎么用--使用方法) scene(什么时候用---场景) (一般 w在前, h 和 s 可以调换位置)
场景很重要,不仅能够加深你的印象,而且能够让你对这道面试题更加有掌控力.
(首先,就是 what :)
Promise 是 JavaScript 中一种用于处理异步操作的方式。目的就是用来解决回调地狱(Callback Hell)问题,使异步代码更易读、更易管理。
(接着可以 scene:)
使用场景:(当然可以举其他的例子)
比如,我们前端需要向后端发送多次请求,从第二次开始每次的请求需要用到上一次请求的结果作为参数,在没有promise之前,我们只能通过层层嵌套的回调函数来完成这样的效果,但这种使用层层嵌套的回调函数,代码的可读性极差,而且不利于后期的代码维护,而promise的出现,它可以解决像这样的层层嵌套的回调函数又称回调地狱的问题,并提供更好的代码可读性和可维护性。
(最后就是 how:)
我们通过可以通过两种方式使用 Promise:
第一种方式就是创建实例对象的方式 new Promise,它可以接收一个函数参数,这个函数参数有两个参数,也是函数,分别是 resolve、reject,分别表示成功状态,和失败状态, -----这里讲到了状态,开始引入状态的知识:
提到状态,promise一共有三种状态,分别是:
1、Pending(进行中): 初始状态,表示异步操作正在进行中,但尚未完成。
2、Fulfilled(已完成): 意味着异步操作已经成功完成,返回了一个值。
3、Rejected(已失败): 意味着异步操作失败,返回了一个错误。
需要注意的是:----状态的注意事项可以讲
状态不可逆转: 一旦状态从 Pending 转变为 Fulfilled 或 Rejected,就不能再改变为其他状态。-------英语不好的伙伴可以直接说成成功和失败
(接着就是 how 怎么用这些状态)
当然,Promise 也提供给我们一些实例方法,用于接收失败和成功之后返回的数据,比如 then()方法------这里引入了 then 方法,开始讲解 then方法
1.then方法能够接收两个函数参数:
1、Resolve(可选): 当 Promise 状态变为 Fulfilled(成功)时执行的回调函数。(scene)在我们日常的开发中,我们向后端发送请求后,通过调用这个回调函数来拿到返回的结果
2、Reject(可选): 当 Promise 状态变为 Rejected(失败)时执行的回调函数。(scene)我们可以通过这个方法来输出错误的结果,或则手动抛出错误来帮助我们快速找到报错的原因,
同时, then 方法可以进行链式调用,可以通过链式调用,来串联多个异步操作。
就比如:(scene)当我们使用 fetch 方法发送请求的时候,需要使用 then 方法的链式调用,拿到我们想要的数据,当然我们常用的方法还有 catch 方法,主要用于捕获错误 -------成功引入 catch 方法
2.catch方法接收一个函数参数:
Reject()----- 当 Promise 状态变为 Rejected(失败)时执行的回调函数。
比如:(scene)一般我在使用 promise 的时候,可以在 promise 对象的末尾调用该方法捕获中间出现的一些错误,
(可以用一些连贯词,连接你的回答,不能总是 然后 然后 然后)
对于 finally 方法,在真实开发,不是很常用,它的执行时机是无论 Promise 最终状态如何,都会执行的回调函数,可以用来关闭一些提示语句,或者关闭加载的一些loading, -------不重要的东西一句话带过
第二种使用 promise 的方式就是使用提供的静态方法,
1、Promise.resolve(): (what)直接返回一个成功状态的Promise 对象。如果传递的值是一个 Promise,则直接返回该 Promise;
2、Promise.reject(): 直接返回一个失败状态的Promise 对象。
如果我们想要去监听多个 promise 对象的话,也可以使用另外的两种静态方法-----Promise.all()、Promise.race() -------不断引入
这两个方法都是用来(scene)监听多个promise对象的状态的,它们之间的区别就是
promise.all()(what)所监听的多个promise的状态都成功了,才会返回一个成功的promise,只要有一个失败就会返回失败状态的promise。
而Promise.race()(what)它的结果取决于第一个出结果的promise的状态,如果第一个结果成功则结果成功,反之则失败。
在Promise.race()方法中,(scene)我们可能会从不同的服务器获取数据,可能会因为网络等原因,数据获取的时间会有偏差,导致产出一些小问题,这个时候我们可以使用这个方法来解决这种因网络延迟造成的一些小问题。
现在我们解决这种异步问题通常使用:async、await ---------提升广度,加分项
async 函数是 Promise 的一种语法糖,它使得异步代码更像同步代码。在 async 函数中,可以使用 await关键字等待一个Promise 解决,并通过 try-catch 语句处理可能的拒绝。
当然我们平时也可以去[promiseA](https://promisesaplus.com/)+规范去深入的了解promise ---------提到就加分,面试官都不一定知道
这样带着颜色啥的看起来很乱对吧,我们不妨去掉那些多余的东西,试着读一下下面的内容!!
面试官:谈一下什么是 Promise?
小伙伴的回答:
Promise 是 JavaScript 中一种用于处理异步操作的方式。目的就是用来解决回调地狱(Callback Hell)问题,使异步代码更易读、更易管理。
比如,我们前端需要向后端发送多次请求,从第二次开始每次的请求需要用到上一次请求的结果作为参数,在没有promise之前,我们只能通过层层嵌套的回调函数来完成这样的效果,但这种使用层层嵌套的回调函数,代码的可读性极差,而且不利于后期的代码维护,而promise的出现,它可以解决像这样的层层嵌套的回调函数又称回调地狱的问题,并提供更好的代码可读性和可维护性。
我们通过可以通过两种方式使用 Promise:
第一种方式就是创建实例对象的方式 new Promise,它可以接收一个函数参数,这个函数参数有两个参数,也是函数,分别是 resolve、reject,分别表示成功状态,和失败状态,提到状态,promise一共有三种状态,分别是:
1、Pending(进行中): 初始状态,表示异步操作正在进行中,但尚未完成。
2、Fulfilled(已完成): 意味着异步操作已经成功完成,返回了一个值。
3、Rejected(已失败): 意味着异步操作失败,返回了一个错误。
需要注意的是状态不可逆转: 一旦状态从 Pending 转变为 Fulfilled 或 Rejected,就不能再改变为其他状态。
当然,Promise 也提供给我们一些实例方法,用于接收失败和成功之后返回的数据,比如 then()方法
1.then方法能够接收两个函数参数:
1、Resolve(可选): 当 Promise 状态变为 Fulfilled(成功)时执行的回调函数。在我们日常的开发中,我们向后端发送请求后,通过调用这个回调函数来拿到返回的结果
2、Reject(可选): 当 Promise 状态变为 Rejected(失败)时执行的回调函数。我们可以通过这个方法来输出错误的结果,或则手动抛出错误来帮助我们快速找到报错的原因,
同时, then 方法可以进行链式调用,可以通过链式调用,来串联多个异步操作。
就比如:当我们使用 fetch 方法发送请求的时候,需要使用 then 方法的链式调用,拿到我们想要的数据,当然我们常用的方法还有 catch 方法,主要用于捕获错误.
2.catch方法接收一个函数参数:
Reject()----- 当 Promise 状态变为 Rejected(失败)时执行的回调函数。
比如:一般我在使用 promise 的时候,可以在 promise 对象的末尾调用该方法捕获中间出现的一些错误,
对于 finally 方法,在真实开发,不是很常用,它的执行时机是无论 Promise 最终状态如何,都会执行的回调函数,可以用来关闭一些提示语句,或者关闭加载的一些loading,
第二种使用 promise 的方式就是使用提供的静态方法,
1、Promise.resolve(): 直接返回一个成功状态的Promise 对象。如果传递的值是一个 Promise,则直接返回该 Promise;
2、Promise.reject(): 直接返回一个失败状态的Promise 对象。
如果我们想要去监听多个 promise 对象的话,也可以使用另外的两种静态方法-----Promise.all()、Promise.race() ,它们之间的区别就是
promise.all()所监听的多个promise的状态都成功了,才会返回一个成功的promise,只要有一个失败就会返回失败状态的promise。
而Promise.race()它的结果取决于第一个出结果的promise的状态,如果第一个结果成功则结果成功,反之则失败。
在Promise.race()方法中,我们可能会从不同的服务器获取数据,可能会因为网络等原因,数据获取的时间会有偏差,导致产出一些小问题,这个时候我们可以使用这个方法来解决这种因网络延迟造成的一些小问题。
现在我们解决这种异步问题通常使用:async、await
async 函数是 Promise 的一种语法糖,它使得异步代码更像同步代码。在 async 函数中,可以使用 await关键字等待一个Promise 解决,并通过 try-catch 语句处理可能的拒绝。
当然我们平时也可以去[promiseA](https://promisesaplus.com/)+规范去深入的了解promise
现在是不是感觉思路清晰的多,就照着这个方式总结面试题,嘎嘎有效果,讲的思路贼清晰,一个很重要的点就是一定用自己的话去讲,不要去死记硬背,理解最重要,所以没有找到工作的小伙伴,在家也要好好整理面试题,为明年的金三银四搞一把,后续还会总结其他的面试题,大家加油哦!!!