Web前端面試題 2019

1.一些開放性題目

1.自我介紹:除了基本個人信息以外朽缴,面試官更想聽的是你與眾不同的地方和你的優(yōu)勢祟蚀。

2.項目介紹

3.如何看待前端開發(fā)瞎疼?

4.平時是如何學習前端開發(fā)的科乎?

5.未來三到五年的規(guī)劃是怎樣的?

position的值贼急, relative和absolute分別是相對于誰進行定位的茅茂?

§ absolute :生成絕對定位的元素, 相對于最近一級的 定位不是 static 的父元素來進行定位太抓。

§ fixed (老IE不支持)生成絕對定位的元素空闲,通常相對于瀏覽器窗口或 frame 進行定位。

§ relative 生成相對定位的元素走敌,相對于其在普通流中的位置進行定位碴倾。

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

§ sticky 生成粘性定位的元素跌榔,容器的位置根據(jù)正常文檔流計算得出

如何解決跨域問題

JSONP:

原理是:動態(tài)插入script標簽异雁,通過script標簽引入一個js文件,這個js文件載入成功后會執(zhí)行我們在url參數(shù)中指定的函數(shù)僧须,并且會把我們需要的json數(shù)據(jù)作為參數(shù)傳入纲刀。

由于同源策略的限制,XmlHttpRequest只允許請求當前源(域名担平、協(xié)議柑蛇、端口)的資源,為了實現(xiàn)跨域請求驱闷,可以通過script標簽實現(xiàn)跨域請求,然后在服務(wù)端輸出JSON數(shù)據(jù)并執(zhí)行回調(diào)函數(shù)空免,從而解決了跨域的數(shù)據(jù)請求空另。

優(yōu)點是兼容性好,簡單易用蹋砚,支持瀏覽器與服務(wù)器雙向通信扼菠。缺點是只支持GET請求。

JSONP:json+padding(內(nèi)填充)坝咐,顧名思義循榆,就是把JSON填充到一個盒子里


<script>

  functioncreateJs(sUrl){

      var oScript =document.createElement('script');

     oScript.type = 'text/javascript';

      oScript.src= sUrl;

     document.getElementsByTagName('head')[0].appendChild(oScript);

  }

  createJs('jsonp.js');

  box({

     'name': 'test'

  });

  functionbox(json){

     alert(json.name);

  }

</script>

CORS:

服務(wù)器端對于CORS的支持,主要就是通過設(shè)置Access-Control-Allow-Origin來進行的墨坚。如果瀏覽器檢測到相應(yīng)的設(shè)置秧饮,就可以允許Ajax進行跨域的訪問。

通過修改document.domain來跨子域

將子域和主域的document.domain設(shè)為同一個主域.前提條件:這兩個域名必須屬于同一個基礎(chǔ)域名!而且所用的協(xié)議泽篮,端口都要一致,否則無法利用document.domain進行跨域

主域相同的使用document.domain

使用window.name來進行跨域

window對象有個name屬性,該屬性有個特征:即在一個窗口(window)的生命周期內(nèi),窗口載入的所有的頁面都是共享一個window.name的杭抠,每個頁面對window.name都有讀寫的權(quán)限夷磕,window.name是持久存在一個窗口載入過的所有頁面中的

使用HTML5中新引進的window.postMessage方法來跨域傳送數(shù)據(jù)

還有flash、在服務(wù)器上設(shè)置代理頁面等跨域方式亏拉。個人認為window.name的方法既不復(fù)雜扣蜻,也能兼容到幾乎所有瀏覽器,這真是極好的一種跨域方法及塘。

XML和JSON的區(qū)別莽使?

(1).數(shù)據(jù)體積方面。

JSON相對于XML來講笙僚,數(shù)據(jù)的體積小吮旅,傳遞的速度更快些。

(2).數(shù)據(jù)交互方面。

JSON與JavaScript的交互更加方便庇勃,更容易解析處理檬嘀,更好的數(shù)據(jù)交互。

(3).數(shù)據(jù)描述方面责嚷。

JSON對數(shù)據(jù)的描述性比XML較差鸳兽。

(4).傳輸速度方面。

JSON的速度要遠遠快于XML罕拂。

談?wù)勀銓ebpack的看法

WebPack 是一個模塊打包工具揍异,你可以使用WebPack管理你的模塊依賴,并編繹輸出模塊們所需的靜態(tài)文件爆班。它能夠很好地管理衷掷、打包Web開發(fā)中所用到的HTML、JavaScript柿菩、CSS以及各種靜態(tài)文件(圖片戚嗅、字體等),讓開發(fā)過程更加高效枢舶。對于不同類型的資源懦胞,webpack有對應(yīng)的模塊加載器。webpack模塊打包器會分析模塊間的依賴關(guān)系凉泄,最后 生成了優(yōu)化且合并后的靜態(tài)資源躏尉。

webpack的兩大特色:

1.code splitting(可以自動完成)

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

webpack 是以commonJS的形式來書寫腳本滴后众,但對 AMD/CMD 的支持也很全面胀糜,方便舊項目進行代碼遷移。

webpack具有requireJs和browserify的功能蒂誉,但仍有很多自己的新特性:

  1. 對 CommonJS 僚纷、 AMD、ES6的語法做了兼容

  2. 對js拗盒、css怖竭、圖片等資源文件都支持打包

  3. 串聯(lián)式模塊加載器以及插件機制,讓其具有更好的靈活性和擴展性陡蝇,例如提供對CoffeeScript痊臭、ES6的支持

  4. 有獨立的配置文件webpack.config.js

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

  6. 支持 SourceUrls 和SourceMaps广匙,易于調(diào)試

  7. 具有強大的Plugin接口,大多是內(nèi)部插件恼策,使用起來比較靈活

8.webpack 使用異步 IO 并具有多級緩存鸦致。這使得 webpack 很快且在增量編譯上更加快

說說TCP傳輸?shù)娜挝帐炙拇螕]手策略

為了準確無誤地把數(shù)據(jù)送達目標處潮剪,TCP協(xié)議采用了三次握手策略。用TCP協(xié)議把數(shù)據(jù)包送出去后分唾,TCP不會對傳送 后的情況置之不理抗碰,它一定會向?qū)Ψ酱_認是否成功送達。握手過程中使用了TCP的標志:SYN和ACK绽乔。

發(fā)送端首先發(fā)送一個帶SYN標志的數(shù)據(jù)包給對方弧蝇。接收端收到后,回傳一個帶有SYN/ACK標志的數(shù)據(jù)包以示傳達確認信息折砸。
最后看疗,發(fā)送端再回傳一個帶ACK標志的數(shù)據(jù)包,代表“握手”結(jié)束睦授。
若在握手過程中某個階段莫名中斷两芳,TCP協(xié)議會再次以相同的順序發(fā)送相同的數(shù)據(jù)包。

斷開一個TCP連接則需要“四次握手”:

§ 第一次揮手:主動關(guān)閉方發(fā)送一個FIN去枷,用來關(guān)閉主動方到被動關(guān)閉方的數(shù)據(jù)傳送怖辆,也就是主動關(guān)閉方告訴被動關(guān)閉方:我已經(jīng)不 會再給你發(fā)數(shù)據(jù)了(當然,在fin包之前發(fā)送出去的數(shù)據(jù)沉填,如果沒有收到對應(yīng)的ack確認報文,主動關(guān)閉方依然會重發(fā)這些數(shù)據(jù))佑笋,但是翼闹,此時主動關(guān)閉方還可 以接受數(shù)據(jù)。

§ 第二次揮手:被動關(guān)閉方收到FIN包后蒋纬,發(fā)送一個ACK給對方猎荠,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號)蜀备。

§ 第三次揮手:被動關(guān)閉方發(fā)送一個FIN关摇,用來關(guān)閉被動關(guān)閉方到主動關(guān)閉方的數(shù)據(jù)傳送,也就是告訴主動關(guān)閉方碾阁,我的數(shù)據(jù)也發(fā)送完了输虱,不會再給你發(fā)數(shù)據(jù)了。

§ 第四次揮手:主動關(guān)閉方收到FIN后脂凶,發(fā)送一個ACK給被動關(guān)閉方宪睹,確認序號為收到序號+1,至此蚕钦,完成四次揮手亭病。

TCP和UDP的區(qū)別

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

