「記一下近大半個月的面試,後面繼續補充內容跟答案css
先放個圖放鬆一下html
答:HTML5 API盤點前端
答:盒子模型分爲兩種:IE盒子模型,標準盒子模型。 IE盒子模型 box-sizing:border-box;他的寬高爲border+padding+content。 標準盒子模型:box-sizing:content-box;;他的寬高就是content的寬高。vue
答:全稱:block format context(塊級格式化上下文)。是一個獨立不干擾外界也不受外界干擾的盒子。 建立bfc的經常使用方式有:position:absolute;display:inline-block;float:left/right;overflow:hidden; BFC佈局規則: 1.內部的Box會在垂直方向,一個接一個地放置。 2.Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊 3.每一個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,不然相反)。即便存在浮動也是如此。 4.BFC的區域不會與float box重疊。 5.BFC就是頁面上的一個隔離的獨立容器,容器裏面的子元素不會影響到外面的元素。反之也如此。 6.計算BFC的高度時,浮動元素也參與計算。html5
答:比較多,能夠自行百度react
答:before,after CSS3 特性 建議看一遍,深究的話看公司需求。webpack
答:連接同上css3
答:連接同上web
答:瀏覽器爲何有兩種事件機制,是由於各個瀏覽器的差別問題,在IE使用的是事件冒泡,其餘瀏覽器則是事件捕獲。面試
答:bind,apply,call是放在Function.prototype上
答:第三個參數是默認事件在冒泡階段執行,默認爲false,true則爲在捕獲階段執行。
答:Promise
答:個人理解是在外層函數內部經過return 一個內層函數將外層函數內部的執行上下文保存到外部引用。tips:不管什麼時候聲明新函數並將其賦值給變量,都要存儲函數定義和閉包,閉包包含在函數建立時做用域中的全部變量,相似於揹包,函數定義附帶一個小揹包,包裏存儲了函數定義建立時做用域中的全部變量。
答:這個文章看一遍就懂。這一次,完全弄懂 JavaScript 執行機制
答:比較簡單. 解鎖多種JavaScript數組去重姿式
答:經常使用的 1. arr instanceof Array 2.Object.prototype.toString.call(arr) 3.Array.isArray(arr)
答:基本類型:
tips:
引用類型:Object
答:JS的防抖與節流
答:
實現一個監聽器 Observer:對數據對象進行遍歷,包括子屬性對象的屬性,利用 Object.defineProperty() 對屬性都加上 setter 和 getter。這樣的話,給這個對象的某個值賦值,就會觸發 setter,那麼就能監聽到了數據變化。
實現一個解析器 Compile:解析 Vue 模板指令,將模板中的變量都替換成數據,而後初始化渲染頁面視圖,並將每一個指令對應的節點綁定更新函數,添加監聽數據的訂閱者,一旦數據有變更,收到通知,調用更新函數進行數據更新。
實現一個訂閱者 Watcher:Watcher 訂閱者是 Observer 和 Compile 之間通訊的橋樑 ,主要的任務是訂閱 Observer 中的屬性值變化的消息,當收到屬性值變化的消息時,觸發解析器 Compile 中對應的更新函數。
實現一個訂閱器 Dep:訂閱器採用 發佈-訂閱 設計模式,用來收集訂閱者 Watcher,對監聽器 Observer 和 訂閱者 Watcher 進行統一管理。
借個圖(來自書籍 深刻淺出Vue.js):
答:
computed: 是計算屬性,依賴其它屬性值,而且 computed 的值有緩存,只有它依賴的屬性值發生改變,下一次獲取 computed 的值時纔會從新計算 computed 的值;
watch: 更多的是「觀察」的做用,相似於某些數據的監聽回調 ,每當監聽的數據變化時都會執行回調進行後續操做;
運用場景:1.當咱們須要進行數值計算,而且依賴於其它數據時,應該使用 computed,由於能夠利用 computed 的緩存特性,避免每次獲取值時,都要從新計算;
2.當咱們須要在數據變化時執行異步或開銷較大的操做時,應該使用 watch,使用 watch 選項容許咱們執行異步操做 ( 訪問一個 API ),限制咱們執行該操做的頻率,並在咱們獲得最終結果前,設置中間狀態。這些都是計算屬性沒法作到的。
答:借圖
答:可根據我的狀況簡述。
1.數據雙向綁定2.虛擬dom3.組件化系統4.vue生態5.市場
MVVM 是 Model-View-ViewModel 的縮寫 Model: 表明數據模型,也能夠在Model中定義數據修改和操做的業務邏輯。咱們能夠把Model稱爲數據層,由於它僅僅關注數據自己,不關心任何行爲 View: 用戶操做界面。當ViewModel對Model進行更新的時候,會經過數據綁定更新到View ViewModel: 業務邏輯層,View須要什麼數據,ViewModel要提供這個數據;View有某些操做,ViewModel就要響應這些操做,因此能夠說它是Model for View. 總結: MVVM模式簡化了界面與業務的依賴,解決了數據頻繁更新。MVVM 在使用當中,利用雙向綁定技術,使得 Model 變化時,ViewModel 會自動更新,而 ViewModel 變化時,View 也會自動變化。
答:
解析器(parser)的做用是將 模板字符串 轉換成 element ASTs。
優化器(optimizer)的做用是找出那些靜態節點和靜態根節點並打上標記。
代碼生成器(code generator)的做用是使用 element ASTs 生成 render函數代碼(generate render function code from element ASTs)。
解析器(parser)的原理是一小段一小段的去截取字符串,而後維護一個 stack 用來保存DOM深度,每截取到一段標籤的開始就 push 到 stack 中,當全部字符串都截取完以後也就解析出了一個完整的 AST。
優化器(optimizer)的原理是用遞歸的方式將全部節點打標記,表示是不是一個 靜態節點,而後再次遞歸一遍把 靜態根節點 也標記出來。
代碼生成器(code generator)的原理也是經過遞歸去拼一個函數執行代碼的字符串,遞歸的過程根據不一樣的節點類型調用不一樣的生成方法,若是發現是一顆元素節點就拼一個_c(tagName, data, children) 的函數調用字符串,而後 data 和 children 也是使用 AST 中的屬性去拼字符串。最後拼出一個完整的 render 函數代碼。
借圖(easyhappy vue模板編譯原理):
答:keep-alive 是 Vue 內置的一個組件,可使被包含的組件保留狀態,避免從新渲染 ,其有如下特性:
1.通常結合路由和動態組件一塊兒使用,用於緩存組件;
2.提供 include 和 exclude 屬性,二者都支持字符串或正則表達式, include 表示只有名稱匹 配的組件會被緩存,exclude 表示任何名稱匹配的組件都不會被緩存 ,其中 exclude 的優先級比 include 高;
3.對應兩個鉤子函數 activated 和 deactivated ,當組件被激活時,觸發鉤子函數 activated,當組件被移除時,觸發鉤子函數 deactivated。
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:是用; 來拼接
答:
答:
答:
答:
答:先非對稱加密,後對稱加密
答:
答:這裏能夠貼個很厲害的人的總結!
從輸入URL到頁面加載的過程?如何由一道題完善本身的前端知識體系!
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:
答:不打廣告,能夠買一下修言大佬的小冊,寫的好
答:
答:我這個真的不是很瞭解,最近買了修言大佬的掘金小冊,惡補一下,順便貼一些最近再看的好文
答:
答:
答:
面試也是總結的過程,也是對本身知識的梳理,經過面試進行查漏補缺,對本身的知識水平有一個認知,向大廠靠近。
因爲本人技術能力所限,若是相關錯誤請及時與我聯繫修改,謝謝!
本文使用 mdnice 排版