前端面試題(1)

1.瀏覽器渲染頁面的流程css

步驟:1)解析HTML文件,構建DOM Treehtml

  2)解析CSS,構建CSSOM Tree(css規則樹)前端

  3)將DOM Tree和CSSOM合併,構建Render Tree(渲染樹)ajax

  4)reflow(重排):根據Render tree 進行節點信息計算(layout)數據庫

  5)repaint(重繪):根據計算好的信息繪製整個頁面json

理論上,每一次的dom更改或者css集合屬性更改,都會引發一次瀏覽器的重排/重繪過程,而若是是css的非幾何屬性更改,則只會引發重繪過程,因此重排必定引發重繪,重繪不必定引發重排後端

由於有時JS也參與DOM Tree的構建,於是咱們會先執行js再開始構建渲染樹,JS腳本阻塞Render tree的構建,即阻塞了頁面的渲染api

2.企業項目中爲何要使用NodeJS?瀏覽器

Node.JS適合如下的情景緩存

1)實時性應用,好比在線多人協做工具,網頁聊天應用

2)以I/O爲主的高併發應用,好比爲客戶端提供API,讀取數據庫

3)流失應用,好比客戶常常上傳文件

4)先後端分離

3.AMD和CMD的區別

AMD 依賴前置

CMD 依賴就近

4.當輸入www.baidu.com後會發生哪些事情?

1)輸入網址 按下回車 ----DNS解析

2)找到相對應的服務器

3)TCP的三次握手

4)找到資源庫,獲取相對應的數據

5)解析數據

html css js img--TCP四次揮手

6)返回客戶端頁面

5.前端渲染和後端渲染的區別和優缺點?

首先,介紹一下 SPA、SEO、SSR 三者的區別

SPA(single page application) 單頁面應用,是先後端分離時提出的一種解決方案。
優勢:頁面之間切換快;減小了服務器壓力;
缺點:首屏打開速度慢,不利於 SEO 搜索引擎優。
 
SEO(search engine optimization)搜索引擎優化,利用搜索引擎的規則提升網站在有關搜索引擎內的天然排名。
咱們以前說 SPA 單頁面應用,經過 ajax 獲取數據,這就難保證咱們的頁面能被搜索引擎收到。而且有一些搜索引擎不支持的 js 和經過 ajax 獲取的數據,那就更不用提 SEO 了,爲解決這個問題,SSR 登場了···
 
SSR (server side rendering)服務端渲染,SSR 的出現必定程度上解決了 SPA 首屏慢的問題,又極大的減小了普通 SPA 對於 SEO 的不利影響。
優勢:
  更快的響應時間,不用等待全部 js 都下載完成,瀏覽器便能顯示比較完整的頁面;
更好的 SSR,咱們能夠將 SEO 關鍵信息直接在後臺就渲染成 html,從而保證搜索引擎都能爬取到關鍵數據。
缺點:
  佔用更多的 CUP 和內存資源;
一些經常使用的瀏覽器的 api 可能沒法正常使用,好比 window,document,alert等,若是使用的話須要對運行環境加以判斷。
 
什麼是服務器端渲染和客戶端渲染?
  互聯網早期,用戶使用的瀏覽器瀏覽的都是一些沒有複雜邏輯的、簡單的頁面,這些頁面都是在後端將 html 拼接好的,而後返回給前端完整的 html 文件,瀏覽器拿到這個 html 文件以後就能夠直接解析展現了,這也就是所謂的服務器端渲染。而隨着前端頁面的複雜性提升,前端就不只僅是普通的頁面展現了,多是添加更多功能的組件,複雜性更大,另外,此時 ajax 的興起,使得頁面就開始崇拜先後端分離的開發模式,即後端不提供完整的 html 頁面,而是提供一些 api 使得前端能夠獲取 json 數據,而後前端拿到 json 數據以後再在前端進行 html 頁面的拼接,而後展現在瀏覽器上,這就是所謂的客戶端渲染,這樣前端就能夠專一 UI 的開發,後端專一與邏輯開發
 
二者本質的區別?
  客戶端渲染和服務器端渲染的最重要的區別就是到底是誰來完成html文件的完整拼接,若是是在服務器端完成的,而後返回給客戶端,就是服務器端渲染,而若是是前端作了更多的工做完成了html的拼接,則就是客戶端渲染。
 
