1. 程式人生 > >網際網路公司Web前端常見面試題目整理彙總

網際網路公司Web前端常見面試題目整理彙總

以下是收集一些面試中經常會遇到的經典面試題以及自己面試過程中有一些未解決的問題,通過對知識的整理以及經驗的總結,重新鞏固自身的前端基礎知識,如有錯誤或更好的答案,歡迎指正,水平有限,望各位不吝指教。:)

回到頂部

HTML/CSS部分

1、什麼是盒子模型?

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

2、行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?

行內元素:a、b、span、img、input、strong、select、label、em、button、textarea
塊級元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote
空元素:即系沒有內容的HTML元素,例如:br、meta、hr、link、input、img

3、CSS實現垂直水平居中

一道經典的問題,實現方法有很多種,以下是其中一種實現:
HTML結構:

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

CSS:

    .wrapper {
      position: relative;
      width: 500px;
      height: 500px;
      background-color: #ddd;
     }
    .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的區別

href 是指向網路資源所在位置,建立和當前元素(錨點)或當前文件(連結)之間的連結,用於超連結。

src是指向外部資源的位置,指向的內容將會嵌入到文件中當前標籤所在位置;在請求src資源時會將其指向的資源下載並應用到文件內,例如js指令碼,img圖片和frame等元素。當瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源載入、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標籤內。這也是為什麼將js指令碼放在底部而不是頭部。

5、什麼是CSS Hack?

一般來說是針對不同的瀏覽器寫不同的CSS,就是 CSS Hack。
IE瀏覽器Hack一般又分為三種,條件Hack、屬性級Hack、選擇符Hack(詳細參考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、簡述同步和非同步的區別

同步是阻塞模式,非同步是非阻塞模式。
同步就是指一個程序在執行某個請求的時候,若該請求需要一段時間才能返回資訊,那麼這個程序將會一直等待下去,直到收到返回資訊才繼續執行下去;
非同步是指程序不需要一直等下去,而是繼續執行下面的操作,不管其他程序的狀態。當有訊息返回時系統會通知程序進行處理,這樣可以提高執行的效率。

7、px和em的區別

px和em都是長度單位,區別是,px的值是固定的,指定是多少就是多少,計算比較容易。em得值不是固定的,並且em會繼承父級元素的字型大小。
瀏覽器的預設字型高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。那麼12px=0.75em, 10px=0.625em

8、什麼叫優雅降級和漸進增強?

漸進增強 progressive enhancement:
針對低版本瀏覽器進行構建頁面,保證最基本的功能,然後再針對高階瀏覽器進行效果、互動等改進和追加功能達到更好的使用者體驗。

優雅降級 graceful degradation:
一開始就構建完整的功能,然後再針對低版本瀏覽器進行相容。

區別:

a. 優雅降級是從複雜的現狀開始,並試圖減少使用者體驗的供給

b. 漸進增強則是從一個非常基礎的,能夠起作用的版本開始,並不斷擴充,以適應未來環境的需要

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

9、瀏覽器的核心分別是什麼?

IE: trident核心
Firefox:gecko核心
Safari:webkit核心
Opera:以前是presto核心,Opera現已改用Google Chrome的Blink核心
Chrome:Blink(基於webkit,Google與Opera Software共同開發)

回到頂部

JavaScript部分

怎樣新增、移除、移動、複製、建立和查詢節點?

1)建立新節點
createDocumentFragment() //建立一個DOM片段
createElement() //建立一個具體的元素
createTextNode() //建立一個文字節點

2)新增、移除、替換、插入
appendChild() //新增
removeChild() //移除
replaceChild() //替換
insertBefore() //插入

3)查詢
getElementsByTagName() //通過標籤名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id,唯一性

實現一個函式clone,可以對JavaScript中的5種主要的資料型別(包括Number、String、Object、Array、Boolean)進行值複製。

    /** * 物件克隆 * 支援基本資料型別及物件 * 遞迴方法 */
functionclone(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)或陣列(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;
}

如何消除一個數組裡面重復的元素?

// 方法一:
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

在Javascript中什麼是偽陣列?如何將偽陣列轉化為標準陣列?