UDP(User Data Protocol整袁,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應(yīng)的協(xié)議菠齿。它是面向非連接的協(xié)議,它不與對方建立連接葬项,而是直接就把數(shù)據(jù)包發(fā)送過去泞当!
UDP適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境民珍。

說說你對作用域鏈的理解

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

創(chuàng)建ajax過程

(1)創(chuàng)建XMLHttpRequest對象,也就是創(chuàng)建一個異步調(diào)用對象.

(2)創(chuàng)建一個新的HTTP請求,并指定該HTTP請求的方法、URL及驗證信息.

(3)設(shè)置響應(yīng)HTTP請求狀態(tài)變化的函數(shù).

(4)發(fā)送HTTP請求.

(5)獲取異步調(diào)用返回的數(shù)據(jù).

(6)使用JavaScript和DOM實現(xiàn)局部刷新.

漸進增強和優(yōu)雅降級

漸進增強 :針對低版本瀏覽器進行構(gòu)建頁面蝶溶,保證最基本的功能嗜历,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗抖所。

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

常見web安全及防護原理

sql注入原理

就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串田轧,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令暴匠。

總的來說有以下幾點:

1.永遠不要信任用戶的輸入,要對用戶的輸入進行校驗傻粘,可以通過正則表達式每窖,或限制長度,對單引號和雙"-"進行轉(zhuǎn)換等弦悉。

2.永遠不要使用動態(tài)拼裝SQL窒典,可以使用參數(shù)化的SQL或者直接使用存儲過程進行數(shù)據(jù)查詢存取。

3.永遠不要使用管理員權(quán)限的數(shù)據(jù)庫連接稽莉,為每個應(yīng)用使用單獨的權(quán)限有限的數(shù)據(jù)庫連接瀑志。

4.不要把機密信息明文存放,請加密或者hash掉密碼和敏感的信息污秆。

XSS原理及防范

Xss(cross-site scripting)攻擊指的是攻擊者往Web頁面里插入惡意 html標簽或者javascript代碼后室。比如:攻擊者在論壇中放一個

看似安全的鏈接,騙取用戶點擊后混狠,竊取cookie中的用戶私密信息岸霹;或者攻擊者在論壇中加一個惡意表單,

當用戶提交表單的時候将饺,卻把信息傳送到攻擊者的服務(wù)器中贡避,而不是用戶原本以為的信任站點痛黎。

XSS防范方法

首先代碼里對用戶輸入的地方和變量都需要仔細檢查長度和對”<”,”>”,”;”,”’”等字符做過濾;其次任何內(nèi)容寫到頁面之前都必須加以encode刮吧,避免不小心把html tag 弄出來湖饱。這一個層面做好,至少可以堵住超過一半的XSS 攻擊杀捻。

首先井厌,避免直接在cookie 中泄露用戶隱私,例如email致讥、密碼等等仅仆。

其次,通過使cookie 和系統(tǒng)ip 綁定來降低cookie 泄露后的危險垢袱。這樣攻擊者得到的cookie 沒有實際價值墓拜,不可能拿來重放。

如果網(wǎng)站不需要再瀏覽器端對cookie 進行操作请契,可以在Set-Cookie 末尾加上HttpOnly 來防止javascript 代碼直接獲取cookie 咳榜。

盡量采用POST 而非GET 提交表單

XSS與CSRF有什么區(qū)別嗎?

XSS是獲取信息爽锥,不需要提前知道其他用戶頁面的代碼和數(shù)據(jù)包涌韩。CSRF是代替用戶完成指定的動作,需要知道其他用戶頁面的代碼和數(shù)據(jù)包氯夷。

要完成一次CSRF攻擊臣樱,受害者必須依次完成兩個步驟:

登錄受信任網(wǎng)站A,并在本地生成Cookie肠槽。

在不登出A的情況下擎淤,訪問危險網(wǎng)站B奢啥。

CSRF的防御

§ 服務(wù)端的CSRF方式方法很多樣秸仙,但總的思想都是一致的,就是在客戶端頁面增加偽隨機數(shù)桩盲。

§ 通過驗證碼的方法

Web Worker 和webSocket

worker主線程:

1.通過 worker = new Worker( url ) 加載一個JS文件來創(chuàng)建一個worker寂纪,同時返回一個worker實例。

2.通過worker.postMessage( data) 方法來向worker發(fā)送數(shù)據(jù)赌结。

3.綁定worker.onmessage方法來接收worker發(fā)送過來的數(shù)據(jù)捞蛋。

4.可以使用 worker.terminate() 來終止一個worker的執(zhí)行。

WebSocket是Web應(yīng)用程序的傳輸協(xié)議柬姚,它提供了雙向的拟杉,按序到達的數(shù)據(jù)流。他是一個Html5協(xié)議量承,WebSocket的連接是持久的搬设,他通過在客戶端和服務(wù)器之間保持雙工連接穴店,服務(wù)器的更新可以被及時推送給客戶端,而不需要客戶端以一定時間間隔去輪詢拿穴。

HTTP和HTTPS

HTTP協(xié)議通常承載于TCP協(xié)議之上泣洞,在HTTP和TCP之間添加一個安全協(xié)議層(SSL或TSL),這個時候默色,就成了我們常說的HTTPS球凰。

默認HTTP的端口號為80,HTTPS的端口號為443腿宰。

為什么HTTPS安全

因為網(wǎng)絡(luò)請求需要中間有很多的服務(wù)器路由器的轉(zhuǎn)發(fā)呕诉。中間的節(jié)點都可能篡改信息,而如果使用HTTPS酗失,密鑰在你和終點站才有义钉。https之所以比http安全,是因為他利用ssl/tls協(xié)議傳輸规肴。它包含證書捶闸,卸載,流量轉(zhuǎn)發(fā)拖刃,負載均衡删壮,頁面適配,瀏覽器適配兑牡,refer傳遞等央碟。保障了傳輸過程的安全性

對前端模塊化的認識

AMD 是 RequireJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。

CMD 是 SeaJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出均函。

AMD 是提前執(zhí)行亿虽,CMD 是延遲執(zhí)行。

AMD推薦的風格通過返回一個對象做為模塊對象苞也,CommonJS的風格通過對module.exports或exports的屬性賦值來達到暴露模塊對象的目的洛勉。

CMD模塊方式

define(function(require, exports,module) {

  // 模塊代碼

});

Javascript垃圾回收方法

標記清除(mark and sweep)

這是JavaScript最常見的垃圾回收方式,當變量進入執(zhí)行環(huán)境的時候如迟,比如函數(shù)中聲明一個變量收毫,垃圾回收器將其標記為“進入環(huán)境”,當變量離開環(huán)境的時候(函數(shù)執(zhí)行結(jié)束)將其標記為“離開環(huán)境”殷勘。

垃圾回收器會在運行的時候給存儲在內(nèi)存中的所有變量加上標記此再,然后去掉環(huán)境中的變量以及被環(huán)境中變量所引用的變量(閉包),在這些完成之后仍存在標記的就是要刪除的變量了

引用計數(shù)(reference counting)

在低版本IE中經(jīng)常會出現(xiàn)內(nèi)存泄露玲销,很多時候就是因為其采用引用計數(shù)方式進行垃圾回收输拇。引用計數(shù)的策略是跟蹤記錄每個值被使用的次數(shù),當聲明了一個變量并將一個引用類型賦值給該變量的時候這個值的引用次數(shù)就加1贤斜,如果該變量的值變成了另外一個策吠,則這個值得引用次數(shù)減1议慰,當這個值的引用次數(shù)變?yōu)?的時 候,說明沒有變量在使用奴曙,這個值沒法被訪問了别凹,因此可以將其占用的空間回收,這樣垃圾回收器會在運行的時候清理掉引用次數(shù)為0的值占用的空間洽糟。

在IE中雖然JavaScript對象通過標記清除的方式進行垃圾回收炉菲,但BOM與DOM對象卻是通過引用計數(shù)回收垃圾的,
也就是說只要涉及BOM及DOM就會出現(xiàn)循環(huán)引用問題坤溃。

你覺得前端工程的價值體現(xiàn)在哪

為簡化用戶使用提供技術(shù)支持(交互部分)

為多個瀏覽器兼容性提供支持

為提高用戶瀏覽速度(瀏覽器性能)提供支持

為跨平臺或者其他基于webkit或其他渲染引擎的應(yīng)用提供支持

為展示數(shù)據(jù)提供支持(數(shù)據(jù)接口)

談?wù)勑阅軆?yōu)化問題

代碼層面:避免使用css表達式拍霜,避免使用高級選擇器,通配選擇器薪介。

緩存利用:緩存Ajax祠饺,使用CDN,使用外部js和css文件以便緩存汁政,添加Expires頭道偷,服務(wù)端配置Etag,減少DNS查找等

請求數(shù)量:合并樣式和腳本记劈,使用css圖片精靈勺鸦,初始首屏之外的圖片資源按需加載,靜態(tài)資源延遲加載目木。

請求帶寬:壓縮文件换途,開啟GZIP,

代碼層面的優(yōu)化

用hash-table來優(yōu)化查找

少用全局變量

用innerHTML代替DOM操作刽射,減少DOM操作次數(shù)军拟,優(yōu)化javascript性能

用setTimeout來避免頁面失去響應(yīng)

緩存DOM節(jié)點查找的結(jié)果

避免使用CSS Expression

避免全局查詢

避免使用with(with會創(chuàng)建自己的作用域,會增加作用域鏈長度)

多個變量聲明合并

避免圖片和iFrame等的空Src誓禁⌒赶ⅲ空Src會重新加載當前頁面,影響速度和效率

盡量避免寫在HTML標簽中寫Style屬性

移動端性能優(yōu)化

盡量使用css3動畫现横,開啟硬件加速漓拾。

適當使用touch事件代替click事件阁最。

避免使用css3漸變陰影效果戒祠。

可以用transform: translateZ(0)來開啟硬件加速。

不濫用Float速种。Float在渲染時計算量比較大姜盈,盡量減少使用

不濫用Web字體。Web字體需要下載配阵,解析馏颂,重繪當前頁面示血,盡量減少使用。

合理使用requestAnimationFrame動畫代替setTimeout

CSS中的屬性(CSS3 transitions救拉、CSS3 3D transforms难审、Opacity、Canvas亿絮、WebGL告喊、Video)會觸發(fā)GPU渲染,請合理使用派昧。過渡使用會引發(fā)手機過耗電增加

PC端的在移動端同樣適用

相關(guān)閱讀:如何做到一秒渲染一個移動頁面

什么是Etag黔姜?

當發(fā)送一個服務(wù)器請求時,瀏覽器首先會進行緩存過期判斷蒂萎。瀏覽器根據(jù)緩存過期時間判斷緩存文件是否過期秆吵。

情景一:若沒有過期,則不向服務(wù)器發(fā)送請求五慈,直接使用緩存中的結(jié)果纳寂,此時我們在瀏覽器控制臺中可以看到 200 OK(from cache) ,此時的情況就是完全使用緩存泻拦,瀏覽器和服務(wù)器沒有任何交互的烈疚。

情景二:若已過期,則向服務(wù)器發(fā)送請求聪轿,此時請求中會帶上①中設(shè)置的文件修改時間爷肝,和Etag

然后,進行資源更新判斷陆错。服務(wù)器根據(jù)瀏覽器傳過來的文件修改時間灯抛,判斷自瀏覽器上一次請求之后,文件是不是沒有被修改過音瓷;根據(jù)Etag对嚼,判斷文件內(nèi)容自上一次請求之后,有沒有發(fā)生變化

