一、什麼是同源策略及限制css
從一個源加載的文檔或腳本如何與來自另外一個源的資源進行交互。這是一個用於隔離潛在惡意文件的關鍵的安全機制。html
源包括協議、域名、端口(默認端口80),這三方面有一個不同就表示跨域了前端
cookie,localstorage,indexDB沒法獲取web
DOM沒法獲取面試
AJAX請求不能發送ajax
二、先後端如何通訊算法
ajaxsegmentfault
websocket不受跨域限制後端
cors支持跨域、同源跨域
三、如何建立Ajax
藉助第三方框架:VUE,Jquery
XMLHttpRequest對象的工做流程
兼容性處理
事件的觸發條件
事件的觸發順序
ajax五部曲
四、跨域通訊的幾種方式
JSONP
Hash
postMessage
WebSocket
CORS
fetch('/some/url',{ method:'get'
}).then(function(response){}).catch(function(err){})
CORS怎樣實現跨域的?瀏覽器會攔截跨域的ajax請求,CORS會在http中加一個origin
CSRF:cross-site request forgery跨站請求僞造,利用自己漏洞執行接口
防護措施
Token驗證
Referer驗證
隱藏令牌
XSS
cross-site scripting跨域腳本攻擊,往頁面注入js運行
攻擊原理
防護措施
一、排序
快速排序https://segmentfault.com/a/1190000009426421
選擇排序https://segmentfault.com/a/1190000009366805
希爾排序https://segmentfault.com/a/1190000009461832
二、堆棧、隊列、鏈表
三、遞歸
希爾排序https://segmentfault.com/a/1190000009857470
四、波蘭式和逆波蘭式
一、什麼是DOCTYPE及做用
DTD文檔類型定義,告訴瀏覽器文檔類型,決定使用何種協議解析以及切換瀏覽器模式;
DOCTYPE用來聲明文檔類型和DTD規範的
H5 <!DOCTYPE html>
H4有嚴格模式和寬鬆模式,嚴格模式不包括展現性的和棄用的元素
二、瀏覽器渲染過程
預解析 DOM tree cssom render tree,layout計算位置,
重排reflow
重繪repaint
佈局layout
js引擎、js與瀏覽器怎麼實現交互
測試1
console.log(1);
setTimeout(function () {
console.log(2);
},0);
console.log(3);結果爲一、三、2
js是單線程的,同一時間只能作一件事,setTimeout是異步任務,異步任務執行時先掛起,等同步任務完成後,纔去響應異步任務
測試2
console.log('A');
while(1){};
console.log('B');結果爲A
執行while會卡住
測試3
for(var i=0;i<4;i++){
setTimeout(function () {
console.log(i);
},1000);
}
結果爲4個4
循環時把setTimeout交給定時器模塊,達到1000的時間後,才放到異步隊列
通行棧放的同步隊列,異步任務到時間了就放入異步任務隊列,等同步任務執行完後去異步隊列取異步任務到通行棧,通行棧的異步任務執行完後又去取異步任務,這個循環稱之爲event loop
異步任務
setTimeout
DOM事件
ES6 promise
提高頁面性能的方法有哪些?
一、資源壓縮合並,減小HTTP請求
二、非核心代碼異步加載——異步加載的方式——異步加載的區別
異步加載的方式:動態腳本加載(說白了就是動態創造節點)、defer、async,在異步加載時的script標籤上加上defer、async屬性
異步加載的區別:defer是在HTML解析完後纔會執行,若是是多個,按照加載順序執行
async是在加載完後當即執行,若是是多個,執行順序和加載順序無關,先執行完的先出結果
三、利用瀏覽器緩存——緩存的分類——緩存的原理
緩存是請求的資源文件在本地的備份
緩存分類
強緩存:不請求直接從本地獲取資源(經過時間限制,EXPIRES和CACHE-CONTROL)
Expires表示過時時間,絕對時間以服務器爲準
Cache-Control表示相對時間,以客戶端時間爲準
若是兩個時間都有之後者爲準
協商緩存:瀏覽器和服務器協商是否用本地緩存
Last-Modified響應頭拿到資源的時間。當強緩存失效了,協商緩存發生請求時,請求頭會經過if-modified-since攜帶Last-Modified的值告訴服務器,服務器再作對比。
ETag服務器下發資源時的hash值。協商緩存可能只是時間變了可是內容沒變化,這種能夠仍是從緩存獲取資源,經過if-none-match攜帶ETag的值告訴服務器
四、使用CDN,CDN加速資源很是快
五、預解析DNS
dns-prefetch預解析
<meta http-equiv="x-dns-prefetch-control" content="on">
頁面中的a標籤在高級瀏覽器中是默認打開了預解析的,而通常https協議的瀏覽器是關閉了a標籤的預解析的,因此須要上面這個把a標籤的預解析打開
<link rel="dns-prefetch" href="//host_name_to_prefetch.com">
預解析把這句放在head中
代碼質量體系,線上環境錯誤收集
一、前端錯誤分類
及時運行錯誤:代碼錯誤
資源加載錯誤
二、錯誤的捕獲分類
及時運行錯誤:try catch; window.onerror不能捕獲資源加載錯誤
資源加載錯誤:這種錯誤不會冒泡,因此window.onerror沒法捕獲錯誤。
三種:object.onerror;performance.getEntries;Error事件捕獲
performance.getEntries返回數組
performance.getEntries.forEach((item)=>{console.log(item.name)})表示加載的資源個數
document.getElementByTagName('img')
延伸:跨域的JS運行錯誤也能夠捕獲,錯誤提示是什麼?怎樣處理?
處理的方法
一、客戶端:在script標籤增長crossorigin屬性
二、服務端:設置js資源響應頭Access-Control-Allow-Origin:*
經過以上設置就能拿到錯誤信息了
三、上報錯誤的基本原理
採用Ajax通訊方式上報,利用Image對象上報,一行代碼,也不借助第三方庫
script標籤內容(new Image()).src='url'會發出請求
描述演練:架構、技術、人員組織、難點攻克
態度謙虛、回答靈活、學會讚美
業務能力:作過什麼業務、業務的業績、技術方案、技術難點、收穫
思考能力:同一件事從不一樣角度思考
學習能力
職業規劃:目標、近階段目標、長期目標、方式方法
團隊協做能力