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

資訊專欄INFORMATION COLUMN

前端知識(shí)集錦1

leiyi / 883人閱讀

摘要:原文鏈接征服前端面試,僅供學(xué)習(xí)使用前端知識(shí)集錦原型我們創(chuàng)建的每一個(gè)函數(shù),都可以有一個(gè)屬性,該屬性指向一個(gè)對(duì)象。線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。

原文鏈接:征服前端面試,僅供學(xué)習(xí)使用
前端知識(shí)集錦2
1. JavaScript 1.1 原型
我們創(chuàng)建的每一個(gè)函數(shù),都可以有一個(gè)prototype屬性,該屬性指向一個(gè)對(duì)象。這個(gè)對(duì)象,就是原型。

當(dāng)我們?cè)趧?chuàng)建對(duì)象時(shí),可以根據(jù)自己的需求,選擇性的將一些屬性和方法通過(guò)prototype屬性,掛載在原型對(duì)象上。而每一個(gè)new出來(lái)的實(shí)例,都有一個(gè)proto屬性,該屬性指向構(gòu)造函數(shù)的原型對(duì)象,通過(guò)這個(gè)屬性,讓實(shí)例對(duì)象也能夠訪問(wèn)原型對(duì)象上的方法。因此,當(dāng)所有的實(shí)例都能夠通過(guò)proto訪問(wèn)到原型對(duì)象時(shí),原型對(duì)象的方法與屬性就變成了共有方法與屬性。

// 聲明構(gòu)造函數(shù)
function Person(name, age) {
    this.name = name;
    this.age = age;
}
 
// 通過(guò)prototye屬性,將方法掛載到原型對(duì)象上
Person.prototype.getName = function() {
    return this.name;
}

var p1 = new Person("tim", 10);
var p2 = new Person("jak", 22);

console.log(p1.getName === p2.getName); // true

通過(guò)圖示我們可以看出,構(gòu)造函數(shù)的prototype與所有實(shí)例對(duì)象的proto都指向原型對(duì)象。而原型對(duì)象的constructor指向構(gòu)造函數(shù)。

1.2 原型鏈
我們知道所有的函數(shù)都有一個(gè)叫做toString的方法。那么這個(gè)方法到底是在哪里的呢?

先隨意聲明一個(gè)函數(shù):

function foo() {}

其中foo是Function對(duì)象的實(shí)例。而Function的原型對(duì)象同時(shí)又是Object的實(shí)例。這樣就構(gòu)成了一條原型鏈。原型鏈的訪問(wèn),其實(shí)跟作用域鏈有很大的相似之處,他們都是一次單向的查找過(guò)程。因此實(shí)例對(duì)象能夠通過(guò)原型鏈,訪問(wèn)到處于原型鏈上對(duì)象的所有屬性與方法。這也是foo最終能夠訪問(wèn)到處于Object原型對(duì)象上的toString方法的原因。

1.3 作用域鏈

作用域鏈的作用是保證執(zhí)行環(huán)境里有權(quán)訪問(wèn)的變量和函數(shù)是有序的,作用域鏈的變量只能向上訪問(wèn),變量訪問(wèn)到window對(duì)象即被終止,作用域鏈向下訪問(wèn)變量是不被允許的。

1.4 閉包

第一種理解(紅寶書(shū)):是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù),創(chuàng)建閉包的最常見(jiàn)的方式就是在一個(gè)函數(shù)內(nèi)創(chuàng)建另一個(gè)函數(shù),通過(guò)另一個(gè)函數(shù)訪問(wèn)這個(gè)函數(shù)的局部變量。

第二種理解(你不知道的javascript):當(dāng)函數(shù)可以記住并訪問(wèn)所在的詞法作用域時(shí),就產(chǎn)生了閉包,這個(gè)函數(shù)持有對(duì)該詞法作用域的引用,這個(gè)引用就叫做閉包。

閉包本質(zhì)還是函數(shù),只不過(guò)這個(gè)函數(shù)綁定了上下文環(huán)境(函數(shù)內(nèi)部引用的所有變量)。

缺點(diǎn):常駐內(nèi)存,會(huì)增大內(nèi)存使用量,使用不當(dāng)很容易造成內(nèi)存泄露。
作用(使用場(chǎng)景):可以用來(lái)管理私有變量和私有方法,將對(duì)變量(狀態(tài))的變化封裝在安全的環(huán)境中,使得這些變量不能被外部隨意修改,同時(shí)又可以通過(guò)指定的函數(shù)接口來(lái)操作。
閉包有三個(gè)特性:

函數(shù)嵌套函數(shù)

函數(shù)內(nèi)部可以引用外部的參數(shù)和變量

參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收

題外話

JavaScript的作用域就是詞法作用域而不是動(dòng)態(tài)作用域;

詞法作用域最重要的特征是它的定義過(guò)程發(fā)生在代碼的書(shū)寫(xiě)階段;

動(dòng)態(tài)作用域的作用域鏈?zhǔn)腔谡{(diào)用棧的 詞法作用域的作用域鏈?zhǔn)腔诖a中的作用域嵌套。

1.4 this
JavaScript的this總是指向一個(gè)對(duì)象,而具體指向哪個(gè)對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境動(dòng)態(tài)綁定的,而非函數(shù)被聲明時(shí)的環(huán)境。

this的指向:

作為普通函數(shù)調(diào)用(this指向全局對(duì)象window對(duì)象)

作為對(duì)象的方法調(diào)用(this指向該對(duì)象)

構(gòu)造器調(diào)用(this指向用new返回的這個(gè)對(duì)象)

call、apply、bind的調(diào)用(this指向第一個(gè)參數(shù)對(duì)象)

1.5 高階函數(shù)

函數(shù)作為參數(shù)傳遞

函數(shù)作為返回值輸出

1.6 new操作符具體干了什么呢?

創(chuàng)建一個(gè)新對(duì)象;

將構(gòu)造函數(shù)的作用域賦給新對(duì)象(因此this就指向了這個(gè)新對(duì)象);

執(zhí)行構(gòu)造函數(shù)中的代碼(為這個(gè)新對(duì)象添加屬性)

返回新對(duì)象

1.7 繼承

簡(jiǎn)單原型鏈繼承:

function Super(){
    this.name = "hzzly";
}
function Sub(){
    // ...
}
Sub.prototype = new Super();    // 核心

缺點(diǎn):
修改sub1.name后sub2.name也變了,因?yàn)閬?lái)自原型對(duì)象的引用屬性是所有實(shí)例共享的。

構(gòu)造函數(shù)式繼承:

function Super(val){
    this.val = val;
    this.fun = function(){  // 實(shí)例函數(shù)
        // ...
    }
}

function Sub(val){
    Super.call(this, val);   // 核心
    // ...
}

缺點(diǎn):
無(wú)法實(shí)現(xiàn)函數(shù)復(fù)用,每個(gè)子類實(shí)例都持有一個(gè)新的fun函數(shù),太多了就會(huì)影響性能,內(nèi)存爆炸。

組合式繼承

function Super(){
    this.name = "hzzly";
}

// 原型函數(shù)
Super.prototype.fun1 = function(){};
Super.prototype.fun2 = function(){};
//Super.prototype.fun3...

function Sub(){
    Super.call(this);   // 核心
    // ...
}

Sub.prototype = new Super();    // 核心

缺點(diǎn):
子類原型上有一份多余的父類實(shí)例屬性,因?yàn)楦割悩?gòu)造函數(shù)被調(diào)用了兩次,生成了兩份,而子類實(shí)例上的那一份屏蔽了子類原型上父類的。又是內(nèi)存浪費(fèi)。

寄生組合式繼承

function Super(){
    this.name = "hzzly";
}

Super.prototype.fun1 = function(){};
Super.prototype.fun2 = function(){};
//Super.prototype.fun3...

function Sub(){
   Super.call(this);   // 核心
    // ...
}

Sub.prototype=Object.create(Super.prototype)   // 核心
Sub.prototype.constructor=Sub   // 核心

es6的class繼承方式

class A {
}
class B extends A {
}
B.__proto__ === A   // true
B.prototype.__proto__ === A.prototype   // true

es6引入了class、extends、super、static(部分為ES2016標(biāo)準(zhǔn))

1.8 null和undefined的區(qū)別?

null是一個(gè)表示”無(wú)”的對(duì)象,轉(zhuǎn)為數(shù)值時(shí)為0;undefined是一個(gè)表示”無(wú)”的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN。

undefined表示”缺少值”,就是此處應(yīng)該有一個(gè)值,但是還沒(méi)有定義。

null表示”沒(méi)有對(duì)象”,即該處不應(yīng)該有值。

1.9 call、apply、bind的區(qū)別

三者都是用來(lái)改變函數(shù)的this對(duì)象的指向的。

三者第一個(gè)參數(shù)都是this要指向的對(duì)象,也就是想指定的上下文。

call 傳入的參數(shù)數(shù)量不固定,第二部分參數(shù)要一個(gè)一個(gè)傳,用,隔開(kāi)。

apply 接受兩個(gè)參數(shù),第二個(gè)參數(shù)為一個(gè)帶下標(biāo)的集合,可以為數(shù)組,也可以為類數(shù)組。

bind 是返回一個(gè)改變了上下文的函數(shù)副本,便于稍后調(diào)用;apply 、call 則是立即調(diào)用。

1.10 本地存儲(chǔ)

sessionStorage用于本地存儲(chǔ)一個(gè)會(huì)話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會(huì)話中的頁(yè)面才能訪問(wèn)并且當(dāng)會(huì)話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲(chǔ),僅僅是會(huì)話級(jí)別的存儲(chǔ)。

localStorage用于持久化的本地存儲(chǔ),除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過(guò)期的。

1.11 cookie 和session

cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。

cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙,考慮到安全應(yīng)當(dāng)使用session。

session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問(wèn)增多,會(huì)比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。

單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。每次請(qǐng)求一個(gè)新的頁(yè)面的時(shí)候Cookie都會(huì)被發(fā)送過(guò)去,與服務(wù)器進(jìn)行交互。

1.12 XML和JSON的區(qū)別?

數(shù)據(jù)體積方面:JSON相對(duì)于XML來(lái)講,數(shù)據(jù)的體積小,傳遞的速度更快些。

列表項(xiàng)目:JSON與JavaScript的交互更加方便,更容易解析處理,更好的數(shù)據(jù)交互。

數(shù)據(jù)描述方面:JSON對(duì)數(shù)據(jù)的描述性比XML較差。

傳輸速度方面:JSON的速度要遠(yuǎn)遠(yuǎn)快于XML。

1.13 如何實(shí)現(xiàn)瀏覽器內(nèi)多個(gè)標(biāo)簽頁(yè)之間的通信?

調(diào)用localstorge、cookies等本地存儲(chǔ)方式

1.14 線程與進(jìn)程的區(qū)別

一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。

線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。

進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。

線程在執(zhí)行過(guò)程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。

從邏輯角度來(lái)看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒(méi)有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來(lái)實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。

1.15 漸進(jìn)增強(qiáng)和優(yōu)雅降級(jí)

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

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

1.16 性能優(yōu)化

網(wǎng)頁(yè)內(nèi)容

減少 http請(qǐng)求次數(shù)

減少 DNS查詢次數(shù)

避免頁(yè)面跳轉(zhuǎn)

緩存 Ajax

延遲加載

提前加載

減少 DOM元素?cái)?shù)量

避免 404

服務(wù)器

使用CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))

添加Expires或Cache-Control報(bào)文頭

Gzip壓縮傳輸文件

CSS

將樣式表置頂

用代替@import

JavaScript

把腳本置于頁(yè)面底部

使用外部JavaScript和CSS

精簡(jiǎn)JavaScript和CSS

去除重復(fù)腳本

減少DOM訪問(wèn)

圖片

優(yōu)化圖像

優(yōu)化CSS Spirite

不要在HTML中縮放圖片

favicon.ico要小而且可緩存

1.17 如何解決跨域問(wèn)題?

jsonp

CORS

document.domain+iframe

window.name

window.postMessage

jsonp的原理是動(dòng)態(tài)插入script標(biāo)簽

1.18 請(qǐng)解釋一下 JavaScript 的同源策略。

這里的同源策略指的是:協(xié)議,域名,端口相同,同源策略是一種安全協(xié)議。
指一段腳本只能讀取來(lái)自同一來(lái)源的窗口和文檔的屬性。

1.19 哪些操作會(huì)造成內(nèi)存泄漏?

內(nèi)存泄漏指任何對(duì)象在您不再擁有或需要它之后仍然存在。

垃圾回收器定期掃描對(duì)象,并計(jì)算引用了每個(gè)對(duì)象的其他對(duì)象的數(shù)量。如果一個(gè)對(duì)象的引用數(shù)量為 0(沒(méi)有其他對(duì)象引用過(guò)該對(duì)象),或?qū)υ搶?duì)象的惟一引用是循環(huán)的,那么該對(duì)象的內(nèi)存即可回收。