情形一:若兩種判斷的結(jié)論都是文件沒有被修改過绳慎,則服務(wù)器就不給瀏覽器發(fā)index.html的內(nèi)容了纵竖,直接告訴它,文件沒有被修改過杏愤,你用你那邊的緩存吧—— 304 Not Modified靡砌,此時瀏覽器就會從本地緩存中獲取index.html的內(nèi)容。此時的情況叫協(xié)議緩存珊楼,瀏覽器和服務(wù)器之間有一次請求交互通殃。

情形二:若修改時間和文件內(nèi)容判斷有任意一個沒有通過,則服務(wù)器會受理此次請求厕宗,之后的操作同①

① 只有g(shù)et請求會被緩存画舌,post請求不會

Expires和Cache-Control

Expires要求客戶端和服務(wù)端的時鐘嚴格同步堕担。HTTP1.1引入Cache-Control來克服Expires頭的限制。如果max-age和Expires同時出現(xiàn)曲聂,則max-age有更高的優(yōu)先級霹购。

Cache-Control:no-cache, private, max-age=0

ETag: abcde

Expires: Thu, 15 Apr 201420:00:00 GMT

Pragma: private

Last-Modified:$now //RFC1123 format

ETag應(yīng)用:

Etag由服務(wù)器端生成,客戶端通過If-Match或者說If-None-Match這個條件判斷請求來驗證資源是否修改朋腋。常見的是使用If-None-Match厕鹃。請求一個文件的流程可能如下:

====第一次請求===

1.客戶端發(fā)起 HTTP GET 請求一個文件;

2.服務(wù)器處理請求乍丈,返回文件內(nèi)容和一堆Header剂碴,當然包括Etag(例如"2e681a-6-5d044840")(假設(shè)服務(wù)器支持Etag生成和已經(jīng)開啟了Etag).狀態(tài)碼200

====第二次請求===

客戶端發(fā)起 HTTP GET 請求一個文件,注意這個時候客戶端同時發(fā)送一個If-None-Match頭轻专,這個頭的內(nèi)容就是第一次請求時服務(wù)器返回的Etag:2e681a-6-5d0448402.服務(wù)器判斷發(fā)送過來的Etag和計算出來的Etag匹配忆矛,因此If-None-Match為False,不返回200请垛,返回304催训,客戶端繼續(xù)使用本地緩存;流程很簡單宗收,問題是漫拭,如果服務(wù)器又設(shè)置了Cache-Control:max-age和Expires呢,怎么辦

答案是同時使用混稽,也就是說在完全匹配If-Modified-Since和If-None-Match即檢查完修改時間和Etag之后采驻,

服務(wù)器才能返回304.(不要陷入到底使用誰的問題怪圈)

為什么使用Etag請求頭?

Etag 主要為了解決 Last-Modified 無法解決的一些問題瘪撇。

棧和隊列的區(qū)別?

棧的插入和刪除操作都是在一端進行的患朱,而隊列的操作卻是在兩端進行的敲茄。

隊列先進先出帖族,棧先進后出。

棧只允許在表尾一端進行插入和刪除团秽,而隊列只允許在表尾一端進行插入偷霉,在表頭一端進行刪除

棧和堆的區(qū)別虏辫?

棧區(qū)(stack)— 由編譯器自動分配釋放 饿自,存放函數(shù)的參數(shù)值汰翠,局部變量的值等。

堆區(qū)(heap) — 一般由程序員分配釋放昭雌, 若程序員不釋放复唤,程序結(jié)束時可能由OS回收。

堆(數(shù)據(jù)結(jié)構(gòu)):堆可以被看成是一棵樹城豁,如:堆排序苟穆;

棧(數(shù)據(jù)結(jié)構(gòu)):一種先進后出的數(shù)據(jù)結(jié)構(gòu)抄课。

快速 排序的思想并實現(xiàn)一個快排唱星?

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

(1)在數(shù)據(jù)集之中,找一個基準點

(2)建立兩個數(shù)組间聊,分別存儲左邊和右邊的數(shù)組

(3)利用遞歸進行下次比較

<script type="text/javascript">

      functionquickSort(arr){

          if(arr.length<=1){

              return arr;//如果數(shù)組只有一個數(shù)攒盈,就直接返回;

          }

          var num = Math.floor(arr.length/2);//找到中間數(shù)的索引值哎榴,如果是浮點數(shù)型豁,則向下取整

          var numValue =arr.splice(num,1);//找到中間數(shù)的值

          var left = [];

          var right = [];

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

              if(arr[i]<numValue){

                 left.push(arr[i]);//基準點的左邊的數(shù)傳到左邊數(shù)組

              }

              else{

                right.push(arr[i]);//基準點的右邊的數(shù)傳到右邊數(shù)組

              }

          }

          returnquickSort(left).concat([numValue],quickSort(right));//遞歸不斷重復(fù)比較

      }

      alert(quickSort([32,45,37,16,2,87]));//彈出“2,16,32,37,45,87”

  </script>

你覺得jQuery或zepto源碼有哪些寫的好的地方

(答案僅供參考)

jQuery源碼封裝在一個匿名函數(shù)的自執(zhí)行環(huán)境中,有助于防止變量的全局污染尚蝌,然后通過傳入window對象參數(shù)迎变,可以使window對象作為局部變量使用,好處是當jquery中訪問window對象的時候飘言,就不用將作用域鏈退回到頂層作用域了衣形,從而可以更快的訪問window對象。同樣姿鸿,傳入undefined參數(shù)谆吴,可以縮短查找undefined時的作用域鏈。

(function( window, undefined ) {

     //用一個函數(shù)域包起來苛预,就是所謂的沙箱

     //在這里邊var定義的變量句狼,屬于這個函數(shù)域內(nèi)的局部變量,避免污染全局

     //把當前沙箱需要的外部變量通過函數(shù)參數(shù)引入進來

     //只要保證參數(shù)對內(nèi)提供的接口的一致性热某,你還可以隨意替換傳進來的這個參數(shù)

   window.jQuery = window.$ = jQuery;

})( window );

jquery將一些原型屬性和方法封裝在了jquery.prototype中腻菇,為了縮短名稱,又賦值給了jquery.fn昔馋,這是很形象的寫法芜繁。

有一些數(shù)組或?qū)ο蟮姆椒ń?jīng)常能使用到,jQuery將其保存為局部變量以提高訪問速度绒极。

jquery實現(xiàn)的鏈式調(diào)用可以節(jié)約代碼骏令,所返回的都是同一個對象,可以提高代碼效率垄提。

ES6的了解

新增模板字符串(為JavaScript提供了簡單的字符串插值功能)榔袋、箭頭函數(shù)(操作符左邊為輸入的參數(shù),而右邊則是進行的操作以及返回的值Inputs=>outputs铡俐。)凰兑、for-of(用來遍歷數(shù)據(jù)—例如數(shù)組中的值。)arguments對象可被不定參數(shù)和默認參數(shù)完美代替审丘。ES6將promise對象納入規(guī)范吏够,提供了原生的Promise對象。增加了let和const命令,用來聲明變量锅知。增加了塊級作用域播急。let命令實際上就增加了塊級作用域。ES6規(guī)定售睹,var命令和function命令聲明的全局變量桩警,屬于全局對象的屬性;let命令昌妹、const命令捶枢、class命令聲明的全局變量,不屬于全局對象的屬性飞崖。烂叔。還有就是引入module模塊的概念

js繼承方式及其優(yōu)缺點

原型鏈繼承的缺點

一是字面量重寫原型會中斷關(guān)系,使用引用類型的原型固歪,并且子類型還無法給超類型傳遞參數(shù)长已。

借用構(gòu)造函數(shù)(類式繼承)

借用構(gòu)造函數(shù)雖然解決了剛才兩種問題,但沒有原型昼牛,則復(fù)用無從談起术瓮。所以我們需要原型鏈+借用構(gòu)造函數(shù)的模式,這種模式稱為組合繼承

組合式繼承

組合式繼承是比較常用的一種繼承方法贰健,其背后的思路是 使用原型鏈實現(xiàn)對原型屬性和方法的繼承胞四,而通過借用構(gòu)造函數(shù)來實現(xiàn)對實例屬性的繼承。這樣伶椿,既通過在原型上定義方法實現(xiàn)了函數(shù)復(fù)用辜伟,又保證每個實例都有它自己的屬性。

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

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

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

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

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

defer和async

defer并行加載js文件谓谦,會按照頁面上script標簽的順序執(zhí)行
async并行加載js文件贫橙,下載完成立即執(zhí)行,不會按照頁面上script標簽的順序執(zhí)行

談?wù)劯雍颓宄?/p>

浮動的框可以向左或向右移動反粥,直到他的外邊緣碰到包含框或另一個浮動框的邊框為止卢肃。由于浮動框不在文檔的普通流中疲迂,所以文檔的普通流的塊框表現(xiàn)得就像浮動框不存在一樣。浮動的塊框會漂浮在文檔普通流的塊框上莫湘。

如何評價AngularJS和BackboneJS

backbone具有依賴性尤蒿,依賴underscore.js。Backbone + Underscore + jQuery(or Zepto) 就比一個AngularJS 多出了2 次HTTP請求.

Backbone的Model沒有與UI視圖數(shù)據(jù)綁定逊脯,而是需要在View中自行操作DOM來更新或讀取UI數(shù)據(jù)优质。AngularJS與此相反竣贪,Model直接與UI視圖綁定军洼,Model與UI視圖的關(guān)系,通過directive封裝演怎,AngularJS內(nèi)置的通用directive匕争,就能實現(xiàn)大部分操作了,也就是說爷耀,基本不必關(guān)心Model與UI視圖的關(guān)系甘桑,直接操作Model就行了,UI視圖自動更新歹叮。

