各種面試題

HTML

什麼是標籤語義化

合適的標籤做合適的事情

標籤語義化的好處

  • 比如標題使用 h1-h6,能夠增加權重,有利於蜘蛛的抓取,有利於SEO的優化
  • 去掉樣式的時候,頁面結構仍然比較清晰
  • 便於團隊的開發和維護

link和@import的區別

  • link是屬於XHTML標籤,除了加載CSS之外,還可以用於定義RSS等其他事務;@import屬於CSS範疇,只能加載CSS
  • link引用CSS的時候,在頁面載入時加載;@import在頁面完全載入以後才加載
  • link是XHTML標籤沒有兼容問題;@import是在CSS2.1時提出來的,低版本的瀏覽器不支持
  • link支持使用JavaScript控制DOM來改變樣式;而@import不支持

XHTML和HTML的區別

XHTML可以說是HTML的子集,XHTML是更加嚴格的HTML。在XHTML中嚴格要求:

  • 所有的標籤必須是閉合的
  • 所有的標籤必須小寫
  • 所有的屬性值必須要用引號引起來("",遵循w3c的規範,如果不加雙引號,就無法區分是一些特殊字符了。)

列舉常見的行內元素、塊級元素和空元素

  • 行內元素:a span img input select b
  • 塊級元素:div ul li ol p h1-h6
  • 空元素(指的是沒有內容的元素):link input meta br hr

談談你對瀏覽器內核的理解
瀏覽器內核主要由兩部分組成:渲染引擎 JS引擎

  • 渲染引擎:負責取得網頁的內容(html、xml、css、img等)以及計算網頁的的顯示方式,然後輸出至顯示器或者打印機。不同瀏覽器的內核也不盡相同,所以在不同的瀏覽器可能會渲染出不同的效果。
  • JS引擎:解析、執行JavaScript來展示網頁的動態效果

開始渲染引擎和JS引擎並沒有區分的很明確,後來JS引擎越來越獨立,內核就傾向與只指渲染引擎

JavaScript

爲什麼typeof = null 的結果爲"object"

不同的對象在底層都表示爲二進制,在JavaScript中二進制前三位都爲0的話會被判定爲object類型,而null的二進制全部爲0,前三位也爲0,所以執行typeof檢測的時候返回的結果爲object。

call、apply、bind的區別以及應用場景?

不同點:call 和apply語法如下:

  1. 把需要操作函數中的this變爲第一個實參值,(在非嚴格模式下),第一個實參爲空或者寫null或者undefined,this都是window,剩下的第一個實參是誰,this就是誰。
    (嚴格模式下)第一個實參爲空,this是undefined,其餘的寫誰this就是誰。
  2. 改變爲this後,把需要操作的函數執行。
    唯一的區別:call在給函數傳遞實參的時候是一個個傳遞的,而apply是放在一個數組中一起傳遞的(但是也相當於一個個傳參)

bind的語法和call一樣,但是作用不一樣,bind只是提前把函數中的this改變了,但是並沒有立即把函數執行,它屬於預先改變this(柯里理化思想)

共同點:都屬於Function上定義的三種方法,所有的函數數據類型值都可以調取這三種方法,都是用來改變一個函數中的this關鍵字指向的(bind不兼容ie6-8)其餘的兼容所有的瀏覽器。

箭頭函數和普通函數的區別?

  • 箭頭函數是匿名函數不能作爲構造函數,不能使用new方法來創建
  • 箭頭函數不綁定arguments,取而代之用rest參數…解決
  • 箭頭函數沒有原型屬性
  • 箭頭函數不能換行
  • 箭頭函數中的this和普通函數的this指向存在着差別
  • 箭頭函數中的this不能使用call、apply、bind來改變

[].map(function(){})和[].forEach(function(){})的區別?

1 forEach()爲數組中的每一項執行回調函數,不像map(),他總是返回undefined的值,並且不可以被鏈式調用。
2. forEach遍歷的範圍在第一次調用callBack前就會確定。調用forEach後添加到數組中的項是不會被訪問到。
3. 使用forEach循環的時候是不能跳出循環的(中途不能被打斷),但是我們可以通過return控制循環,然而for循環我們可以通過break或者continue來控制循環是否執行

map()同樣爲數組中的每一項執行回調函數,並進行相應的處理,返回一個新的數組,原來的數組不會發生變化。

iframe有哪些優缺點?