偽陣列(類陣列):無法直接呼叫陣列方法或期望length屬性有什麼特殊的行為,但仍可以對真正陣列遍歷方法來遍歷它們。典型的是函式的argument引數,還有像呼叫getElementsByTagName,document.childNodes之類的,它們都返回NodeList物件都屬於偽陣列。可以使用Array.prototype.slice.call(fakeArray)將陣列轉化為真正的Array物件。

functionlog(){
      var args = Array.prototype.slice.call(arguments);  
//為了使用unshift陣列方法,將argument轉化為真正的陣列
      args.unshift('(app)');
 
      console.log.apply(console, args);
};

Javascript中callee和caller的作用?

caller是返回一個對函式的引用,該函式呼叫了當前函式;

callee是返回正在被執行的function函式,也就是所指定的function物件的正文。

請描述一下cookies,sessionStorage和localStorage的區別

sessionStorage用於本地儲存一個會話(session)中的資料,這些資料只有在同一個會話中的頁面才能訪問並且當會話結束後資料也隨之銷燬。因此sessionStorage不是一種持久化的本地儲存,僅僅是會話級別的儲存。而localStorage用於持久化的本地儲存,除非主動刪除資料,否則資料是永遠不會過期的。

web storage和cookie的區別

Web Storage的概念和cookie相似,區別是它是為了更大容量儲存設計的。Cookie的大小是受限的,並且每次你請求一個新的頁面的時候Cookie都會被髮送過去,這樣無形中浪費了頻寬,另外cookie還需要指定作用域,不可以跨域呼叫。
除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發者自己封裝setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是與伺服器進行互動,作為HTTP規範的一部分而存在 ,而Web Storage僅僅是為了在本地“儲存”資料而生。

統計字串中字母個數或統計最多字母數。

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 
}   

jQuery的事件委託方法on、live、delegate之間有什麼區別?

如何理解閉包?

跨域請求資源的方法有哪些?

談談垃圾回收機制方式及記憶體管理

開發過程中遇到的記憶體洩露情況,如何解決的?

回到頂部

HTTP

一次完整的HTTP事務是怎樣的一個過程?

基本流程:

a. 域名解析

b. 發起TCP的3次握手

c. 建立TCP連線後發起http請求

d. 伺服器端響應http請求,瀏覽器得到html程式碼

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

f. 瀏覽器對頁面進行渲染呈現給使用者

HTTP的狀態碼有哪些?

HTTPS是如何實現加密?

回到頂部

演算法相關

手寫陣列快速排序

關於快排演算法的詳細說明,可以參考阮一峰老師的文章快速排序
"快速排序"的思想很簡單,整個排序過程只需要三步:
(1)在資料集之中,選擇一個元素作為"基準"(pivot)。
(2)所有小於"基準"的元素,都移到"基準"的左邊;所有大於"基準"的元素,都移到"基準"的右邊。
(3)對"基準"左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下一個元素為止。
參考程式碼:

 var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

JavaScript實現二分法查詢

二分法查詢,也稱折半查詢,是一種在有序陣列中查詢特定元素的搜尋演算法。查詢過程可以分為以下步驟:
(1)首先,從有序陣列的中間的元素開始搜尋,如果該元素正好是目標元素(即要查詢的元素),則搜尋過程結束,否則進行下一步。
(2)如果目標元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半區域查詢,然後重複第一步的操作。
(3)如果某一步陣列為空,則表示找不到目標元素。
參考程式碼:

     // 非遞迴演算法
        functionbinary_search(arr, key) {
            var low = 0,
                high = arr.length - 1;
            while(low <= high){
                var mid = parseInt((high + low) / 2);
                if(key == arr[mid]){
                    return  mid;
                }else if(key > arr[mid]){
                    low = mid + 1;
                }else if(key < arr[mid]){
                    high = mid -1;
                }else{
                    return -1;
                }
            }
        };
        var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
        var result = binary_search(arr,10);
        alert(result); // 9 返回目標元素的索引值       

    // 遞迴演算法
        functionbinary_search(arr,low, high, key) {
            if (low > high){
                return -1;
            }
            var mid = parseInt((high + low) / 2);
            if(arr[mid] == key){
                return mid;
            }else if (arr[mid] > key){
                high = mid - 1;
                return binary_search(arr, low, high, key);
            }else if (arr[mid] < key){
                low = mid + 1;
                return binary_search(arr, low, high, key);
            }
        };
        var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
        var result = binary_search(arr, 0, 13, 10);
        alert(result); // 9 返回目標元素的索引值  
