2016年Web前端面試題目匯總

作者:Lyzh
原文地址:
http://blog.linjiajun.com/2016/03/15/2016年Web前端面試題目匯總/

以下是收集一些面試中經(jīng)常會遇到的經(jīng)典面試題竖共,以及自己面試過程中無法解決的問題。通過對知識的整理以及經(jīng)驗的總結(jié),重新鞏固自身的前端基礎(chǔ)知識护蝶,如有錯誤或更好的答案杂穷,歡迎指正烛卧。:)

HTML/CSS部分

1予颤、什么是盒子模型踢步?

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

2凉驻、行內(nèi)元素有哪些?塊級元素有哪些复罐? 空(void)元素有那些涝登?

行內(nèi)元素:a、b效诅、span胀滚、img、input乱投、strong咽笼、select、label戚炫、em剑刑、button、textarea
塊級元素:div双肤、ul施掏、li钮惠、dl、dt其监、dd萌腿、p、h1-h6抖苦、blockquote
空元素:即系沒有內(nèi)容的HTML元素毁菱,例如:br、meta锌历、hr贮庞、link、input究西、img

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

一道經(jīng)典的問題,實現(xiàn)方法有很多種卤材,以下是其中一種實現(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;        //父元素需要相對定位
    top: 50%;
    left: 50%;
    margin-top:-100px ;   //二分之一的height遮斥,width
    margin-left: -100px;
}

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

href 是指向網(wǎng)絡(luò)資源所在位置扇丛,建立和當(dāng)前元素(錨點)或當(dāng)前文檔(鏈接)之間的鏈接术吗,用于超鏈接。

src是指向外部資源的位置帆精,指向的內(nèi)容將會嵌入到文檔中當(dāng)前標(biāo)簽所在位置较屿;在請求src資源時會將其指向的資源下載并應(yīng)用到文檔內(nèi)。例如js腳本卓练、img圖片和frame等元素隘蝎。當(dāng)瀏覽器解析到該元素時,會暫停其他資源的下載和處理襟企,直到將該資源加載嘱么、編譯、執(zhí)行完畢整吆,圖片和框架等元素也如此拱撵,類似于將所指向資源嵌入當(dāng)前標(biāo)簽內(nèi)。這也是為什么將js腳本放在底部而不是頭部表蝙。

5拴测、什么是CSS Hack?

一般來說是針對不同的瀏覽器寫不同的CSS,就是 CSS Hack府蛇。

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

例如:

// 1妆距、條件Hack
  <!--[if IE]>
     <style>
           .test{color:red;}
     </style>
  <![endif]-->
  // 2、屬性Hack
   .test{
color:#090\9; /* 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娱据、簡述同步和異步的區(qū)別

同步是阻塞模式,異步是非阻塞模式盅惜。同步就是指一個進(jìn)程在執(zhí)行某個請求的時候中剩,若該請求需要一段時間才能返回信息,那么這個進(jìn)程將會一直等待下去抒寂,直到收到返回信息才繼續(xù)執(zhí)行下去结啼;異步是指進(jìn)程不需要一直等下去,而是繼續(xù)執(zhí)行下面的操作屈芜,不管其他進(jìn)程的狀態(tài)郊愧。當(dāng)有消息返回時系統(tǒng)會通知進(jìn)程進(jìn)行處理,這樣可以提高執(zhí)行的效率井佑。

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

px和em都是長度單位。區(qū)別是:px的值是固定的躬翁,指定是多少就是多少红选,計算比較容易。em得值不是固定的姆另,并且em會繼承父級元素的字體大小。瀏覽器的默認(rèn)字體高都是16px坟乾。所以未經(jīng)調(diào)整的瀏覽器都符合:1em=16px迹辐。那么12px=0.75em, 10px=0.625em

8、什么叫優(yōu)雅降級和漸進(jìn)增強甚侣?

漸進(jìn)增強 progressive enhancement:針對低版本瀏覽器進(jìn)行構(gòu)建頁面明吩,保證最基本的功能,然后再針對高級瀏覽器進(jìn)行效果殷费、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗印荔。

優(yōu)雅降級 graceful degradation:一開始就構(gòu)建完整的功能,然后再針對低版本瀏覽器進(jìn)行兼容详羡。

區(qū)別:

a. 優(yōu)雅降級是從復(fù)雜的現(xiàn)狀開始仍律,并試圖減少用戶體驗的供給;
b. 漸進(jìn)增強則是從一個非呈的基礎(chǔ)的水泉,能夠起作用的版本開始,并不斷擴充,以適應(yīng)未來環(huán)境的需要草则;
c. 降級(功能衰減)意味著往回看钢拧;而漸進(jìn)增強則意味著朝前看,同時保證其根基處于安全地帶炕横。

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共同開發(fā))

