1、頁面渲染的步驟是什么?
具體分為5步:(1)HTML解析出DOM樹(2)CSS解析出style樣式表(3)將兩者關聯生成渲染樹(4)相關布局根據渲染樹計算每個結點的信息(5)根據計算好的信息繪制整個頁面。
webkit瀏覽器和Gecko在名詞上有些微不同,步驟一樣。
?瀏覽器會在下載完成全部CSS之后才對整個頁面進行渲染,因此最好的做法是將CSS放在頁面最上面,讓瀏覽器盡快下載CSS(這是一個異步過程)。如果將 CSS放在其他地方比如 BODY中,則瀏覽器有可能還未下載和解析到 CSS就已經開始渲染頁面了,這就導致頁面由無 CSS狀態跳轉到 CSS狀態(頁面回閃),用戶體驗比較糟糕,所以可以考慮將CSS放在HEAD中。
Javascript則相反,瀏覽器在加載javascript后立即執行,有可能會阻塞整個頁面,造成頁面顯示緩慢,因此javascript最好放在頁面最下面。但如果頁面解析時就需要用到javascript,這時放到底部就不合適了。
2、頁面重繪和頁面重排的區別,分別在什么時候發生?
重繪:屏幕的一部分重畫,元素幾何尺寸不變
重排:元素幾何尺寸改變,要重新驗證并計算渲染樹
重排成本遠高于重繪。
3、css實現三角形
利用border屬性,元素不定寬高,某一邊的border為0;
4、scss比css的優勢
5、opacity和rgba表示透明度的區別
opacity:可繼承;rgba不會
6、cdn內容分發網絡的原理
內容就近分發,利用網關進行緩存,源服務器將內容備份存儲在各個中間服務器上,瀏覽器發送請求是,通過DNS域名解析,找到離自己最近的中間服務器,獲取到備份的信息。因為就近,加快了處理請求的速度。(緩存機制的一種)
7、口述js原型鏈
讓對象a的原型等于對象b的實例,這時a對象實例的proto屬性指向a的原型對象-》b的原型對象;若b的原型等于c的實例,則又會指向c,一次向上,直至指向object,形成一條繼承鏈。真正實現原型鏈的是proto屬性而不是原型對象。
8、webpack打包及原理
9、commenJS、AMD、CMD的區別
異步模塊加載機制;commenJS主要用于服務端,比如nodejs;AMD依賴前置,預執行;CMD依賴就近,懶執行。
10、npm install --save什么意思,npm install和 npm run dev從哪里開始執行?
11、深復制、淺復制的區別于實現
淺復制:復制的是引用
深復制:會再生成一個新對象,與原對象沒有關系。
逐個遞歸實現深復制(具體代碼)
12、DOM節點的操作有哪些
13、緩存的原理
cache-control? Etag? ....
14、基本類型與引用類型的存儲區別
基本類型存儲在棧中,直接存值;引用類型存儲在堆中,是利用引用(指針)進行賦值、調用
15、<style>為什么放在<head>里,<script>為什么放在<body>里
<body>中存放的是dom樹的信息,為了使html與css分離,將<style>放在<head>中(內嵌式),否則就是內聯式。
<script>是立即下載并執行的,js文件是阻塞的,放在body尾部,是為了使dom節點都加載完畢后再對其進行操作,否則,會引發頁面回流重計算以及獲取不到DOM節點的問題。
16、同源策略
同域名、同協議、同端口
17、瀏覽器數據存儲的方法
web緩存? 本地緩存
18、HTML5中解決跨域新增的方法
postMessage()方法允許來自不同源的腳本采用異步方式進行有限的通信,可以實現跨文本檔、多窗口、跨域消息傳遞。postMessage(data,origin)方法接受兩個參數,其中data是要傳遞的數據,origin是目標窗口的源。通過在另一個窗口上監聽window的message事件就可以接收到任何窗口傳來的數據。
19、VUE雙向數據綁定實現的原理
發布訂閱者模式+數據劫持
20、會用grid布局嗎?
21、git工作區、暫存區、版本庫的區別
git工作區:電腦里能看到的目錄,里面存放的是從遠程拉取到的某個版本,我們的修改就是基于工作區的基礎上,文件的當前狀態;
暫存區:當我們做出了修改,利用git-add指令加入修改時,做出的修改是存放到暫存區的;
版本庫:git-commit將暫存區中的修改提交到版本庫,作為本地電腦的一個新版本,可以撤回commit;
git-push是將本地的新版本發布到遠程,則整個團隊都可以拉取到。
git的一個重要的特性是支持分支。當我們正在進行一個主分支,臨時有另外一個需求要解決,可以把它放到一個分支中,當對這個小分支編程并測試成功后,并入主分支中。這樣就不會對其他人的工作產生干擾。
git merge 合并分支