日韩 亚洲一区二_久久vs国产综合色大全_国产精品福利在线_欧美在线一级A片免费观看欧美在线_女同性毛片60分钟

您現(xiàn)在所在的位置:首頁(yè) >學(xué)員就業(yè) > 就業(yè)寶典 > 2016最熱web前端面試題,機(jī)會(huì)青睞有準(zhǔn)備的人

2016最熱web前端面試題,機(jī)會(huì)青睞有準(zhǔn)備的人

來(lái)源:奇酷教育 發(fā)表於:

恰逢校招旺季,奇酷教育為您搜集一些面試中經(jīng)常會(huì)遇到的經(jīng)典面試題以及自己面試過(guò)程中無(wú)法解決的問(wèn)題,通過(guò)對(duì)知識的整理以及經(jīng)驗(yàn)的總結(jié),重

 

恰逢校招旺季,奇酷教育為您搜集一些面試中經(jīng)常會(huì)遇到的經(jīng)典面試題以及自己面試過(guò)程中無(wú)法解決的問(wèn)題,通過(guò)對(duì)知識的整理以及經(jīng)驗(yàn)的總結(jié),重新鞏固自身的前端基礎(chǔ)知識,助你過(guò)關(guān)斬將,早日獲得滿(mǎn)意工作。
 

 

 
HTML/CSS部分
 
 

1、什麼是盒子模型?

        在網(wǎng)頁(yè)中,一個(gè)元素佔有空間的大小由幾個(gè)部分構(gòu )成,其中包括元素的內(nèi)容(content),元素的內(nèi)邊距(padding),元素的邊框(border),元素的外邊距(margin)四個(gè)部分。這四個(gè)部分佔有的空間中,有的部分可以顯示相應(yīng)的內(nèi)容,而有的部分只用來(lái)分隔相鄰的區(qū)域或區(qū)域。4個(gè)部分一起構(gòu )成了css中元素的盒模型。

 

2、行內(nèi)元素有哪些?塊級(jí)元素有哪些? 空(void)元素有那些?

行內(nèi)元素:a、b、span、img、input、strong、select、label、em、button、textarea

塊級(jí)元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote

空元素:即系沒有內(nèi)容的HTML元素,例如:br、meta、hr、link、input、img

 

3、CSS實(shí)現(xiàn)垂直水平居中

一道經(jīng)典的問(wèn)題,實(shí)現(xiàn)方法有很多種,以下是其中一種實(shí)現(xiàn):

HTML結(jié)構(gòu ):

 

<div class="wrapper">

    <div class="content"></div>

</div>

 

CSS:

 

.wrapper{position:relative;}

    .content{

        background-color:#6699FF;

        width:200px;

        height:200px;

        position: absolute;        //父元素需要相對(duì)定位

        top: 50%;

        left: 50%;

        margin-top:-100px ;   //二分之一的height,width

        margin-left: -100px;

    }

 

4、簡(jiǎn)述一下src與href的區(qū)別

href 是指向網(wǎng)絡(luò)資源所在位置,建立和當(dāng)前元素(錨點(diǎn))或當(dāng)前文檔(連結(jié))之間的連結(jié),用於超連結(jié)。

src是指向外部資源的位置,指向的內(nèi)容將會(huì)嵌入到文檔中當(dāng)前標(biāo)籤所在位置;在請求src資源時(shí)會(huì)將其指向的資源下載並應(yīng)用到文檔內(nèi),例如js腳本,img圖片和frame等元素。當(dāng)瀏覽器解析到該元素時(shí),會(huì)暫停其他資源的下載和處理,直到將該資源加載、編譯、執(zhí)行完畢,圖片和框架等元素也如此,類(lèi)似於將所指向資源嵌入當(dāng)前標(biāo)籤內(nèi)。這也是為什麼將js腳本放在底部而不是頭部。

 

5、什麼是CSS Hack?

