成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端面試題(移動適配,閉包,this,HTTP狀態(tài)碼,排序思路,頁面加載,數(shù)組去重)

chaos_G / 1405人閱讀

摘要:例如狀態(tài)碼表示響應(yīng)成功。答狀態(tài)碼表示服務(wù)器已接受請求,但尚未處理。狀態(tài)碼表示發(fā)送的請求需要有通過認(rèn)證的認(rèn)證信息。狀態(tài)碼表示服務(wù)器端在執(zhí)行請求時發(fā)生了錯誤。響應(yīng)報文也是由三部分組成狀態(tài)碼響應(yīng)報頭和響應(yīng)報文。

前端面試題(移動適配,閉包,this,HTTP狀態(tài)嗎,排序思路,頁面加載,數(shù)組去重) 1 請寫出一個符合 W3C 規(guī)范的 HTML 文件

請寫出一個符合 W3C 規(guī)范的 HTML 文件,要求

頁面標(biāo)題為「我的頁面」

頁面中引入了一個外部 CSS 文件,文件路徑為 /style.css

頁面中引入了另一個外部 CSS 文件,路徑為 /print.css,該文件僅在打印時生效

頁面中引入了另一個外部 CSS 文件,路徑為 /mobile.css,該文件僅在設(shè)備寬度小于 500 像素時生效

頁面中引入了一個外部 JS 文件,路徑為 /main.js

頁面中引入了一個外部 JS 文件,路徑為 /gbk.js,文件編碼為 GBK

頁面中有一個 SVG 標(biāo)簽,SVG 里面有一個直徑為 100 像素的圓圈,顏色隨意

注意題目中的路徑




    
    我的頁面
    
    
    
    


    
        
    
    
    

2 移動端是怎么做適配的?

2016年騰訊前端面試題:
移動端是怎么做適配的?
回答要點(diǎn):

meta viewport

媒體查詢

動態(tài) rem 方案

(可以參考我寫的博客
CSS5:移動端頁面(響應(yīng)式)
CSS9:動態(tài) REM-手機(jī)專用的自適應(yīng)方案)
答:

2.1做手機(jī)端頁面首先要加上一個meta標(biāo)簽
    

content="width=device-width表示寬度等于設(shè)備寬度,意思就是不要將頁面寬度變成980px,用設(shè)備寬度.
user-scalable=no表示用戶不以縮放
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0
初始縮放倍數(shù),最大縮放倍數(shù),最小縮放倍數(shù),都是1.0,即不能縮放

2.2媒體查詢

通過媒體查詢,根據(jù)不同條件,使用不同的css樣式。
例如:

    
2.3動態(tài)rem

因?yàn)槭謾C(jī)需要兼容很多不同寬度的手機(jī)設(shè)備,所以將長度單位依賴于手機(jī)設(shè)備寬度,使用動態(tài)rem方案,那么就可以在不同手機(jī)上實(shí)現(xiàn)相同比例的頁面縮放而不影響布局。
rem:root em,即font-size.
實(shí)現(xiàn)動態(tài)rem,主要需要下面兩步:
1在標(biāo)簽里加上如下代碼,讓10rem等于頁面寬度

    
      
      
      動態(tài)REM
      
    

2使用sass自動將設(shè)計稿的px轉(zhuǎn)換為rem
在scss文件里寫這樣一個函數(shù):

    @function px( $px ){
    @return $px/$designWidth*10 + rem;
    }

    $designWidth : 640; // 640 是設(shè)計稿的寬度,你要根據(jù)設(shè)計稿的寬度填寫。設(shè)計師的設(shè)計稿寬度需要統(tǒng)一

就可以使用px()函數(shù)將像素轉(zhuǎn)化為rem。

3 實(shí)現(xiàn)圓角矩形和陰影怎么做?

2017年騰訊前端實(shí)習(xí)面試題(二面):
用過CSS3嗎? 實(shí)現(xiàn)圓角矩形和陰影怎么做?
(搜索MDN border-radius)
答:
用過。例如陰影,圓角,動畫,漸變和過渡
1.圓角:
簡寫屬性border-radius。例如
border-radius: 30px;
border-radius: 50%;
半徑參數(shù)可以是長度單位,也可以是百分比單位。

也可以分別設(shè)置四個角

border-top-left-radius:     4px 2px;
border-top-right-radius:    3px 4px;
border-bottom-right-radius: 6px 2px;
border-bottom-left-radius:  3px 4px;

半徑參數(shù)可以是一個或兩個,一個參數(shù)代表圓形圓角,兩個參數(shù)是橢圓圓角

2.陰影:

語法:
box-shadow:inset x-offset y-offset blur-radius spread-radius color
五個參數(shù)分別是:投影方式 X軸偏移量 Y軸偏移量 陰影模糊半徑 陰影擴(kuò)展半徑 陰影顏色