setTimeout 的第一個(gè)參數(shù)使用字符串而非函數(shù)的話,會(huì)引發(fā)內(nèi)存泄漏。

閉包、控制臺(tái)日志、循環(huán)(在兩個(gè)對(duì)象彼此引用且彼此保留時(shí),就會(huì)產(chǎn)生一個(gè)循環(huán))

1.20 Javascript垃圾回收方法

標(biāo)記清除:這是JavaScript最常見(jiàn)的垃圾回收方式,當(dāng)變量進(jìn)入執(zhí)行環(huán)境的時(shí)候,比如函數(shù)中聲明一個(gè)變量,垃圾回收器將其標(biāo)記為“進(jìn)入環(huán)境”,當(dāng)變量離開(kāi)環(huán)境的時(shí)候(函數(shù)執(zhí)行結(jié)束)將其標(biāo)記為“離開(kāi)環(huán)境”。

引用計(jì)數(shù):引用計(jì)數(shù)的策略是跟蹤記錄每個(gè)值被使用的次數(shù),當(dāng)聲明了一個(gè) 變量并將一個(gè)引用類型賦值給該變量的時(shí)候這個(gè)值的引用次數(shù)就加1,如果該變量的值變成了另外一個(gè),則這個(gè)值得引用次數(shù)減1,當(dāng)這個(gè)值的引用次數(shù)變?yōu)?的時(shí) 候,說(shuō)明沒(méi)有變量在使用,這個(gè)值沒(méi)法被訪問(wèn)了,因此可以將其占用的空間回收,這樣垃圾回收器會(huì)在運(yùn)行的時(shí)候清理掉引用次數(shù)為0的值占用的空間。

1.21 事件、IE與火狐的事件機(jī)制有什么區(qū)別? 如何阻止冒泡?

事件處理機(jī)制:IE是事件冒泡、firefox同時(shí)支持兩種事件模型,也就是:捕獲型事件和冒泡型事件。

阻止冒泡:ev.stopPropagation()

1.22 說(shuō)說(shuō)嚴(yán)格模式的限制

變量必須聲明后再使用

函數(shù)的參數(shù)不能有同名屬性,否則報(bào)錯(cuò)

禁止this指向全局對(duì)象

不能使用with語(yǔ)句

增加了保留字

arguments不會(huì)自動(dòng)反映函數(shù)參數(shù)的變化

設(shè)立”嚴(yán)格模式”的目的:

消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;

消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全;

提高編譯器效率,增加運(yùn)行速度;

為未來(lái)新版本的Javascript做好鋪墊。

1.23 請(qǐng)解釋什么是事件代理

事件代理(Event Delegation),又稱之為事件委托。即是把原本需要綁定的事件委托給父元素,讓父元素?fù)?dān)當(dāng)事件監(jiān)聽(tīng)的職務(wù)。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好處是可以提高性能。

1.24 Event Loop、消息隊(duì)列、事件輪詢

異步函數(shù)在執(zhí)行結(jié)束后,會(huì)在事件隊(duì)列中添加一個(gè)事件(回調(diào)函數(shù))(遵循先進(jìn)先出原則),主線程中的代碼執(zhí)行完畢后(即一次循環(huán)結(jié)束),下一次循環(huán)開(kāi)始就在事件隊(duì)列中“讀取”事件,然后調(diào)用它所對(duì)應(yīng)的回調(diào)函數(shù)。這個(gè)過(guò)程是循環(huán)不斷的,所以整個(gè)的這種運(yùn)行機(jī)制又稱為Event Loop(事件循環(huán))
主線程運(yùn)行的時(shí)候,產(chǎn)生堆(heap)棧(stack),棧中的代碼(同步任務(wù))調(diào)用各種外部API,它們?cè)凇比蝿?wù)隊(duì)列”中加入各種事件(click,load,done)。只要棧中的代碼執(zhí)行完畢,主線程就會(huì)去讀取”任務(wù)隊(duì)列”,依次執(zhí)行那些事件所對(duì)應(yīng)的回調(diào)函數(shù)。
執(zhí)行棧中的代碼(同步任務(wù)),總是在讀取”任務(wù)隊(duì)列”(異步任務(wù))之前執(zhí)行。

1.25 緩存
瀏覽器緩存(Browser Caching)是瀏覽器端保存數(shù)據(jù)用于快速讀取或避免重復(fù)資源請(qǐng)求的優(yōu)化機(jī)制,有效的緩存使用可以避免重復(fù)的網(wǎng)絡(luò)請(qǐng)求和瀏覽器快速地讀取本地?cái)?shù)據(jù)。

http緩存:http緩存是基于HTTP協(xié)議的瀏覽器文件級(jí)緩存機(jī)制。即針對(duì)文件的重復(fù)請(qǐng)求情況下,瀏覽器可以根據(jù)協(xié)議頭判斷從服務(wù)器端請(qǐng)求文件還是從本地讀取文件判斷expires,如果未過(guò)期,直接讀取http緩存文件

indexDB:是一個(gè)在客戶端存儲(chǔ)可觀數(shù)量的結(jié)構(gòu)化數(shù)據(jù),并且為這些數(shù)據(jù)添加索引進(jìn)行高性能檢索。

cookie:指一般網(wǎng)站為了辨別用戶身份、儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過(guò)加密)。cookie一般通過(guò)http請(qǐng)求中在頭部一起發(fā)送到服務(wù)器端。一條cookie記錄主要由鍵、值、域、過(guò)期時(shí)間、大小組成,一般用戶保存用戶的認(rèn)證信息。

localstorage:localStorage是h5的一種新的本地緩存方案,加快下次頁(yè)面打開(kāi)時(shí)的渲染速度,除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過(guò)期的。

sessionstorage:也是h5的一種本地緩存方案,數(shù)據(jù)的存儲(chǔ)僅特定于某個(gè)會(huì)話中,也就是說(shuō)數(shù)據(jù)只保持到瀏覽器關(guān)閉,當(dāng)瀏覽器關(guān)閉后重新打開(kāi)這個(gè)頁(yè)面時(shí), 之前的存儲(chǔ)已經(jīng)被清除。

2. ES6 2.1 ES6的了解

es6是一個(gè)新的標(biāo)準(zhǔn),它包含了許多新的語(yǔ)言特性和庫(kù),是JS最實(shí)質(zhì)性的一次升級(jí)。比如’箭頭函數(shù)’、’字符串模板’、’generators(生成器)’、’async/await’、’解構(gòu)賦值’、’class’等等,還有就是引入module模塊的概念。
箭頭函數(shù)可以讓this指向固定化,這種特性很有利于封裝回調(diào)函數(shù)。
(1) 函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。
(2) 不可以當(dāng)作構(gòu)造函數(shù),也就是說(shuō),不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤。
(3) 不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用,可以用Rest參數(shù)代替。
(4) 不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)。

