前端面試題(三)

2021-10-03 21:08:42 字數 4601 閱讀 9783

怎麼設定靜態資源快取時間

1. 設定expires屬性

2. 設定cache-control: max-age=毫秒

瀏覽器今天請求了靜態檔案,如果檔案設定乙個月快取,明天再訪問,會不會發起網路請求

1. 主流瀏覽器會根據最近一次訪問時間,減去last modify,再除以十,來決定對這個檔案儲存多久。也即 lastvisittime + (lastvisittime - lastmodifytime) / 10。在這個時間之前不會發起網路請求

2. 在這之後會發起帶 if-modified-since 的http請求。

3. 之所以這麼設定,是因為如果檔案很久沒修改了,說明比較穩定。

4. 查到的答案,未實踐,詳見

服務端怎麼判斷要不要返回304

1. 根據etag比對和last modify時間(追問:etag是什麼——檔案內容雜湊)

2. 根據 if-modified-since 判斷

http2.0有什麼新特性

1. 管道復用

2. 頭部壓縮

3. 服務端推送

4. 二進位制幀

tcp三次握手

詳見  三次握手部分
https交換金鑰過程

1. tcp握手(https基於http,即基於tcp)

2. 客戶端預請求,將支援的加密演算法、版本等資訊發給服務端

3. 服務端將自己的配置、證書發給客戶端

4. 客戶端檢驗證書(是否有效,是否篡改,是否吊銷等)。提取服務端公鑰

5. 客戶端生成隨機數(對稱金鑰),用服務端公鑰加密傳送給服務端

6. 服務端根據自己的私鑰解密得到對稱金鑰

7. 用對稱金鑰傳送finish資訊,完成金鑰交換

8. 用對稱金鑰完成傳遞內容的加密

https證書包含什麼內容

1. 公鑰(public key)

2. issuer(證書的發布機構)

3. subject(證書持有者)(含使用網域名稱)

4. 證書有效期

5. 簽名

如何校驗證書是否被篡改

2. 用ca公鑰解開證書簽名,得到指紋(雜湊)和指紋演算法

3. 用指紋演算法對證書內容進行雜湊計算

4. 雜湊計算出來的結果與指紋進行對比,不一致則為被篡改

如何用udp實現可靠傳輸

1. 引入序列號, 保證資料順序;

2. 引入確認應答, 確保對端收到了資料;

3. 引入超時重傳, 如果隔一段時間沒有應答, 就重發資料

指令碼在head裡載入沒完成之前,dom會渲染嗎

domready和onload區別

http1.0/1.1和http2.0在優化上有什麼區別

link預請求

react和vue有什麼區別

react單向資料流與vue雙向繫結孰優孰劣

react hooks 相比 class api有什麼優缺點

react hooks沒法實現class的什麼功能

react 生命週期有哪些?(舊版和新版)

vue導航守衛

快取策略

ssr監控哪些型別錯誤

怎麼監控指令碼錯誤

怎麼監控資源載入錯誤

怎麼監控介面錯誤

csrf是什麼

csrf如何防禦

實現深拷貝(需要考慮value用到同乙個物件的問題)

function deepcopy(obj) 

if (array.isarray(obj))

valuemap.set(obj, temp);

return temp;

}if (object.prototype.tostring.call(obj) === '[object object]') ;

object.keys(obj).foreach(key => )

valuemap.set(obj, temp);

return temp;

}return obj;

}const result = copy(obj);

valuemap.clear();

return result;

}const a =

const obj =

const copyedobj = deepcopy(obj);

console.log(copyedobj === obj)

按順序輸出:

async function async1() 

async function async2()

console.log('script start');

settimeout(function() , 0);

async1();

new promise(function(resolve) ).then(function() );

console.log('script end');

請實現如下的函式,可以批量請求資料,所有的 url 位址在 urls 引數中,同時可以通過 max 引數控制請求的併發度,當所有請求結束之後,需要執行 callback 回掉函式。發請求的函式可以直接使用 fetch 即可

function sendrequet(urls: string, max: number, callback: () => void) 

function fetch(url)

function sendrequet(urls: string, max: number, callback: () => void)

let sendingrequestnum = 0;

let currenturlindex = 0;

let hassendrequestnum = 0;

function checkqueneisidleandsend()

if (sendingrequestnum === max)

for (let i = currenturlindex; i < currenturlindex + max - sendingrequestnum; i++)

sendingrequestnum++;

currenturlindex++;

fetch(urls[i]).finally(() => )}}

checkqueneisidleandsend();

}

給定乙個公升序整形陣列[0,1,2,4,5,7,13,15,16],找出其中連續出現的數字區間為如下:[「0->2」, 「4->5」, 「7」, 「13」, 「15->16」]

function summaryranges(arr) 

let left = 0, right = 0;

const result = ;

while(left < arr.length)

if (arr[left] === arr[right]) else ->$`);

}left = right + 1;

right = left;

}return result;

}console.log(summaryranges([0,1,2,4,5,7,13,15,16,16, 18]))

對於一般的m * n矩陣a

第一條45度斜邊:a0

第二條45度斜邊:a0, a1

………最後一條45度斜邊:am - 1

例如:input = [[ 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10],

[11, 12, 13, 14, 15]]

output = 1, 2, 6, 3, 7, 11, 4, 8, 12, 5, 9, 13, 10, 14, 15

function logsquare(arr) 

const cols = arr[0].length,

rows = arr.length;

let col = 0, row = 0;

const result = ;

function loop()

result.push(arr[j][i - j + row]);}}

}while (row < rows)

return result;

}

var strinput = `

1 2 3

4 5 6

7 8 9

`var arrresult = [

[1,2,3],

[4,5,6],

[7,8,9]

]

function strtoarr(str) 

return str.split('\n')

.filter(row => row && row.trim())

.map(row => )

}

前端面試題(三)

px畫素,相對長度單位 em相對長度單位,會繼承父元素的字型大小 rem相對長度單位,會根據節點html定義,不會受父元素的影響。盒子模型包含內容的大小,padding,border,margin css盒子模型分為ie盒子模型和標準盒子模型 ie盒子模型內容的寬高包含了padding和border...

前端面試題集錦三

瀏覽器怎麼匹配某個選擇器?https的原理,加密方式?由於http是明文傳送資料,不具備加密的功能。通訊協議中通過ssl 安全套接層 或tsl的組合使用 來加密http的通訊內容。http 加密 認證 完整性保護 https。加密方式 對稱加密方式和非對稱加密。對稱加密即為加密和解密共用同乙個方式。...

前端面試題整理 三

函式是 jquery 函式的別稱。函式用於將任何物件包裹成 jquery 物件,接著你就被允許呼叫定義在 jquery 物件上的多個不同方法。你可以將乙個選擇器字串傳入 函式,它會返回乙個包含所有匹配的 dom 元素陣列的 jquery 物件。name selectname selected thi...