一般來(lái)說(shuō)是針對(duì)不同的瀏覽器寫(xiě)不同的CSS,就是 CSS Hack。

IE瀏覽器Hack一般又分為三種,條件Hack、屬性級(jí)Hack、選擇符Hack(詳細(xì)參考CSS文檔:css文檔)。例如:

 

// 1、條件Hack

   <!--[if IE]>

      <style>

            .test{color:red;}

      </style>

   <![endif]-->

   // 2、屬性Hack

    .test{

    color:#0909; /* For IE8+ */

    *color:#f00;  /* For IE7 and earlier */

    _color:#ff0;  /* For IE6 and earlier */

    }

   // 3、選擇符Hack

    * html .test{color:#090;}       /* For IE6 and earlier */

    * + html .test{color:#ff0;}     /* For IE7 */

 

6、簡(jiǎn)述同步和異步的區(qū)別

同步是阻塞模式,異步是非阻塞模式。

同步就是指一個(gè)進(jìn)程在執(zhí)行某個(gè)請求的時(shí)候,若該請求需要一段時(shí)間才能返回信息,那麼這個(gè)進(jìn)程將會(huì)一直等待下去,直到收到返回信息才繼續(xù)執(zhí)行下去;

異步是指進(jìn)程不需要一直等下去,而是繼續(xù)執(zhí)行下面的操作,不管其他進(jìn)程的狀態(tài)。當(dāng)有消息返回時(shí)系統(tǒng)會(huì)通知進(jìn)程進(jìn)行處理,這樣可以提高執(zhí)行的效率。

 

7、px和em的區(qū)別

px和em都是長(zhǎng)度單位,區(qū)別是,px的值是固定的,指定是多少就是多少,計(jì)算比較容易。em得值不是固定的,並且em會(huì)繼承父級(jí)元素的字體大小。

瀏覽器的默認(rèn)字體高都是16px。所以未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px。那麼12px=0.75em, 10px=0.625em

 

8、什麼叫優(yōu)雅降級(jí)和漸進(jìn)增強(qiáng)?

漸進(jìn)增強(qiáng) progressive enhancement:

針對(duì)低版本瀏覽器進(jìn)行構(gòu )建頁(yè)面,保證最基本的功能,然後再針對(duì)高級(jí)瀏覽器進(jìn)行效果、交互等改進(jìn)和追加功能達(dá)到更好的用戶(hù)體驗(yàn)。

 

優(yōu)雅降級(jí) graceful degradation:

一開(kāi)始就構(gòu )建完整的功能,然後再針對(duì)低版本瀏覽器進(jìn)行兼容。

 

區(qū)別:

a. 優(yōu)雅降級(jí)是從複雜的現(xiàn)狀開(kāi)始,並試圖減少用戶(hù)體驗(yàn)的供給

b. 漸進(jìn)增強(qiáng)則是從一個(gè)非常基礎(chǔ)的,能夠起作用的版本開(kāi)始,並不斷擴充,以適應(yīng)未來(lái)環(huán)境的需要

c. 降級(jí)(功能衰減)意味著往回看;而漸進(jìn)增強(qiáng)則意味著朝前看,同時(shí)保證其根基處於安全地帶

 

9、瀏覽器的內(nèi)核分別是什麼?

IE: trident內(nèi)核

Firefox:gecko內(nèi)核

Safari:webkit內(nèi)核

Opera:以前是presto內(nèi)核,Opera現(xiàn)已改用Google Chrome的Blink內(nèi)核

Chrome:Blink(基於webkit,Google與Opera Software共同開(kāi)發(fā))

 

 
JavaScript部分
 
 

1、怎樣添加、移除、移動(dòng)、複製、創(chuàng)建和查找節(jié)點(diǎn)?

 

1)創(chuàng)建新節(jié)點(diǎn)

createDocumentFragment() //創(chuàng)建一個(gè)DOM片段

createElement() //創(chuàng)建一個(gè)具體的元素

createTextNode() //創(chuàng)建一個(gè)文本節(jié)點(diǎn)

 

2)添加、移除、替換(huàn)、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替換(huàn)