async/await是寫(xiě)異步代碼的新方式,以前的方法有回調(diào)函數(shù)和Promise。

async/await是基于Promise實(shí)現(xiàn)的,它不能用于普通的回調(diào)函數(shù)。

async/await與Promise一樣,是非阻塞的。

async/await使得異步代碼看起來(lái)像同步代碼,這正是它的魔力所在。

2.2 說(shuō)說(shuō)你對(duì)Promise的理解
Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件監(jiān)聽(tīng)——更合理和更強(qiáng)大。
所謂Promise,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果。從語(yǔ)法上說(shuō),Promise 是一個(gè)對(duì)象,從它可以獲取異步操作的消息。Promise 提供統(tǒng)一的 API,各種異步操作都可以用同樣的方法進(jìn)行處理。

Promise對(duì)象有以下兩個(gè)特點(diǎn):

對(duì)象的狀態(tài)不受外界影響,Promise對(duì)象代表一個(gè)異步操作,有三種狀態(tài):Pending(進(jìn)行中)、Resolved(已完成,又稱 Fulfilled)和Rejected(已失?。?/p>

一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。

2.3 說(shuō)說(shuō)你對(duì)AMD和Commonjs的理解

CommonJS是服務(wù)器端模塊的規(guī)范,Node.js采用了這個(gè)規(guī)范。CommonJS規(guī)范加載模塊是同步的,也就是說(shuō),只有加載完成,才能執(zhí)行后面的操作。AMD規(guī)范則是非同步加載模塊,允許指定回調(diào)函數(shù)。
AMD推薦的風(fēng)格通過(guò)返回一個(gè)對(duì)象做為模塊對(duì)象,CommonJS的風(fēng)格通過(guò)對(duì)module.exports或exports的屬性賦值來(lái)達(dá)到暴露模塊對(duì)象的目的。

3. Gulp、Webpack比較 3.1 Gulp

Gulp就是為了規(guī)范前端開(kāi)發(fā)流程,實(shí)現(xiàn)前后端分離、模塊化開(kāi)發(fā)、版本控制、文件合并與壓縮、mock數(shù)據(jù)等功能的一個(gè)前端自動(dòng)化構(gòu)建工具。

Gulp就像是一個(gè)產(chǎn)品的流水線,整個(gè)產(chǎn)品從無(wú)到有,都要受流水線的控制,在流水線上我們可以對(duì)產(chǎn)品進(jìn)行管理。

Gulp是通過(guò)task對(duì)整個(gè)開(kāi)發(fā)過(guò)程進(jìn)行構(gòu)建。

3.2 Webpack

當(dāng)下最熱門(mén)的前端資源模塊化管理和打包工具

可以很好的管理模塊以及各個(gè)模塊之間的依賴

對(duì)js、css、圖片等資源文件都支持打包

有獨(dú)立的配置文件webpack.config.js

可以將代碼切割成不同的chunk,實(shí)現(xiàn)按需加載,降低了初始化時(shí)間

可以生成優(yōu)化且合并后的靜態(tài)資源

兩大特色:

代碼可以自動(dòng)完成編譯

loader 可以處理各種類型的靜態(tài)文件,并且支持串聯(lián)操作

4. CSS 4.1 display:none和visibility:hidden的區(qū)別?

display:none 隱藏對(duì)應(yīng)的元素,在文檔布局中不再給它分配空間,它各邊的元素會(huì)合攏,就當(dāng)他從來(lái)不存在。

visibility:hidden 隱藏對(duì)應(yīng)的元素,但是在文檔布局中仍保留原來(lái)的空間。

4.2 position:absolute和float屬性的異同

A:共同點(diǎn):
對(duì)內(nèi)聯(lián)元素設(shè)置floatabsolute屬性,可以讓元素脫離文檔流,并且可以設(shè)置其寬高。
B:不同點(diǎn):
float仍會(huì)占據(jù)位置,position會(huì)覆蓋文檔流中的其他元素。

4.3 box-sizing屬性

content-box:讓元素維持W3C的標(biāo)準(zhǔn)盒模型。元素的寬度/高度由border + padding + content的寬度/高度決定,設(shè)置width/height屬性指的是content部分的寬/高,一旦修改了元素的邊框或內(nèi)距,就會(huì)影響元素的盒子尺寸,就不得不重新計(jì)算元素的盒子尺寸,從而影響整個(gè)頁(yè)面的布局。

border-box:讓元素維持IE傳統(tǒng)盒模型(IE6以下版本和IE6~7的怪異模式)。設(shè)置width/height屬性指的是border + padding + content

4.4 position的值

static 默認(rèn)值。沒(méi)有定位,元素出現(xiàn)在正常的流中。

relative 生成相對(duì)定位的元素,相對(duì)于其在普通流中的位置進(jìn)行定位。

absolute 生成絕對(duì)定位的元素, 相對(duì)于最近一級(jí)的 定位不是 static 的父元素來(lái)進(jìn)行定位。

fixed (老IE不支持)生成絕對(duì)定位的元素,相對(duì)于瀏覽器窗口進(jìn)行定位。

4.5 解釋下浮動(dòng)和它的工作原理?清除浮動(dòng)的技巧

浮動(dòng)元素脫離文檔流,不占據(jù)空間。浮動(dòng)元素碰到包含它的邊框或者浮動(dòng)元素的邊框停留。

使用空標(biāo)簽清除浮動(dòng):這種方法是在所有浮動(dòng)標(biāo)簽后面添加一個(gè)空標(biāo)簽 定義css clear:both. 弊端就是增加了無(wú)意義標(biāo)簽。

使用overflow:設(shè)置overflow為hidden或者auto,給包含浮動(dòng)元素的父標(biāo)簽添加css屬性 overflow:auto; zoom:1; zoom:1用于兼容IE6。

使用after偽對(duì)象清除浮動(dòng):該方法只適用于非IE瀏覽器。該方法中必須為需要清除浮動(dòng)元素的偽對(duì)象中設(shè)置 height:0,否則該元素會(huì)比實(shí)際高出若干像素。

#box:after{
    content:".";
    height:0;
    visibility:hidden;
    display:block;
    clear:both;
}
4.6 浮動(dòng)元素引起的問(wèn)題

父元素的高度無(wú)法被撐開(kāi),影響與父元素同級(jí)的元素