回到頂部

Web安全

你所瞭解到的Web攻擊技術

(1)XSS(Cross-Site Scripting,跨站指令碼攻擊):指通過存在安全漏洞的Web網站註冊使用者的瀏覽器內執行非法的HTML標籤或者JavaScript進行的一種攻擊。
(2)SQL注入攻擊
(3)CSRF(Cross-Site Request Forgeries,跨站點請求偽造):指攻擊者通過設定好的陷阱,強制對已完成的認證使用者進行非預期的個人資訊或設定資訊等某些狀態更新。

回到頂部

前端效能

如何優化影象、影象格式的區別?

瀏覽器是如何渲染頁面的?

回到頂部

設計模式

對MVC、MVVM的理解

回到頂部

正則表示式

寫一個function,清除字串前後的空格。(相容所有瀏覽器)

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

使用正則表示式驗證郵箱格式

    var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/;
    var email = "[email protected]";
    console.log(reg.test(email));  // true  
回到頂部

職業規劃

對前端工程師這個職位你是怎麼樣理解的?

a. 前端是最貼近使用者的程式設計師,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好

b. 參與專案,快速高質量完成實現效果圖,精確到1px;

c. 與團隊成員,UI設計,產品經理的溝通;

d. 做好的頁面結構,頁面重構和使用者體驗;

e. 處理hack,相容、寫出優美的程式碼格式;

f. 針對伺服器的優化、擁抱最新前端技術。

相關推薦

網際網路公司Web前端常見面試題目整理彙總

以下是收集一些面試中經常會遇到的經典面試題以及自己面試過程中有一些未解決的問題,通過對知識的整理以及經驗的總結,重新鞏固自身的前端基礎知識,如有錯誤或更好的答案,歡迎指正,水平有限,望各位不吝指教。:) 回到頂部 HTML/CSS部分 1、什麼是盒子模型? 在網頁中,一個元素佔有空間的大小由幾

前端跳槽必備 揭祕一線網際網路公司高階前端JavaScript面試

4-1 開始 4-2 單執行緒 - 介紹-1 4-3 單執行緒 - 介紹-2 4-4 單執行緒 - 非同步-1 4-5 單執行緒 - 非同步-2 4-6 單執行緒 - 總結 4-7 event-loop - 演示 4-8 event-loop - 程式碼演示 4-9 event

前端常見面試問題整理