缺點:

  • 在網頁中使用框架架構最大的弊病就是搜索引擎的‘蜘蛛’程序無法解讀這個頁面,不利於SEO的優化。當‘蜘蛛’程序遇到由無數的框架組成的頁面時,它們只會看到框架而無法找到鏈接,因此他們以爲改網站是個死站。對於一個網站來說無異於一場災難。
  • 框架結構有時候會使人感到迷惑,特別是在幾個框架中都出現上下左右的滾動條的時候,不利於審美
  • 不利於打印
  • 瀏覽器的後退按鈕無效
  • 多框架頁面會增加http請求,造成網頁加載速度慢
  • 在手機或者小屏顯示器上達不到良好的展示

優點:

  • 提高了代碼的重用性
  • 重載頁面時不需要重載整個頁面,只需要重載頁面中的一個框架頁(減少了數據的傳輸,加快了網頁下載速度)

ES6

Object .is() 與原來的比較操作符 === 和 == 的區別?

== 相等運算符,比較時會自動進行數據類型轉換
=== 嚴格相等運算符,比較時不進行隱式類型轉換
Object .is() 同值相等算法,在 === 基礎上對 0 和 NaN 特別處理

+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

其他

localforage和localStorage用來本地存儲數據的的卻別

localStorage的缺點:

  1. 存儲容量限制,大部分瀏覽器應該最多5M。我就遇到過localStorage存儲字符然後尺寸爆掉的情況。
  2. 僅支持字符串,如果是存對象還需要將使用JSON.stringify和JSON.parse方法互相轉換,有些囉嗦。
  3. 讀取都是同步的。大多數情況下,還挺好使的。但,如果存儲數據比較大,例如一張重要圖片base64格式存儲了,再讀可能會有可感知的延遲時間。

localforage的作用就是用來規避上面localStorage的缺點,同時保留localStorage的優點而設計的。從命名上就可以看出兩者關係不淺。

localStorage的優點是API非常簡單,使用很方便。於是,localforage和localStorage一模一樣。

至於localStorage的不足,localforage和使用了其他HTML5 API進行規避,什麼API呢?是IndexedDB和WebSQL。

也就是說,localforage的邏輯是這樣的:優先使用IndexedDB存儲數據,如果瀏覽器不支持,使用WebSQL,瀏覽器再不支持,使用localStorage

然後API還是localStorage的API,也就是數據增刪改查通過get,set,remove,clear和length等API。

所以在項目中,我們一般通過npm安裝這個庫來進行本地存儲。

堆、棧、隊列之間的區別?

  1. 堆是在程序運行時而不是在程序編譯時,申請的某個大小的內存空間。即動態分配內存,對其訪問和對一般內存的訪問沒有區別
  2. 棧就是一個桶,後放進去的先拿出來,它後面本來有的東西要等它出來之後才能出來(後進先出)
  3. 隊列是只能在隊頭做刪除操作,在隊尾做插入操作,而棧只能在棧頂做插入和刪除操作。

基於 Token 的身份驗證方法

  1. 客戶端通過用戶名+密碼等方式請求登錄
  2. 服務端收到請求,驗證賬號、密碼是否正確
  3. 驗證成功後服務端會簽發一個token,將這個token以及請求的數據返回給客戶端
  4. 客戶端收到token之後可以把它存儲起來,存在cookie或者localStorage中
  5. 客戶端每次請求資源的時候,都需要呆着服務端簽發的token
  6. 服務端收到請求,然後去驗證客戶端請求裏面帶着的 Token,如果驗證成功,就向客戶端返回請求的數據

什麼是svg,什麼用處?

SVG 是一種基於 XML 語法的圖像格式,全稱是可縮放矢量圖(Scalable Vector Graphics)。其他圖像格式都是基於像素處理的,SVG 則是屬於對圖像的形狀描述,所以它本質上是文本文件,體積較小,且不管放大多少倍都不會失真。

與其他圖像格式相比,使用 SVG 的優勢在於:

  • SVG 可被非常多的工具讀取和修改(比如記事本)
  • SVG 與 JPEG 和 GIF 圖像比起來,尺寸更小,且可壓縮性更強。
  • SVG 是可伸縮的
  • SVG 圖像可在任何的分辨率下被高質量地打印
  • SVG 可在圖像質量不下降的情況下被放大
  • SVG 圖像中的文本是可選的,同時也是可搜索的(很適合製作地圖)
  • SVG 可以與 Java 技術一起運行
  • SVG 是開放的標準
  • SVG 文件是純粹的 XML

主要用途:用來繪製圖形的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章