JavaScript部分

1膜钓、怎樣添加、移除伯铣、移動呻此、復(fù)制、創(chuàng)建和查找節(jié)點腔寡?

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

createDocumentFragment() //創(chuàng)建一個DOM片段
createElement() //創(chuàng)建一個具體的元素
createTextNode() //創(chuàng)建一個文本節(jié)點

2)添加焚鲜、移除、替換放前、插入

appendChild() //添加
removeChild() //移除
replaceChild() //替換
insertBefore() //插入

3)查找

getElementsByTagName() //通過標(biāo)簽名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id忿磅,唯一性

2、實現(xiàn)一個函數(shù)clone凭语,可以對JavaScript中的5種主要的數(shù)據(jù)類型(包括Number葱她、String、Object似扔、Array吨些、Boolean)進(jìn)行值復(fù)制。

   /**
 * 對象克隆
 * 支持基本數(shù)據(jù)類型及對象
 * 遞歸方法
 */
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 分為兩種情況 對象(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炒辉、如何消除一個數(shù)組里面重復(fù)的元素豪墅?

// 方法一:
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、想實現(xiàn)一個對頁面某個節(jié)點的拖曳黔寇?如何做偶器?(使用原生JS)。

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

偽數(shù)組(類數(shù)組):無法直接調(diào)用數(shù)組方法或期望length屬性有什么特殊的行為憋飞,但仍可以對真正數(shù)組遍歷方法來遍歷它們霎苗。典型的是函數(shù)的argument參數(shù),還有像調(diào)用getElementsByTagName,document.childNodes之類的,它們都返回NodeList對象都屬于偽數(shù)組搀崭∵墩常可以使用Array.prototype.slice.call(fakeArray)將數(shù)組轉(zhuǎn)化為真正的Array對象猾编。

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是返回一個對函數(shù)的引用,該函數(shù)調(diào)用了當(dāng)前函數(shù)驴党;
callee是返回正在被執(zhí)行的function函數(shù)瘪撇,也就是所指定的function對象的正文。

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

sessionStorage用于本地存儲一個會話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個會話中的頁面才能訪問并且當(dāng)會話結(jié)束后數(shù)據(jù)也隨之銷毀鹏氧。因此sessionStorage不是一種持久化的本地存儲渤涌,僅僅是會話級別的存儲。而localStorage用于持久化的本地存儲把还,除非主動刪除數(shù)據(jù)实蓬,否則數(shù)據(jù)是永遠(yuǎn)不會過期的。

web storage和cookie的區(qū)別

Web Storage的概念和cookie相似吊履,區(qū)別是它是為了更大容量存儲設(shè)計的安皱。Cookie的大小是受限的,并且每次你請求一個新的頁面的時候Cookie都會被發(fā)送過去艇炎,這樣無形中浪費了帶寬酌伊,另外cookie還需要指定作用域,不可以跨域調(diào)用缀踪。除此之外居砖,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發(fā)者自己封裝setCookie驴娃,getCookie悯蝉。但是Cookie也是不可以或缺的:Cookie的作用是與服務(wù)器進(jìn)行交互,作為HTTP規(guī)范的一部分而存在 托慨,而Web Storage僅僅是為了在本地“存儲”數(shù)據(jù)而生。

8暇榴、手寫數(shù)組快速排序

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

“快速排序”的思想很簡單蔼紧,整個排序過程只需要三步:

(1) 在數(shù)據(jù)集之中婆硬,選擇一個元素作為”基準(zhǔn)”(pivot)。
(2) 所有小于”基準(zhǔn)”的元素奸例,都移到”基準(zhǔn)”的左邊彬犯;所有大于”基準(zhǔn)”的元素向楼,都移到”基準(zhǔn)”的右邊。
(3) 對”基準(zhǔn)”左邊和右邊的兩個子集谐区,不斷重復(fù)第一步和第二步湖蜕,直到所有子集只剩下一個元素為止。

9宋列、統(tǒng)計字符串中字母個數(shù)或統(tǒng)計最多字母數(shù)昭抒。

var str = "aaaabbbccccddfgh";
var obj  = {};
for(var i=0;i<str.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+'&nbsp;'); // a=4  b=3  c=4  d=2  f=1  g=1  h=1 
}