闡述清除浮動的幾種方式 使用偽元素:after .clearfix:after{ content: "020"; display: block; height: 0; clear: both; visibility: hidden

Web前端基礎面試題目及答案

前端基本技能有:1 HTML/CSS; 2 JavaScript 1、什麼是盒子模型?  在網頁中,一個元素佔有空間的大小由幾個部分構成,其中包括元素的內容(content),元素的內邊距(padding),元素的邊框(border),元素的外邊距(margin)四個

Android常見面試題目彙總(更新中...)

1、前後臺互動用到什麼協議? Android與伺服器通訊通常採用的是HTTP通訊方式和Socket通訊方式 一、HTTP協議簡介: 1、是一種超文字協議,是一套計算機在網路中通訊的一種規則。在TCP/IP體系結構中,屬於應用層協議。 2、

2.前端常見面試程式設計題整理

1.輸出字串中出現次數最多的 var str='fdadffddfdffj';  var obj={};  for(var i=0;i<str.length;i++){     var cha=str.charAt(i);if(!obj.hasOwnProperty(

手機移動端web前端常見問題整理

移動端常見問題及解決方案 一、meta基礎知識 H5頁面視窗自動調整到裝置寬度,並禁止使用者縮放頁面 <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1

前端面試題目整理

1.瀏覽器本地儲存 瀏覽器本身為js提供了兩個本地儲存的方式,一個是localstorage,一個是sessionstorage. (1)sessionstorage是本地儲存的一段對話中的資料,只有在同一個頁面會話時才會訪問sessionstorage並且當該回    話

Java面試題目整理

size 虛擬 ble 可復用 ringbuf 進步 組合 java 自己的 一、引言:本文主要整理遇到的面試題目,以及提供自己的見解,將會持續更新,如有問題,可評論交流,一起進步。 二、問題及我的見解: 1. n個結點可以組合成多少棵不同的二叉樹? 答:2^n-n棵 2.

收藏版:java常見面試題目精講視頻教程!

收藏版:java常見面試題目精講視頻教程! 首先給大家愛介紹一下java的就業前景,Java語言是一門很實用的語言,在互聯網的應用十分廣泛,目前采用JAVA語言開發的網站也越來越多,所以對Java開發人才的需求量也是倍增。從人才需求方面看,軟件開發是當下的發展趨勢,而我國的軟件開發人才極為缺

2018/5/19面試題目整理(每日一題)

如何 題目 設計 locals 區別 AS 舉例 java 開發工程師 昨天有點事情,忘了更新,不好意思了=。= Java後臺開發 Hashmap源碼(手寫) 產品經理 設計一款比大白更受歡迎的家用機器人。 前端開發工程師 描述cookies,sessionStorage和

web前端常見安全問題

1,SQL注入 2,XSS 3,CSRF 4.檔案上傳漏洞1,SQL注入:這個比較常見,可能大家也聽說過,就是URL裡面如果有對資料庫進行操作的引數時,要做一下特殊的處理,否則被別有用心的人利用的話就可能釀成大錯,輕則使用者資訊洩露,重則資料庫被刪 如果有如下URL,查詢分頁,且程式碼裡面沒有特

web前端面試送分題

前端入門很容易,簡單地用html搭一個頁面框架;會用一些css基本樣式;懂得用jquery的dom互動,就基本可以挺著胸說自己是個前端工程師了。 但是前端提升異常艱難,演算法、資料結構、oop;javascript、dom、css、html5這些僅僅是標配;效能優化、安全性、程式碼

前端經典面試題目

1. html5有哪些新特性? ⁃   繪畫 canvas ⁃   用於媒介回放的 video 和 audio 元素 ⁃   本地離線儲存 localStorage 長期儲存資料,瀏覽器關閉後資料不丟失; ⁃ &n

web前端面試提綱

前端基礎 JS 原型鏈機制的理解 設計模式:瞭解基本的前端設計模式,單例、介面卡、工廠、觀察者。 跨域的方式、同源策略、為什麼有同源策略、如何做安全防範:新的H5的跨域方式(cors、postmessage)。 安全,對攻擊方式、安全的防範上的瞭解 。 http、T

java常見面試題目(一)

過程 重寫 font ble body 釋放 就會 t對象 使用 在大四實習階段,秋招的時候,面試了很多家公司,總結常見的java面試題目:(答案可以自己百度) 1、你所用oracle的版本號是多少? 2、tomcat修改8080端口號的配置文件是哪個? 3、mybati

java常見面試題目(三)

1、jsp的內建物件。  JSP中一共預先定義了9個這樣的物件,分別為:request、response、session、application、out、pagecontext、config、page、exception 2、session與cookie的作用與區別:   cookie資料存放

Linux學習(C語言學習之常見面試題目

想成為嵌入式程式設計師應知道的0x10個基本問題 前處理器(Preprocessor) 1 . 用預處理指令#define 宣告一個常數,用以表明1年中有多少秒(忽略閏年問題)   #define SECONDS_PER_YEAR (60 * 60 * 24

PHP各種各樣的面試題目整理

伺服器方面  1、nginx平滑重啟     nginx 執行新的工作程序並從容關閉舊的工作程序,通知工作程序關閉監聽套接字,但是繼續為當前連線的客戶提供服務。所有的客戶端的服務完成後,舊的工作程序被 關閉。如果新的配置檔案應用失敗,nginx 將繼續使用舊的配置檔案進行

Web 前端開發學習資料整理

一、 語言基礎(以書和網站為主) 1.HTML&CSS: (1)入門:     Codeademy上的html&css課程——線上互動式程式設計平臺,弄清楚基本概念和基本語法     w3school上的HTML/CSS教程——技術手冊式的教程,比較全面,照