說說你對(duì)閉包的理解
使用閉包主要是為了設(shè)計(jì)私有的方法和變量。閉包的優(yōu)點(diǎn)是可以避免全局變量的污染胃夏,缺點(diǎn)是閉包會(huì)常駐內(nèi)存仰禀,會(huì)增大內(nèi)存使用量答恶,使用不當(dāng)很容易造成內(nèi)存泄露悬嗓。
閉包有三個(gè)特性:
1.函數(shù)嵌套函數(shù)
2.函數(shù)內(nèi)部可以引用外部的參數(shù)和變量
3.參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收
請(qǐng)你談?wù)凜ookie的弊端
cookie雖然在持久保存客戶端數(shù)據(jù)提供了方便包竹,分擔(dān)了服務(wù)器存儲(chǔ)的負(fù)擔(dān),但還是有很多局限性的苗缩。
第一:每個(gè)特定的域名下最多生成20個(gè)cookie
1.IE6或更低版本最多20個(gè)cookie
2.IE7和之后的版本最后可以有50個(gè)cookie酱讶。
3.Firefox最多50個(gè)cookie
4.chrome和Safari沒有做硬性限制
IE和Opera會(huì)清理近期最少使用的cookie泻肯,F(xiàn)irefox會(huì)隨機(jī)清理cookie软免。
cookie的最大大約為4096字節(jié),為了兼容性蝌衔,一般不能超過4095字節(jié)噩斟。
IE 提供了一種存儲(chǔ)可以持久化用戶數(shù)據(jù)剃允,叫做userdata斥废,從IE5.0就開始支持牡肉。每個(gè)數(shù)據(jù)最多128K统锤,每個(gè)域名下最多1M饲窿。這個(gè)持久化數(shù)據(jù)放在緩存中逾雄,如果緩存沒有清理,那么會(huì)一直存在淌哟。
優(yōu)點(diǎn):極高的擴(kuò)展性和可用性
1.通過良好的編程徒仓,控制保存在cookie中的session對(duì)象的大小掉弛。
2.通過加密和安全傳輸技術(shù)(SSL)殃饿,減少cookie被破解的可能性。
3.只在cookie中存放不敏感數(shù)據(jù)奈惑,即使被盜也不會(huì)有重大損失肴甸。
4.控制cookie的生命期原在,使之不會(huì)永遠(yuǎn)有效庶柿。偷盜者很可能拿到一個(gè)過期的cookie澳泵。
缺點(diǎn):
1.`Cookie`數(shù)量和長度的限制兔辅。每個(gè)domain最多只能有20條cookie维苔,每個(gè)cookie長度不能超過4KB介时,否則會(huì)被截掉沸柔。
2.安全性問題褐澎。如果cookie被人攔截了工三,那人就可以取得所有的session信息俭正。即使加密也與事無補(bǔ)掸读,因?yàn)閿r截者并不需要知道cookie的意義儿惫,他只要原樣轉(zhuǎn)發(fā)cookie就可以達(dá)到目的了姥闪。
3.有些狀態(tài)不可能保存在客戶端筐喳。例如避归,為了防止重復(fù)提交表單梳毙,我們需要在服務(wù)器端保存一個(gè)計(jì)數(shù)器账锹。如果我們把這個(gè)計(jì)數(shù)器保存在客戶端,那么它起不到任何作用廓奕。
瀏覽器本地存儲(chǔ)
在較高版本的瀏覽器中桌粉,js提供了sessionStorage和globalStorage铃肯。在HTML5中提供了localStorage來取代globalStorage缘薛。
html5中的Web Storage包括了兩種存儲(chǔ)方式:sessionStorage和localStorage宴胧。
sessionStorage用于本地存儲(chǔ)一個(gè)會(huì)話(session)中的數(shù)據(jù)恕齐,這些數(shù)據(jù)只有在同一個(gè)會(huì)話中的頁面才能訪問并且當(dāng)會(huì)話結(jié)束后數(shù)據(jù)也隨之銷毀仪或。因此sessionStorage不是一種持久化的本地存儲(chǔ)范删,僅僅是會(huì)話級(jí)別的存儲(chǔ)到旦。
而localStorage用于持久化的本地存儲(chǔ)添忘,除非主動(dòng)刪除數(shù)據(jù)搁骑,否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過期的仲器。
web storage和cookie的區(qū)別
Web Storage的概念和cookie相似,區(qū)別是它是為了更大容量存儲(chǔ)設(shè)計(jì)的煤辨。Cookie的大小是受限的众辨,并且每次你請(qǐng)求一個(gè)新的頁面的時(shí)候Cookie都會(huì)被發(fā)送過去鹃彻,這樣無形中浪費(fèi)了帶寬蛛株,另外cookie還需要指定作用域谨履,不可以跨域調(diào)用笋粟。
除此之外绿淋,Web Storage擁有setItem,getItem,removeItem,clear等方法吞滞,不像cookie需要前端開發(fā)者自己封裝setCookie裁赠,getCookie组贺。
但是cookie也是不可以或缺的:cookie的作用是與服務(wù)器進(jìn)行交互啊奄,作為HTTP規(guī)范的一部分而存在 菇夸,而Web Storage僅僅是為了在本地“存儲(chǔ)”數(shù)據(jù)而生
瀏覽器的支持除了IE7及以下不支持外庄新,其他標(biāo)準(zhǔn)瀏覽器都完全支持(ie及FF需在web服務(wù)器里運(yùn)行),值得一提的是IE總是辦好事出皇,例如IE7、IE6中的userData其實(shí)就是javascript本地存儲(chǔ)的解決方案纱注。通過簡單的代碼封裝可以統(tǒng)一到所有的瀏覽器都支持web storage狞贱。
localStorage和sessionStorage都具有相同的操作方法斥滤,例如setItem佑颇、getItem和removeItem等
cookie 和session 的區(qū)別:
1、cookie數(shù)據(jù)存放在客戶的瀏覽器上茬贵,session數(shù)據(jù)放在服務(wù)器上解藻。
2螟左、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
考慮到安全應(yīng)當(dāng)使用session钳吟。
3红且、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上暇番。當(dāng)訪問增多斤吐,會(huì)比較占用你服務(wù)器的性能
考慮到減輕服務(wù)器性能方面和措,應(yīng)當(dāng)使用COOKIE派阱。
4、單個(gè)cookie保存的數(shù)據(jù)不能超過4K腺劣,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie橘原。
5、所以個(gè)人建議:
將登陸信息等重要信息存放為SESSION
其他信息如果需要保留芋酌,可以放在COOKIE中
CSS 相關(guān)問題
display:none和visibility:hidden的區(qū)別脐帝?
display:none??隱藏對(duì)應(yīng)的元素梢杭,在文檔布局中不再給它分配空間武契,它各邊的元素會(huì)合攏,
就當(dāng)他從來不存在释液。
visibility:hidden ?隱藏對(duì)應(yīng)的元素,但是在文檔布局中仍保留原來的空間寝蹈。
CSS中 link 和@import 的區(qū)別是?
(1)?link屬于HTML標(biāo)簽耍鬓,而@import是CSS提供的;
(2)?頁面被加載的時(shí)牲蜀,link會(huì)同時(shí)被加載各薇,而@import引用的CSS會(huì)等到頁面被加載完再加載;
(3)?import只在IE5以上才能識(shí)別,而link是HTML標(biāo)簽林螃,無兼容問題;
(4)?link方式的樣式的權(quán)重?高于@import的權(quán)重.
position:absolute和float屬性的異同
A:共同點(diǎn):
對(duì)內(nèi)聯(lián)元素設(shè)置`float`和`absolute`屬性,可以讓元素脫離文檔流横漏,并且可以設(shè)置其寬高缎浇。
B:不同點(diǎn):
float仍會(huì)占據(jù)位置二蓝,position會(huì)覆蓋文檔流中的其他元素刊愚。
介紹一下box-sizing屬性?
box-sizing屬性主要用來控制元素的盒模型的解析模式衙传。默認(rèn)值是content-box蓖捶。
content-box:讓元素維持W3C的標(biāo)準(zhǔn)盒模型。元素的寬度/高度由border + padding + content的寬度/高度決定并闲,設(shè)置width/height屬性指的是content部分的寬/高
border-box:讓元素維持IE傳統(tǒng)盒模型(IE6以下版本和IE6~7的怪異模式)帝火。設(shè)置width/height屬性指的是border + padding + content
標(biāo)準(zhǔn)瀏覽器下,按照W3C規(guī)范對(duì)盒模型解析九巡,一旦修改了元素的邊框或內(nèi)距,就會(huì)影響元素的盒子尺寸撒汉,就不得不重新計(jì)算元素的盒子尺寸睬辐,從而影響整個(gè)頁面的布局。
CSS 選擇符有哪些瓣喊?哪些屬性可以繼承?優(yōu)先級(jí)算法如何計(jì)算棵帽?CSS3新增偽類有那些逗概?
1.id選擇器(#?myid)
2.類選擇器(.myclassname)
3.標(biāo)簽選擇器(div,?h1,?p)
4.相鄰選擇器(h1?+?p)
5.子選擇器(ul?>?li)
6.后代選擇器(li?a)
7.通配符選擇器(?*?)
8.屬性選擇器(a[rel?="external"])
9.偽類選擇器(a:?hover,?li:nth-child)
可繼承的樣式:font-size font-family color, text-indent;
不可繼承的樣式:border padding margin width height ;
優(yōu)先級(jí)就近原則,同權(quán)重情況下樣式定義最近者為準(zhǔn);
載入樣式以最后載入的定位為準(zhǔn);
優(yōu)先級(jí)為:
!important?>??id?>?class?>?tag
important?比?內(nèi)聯(lián)優(yōu)先級(jí)高,但內(nèi)聯(lián)比?id?要高
CSS3新增偽類舉例:
p:first-of-type 選擇屬于其父元素的首個(gè)?
?元素的每個(gè)?
?元素。
p:last-of-type ?選擇屬于其父元素的最后?
?元素的每個(gè)?
?元素星掰。
p:only-of-type ?選擇屬于其父元素唯一的?
?元素的每個(gè)?
?元素。
p:only-child ???選擇屬于其父元素的唯一子元素的每個(gè)?
?元素威始。
p:nth-child(2)??選擇屬于其父元素的第二個(gè)子元素的每個(gè)?
?元素。
:enabled ?:disabled 控制表單控件的禁用狀態(tài)脓斩。
:checked ???????單選框或復(fù)選框被選中随静。
position的值恋捆, relative和absolute分別是相對(duì)于誰進(jìn)行定位的?
absolute
生成絕對(duì)定位的元素愤钾,?相對(duì)于最近一級(jí)的?定位不是 static 的父元素來進(jìn)行定位。
fixed?(老IE不支持)
生成絕對(duì)定位的元素伙菊,相對(duì)于瀏覽器窗口進(jìn)行定位占业。
relative
生成相對(duì)定位的元素,相對(duì)于其在普通流中的位置進(jìn)行定位念恍。
static ?默認(rèn)值。沒有定位瞳氓,元素出現(xiàn)在正常的流中
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
XML和JSON的區(qū)別瞬场?
(1).數(shù)據(jù)體積方面。
JSON相對(duì)于XML來講涧郊,數(shù)據(jù)的體積小贯被,傳遞的速度更快些。
(2).數(shù)據(jù)交互方面底燎。
JSON與JavaScript的交互更加方便刃榨,更容易解析處理弹砚,更好的數(shù)據(jù)交互双仍。
(3).數(shù)據(jù)描述方面。
JSON對(duì)數(shù)據(jù)的描述性比XML較差桌吃。
(4).傳輸速度方面朱沃。
JSON的速度要遠(yuǎn)遠(yuǎn)快于XML。
對(duì)BFC規(guī)范的理解茅诱?
BFC逗物,塊級(jí)格式化上下文,一個(gè)創(chuàng)建了新的BFC的盒子是獨(dú)立布局的瑟俭,盒子里面的子元素的樣式不會(huì)影響到外面的元素翎卓。在同一個(gè)BFC中的兩個(gè)毗鄰的塊級(jí)盒在垂直方向(和布局方向有關(guān)系)的margin會(huì)發(fā)生折疊。
(W3C CSS 2.1 規(guī)范中的一個(gè)概念摆寄,它決定了元素如何對(duì)其內(nèi)容進(jìn)行布局失暴,以及與其他元素的關(guān)系和相互作用。)
解釋下 CSS sprites微饥,以及你要如何在頁面或網(wǎng)站中使用它逗扒。
CSS Sprites其實(shí)就是把網(wǎng)頁中一些背景圖片整合到一張圖片文件中,再利用CSS的“background-image”欠橘,“background- repeat”矩肩,“background-position”的組合進(jìn)行背景定位,background-position可以用數(shù)字能精確的定位出背景圖片的位置肃续。這樣可以減少很多圖片請(qǐng)求的開銷黍檩,因?yàn)檎?qǐng)求耗時(shí)比較長;請(qǐng)求雖然可以并發(fā)始锚,但是也有限制建炫,一般瀏覽器都是6個(gè)。對(duì)于未來而言疼蛾,就不需要這樣做了肛跌,因?yàn)橛辛薫http2`。
html部分
說說你對(duì)語義化的理解?
1衍慎,去掉或者丟失樣式的時(shí)候能夠讓頁面呈現(xiàn)出清晰的結(jié)構(gòu)
2转唉,有利于SEO:和搜索引擎建立良好溝通,有助于爬蟲抓取更多的有效信息:爬蟲依賴于標(biāo)簽來確定上下文和各個(gè)關(guān)鍵字的權(quán)重稳捆;
3赠法,方便其他設(shè)備解析(如屏幕閱讀器、盲人閱讀器乔夯、移動(dòng)設(shè)備)以意義的方式來渲染網(wǎng)頁砖织;
4,便于團(tuán)隊(duì)開發(fā)和維護(hù)末荐,語義化更具可讀性侧纯,是下一步吧網(wǎng)頁的重要?jiǎng)酉颍裱璚3C標(biāo)準(zhǔn)的團(tuán)隊(duì)都遵循這個(gè)標(biāo)準(zhǔn)甲脏,可以減少差異化眶熬。
Doctype作用? 嚴(yán)格模式與混雜模式如何區(qū)分?它們有何意義?
(1)块请、?聲明位于文檔中的最前面,處于??標(biāo)簽之前墩新。告知瀏覽器以何種模式來渲染文檔贸弥。
(2)、嚴(yán)格模式的排版和 JS 運(yùn)作模式是??以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行海渊。
(3)绵疲、在混雜模式中,頁面以寬松的向后兼容的方式顯示切省。模擬老式瀏覽器的行為以防止站點(diǎn)無法工作最岗。
(4)、DOCTYPE不存在或格式不正確會(huì)導(dǎo)致文檔以混雜模式呈現(xiàn)朝捆。
你知道多少種Doctype文檔類型般渡?
該標(biāo)簽可聲明三種 DTD 類型,分別表示嚴(yán)格版本芙盘、過渡版本以及基于框架的 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)頁驮樊,而?Quirks
(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計(jì)的網(wǎng)頁薇正。
HTML與XHTML——二者有什么區(qū)別
區(qū)別:
1.所有的標(biāo)記都必須要有一個(gè)相應(yīng)的結(jié)束標(biāo)記
2.所有標(biāo)簽的元素和屬性的名字都必須使用小寫
3.所有的XML標(biāo)記都必須合理嵌套
4.所有的屬性必須用引號(hào)""括起來
5.把所有<和&特殊符號(hào)用編碼表示
6.給所有屬性賦一個(gè)值
7.不要在注釋內(nèi)容中使“--”
8.圖片必須有說明文字
常見兼容性問題片酝?
*?png24位的圖片在iE6瀏覽器上出現(xiàn)背景,解決方案是做成PNG8.也可以引用一段腳本處理.
*?瀏覽器默認(rèn)的margin和padding不同挖腰。解決方案是加一個(gè)全局的*{margin:0;padding:0;}來統(tǒng)一昭殉。
*?IE6雙邊距bug:塊屬性標(biāo)簽float后撒蟀,又有橫行的margin情況下忽肛,在ie6顯示margin比設(shè)置的大芥被。
*?浮動(dòng)ie產(chǎn)生的雙倍距離(IE6雙邊距問題:在IE6下,如果對(duì)元素設(shè)置了浮動(dòng)辽俗,同時(shí)又設(shè)置了margin-left或margin-right疾渣,margin值會(huì)加倍。)
#box{?float:left;?width:10px;?margin:0?0?0?100px;}?
這種情況之下IE會(huì)產(chǎn)生20px的距離崖飘,解決方案是在float的標(biāo)簽樣式控制中加入?——_display:inline;將其轉(zhuǎn)化為行內(nèi)屬性榴捡。(_這個(gè)符號(hào)只有ie6會(huì)識(shí)別)
*??漸進(jìn)識(shí)別的方式,從總體中逐漸排除局部坐漏。
首先薄疚,巧妙的使用“\9”這一標(biāo)記碧信,將IE游覽器從所有情況中分離出來赊琳。
接著,再次使用“+”將IE8和IE7砰碴、IE6分離開來躏筏,這樣IE8已經(jīng)獨(dú)立識(shí)別。
css
.bb{
background-color:#f1ee18;/*所有識(shí)別*/
.background-color:#00deff\9;?/*IE6呈枉、7趁尼、8識(shí)別*/
+background-color:#a200ff;/*IE6、7識(shí)別*/
_background-color:#1e0bd1;/*IE6識(shí)別*/?
}
*??IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,
也可以使用getAttribute()獲取自定義屬性;
Firefox下,只能使用getAttribute()獲取自定義屬性.
解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性.
*?IE下,event對(duì)象有x,y屬性,但是沒有pageX,pageY屬性;
Firefox下,event對(duì)象有pageX,pageY屬性,但是沒有x,y屬性.
*?解決方法:(條件注釋)缺點(diǎn)是在IE瀏覽器下可能會(huì)增加額外的HTTP請(qǐng)求數(shù)猖辫。
*?Chrome?中文界面下默認(rèn)會(huì)將小于?12px?的文本強(qiáng)制按照?12px?顯示,
可通過加入?CSS?屬性?-webkit-text-size-adjust:?none;?解決.
*?超鏈接訪問過后hover樣式就不出現(xiàn)了?被點(diǎn)擊訪問過的超鏈接樣式不在具有hover和active了解決方法是改變CSS屬性的排列順序:
L-V-H-A?:??a:link?{}?a:visited?{}?a:hover?{}?a:active?{}
*?怪異模式問題:漏寫DTD聲明酥泞,F(xiàn)irefox仍然會(huì)按照標(biāo)準(zhǔn)模式來解析網(wǎng)頁,但在IE中會(huì)觸發(fā)怪異模式啃憎。為避免怪異模式給我們帶來不必要的麻煩芝囤,最好養(yǎng)成書寫DTD聲明的好習(xí)慣。現(xiàn)在可以使用[html5](http://www.w3.org/TR/html5/single-page.html)推薦的寫法:``
*?上下margin重合問題
ie和ff都存在辛萍,相鄰的兩個(gè)div的margin-left和margin-right不會(huì)重合悯姊,但是margin-top和margin-bottom卻會(huì)發(fā)生重合。
解決方法贩毕,養(yǎng)成良好的代碼編寫習(xí)慣悯许,同時(shí)采用margin-top或者同時(shí)采用margin-bottom。
*?ie6對(duì)png圖片格式支持不好(引用一段腳本處理)
解釋下浮動(dòng)和它的工作原理辉阶?清除浮動(dòng)的技巧
浮動(dòng)元素脫離文檔流先壕,不占據(jù)空間瘩扼。浮動(dòng)元素碰到包含它的邊框或者浮動(dòng)元素的邊框停留。
1.使用空標(biāo)簽清除浮動(dòng)垃僚。
這種方法是在所有浮動(dòng)標(biāo)簽后面添加一個(gè)空標(biāo)簽?定義css clear:both. 弊端就是增加了無意義標(biāo)簽邢隧。
2.使用overflow。
給包含浮動(dòng)元素的父標(biāo)簽添加css屬性 overflow:auto; zoom:1; zoom:1用于兼容IE6冈在。
3.使用after偽對(duì)象清除浮動(dòng)倒慧。
該方法只適用于非IE瀏覽器。具體寫法可參照以下示例包券。使用中需注意以下幾點(diǎn)纫谅。一、該方法中必須為需要清除浮動(dòng)元素的偽對(duì)象中設(shè)置 height:0溅固,否則該元素會(huì)比實(shí)際高出若干像素付秕;
浮動(dòng)元素引起的問題和解決辦法?
浮動(dòng)元素引起的問題:
(1)父元素的高度無法被撐開侍郭,影響與父元素同級(jí)的元素
(2)與浮動(dòng)元素同級(jí)的非浮動(dòng)元素(內(nèi)聯(lián)元素)會(huì)跟隨其后
(3)若非第一個(gè)元素浮動(dòng)询吴,則該元素之前的元素也需要浮動(dòng),否則會(huì)影響頁面顯示的結(jié)構(gòu)
解決方法:
使用CSS中的clear:both;屬性來清除元素的浮動(dòng)可解決2亮元、3問題猛计,對(duì)于問題1,添加如下樣式爆捞,給父元素添加clearfix樣式:
.clearfix:after{content:".";display:?block;height:?0;clear:?both;visibility:?hidden;}
.clearfix{display:?inline-block;}?/*forIE/Mac?*/
清除浮動(dòng)的幾種方法:
1奉瘤,額外標(biāo)簽法,(缺點(diǎn):不過這個(gè)辦法會(huì)增加額外的標(biāo)簽使HTML結(jié)構(gòu)看起來不夠簡潔煮甥。)
2盗温,使用after偽類
#parent:after{
content:".";
height:0;
visibility:hidden;
display:block;
clear:both;
}
3,浮動(dòng)外部元素
4,設(shè)置`overflow`為`hidden`或者auto
IE 8以下版本的瀏覽器中的盒模型有什么不同
IE8以下瀏覽器的盒模型中定義的元素的寬高不包括內(nèi)邊距和邊框
DOM操作——怎樣添加、移除成肘、移動(dòng)卖局、復(fù)制、創(chuàng)建和查找節(jié)點(diǎn)双霍。
(1)創(chuàng)建新節(jié)點(diǎn)
createDocumentFragment()????//創(chuàng)建一個(gè)DOM片段
createElement()???//創(chuàng)建一個(gè)具體的元素
createTextNode()???//創(chuàng)建一個(gè)文本節(jié)點(diǎn)
(2)添加砚偶、移除、替換店煞、插入
appendChild()
removeChild()
replaceChild()
insertBefore()?//在已有的子節(jié)點(diǎn)前插入一個(gè)新的子節(jié)點(diǎn)
(3)查找
getElementsByTagName()????//通過標(biāo)簽名稱
getElementsByName()????//通過元素的Name屬性的值(IE容錯(cuò)能力較強(qiáng)蟹演,會(huì)得到一個(gè)數(shù)組,其中包括id等于name值的)
getElementById()????//通過元素Id顷蟀,唯一性
html5有哪些新特性酒请、移除了那些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題鸣个?如何區(qū)分 HTML 和 HTML5羞反?
* HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集布朦,主要是關(guān)于圖像,位置昼窗,存儲(chǔ)是趴,多任務(wù)等功能的增加。
*?拖拽釋放(Drag?and?drop)?API
語義化更好的內(nèi)容標(biāo)簽(header,nav,footer,aside,article,section)
音頻澄惊、視頻API(audio,video)
畫布(Canvas)?API
地理(Geolocation)?API
本地離線存儲(chǔ) localStorage 長期存儲(chǔ)數(shù)據(jù)唆途,瀏覽器關(guān)閉后數(shù)據(jù)不丟失;
sessionStorage?的數(shù)據(jù)在瀏覽器關(guān)閉后自動(dòng)刪除
表單控件掸驱,calendar肛搬、date、time毕贼、email温赔、url、search
新的技術(shù)webworker,?websocket,?Geolocation
*?移除的元素
純表現(xiàn)的元素:basefont鬼癣,big陶贼,center,font, s待秃,strike拜秧,tt,u锥余;
對(duì)可用性產(chǎn)生負(fù)面影響的元素:frame腹纳,frameset痢掠,noframes驱犹;
支持HTML5新標(biāo)簽:
*?IE8/IE7/IE6支持通過document.createElement方法產(chǎn)生的標(biāo)簽,
可以利用這一特性讓這些瀏覽器支持HTML5新標(biāo)簽足画,
瀏覽器支持新標(biāo)簽后雄驹,還需要添加標(biāo)簽?zāi)J(rèn)的樣式:
*?當(dāng)然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
?src="http://html5shim.googlecode.com/svn/trunk/html5.js"
如何區(qū)分:DOCTYPE聲明\新增的結(jié)構(gòu)元素\功能元素
iframe的優(yōu)缺點(diǎn)淹辞?
1.``優(yōu)點(diǎn):
解決加載緩慢的第三方內(nèi)容如圖標(biāo)和廣告等的加載問題
Security?sandbox
并行加載腳本
2.``的缺點(diǎn):
*iframe會(huì)阻塞主頁面的Onload事件医舆;
*即時(shí)內(nèi)容為空,加載也需要時(shí)間
*沒有語意
如何實(shí)現(xiàn)瀏覽器內(nèi)多個(gè)標(biāo)簽頁之間的通信?
調(diào)用localstorge象缀、cookies等本地存儲(chǔ)方式
線程與進(jìn)程的區(qū)別
一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.
線程的劃分尺度小于進(jìn)程蔬将,使得多線程程序的并發(fā)性高。
另外央星,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元霞怀,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率莉给。
線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的毙石。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口廉沮、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行徐矩,必須依存在應(yīng)用程序中滞时,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。
從邏輯角度來看滤灯,多線程的意義在于一個(gè)應(yīng)用程序中坪稽,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用鳞骤,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配刽漂。這就是進(jìn)程和線程的重要區(qū)別。
你如何對(duì)網(wǎng)站的文件和資源進(jìn)行優(yōu)化弟孟?
期待的解決方案包括:
文件合并
文件最小化/文件壓縮
使用?CDN?托管
緩存的使用(多個(gè)域名來提供緩存)
其他
請(qǐng)說出三種減少頁面加載時(shí)間的方法贝咙。
1.優(yōu)化圖片
2.圖像格式的選擇(GIF:提供的顏色較少,可用在一些對(duì)顏色要求不高的地方)
3.優(yōu)化CSS(壓縮合并css拂募,如margin-top,margin-left...)
4.網(wǎng)址后加斜杠(如www.campr.com/目錄庭猩,會(huì)判斷這個(gè)“目錄是什么文件類型,或者是目錄陈症。)
5.標(biāo)明高度和寬度(如果瀏覽器沒有找到這兩個(gè)參數(shù)蔼水,它需要一邊下載圖片一邊計(jì)算大小,如果圖片很多录肯,瀏覽器需要不斷地調(diào)整頁面趴腋。這不但影響速度,也影響瀏覽體驗(yàn)论咏。
當(dāng)瀏覽器知道了高度和寬度參數(shù)后优炬,即使圖片暫時(shí)無法顯示,頁面上也會(huì)騰出圖片的空位厅贪,然后繼續(xù)加載后面的內(nèi)容蠢护。從而加載時(shí)間快了,瀏覽體驗(yàn)也更好了养涮。)
6.減少http請(qǐng)求(合并文件葵硕,合并圖片)。
你都使用哪些工具來測(cè)試代碼的性能贯吓?
Profiler,?JSPerf(http://jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout),?Dromaeo
什么是 FOUC(無樣式內(nèi)容閃爍)懈凹?你如何來避免 FOUC?
FOUC?-?Flash?Of?Unstyled?Content?文檔樣式閃爍
@import"../fouc.css";
而引用CSS文件的@import就是造成這個(gè)問題的罪魁禍?zhǔn)浊男场E會(huì)先加載整個(gè)HTML文檔的DOM介评,然后再去導(dǎo)入外部的CSS文件,因此尊沸,在頁面DOM加載完成到CSS導(dǎo)入完成中間會(huì)有一段時(shí)間頁面上的內(nèi)容是沒有樣式的威沫,這段時(shí)間的長短跟網(wǎng)速贤惯,電腦速度都有關(guān)系。
解決方法簡單的出奇棒掠,只要在之間加入一個(gè)或者元素就可以了孵构。
null和undefined的區(qū)別?
null是一個(gè)表示”無”的對(duì)象烟很,轉(zhuǎn)為數(shù)值時(shí)為0颈墅;undefined是一個(gè)表示”無”的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN雾袱。
當(dāng)聲明的變量還未被初始化時(shí)恤筛,變量的默認(rèn)值為undefined。
null用來表示尚未存在的對(duì)象芹橡,常用來表示函數(shù)企圖返回一個(gè)不存在的對(duì)象毒坛。
undefined表示”缺少值”,就是此處應(yīng)該有一個(gè)值林说,但是還沒有定義煎殷。典型用法是:
(1)變量被聲明了,但沒有賦值時(shí)腿箩,就等于undefined豪直。
(2)?調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供珠移,該參數(shù)等于undefined弓乙。
(3)對(duì)象沒有賦值的屬性,該屬性的值為undefined钧惧。
(4)函數(shù)沒有返回值時(shí)暇韧,默認(rèn)返回undefined。
null表示”沒有對(duì)象”垢乙,即該處不應(yīng)該有值锨咙。典型用法是:
(1)?作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對(duì)象追逮。
(2)?作為對(duì)象原型鏈的終點(diǎn)。
new操作符具體干了什么呢?
1粹舵、創(chuàng)建一個(gè)空對(duì)象钮孵,并且 this 變量引用該對(duì)象,同時(shí)還繼承了該函數(shù)的原型眼滤。
2巴席、屬性和方法被加入到 this 引用的對(duì)象中。
3诅需、新創(chuàng)建的對(duì)象由 this 所引用漾唉,并且最后隱式的返回 this 荧库。
var?obj??=?{};
obj.__proto__?=?Base.prototype;
Base.call(obj);
js延遲加載的方式有哪些?
defer和async赵刑、動(dòng)態(tài)創(chuàng)建DOM方式(創(chuàng)建script分衫,插入到DOM中,加載完畢后callBack)般此、按需異步載入js
如何解決跨域問題?
jsonp蚪战、?document.domain+iframe、window.name铐懊、window.postMessage邀桑、服務(wù)器上設(shè)置代理頁面
jsonp的原理是動(dòng)態(tài)插入script標(biāo)簽
具體參見:詳解js跨域問題
documen.write和 innerHTML的區(qū)別
document.write只能重繪整個(gè)頁面
innerHTML可以重繪頁面的一部分
.call() 和 .apply() 的區(qū)別和作用?
作用:動(dòng)態(tài)改變某個(gè)類的某個(gè)方法的運(yùn)行環(huán)境科乎。
區(qū)別參見:JavaScript學(xué)習(xí)總結(jié)(四)function函數(shù)部分
哪些操作會(huì)造成內(nèi)存泄漏壁畸?
內(nèi)存泄漏指任何對(duì)象在您不再擁有或需要它之后仍然存在。
垃圾回收器定期掃描對(duì)象茅茂,并計(jì)算引用了每個(gè)對(duì)象的其他對(duì)象的數(shù)量瓤摧。如果一個(gè)對(duì)象的引用數(shù)量為?0(沒有其他對(duì)象引用過該對(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))
詳見:詳解js變量给赞、作用域及內(nèi)存
JavaScript中的作用域與變量聲明提升?
詳見:詳解JavaScript函數(shù)模式
如何判斷當(dāng)前腳本運(yùn)行在瀏覽器還是node環(huán)境中矫户?
通過判斷Global對(duì)象是否為window片迅,如果不為window,當(dāng)前腳本沒有運(yùn)行在瀏覽器中
其他問題皆辽?
你遇到過比較難的技術(shù)問題是柑蛇?你是如何解決的?
列舉IE 與其他瀏覽器不一樣的特性驱闷?
什么叫優(yōu)雅降級(jí)和漸進(jìn)增強(qiáng)耻台?
優(yōu)雅降級(jí):Web站點(diǎn)在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器空另,則代碼會(huì)檢查以確認(rèn)它們是否能正常工作盆耽。由于IE獨(dú)特的盒模型布局問題,針對(duì)不同版本的IE的hack實(shí)踐過優(yōu)雅降級(jí)了,為那些無法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級(jí)體驗(yàn)卻不至于完全失效.
漸進(jìn)增強(qiáng):從被所有瀏覽器支持的基本功能開始摄杂,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增加無害于基礎(chǔ)瀏覽器的額外樣式和功能的坝咐。當(dāng)瀏覽器支持時(shí),它們會(huì)自動(dòng)地呈現(xiàn)出來并發(fā)揮作用析恢。
詳見:css學(xué)習(xí)歸納總結(jié)(一)
WEB應(yīng)用從服務(wù)器主動(dòng)推送Data到客戶端有那些方式墨坚?
Javascript數(shù)據(jù)推送
Commet:基于HTTP長連接的服務(wù)器推送技術(shù)
基于WebSocket的推送方案
SSE(Server-Send Event):服務(wù)器推送數(shù)據(jù)新方式
對(duì)前端界面工程師這個(gè)職位是怎么樣理解的?它的前景會(huì)怎么樣氮昧?
前端是最貼近用戶的程序員框杜,比后端、數(shù)據(jù)庫袖肥、產(chǎn)品經(jīng)理咪辱、運(yùn)營、安全都近椎组。
1油狂、實(shí)現(xiàn)界面交互
2、提升用戶體驗(yàn)
3寸癌、有了Node.js专筷,前端可以實(shí)現(xiàn)服務(wù)端的一些事情
前端是最貼近用戶的程序員,前端的能力就是能讓產(chǎn)品從?90分進(jìn)化到?100?分蒸苇,甚至更好磷蛹,
參與項(xiàng)目,快速高質(zhì)量完成實(shí)現(xiàn)效果圖溪烤,精確到1px味咳;
與團(tuán)隊(duì)成員,UI設(shè)計(jì)檬嘀,產(chǎn)品經(jīng)理的溝通槽驶;
做好的頁面結(jié)構(gòu),頁面重構(gòu)和用戶體驗(yàn)鸳兽;
處理hack掂铐,兼容、寫出優(yōu)美的代碼格式揍异;
針對(duì)服務(wù)器的優(yōu)化全陨、擁抱最新前端技術(shù)。
你有哪些性能優(yōu)化的方法蒿秦?
(詳情請(qǐng)看雅虎14條性能優(yōu)化原則)烤镐。
(1)?減少http請(qǐng)求次數(shù):CSS Sprites, JS、CSS源碼壓縮棍鳖、圖片大小控制合適;網(wǎng)頁Gzip,CDN托管渡处,data緩存?镜悉,圖片服務(wù)器。
(2)?前端模板?JS+數(shù)據(jù)医瘫,減少由于HTML標(biāo)簽導(dǎo)致的帶寬浪費(fèi)侣肄,前端用變量保存AJAX請(qǐng)求結(jié)果,每次操作本地變量醇份,不用請(qǐng)求稼锅,減少請(qǐng)求次數(shù)
(3)?用innerHTML代替DOM操作,減少DOM操作次數(shù)僚纷,優(yōu)化javascript性能矩距。
(4)?當(dāng)需要設(shè)置的樣式很多時(shí)設(shè)置className而不是直接操作style。
(5)?少用全局變量怖竭、緩存DOM節(jié)點(diǎn)查找的結(jié)果锥债。減少IO讀取操作。
(6)?避免使用CSS Expression(css表達(dá)式)又稱Dynamic properties(動(dòng)態(tài)屬性)痊臭。
(7)?圖片預(yù)加載哮肚,將樣式表放在頂部,將腳本放在底部??加上時(shí)間戳广匙。
詳情:http://segmentfault.com/blog/trigkit4/1190000000691919
一個(gè)頁面從輸入 URL 到頁面加載顯示完成允趟,這個(gè)過程中都發(fā)生了什么?
分為4個(gè)步驟:
(1)鸦致,當(dāng)發(fā)送一個(gè)URL請(qǐng)求時(shí)潮剪,不管這個(gè)URL是Web頁面的URL還是Web頁面上每個(gè)資源的URL,瀏覽器都會(huì)開啟一個(gè)線程來處理這個(gè)請(qǐng)求蹋凝,同時(shí)在遠(yuǎn)程DNS服務(wù)器上啟動(dòng)一個(gè)DNS查詢鲁纠。這能使瀏覽器獲得請(qǐng)求對(duì)應(yīng)的IP地址。
(2)鳍寂,?瀏覽器與遠(yuǎn)程Web服務(wù)器通過TCP三次握手協(xié)商來建立一個(gè)TCP/IP連接改含。該握手包括一個(gè)同步報(bào)文,一個(gè)同步-應(yīng)答報(bào)文和一個(gè)應(yīng)答報(bào)文迄汛,這三個(gè)報(bào)文在?瀏覽器和服務(wù)器之間傳遞捍壤。該握手首先由客戶端嘗試建立起通信,而后服務(wù)器應(yīng)答并接受客戶端的請(qǐng)求鞍爱,最后由客戶端發(fā)出該請(qǐng)求已經(jīng)被接受的報(bào)文鹃觉。
(3),一旦TCP/IP連接建立睹逃,瀏覽器會(huì)通過該連接向遠(yuǎn)程服務(wù)器發(fā)送HTTP的GET請(qǐng)求盗扇。遠(yuǎn)程服務(wù)器找到資源并使用HTTP響應(yīng)返回該資源祷肯,值為200的HTTP響應(yīng)狀態(tài)表示一個(gè)正確的響應(yīng)。
(4)疗隶,此時(shí)佑笋,Web服務(wù)器提供資源服務(wù),客戶端開始下載資源斑鼻。
請(qǐng)求返回后蒋纬,便進(jìn)入了我們關(guān)注的前端模塊
簡單來說,瀏覽器會(huì)解析HTML生成DOM?Tree坚弱,其次會(huì)根據(jù)CSS生成CSS?Rule?Tree蜀备,而javascript又可以根據(jù)DOM?API操作DOM
詳情:從輸入 URL 到瀏覽器接收的過程中發(fā)生了什么事情?
平時(shí)如何管理你的項(xiàng)目荒叶?
先期團(tuán)隊(duì)必須確定好全局樣式(globe.css)碾阁,編碼模式(utf-8)?等;
編寫習(xí)慣必須一致(例如都是采用繼承式的寫法停撞,單樣式都寫成一行)瓷蛙;
標(biāo)注樣式編寫人,各模塊都及時(shí)標(biāo)注(標(biāo)注關(guān)鍵樣式調(diào)用的地方)戈毒;
頁面進(jìn)行標(biāo)注(例如?頁面?模塊?開始和結(jié)束)艰猬;
CSS跟HTML 分文件夾并行存放,命名都得統(tǒng)一(例如style.css)埋市;
JS 分文件夾存放?命名以該JS功能為準(zhǔn)的英文翻譯冠桃。
圖片采用整合的?images.png?png8?格式文件使用?盡量整合在一起使用方便將來的管理
說說最近最流行的一些東西吧?常去哪些網(wǎng)站道宅?
Node.js食听、Mongodb、npm污茵、MVVM樱报、MEAN、three.js,React 泞当。
網(wǎng)站:w3cfuns,sf,hacknews,CSDN,慕課迹蛤,博客園,InfoQ,w3cplus等
javascript對(duì)象的幾種創(chuàng)建方式
1襟士,工廠模式
2盗飒,構(gòu)造函數(shù)模式
3,原型模式
4陋桂,混合構(gòu)造函數(shù)和原型模式
5逆趣,動(dòng)態(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繼承方式詳解
ajax過程
(1)創(chuàng)建XMLHttpRequest對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象.
(2)創(chuàng)建一個(gè)新的HTTP請(qǐng)求,并指定該HTTP請(qǐng)求的方法咐蝇、URL及驗(yàn)證信息.
(3)設(shè)置響應(yīng)HTTP請(qǐng)求狀態(tài)變化的函數(shù).
(4)發(fā)送HTTP請(qǐng)求.
(5)獲取異步調(diào)用返回的數(shù)據(jù).
(6)使用JavaScript和DOM實(shí)現(xiàn)局部刷新.
詳情:JavaScript學(xué)習(xí)總結(jié)(七)Ajax和Http狀態(tài)字
異步加載和延遲加載
1.異步加載的方案:?動(dòng)態(tài)插入script標(biāo)簽
2.通過ajax去獲取js代碼,然后通過eval執(zhí)行
3.script標(biāo)簽上添加defer或者async屬性
4.創(chuàng)建并插入iframe巷查,讓它異步執(zhí)行js
5.延遲加載:有些 js 代碼并不是頁面初始化的時(shí)候就立刻需要的有序,而稍后的某些情況才需要的。
前端安全問題岛请?
sql注入原理
就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請(qǐng)求的查詢字符串旭寿,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。
總的來說有以下幾點(diǎn):
1.永遠(yuǎn)不要信任用戶的輸入崇败,要對(duì)用戶的輸入進(jìn)行校驗(yàn)盅称,可以通過正則表達(dá)式,或限制長度后室,對(duì)單引號(hào)和雙"-"進(jìn)行轉(zhuǎn)換等缩膝。
2.永遠(yuǎn)不要使用動(dòng)態(tài)拼裝SQL,可以使用參數(shù)化的SQL或者直接使用存儲(chǔ)過程進(jìn)行數(shù)據(jù)查詢存取岸霹。
3.永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫連接疾层,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫連接。
4.不要把機(jī)密信息明文存放贡避,請(qǐng)加密或者h(yuǎn)ash掉密碼和敏感的信息痛黎。
XSS原理及防范
Xss(cross-site scripting)攻擊指的是攻擊者往Web頁面里插入惡意html標(biāo)簽或者javascript代碼。比如:攻擊者在論壇中放一個(gè)
看似安全的鏈接刮吧,騙取用戶點(diǎn)擊后湖饱,竊取cookie中的用戶私密信息;或者攻擊者在論壇中加一個(gè)惡意表單杀捻,
當(dāng)用戶提交表單的時(shí)候井厌,卻把信息傳送到攻擊者的服務(wù)器中,而不是用戶原本以為的信任站點(diǎn)水醋。
XSS防范方法
1.代碼里對(duì)用戶輸入的地方和變量都需要仔細(xì)檢查長度和對(duì)”<”,”>”,”;”,”’”等字符做過濾旗笔;其次任何內(nèi)容寫到頁面之前都必須加以encode,避免不小心把html tag弄出來拄踪。這一個(gè)層面做好蝇恶,至少可以堵住超過一半的XSS攻擊。
2.避免直接在cookie中泄露用戶隱私惶桐,例如email撮弧、密碼等等潘懊。
3.通過使cookie 和系統(tǒng)ip 綁定來降低cookie泄露后的危險(xiǎn)。這樣攻擊者得到的cookie 沒有實(shí)際價(jià)值贿衍,不可能拿來重放授舟。
4.盡量采用POST 而非GET 提交表單
XSS與CSRF有什么區(qū)別嗎?
XSS是獲取信息贸辈,不需要提前知道其他用戶頁面的代碼和數(shù)據(jù)包释树。CSRF是代替用戶完成指定的動(dòng)作,需要知道其他用戶頁面的代碼和數(shù)據(jù)包擎淤。
要完成一次CSRF攻擊奢啥,受害者必須依次完成兩個(gè)步驟:
1.登錄受信任網(wǎng)站A,并在本地生成Cookie嘴拢。
2.在不登出A的情況下桩盲,訪問危險(xiǎn)網(wǎng)站B。
CSRF的防御
1.服務(wù)端的CSRF方式方法很多樣席吴,但總的思想都是一致的赌结,就是在客戶端頁面增加偽隨機(jī)數(shù)。
2.使用驗(yàn)證碼
ie各版本和chrome可以并行下載多少個(gè)資源
IE6?兩個(gè)并發(fā)孝冒,iE7升級(jí)之后的6個(gè)并發(fā)柬姚,之后版本也是6個(gè)
Firefox,chrome也是6個(gè)
javascript里面的繼承怎么實(shí)現(xiàn)迈倍,如何避免原型鏈上面的對(duì)象共享
用構(gòu)造函數(shù)和原型鏈的混合模式去實(shí)現(xiàn)繼承伤靠,避免對(duì)象共享可以參考經(jīng)典的extend()函數(shù),很多前端框架都有封裝的啼染,就是用一個(gè)空函數(shù)當(dāng)做中間變量
grunt宴合, YUI compressor 和 google clojure用來進(jìn)行代碼壓縮的用法。
YUI Compressor 是一個(gè)用來壓縮 JS 和 CSS 文件的工具迹鹅,采用Java開發(fā)卦洽。
使用方法:
//壓縮JS
java?-jar?yuicompressor-2.4.2.jar?--typejs?--charset?utf-8?-v?src.js?>?packed.js
//壓縮CSS
java?-jar?yuicompressor-2.4.2.jar?--typecss?--charset?utf-8?-v?src.css?>?packed.css
詳情請(qǐng)見:你需要掌握的前端代碼性能優(yōu)化工具
Flash、Ajax各自的優(yōu)缺點(diǎn)斜棚,在使用中如何取舍阀蒂?
1、Flash?ajax對(duì)比
Flash適合處理多媒體弟蚀、矢量圖形蚤霞、訪問機(jī)器耗式;對(duì)CSS接癌、處理文本上不足,不容易被搜索侯勉。
Ajax對(duì)CSS捶闸、文本支持很好夜畴,支持搜索拖刃;多媒體、矢量圖形贪绘、機(jī)器訪問不足兑牡。
共同點(diǎn):與服務(wù)器的無刷新傳遞消息、用戶離線和在線狀態(tài)税灌、操作DOM
請(qǐng)解釋一下 JavaScript 的同源策略均函。
概念:同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標(biāo)準(zhǔn)。它最早出自Netscape Navigator2.0垄琐,其目的是防止某個(gè)文檔或腳本從多個(gè)不同源裝載边酒。
這里的同源策略指的是:協(xié)議,域名狸窘,端口相同,同源策略是一種安全協(xié)議坯认。
指一段腳本只能讀取來自同一來源的窗口和文檔的屬性翻擒。
為什么要有同源限制?
我們舉例說明:比如一個(gè)黑客程序牛哺,他利用Iframe把真正的銀行登錄頁面嵌到他的頁面上陋气,當(dāng)你使用真實(shí)的用戶名,密碼登錄時(shí)引润,他的頁面就可以通過Javascript讀取到你的表單中input中的內(nèi)容巩趁,這樣用戶名,密碼就輕松到手了淳附。
什么是 “use strict”; ? 使用它的好處和壞處分別是什么议慰?
ECMAscript 5添加了第二種運(yùn)行模式:”嚴(yán)格模式”(strict mode)。顧名思義奴曙,這種模式使得Javascript在更嚴(yán)格的條件下運(yùn)行别凹。
設(shè)立”嚴(yán)格模式”的目的,主要有以下幾個(gè):
-?消除Javascript語法的一些不合理洽糟、不嚴(yán)謹(jǐn)之處炉菲,減少一些怪異行為;
-?消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全坤溃;
-?提高編譯器效率拍霜,增加運(yùn)行速度;
-?為未來新版本的Javascript做好鋪墊薪介。
注:經(jīng)過測(cè)試IE6,7,8,9均不支持嚴(yán)格模式祠饺。
缺點(diǎn):
現(xiàn)在網(wǎng)站的JS都會(huì)進(jìn)行壓縮,一些文件用了嚴(yán)格模式昭灵,而另一些沒有吠裆。這時(shí)這些本來是嚴(yán)格模式的文件伐谈,被merge后,這個(gè)串就到了文件的中間试疙,不僅沒有指示嚴(yán)格模式诵棵,反而在壓縮后浪費(fèi)了字節(jié)。
GET和POST的區(qū)別祝旷,何時(shí)使用POST履澳?
GET:一般用于信息獲取,使用URL傳遞參數(shù)怀跛,對(duì)所發(fā)送信息的數(shù)量也有限制距贷,一般在2000個(gè)字符
POST:一般用于修改服務(wù)器上的資源,對(duì)所發(fā)送的信息沒有限制吻谋。
GET方式需要使用Request.QueryString來取得變量的值忠蝗,而POST方式通過Request.Form來獲取變量的值,
也就是說Get是通過地址欄來傳值漓拾,而Post是通過提交表單來傳值阁最。
然而,在以下情況中骇两,請(qǐng)使用 POST 請(qǐng)求:
無法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫)
向服務(wù)器發(fā)送大量數(shù)據(jù)(POST?沒有數(shù)據(jù)量限制)
發(fā)送包含未知字符的用戶輸入時(shí)速种,POST?比?GET?更穩(wěn)定也更可靠
哪些地方會(huì)出現(xiàn)css阻塞,哪些地方會(huì)出現(xiàn)js阻塞低千?
**js的阻塞特性:**所有瀏覽器在下載JS的時(shí)候配阵,會(huì)阻止一切其他活動(dòng),比如其他資源的下載示血,內(nèi)容的呈現(xiàn)等等棋傍。直到JS下載、解析矾芙、執(zhí)行完畢后才開始繼續(xù)并行下載其他資源并呈現(xiàn)內(nèi)容舍沙。為了提高用戶體驗(yàn),新一代瀏覽器都支持并行下載JS剔宪,但是JS下載仍然會(huì)阻塞其它資源的下載(例如.圖片拂铡,css文件等)。
由于瀏覽器為了防止出現(xiàn)JS修改DOM樹葱绒,需要重新構(gòu)建DOM樹的情況感帅,所以就會(huì)阻塞其他的下載和呈現(xiàn)。
嵌入JS會(huì)阻塞所有內(nèi)容的呈現(xiàn)地淀,而外部JS只會(huì)阻塞其后內(nèi)容的顯示失球,2種方式都會(huì)阻塞其后資源的下載。也就是說外部樣式不會(huì)阻塞外部腳本的加載,但會(huì)阻塞外部腳本的執(zhí)行实苞。
CSS怎么會(huì)阻塞加載了豺撑?CSS本來是可以并行下載的,在什么情況下會(huì)出現(xiàn)阻塞加載了(在測(cè)試觀察中黔牵,IE6下CSS都是阻塞加載)
當(dāng)CSS后面跟著嵌入的JS的時(shí)候聪轿,該CSS就會(huì)出現(xiàn)阻塞后面資源下載的情況。而當(dāng)把嵌入JS放到CSS前面猾浦,就不會(huì)出現(xiàn)阻塞的情況了陆错。
根本原因:因?yàn)闉g覽器會(huì)維持html中css和js的順序,樣式表必須在嵌入的JS執(zhí)行前先加載金赦、解析完音瓷。而嵌入的JS會(huì)阻塞后面的資源加載,所以就會(huì)出現(xiàn)上面CSS阻塞下載的情況夹抗。
嵌入JS應(yīng)該放在什么位置绳慎?
1、放在底部兔朦,雖然放在底部照樣會(huì)阻塞所有呈現(xiàn)偷线,但不會(huì)阻塞資源下載。
2沽甥、如果嵌入JS放在head中,請(qǐng)把嵌入JS放在CSS頭部乏奥。
3摆舟、使用defer(只支持IE)
4、不要在嵌入的JS中調(diào)用運(yùn)行時(shí)間較長的函數(shù)邓了,如果一定要用恨诱,可以用`setTimeout`來調(diào)用
Javascript無阻塞加載具體方式
將腳本放在底部。<link>還是放在head中骗炉,用以保證在js加載前照宝,能加載出正常顯示的頁面。<script>標(biāo)簽放在</body>前句葵。
成組腳本:由于每個(gè)<script>標(biāo)簽下載時(shí)阻塞頁面解析過程厕鹃,所以限制頁面的<script>總數(shù)也可以改善性能。適用于內(nèi)聯(lián)腳本和外部腳本乍丈。
非阻塞腳本:等頁面完成加載后剂碴,再加載js代碼。也就是轻专,在window.onload事件發(fā)出后開始下載代碼忆矛。
(1)defer屬性:支持IE4和fierfox3.5更高版本瀏覽器
(2)動(dòng)態(tài)腳本元素:文檔對(duì)象模型(DOM)允許你使用js動(dòng)態(tài)創(chuàng)建HTML的幾乎全部文檔內(nèi)容。代碼如下:
var?script=document.createElement("script");
script.type="text/javascript";
script.src="file.js";
document.getElementsByTagName("head")[0].appendChild(script);
此技術(shù)的重點(diǎn)在于:無論在何處啟動(dòng)下載请垛,文件額下載和運(yùn)行都不會(huì)阻塞其他頁面處理過程催训。即使在head里(除了用于下載文件的http鏈接)洽议。
閉包相關(guān)問題?
詳情請(qǐng)見:詳解js閉包
js事件處理程序問題漫拭?
詳情請(qǐng)見:JavaScript學(xué)習(xí)總結(jié)(九)事件詳解
eval是做什么的亚兄?
它的功能是把對(duì)應(yīng)的字符串解析成JS代碼并運(yùn)行;
應(yīng)該避免使用eval嫂侍,不安全儿捧,非常耗性能(2次,一次解析成js語句挑宠,一次執(zhí)行)菲盾。
JavaScript原型,原型鏈 ? 有什么特點(diǎn)各淀?
*??原型對(duì)象也是普通的對(duì)象懒鉴,是對(duì)象一個(gè)自帶隱式的?__proto__?屬性,原型也有可能有自己的原型碎浇,如果一個(gè)原型對(duì)象的原型不為null的話临谱,我們就稱之為原型鏈。
*??原型鏈?zhǔn)怯梢恍┯脕砝^承和共享屬性的對(duì)象組成的(有限的)對(duì)象鏈奴璃。
事件悉默、IE與火狐的事件機(jī)制有什么區(qū)別?如何阻止冒泡苟穆?
1. 我們?cè)诰W(wǎng)頁中的某個(gè)操作(有的操作對(duì)應(yīng)多個(gè)事件)抄课。例如:當(dāng)我們點(diǎn)擊一個(gè)按鈕就會(huì)產(chǎn)生一個(gè)事件。是可以被 JavaScript 偵測(cè)到的行為雳旅。
2. 事件處理機(jī)制:IE是事件冒泡跟磨、firefox同時(shí)支持兩種事件模型,也就是:捕獲型事件和冒泡型事件攒盈。抵拘;
3.??ev.stopPropagation();注意舊ie的方法?ev.cancelBubble?=true;
ajax 是什么?ajax 的交互模型?同步和異步的區(qū)別?如何解決跨域問題?
詳情請(qǐng)見:JavaScript學(xué)習(xí)總結(jié)(七)Ajax和Http狀態(tài)字
1.?通過異步模式,提升了用戶體驗(yàn)
2.?優(yōu)化了瀏覽器和服務(wù)器之間的傳輸型豁,減少不必要的數(shù)據(jù)往返僵蛛,減少了帶寬占用
3. Ajax在客戶端運(yùn)行,承擔(dān)了一部分本來由服務(wù)器承擔(dān)的工作偷遗,減少了大用戶量下的服務(wù)器負(fù)載墩瞳。
2. Ajax的最大的特點(diǎn)是什么。
Ajax可以實(shí)現(xiàn)動(dòng)態(tài)不刷新(局部刷新)
readyState屬性?狀態(tài)?有5個(gè)可取值:?0=未初始化?氏豌,1=啟動(dòng) 2=發(fā)送喉酌,3=接收,4=完成
ajax的缺點(diǎn)
1、ajax不支持瀏覽器back按鈕泪电。
2般妙、安全問題 AJAX暴露了與服務(wù)器交互的細(xì)節(jié)。
3相速、對(duì)搜索引擎的支持比較弱碟渺。
4、破壞了程序的異常機(jī)制突诬。
5苫拍、不容易調(diào)試。
跨域:jsonp旺隙、 iframe绒极、window.name、window.postMessage蔬捷、服務(wù)器上設(shè)置代理頁面
js對(duì)象的深度克隆
functionclone(Obj)?{
var?buf;
if(Obj?instanceof?Array)?{
buf?=?[];??//創(chuàng)建一個(gè)空的數(shù)組
var?i?=?Obj.length;
while(i--)?{
buf[i]?=clone(Obj[i]);
}
returnbuf;
}elseif(Obj?instanceof?Object){
buf?=?{};??//創(chuàng)建一個(gè)空對(duì)象
for(var?kinObj)?{??//為這個(gè)對(duì)象添加新的屬性
buf[k]?=clone(Obj[k]);
}
returnbuf;
}else{
returnObj;
}
}
AMD和CMD 規(guī)范的區(qū)別垄提?
詳情請(qǐng)見:詳解JavaScript模塊化開發(fā)
網(wǎng)站重構(gòu)的理解?
網(wǎng)站重構(gòu):在不改變外部行為的前提下周拐,簡化結(jié)構(gòu)铡俐、添加可讀性,而在網(wǎng)站前端保持一致的行為妥粟。也就是說是在不改變UI的情況下审丘,對(duì)網(wǎng)站進(jìn)行優(yōu)化,在擴(kuò)展的同時(shí)保持一致的UI勾给。
對(duì)于傳統(tǒng)的網(wǎng)站來說重構(gòu)通常是:
表格(table)布局改為DIV+CSS
使網(wǎng)站前端兼容于現(xiàn)代瀏覽器(針對(duì)于不合規(guī)范的CSS备恤、如對(duì)IE6有效的)
對(duì)于移動(dòng)平臺(tái)的優(yōu)化
針對(duì)于SEO進(jìn)行優(yōu)化
深層次的網(wǎng)站重構(gòu)應(yīng)該考慮的方面
減少代碼間的耦合
讓代碼保持彈性
嚴(yán)格按規(guī)范編寫代碼
設(shè)計(jì)可擴(kuò)展的API
代替舊有的框架、語言(如VB)
增強(qiáng)用戶體驗(yàn)
通常來說對(duì)于速度的優(yōu)化也包含在重構(gòu)中
壓縮JS锦秒、CSS、image等前端資源(通常是由服務(wù)器來解決)
程序的性能優(yōu)化(如數(shù)據(jù)讀寫)
采用CDN來加速資源加載
對(duì)于JS?DOM的優(yōu)化
HTTP服務(wù)器的文件緩存
如何獲取UA喉镰?
functionwhatBrowser()?{
document.Browser.Name.value=navigator.appName;
document.Browser.Version.value=navigator.appVersion;
document.Browser.Code.value=navigator.appCodeName;
document.Browser.Agent.value=navigator.userAgent;
}
js數(shù)組去重
以下是數(shù)組去重的三種方法:
Array.prototype.unique1?=function()?{
var?n?=?[];?//一個(gè)新的臨時(shí)數(shù)組
for(var?i?=?0;?i?<?this.length;?i++)?//遍歷當(dāng)前數(shù)組
{
//如果當(dāng)前數(shù)組的第i已經(jīng)保存進(jìn)了臨時(shí)數(shù)組旅择,那么跳過,
//否則把當(dāng)前項(xiàng)push到臨時(shí)數(shù)組里面
if(n.indexOf(this[i])?==?-1)?n.push(this[i]);
}
returnn;
}
Array.prototype.unique2?=function()
{
var?n?=?{},r=[];?//n為hash表侣姆,r為臨時(shí)數(shù)組
for(var?i?=?0;?i?<?this.length;?i++)?//遍歷當(dāng)前數(shù)組
{
if(!n[this[i]])?//如果hash表中沒有當(dāng)前項(xiàng)
{
n[this[i]]?=true;?//存入hash表
r.push(this[i]);?//把當(dāng)前數(shù)組的當(dāng)前項(xiàng)push到臨時(shí)數(shù)組里面
}
}
returnr;
}
Array.prototype.unique3?=function()
{
var?n?=?[this[0]];?//結(jié)果數(shù)組
for(var?i?=?1;?i?<?this.length;?i++)?//從第二項(xiàng)開始遍歷
{
//如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i生真,
//那么表示第i項(xiàng)是重復(fù)的,忽略掉捺宗。否則存入結(jié)果數(shù)組
if(this.indexOf(this[i])?==?i)?n.push(this[i]);
}
returnn;
}
HTTP狀態(tài)碼
100??Continue??繼續(xù)柱蟀,一般在發(fā)送post請(qǐng)求時(shí),已發(fā)送了http?header之后服務(wù)端將返回此信息蚜厉,表示確認(rèn)长已,之后發(fā)送具體參數(shù)信息
200??OK???正常返回信息
201??Created??請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源
202??Accepted??服務(wù)器已接受請(qǐng)求,但尚未處理
301? Moved Permanently ?請(qǐng)求的網(wǎng)頁已永久移動(dòng)到新位置。
302 Found ?臨時(shí)性重定向术瓮。
303 See Other ?臨時(shí)性重定向康聂,且總是使用 GET 請(qǐng)求新的 URI。
304? Not Modified ?自從上次請(qǐng)求后胞四,請(qǐng)求的網(wǎng)頁未修改過恬汁。
400 Bad Request ?服務(wù)器無法理解請(qǐng)求的格式,客戶端不應(yīng)當(dāng)嘗試再次使用相同的內(nèi)容發(fā)起請(qǐng)求辜伟。
401 Unauthorized ?請(qǐng)求未授權(quán)氓侧。
403 Forbidden ?禁止訪問。
404 Not Found ?找不到如何與 URI 相匹配的資源导狡。
500 Internal Server Error ?最常見的服務(wù)器端錯(cuò)誤约巷。
503 Service Unavailable 服務(wù)器端暫時(shí)無法處理請(qǐng)求(可能是過載或維護(hù))。
js操作獲取和設(shè)置cookie
//創(chuàng)建cookie
functionsetCookie(name,?value,?expires,?path,?domain,?secure)?{
var?cookieText?=?encodeURIComponent(name)?+'='+?encodeURIComponent(value);
if(expires?instanceof?Date)?{
cookieText?+=';?expires='+?expires;
}
if(path)?{
cookieText?+=';?expires='+?expires;
}
if(domain)?{
cookieText?+=';?domain='+?domain;
}
if(secure)?{
cookieText?+=';?secure';
}
document.cookie?=?cookieText;
}
//獲取cookie
functiongetCookie(name)?{
var?cookieName?=?encodeURIComponent(name)?+'=';
var?cookieStart?=?document.cookie.indexOf(cookieName);
var?cookieValue?=?null;
if(cookieStart?>?-1)?{
var?cookieEnd?=?document.cookie.indexOf(';',?cookieStart);
if(cookieEnd?==?-1)?{
cookieEnd?=?document.cookie.length;
}
cookieValue?=?decodeURIComponent(document.cookie.substring(cookieStart?+?cookieName.length,?cookieEnd));
}
returncookieValue;
}
//刪除cookie
functionunsetCookie(name)?{
document.cookie?=?name?+"=?;?expires="+?new?Date(0);
}
說說TCP傳輸?shù)娜挝帐植呗?/p>
為了準(zhǔn)確無誤地把數(shù)據(jù)送達(dá)目標(biāo)處烘豌,TCP協(xié)議采用了三次握手策略载庭。用TCP協(xié)議把數(shù)據(jù)包送出去后,TCP不會(huì)對(duì)傳送??后的情況置之不理廊佩,它一定會(huì)向?qū)Ψ酱_認(rèn)是否成功送達(dá)囚聚。握手過程中使用了TCP的標(biāo)志:SYN和ACK。
發(fā)送端首先發(fā)送一個(gè)帶SYN標(biāo)志的數(shù)據(jù)包給對(duì)方标锄。接收端收到后顽铸,回傳一個(gè)帶有SYN/ACK標(biāo)志的數(shù)據(jù)包以示傳達(dá)確認(rèn)信息。最后料皇,發(fā)送端再回傳一個(gè)帶ACK標(biāo)志的數(shù)據(jù)包谓松,代表“握手”結(jié)束
若在握手過程中某個(gè)階段莫名中斷,TCP協(xié)議會(huì)再次以相同的順序發(fā)送相同的數(shù)據(jù)包践剂。
說說你對(duì)Promise的理解
依照Promise/A+的定義鬼譬,Promise有四種狀態(tài):
pending:?初始狀態(tài),?非?fulfilled?或?rejected.
fulfilled:?成功的操作.
rejected:?失敗的操作.
settled:?Promise已被fulfilled或rejected,且不是pending
另外逊脯,fulfilled與rejected一起合稱settled优质。
Promise對(duì)象用來進(jìn)行延遲(deferred) 和異步(asynchronous ) 計(jì)算。
Promise 的構(gòu)造函數(shù)
構(gòu)造一個(gè)Promise军洼,最基本的用法如下:
var?promise?=?new?Promise(function(resolve,?reject)?{
if(...)?{??//?succeed
resolve(result);
}else{???//?fails
reject(Error(errMessage));
}
});
Promise實(shí)例擁有then方法(具有then方法的對(duì)象巩螃,通常被稱為thenable)。它的使用方法如下:
promise.then(onFulfilled,?onRejected)
接收兩個(gè)函數(shù)作為參數(shù)匕争,一個(gè)在fulfilled的時(shí)候被調(diào)用避乏,一個(gè)在rejected的時(shí)候被調(diào)用,接收參數(shù)就是future甘桑,onFulfilled對(duì)應(yīng)resolve,onRejected對(duì)應(yīng)reject拍皮。
Javascript垃圾回收方法
標(biāo)記清除(mark and sweep)
這是JavaScript最常見的垃圾回收方式歹叮,當(dāng)變量進(jìn)入執(zhí)行環(huán)境的時(shí)候,比如函數(shù)中聲明一個(gè)變量春缕,垃圾回收器將其標(biāo)記為“進(jìn)入環(huán)境”盗胀,當(dāng)變量離開環(huán)境的時(shí)候(函數(shù)執(zhí)行結(jié)束)將其標(biāo)記為“離開環(huán)境”。
垃圾回收器會(huì)在運(yùn)行的時(shí)候給存儲(chǔ)在內(nèi)存中的所有變量加上標(biāo)記锄贼,然后去掉環(huán)境中的變量以及被環(huán)境中變量所引用的變量(閉包)票灰,在這些完成之后仍存在標(biāo)記的就是要?jiǎng)h除的變量了
引用計(jì)數(shù)(reference counting)
在低版本IE中經(jīng)常會(huì)出現(xiàn)內(nèi)存泄露,很多時(shí)候就是因?yàn)槠洳捎靡糜?jì)數(shù)方式進(jìn)行垃圾回收宅荤。引用計(jì)數(shù)的策略是跟蹤記錄每個(gè)值被使用的次數(shù)屑迂,當(dāng)聲明了一個(gè) 變量并將一個(gè)引用類型賦值給該變量的時(shí)候這個(gè)值的引用次數(shù)就加1,如果該變量的值變成了另外一個(gè)冯键,則這個(gè)值得引用次數(shù)減1惹盼,當(dāng)這個(gè)值的引用次數(shù)變?yōu)?的時(shí) 候,說明沒有變量在使用惫确,這個(gè)值沒法被訪問了手报,因此可以將其占用的空間回收,這樣垃圾回收器會(huì)在運(yùn)行的時(shí)候清理掉引用次數(shù)為0的值占用的空間改化。
在IE中雖然JavaScript對(duì)象通過標(biāo)記清除的方式進(jìn)行垃圾回收掩蛤,但BOM與DOM對(duì)象卻是通過引用計(jì)數(shù)回收垃圾的,也就是說只要涉及BOM及DOM就會(huì)出現(xiàn)循環(huán)引用問題陈肛。
談?wù)勑阅軆?yōu)化問題
代碼層面:避免使用css表達(dá)式揍鸟,避免使用高級(jí)選擇器,通配選擇器句旱。
緩存利用:緩存Ajax阳藻,使用CDN,使用外部js和css文件以便緩存谈撒,添加Expires頭腥泥,服務(wù)端配置Etag,減少DNS查找等
請(qǐng)求數(shù)量:合并樣式和腳本啃匿,使用css圖片精靈道川,初始首屏之外的圖片資源按需加載,靜態(tài)資源延遲加載立宜。
請(qǐng)求帶寬:壓縮文件,開啟GZIP臊岸,
移動(dòng)端性能優(yōu)化
盡量使用css3動(dòng)畫橙数,開啟硬件加速。適當(dāng)使用touch事件代替click事件帅戒。避免使用css3漸變陰影效果灯帮。
盡可能少的使用box-shadow與gradients崖技。box-shadow與gradients往往都是頁面的性能殺手
什么是Etag?
瀏覽器下載組件的時(shí)候钟哥,會(huì)將它們存儲(chǔ)到瀏覽器緩存中迎献。如果需要再次獲取相同的組件,瀏覽器將檢查組件的緩存時(shí)間腻贰,
假如已經(jīng)過期吁恍,那么瀏覽器將發(fā)送一個(gè)條件GET請(qǐng)求到服務(wù)器,服務(wù)器判斷緩存還有效播演,則發(fā)送一個(gè)304響應(yīng)冀瓦,
告訴瀏覽器可以重用緩存組件。
那么服務(wù)器是根據(jù)什么判斷緩存是否還有效呢?答案有兩種方式写烤,一種是前面提到的ETag翼闽,另一種是根據(jù)Last-Modified
Expires和Cache-Control
Expires要求客戶端和服務(wù)端的時(shí)鐘嚴(yán)格同步。HTTP1.1引入Cache-Control來克服Expires頭的限制洲炊。如果max-age和Expires同時(shí)出現(xiàn)感局,則max-age有更高的優(yōu)先級(jí)。
Cache-Control:?no-cache,?private,?max-age=0
ETag:?abcde
Expires:?Thu,?15?Apr?2014?20:00:00?GMT
Pragma:?private
Last-Modified:$now//?RFC1123?format
棧和隊(duì)列的區(qū)別?
棧的插入和刪除操作都是在一端進(jìn)行的暂衡,而隊(duì)列的操作卻是在兩端進(jìn)行的询微。
隊(duì)列先進(jìn)先出,棧先進(jìn)后出古徒。
棧只允許在表尾一端進(jìn)行插入和刪除拓提,而隊(duì)列只允許在表尾一端進(jìn)行插入,在表頭一端進(jìn)行刪除
棧和堆的區(qū)別隧膘?
棧區(qū)(stack)—???由編譯器自動(dòng)分配釋放???代态,存放函數(shù)的參數(shù)值,局部變量的值等疹吃。
堆區(qū)(heap)???—???一般由程序員分配釋放蹦疑,???若程序員不釋放,程序結(jié)束時(shí)可能由OS回收萨驶。
堆(數(shù)據(jù)結(jié)構(gòu)):堆可以被看成是一棵樹歉摧,如:堆排序;
棧(數(shù)據(jù)結(jié)構(gòu)):一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)腔呜。
關(guān)于Http 2.0 你知道多少叁温?
HTTP/2引入了“服務(wù)端推(serverpush)”的概念,它允許服務(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ì)占用很小比例的帶寬。