insertBefore() //插入

 

3)查找

getElementsByTagName() //通過(guò)標(biāo)籤名稱(chēng)

getElementsByName() //通過(guò)元素的Name屬性的值

getElementById() //通過(guò)元素Id,唯一性

 

2、實(shí)現(xiàn)一個(gè)函數(shù)clone,可以對(duì)JavaScript中的5種主要的數(shù)據(jù)類(lèi)型(包括Number、String、Object、Array、Boolean)進(jìn)行值複製。

 

  /**

* 對(duì)象克隆

* 支持基本數(shù)據(jù)類(lèi)型及對(duì)象

* 遞歸方法

*/

function clone(obj) {

    var o;

    switch (typeof obj) {

        case "undefined":

            break;

        case "string":

            o = obj + "";

            break;

        case "number":

            o = obj - 0;

            break;

        case "boolean":

            o = obj;

            break;

        case "object": // object 分為兩(liǎng)種情況 對(duì)象(Object)或數(shù)組(Array)

            if (obj === null) {

                o = null;

            } else {

                if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {

                    o = [];

                    for (var i = 0; i  obj.length; i++) {

                        o.push(clone(obj[i]));

                    }

                } else {

                    o = {};

                    for (var k in obj) {

                        o[k] = clone(obj[k]);

                    }

                }

            }

            break;

        default:

            o = obj;

            break;

    }

    return o;

}

 

3、如何消除一個(gè)數(shù)組裡面重複的元素?

 

// 方法一:

var arr1 =[1,2,2,2,3,3,3,4,5,6],

    arr2 = [];

for(var i = 0,len = arr1.length; i< len; i++){

    if(arr2.indexOf(arr1[i]) < 0){

        arr2.push(arr1[i]);

    }

}

document.write(arr2); // 1,2,3,4,5,6

 

4、想實(shí)現(xiàn)一個(gè)對(duì)頁(yè)面某個(gè)節(jié)點(diǎn)的拖曳?如何做?

使用原生JS

 

5、在Javascript中什麼是偽數(shù)組?如何將偽數(shù)組轉(zhuǎn)化為標(biāo)準(zhǔn)數(shù)組?

偽數(shù)組(類(lèi)數(shù)組):無(wú)法直接調(diào)用數(shù)組方法或期望length屬性有什麼特殊的行為,但仍可以對(duì)真正數(shù)組遍歷方法來(lái)遍歷它們。典型的是函數(shù)的argument參數(shù),還有像調(diào)用getElementsByTagName,document.childNodes之類(lèi)的,它們都返回NodeList對(duì)象都屬於偽數(shù)組。可以使用Array.prototype.slice.call(fakeArray)將數(shù)組轉(zhuǎn)化為真正的Array對(duì)象。

 

function log(){

      var args = Array.prototype.slice.call(arguments);  

//為了使用unshift數(shù)組方法,將argument轉(zhuǎn)化為真正的數(shù)組

      args.unshift('(app)');

 

      console.log.apply(console, args);

};

 

6、Javascript中callee和caller的作用?

caller是返回一個(gè)對(duì)函數(shù)的引用,該函數(shù)調(diào)用了當(dāng)前函數(shù);

callee是返回正在被執(zhí)行的function函數(shù),也就是所指定的function對(duì)象的正文。

 

7、請描述一下cookies,sessionStorage和localStorage的區(qū)別