AngularJS的directive跑杭,你輸入特定數(shù)據(jù),他就能輸出相應(yīng)UI視圖咆耿。是一個比較完善的前端MVW框架德谅,包含模板,數(shù)據(jù)雙向綁定萨螺,路由窄做,模塊化,服務(wù)慰技,依賴注入等所有功能椭盏,模板功能強大豐富,并且是聲明式的吻商,自帶了豐富的 Angular 指令掏颊。

用過哪些設(shè)計模式?

工廠模式:

主要好處就是可以消除對象間的耦合艾帐,通過使用工程方法而不是new關(guān)鍵字蚯舱。將所有實例化的代碼集中在一個位置防止代碼重復(fù)。

工廠模式解決了重復(fù)實例化的問題 掩蛤,但還有一個問題,那就是識別問題枉昏,因為根本無法搞清楚他們到底是哪個對象的實例。
function createObject(name,age,profession){//集中實例化的函數(shù)var obj = newObject();

    obj.name =name;

    obj.age = age;

    obj.profession= profession;

    obj.move =function () {

        returnthis.name + ' at ' + this.age + ' engaged in ' + this.profession;

    };

    return obj;

}


var test1 = createObject('trigkit4',22,'programmer');//第一個實例var test2 =createObject('mike',25,'engineer');//第二個實例

構(gòu)造函數(shù)模式

使用構(gòu)造函數(shù)的方法 揍鸟,即解決了重復(fù)實例化的問題 兄裂,又解決了對象識別的問題句旱,該模式與工廠模式的不同之處在于:

1.構(gòu)造函數(shù)方法沒有顯示的創(chuàng)建對象 (new Object());

2.直接將屬性和方法賦值給 this 對象;

3.沒有 renturn 語句。

說說你對閉包的理解

使用閉包主要是為了設(shè)計私有的方法和變量晰奖。閉包的優(yōu)點是可以避免全局變量的污染谈撒,缺點是閉包會常駐內(nèi)存,會增大內(nèi)存使用量匾南,使用不當很容易造成內(nèi)存泄露啃匿。在js中,函數(shù)即閉包蛆楞,只有函數(shù)才會產(chǎn)生作用域的概念

閉包有三個特性:

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

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

3.參數(shù)和變量不會被垃圾回收機制回收

請你談?wù)凜ookie的弊端

cookie雖然在持久保存客戶端數(shù)據(jù)提供了方便溯乒,分擔了服務(wù)器存儲的負擔,但還是有很多局限性的豹爹。

第一:每個特定的域名下最多生成20個cookie

1.IE6或更低版本最多20個cookie

2.IE7和之后的版本最后可以有50個cookie裆悄。

3.Firefox最多50個cookie

4.chrome和Safari沒有做硬性限制

IE和Opera 會清理近期最少使用的cookie,F(xiàn)irefox會隨機清理cookie臂聋。

cookie的最大大約為4096字節(jié)光稼,為了兼容性,一般不能超過4095字節(jié)孩等。

IE 提供了一種存儲可以持久化用戶數(shù)據(jù)艾君,叫做userdata,從IE5.0就開始支持肄方。每個數(shù)據(jù)最多128K冰垄,每個域名下最多1M。這個持久化數(shù)據(jù)放在緩存中扒秸,如果緩存沒有清理播演,那么會一直存在。

優(yōu)點:極高的擴展性和可用性

1.通過良好的編程伴奥,控制保存在cookie中的session對象的大小写烤。

2.通過加密和安全傳輸技術(shù)(SSL),減少cookie被破解的可能性拾徙。

3.只在cookie中存放不敏感數(shù)據(jù)洲炊,即使被盜也不會有重大損失。

4.控制cookie的生命期尼啡,使之不會永遠有效暂衡。偷盜者很可能拿到一個過期的cookie。

缺點:

1.Cookie數(shù)量和長度的限制崖瞭。每個domain最多只能有20條cookie狂巢,每個cookie長度不能超過4KB,否則會被截掉.

2.安全性問題书聚。如果cookie被人攔截了唧领,那人就可以取得所有的session信息藻雌。即使加密也與事無補,因為攔截者并不需要知道cookie的意義斩个,他只要原樣轉(zhuǎn)發(fā)cookie就可以達到目的了胯杭。

3.有些狀態(tài)不可能保存在客戶端。例如受啥,為了防止重復(fù)提交表單做个,我們需要在服務(wù)器端保存一個計數(shù)器。如果我們把這個計數(shù)器保存在客戶端滚局,那么它起不到任何作用居暖。

瀏覽器本地存儲

在較高版本的瀏覽器中,js提供了sessionStorage和globalStorage核畴。在HTML5中提供了localStorage來取代globalStorage膝但。

html5中的Web Storage包括了兩種存儲方式:sessionStorage和localStorage冲九。

sessionStorage用于本地存儲一個會話(session)中的數(shù)據(jù)谤草,這些數(shù)據(jù)只有在同一個會話中的頁面才能訪問并且當會話結(jié)束后數(shù)據(jù)也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲莺奸,僅僅是會話級別的存儲丑孩。

而localStorage用于持久化的本地存儲,除非主動刪除數(shù)據(jù)灭贷,否則數(shù)據(jù)是永遠不會過期的温学。

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ù)器進行交互俐末,作為HTTP規(guī)范的一部分而存在 ,而Web Storage僅僅是為了在本地“存儲”數(shù)據(jù)而生

瀏覽器的支持除了IE7及以下不支持外奄侠,其他標準瀏覽器都完全支持(ie及FF需在web服務(wù)器里運行)卓箫,值得一提的是IE總是辦好事,例如IE7垄潮、IE6中的userData其實就是javascript本地存儲的解決方案烹卒。通過簡單的代碼封裝可以統(tǒng)一到所有的瀏覽器都支持web storage恢准。

localStorage和sessionStorage都具有相同的操作方法,例如setItem甫题、getItem和removeItem等

cookie 和session 的區(qū)別:

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

2敏沉、cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙

考慮到安全應(yīng)當使用session炎码。

3盟迟、session會在一定時間內(nèi)保存在服務(wù)器上。當訪問增多潦闲,會比較占用你服務(wù)器的性能

 考慮到減輕服務(wù)器性能方面攒菠,應(yīng)當使用COOKIE。

4歉闰、單個cookie保存的數(shù)據(jù)不能超過4K辖众,很多瀏覽器都限制一個站點最多保存20個cookie。

5和敬、所以個人建議:

將登陸信息等重要信息存放為SESSION

其他信息如果需要保留凹炸,可以放在COOKIE中

display:none和visibility:hidden的區(qū)別?

display:none 隱藏對應(yīng)的元素昼弟,在文檔布局中不再給它分配空間啤它,它各邊的元素會合攏,就當他從來不存在舱痘。

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

CSS中l(wèi)ink 和@import的區(qū)別是芭逝?

(1) link屬于HTML標簽塌碌,而@import是CSS提供的;

(2) 頁面被加載的時,link會同時被加載铝耻,而@import被引用的CSS會等到引用它的CSS文件被加載完再加載;

(3) import只在IE5以上才能識別誊爹,而link是HTML標簽,無兼容問題;

(4) link方式的樣式的權(quán)重 高于@import的權(quán)重.

position:absolute和float屬性的異同

§ 共同點:對內(nèi)聯(lián)元素設(shè)置float和absolute屬性瓢捉,可以讓元素脫離文檔流频丘,并且可以設(shè)置其寬高。

§ 不同點:float仍會占據(jù)位置泡态,absolute會覆蓋文檔流中的其他元素搂漠。

介紹一下box-sizing屬性?

box-sizing屬性主要用來控制元素的盒模型的解析模式某弦。默認值是content-box桐汤。

§ content-box:讓元素維持W3C的標準盒模型而克。元素的寬度/高度由border + padding + content的寬度/高度決定,設(shè)置width/height屬性指的是content部分的寬/高

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

標準瀏覽器下员萍,按照W3C規(guī)范對盒模型解析,一旦修改了元素的邊框或內(nèi)距拣度,就會影響元素的盒子尺寸碎绎,就不得不重新計算元素的盒子尺寸,從而影響整個頁面的布局抗果。

CSS 選擇符有哪些筋帖?哪些屬性可以繼承?優(yōu)先級算法如何計算冤馏? CSS3新增偽類有那些日麸?

