高級Web前端工程師必會面試題,這裏只是整理一些範圍知識點,並無特別具體的面試題目,只要把這些知識點搞明白了,面試題都不是問題。
文檔持續更新中。。。加油騷年!!javascript
參考:https://www.cnblogs.com/Renyi-Fan/p/12173366.html#_label3css
彈性盒佈局 flex
盒子是並列的,能夠設置指定寬度,輕鬆實現兩欄,三欄佈局,經典的聖盃佈局和雙飛翼佈局就是經過flex來實現的。
可是,flexbox 佈局方式對瀏覽器的支持不太友好,有一些兼容性問題,可是,這應該是將來發展的趨勢。html
浮動 float浮動
float佈局是目前各大網站用的最多的一種佈局方式了。
經過給元素設置float屬性來實現元素浮動,浮動的元素是脫離文檔流的,可是不脫離文本流。
特色:
1) 對自身:a、float元素能夠造成塊,可讓行內元素變成塊元素,也擁有寬和高;b、浮動元素的位置儘可能靠上;c、設置float:left 或 float:right,若是這一行知足不了浮動元素的寬度,則會被擠到下一行。
2) 對兄弟:a、不影響其餘塊元素的位置;b、影響其餘塊元素的文本
3) 對父元素:高度塌陷
高度塌陷:(解決方案)前端
響應式
最簡單的方式是加上一個 meta 標籤, ,其中 width = device-width 這一句的意思是讓頁面的寬度等於屏幕的寬度。
rem 是指html的font-size的大小, 根據rem來計算各個元素的寬高,而後在配合media query 就能夠實現自適應
@media query 語法vue
1 @media screen and (max-width: 360px) { 2 html { font-size: 12px; } 3 }
參考https://www.cnblogs.com/liuXiaoDi/p/12261100.htmljava
transform
:元素自己不定義邊框,給僞元素定義一個 1px 邊框,而且根據像素比值(dpr => device-pixel-ratio)設置縮放比例文檔:day0220–BFC.note
連接:http://note.youdao.com/noteshare?id=f0a95534319d2cd8f49dbe9b6f5240eb&sub=B77453B2104943B09697AF70C4CE68A5react
.call()
和.apply()
將父類構造函數引入子類函數(在子類函數中作了父類的複製)
scroll
事件,滾動監聽事件,每隔一段時間計算一次位置信息等input
框實時搜索併發送請求展現下拉列表,每隔1s發送一次請求。(防抖也能夠)1 function throttle(fn, delay) { 2 let timer; 3 return function () { 4 let _this = this; 5 let args = arguments; 6 if (timer) { 7 return; 8 } 9 timer = setTimeout(function () { 10 fn.apply(_this, args); 11 timer = null; // 在delay後執行完fn以後清空timer,此時timer爲假,throttle觸發能夠進入計時器 12 }, delay) 13 } 14 }
mousemove
、mouseover
鼠標移動事件防抖1 function debounce(fn, delay) { 2 let timer; // 維護一個 timer 3 return function () { 4 let args = arguments; 5 if (timer) { 6 clearTimeout(timer); 7 } 8 timer = setTimeout(()=> { 9 fn.apply(this, args); // 用apply指向調用debounce的對象,至關於this.fn(args); 10 }, delay); 11 }; 12 }
setTimeout
實現clearTimeout
和 setTimeout
實現。clearTimeout
。防抖能夠比做等電梯,只要有人進來,就須要再等一會。業務場景有避免觸發按鈕屢次重複提交。timer=timeout;timer=null
。節流能夠比做紅綠燈,每等一個紅燈時間就能夠過一批。callback
函數。設計模式是一套被反覆使用的、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。webpack
subscribe()
接收觀察者,使其訂閱;unsubscribe()
取消訂閱;fire()
觸發事件,通知到全部觀察者。computed
計算屬性來作處理,這個過程就用到了適配器模式。Proxy
:用於修改某些操做的默認行爲,也能夠理解爲在目標對象以前架設一層攔截,外部全部的訪問都必須先經過這層攔截,所以提供了一種機制,能夠對外部的訪問進行過濾和修改。這個詞的原理爲代理,在這裏能夠表示由它來「代理」某些操做,譯爲「代理器」。web
var proxy = new Proxy(target, handler);
Proxy對象的全部用法,都是經過這種形式。不一樣的只是handle參數的寫法。其中new Proxy用來生成Proxy實例,target是表示所要攔截的對象,handle是用來定製攔截行爲的對象。Reflect
:是一個全局的普通的對象,原型是Object。面試
Promise
:是一個專門解決異步回調地獄的問題。
所謂 Promise,簡單點來講就是一個容器,裏面保存着某個將來纔會結束的事件(一般是一個異步操做)的結果,promise是一個對象,它能夠從獲取異步操做的消息,promise提供了統一的API,各類異步操做均可以用一樣的方法進行處理。
Generator
:與日常的函數不一樣,它能夠理解爲是一個分佈執行的函數,返回值是一個遍歷器。
async/await
:回調地獄的終極解決方案,使用它能夠把異步代碼寫的看起來像同步代碼。
Decorator
:修飾器,是一個函數,用來修飾類的行爲。不過目前主流瀏覽器都沒有很好的支持,咱們須要用babel來轉換爲瀏覽器能識別的語言。
Class
:類,經過class關鍵字能夠定義類。
https://www.jianshu.com/p/b6b42fd3f80e
瀏覽器從服務器那收到的HTML,CSS,JavaScript等相關資源,而後通過一系列處理後渲染出來的web頁面。
過程:
以上五個步驟並不必定一次性順序完成,好比DOM或CSSOM被修改時,亦或是哪一個過程會重複執行,這樣才能計算出哪些像素須要在屏幕上進行從新渲染。而在實際狀況中,JavaScript和CSS的某些操做每每會屢次修改DOM或者CSSOM。
https://segmentfault.com/a/1190000018181334