【備戰秋招Day 8】經典面試題29-32及在線編程題22-24答案

經典面試題

29..JavaScript如何實現繼承?

構造繼承

原型繼承

實例繼承

拷貝繼承

原型prototype機制或apply和call方法去實現較簡單,建議使用構造函數與原型混合方式。

function Parent(){

this.name = wang;

}

function Child(){

this.age = 28;

}

Child.prototype = new Parent();//繼承了Parent,通過原型

var demo = new Child();

alert(demo.age);

alert(demo.name);//得到被繼承的屬性

30.清除浮動有哪些方式?比較好的方式是哪一種?

(1)父級div定義height。

(2)結尾處加空div標籤clear:both。

(3)父級div定義偽類:after和zoom。

(4)父級div定義overflow:hidden。

(5)父級div定義overflow:auto。

(6)父級div也浮動,需要定義寬度。

(7)父級div定義display:table。

(8)結尾處加br標籤clear:both。

比較好的是第3種方式,好多網站都這麼用。

31.box-sizing常用的屬性有哪些?分別有什麼作用?

(Q1)box-sizing: content-box|border-box|inherit;

(Q2)content-box:寬度和高度分別應用到元素的內容框。在寬度和高度之外繪製元素的內邊距和邊框(元素默認效果)。

border-box:元素指定的任何內邊距和邊框都將在已設定的寬度和高度內進行繪製。通過從已設定的寬度和高度分別減去邊框和內邊距才能得到內容的寬度和高度。

32.Doctype作用?標準模式與兼容模式各有什麼區別?

(Q1)<!DOCTYPE>告知瀏覽器的解析器用什麼文檔標準解析這個文檔。DOCTYPE不存在或格式不正確會導致文檔以兼容模式呈現。

(Q2)標準模式的排版和JS運作模式都是以該瀏覽器支持的最高標準運行。在兼容模式中,頁面以寬鬆的向後兼容的方式顯示,模擬老式瀏覽器的行為以防止站點無法工作。

前端思考題

15.如何視覺隱藏網頁內容,只讓它們在屏幕閱讀器中可用?

display:none;的缺陷搜索引擎可能認為被隱藏的文字屬於垃圾信息而被忽略屏幕閱讀器(是為視覺上有障礙的人設計的讀取屏幕內容的程序)會忽略被隱藏的文字。

visibility:hidden;的缺陷這個大家應該比較熟悉就是隱藏的內容會佔據他所應該佔據物理空間3.overflow:hidden;一個比較合理的方法.texthidden{display:block;/*統一轉化為塊級元素*/overflow:hidden;width:0;height:0;}就像上面的一段CSS所展示的方法,將寬度和高度設定為0,然後超過部分隱藏,就會彌補上述一、二方法中的缺陷,也達到了隱藏內容的目的。

16.你覺得WebAssembly為什麼比asm.js快?

WebAssembly 為什麼比 asm.js 快?

WebAssembly 是為 Web 而設計的、可以生成瀏覽器可執行的二進位文件的編程語言。並且於2017 年 2 月 28 日,四個主要的瀏覽器一致同意宣布 WebAssembly 的 MVP 版本已經完成,即將推出一個瀏覽器可以搭載的穩定版本。WebAssembly 的一個主要目標就是變快。當然,「快」是相對的概念。相比於 JavaScript 和其他動態語言,WebAssembly 的快主要是因為它的靜態類型特性和方便優化特性。WebAssembly 意在速度上能夠達到和本地執行一樣快,其實 asm.js 已經比較接近這一目標了,但是 WebAssembly 要進一步縮短和本地執行速度之間的差距。

在線編程題

22.柯里化

要求

已知 fn 為一個預定義函數,實現函數 curryIt,調用之後滿足如下條件:

1、返回一個函數 a,a 的 length 屬性值為 1(即顯式聲明 a 接收一個參數)

2、調用 a 之後,返回一個函數 b, b 的 length 屬性值為 1

3、調用 b 之後,返回一個函數 c, c 的 length 屬性值為 1

4、調用 c 之後,返回的結果與調用 fn 的返回值一致

5、fn 的參數依次為函數 a, b, c 的調用參數

思路:

不用 arguments.callee 的方法,用變數名代替了,大同小異:

function curryIt(fn) {n var length = fn.length,n args = [];n var result = function (arg){n args.push(arg);n length --;n if(length <= 0 ){n return fn.apply(this, args);n } else {n return result;n }n }n n return result;n}n

23.且運算

要求

返回參數 a 和 b 的邏輯且運算結果。

思路

且運算符"&&"的運算規則是:如果第一個運運算元的布爾值為true,則返回第二個運運算元的值(注意是值,不是布爾值);如果第一個運運算元的布爾值為false,則直接返回第一個運運算元的值,且不再對第二個運運算元求值。

function and(a, b) {n return !!(a && b)n //如果a為true,b為非Boolean就會返回非Boolean值,所以加一步轉換n}n

24.二進位轉換

要求

給定二進位字元串,將其換算成對應的十進位數字

思路

parseInt方法可以將其它進位轉換為十進位,只需要給該方法傳入需要轉換的字元串和該字元串的進位表示兩個參數即可。

function base10(str) {n /**n 其它進位轉十進位n parseInt(str,2)n parseInt(str,8)n parseInt(str,16)n */n return parseInt(str,2);n}n

推薦閱讀:

當面試官問你閉包時,他究竟想聽到些什麼?
面試總結-語言篇(從內存底層看待c/c++)
面試 | 如何在面試中巧妙地"偽裝"成極具團隊精神的社交達人?
{面試禮儀} 如何應對面試官的9大疑問
關於安全工程師崗位的面試

TAG:前端开发 | 前端工程师 | 面试问题 |