最近个人朋友王小闰参加了一场面试,在他填写简历表的时候,排在他前面的应聘者正在旁边邻桌接受来自面试官的检验。前端
王小闰边写边想,这不就是一下子要面试本身的前端leader么,如今面试官提问的一些面试题会不会就是待会儿要问本身的问题? 想到这,我朋友王小闰不自觉地竖起了耳朵听,借鉴下别人回答问题的经验,保不齐本身一下子要套用一下。vue
不听不知道,一听吓一跳。没准备好的面试,那叫一个尬聊。面试
首先,面试开场白总缺乏不了自我介绍,一方面是面试官想听听你对本身的介绍,顺便有时间看看简历上的描述,是否与口述一致。另外一方面就是看看你简历上作过什么项目,用到了哪些技术栈,一下子好提问你。ajax
其实,最重要的是为了缓解两人的紧张,以打开局面。固然,若是坐在对面的面试官是第一次面试别人,也免不了会紧张。后端
那哥们自我介绍完毕以后,面试官问了几个问题,都比较有针对性,听得出来这家公司对数据交互绑定这一块仍是比较重视的。浏览器
好比面试官上来就问,你在以前公司项目里用过ajax吗?安全
只听那哥们很自信地说,用过的,上家公司作的是先后端分离的vue项目,常用ajax获取后台数据,而后渲染到页面上。bash
面试官追问:那ajax默认是同步仍是异步?服务器
问到这个问题的时候,前面那个哥们却一直在扯ajax的 get 和 post 方法,听的王小闰后背直冒冷汗,这么尬聊好么?知之为知之,不知为不知啊,哥们~前后端分离
面试以前千万要准备好,否则会闹笑话的。
话说回来,这个问题你想到应该怎么回答才能令面试官满意了吗?
通常前端老司机都是这么回答的:AJAX中根据async的值不一样分为同步(async = false)和异步(async = true)两种执行方式;在W3C的教程中推荐使用异步执行。
默认状况下async是true,也就是异步。
其实面试官看得出来他答非所问,可是并无揭穿他,而是继续提问下一个问题。
面试官接着问:Ajax中何时用同步,何时用异步?
想要回答这个问题,首先要缕清思路,先要了解什么是同步请求,什么是异步请求,而后才是使用场景的分析。
先来听听职场老司机是如何回答的吧~
一.什么是同步请求:(false)
同步请求便是当前发出请求后,浏览器什么都不能作,必须得等到请求完成返回数据以后,才会执行后续的代码,至关因而排队,前一我的办理完本身的事务,下一我的才能接着办。也就是说,当JS代码加载到当前AJAX的时候会把页面里全部的代码中止加载,页面处于一个假死状态,当这个AJAX执行完毕后才会继续运行其余代码页面解除假死状态(即当ajax返回数据后,才执行后面的function)。
二.什么是异步请求:(true)
异步请求就当发出请求的同时,浏览器能够继续作任何事,Ajax发送请求并不会影响页面的加载与用户的操做,至关因而在两条线上,各走各的,互不影响。
通常默认值为true,异步。异步请求能够彻底不影响用户的体验效果,不管请求的时间长或者短,用户都在专心的操做页面的其余内容,并不会有等待的感受。
下面来区别一下同步和异步有什么不一样:
异步:在异步模式下,当咱们使用AJAX发送完请求后,可能还有代码须要执行。这个时候可能因为种种缘由致使服务器尚未响应咱们的请求,可是由于咱们采用了异步执行方式,全部包含AJAX请求代码的函数中的剩余代码将继续执行。若是咱们是将请求结果交由另一个JS函数去处理的,那么,这个时候就比如两条线程同时执行同样。
同步:在同步模式下,当咱们使用AJAX发送完请求后,后续还有代码须要执行,咱们一样将服务器响应交由另外一个JS函数去处理,可是这时的代码执行状况是:在服务器没有响应或者处理响应结果的JS函数尚未处理完成return时,包含请求代码的函数的剩余代码是不可以执行的。就比如单线程同样,请求发出后就进入阻塞状态,直到解除阻塞,余下的代码才会继续执行。
有人说:既然异步这么好,那所有都用异步好了,同步存在还有什么意义?
那么,同步适用于一些什么状况呢?
咱们能够想一下,同步是一步一步来操做,等待请求返回的数据,再执行下一步,那么必定会有一些状况,只有这一步执行完,拿到数据,经过获取到这一步的数据来执行下一步的操做。这是异步没有办法实现的,所以同步的存在必定有他存在的道理。
正如这世界上大部分事物发展的规则同样,存在即合理。
如何选择同步仍是异步模式?要回答这一问题,咱们能够经过下面可能出现的问题来回答:
咱们在发送AJAX请求后,还须要继续处理服务器的响应结果,若是这时咱们使用异步请求模式同时未将结果的处理交由另外一个JS函数进行处理。这时就有可能发生这种状况:异步请求的响应尚未到达,函数已经执行完了return语句了,这时将致使return的结果为空字符串。
如此回答,才能体现出你思惟逻辑缜密,以面试官抛出来的问题做为引子,以点带面深刻阐述一下,既回答了面试官的问题,又展现了你思考问题的深度。
这也算是一个面试技巧,不仅仅要回答问题,还要说出你对这个概念的全方位的理解,如此才能在面试中加分。
很显然,这个问题那哥们也是强行尬聊,回答的模棱两可,没有说到点儿上。
为了避免冷场,面试官继续拷问:如何设置ajax为同步?
此时那哥们心理活动确定在想,mmp,看来此次面试要栽倒在ajax上面了。这个问题思索了半天,知道躲不过了,而后前面那哥们直接委婉地说,我以前在公司项目里使用到ajax的地方比较少,没有作太多深刻的了解。
其实这个问题很简单,只要把async字段的value值更改为false就OK了。下面的代码片断形象又生动地阐述了ajax同步的机制。
console.log(1);
$.ajax({
url: '',
async: false,
success: function() {
console.log(2);
}
});
console.log(3);
复制代码
面试讲到这儿,你须要记住的几点:
1.Jquery中的ajax在默认不写async状况下,请求为异步请求;即:async:true;
2.若是项目中在作一项操做以前要进行ajax的验证,不管同步或者异步,都必须在验证经过后,方才进行其余操做。
3.熟练应用error参数,关注返回来的异常信息,从而断定程序的错误位置;
4.项目前端作验证,后端也作相应的验证;前端作验证是为了减小服务器压力和增长用户体验,后端作验证才是为了安全。
还有,我想对前面面试的那哥们说点个人想法:
若是哪一个面试题不会,或者不清楚,就直接告诉面试官,很差意思这个我不太清楚,而后虚心求教,这样起码能落个真诚、好学的好印象。若是你胡编乱造,只会下降你在面试官心中的形象,这样是会减分的。
因此,你对ajax真的了解吗?
面试快结束的时候,面试官还问了一些关于vue的问题,这哥们回答的还行。
最后,面试官问那个应聘者哥们,你有什么想问个人吗?
那哥们吞吞吐吐地说,其实也没什么想问的,只要贵公司能给我发offer,我来了咱公司必定卷起袖子好好干,干出本身的风采,体现出本身的价值!!!反正他说了一大堆诚恳的话。
其实后来这家公司没有录用他,缘由不详。
面试官提的某些问题,我朋友王小闰也不是很了解。因而他赶忙拿出手机准备百度一下,手机一掏出来,面试官回头说:简历表填好了吧,轮到你了。
此时,王小闰只想摊手说一句:好尴尬~
不过还好我比较真诚,有一说一,有二说二,从不尬聊。
面试写到这儿,也该作个总结了。
首先,面试以前,必定要作好准备。就算没准备好也不要紧,当着面试官的面必定要实话实说,若是你不知道的东西千万别瞎说,别跟面试官尬聊或者是较真,面试官之因此能坐在那个位置由他来面试别人,确定也是身经百战,见过不少场面的人物,能看出来你是否在乱讲,从你一张嘴就基本能判断出你对某个技术点是否熟悉,或者是熟练到了哪一种层次,浮于表面的理解仍是深刻原理的探索。
固然,也不要由于此次面试没准备好,白白浪费了一次工做机会而气馁,换个角度想一想,多面试几家多踩几个坑,对你以后的面试是有好处的。吃一堑长一智,面试结束后,回去把不懂的不会的问题,都在网上查查,了解清楚,深刻研究下它的原理。等到下一次面试,若是问一样的或者相似的问题,你就成竹在胸了。
番外:这轮面试的结果是,通过激烈的岗位竞争,王小闰被那家公司给录取了,感谢前面那个哥们为本身踩的坑。同行也是竞争对手,王小闰不是赢了竞争对手,而是赢了昨天还不够努力的本身。
柳传志曾经说过,小公司里作事,大公司里作人。
最后祝你们都能找到适合本身的好工做!
更多文章我会第一时间更新在公众号<闰土大叔>里面,欢迎关注~