1.id選擇器( # myid)

2.類選擇器(.myclassname)

3.標簽選擇器(div, h1, p)

4.相鄰選擇器(h1 + p)

5.子選擇器(ul > li)

6.后代選擇器(lia)

7.通配符選擇器( * )

8.屬性選擇器(a[rel = "external"])

9.偽類選擇器(a: hover, li:nth-child)

優(yōu)先級為:

!important > id > class > tag

important 比 內(nèi)聯(lián)優(yōu)先級高,但內(nèi)聯(lián)比 id 要高

CSS3新增偽類舉例:

p:first-of-type選擇屬于其父元素的首個 <p> 元素的每個 <p> 元素。

p:last-of-type  選擇屬于其父元素的最后 <p> 元素的每個 <p> 元素逮光。

p:only-of-type  選擇屬于其父元素唯一的 <p> 元素的每個 <p> 元素代箭。

p:only-child    選擇屬于其父元素的唯一子元素的每個 <p> 元素。

p:nth-child(2)  選擇屬于其父元素的第二個子元素的每個 <p> 元素睦霎。

:enabled  :disabled控制表單控件的禁用狀態(tài)梢卸。

:checked        單選框或復(fù)選框被選中走诞。

CSS3有哪些新特性副女?

CSS3實現(xiàn)圓角(border-radius),陰影(box-shadow)蚣旱,

對文字加特效(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

CSS3中新增了一種盒模型計算方式:box-sizing。盒模型默認的值是content-box, 新增的值是padding-box和border-box异吻,幾種盒模型計算元素寬高的區(qū)別如下:

content-box(默認)

布局所占寬度Width:

Width = width + padding-left + padding-right + border-left + border-right

布局所占高度Height:

Height = height + padding-top + padding-bottom + border-top + border-bottom

padding-box

布局所占寬度Width:

Width = width(包含padding-left + padding-right) + border-top + border-bottom

布局所占高度Height:

Height = height(包含padding-top + padding-bottom) + border-top + border-bottom

border-box

布局所占寬度Width:

Width = width(包含padding-left + padding-right + border-left + border-right)

布局所占高度Height:

Height = height(包含padding-top + padding-bottom + border-top + border-bottom)

對BFC規(guī)范的理解裹赴?

  BFC,塊級格式化上下文诀浪,一個創(chuàng)建了新的BFC的盒子是獨立布局的棋返,盒子里面的子元素的樣式不會影響到外面的元素。在同一個BFC中的兩個毗鄰的塊級盒在垂直方向(和布局方向有關(guān)系)的margin會發(fā)生折疊雷猪。

(W3C CSS 2.1 規(guī)范中的一個概念睛竣,它決定了元素如何對其內(nèi)容進行布局,以及與其他元素的關(guān)系和相互作用求摇。

說說你對語義化的理解射沟?

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

2,有利于SEO:和搜索引擎建立良好溝通验夯,有助于爬蟲抓取更多的有效信息:爬蟲依賴于標簽來確定上下文和各個關(guān)鍵字的權(quán)重猖吴;

3,方便其他設(shè)備解析(如屏幕閱讀器挥转、盲人閱讀器距误、移動設(shè)備)以意義的方式來渲染網(wǎng)頁;

4扁位,便于團隊開發(fā)和維護准潭,語義化更具可讀性,是下一步吧網(wǎng)頁的重要動向域仇,遵循W3C標準的團隊都遵循這個標準刑然,可以減少差異化。

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

1)泼掠、<!DOCTYPE> 聲明位于文檔中的最前面,處于 <html> 標簽之前垦细。告知瀏覽器以何種模式來渲染文檔择镇。

2)、嚴格模式的排版和 JS 運作模式是 以該瀏覽器支持的最高標準運行括改。

3)腻豌、在混雜模式中,頁面以寬松的向后兼容的方式顯示嘱能。模擬老式瀏覽器的行為以防止站點無法工作吝梅。

4)、DOCTYPE不存在或格式不正確會導(dǎo)致文檔以混雜模式呈現(xiàn)惹骂。

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

該標簽可聲明三種 DTD 類型,分別表示嚴格版本对粪、過渡版本以及基于框架的 HTML 文檔右冻。

HTML 4.01 規(guī)定了三種文檔類型:Strict、Transitional 以及 Frameset著拭。

XHTML 1.0 規(guī)定了三種 XML 文檔類型:Strict纱扭、Transitional 以及 Frameset。

Standards (標準)模式(也就是嚴格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標準的網(wǎng)頁茫死,而 Quirks

(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計的網(wǎng)頁跪但。

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

區(qū)別:

1.所有的標記都必須要有一個相應(yīng)的結(jié)束標記

2.所有標簽的元素和屬性的名字都必須使用小寫

3.所有的XML標記都必須合理嵌套

4.所有的屬性必須用引號""括起來

5.把所有<和&特殊符號用編碼表示

6.給所有屬性賦一個值

7.不要在注釋內(nèi)容中使“--”

8.圖片必須有說明文字

常見兼容性問題?

png24位的圖片在iE6瀏覽器上出現(xiàn)背景,解決方案是做成PNG8.也可以引用一段腳本處理.

瀏覽器默認的margin和padding不同屡久。解決方案是加一個全局的*{margin:0;padding:0;}來統(tǒng)一忆首。

IE6雙邊距bug:塊屬性標簽float后,又有橫行的margin情況下被环,在ie6顯示margin比設(shè)置的大糙及。

浮動ie產(chǎn)生的雙倍距離(IE6雙邊距問題:在IE6下铭段,如果對元素設(shè)置了浮動闲礼,同時又設(shè)置了margin-left或margin-right,margin值會加倍璧亚。)

box{ float:left; width:10px; margin:0 0 0 100px;}

這種情況之下IE會產(chǎn)生20px的距離版姑,解決方案是在float的標簽樣式控制中加入

display:inline;將其轉(zhuǎn)化為行內(nèi)屬性柱搜。(這個符號只有ie6會識別)

漸進識別的方式,從總體中逐漸排除局部剥险。

首先聪蘸,巧妙的使用“\9”這一標記,將IE游覽器從所有情況中分離出來表制。

接著健爬,再次使用“+”將IE8和IE7、IE6分離開來么介,這樣IE8已經(jīng)獨立識別娜遵。

css

  .bb{

   /*所有識別*/

 . /*IE6、7壤短、8識別*/

 +/*IE6设拟、7識別*/

 _/*IE6識別*/

  }

怪異模式問題:漏寫DTD聲明,F(xiàn)irefox仍然會按照標準模式來解析網(wǎng)頁鸽扁,但在IE中會觸發(fā)

怪異模式蒜绽。為避免怪異模式給我們帶來不必要的麻煩,最好養(yǎng)成書寫DTD聲明的好習慣⊥跋郑現(xiàn)在

可以使用html5推薦的寫法:<doctype html>

上下margin重合問題

ie和ff都存在,相鄰的兩個div的margin-left和margin-right不會重合鼎姊,但是margin-top和margin-bottom卻會發(fā)生重合骡和。

解決方法,養(yǎng)成良好的代碼編寫習慣相寇,同時采用margin-top或者同時采用margin-bottom慰于。

解釋下浮動和它的工作原理?清除浮動的技巧

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

1.使用空標簽清除浮動佳励。

這種方法是在所有浮動標簽后面添加一個空標簽 定義cssclear:both. 弊端就是增加了無意義標簽休里。

2.使用overflow蛆挫。

給包含浮動元素的父標簽添加css屬性 overflow:auto; zoom:1; zoom:1用于兼容IE6。

3.使用after偽對象清除浮動妙黍。

該方法只適用于非IE瀏覽器悴侵。具體寫法可參照以下示例。使用中需注意以下幾點拭嫁。一可免、該方法中必須為需要清除浮動元素的偽對象中設(shè)置 height:0,否則該元素會比實際高出若干像素做粤;

浮動元素引起的問題和解決辦法浇借?

浮動元素引起的問題:

(1)父元素的高度無法被撐開,影響與父元素同級的元素

(2)與浮動元素同級的非浮動元素(內(nèi)聯(lián)元素)會跟隨其后

(3)若非第一個元素浮動怕品,則該元素之前的元素也需要浮動逮刨,否則會影響頁面顯示的結(jié)構(gòu)

解決方法:

使用CSS中的clear:both;屬性來清除元素的浮動可解決2、3問題堵泽,對于問題1修己,添加如下樣式,給父元素添加clearfix樣式:

.clearfix:after{content:".";display: block;height:0;clear: both;visibility: hidden;}

.clearfix{display: inline-block;} /* for IE/Mac */

清除浮動的幾種方法:

1迎罗,額外標簽法睬愤,<divstyle="clear:both;"></div>(缺點:不過這個辦法會增加額外的標簽使HTML結(jié)構(gòu)看起來不夠簡潔。)

2纹安,使用after偽類

    #parent:after{

        content:".";

        height:0;

        visibility:hidden;

        display:block;

        clear:both;

        }
3,浮動外部元素

4,設(shè)置overflow為hidden或者auto

DOM操作——怎樣添加尤辱、移除、移動厢岂、復(fù)制光督、創(chuàng)建和查找節(jié)點。

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

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

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

 createTextNode()   //創(chuàng)建一個文本節(jié)點

2)添加塔粒、移除结借、替換、插入

  appendChild()

  removeChild()

 replaceChild()

 insertBefore() //并沒有insertAfter()

3)查找

 getElementsByTagName()    //通過標簽名稱

 getElementsByName()    //通過元素的Name屬性的值(IE容錯能力較強卒茬,

  會得到一個數(shù)組船老,其中包括id等于name值的)

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

html5有哪些新特性圃酵、移除了那些元素柳畔?如何處理HTML5新標簽的瀏覽器兼容問題?如何區(qū)分 HTML 和 HTML5郭赐?

HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集薪韩,主要是關(guān)于圖像,位置,存儲俘陷,多任務(wù)等功能的增加罗捎。

拖拽釋放(Drag and drop) API

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

音頻、視頻API(audio,video)

畫布(Canvas) API

地理(Geolocation) API

本地離線存儲 localStorage 長期存儲數(shù)據(jù)岭洲,瀏覽器關(guān)閉后數(shù)據(jù)不丟失宛逗;

sessionStorage 的數(shù)據(jù)在瀏覽器關(guān)閉后自動刪除

表單控件,calendar盾剩、date雷激、time、email告私、url屎暇、search

新的技術(shù)webworker, websocket,Geolocation

移除的元素

純表現(xiàn)的元素:basefont,big驻粟,center根悼,font, s,strike蜀撑,tt挤巡,u;

對可用性產(chǎn)生負面影響的元素:frame酷麦,frameset矿卑,noframes;

支持HTML5新標簽:

IE8/IE7/IE6支持通過document.createElement方法產(chǎn)生的標簽沃饶,

可以利用這一特性讓這些瀏覽器支持HTML5新標簽母廷,

當然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

   <!--[if lt IE 9]>

  <script>src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>

  <![endif]-->

如何區(qū)分: DOCTYPE聲明\新增的結(jié)構(gòu)元素\功能元素

如何實現(xiàn)瀏覽器內(nèi)多個標簽頁之間的通信?

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

什么是 FOUC(無樣式內(nèi)容閃爍)琴昆?你如何來避免 FOUC?

 FOUC - FlashOf Unstyled Content 文檔樣式閃爍

 <styletype="text/css"media="all">@import"../fouc.css";</style>