與浮動(dòng)元素同級(jí)的非浮動(dòng)元素(內(nèi)聯(lián)元素)會(huì)跟隨其后

若非第一個(gè)元素浮動(dòng),則該元素之前的元素也需要浮動(dòng),否則會(huì)影響頁(yè)面顯示的結(jié)構(gòu)

5. CSS3新特性

CSS3實(shí)現(xiàn)圓角(border-radius)

陰影(box-shadow)

對(duì)文字加特效(text-shadow、)

線性漸變(gradient)

旋轉(zhuǎn)(transform)

transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋轉(zhuǎn),縮放,定位,傾斜

增加了更多的CSS選擇器

多背景

rgba

在CSS3中唯一引入的偽元素是::selection.

媒體查詢

多欄布局

border-image

6. CSS sprites

CSS Sprites 其實(shí)就是把網(wǎng)頁(yè)中一些背景圖片整合到一張圖片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的組合進(jìn)行背景定位,background-position可以用數(shù)字能精確的定位出背景圖片的位置。這樣可以減少很多圖片請(qǐng)求的開(kāi)銷,因?yàn)檎?qǐng)求耗時(shí)比較長(zhǎng);請(qǐng)求雖然可以并發(fā),但是也有限制,一般瀏覽器都是6個(gè)。對(duì)于未來(lái)而言,就不需要這樣做了,因?yàn)橛辛薶ttp2。

7. HTML 7.1 說(shuō)說(shuō)你對(duì)語(yǔ)義化的理解

去掉或者丟失樣式的時(shí)候能夠讓頁(yè)面呈現(xiàn)出清晰的結(jié)構(gòu);

有利于SEO:和搜索引擎建立良好溝通,有助于爬蟲(chóng)抓取更多的有效信息:爬蟲(chóng)依賴于標(biāo)簽來(lái)確定上下文和各個(gè)關(guān)鍵字的權(quán)重;

方便其他設(shè)備解析(如屏幕閱讀器、盲人閱讀器、移動(dòng)設(shè)備)以意義的方式來(lái)渲染網(wǎng)頁(yè);

便于團(tuán)隊(duì)開(kāi)發(fā)和維護(hù),語(yǔ)義化更具可讀性,是下一步吧網(wǎng)頁(yè)的重要?jiǎng)酉?,遵循W3C標(biāo)準(zhǔn)的團(tuán)隊(duì)都遵循這個(gè)標(biāo)準(zhǔn),可以減少差異化。

7.2 Doctype作用? 嚴(yán)格模式與混雜模式如何區(qū)分?它們有何意義?

?告知瀏覽器的解析器用什么文檔標(biāo)準(zhǔn)解析這個(gè)文檔。

嚴(yán)格模式的排版和 JS 運(yùn)作模式是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行。

在混雜模式中,頁(yè)面以寬松的向后兼容的方式顯示。模擬老式瀏覽器的行為以防止站點(diǎn)無(wú)法工作。

?不存在或格式不正確會(huì)導(dǎo)致文檔以混雜模式呈現(xiàn)。

7.3 你知道多少種Doctype文檔類型?

