更新進度: 15% 更新時間: 2020-07-23
本篇文章將長期更新前端技術中關於 A與B的區別 類型的問題、文章中的問題與答案都是根據面試真前端
題和網絡搜索總結而來、本人並不保證答案的正確性、徹底是我的的理解、若是有錯誤的地方歡迎各位es6
前輩、大佬指出、萬分感謝🙏面試
一、let和var和const的區別express
二、get和post的區別編程
三、call和apply和bind和()=> {}的區別數組
四、setTimeout和setInterve的區別瀏覽器
五、Callback、Promises、observer、Async/Await的區別安全
六、cookie,session,localStorage和sessionStorage的區別服務器
七、instanceOf和constructor的區別cookie
八、preventDefault和stopPropagation的區別
九、es6和es5的區別
十、Vue和React和jQuery的區別
十一、express和koa的區別
十二、mvvm,mvc,mvp區別
1三、線程和進程的區別
1四、堆和棧的區別
1五、同步異步的區別
1六、HTTP各版本比較
1七、TCP和UDP的區別
一、let和var和const的區別
var有變量提高、let和const沒有 var和let在定義後能夠進行修改、但const定義後就不能夠再進行修改 var和let在定義後能夠先不賦值、初始值爲undefined、const必須定義後賦值 let和const都是塊級做用域、都不能重複定義、不會影響外部變量
二、get和post的區別
功能: get通常用來獲取數據、而post通常用來提交數據(但技術上均可以實現) 傳輸方式: get是明文傳輸、而post是密文傳輸、二者對參數的處理方式不一樣、post相比更加安全 界面刷新: get在用戶回退或者刷新的時候是無害的、可是post請求卻會被從新提交、這不是咱們指望的 參數長度: get請求的url長度是有限制的、這個限制在不一樣的瀏覽器略有不一樣、但post卻沒有url長度的限制、且二者參數的位置不一樣 請求過程: get請求產生一個TCP數據包、post則會產生兩個數據包、兩次包在驗證數據包的完整性上有很是大的優點、而在具體的請求過程上 get直接將請求頭和請求體發送給服務器、post則是先將請求頭髮送給服務器、服務器響應100後再發送data、服務器響應200後返回數據 同時由於post請求的過程更復雜、因此相比之下get的性能更佳、但具體使用什麼仍是應該根據具體的需求而定(注: 火狐的post請求只發一次包) 編碼格式: get只能進行url編碼、可是post卻支持各類編碼格式 歷史停留: get請求的參數能夠被記憶在瀏覽器中、可是post卻不會 數據大小: get請求傳輸的數據大小受到瀏覽器、操做系統、服務器的影響、post理論上沒有大小限制、實際上受服務器的容量和設置影響 get請求能夠被書籤收藏、可是post卻不能夠
三、call和apply和bind和箭頭函數的區別
功能: 前三個都是經過第一個參數改變函數運行時的this指向、箭頭函數則是將this指向綁定到建立時環境上 執行: apply和call都是當即執行的、可是bind則是返回了一個新的函數等待調用、箭頭函數則是語法 參數: call的參數從第二個開始、能夠有不少個、而apply只有兩個參數、第二個參數是數組 bind是硬綁定、一旦綁定this指向就不會被更改、硬綁定的原理是用函數包括一個apply執行 箭頭函數不能夠做爲構造函數存在、即他不能夠被 new 同時箭頭函數不能使用arguments參數 call的性能要比apply好一些、特別是傳參數量大於三個的時候、猜想多是由於apply參數須要遍歷?
四、setTimeout和setInterve的區別
一個是定時器、每隔一段時間觸發一次; 一個是延時器、等待多長時間以後執行一次 相同: 兩個都是宏任務、兩個的默認this指向都是window
五、Callback、Promises、setTimeOut的區別
首先三者都是異步編程的方案之一 Callback函數在遞歸調用自身的時候會致使堆棧溢出 Promises是微任務、setTimeOut則是宏任務、由於微任務是在主函數執行完畢銷燬以前執行的、因此Promises異步在setTimeOut以前執行 TODO 連接 Google V8 事件循環系統學習總結
六、cookie,session,localStorage和sessionStorage的區別
存儲大小: cookie比較小、通常在4kb左右、而local和session通常爲5M左右 存儲要求: 都只能存儲字符串、不可存儲其餘格式、且cookie存儲時條目不超過20個左右、session和local則沒有存儲數量的限制 存儲時間: cookie能夠設置失效時間、不設置的狀況下關閉頁面時失效、session則是會話級存儲關閉窗口時失效、local則不主動刪除永不失效 使用場景: cookie主要存儲一些例如身份校驗等信息、session則做爲當前窗口的臨時數據存儲位置、local能夠存儲一些當前用戶的偏好設置等數據 安全性能: 三者都有被僞造和讀取的風險 cookie每次都會攜帶在請求頭中、不管這個接口是否須要、而session和local不會發送到服務器
七、instanceOf和typeOf的區別
instanceOf操做符用來判斷 constructor.prototype 是否存在於參數 object 的原型鏈上。 typeOf是一元運算符、用來判斷 一個任意參數的數據類型
八、preventDefault和stopPropagation的區別
e.preventDefault() 取消瀏覽器默認行爲 e.stopPropagation = true; 阻止事件冒泡或捕獲
九、es6和es5的區別 | es6新特性
es6新特性 let、const等變量聲明方式、有了塊級做用域的概念 結構賦值、箭頭函數、數組展開、默認參數值、字符串模版 Set和Map對象、Symbol數據類型(保證惟一性) Generators、Promises 和 Async/awite 異步方案 模塊化方案、借鑑了CommonJS和AMD優勢 Proxies、使用代理監聽對象操做 class語法糖
十、Vue、React和jQuery的區別
jQuery與Vue、React的最大區別就在與從原有的操做Dom的思想轉變到操做數據的思想上 jQuery的核心思想是 「用最少的代碼、作更多的事情」, 與原生JS的區別僅在於更加方便的代碼編寫 而Vue和React等框架則是基於MVVM的理念設計的、他作到了數據與視圖的分離 TODO Vue與React的區別
十一、express和koa的區別
TODO
十二、mvvm,mvc,mvp區別
TODO
1三、線程和進程的區別
一個程序至少有一個進程、一個進程至少有一個線程 一個進程能夠包含多個線程、進程與線程的關係比如 火車 和 車箱 的關係 進程是資源分配的最小單位、線程則是CPU調度的最小單位
1四、堆和棧的區別
堆是由內存動態分配的、棧則是由系統動分配的 堆中存放對象自己、棧中則存放基本數據類型和對象引用、堆比較大、棧比較小
1五、同步異步的區別
同步須要等待函數執行完畢後才能執行其餘的操做、異步則不須要、即同步會形成阻塞
1六、HTTP各版本比較
TODO
1七、TCP和UDP的區別
TODO
一、rem,px,em, pt的區別
px是像素單位、是相對屏幕分辨率而言的、並不會受其餘影響 pt是長度單位、是印刷業經常使用的計量單位、72pt = 2.54cm em是相對長度單位、相對於當前對象內文本的字體尺寸、em繼承父元素的字體大小 rem是相對長度單位、與em的不一樣點在於、rem所參照的是根元素的字體大小
二、display:none和visibility:hidden的區別
三者在視覺上均可以實現隱藏元素的效果 display:none 是徹底隱藏、此時元素已不存、在文檔流中不佔據位置 visibility:hidden 也能夠隱藏元素、但仍然在文檔流中佔據必定的位置 opacity: 0 效果上與hidden相似、實現原理上是將元素變得透明不可見