sessionStorage用於本地存儲(chǔ)一個(gè)會(huì)話(huà)(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會(huì)話(huà)中的頁(yè)面才能訪(fǎng)問(wèn)並且當(dāng)會(huì)話(huà)結(jié)束後數(shù)據(jù)也隨之銷(xiāo)毀。因此sessionStorage不是一種持久化的本地存儲(chǔ),僅僅是會(huì)話(huà)級(jí)別的存儲(chǔ)。而localStorage用於持久化的本地存儲(chǔ),除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過(guò)期的。

 

web storage和cookie的區(qū)別

Web Storage的概念和cookie相似,區(qū)別是它是為了更大容量存儲(chǔ)設(shè)計(jì)的。Cookie的大小是受限的,並且每次你請求一個(gè)新的頁(yè)面的時(shí)候Cookie都會(huì)被發(fā)送過(guò)去,這樣無(wú)形中浪費(fèi)了帶寬,另外cookie還需要指定作用域,不可以跨域調(diào)用。

除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開(kāi)發(fā)者自己封裝setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是與伺服器進(jìn)行交互,作為HTTP規(guī)範的一部分而存在 ,而Web Storage僅僅是為了在本地“存儲(chǔ)”數(shù)據(jù)而生。

 

8、手寫(xiě)數(shù)組快速排序

關(guān)於快排算法的詳細(xì)說(shuō)明,可以參考阮一峰老師的文章快速排序

“快速排序”的思想很簡(jiǎn)單,整個(gè)排序過(guò)程只需要三步:

(1)在數(shù)據(jù)集之中,選擇一個(gè)元素作為”基準(zhǔn)”(pivot)。

(2)所有小於”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的左邊;所有大於”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的右邊。

(3)對(duì)”基準(zhǔn)”左邊和右邊的兩(liǎng)個(gè)子集,不斷重複第一步和第二步,直到所有子集只剩下一個(gè)元素為止。

 

9、統(tǒng)計(jì)字符串”aaaabbbccccddfgh”中字母個(gè)數(shù)或統(tǒng)計(jì)最多字母數(shù)。

 

var str = "aaaabbbccccddfgh";

var obj  = {};

for(var i=0;istr.length;i++){

    var v = str.charAt(i);

    if(obj[v] & obj[v].value == v){

        obj[v].count = ++ obj[v].count;

    }else{

        obj[v] = {};

        obj[v].count = 1;

        obj[v].value = v;

    }

}

for(key in obj){

    document.write(obj[key].value +'='+obj[key].count+' '); // a=4  b=3  c=4  d=2  f=1  g=1  h=1

}

 

10、寫(xiě)一個(gè)function,清除字符串前後的空格。(兼容所有瀏覽器)

 

function trim(str) {

    if (str & typeof str === "string") {

        return str.replace(/(^s*)|(s*)$/g,""); //去除前後空白符

    }

}

 

 
其他部分
 
 

1、一次完整的HTTP事務(wù)是怎樣的一個(gè)過(guò)程?

基本流程:

a. 域名解析

b. 發(fā)起TCP的3次握手

c. 建立TCP連接後發(fā)起http請求

d. 伺服器端響應(yīng)http請求,瀏覽器得到html代碼

e. 瀏覽器解析html代碼,並請求html代碼中的資源

f. 瀏覽器對(duì)頁(yè)面進(jìn)行渲染呈現(xiàn)給用戶(hù)

 

2、對(duì)前端工程師這個(gè)職位你是怎麼樣理解的?

a. 前端是最貼近用戶(hù)的程式設(shè)計(jì)師,前端的能力就是能讓產(chǎn)品從 90分進(jìn)化到 100 分,甚至更好

b. 參與項(xiàng)目,快速高質(zhì)量完成實(shí)現(xiàn)效果圖,精確到1px;

c. 與團(tuán)隊(duì)成員,UI設(shè)計(jì),產(chǎn)品經(jīng)理的溝通;

d. 做好的頁(yè)面結(jié)構(gòu ),頁(yè)面重構(gòu )和用戶(hù)體驗(yàn);

e. 處理hack,兼容、寫(xiě)出優(yōu)美的代碼格式;

f. 針對(duì)伺服器的優(yōu)化、擁抱最新前端技術(shù)。