從他蓬鬆且凌亂的頭髮能夠看出,坐在我面前這位面試小哥來者不善,個人自我介紹也變得那麼形式化。(他推了推眼鏡,彷彿在說你趕忙介紹完吧,我要開始吊打你了小子!),一道犀利的眼神從我臉上掃過,我故做鎮定...vue
一、網絡方面還能夠吧(我默默的點點頭),說說TCP的長鏈接和短鏈接的區別?
若是瞭解得比較深刻,能夠說說各自的優缺點。面試
1、短鏈接算法
概念:客戶端與服務器創建鏈接開始通訊,一次/指定次數通訊結束以後就斷開本次TCP鏈接,
當下次再次通訊時,再次創建TCP的連接。
優勢:不長期佔用服務器的內存,那麼服務器能處理的鏈接數量是比較多的
缺點:一、由於要等到發送或者獲取資源時,纔去請求創建鏈接,並且http協議只能客戶端主動向服務端發送數據後,服務端才返回
對應的數據,那麼服務端想主動發送數據給客戶端呢?Websocket可讓服務端主動發送數據給客戶端,或者要等到下一次要請求數據時,才發送,好比咱們採用
輪詢(30秒或者更長)拉取消息, 那麼服務器與客戶端通訊的實時性就喪失了。
二、客戶端採用輪詢來實時獲取信息,或者說大量的客戶端使用短鏈接的方式通訊,那麼就浪費了大量的CPU和帶寬資源用於創建鏈接
和釋放鏈接,存在資源浪費,甚至是沒法創建鏈接。好比經典的http長輪詢(微信網頁客戶端端)
複製代碼
2、長鏈接json
概念: TCP與服務器創建鏈接以後一直處於鏈接狀態,直到最後再也不須要服務的時候才斷開鏈接
優勢: 一、傳輸數據快
二、服務器可以主動第一時間傳輸數據到客戶端
缺點: 一、由於客戶端與服務器一直保持這種鏈接,那麼在高併發分佈式集羣系統中客戶端數量會愈來愈多,佔 用不少的系統資源
二、TCP自己是一種有狀態的數據,在高併發分佈式系統會致使後臺設計比較難作
複製代碼
二、既然你提到了WebSocket,那就說明你用過咯,說說他的特色?
完了這是跟我槓上了,我依稀記得一些...,能夠看出對基礎考察得比較厲害跨域
一、最大的特色就是服務端能夠主動向客戶端發送數據
二、與 HTTP 協議有着良好的兼容性。默認端口是80和443,並握手階段採用HTTP協議,所以握手時不容易屏蔽,能經過各類HTTP代理服務器。
三、數據格式比較輕量,性能開銷小,通訊高效。
四、能夠發送文本,也能夠發送二進制數據。
五、沒有同源限制,客戶端能夠與任意服務器通訊。
六、協議標識符是ws(若是加密,則爲wss,加密層是TLS),服務器網址就是 URL。
複製代碼
三、看你簡歷用過地圖,說說如今地圖都有哪幾種座標系?
這個我只回答出了前面兩種,確實沒太瞭解過這些。應該是還有的,能夠自行查閱瀏覽器
一、GCJ-02 座標系:國測局座標,火星座標系(高德、騰訊、Google中國地圖都使用它)
二、BD-09座標系:(百度中國地圖所採用的座標系)
三、WGS-84座標系:地心座標系,GPS原始座標體系(在中國,任何一個地圖產品都不容許使用GPS座標,聽說是爲了保密)
複製代碼
四、能夠手寫一個new()嗎?
挽了挽衣袖,開擼緩存
function myNew() {
var constr = Array.prototype.shift.call(arguments);
var obj = Object.create(constr.prototype);
var result = constr.apply(obj, arguments);
return result instanceof Object? result : obj;
}
複製代碼
五、http是什麼?
所有擡起小腦殼,不要再說http是超文本傳輸協議,它的英文是 HyperText Transfer Protocol。服務器
HTTP是一個在計算機世界裏專門在兩點之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規範。
複製代碼
六、http和https的區別?
一、HTTP協議運行在TCP之上,全部傳輸的內容都是明文,HTTPS運行在SSL/TLS之上,SSL/TLS運行在TCP之上,
全部傳輸的內容都通過加密的。
二、能夠說https是http的增強版(http+SSL/TLS=https)
三、http端口號是80,https是443.
四、HTTPS協議須要到CA申請證書,通常免費證書不多,須要交費。
複製代碼
此時面試官小哥哥喝了一口82年的咖啡,心想這小子什麼來頭?微信
七、Vue中的computed和watch的區別?
一、computed:是一個有緩存的watcher,依賴的屬性發生變化就會更新視圖。 適用於計算比較消耗性能的計算場景。當表達式過於
複雜時,在模板中放入過多邏輯會讓模板難以維護,能夠將複雜的邏輯放入計算屬性中處理
二、watch:沒有緩存性,更多的是起到一個觀察的做用。能夠監聽某些數據執行回調,當須要深度監聽時,將deep:true開啓便可。
複製代碼
八、v-model的原理說一下?
經過Observer來監聽本身的model數據變化,經過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通訊
橋樑,達到數據變化->視圖更新在初始化vue實例時,遍歷data這個對象,給每個鍵值對利用Object.definedProperty對data的鍵值
對新增get和set方法,利用了事件監聽DOM的機制,讓視圖去改變數據
複製代碼
九、說一下 Event Loop的執行順序
考察宏微任務markdown
一、一開始整個腳本做爲一個宏任務執行
二、執行過程當中同步代碼直接執行,宏任務進入宏任務隊列,微任務進入微任務隊列
三、當前宏任務執行完出隊,檢查微任務列表,有則依次執行,直到所有執行完
四、執行瀏覽器UI線程的渲染工做
五、檢查是否有Web Worker任務,有則執行
六、執行完本輪的宏任務,回到2,依此循環,直到宏任務和微任務隊列都爲空
複製代碼
宏任務:script 、setTimeout、setInterval 、setImmediate 、I/O 、UI rendering
微任務:MutationObserver、Promise.then()或catch()、fetch API、V8的垃圾回收過程、Node獨有的process.nextTick
複製代碼
十、介紹一下虛擬DOM
一、虛擬DOM本質就是用一個原生的JavaScript對象去描述一個DOM節點。是對真實DOM的一層抽象。
二、在瀏覽器中操做DOM是很昂貴的。頻繁的操做DOM,會產生性能問題,因此須要這一層抽象,在patch過程當中儘量地一次
性將差別更新到DOM中,這樣保證了DOM不會出現性能不好的狀況。
三、Vue2.x中的虛擬DOM主要是借鑑了snabbdom.js,Vue3中借鑑inferno.js算法進行優化。
複製代碼
十一、跨域瞭解嗎,如何解決,爲何會產生跨域?
跨域的產生是因爲瀏覽器的同源策略,同源策略指的是:
一、域名
二、端口號
三、協議名
只要有一個不一樣就稱爲跨域
解決跨域:
一、jsonp跨域(只能解決get) 原理:動態建立一個script標籤。利用script標籤的src屬性不受同源策略限制,由於全部的src屬性
和href屬性都不受同源策略的限制,能夠請求第三方服務器資源內容
二、服務器設置對CORS的支持 原理:服務器設置Access-Control-Allow-Origin HTTP響應頭以後,瀏覽器將會容許跨域請求
複製代碼
十二、說一下回流和重繪
迴流:對 DOM 結構的修改從而引起 DOM 幾何尺寸變化的時候,會發生迴流的過程。
過程:因爲DOM的結構發生了改變,因此須要從生成DOM這一步開始,從新通過樣式計算、生成佈局樹、創建圖層樹、再到生成繪製
列表以及以後的顯示器顯示這整一個渲染過程走一遍,開銷是很是大的。
複製代碼
重繪:當 DOM 的修改致使了樣式的變化,而且沒有影響幾何屬性的時候,會致使重繪。
過程:因爲沒有致使 DOM 幾何屬性的變化,所以元素的位置信息不須要更新,因此當發生重繪的時候,會跳過生存佈局樹和創建圖層樹
的階段,直接到生成繪製列表,而後繼續進行分塊、生成位圖等後面一系列操做。
複製代碼
小哥哥思量了半分鐘,場面一度很尷尬,說先面到這兒吧,你先等一下子。(後來叫來了技術總監,弱弱的我內心居然有點小慌) 最後技術總監沒問技術,問了我項目問題,還好沒有打擊我
這家最後仍是過了,可是沒有選擇去,由於以爲平臺不是我想要的,並且感受沒有什麼誠意...