4 什么是閉包,閉包的用途是什么?

出處同上(一面二面都問了):
什么是閉包,閉包的用途是什么?
JavaScript高程P178
閉包的用途

答:

4.1什么是閉包

閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)。
例如

function foo(){
  var local = 1
  function bar(){
    local++
    return local
  }
  return bar
}

var func = foo()
func()

bar函數(shù)可以訪問變量local,bar就是一個閉包。

4.2閉包的用途

模仿塊級作用域

function A(num) {
    //核心代碼
   (funnction(){
    for(var i = 0; i

匿名自執(zhí)行函數(shù)在內(nèi)部形成了一個閉包,使i變量只有塊級作用域。閉包的本質(zhì)是函數(shù),其實(shí)在這里閉包就是那個匿名函數(shù),這個閉包可以得到函數(shù)A內(nèi)部的活動變量,又能保證自己內(nèi)部的變量在自執(zhí)行后直接銷毀。

存儲變量
閉包的另一個特點(diǎn)是可以保存外部函數(shù)的變量,原理是基于javascript中函數(shù)作用域鏈的特點(diǎn),內(nèi)部函數(shù)保留了對外部函數(shù)的活動變量的引用,所以變量不會被釋放

function B(){
   var x = 100;
   return {
       function(){
           return x
       }
   }
 }
var m = B()//運(yùn)行B函數(shù),生成活動變量 x被m引用

運(yùn)行B函數(shù),生成活動變量 x被m引用, 變量x不會被銷毀。
運(yùn)行B函數(shù),返回值就是B內(nèi)部的匿名函數(shù),此時m引用了變量x,所以B執(zhí)行后x不會被釋放,利用這一點(diǎn),我們可以把比較重要或者計算耗費(fèi)很大的值存在x中,只需要第一次計算賦值后,就可以通過m函數(shù)引用x的值,不必重復(fù)計算,同時也不容易被修改。

封裝私有變量

function Person(){
   var name = "default";
   this.getName:function(){
       return name;
   }
   this.setName:function(value){
       name = value;
   }
}
console.log(Person.getName())//default
console.log(Person.setName("mike"))
console.log(Person.getName())//mike

設(shè)置了兩個閉包函數(shù)來操作Person函數(shù)內(nèi)部的name變量,除了這兩個函數(shù),在外部無法再訪問到name變量,name也就相當(dāng)于是私有成員。

5 call、apply、bind 的用法分別是什么?

阮一峰的javascript教程--this
深入淺出 妙用Javascript中apply、call、bind

答:

如果在函數(shù)中包含多層的this,this的指向是不確定的。需要把this固定下來,避免出現(xiàn)意想不到的情況。JavaScript提供了call、apply、bind這三個方法,來切換/固定this的指向。

5.1Function.prototype.call()

函數(shù)實(shí)例的call方法,可以指定函數(shù)內(nèi)部this的指向(即函數(shù)執(zhí)行時所在的作用域),然后在所指定的作用域中,調(diào)用該函數(shù)。

var obj = {};

var f = function () {
  return this;
};

f() === window // true
f.call(obj) === obj // true

call的第一個參數(shù)就是this所要指向的那個對象,后面的參數(shù)則是函數(shù)調(diào)用時所需的參數(shù)。

5.2Function.prototype.apply()

apply方法的作用與call方法類似,也是改變this指向,然后再調(diào)用該函數(shù)。唯一的區(qū)別就是,它接收一個數(shù)組作為函數(shù)執(zhí)行時的參數(shù)。

apply方法的第一個參數(shù)也是this所要指向的那個對象,如果設(shè)為null或undefined,則等同于指定全局對象。第二個參數(shù)則是一個數(shù)組,該數(shù)組的所有成員依次作為參數(shù),傳入原函數(shù)。原函數(shù)的參數(shù),在call方法中必須一個個添加,但是在apply方法中,必須以數(shù)組形式添加。

function f(x, y){
  console.log(x + y);
}

f.call(null, 1, 1) // 2
f.apply(null, [1, 1]) // 2
5.3Function.prototype.bind()

bind方法用于將函數(shù)體內(nèi)的this綁定到某個對象,然后返回一個新函數(shù)。

bind方法的參數(shù)就是所要綁定this的對象。

var counter = {
  count: 0,
  inc: function () {
    this.count++;
  }
};

var func = counter.inc.bind(counter);
func();
counter.count // 1

上面代碼中,counter.inc方法被賦值給變量func。這時必須用bind方法將inc內(nèi)部的this,綁定到counter,否則就會出錯。

6 HTTP 狀態(tài)碼

出處同上:
請說出至少 8 個 HTTP 狀態(tài)碼,并描述各狀態(tài)碼的意義。

例如:

狀態(tài)碼 200 表示響應(yīng)成功。

答:

狀態(tài)碼 202 表示:服務(wù)器已接受請求,但尚未處理。
狀態(tài)碼 204 表示:請求處理成功,但沒有資源可返回。
狀態(tài)碼 206 表示:服務(wù)器已經(jīng)成功處理了部分 GET 請求。

狀態(tài)碼 301 表示:請求的資源已被永久的分配了新的 URI。
狀態(tài)碼 302 表示:請求的資源臨時的分配了新的 URI。

狀態(tài)碼 400 表示:請求報文中存在語法錯誤。
狀態(tài)碼 401 表示:發(fā)送的請求需要有通過 HTTP 認(rèn)證的認(rèn)證信息。
狀態(tài)碼 403 表示:對請求資源的訪問被服務(wù)器拒絕了。
狀態(tài)碼 404 表示:服務(wù)器上無法找到請求的資源。

狀態(tài)碼 500 表示:服務(wù)器端在執(zhí)行請求時發(fā)生了錯誤。
狀態(tài)碼 503 表示:服務(wù)器暫時處于超負(fù)債或正在進(jìn)行停機(jī)維護(hù),現(xiàn)在無法處理請求。

7 寫出一個 HTTP post 請求的內(nèi)容

出處同上:
請寫出一個 HTTP post 請求的內(nèi)容,包括四部分。
其中
第四部分的內(nèi)容是 username=ff&password=123
第二部分必須含有 Content-Type 字段
請求的路徑為 /path

看我的博客HTTP入門(一):在Bash中curl查看請求與響應(yīng)

答:

1 POST /path HTTP/1.1
2 Host: www.baidu.com
2 User-Agent: curl/7.20.0 (x86_64-unknown-linux-gnu) libcurl/7.20.0 zlib/1.2.8
2 Accept: */*
2 Content-Length: 24
2 Content-Type: application/x-www-form-urlencoded
3 
4 username=ff&password=123
8 請說出至少三種排序的思路

這三種排序的時間復(fù)雜度分別為

O(n*n)
O(n log2 n)
O(n + max)

答:

O(n*n) 冒泡排序:遍歷整個數(shù)組,依次比較相鄰兩個元素,將小的排在前面,大的排后面,這樣一遍循環(huán)下來就可以將最大的元素排到最后,除去已經(jīng)排過的最大的數(shù),然后再次循環(huán)以上操作,直到最后一個為止。

O(n log2 n) 快速排序:以第一個元素為基準(zhǔn),比這個元素小的元素排在左邊,比這個元素大的排右邊,再以該元素左邊和右邊的第一個元素為基準(zhǔn),在子區(qū)間重復(fù)以上的操作,直到只有一個數(shù)字排序?yàn)橹埂?/p>

O(n + max) 基數(shù)排序:首先根據(jù)個位數(shù)的數(shù)值,將需要排序的一串?dāng)?shù)值分配到0-9的桶中。接著將這些桶中的數(shù)值重新串起來,形成新的數(shù)列。接著根據(jù)十位數(shù)、百位數(shù)直至最高位重復(fù)以上操作。

9 頁面從輸入URL到頁面加載顯示完成的過程

著名前端面試題:

一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發(fā)生了什么?
這一題是在挖掘你的知識邊界,所以你知道多少就要答多少。

可以先查閱一些資料再查,但是不要把自己不懂的東西放在答案里,面試官會追問的。

知乎上:從輸入 URL 到頁面加載完成的過程中都發(fā)生了什么
答:

DNS解析
DNS解析的過程就是瀏覽器查找域名對應(yīng)的 IP 地址;

TCP連接
瀏覽器根據(jù) IP 地址向服務(wù)器發(fā)起 TCP 連接,與瀏覽器建立 TCP 三次握手:
(1)主機(jī)向服務(wù)器發(fā)送一個建立連接的請求(您好,我想認(rèn)識您);
(2)服務(wù)器接到請求后發(fā)送同意連接的信號(好的,很高興認(rèn)識您);
(3)主機(jī)接到同意連接的信號后,再次向服務(wù)器發(fā)送了確認(rèn)信號(我也很高興認(rèn)識您),自此,主機(jī)與服務(wù)器兩者建立了連接。

發(fā)送HTTP請求
瀏覽器根據(jù) URL 內(nèi)容生成 HTTP 請求報文。HTTP請求報文是由三部分組成: 請求行, 請求報頭和請求正文,其中包含請求文件的位置、請求文件的方式等等。

服務(wù)器處理請求并返回HTTP報文

服務(wù)器接到請求后,回想客戶端發(fā)送HTTP響應(yīng)報文。HTTP響應(yīng)報文也是由三部分組成: 狀態(tài)碼, 響應(yīng)報頭和響應(yīng)報文。服務(wù)器會根據(jù) HTTP 請求中的內(nèi)容來決定如何獲取相應(yīng)的 HTML 文件,并將得到的 HTML 文件發(fā)送給瀏覽器。

瀏覽器解析渲染頁面
瀏覽器是一個邊解析邊渲染的過程。在瀏覽器還沒有完全接收 HTML 文件時便開始渲染、顯示網(wǎng)頁。在執(zhí)行 HTML 中代碼時,根據(jù)需要,瀏覽器會繼續(xù)請求圖片、CSS、JavsScript等文件,過程同請求 HTML 。

關(guān)閉TCP連接或繼續(xù)保持連接

(1)主機(jī)向服務(wù)器發(fā)送一個斷開連接的請求(不早了,我該走了);

(2)服務(wù)器接到請求后發(fā)送確認(rèn)收到請求的信號(知道了);

(3)服務(wù)器向主機(jī)發(fā)送斷開通知(我也該走了);

(4)主機(jī)接到斷開通知后斷開連接并反饋一個確認(rèn)信號(嗯,好的),服務(wù)器收到確認(rèn)信號后斷開連接;

10 如何實(shí)現(xiàn)數(shù)組去重

著名面試題:
如何實(shí)現(xiàn)數(shù)組去重?
假設(shè)有數(shù)組 array = [1,5,2,3,4,2,3,1,3,4]
你要寫一個函數(shù) unique,使得
unique(array) 的值為 [1,5,2,3,4]
也就是把重復(fù)的值都去掉,只保留不重復(fù)的值。

要求:

不要做多重循環(huán),只能遍歷一次
請給出兩種方案,一種能在 ES 5 環(huán)境中運(yùn)行,一種能在 ES 6 環(huán)境中運(yùn)行(提示 ES 6 環(huán)境多了一個 Set 對象)
從 JavaScript 數(shù)組去重談性能優(yōu)化
也談JavaScript數(shù)組去重
答:

ES5:
思路:核心是構(gòu)建了一個 hash 對象來替代 indexOf. 注意在 JavaScript 里,對象的鍵值只能是字符串,因此需要 var key = typeof(item) + item 來區(qū)分?jǐn)?shù)值 1 和字符串 "1" 等情況。
只循環(huán)一遍

function unique(arr) {
  var ret = []
  var hash = {}
  for (var i = 0; i < arr.length; i++) {
    var item = arr[i]
    var key = typeof(item) + item
    if (hash[key] !== 1) {
      ret.push(item)
      hash[key] = 1
    }
  }
  return ret
}

ES6:ES2015引入了一種叫作Set的數(shù)據(jù)類型。顧名思義,Set就是集合的意思,它不允許重復(fù)元素出現(xiàn)。
如果重復(fù)添加同一個元素的話,Set中只會存在一個。包括NaN也是這樣

function unique(array) {
   return Array.from(new Set(array));
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/96073.html

相關(guān)文章

  • 前端面試大集合:來自真實(shí)大廠的532道面試(只有,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網(wǎng)發(fā)布的真實(shí)大廠前端面經(jīng)題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復(fù),但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識鏈。 二、532道前端真實(shí)大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...

    Kerr1Gan 評論0 收藏0
  • 前端面試大集合:來自真實(shí)大廠的532道面試(只有,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@牛客網(wǎng)發(fā)布的真實(shí)大廠前端面經(jīng)題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復(fù),但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識鏈。 二、532道前端真實(shí)大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...

    lushan 評論0 收藏0
  • 前端面試大集合:來自真實(shí)大廠的532道面試(只有,沒有答案)

    答案自己谷歌或百度找。 一、來源背景 面試題是來自微博@??途W(wǎng)發(fā)布的真實(shí)大廠前端面經(jīng)題目,我一直在收集題目長期一個一個的記錄下來的,可能會有重復(fù),但基本前端的面試大綱和需要掌握的知識都在其中了,面試題僅做學(xué)習(xí)參考,學(xué)習(xí)者閱后也要用心鉆研其中的原理,重要知識需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識鏈。 二、532道前端真實(shí)大廠面試題 express和koa的對比,兩者中間件的原理,koa捕獲異常多種情...

    joyvw 評論0 收藏0
  • 高級前端面試大匯總(只有試,沒有答案)

    摘要:面試題來源于網(wǎng)絡(luò),看一下高級前端的面試題,可以知道自己和高級前端的差距。 面試題來源于網(wǎng)絡(luò),看一下高級前端的面試題,可以知道自己和高級前端的差距。有些面試題會重復(fù)。 使用過的koa2中間件 koa-body原理 介紹自己寫過的中間件 有沒有涉及到Cluster 介紹pm2 master掛了的話pm2怎么處理 如何和MySQL進(jìn)行通信 React聲明周期及自己的理解 如何...

    kviccn 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<