筆試部分:
meta 的 viewport 的作用甲捏,如何寫?
device-width 是指這個(gè)設(shè)備最理想的 viewport 寬度
user-scalable 是否允許用戶手動(dòng)縮放頁面
initial-scale 定義初始縮放比例
maximum-scale/minimum-scale 定義最大最小縮放比例
<meta name="viewport"
content="width=device-width,user-scalable=no,initial-scale=1.0,
maximum-scale=1.0,minimum-scale=1.0">
<!-- 換行請(qǐng)不要在意 -->
簡述 tcp 的三次握手
客戶端發(fā)起請(qǐng)求(SYN),服務(wù)端收到后應(yīng)答(ACK)和發(fā)起請(qǐng)求(SYN)钾唬,客戶端收到后也回應(yīng)(ACK)
面向?qū)ο缶幊痰奶卣?/h3>
封裝、繼承侠驯、多態(tài)
面試部分:
自我介紹抡秆、項(xiàng)目經(jīng)歷
主要問了項(xiàng)目經(jīng)歷,可能更想聽到用了哪些技術(shù)吟策,而不是做了什么儒士。
vue.$set 的原理
參考博客1: https://www.cnblogs.com/yaxinwang/p/13827529.html?ivk_sa=1024320u
參考博客2: https://blog.csdn.net/weixin_42038290/article/details/114700728
參考博客3: https://blog.csdn.net/weixin_42192113/article/details/119117078?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4
個(gè)人理解是:
3個(gè)參數(shù),target(對(duì)象或數(shù)組)檩坚,key着撩,val;
首先判斷 target 是否為 null 或 undefined 匾委,如果是拖叙,拋出異常;
其次判斷 target 是否數(shù)組赂乐,是數(shù)組的話薯鳍,判斷 key 是不是一個(gè)有效的下標(biāo),都滿足的話挨措,再通過 splice 去修改數(shù)組挖滤;
如果 target 不是數(shù)組即是對(duì)象,先判斷 key 是否存在浅役,若存在直接修改(此步驟說明該 key 已經(jīng)是響應(yīng)式)斩松。
不存在的話則先獲取 target 的__ob__
,然后判斷 target 是不是一個(gè) vue 實(shí)例担租,是實(shí)例就拋出異常砸民。
不是實(shí)例的話結(jié)合 ob 判斷,ob 不存在則說明該屬性不是響應(yīng)式奋救,直接修改岭参,反之調(diào)用defineReactive
注冊(cè)為響應(yīng)式,并且手動(dòng)調(diào)用ob.dep.notify()
更新
至于為什么要使用 vue.$set 尝艘?對(duì)于需要響應(yīng)式的對(duì)象來說演侯,直接添加個(gè)屬性,是沒有綁定 Object.defineProperty
背亥,也就無法觸發(fā)響應(yīng)式更新秒际。
$nextTick 的原理
參考博客:https://www.cnblogs.com/xiaonian8/p/14092492.html
nextTick 會(huì)把回調(diào)函數(shù)放入一個(gè)內(nèi)部的數(shù)組里悬赏,由 nextTickHandler
來遍歷執(zhí)行。而這個(gè)函數(shù)的執(zhí)行是異步的娄徊,什么時(shí)候執(zhí)行取決于它是屬于微任務(wù)還是宏任務(wù)闽颇。
同步任務(wù)執(zhí)行完畢后,就會(huì)去異步任務(wù)里分別執(zhí)行微任務(wù)和宏任務(wù)寄锐,nextTickHandler
設(shè)置成宏任務(wù)或微任務(wù)后就會(huì)保證總是在數(shù)據(jù)修改完或 dom 更新后再執(zhí)行兵多。
macro(宏任務(wù)) task:同步代碼、setImmediate橄仆、MessageChannel剩膘、setTimeout/setInterval
micro(微任務(wù)) task:Promise.then、MutationObserver
對(duì)于nextTickHandler
盆顾,首先選擇setImmediate
怠褐,但setImmediate
有兼容性問題,目前只支持 edge 和 ie您宪,其次就是MessageChannel
奈懒,再其次就是new Promise().then()
設(shè)置成微任務(wù),最后再考慮setTimeout
蚕涤。