面完給我的總體感覺,要求你掌握的不僅有廣度,更重要的是深度。我準備的爛大街的面試題沒怎麼問,可能自己欠缺的東西還比較多,不斷學習,不斷進步,再奶自己一口,fighting!!!
將面試官問的問題回憶總結如下:
關於框架的問題
框架用過哪些,感覺他們不只需要熟練運用,更看重理解的深度,比如要懂原始碼,react中diff演算法的思想這些,懂原理並能對效能做一些優化和提升,這樣的層級似乎才是他們想要的。
node如何開啟一個http服務
這個我沒回答上來,一下子忘記了,之前學過一點node.js的,只記得好像引入了什麼模組,但就是記不起具體怎麼實現了。參考部落格,建立一 個最簡單的http伺服器如下:
// 引入內建http模組
var http = require('http');
// 建立一個簡單伺服器,訪問http://127.0.0.1:1337/,顯示Hello World
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
複製程式碼
CSS3動畫的實現方式有哪些,動手寫一下將一個div在1s內移動300px
當時只回答上來了有transition和animation動畫兩種方式,transition過渡動畫只定義初始和最終狀態,而animation動畫可以逐幀設定。然後面試官接著讓我手寫一下將一個div在1s內移動300px,根本記不清具體的寫法了,胡亂亂的寫一通還是怪自己不熟練。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style type="text/css">
/* transition屬性動畫結合transform變化屬性,實現元素移動一段距離的動畫 */
#transitonDiv:hover {
transition: all 1s ease-in-out;
-webkit-transition: all 1s ease-in-out;
-moz-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transform: translateX(300px);
-ms-transform: translateX(300px);
-moz-transform: translateX(300px);
-webkit-transform: translateX(300px);
-o-transform: translateX(300px);
}
/* 通過animation屬性,實現逐幀動畫 */
#animationDiv:hover {
animation: animName 1s ease-in-out;
-webkit-animation: animName 1s ease-in-out;
-moz-animation: animName 1s ease-in-out;
-o-animation: animName 1s ease-in-out;
}
/* 定義關鍵幀 */
@keyframes animName {
0% {
transform: translateX(0px);
}
30% {
transform: translateX(100px);
}
60% {
transform: translateX(200px);
}
100% {
transform: translateX(300px);
}
}
</style>
</head>
<body>
<div id="transitonDiv" style="width:40px;height:40px;background-color:red;"></div>
<div id="animationDiv" style="width:40px;height:40px;background-color:green;"></div>
</body>
</html>
複製程式碼
DNS解析過程?若是新申請的域名如何查詢DNS?
伺服器端DNS查詢參考部落格DNS解析過程詳解。
DNS是應用層協議,事實上他是為其他應用層協議工作的,包括不限於HTTP和SMTP以及FTP,用於將使用者提供的主機名解析為ip地址。
具體過程如下:
(1)瀏覽器快取: 當使用者通過瀏覽器訪問某域名時,瀏覽器首先會在自己的快取中查詢是否有該域名對應的IP地址(若曾經訪問過該域名且沒有清空快取便存在);
(2)系統快取: 當瀏覽器快取中無域名對應IP則會自動檢查使用者計算機系統Hosts檔案DNS快取是否有該域名對應IP;
(3)路由器快取: 當瀏覽器及系統快取中均無域名對應IP則進入路由器快取中檢查,以上三步均為客戶端的DNS快取;
(4)ISP(網際網路服務提供商)DNS快取: 當在使用者客服端查詢不到域名對應IP地址,則將進入ISP DNS快取中進行查詢。比如你用的是電信的網路,則會進入電信的DNS快取伺服器中進行查詢;(或者向網路設定中指定的local DNS進行查詢,如果在PC指定了DNS的話,如果沒有設定比如DNS動態獲取,則向ISP DNS發起查詢請求)
(5)根域名伺服器: 當以上均未完成,則進入根伺服器進行查詢。全球僅有13臺根域名伺服器,1個主根域名伺服器,其餘12為輔根域名伺服器。根域名收到請求後會檢視區域檔案記錄,若無則將其管轄範圍內頂級域名(如.com)伺服器IP告訴本地DNS伺服器;
(6)頂級域名伺服器: 頂級域名伺服器收到請求後檢視區域檔案記錄,若無則將其管轄範圍內主域名伺服器的IP地址告訴本地DNS伺服器;
(7)主域名伺服器: 主域名伺服器接受到請求後查詢自己的快取,如果沒有則進入下一級域名伺服器進行查詢,並重復該步驟直至找到正確記錄;
(8)儲存結果至快取: 本地域名伺服器把返回的結果儲存到快取,以備下一次使用,同時將該結果反饋給客戶端,客戶端通過這個IP地址與web伺服器建立連結。
Ajax請求狀態及意義
在javascript裡面寫AJax的時,最關鍵的一步是對XMLHttpRequest物件建立監聽,即使用“onreadystatechange”方法。監聽的時候,要對XMLHttpRequest物件的請求狀態進行判斷,通常是判斷readyState的值為4且http返回狀態status的值為200或者304時執行我們需要的操作。
readyState 屬性表示Ajax請求的當前狀態。
0 代表未初始化。 還沒有呼叫 open 方法
1 代表正在載入。 open 方法已被呼叫,但 send 方法還沒有被呼叫
2 代表已載入完畢。send 已被呼叫。請求已經開始
3 代表互動中。伺服器正在傳送響應
4 代表完成。響應傳送完畢
複製程式碼
cookie的操作,讀寫
一臉懵逼。。。從來沒操作過cookie。
參考部落格JS中對Cookie的操作詳解。
(function(){
var cookieObj = {
//修改或是新增cookie
'add': function(name, value, hours) {
var expire = "";
if(hours != null){
expire = new Date((new Date()).getTime() + hours * 3600000);
expire = "; expires=" + expire.toGMTString();
}
document.cookie = name + "=" + escape(value) + expire + ";path=/";
//如果指定域名可以使用如下
//document.cookie = name + "=" + escape(value) + expire + ";path=/;domain=findme.wang";
},
//讀取cookie
'get': function(c_name){
if (document.cookie.length>0) {
c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1) {
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
};
window.cookieObj=cookieObj;
}());
複製程式碼
結果,不出意料的涼涼了。繼續奶自己一口,fighting!!!