跨業自學黨的第一次面試

Agoreal發表於2019-03-15

背景

我是一名二本師範院校的2018屆風景園林畢業生。

在大四經過一次景觀公司的實習之後,發現園林救不了中國(致敬魯迅),也不符合自己的內心,毅然決然走上了脫產自學 Web 前端的道路。

聽說“金三銀四”,遂我決定在3月開始尋找我的第一份前端工作。但沒想到,市場上缺乏的是有經驗、能獨立開發的工程師,而不是像我這種沒有經驗的菜鳥。我的心蒙上了一層冰冰涼的霜。

在拉鉤網簡歷被拒後,我都聲情並茂的請教了對方我的不足,其中一位回答了我“非科班基礎不夠”以及“無專案經驗”。我又聲淚俱下地長段論述,終究是求得了一次來之不易的面試機會。

2019年3月14日,是我第一次面試的日子。

過程

面試前

在地鐵上,我才發現我似乎沒有準備簡歷,所幸的是我提前約定時間一個小時到達了公司樓下,樓下正好有一間列印店。

上樓,發現大家似乎都趴在桌子上午休,還好HR沒有睡覺,不然我可能會站很久。

HR叫來一名程式猿小哥哥進入會議室,開始了面試。

趁小哥哥看我簡歷之際,HR問了我為啥轉專業呀,學了些啥呀Blablabla...

面試中

之後,小哥哥開始考我了。由於忘了錄音,我就說說我答的不好(不會)的這些問題。

Q: 非同步與同步的區別?

A: (支支吾吾答不上來,對這個的概念很模糊)。


Q: 實現垂直居中。

A: 我說了“margin:0 auto”,“text-align:center”,“flex”(扯了半天實際自己不會)。


Q: 說一下JSONP。

A: JSONP是利用 script 標籤可以跨域的特性實現跨域的。


Q: 具體是怎麼實現的呢?

A: 我只是知道這個,沒有具體去實現過。


Q: 普通函式與箭頭函式的區別?

A: 箭頭函式的 this 不能改變,箭頭函式的 this 是外層函式的 this 。


Q: 說一下localStorage、sessionStorage、cookie的區別。

A: 一個關閉瀏覽器就沒有了、一個還儲存著,而cookie儲存的很小。(回答的還是很模糊)


Q: 說一下有哪些選擇器?

A: getById、getByClass、getByTags、Selector(平時自動補全慣了,竟然一下忘了element和query)。


Q: 如何刪除一個節點?

A: innerHTML('')。(小哥哥很義正言辭的告訴我這是一個屬性,不是一個方法。指出我肯定是jQuery這種東西用多了)

這下搞的我很慌,明顯地答錯了一個很基礎的東西,這是不是我最後一個問題我都記不清了。我只記得HR告訴我:“好了就這樣,電話聯絡。”

面試後

這次面試給我潑了很大一盆涼水,但同時也知道了自己很大的不足,基礎的薄弱,面試的心態調整、事前的準備等。

我相信失敗只是成功的一部分,我還會回來的。

答案

非同步與同步的區別

程式裡面所有的任務,可以分成兩類:同步任務(synchronous)和非同步任務(asynchronous)。

同步任務是那些沒有被引擎掛起、在主執行緒上排隊執行的任務。只有前一個任務執行完畢,才能執行後一個任務。

非同步任務是那些被引擎放在一邊,不進入主執行緒、而進入任務佇列的任務。只有引擎認為某個非同步任務可以執行了(比如 Ajax 操作從伺服器得到了結果),該任務(採用回撥函式的形式)才會進入主執行緒執行。排在非同步任務後面的程式碼,不用等待非同步任務結束會馬上執行,也就是說,非同步任務不具有“堵塞”效應。

舉例來說,Ajax 操作可以當作同步任務處理,也可以當作非同步任務處理,由開發者決定。如果是同步任務,主執行緒就等著 Ajax 操作返回結果,再往下執行;如果是非同步任務,主執行緒在發出 Ajax 請求以後,就直接往下執行,等到 Ajax 操作有了結果,主執行緒再執行對應的回撥函式。

實現垂直居中

蒐集資料總結了水平垂直居中各8個共16種 CSS 居中方法。點選瀏覽

JSONP

JSONP 是伺服器與客戶端跨源通訊的常用方法。最大特點就是簡單適用,老式瀏覽器全部支援,服務端改造非常小。

它的基本思想是,網頁通過新增一個<script>元素,向伺服器請求 JSON 資料,這種做法不受同源政策限制;伺服器收到請求後,將資料放在一個指定名字的回撥函式裡傳回來。

首先,網頁動態插入<script>元素,由它向跨源網址發出請求。

function addScriptTag(src) {
  var script = document.createElement('script');
  script.setAttribute("type","text/javascript");
  script.src = src;
  document.body.appendChild(script);
}

window.onload = function () {
  addScriptTag('http://example.com/ip?callback=foo');
}

function foo(data) {
  console.log('Your public IP address is: ' + data.ip);
};
複製程式碼

上面程式碼通過動態新增<script>元素,向伺服器example.com發出請求。注意,該請求的查詢字串有一個callback引數,用來指定回撥函式的名字,這對於 JSONP 是必需的。

伺服器收到這個請求以後,會將資料放在回撥函式的引數位置返回。

foo({
  "ip": "8.8.8.8"
});
複製程式碼

由於<script>元素請求的指令碼,直接作為程式碼執行。這時,只要瀏覽器定義了foo函式,該函式就會立即呼叫。作為引數的 JSON 資料被視為 JavaScript 物件,而不是字串,因此避免了使用JSON.parse的步驟。

Cookie, sessionStorge, localStorage

Cookie

Cookie 是伺服器儲存在瀏覽器的一小段文字資訊,每個 Cookie 的大小一般不能超過4KB。瀏覽器每次向伺服器發出請求,就會自動附上這段資訊。

Cookie 主要用來分辨兩個請求是否來自同一個瀏覽器,以及用來儲存一些狀態資訊。它的常用場合有以下一些。

  • 對話(session)管理:儲存登入、購物車等需要記錄的資訊。
  • 個性化:儲存使用者的偏好,比如網頁的字型大小、背景色等等。
  • 追蹤:記錄和分析使用者行為。

sessionStorage, localStorage

Storage 介面用於指令碼在瀏覽器儲存資料。兩個物件部署了這個介面:window.sessionStorage和window.localStorage。

sessionStorage儲存的資料用於瀏覽器的一次會話(session),當會話結束(通常是視窗關閉),資料被清空;localStorage儲存的資料長期存在,下一次訪問該網站的時候,網頁可以直接讀取以前儲存的資料。除了儲存期限的長短不同,這兩個物件的其他方面都一致。

儲存的資料都以“鍵值對”的形式存在。也就是說,每一項資料都有一個鍵名和對應的值。所有的資料都是以文字格式儲存。

cookie 與 storage 比較

同:

  • 儲存資料
  • 受同域限制

異:

  • coolkie 最多 4k
  • storage 最多幾M(目前,每個域名的儲存上限視瀏覽器而定,Chrome 是 2.5MB,Firefox 和 Opera 是 5MB,IE 是 10MB)

箭頭函式

箭頭函式有幾個使用注意點。

(1)函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。

(2)不可以當作建構函式,也就是說,不可以使用new命令,否則會丟擲一個錯誤。

(3)不可以使用arguments物件,該物件在函式體內不存在。如果要用,可以用 rest 引數代替。

(4)不可以使用yield命令,因此箭頭函式不能用作 Generator 函式。


希望幫助到了你。

歡迎討論。

٩(๑❛ᴗ❛๑)۶

相關文章