vue菜鳥從業記:沒準備好的面試,那叫尬聊

閏土大叔發表於2018-07-10

最近我的朋友王小閏參加了一場面試,在他填寫簡歷表的時候,排在他前面的應聘者正在旁邊鄰桌接受來自面試官的檢驗。

王小閏邊寫邊想,這不就是一會兒要面試自己的前端leader麼,現在面試官提問的一些面試題會不會就是待會兒要問自己的問題? 想到這,我朋友王小閏不自覺地豎起了耳朵聽,借鑑下別人回答問題的經驗,保不齊自己一會兒要套用一下。

不聽不知道,一聽嚇一跳。沒準備好的面試,那叫一個尬聊。

首先,面試開場白總缺少不了自我介紹,一方面是面試官想聽聽你對自己的介紹,順便有時間看看簡歷上的描述,是否與口述一致。另一方面就是看看你簡歷上做過什麼專案,用到了哪些技術棧,一會兒好提問你。

其實,最重要的是為了緩解兩人的緊張,以開啟局面。當然,如果坐在對面的面試官是第一次面試別人,也免不了會緊張。

那哥們自我介紹完畢之後,面試官問了幾個問題,都比較有針對性,聽得出來這家公司對資料互動繫結這一塊還是比較重視的。

比如面試官上來就問,你在之前公司專案裡用過ajax嗎?

只聽那哥們很自信地說,用過的,上家公司做的是前後端分離的vue專案,經常使用ajax獲取後臺資料,然後渲染到頁面上。

面試官追問:那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,我來了我們公司一定捲起袖子好好幹,幹出自己的風采,體現出自己的價值!!!反正他說了一大堆誠懇的話。

其實後來這家公司沒有錄用他,原因不詳。

面試官提的某些問題,我朋友王小閏也不是很瞭解。於是他趕緊拿出手機準備百度一下,手機一掏出來,面試官回頭說:簡歷表填好了吧,輪到你了。

此時,王小閏只想攤手說一句:好尷尬~

不過還好我比較真誠,有一說一,有二說二,從不尬聊。

面試寫到這兒,也該做個總結了。

首先,面試之前,一定要做好準備。就算沒準備好也沒關係,當著面試官的面一定要實話實說,如果你不知道的東西千萬別瞎說,別跟面試官尬聊或者是較真,面試官之所以能坐在那個位置由他來面試別人,肯定也是身經百戰,見過很多場面的人物,能看出來你是否在亂講,從你一張嘴就基本能判斷出你對某個技術點是否熟悉,或者是熟練到了哪種層次,浮於表面的理解還是深入原理的探索。

當然,也不要因為這次面試沒準備好,白白浪費了一次工作機會而氣餒,換個角度想想,多面試幾家多踩幾個坑,對你之後的面試是有好處的。吃一塹長一智,面試結束後,回去把不懂的不會的問題,都在網上查查,瞭解清楚,深入研究下它的原理。等到下一次面試,如果問同樣的或者類似的問題,你就胸有成竹了。

番外:這輪面試的結果是,經過激烈的崗位競爭,王小閏被那家公司給錄取了,感謝前面那個哥們為自己踩的坑。同行也是競爭對手,王小閏不是贏了競爭對手,而是贏了昨天還不夠努力的自己。

柳傳志曾經說過,小公司裡做事,大公司裡做人。

最後祝大家都能找到適合自己的好工作!


更多文章我會第一時間更新在公眾號<閏土大叔>裡面,歡迎關注~

vue菜鳥從業記:沒準備好的面試,那叫尬聊

相關文章