而引用CSS文件的@import就是造成這個問題的罪魁禍首馆揉。IE會先加載整個HTML文檔的DOM业舍,然后再去導(dǎo)入外部的CSS文件,因此把介,在頁面DOM加載完成到CSS導(dǎo)入完成中間會有一段時間頁面上的內(nèi)容是沒有樣式的勤讽,這段時間的長短跟網(wǎng)速,電腦速度都有關(guān)系拗踢。

 解決方法簡單的出奇,只要在<head>之間加入一個<link>或者<script>元素就可以了向臀。

null和undefined的區(qū)別巢墅?

null是一個表示”無”的對象,轉(zhuǎn)為數(shù)值時為0;undefined是一個表示”無”的原始值君纫,轉(zhuǎn)為數(shù)值時為NaN驯遇。

當聲明的變量還未被初始化時,變量的默認值為undefined蓄髓。

null用來表示尚未存在的對象叉庐,常用來表示函數(shù)企圖返回一個不存在的對象。

undefined表示”缺少值”会喝,就是此處應(yīng)該有一個值陡叠,但是還沒有定義。典型用法是:

(1)變量被聲明了肢执,但沒有賦值時枉阵,就等于undefined。

(2) 調(diào)用函數(shù)時预茄,應(yīng)該提供的參數(shù)沒有提供兴溜,該參數(shù)等于undefined。

(3)對象沒有賦值的屬性耻陕,該屬性的值為undefined拙徽。

(4)函數(shù)沒有返回值時,默認返回undefined诗宣。

null表示”沒有對象”膘怕,即該處不應(yīng)該有值。典型用法是:

(1) 作為函數(shù)的參數(shù)梧田,表示該函數(shù)的參數(shù)不是對象淳蔼。

(2) 作為對象原型鏈的終點。

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

1裁眯、創(chuàng)建一個空對象鹉梨,并且 this 變量引用該對象,同時還繼承了該函數(shù)的原型穿稳。

2存皂、屬性和方法被加入到 this 引用的對象中。

3逢艘、新創(chuàng)建的對象由 this 所引用旦袋,并且最后隱式的返回 this 。

var obj = {};

obj.proto = Base.prototype;

Base.call(obj);

js延遲加載的方式有哪些它改?

defer和async疤孕、動態(tài)創(chuàng)建DOM方式(創(chuàng)建script,插入到DOM中央拖,加載完畢后callBack)祭阀、按需異步載入js

call() 和 apply() 的區(qū)別和作用鹉戚?

改變this指向,區(qū)別就是傳參列表不同专控。

哪些操作會造成內(nèi)存泄漏抹凳?

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

垃圾回收器定期掃描對象伦腐,并計算引用了每個對象的其他對象的數(shù)量赢底。如果一個對象的引用數(shù)量為 0(沒有其他對象引用過該對象),或?qū)υ搶ο蟮奈┮灰檬茄h(huán)的柏蘑,那么該對象的內(nèi)存即可回收幸冻。

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

閉包嘁扼、控制臺日志、循環(huán)(在兩個對象彼此引用且彼此保留時黔攒,就會產(chǎn)生一個循環(huán))

詳見:[詳解js變量趁啸、作用域及內(nèi)存][4]

列舉IE 與其他瀏覽器不一樣的特性?

§ IE支持currentStyle督惰,F(xiàn)Irefox使用getComputStyle

§ IE 使用innerText不傅,F(xiàn)irefox使用textContent

§ 濾鏡方面:IE:filter:alpha(opacity= num);Firefox:-moz-opacity:num

§ 事件方面:IE:attachEvent:火狐是addEventListener

§ 鼠標位置:IE是event.clientX赏胚;火狐是event.pageX

§ IE使用event.srcElement访娶;Firefox使用event.target

§ IE中消除list的原點僅需margin:0即可達到最終效果;FIrefox需要設(shè)置margin:0;padding:0以及l(fā)ist-style:none

§ CSS圓角:ie7以下不支持圓角

WEB應(yīng)用從服務(wù)器主動推送Data到客戶端有那些方式觉阅?

Javascript數(shù)據(jù)推送

§ Commet:基于HTTP長連接的服務(wù)器推送技術(shù)

§ 基于WebSocket的推送方案

§ SSE(Server-Send Event):服務(wù)器推送數(shù)據(jù)新方式

對前端界面工程師這個職位是怎么樣理解的崖疤?它的前景會怎么樣?

前端是最貼近用戶的程序員典勇,比后端劫哼、數(shù)據(jù)庫、產(chǎn)品經(jīng)理割笙、運營权烧、安全都近。

1伤溉、實現(xiàn)界面交互

2般码、提升用戶體驗

3、有了Node.js乱顾,前端可以實現(xiàn)服務(wù)端的一些事情

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

參與項目扔字,快速高質(zhì)量完成實現(xiàn)效果圖囊嘉,精確到1px温技;

與團隊成員革为,UI設(shè)計,產(chǎn)品經(jīng)理的溝通舵鳞;

做好的頁面結(jié)構(gòu)震檩,頁面重構(gòu)和用戶體驗;

處理hack蜓堕,兼容抛虏、寫出優(yōu)美的代碼格式;

針對服務(wù)器的優(yōu)化套才、擁抱最新前端技術(shù)迂猴。

一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發(fā)生了什么背伴?

分為4個步驟:

(1)沸毁,當發(fā)送一個URL請求時,不管這個URL是Web頁面的URL還是Web頁面上每個資源的URL傻寂,瀏覽器都會開啟一個線程來處理這個請求息尺,同時在遠程DNS服務(wù)器上啟動一個DNS查詢。這能使瀏覽器獲得請求對應(yīng)的IP地址疾掰。

(2)搂誉, 瀏覽器與遠程`Web`服務(wù)器通過`TCP`三次握手協(xié)商來建立一個`TCP/IP`連接。該握手包括一個同步報文静檬,一個同步-應(yīng)答報文和一個應(yīng)答報文炭懊,這三個報文在瀏覽器和服務(wù)器之間傳遞。該握手首先由客戶端嘗試建立起通信拂檩,而后服務(wù)器應(yīng)答并接受客戶端的請求侮腹,最后由客戶端發(fā)出該請求已經(jīng)被接受的報文。

(3)广恢,一旦`TCP/IP`連接建立凯旋,瀏覽器會通過該連接向遠程服務(wù)器發(fā)送`HTTP`的`GET`請求。遠程服務(wù)器找到資源并使用HTTP響應(yīng)返回該資源钉迷,值為200的HTTP響應(yīng)狀態(tài)表示一個正確的響應(yīng)至非。

(4),此時糠聪,`Web`服務(wù)器提供資源服務(wù)荒椭,客戶端開始下載資源。

請求返回后舰蟆,便進入了我們關(guān)注的前端模塊

簡單來說趣惠,瀏覽器會解析HTML生成DOM Tree狸棍,其次會根據(jù)CSS生成CSS Rule Tree,而javascript又可以根據(jù)DOM API操作DOM

詳情:[從輸入 URL 到瀏覽器接收的過程中發(fā)生了什么事情味悄?][8]

javascript對象的幾種創(chuàng)建方式

1草戈,工廠模式

2,構(gòu)造函數(shù)模式

3侍瑟,原型模式

4唐片,混合構(gòu)造函數(shù)和原型模式

5,動態(tài)原型模式

6涨颜,寄生構(gòu)造函數(shù)模式

7费韭,穩(wěn)妥構(gòu)造函數(shù)模式

javascript繼承的6種方法

1,原型鏈繼承

2庭瑰,借用構(gòu)造函數(shù)繼承

3星持,組合繼承(原型+借用構(gòu)造)

4,原型式繼承

5弹灭,寄生式繼承

6督暂,寄生組合式繼承

詳情:[JavaScript繼承方式詳解][9]

創(chuàng)建ajax的過程

(1)創(chuàng)建`XMLHttpRequest`對象,也就是創(chuàng)建一個異步調(diào)用對象.

(2)創(chuàng)建一個新的`HTTP`請求,并指定該`HTTP`請求的方法、`URL`及驗證信息.

(3)設(shè)置響應(yīng)`HTTP`請求狀態(tài)變化的函數(shù).

(4)發(fā)送`HTTP`請求.

(5)獲取異步調(diào)用返回的數(shù)據(jù).

(6)使用JavaScript和DOM實現(xiàn)局部刷新.

  var xmlHttp = new XMLHttpRequest();

  xmlHttp.open('GET','demo.php','true');

  xmlHttp.send()

 xmlHttp.onreadystatechange = function(){

      if(xmlHttp.readyState === 4 & xmlHttp.status=== 200){

      }

  }

詳情:[JavaScript學習總結(jié)(七)Ajax和Http狀態(tài)字][10]

異步加載和延遲加載

1.異步加載的方案: 動態(tài)插入script標簽

2.通過ajax去獲取js代碼鲤屡,然后通過eval執(zhí)行

3.script標簽上添加defer或者async屬性

4.創(chuàng)建并插入iframe损痰,讓它異步執(zhí)行js

5.延遲加載:有些 js 代碼并不是頁面初始化的時候就立刻需要的,而稍后的某些情況才需要的酒来。

ie各版本和chrome可以并行下載多少個資源

IE6 兩個并發(fā)卢未,iE7升級之后的6個并發(fā),之后版本也是6個

Firefox堰汉,chrome也是6個

Flash辽社、Ajax各自的優(yōu)缺點,在使用中如何取舍翘鸭?

§ Flash適合處理多媒體滴铅、矢量圖形、訪問機器就乓;對CSS汉匙、處理文本上不足,不容易被搜索生蚁。

-Ajax對CSS噩翠、文本支持很好,支持搜索邦投;多媒體伤锚、矢量圖形、機器訪問不足志衣。

§ 共同點:與服務(wù)器的無刷新傳遞消息屯援、用戶離線和在線狀態(tài)猛们、操作DOM

