高級前端開發進階指南—面試篇—區別類型問題整理

更新進度: 15%
更新時間: 2020-07-23

前言

本篇文章將長期更新前端技術中關於 A與B的區別 類型的問題、文章中的問題與答案都是根據面試真前端

題和網絡搜索總結而來、本人並不保證答案的正確性、徹底是我的的理解、若是有錯誤的地方歡迎各位es6

前輩、大佬指出、萬分感謝🙏面試

1、目錄

一、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的區別

2、答案

一、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

3、CSS區別

一、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相似、實現原理上是將元素變得透明不可見
相關文章
相關標籤/搜索