1.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服務器創建連接。
複製代碼
2.Ajax請求狀態及意義?
在javascript裏面寫AJax的時,
最關鍵的一步是對XMLHttpRequest對象創建監聽,
即便用「onreadystatechange」方法。
監聽的時候,要對XMLHttpRequest對象的請求狀態進行判斷,
一般是判斷readyState的值爲4且http返回狀態
status的值爲200或者304時執行咱們須要的操做。
readyState 屬性表示Ajax請求的當前狀態。
0 表明未初始化。 尚未調用 open 方法
1 表明正在加載。 open 方法已被調用,但 send 方法尚未被調用
2 表明已加載完畢。send 已被調用。請求已經開始
3 表明交互中。服務器正在發送響應
4 表明完成。響應發送完畢
複製代碼
3.使用JS實現獲取文件擴展名?
function getFileExtension(filename) {
return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);
}
String.lastIndexOf()
方法返回指定值(本例中的'.')
在調用該方法的字符串中最後出現的位置,
若是沒找到則返回 -1。
對於'filename'和'.hiddenfile',
lastIndexOf的返回值分別爲0和-1無符號右移操做符(»>)
將-1轉換爲4294967295,將-2轉換爲4294967294,
這個方法能夠保證邊緣狀況時文件名不變。
String.prototype.slice() 從上面計算的索引處提取文件的擴展名。
若是索引比文件名的長度大,結果爲""。
複製代碼
4.CommonJS 中的 require/exports 和 ES6 中的 import/export 區別?
CommonJS 模塊的重要特性是加載時執行,
即腳本代碼在 require 的時候,就會所有執行。
一旦出現某個模塊被」循環加載」,
就只輸出已經執行的部分,
還未執行的部分不會輸出。
ES6 模塊是動態引用,
若是使用 import 從一個模塊加載變量,
那些變量不會被緩存,
而是成爲一個指向被加載模塊的引用,
須要開發者本身保證,
真正取值的時候可以取到值。
import/export 最終都是編譯爲 require/exports 來執行的。
CommonJS 規範規定,每一個模塊內部,
module 變量表明當前模塊。
這個變量是一個對象,它的 exports 屬性(即 module.exports )是對外的接口。
加載某個模塊,
實際上是加載該模塊的 module.exports 屬性。
export 命令規定的是對外的接口,
必須與模塊內部的變量創建一一對應關係。
複製代碼
5.項目作過哪些性能優化?
減小 HTTP 請求數
減小 DNS 查詢
使用 CDN
避免重定向
圖片懶加載
減小 DOM 元素數量
減小 DOM 操做
使用外部 JavaScript 和 CSS
壓縮 JavaScript 、 CSS 、字體、圖片等
優化 CSS Sprite
使用 iconfont
字體裁剪
多域名分發劃份內容到不一樣域名
儘可能減小 iframe 使用
避免圖片 src 爲空
把樣式表放在 中
把腳本放在頁面底部
複製代碼