該標(biāo)簽可聲明三種 DTD 類型,分別表示嚴(yán)格版本、過(guò)渡版本以及基于框架的 HTML 文檔。
HTML 4.01 規(guī)定了三種文檔類型:Strict、Transitional 以及 Frameset。
XHTML 1.0 規(guī)定了三種 XML 文檔類型:Strict、Transitional 以及 Frameset。
Standards (標(biāo)準(zhǔn))模式(也就是嚴(yán)格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標(biāo)準(zhǔn)的網(wǎng)頁(yè),而 Quirks(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計(jì)的網(wǎng)頁(yè)。

7.4 HTML與XHTML——二者有什么區(qū)別

所有的標(biāo)記都必須要有一個(gè)相應(yīng)的結(jié)束標(biāo)記;

所有標(biāo)簽的元素和屬性的名字都必須使用小寫(xiě);

所有的XML標(biāo)記都必須合理嵌套;

所有的屬性必須用引號(hào)””括起來(lái);

把所有<和&特殊符號(hào)用編碼表示;

給所有屬性賦一個(gè)值;

不要在注釋內(nèi)容中使“–”;

圖片必須有說(shuō)明文字。

7.5 html5有哪些新特性

語(yǔ)義化更好的內(nèi)容標(biāo)簽(header,nav,footer,aside,article,section)

音頻、視頻API(audio,video)

畫(huà)布(Canvas) API

地理(Geolocation) API

拖拽釋放(Drag and drop) API

本地離線存儲(chǔ)

表單控件,calendar、date、time、email、url、search

8. 計(jì)算機(jī)網(wǎng)絡(luò) 8.1 HTTP請(qǐng)求四部分

HTTP請(qǐng)求的方法或動(dòng)作,比如是get還是post請(qǐng)求;

正在請(qǐng)求的URL(請(qǐng)求的地址);

請(qǐng)求頭,包含一些客戶端環(huán)境信息、身份驗(yàn)證信息等;

請(qǐng)求體(請(qǐng)求正文),可以包含客戶提交的查詢字符串信息、表單信息等。

8.2 請(qǐng)求頭字段:

Accept:text/html,image/*(告訴服務(wù)器,瀏覽器可以接受文本,網(wǎng)頁(yè)圖片)

Accept-Charaset:ISO-8859-1 [接受字符編碼:iso-8859-1]

Accept-Encoding:gzip,compress[可以接受 gzip,compress壓縮后數(shù)據(jù)]

Accept-Language:zh-cn[瀏覽器支持的語(yǔ)言]

Host:localhost:8080[瀏覽器要找的主機(jī)]

If-Modified-Since:Tue, 09 May 2017 01:34:02 GMT[告訴服務(wù)器我這緩存中有這個(gè)文件,該文件的時(shí)間是…]

User-Agent:Nozilla/4.0(Com…)[告訴服務(wù)器我的瀏覽器內(nèi)核,客戶端環(huán)境信]

Cookie:[身份驗(yàn)證信息]

Connection:close/Keep-Alive [保持鏈接,發(fā)完數(shù)據(jù)后,我不關(guān)閉鏈接]

8.3 HTTP響應(yīng)三部分

(1) 一個(gè)數(shù)字和文字組成的狀態(tài)碼,用來(lái)顯示請(qǐng)求是成功還是失??;
(2) 響應(yīng)頭,響應(yīng)頭也和請(qǐng)求頭一樣包含許多有用的信息,例如服務(wù)器類型、日期時(shí)間、內(nèi)容類型和長(zhǎng)度等;
(3) 響應(yīng)體(響應(yīng)正文)。

響應(yīng)頭字段:

Cache-Control:[告訴瀏覽器如何緩存頁(yè)面(因?yàn)闉g覽器的兼容性最好設(shè)置兩個(gè))]

Connection:close/Keep-Alive [保持鏈接,發(fā)完數(shù)據(jù)后,我不關(guān)閉鏈接]

Content-Type:text/html;charset=gb2312[內(nèi)容格式和編碼]

Last-Modified:Tue,11 Juj,2017 18 18:29:20[告訴瀏覽器該資源上次更新時(shí)間是多少]

ETag:”540-54f0d59b8b680”

Expires:Fri, 26 May 2017 13:28:33 GMT [失效日期]

server:apache tomcat nginx [哪種服務(wù)器]

8.4 說(shuō)說(shuō)TCP傳輸?shù)娜挝帐?/b>

第一次握手,客戶端給服務(wù)器發(fā)送數(shù)據(jù)包(帶SYN標(biāo)志的數(shù)據(jù)包)。此時(shí)服務(wù)器確認(rèn)自己可以接收客戶端的包,而客戶端不確認(rèn)服務(wù)器是否接收到了自己發(fā)的數(shù)據(jù)包。
第二次握手,服務(wù)器端回復(fù)(回傳一個(gè)帶有SYN/ACK標(biāo)志的數(shù)據(jù)包以示傳達(dá)確認(rèn)信息)客戶端。此時(shí)客戶端確認(rèn)自己發(fā)的包被服務(wù)器收到,也確認(rèn)自己可以正常接收服務(wù)器包,客戶端對(duì)此次通信沒(méi)有疑問(wèn)了。服務(wù)器也可以確認(rèn)自己能接收到客戶端的包,但不能確認(rèn)客戶端能否接收自己發(fā)的包。
第三次握手,客戶端回復(fù)(發(fā)送端再回傳一個(gè)帶ACK標(biāo)志的數(shù)據(jù)包,代表“握手”結(jié)束)服務(wù)器。 客戶端已經(jīng)沒(méi)有疑問(wèn)了,服務(wù)器也確認(rèn)剛剛客戶端收到了自己的數(shù)據(jù)包。兩邊都沒(méi)有問(wèn)題,開(kāi)始通信。

為什么要三次握手:
為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了服務(wù)端,因而產(chǎn)生錯(cuò)誤。也防止了服務(wù)器端的一直等待而浪費(fèi)資源;
TCP作為一種可靠傳輸控制協(xié)議,其核心思想:既要保證數(shù)據(jù)可靠傳輸,又要提高傳輸?shù)男?,而用三次恰恰可以滿足以上兩方面的需求!

8.5 四次揮手

主機(jī)向服務(wù)器發(fā)送一個(gè)斷開(kāi)連接的請(qǐng)求( 不早了,我該走了 ),發(fā)送一個(gè)FIN報(bào)文段;

服務(wù)器接到請(qǐng)求后發(fā)送確認(rèn)收到請(qǐng)求的信號(hào)( 知道了 )回一個(gè)ACK報(bào)文段

服務(wù)器向主機(jī)發(fā)送斷開(kāi)通知( 我也該走了 )發(fā)送FIN報(bào)文段,請(qǐng)求關(guān)閉連接

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

8.6 TCP和UDP的區(qū)別

TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說(shuō),在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。一個(gè)TCP連接必須要經(jīng)過(guò)三次“對(duì)話”才能建立起來(lái)。

UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過(guò)去!

UDP適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境。

8.7 HTTP和HTTPS

HTTP協(xié)議通常承載于TCP協(xié)議之上,在HTTP和TCP之間添加一個(gè)安全協(xié)議層(SSL或TSL),這個(gè)時(shí)候,就成了我們常說(shuō)的HTTPS

默認(rèn)HTTP的端口號(hào)為80,HTTPS的端口號(hào)為443

HTTPS 相對(duì)于 HTTP 性能上差點(diǎn),因?yàn)槎嗔?SSL/TLS 的幾次握手和加密解密的運(yùn)算處理,但是加密解密的運(yùn)算處理已經(jīng)可以通過(guò)特有的硬件來(lái)加速處理。

8.8 什么是Etag?

把Last-Modified和ETag請(qǐng)求的http報(bào)頭一起使用,可利用客戶端(例如瀏覽器)的緩存。ETag用于標(biāo)識(shí)資源的狀態(tài),當(dāng)資源發(fā)生變更時(shí),如果其頭信息中一個(gè)或者多個(gè)發(fā)生變化,或者消息實(shí)體發(fā)生變化,那么ETag也隨之發(fā)生變化。瀏覽器下載組件的時(shí)候,會(huì)將它們存儲(chǔ)到瀏覽器緩存中。如果需要再次獲取相同的組件,瀏覽器將檢查組件的緩存時(shí)間,假如已經(jīng)過(guò)期,那么瀏覽器將發(fā)送一個(gè)條件GET請(qǐng)求到服務(wù)器,服務(wù)器判斷緩存還有效,則發(fā)送一個(gè)304響應(yīng),告訴瀏覽器可以重用緩存組件。

8.9 Expires和Cache-Control

Expires 用來(lái)控制緩存的失效日期
Cache-Control 用來(lái)控制網(wǎng)頁(yè)的緩存 常見(jiàn)的取值有private、no-cache、max-age、must-revalidate等,默認(rèn)為private。

8.10 關(guān)于Http 2.0 你知道多少?

HTTP/2引入了“服務(wù)端推(server push)”的概念,它允許服務(wù)端在客戶端需要數(shù)據(jù)之前就主動(dòng)地將數(shù)據(jù)發(fā)送到客戶端緩存中,從而提高性能。

HTTP/2提供更多的加密支持

HTTP/2使用多路技術(shù),允許多個(gè)消息在一個(gè)連接上同時(shí)交差。

它增加了頭壓縮(header compression),因此即使非常小的請(qǐng)求,其請(qǐng)求和響應(yīng)的header都只會(huì)占用很小比例的帶寬。

8.11 一個(gè)頁(yè)面從輸入 URL 到頁(yè)面加載顯示完成,這個(gè)過(guò)程中都發(fā)生了什么?

瀏覽器根據(jù)請(qǐng)求的URL交給DNS域名解析,找到真實(shí)IP,向服務(wù)器發(fā)起請(qǐng)求(TCP三次握手);

服務(wù)器交給后臺(tái)處理完成后返回?cái)?shù)據(jù),瀏覽器接收文件(HTML、JS、CSS、圖象等);

瀏覽器對(duì)加載到的資源(HTML、JS、CSS等)進(jìn)行語(yǔ)法解析,建立相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如HTML的DOM);

載入解析到的資源文件,渲染頁(yè)面,完成。

8.12 瀏覽器的渲染過(guò)程

瀏覽器請(qǐng)求到HTML代碼后,在生成DOM的最開(kāi)始階段,并行發(fā)起css、圖片、js的請(qǐng)求,無(wú)論他們是否在HEAD里。瀏覽器會(huì)將HTML解析成一個(gè)DOM樹(shù),DOM 樹(shù)的構(gòu)建過(guò)程是一個(gè)深度遍歷過(guò)程:當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)都構(gòu)建好后才會(huì)去構(gòu)建當(dāng)前節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn)。

CSS文件下載完成,開(kāi)始構(gòu)建CSSOM

所有CSS文件下載完成,CSSOM構(gòu)建結(jié)束后,和 DOM 一起生成 Render Tree。

有了Render Tree,瀏覽器已經(jīng)能知道網(wǎng)頁(yè)中有哪些節(jié)點(diǎn)、各個(gè)節(jié)點(diǎn)的CSS定義以及他們的從屬關(guān)系。下一步操作就是計(jì)算出每個(gè)節(jié)點(diǎn)在屏幕中的位置。

最后一步,按照算出來(lái)的規(guī)則,把內(nèi)容渲染到屏幕上。

以上五個(gè)步驟前3個(gè)步驟因?yàn)镈OM、CSSOM、Render Tree都可能在第一次Painting后又被更新多次,比如JS修改了DOM或者CSS屬性。Layout 和 Painting 也會(huì)被重復(fù)執(zhí)行,除了DOM、CSSOM更新的原因外,圖片下載完成后也需要調(diào)用Layout 和 Painting來(lái)更新網(wǎng)頁(yè)。

display:none 的節(jié)點(diǎn)不會(huì)被加入 Render Tree,而 visibility: hidden 則會(huì),所以,如果某個(gè)節(jié)點(diǎn)最開(kāi)始是不顯示的,設(shè)為 display:none 是更優(yōu)的。
8.13 一個(gè)完整的URL包括以下幾部分

協(xié)議部分

域名部分

端口部分

虛擬目錄部分:從域名后的第一個(gè)“/”開(kāi)始到最后一個(gè)“/”為止

文件名部分:從域名后的最后一個(gè)“/”開(kāi)始到“?”為止

參數(shù)部分:從“?”開(kāi)始到“#”為止之間的部分

錨部分:從“#”開(kāi)始到最后

8.14 GET和POST的區(qū)別

GET:一般用于信息獲取,使用URL傳遞參數(shù),對(duì)所發(fā)送信息的數(shù)量也有限制,一般在1024字節(jié),Get是通過(guò)地址欄來(lái)傳值。

POST:一般用于修改服務(wù)器上的資源,對(duì)所發(fā)送的信息沒(méi)有限制。(常用于發(fā)送表單數(shù)據(jù),新建、修改等),Post是通過(guò)提交表單來(lái)傳值。

8.15 常見(jiàn)HTTP狀態(tài)碼

1xx(臨時(shí)響應(yīng)):表示臨時(shí)響應(yīng)并需要請(qǐng)求者繼續(xù)執(zhí)行操作的狀態(tài)碼。
2xx(成功):表示成功處理了請(qǐng)求的狀態(tài)碼。
200(成功):服務(wù)器已成功處理了請(qǐng)求。通常,這表示服務(wù)器提供了請(qǐng)求的網(wǎng)頁(yè)。
3xx(重定向):要完成請(qǐng)求,需要進(jìn)一步操作。
301(永久移動(dòng)):請(qǐng)求的網(wǎng)頁(yè)已永久移動(dòng)到新位置。
302(臨時(shí)移動(dòng)):服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)響應(yīng)以后的請(qǐng)求。
304(未修改):自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)。
4xx(請(qǐng)求錯(cuò)誤):這些狀態(tài)碼表示請(qǐng)求可能出錯(cuò),妨礙了服務(wù)器的處理。
400(錯(cuò)誤請(qǐng)求):服務(wù)器不理解請(qǐng)求的語(yǔ)法。
404(未找到):服務(wù)器找不到請(qǐng)求的網(wǎng)頁(yè)。
5xx(服務(wù)器錯(cuò)誤):這些狀態(tài)碼表示服務(wù)器在處理請(qǐng)求時(shí)發(fā)生內(nèi)部錯(cuò)誤。
500(服務(wù)器內(nèi)部錯(cuò)誤):服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求。
503(服務(wù)不可用):服務(wù)器目前無(wú)法使用(由于超載或停機(jī)維護(hù))。

8.16 說(shuō)說(shuō)網(wǎng)絡(luò)分層里七層模型是哪七層

應(yīng)用層

表示層

會(huì)話層(從上往下)(HTTP、FTP、SMTP、DNS)

傳輸層(TCP和UDP)

網(wǎng)絡(luò)層(IP)

物理層

數(shù)據(jù)鏈路層(以太網(wǎng))

8.17 304緩存

服務(wù)器首先產(chǎn)生ETag,服務(wù)器可在稍后使用它來(lái)判斷頁(yè)面是否已經(jīng)被修改。本質(zhì)上,客戶端通過(guò)將該記號(hào)傳回服務(wù)器要求服務(wù)器驗(yàn)證其(客戶端)緩存。

304是HTTP狀態(tài)碼,服務(wù)器用來(lái)標(biāo)識(shí)這個(gè)文件沒(méi)修改,不返回內(nèi)容,瀏覽器在接收到個(gè)狀態(tài)碼后,會(huì)使用瀏覽器已緩存的文件

8.18 http keep-alive與tcp keep-alive

http keep-alive是為了讓tcp活得更久一點(diǎn),以便在同一個(gè)連接上傳送多個(gè)http,提高socket的效率。而tcp keep-alive是TCP的一種檢測(cè)TCP連接狀況的保鮮機(jī)制。

8.19 常見(jiàn)web安全及防護(hù)原理

sql注入原理

就是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。

XSS

指的是攻擊者往Web頁(yè)面里插入惡意html標(biāo)簽或者javascript代碼。比如:攻擊者在論壇中放一個(gè)看似安全的鏈接,騙取用戶點(diǎn)擊后,竊取cookie中的用戶私密信息;或者攻擊者在論壇中加一個(gè)惡意表單,當(dāng)用戶提交表單的時(shí)候,卻把信息傳送到攻擊者的服務(wù)器中,而不是用戶原本以為的信任站點(diǎn)。

CSRF

CSRF是代替用戶完成指定的動(dòng)作,需要知道其他用戶頁(yè)面的代碼和數(shù)據(jù)包。要完成一次CSRF攻擊,受害者必須依次完成兩個(gè)步驟:1、登錄受信任網(wǎng)站A,并在本地生成Cookie。2、在不登出A的情況下,訪問(wèn)危險(xiǎn)網(wǎng)站B。

9. 算法 9.1 數(shù)組去重
建一個(gè)空對(duì)象和空數(shù)組,循環(huán)遍歷需要去重的數(shù)組,判斷對(duì)象有沒(méi)有此屬性,沒(méi)有的話就給對(duì)象添加此屬性,并向空數(shù)組中push這個(gè)值。
//es5
function unique(arr){
    var obj = {}
    var result = []
    for(var i in arr){
        if(!obj[arr[i]]){
            obj[arr[i]] = true;
            result.push(arr[i]);
        }
    }
    return result;
}

//es6
[...new Set(arr)]
9.2 排序

請(qǐng)參考專欄相關(guān)文章

10. 其他 10.1 對(duì)前端界面工程師這個(gè)職位是怎么樣理解的?

前端是最貼近用戶的程序員,前端的能力就是能讓產(chǎn)品從 90分進(jìn)化到 100 分,甚至更好

實(shí)現(xiàn)界面交互

提升用戶體驗(yàn)

10.2 談?wù)勀銓?duì)重構(gòu)的理解

在不改變外部行為的前提下,簡(jiǎn)化結(jié)構(gòu)、添加可讀性,而在網(wǎng)站前端保持一致的行為。也就是說(shuō)是在不改變UI的情況下,對(duì)網(wǎng)站進(jìn)行優(yōu)化,在擴(kuò)展的同時(shí)保持一致的UI。

減少代碼間的耦合

讓代碼保持彈性

嚴(yán)格按規(guī)范編寫(xiě)代碼

設(shè)計(jì)可擴(kuò)展的API

代替舊有的框架、語(yǔ)言(如VB)

增強(qiáng)用戶體驗(yàn)

通常來(lái)說(shuō)對(duì)于速度的優(yōu)化也包含在重構(gòu)中

10.3 你遇到過(guò)比較難的技術(shù)問(wèn)題是?你是如何解決的? 10.4 平時(shí)是如何學(xué)習(xí)前端開(kāi)發(fā)的? 10.5 平時(shí)如何管理你的項(xiàng)目?

先期團(tuán)隊(duì)必須確定好全局樣式(globe.css),編碼模式(utf-8) 等;

編寫(xiě)習(xí)慣必須一致(例如都是采用繼承式的寫(xiě)法,單樣式都寫(xiě)成一行);

標(biāo)注樣式編寫(xiě)人,各模塊都及時(shí)標(biāo)注(標(biāo)注關(guān)鍵樣式調(diào)用的地方);

頁(yè)面進(jìn)行標(biāo)注(例如 頁(yè)面 模塊 開(kāi)始和結(jié)束);

CSS跟HTML 分文件夾并行存放,命名都得統(tǒng)一(例如style.css);

JS 分文件夾存放 命名以該JS功能為準(zhǔn)的英文翻譯。

圖片采用整合的 images.png png8 格式文件使用盡量整合在一起使用方便將來(lái)的管理

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

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

相關(guān)文章

  • 前端不為人知的一面——前端知識(shí)集錦

    摘要:不聲明第三個(gè)變量的值交換我們都知道交換兩個(gè)變量值的常規(guī)做法,那就是聲明一個(gè)中間變量來(lái)暫存。但鮮有人去挑戰(zhàn)不聲明中間變量的情況,下面的代碼給出了這種實(shí)現(xiàn)。 前端已經(jīng)被玩兒壞了!像console.log()可以向控制臺(tái)輸出圖片等炫酷的玩意已經(jīng)不是什么新聞了,像用||操作符給變量賦默認(rèn)值也是人盡皆知的舊聞了,今天看到Quora上一個(gè)帖子,瞬間又GET了好多前端技能,一些屬于技巧,一些則是聞所...

    habren 評(píng)論0 收藏0
  • 前端知識(shí)集錦2

    摘要:函數(shù)內(nèi)部重新聲明了一個(gè),值為,這兩個(gè)是不一樣的,互相不產(chǎn)生影響,因此最后輸出。方法實(shí)現(xiàn)繼承相同的簡(jiǎn)單使用用對(duì)象替換當(dāng)前對(duì)象,如果為空,則為全局對(duì)象。 前端學(xué)習(xí)的摘錄,持續(xù)更新中... 1. 數(shù)組去重3種方案 ① 使用set去重:set是ES6中提供的數(shù)據(jù)結(jié)構(gòu),不同于數(shù)組,所有的值都是不重復(fù)的,Set內(nèi)部使用===來(lái)判斷是否相等,類似1和1會(huì)兩個(gè)都保存,NaN和NaN只會(huì)保存一個(gè) let...

    Elle 評(píng)論0 收藏0
  • 微信小程序知識(shí)總結(jié)及案例集錦

    摘要:對(duì)微信小程序進(jìn)行全局配置,決定頁(yè)面文件的路徑窗口表現(xiàn)設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間設(shè)置多等。 微信小程序知識(shí)總結(jié)及案例集錦 微信小程序的發(fā)展會(huì)和微信公眾號(hào)一樣,在某個(gè)時(shí)間點(diǎn)爆發(fā) 學(xué)習(xí)路徑 微信小程序最好的教程肯定是官方的文檔啦,點(diǎn)擊這里直達(dá) 微信官方文檔 認(rèn)真跟著文檔看一遍,相信有vue前端經(jīng)驗(yàn)的看下應(yīng)該就能上手了,然后安裝 微信小程序開(kāi)發(fā)者工具 新建一個(gè)quick start項(xiàng)目,了解代碼結(jié)構(gòu),...

    sean 評(píng)論0 收藏0
  • #yyds干貨盤(pán)點(diǎn)# 前端基礎(chǔ)知識(shí)面試集錦1

    摘要:作用標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別聲明位于位于文檔中的第一行,處于標(biāo)簽之前。又稱內(nèi)核及以上版本,等內(nèi)核及以上。存儲(chǔ)大小數(shù)據(jù)大小不能超過(guò)??梢苑乐箰阂馑⑵闭搲嗨行Х乐箤?duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力方式進(jìn)行不斷的登陸嘗試。 HTMLDoctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?(1)、聲明位于位于HT...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

leiyi

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<