服務器端渲染的優缺點是?
優勢:

前端耗時少。由於後端拼接完了html,瀏覽器只須要直接渲染出來。
有利於SEO。由於在後端有完整的html頁面,因此爬蟲更容易爬取得到信息,更有利於seo。
無需佔用客戶端資源。即解析模板的工做徹底交由後端來作,客戶端只要解析標準的html頁面便可,這樣對於客戶端的資源佔用更少,尤爲是移動端,也能夠更省電。
後端生成靜態化文件。即生成緩存片斷,這樣就能夠減小數據庫查詢浪費的時間了,且對於數據變化不大的頁面很是高效 。

缺點:

  不利於先後端分離,開發效率低。使用服務器端渲染,則沒法進行分工合做,則對於前端複雜度高的項目,不利於項目高效開發。另外,若是是服務器端渲染,則前端通常就是寫一個靜態html文件,而後後端再修改成模板,這樣是很是低效的,而且還經常須要先後端共同完成修改的動做; 或者是前端直接完成html模板,而後交由後端。另外,若是後端改了模板,前端還須要根據改動的模板再調節css,這樣使得先後端聯調的時間增長。
佔用服務器端資源。即服務器端完成html模板的解析,若是請求較多,會對服務器形成必定的訪問壓力。而若是使用前端渲染,就是把這些解析的壓力分攤了前端,而這裏確實徹底交給了一個服務器。
 
客戶端渲染的優缺點是?
優勢:
  先後端分離。前端專一於前端UI,後端專一於api開發,且前端有更多的選擇性,而不須要遵循後端特定的模板。
體驗更好。好比,咱們將網站作成SPA或者部份內容作成SPA,這樣,尤爲是移動端,可使體驗更接近於原生app。

缺點:
  前端響應較慢。若是是客戶端渲染,前端還要進行拼接字符串的過程,須要耗費額外的時間,不如服務器端渲染速度快。
不利於SEO。目前好比百度、谷歌的爬蟲對於SPA都是不認的,只是記錄了一個頁面,因此SEO不好。由於服務器端可能沒有保存完整的html,而是前端經過js進行dom的拼接,那麼爬蟲沒法爬取信息。 除非搜索引擎的seo能夠增長對於JavaScript的爬取能力,這才能保證seo。

使用服務器端渲染仍是客戶端渲染?
  不談業務場景而盲目選擇使用何種渲染方式都是耍流氓。好比企業級網站,主要功能是展現而沒有複雜的交互,而且須要良好的SEO,則這時咱們就須要使用服務器端渲染;而相似後臺管理頁面,交互性比較強,不須要seo的考慮,那麼就可使用客戶端渲染。
另外,具體使用何種渲染方法並非絕對的,好比如今一些網站採用了首屏服務器端渲染,即對於用戶最開始打開的那個頁面採用的是服務器端渲染,這樣就保證了渲染速度,而其餘的頁面採用客戶端渲染,這樣就完成了先後端分離。

 6.淺談堆和棧的理解

js變量存儲有棧存儲和堆存儲,基本數據類型的變量存儲在棧中,引用數據類型的變量存儲在堆中,引用類型數據的地址也存在棧中

當訪問基礎類型的變量時,直接從棧中取值。當訪問引用類型變量時,先從棧中讀取地址,再根據地址到堆中取出數據

7.js的數據類型分爲哪幾類

基礎數據類型:== !=- *= /= -=%=

強制類型轉換:Number parseInt();取整轉換parseFloat()

8.undefined和null區別

null是一個表示"無"的對象,轉爲數值爲0

undefined:是一個表示"無"的原始值,轉爲數值時爲NaN

undefined:

(1)變量被聲明瞭,但沒有賦值時,就等於undefined

(2)調用函數時,應該提供的參數沒有提供,該參數等於undefined

(3)對象沒有賦值的屬性,該屬性的值爲undefined

(4)函數沒有返回值時,默認返回undefined

null:

(1)做爲函數的參數,表示該函數的參數不是對象

(2)做爲對象原型鏈的終點

相關文章
相關標籤/搜索