10、寫一個function炼杖,清除字符串前后的空格灭返。(兼容所有瀏覽器)

function trim(str) {
    if (str && typeof str === "string") {
        return str.replace(/(^\s*)|(\s*)$/g,""); //去除前后空白符
    }
}

其他

1、一次完整的HTTP事務(wù)是怎樣的一個過程坤邪?

基本流程:

a. 域名解析熙含;
b. 發(fā)起TCP的3次握手;
c. 建立TCP連接后發(fā)起http請求艇纺;
d. 服務(wù)器端響應(yīng)http請求怎静,瀏覽器得到html代碼;
e. 瀏覽器解析html代碼喂饥,并請求html代碼中的資源消约;
f. 瀏覽器對頁面進(jìn)行渲染呈現(xiàn)給用戶。

2员帮、對前端工程師這個職位或粮,你是怎么樣理解的?

a. 前端是最貼近用戶的程序員捞高,前端的能力就是能讓產(chǎn)品從 90分進(jìn)化到 100 分氯材,甚至更好
b. 參與項目,快速高質(zhì)量完成實現(xiàn)效果圖硝岗,精確到1px氢哮;
c. 與團隊成員,UI設(shè)計型檀,產(chǎn)品經(jīng)理的溝通冗尤;
d. 做好的頁面結(jié)構(gòu),頁面重構(gòu)和用戶體驗胀溺;
e. 處理hack裂七,兼容、寫出優(yōu)美的代碼格式仓坞;
f. 針對服務(wù)器的優(yōu)化背零、擁抱最新前端技術(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末无埃,一起剝皮案震驚了整個濱河市徙瓶,隨后出現(xiàn)的幾起案子毛雇,更是在濱河造成了極大的恐慌,老刑警劉巖侦镇,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵疮,死亡現(xiàn)場離奇詭異,居然都是意外死亡虽缕,警方通過查閱死者的電腦和手機始藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氮趋,“玉大人伍派,你說我怎么就攤上這事∈P玻” “怎么了诉植?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昵观。 經(jīng)常有香客問我晾腔,道長,這世上最難降的妖魔是什么啊犬? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任灼擂,我火速辦了婚禮,結(jié)果婚禮上觉至,老公的妹妹穿的比我還像新娘剔应。我一直安慰自己,他們只是感情好语御,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布峻贮。 她就那樣靜靜地躺著,像睡著了一般应闯。 火紅的嫁衣襯著肌膚如雪纤控。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天碉纺,我揣著相機與錄音船万,去河邊找鬼。 笑死骨田,一個胖子當(dāng)著我的面吹牛唬涧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盛撑,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捧搞!你這毒婦竟也來了抵卫?” 一聲冷哼從身側(cè)響起狮荔,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎介粘,沒想到半個月后殖氏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡姻采,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年雅采,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慨亲。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡婚瓜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刑棵,到底是詐尸還是另有隱情巴刻,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布蛉签,位于F島的核電站胡陪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碍舍。R本人自食惡果不足惜柠座,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望片橡。 院中可真熱鬧妈经,春花似錦、人聲如沸锻全。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳄厌。三九已至荞胡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間了嚎,已是汗流浹背泪漂。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留歪泳,地道東北人萝勤。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像呐伞,于是被迫代替她去往敵國和親敌卓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容