請解釋一下 JavaScript 的同源策略。

概念:同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標準狞洋。它最早出自Netscape Navigator2.0弯淘,其目的是防止某個文檔或腳本從多個不同源裝載。

這里的同源策略指的是:協(xié)議徘铝,域名耳胎,端口相同,同源策略是一種安全協(xié)議惕它。

指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。

為什么要有同源限制废登?

我們舉例說明:比如一個黑客程序淹魄,他利用Iframe把真正的銀行登錄頁面嵌到他的頁面上,當你使用真實的用戶名堡距,密碼登錄時甲锡,他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容,這樣用戶名羽戒,密碼就輕松到手了缤沦。

缺點:

現(xiàn)在網(wǎng)站的JS 都會進行壓縮,一些文件用了嚴格模式易稠,而另一些沒有缸废。這時這些本來是嚴格模式的文件,被 merge 后驶社,這個串就到了文件的中間企量,不僅沒有指示嚴格模式,反而在壓縮后浪費了字節(jié)亡电。

GET和POST的區(qū)別届巩,何時使用POST?

GET:一般用于信息獲取份乒,使用URL傳遞參數(shù)恕汇,對所發(fā)送信息的數(shù)量也有限制,一般在2000個字符

POST:一般用于修改服務(wù)器上的資源或辖,對所發(fā)送的信息沒有限制瘾英。

GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值孝凌,

也就是說Get是通過地址欄來傳值方咆,而Post是通過提交表單來傳值。

然而蟀架,在以下情況中瓣赂,請使用 POST 請求:

無法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫)

向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒有數(shù)據(jù)量限制)

發(fā)送包含未知字符的用戶輸入時榆骚,POST 比 GET 更穩(wěn)定也更可靠

事件、IE與火狐的事件機制有什么區(qū)別煌集? 如何阻止冒泡妓肢?

  1. 我們在網(wǎng)頁中的某個操作(有的操作對應(yīng)多個事件)。例如:當我們點擊一個按鈕就會產(chǎn)生一個事件苫纤。是可以被 JavaScript 偵測到的行為碉钠。

  2. 事件處理機制:IE是事件冒泡、firefox同時支持兩種事件模型卷拘,也就是:捕獲型事件和冒泡型事件喊废。;

3.ev.stopPropagation();注意舊ie的方法ev.cancelBubble = true;

ajax的缺點和在IE下的問題栗弟?

詳情請見:[JavaScript學習總結(jié)(七)Ajax和Http狀態(tài)字][14]

ajax的缺點

1污筷、ajax不支持瀏覽器back按鈕。

2乍赫、安全問題 AJAX暴露了與服務(wù)器交互的細節(jié)瓣蛀。

3、對搜索引擎的支持比較弱雷厂。

4惋增、破壞了程序的異常機制。

5改鲫、不容易調(diào)試诈皿。

IE緩存問題

在IE瀏覽器下,如果請求的方法是GET钩杰,并且請求的URL不變纫塌,那么這個請求的結(jié)果就會被緩存。解決這個問題的辦法可以通過實時改變請求的URL讲弄,只要URL改變措左,就不會被緩存,可以通過在URL末尾添加上隨機的時間戳參數(shù)('t'= + newDate().getTime())

或者:

open('GET','demo.php?rand=+Math.random()',true);//

· 1

Ajax請求的頁面歷史記錄狀態(tài)問題

可以通過錨點來記錄狀態(tài)避除,location.hash怎披。讓瀏覽器記錄Ajax請求時頁面狀態(tài)的變化。

還可以通過HTML5的history.pushState瓶摆,來實現(xiàn)瀏覽器地址欄的無刷新改變

談?wù)勀銓χ貥?gòu)的理解

網(wǎng)站重構(gòu):在不改變外部行為的前提下凉逛,簡化結(jié)構(gòu)、添加可讀性群井,而在網(wǎng)站前端保持一致的行為状飞。也就是說是在不改變UI的情況下,對網(wǎng)站進行優(yōu)化,
在擴展的同時保持一致的UI诬辈。

對于傳統(tǒng)的網(wǎng)站來說重構(gòu)通常是:

表格(table)布局改為DIV+CSS

使網(wǎng)站前端兼容于現(xiàn)代瀏覽器(針對于不合規(guī)范的CSS酵使、如對IE6有效的)

對于移動平臺的優(yōu)化

針對于SEO進行優(yōu)化

深層次的網(wǎng)站重構(gòu)應(yīng)該考慮的方面

減少代碼間的耦合

讓代碼保持彈性

嚴格按規(guī)范編寫代碼

設(shè)計可擴展的API

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

增強用戶體驗

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

壓縮JS焙糟、CSS口渔、image等前端資源(通常是由服務(wù)器來解決)

程序的性能優(yōu)化(如數(shù)據(jù)讀寫)

采用CDN來加速資源加載

對于JS DOM的優(yōu)化

HTTP服務(wù)器的文件緩存

HTTP狀態(tài)碼

100  Continue 繼續(xù),一般在發(fā)送post請求時穿撮,已發(fā)送了http header之后服務(wù)端將返回此信息缺脉,表示確認,之后發(fā)送具體參數(shù)信息

200  OK   正常返回信息

201  Created 請求成功并且服務(wù)器創(chuàng)建了新的資源

202  Accepted 服務(wù)器已接受請求悦穿,但尚未處理

301  Moved Permanently  請求的網(wǎng)頁已永久移動到新位置攻礼。

302 Found  臨時性重定向。

303 SeeOther  臨時性重定向咧党,且總是使用 GET 請求新的 URI秘蛔。

304  Not Modified 自從上次請求后,請求的網(wǎng)頁未修改過傍衡。

400 BadRequest  服務(wù)器無法理解請求的格式,客戶端不應(yīng)當嘗試再次使用相同的內(nèi)容發(fā)起請求负蠕。

401 Unauthorized  請求未授權(quán)蛙埂。

403Forbidden  禁止訪問。

404 NotFound  找不到如何與 URI 相匹配的資源遮糖。

500 InternalServer Error  最常見的服務(wù)器端錯誤绣的。

503 ServiceUnavailable 服務(wù)器端暫時無法處理請求(可能是過載或維護)。

說說你對Promise的理解

依照 Promise/A+ 的定義欲账,Promise 有四種狀態(tài):

pending: 初始狀態(tài), 非fulfilled 或 rejected.

fulfilled: 成功的操作.

rejected: 失敗的操作.

settled: Promise已被fulfilled或rejected屡江,且不是pending

另外, fulfilled 與 rejected 一起合稱 settled赛不。

Promise 對象用來進行延遲(deferred) 和異步(asynchronous ) 計算惩嘉。

Promise 的構(gòu)造函數(shù)

構(gòu)造一個 Promise,最基本的用法如下:

    var promise = new Promise(function(resolve, reject) {

        if (...) {  // succeed

           resolve(result);

        } else {   // fails

            reject(Error(errMessage));

        }

    });

Promise 實例擁有 then 方法(具有 then 方法的對象踢故,通常被稱為 thenable)文黎。它的使用方法如下:

promise.then(onFulfilled, onRejected)

接收兩個函數(shù)作為參數(shù),一個在 fulfilled 的時候被調(diào)用殿较,一個在 rejected 的時候被調(diào)用,接收參數(shù)就是 future,onFulfilled對應(yīng) resolve, onRejected 對應(yīng) reject破婆。

說說你對前端架構(gòu)師的理解

負責前端團隊的管理及與其他團隊的協(xié)調(diào)工作掘鄙,提升團隊成員能力和整體效率;
帶領(lǐng)團隊完成研發(fā)工具及平臺前端部分的設(shè)計、研發(fā)和維護本涕;
帶領(lǐng)團隊進行前端領(lǐng)域前沿技術(shù)研究及新技術(shù)調(diào)研业汰,保證團隊的技術(shù)領(lǐng)先
負責前端開發(fā)規(guī)范制定、功能模塊化設(shè)計偏友、公共組件搭建等工作蔬胯,并組織培訓。

實現(xiàn)一個函數(shù)clone位他,可以對JavaScript中的5種主要的數(shù)據(jù)類型(包括Number氛濒、String、Object鹅髓、Array舞竿、Boolean)進行值復(fù)制

    Object.prototype.clone = function(){

            var o = this.constructor === Array ? [] : {};

            for(var e inthis){

                   o[e] = typeofthis[e] === "object" ? this[e].clone() : this[e];

            }

            return o;

    }

說說嚴格模式的限制

嚴格模式主要有以下限制:

變量必須聲明后再使用

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

不能使用with語句

不能對只讀屬性賦值窿冯,否則報錯

不能使用前綴0表示八進制數(shù)骗奖,否則報錯

不能刪除不可刪除的屬性,否則報錯

不能刪除變量delete prop醒串,會報錯执桌,只能刪除屬性delete global[prop]

eval不會在它的外層作用域引入變量

eval和arguments不能被重新賦值

arguments不會自動反映函數(shù)參數(shù)的變化

不能使用arguments.callee

不能使用arguments.caller

禁止this指向全局對象

不能使用fn.caller和fn.arguments獲取函數(shù)調(diào)用的堆棧

增加了保留字(比如protected、static和interface)

設(shè)立”嚴格模式”的目的芜赌,主要有以下幾個:

§ 消除Javascript語法的一些不合理仰挣、不嚴謹之處,減少一些怪異行為;

§ 消除代碼運行的一些不安全之處缠沈,保證代碼運行的安全膘壶;

§ 提高編譯器效率,增加運行速度洲愤;

§ 為未來新版本的Javascript做好鋪墊颓芭。

注:經(jīng)過測試IE6,7,8,9均不支持嚴格模式。

如何刪除一個cookie

1.將時間設(shè)為當前時間往前一點柬赐。

var date = newDate();

date.setDate(date.getDate() - 1);//真正的刪除

