記一次阿里電話面試| 掘金技術徵文

rocky191發表於2018-03-23

當天下午看到了招聘需求,就託人進行了內推,下班前收到郵件說會在7個工作日內聯絡進行面試。沒想到在回家路上就接到了阿里面試官的電話,說要進行電話面試。由於當時在外面,不太方便,就告訴面試官10分鐘後回到家進行面試,面試官答應了,感謝面試官。 10分鐘面試正式開始,其實我已經戴好耳機準備好了,哈哈。

  • 自我介紹,簡單聊聊過往專案用到了那些技術,有哪些技術難點,是如何解決的?

  • var和let、const的區別,為什麼會產生這種區別?
    var作為ES5中定義變數的方式,會存在變數提升的問題,作用域也不明晰。ES6引進了let和const。let用來定義變數,const用來定義常量,必須先定義後使用,不存在變數提升的問題。

  • 如何實現一個塊在瀏覽器中上下左右垂直居中?有幾種方式?
    (1)絕對定位

.parent{
    position:relative;
}
.child{
    position:absolute;
    top:50%;
    left:50%;
    width:200px;
    height:200;
    margin-left:-100px;
    margin-top:-100px;
}
複製程式碼

(2)同樣定位

.parent{
    position:relative;
}
.child{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
}
複製程式碼

(3)定位

.parent{
    position:relative;
}
.child{
    position:absolute;
    top:0;
    left:0;
    bottom:0;
    right:0;
    margin:auto;
}
複製程式碼

(4)當要被居中的元素是inline或者inline-block元素

.parent{
    display:table-cell;
    text-align:center;
    vertical-align:middle;
}
複製程式碼

(5)flex佈局

.parent{
    display:flex;
    justify-content:center;
    align-items: center;
}
複製程式碼
  • 你是如何看待模組化的?cmd和amd的區別?除了amd和cmd還有哪些載入方式?node載入模組的方式?commonJs?ES6的載入方式。
    答:1、AMD推崇依賴前置,在定義模組的時候就要宣告其依賴的模組 2、CMD推崇就近依賴,只有在用到某個模組的時候再去require 這種區別各有優劣,只是語法上的差距,而且requireJS和SeaJS都支援對方的寫法.AMD和CMD最大的區別是對依賴模組的執行時機處理不同,注意不是載入的時機或者方式不同。都是非同步載入。詳細的解釋從網上找了一篇文章談談模組化的理解
  • 瀏覽器位址列輸入網址後會發生什麼?具體的流程有哪些?
    答:
    • 1.瀏覽器會開啟一個執行緒來處理這個請求,對 URL 分析判斷如果是 http 協議就按照 Web 方式來處理;
    • 2.呼叫瀏覽器核心中的對應方法,比如 WebView 中的 loadUrl 方法;
    • 3.通過DNS解析獲取網址的IP地址,設定 UA 等資訊發出第二個GET請求;
    • 4.進行HTTP協議會話,客戶端傳送報頭(請求報頭);
    • 5.進入到web伺服器上的 Web Server,如 Apache、Tomcat、Node.JS 等伺服器;
    • 6.進入部署好的後端應用,如 PHP、Java、JavaScript、Python 等,找到對應的請求處理;
    • 7.處理結束回饋報頭,此處如果瀏覽器訪問過,快取上有對應資源,會與伺服器最後修改時間對比,一致則返回304;
    • 8.瀏覽器開始下載html文件(響應報頭,狀態碼200),同時使用快取;
    • 9.文件樹建立,根據標記請求所需指定MIME型別的檔案(比如css、js),同時設定了cookie;
    • 10.頁面開始渲染DOM,JS根據DOM API操作DOM,執行事件繫結等,頁面顯示完成。

另外也可以這樣回答:
瀏覽器根據請求的URL交給DNS域名解析,找到真實IP,向伺服器發起請求;伺服器交給後臺處理完成後返回資料,瀏覽器接收檔案(HTML、JS、CSS、圖象等);瀏覽器對載入到的資源(HTML、JS、CSS等)進行語法解析,建立相應的內部資料結構(如HTML的DOM);載入解析到的資原始檔,渲染頁面,完成。

  • grunt、gulp、webpack的區別及優點和缺點

  • less是否可以進行計算?可以

  • 瀏覽器的核心、組成部分?

  • Git中reset和rebase的區別?
    Git常用的命令,回撤的命令是哪個? git revert commitID,rebase合併提交歷史,reset撤銷最近提交。

  • 常見的瀏覽器相容方式有哪些?遇到過哪些相容問題?

  • 變數的提升?函式宣告和函式表示式的區別

//函式宣告
function A(){
    ....
}
//函式表示式
var change=function(){
    ...
}
複製程式碼
  • flex的深層原理?相容方式有哪些?
  • 跨域問題的解決方式,原理?
    (1)CORS,需要伺服器設定header:Access-Control-Allow-Origin
    (2)jsonp,需要目標伺服器配合一個callback函式
    (3)postMessage+iframe,需要目標伺服器或者目標頁面寫一個postMessage,主要側重於前端通訊。
    (4)nginx反向代理,需要搭建一個Nginx伺服器,用於轉發請求。
    (5)window.name+iframe,需要目標伺服器響應window.name
    (6)window.location.hash+iframe同樣需要目標伺服器處理。

好多問題記不太清了,來來回回的聊了一個小時左右,第一次電話面試居然這麼久,面試官辛苦了,面試完都晚上八點多了,這算不算阿里的加班呢?哈哈

有的答案可能不太準確,希望大家輕噴。
掘金技術證文活動連結:juejin.im/post/5aaf2a…

相關文章