setDate()方法用于設(shè)置一個月的某一天亡问。

2.expires的設(shè)置

document.cookie= 'user='+ encodeURIComponent('name')  + ';expires = ' + newDate(0)

<strong>,<em>和<b>躺率,<i>標簽

<strong>標簽和 <em>標簽一樣玛界,用于強調(diào)文本,但它強調(diào)的程度更強一些悼吱。

em 是 斜體強調(diào)標簽慎框,更強烈強調(diào),表示內(nèi)容的強調(diào)點后添。相當于html元素中的<i>...</i>;

< b >< i >是視覺要素笨枯,分別表示無意義的加粗,無意義的斜體。

em 和 strong 是表達要素(phraseelements)馅精。

說說你對AMD和Commonjs的理解

CommonJS是服務(wù)器端模塊的規(guī)范严嗜,Node.js采用了這個規(guī)范。CommonJS規(guī)范加載模塊是同步的洲敢,也就是說漫玄,只有加載完成,才能執(zhí)行后面的操作压彭。AMD規(guī)范則是非同步加載模塊睦优,允許指定回調(diào)函數(shù)。

AMD推薦的風格通過返回一個對象做為模塊對象壮不,CommonJS的風格通過對module.exports或exports的屬性賦值來達到暴露模塊對象的目的汗盘。

document.write()的用法

document.write()方法可以用在兩個方面:頁面載入過程中用實時腳本創(chuàng)建頁面內(nèi)容,以及用延時腳本創(chuàng)建本窗口或新窗口的內(nèi)容询一。

document.write只能重繪整個頁面隐孽。innerHTML可以重繪頁面的一部分

編寫一個方法求一個字符串的字節(jié)長度

假設(shè):一個英文字符占用一個字節(jié),一個中文字符占用兩個字節(jié)

 functionGetBytes(str){
        var len = str.length;
        var bytes = len;
        for(var i=0; i<len; i++){
            if (str.charCodeAt(i) >255) bytes++;
        }
        return bytes;
    }

alert(GetBytes("你好,as"));

git fetch和git pull的區(qū)別

git pull:相當于是從遠程獲取最新版本并merge到本地

git fetch:相當于是從遠程獲取最新版本到本地健蕊,不會自動merge

說說你對MVC和MVVM的理解

MVC

View 傳送指令到 Controller

Controller 完成業(yè)務(wù)邏輯后菱阵,要求 Model 改變狀態(tài)

Model 將新的數(shù)據(jù)發(fā)送到 View,用戶得到反饋

所有通信都是單向的缩功。

Angular它采用雙向綁定(data-binding):View的變動送粱,自動反映在 ViewModel,反之亦然掂之。

組成部分Model、View脆丁、ViewModel

View:UI界面

ViewModel:它是View的抽象世舰,負責View與Model之間信息轉(zhuǎn)換,將View的Command傳送到Model槽卫;

Model:數(shù)據(jù)訪問層

請解釋什么是事件代理

事件代理(Event Delegation)跟压,又稱之為事件委托。是 JavaScript 中常用綁定事件的常用技巧歼培。顧名思義震蒋,“事件代理”即是把原本需要綁定的事件委托給父元素,讓父元素擔當事件監(jiān)聽的職務(wù)躲庄。事件代理的原理是DOM元素的事件冒泡查剖。使用事件代理的好處是可以提高性能。

attribute和property的區(qū)別是什么噪窘?

attribute是dom元素在文檔中作為html標簽擁有的屬性笋庄;

property就是dom元素在js中作為對象擁有的屬性。

所以:

對于html的標準屬性來說,attribute和property是同步的直砂,是會自動更新的菌仁,

但是對于自定義的屬性來說,他們是不同步的静暂,

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

§ 應(yīng)用層:應(yīng)用層济丘、表示層、會話層(從上往下)(HTTP洽蛀、FTP摹迷、SMTP、DNS)

§ 傳輸層(TCP和UDP)

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

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

每一層的作用如下:

物理層:通過媒介傳輸比特,確定機械及電氣規(guī)范(比特Bit)

數(shù)據(jù)鏈路層:將比特組裝成幀和點到點的傳遞(幀F(xiàn)rame)

網(wǎng)絡(luò)層:負責數(shù)據(jù)包從源到宿的傳遞和網(wǎng)際互連(包PackeT)

傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(fù)(段Segment)

會話層:建立辱士、管理和終止會話(會話協(xié)議數(shù)據(jù)單元SPDU)

表示層:對數(shù)據(jù)進行翻譯泪掀、加密和壓縮(表示協(xié)議數(shù)據(jù)單元PPDU)

應(yīng)用層:允許訪問OSI環(huán)境的手段(應(yīng)用協(xié)議數(shù)據(jù)單元APDU)

各種協(xié)議

ICMP協(xié)議: 因特網(wǎng)控制報文協(xié)議。它是TCP/IP協(xié)議族的一個子協(xié)議颂碘,用于在IP主機异赫、路由器之間傳遞控制消息。
TFTP協(xié)議: 是TCP/IP協(xié)議族中的一個用來在客戶機與服務(wù)器之間進行簡單文件傳輸?shù)膮f(xié)議头岔,提供不復(fù)雜塔拳、開銷不大的文件傳輸服務(wù)。
HTTP協(xié)議: 超文本傳輸協(xié)議峡竣,是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議靠抑,由于其簡捷、快速的方式适掰,適用于分布式超媒體信息系統(tǒng)颂碧。
DHCP協(xié)議: 動態(tài)主機配置協(xié)議,是一種讓系統(tǒng)得以連接到網(wǎng)絡(luò)上类浪,并獲取所需要的配置參數(shù)手段载城。

說說mongoDB和MySQL的區(qū)別

MySQL是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫MongoDB則是非關(guān)系型數(shù)據(jù)庫

mongodb以BSON結(jié)構(gòu)(二進制)進行存儲费就,對海量數(shù)據(jù)存儲有著很明顯的優(yōu)勢诉瓦。

對比傳統(tǒng)關(guān)系型數(shù)據(jù)庫,NoSQL有著非常顯著的性能和擴展性優(yōu)勢,與關(guān)系型數(shù)據(jù)庫相比力细,MongoDB的優(yōu)點有:
①弱一致性(最終一致)睬澡,更能保證用戶的訪問速度:
②文檔結(jié)構(gòu)的存儲方式,能夠更便捷的獲取數(shù)據(jù)眠蚂。

講講304緩存的原理

服務(wù)器首先產(chǎn)生ETag煞聪,服務(wù)器可在稍后使用它來判斷頁面是否已經(jīng)被修改。本質(zhì)上河狐,客戶端通過將該記號傳回服務(wù)器要求服務(wù)器驗證其(客戶端)緩存米绕。

304是HTTP狀態(tài)碼瑟捣,服務(wù)器用來標識這個文件沒修改,不返回內(nèi)容栅干,瀏覽器在接收到個狀態(tài)碼后迈套,會使用瀏覽器已緩存的文件

客戶端請求一個頁面(A)。 服務(wù)器返回頁面A碱鳞,并在給A加上一個ETag桑李。 客戶端展現(xiàn)該頁面,并將頁面連同ETag一起緩存窿给。 客戶再次請求頁面A贵白,并將上次請求時服務(wù)器返回的ETag一起傳遞給服務(wù)器。 服務(wù)器檢查該ETag崩泡,并判斷出該頁面自上次客戶端請求之后還未被修改禁荒,直接返回響應(yīng)304(未修改——Not Modified)和一個空的響應(yīng)體。

什么樣的前端代碼是好的

高復(fù)用低耦合角撞,這樣文件小呛伴,好維護,而且好擴展谒所。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末热康,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子劣领,更是在濱河造成了極大的恐慌姐军,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尖淘,死亡現(xiàn)場離奇詭異奕锌,居然都是意外死亡,警方通過查閱死者的電腦和手機村生,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門歇攻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梆造,你說我怎么就攤上這事≡岷粒” “怎么了镇辉?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贴捡。 經(jīng)常有香客問我忽肛,道長,這世上最難降的妖魔是什么烂斋? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任屹逛,我火速辦了婚禮础废,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罕模。我一直安慰自己评腺,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布淑掌。 她就那樣靜靜地躺著蒿讥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抛腕。 梳的紋絲不亂的頭發(fā)上芋绸,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音担敌,去河邊找鬼摔敛。 笑死,一個胖子當著我的面吹牛全封,可吹牛的內(nèi)容都是我干的马昙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼售貌,長吁一口氣:“原來是場噩夢啊……” “哼给猾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起颂跨,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤敢伸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后恒削,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體池颈,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年钓丰,在試婚紗的時候發(fā)現(xiàn)自己被綠了躯砰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡携丁,死狀恐怖琢歇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梦鉴,我是刑警寧澤李茫,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站肥橙,受9級特大地震影響魄宏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜存筏,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一宠互、第九天 我趴在偏房一處隱蔽的房頂上張望味榛。 院中可真熱鬧,春花似錦予跌、人聲如沸搏色。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽继榆。三九已至,卻和暖如春汁掠,著一層夾襖步出監(jiān)牢的瞬間略吨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工考阱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翠忠,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓乞榨,卻偏偏與公主長得像秽之,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吃既,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5考榨? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,474評論 1 45
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案鹦倚? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,748評論 1 92
  • 【轉(zhuǎn)載】CSDN - 張林blog http://blog.csdn.net/XIAOZHUXMEN/articl...
    竿牘閱讀 3,488評論 1 14
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化河质,入門級到專家級,廣度和深度都會有所增加震叙。 題目類型: 理論知...
    怡寶丶閱讀 2,580評論 0 7
  • 前端開發(fā)面試知識點大綱: HTML&CSS: 對Web標準的理解掀鹅、瀏覽器內(nèi)核差異、兼容性媒楼、hack乐尊、CSS基本功:...
    秀才JaneBook閱讀 2,362評論 0 25