1. 常用那幾種瀏覽器測(cè)試?有哪些內(nèi)核(Layout Engine)?
(Q1) 瀏覽器:IE辽社,Chrome,F(xiàn)ireFox翘鸭,Safari滴铅,Opera。
(Q2) 內(nèi)核:Trident矮固,Gecko失息,Presto,Webkit档址。
2. 說(shuō)下行內(nèi)元素和塊級(jí)元素的區(qū)別盹兢?行內(nèi)塊元素的兼容性使用?(IE8 以下)
(Q1) 行內(nèi)元素:會(huì)在水平方向排列守伸,不能包含塊級(jí)元素绎秒,設(shè)置width無(wú)效,height無(wú)效(可以設(shè)置line-height)尼摹,margin上下無(wú)效见芹,padding上下無(wú)效。
塊級(jí)元素:各占據(jù)一行蠢涝,垂直方向排列玄呛。從新行開(kāi)始結(jié)束接著一個(gè)斷行。
(Q2) 兼容性:display:inline-block;*display:inline;*zoom:1;
3. 清除浮動(dòng)有哪些方式和二?比較好的方式是哪一種徘铝?
(Q1)
(1)父級(jí)div定義height。
(2)結(jié)尾處加空div標(biāo)簽clear:both惯吕。
(3)父級(jí)div定義偽類(lèi):after和zoom惕它。
(4)父級(jí)div定義overflow:hidden。
(5)父級(jí)div定義overflow:auto废登。
(6)父級(jí)div也浮動(dòng)淹魄,需要定義寬度。
(7)父級(jí)div定義display:table堡距。
(8)結(jié)尾處加br標(biāo)簽clear:both甲锡。
(Q2) 比較好的是第3種方式兆蕉,好多網(wǎng)站都這么用。
4. box-sizing常用的屬性有哪些搔体?分別有什么作用恨樟?
(Q1)box-sizing: content-box|border-box|inherit;
(Q2)content-box:寬度和高度分別應(yīng)用到元素的內(nèi)容框。在寬度和高度之外繪制元素的內(nèi)邊距和邊框(元素默認(rèn)效果)疚俱。
border-box:元素指定的任何內(nèi)邊距和邊框都將在已設(shè)定的寬度和高度內(nèi)進(jìn)行繪制劝术。通過(guò)從已設(shè)定的寬度和高度分別減去邊框和內(nèi)邊距才能得到內(nèi)容的寬度和高度。
5. Doctype作用呆奕?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?
(Q1) 告知瀏覽器的解析器用什么文檔標(biāo)準(zhǔn)解析這個(gè)文檔养晋。DOCTYPE不存在或格式不正確會(huì)導(dǎo)致文檔以兼容模式呈現(xiàn)。
(Q2) 標(biāo)準(zhǔn)模式的排版和JS運(yùn)作模式都是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行梁钾。在兼容模式中绳泉,頁(yè)面以寬松的向后兼容的方式顯示,模擬老式瀏覽器的行為以防止站點(diǎn)無(wú)法工作。
6. HTML5 為什么只需要寫(xiě) 姆泻?
HTML5不基于 SGML零酪,因此不需要對(duì)DTD進(jìn)行引用,但是需要doctype來(lái)規(guī)范瀏覽器的行為(讓瀏覽器按照它們應(yīng)該的方式來(lái)運(yùn)行)拇勃。
而HTML4.01基于SGML,所以需要對(duì)DTD進(jìn)行引用四苇,才能告知瀏覽器文檔所使用的文檔類(lèi)型。
7. 頁(yè)面導(dǎo)入樣式時(shí)方咆,使用link和@import有什么區(qū)別月腋?
(1)link屬于XHTML標(biāo)簽,除了加載CSS外瓣赂,還能用于定義RSS, 定義rel連接屬性等作用榆骚;而@import是CSS提供的,只能用于加載CSS;
(2)頁(yè)面被加載的時(shí)煌集,link會(huì)同時(shí)被加載妓肢,而@import引用的CSS會(huì)等到頁(yè)面被加載完再加載;
(3)import是CSS2.1 提出的,只在IE5以上才能被識(shí)別苫纤,而link是XHTML標(biāo)簽职恳,無(wú)兼容問(wèn)題。
8. 介紹一下你對(duì)瀏覽器內(nèi)核的理解方面?
主要分成兩部分:渲染引擎(layout engineer或RenderingEngine)和JS引擎。
渲染引擎:負(fù)責(zé)取得網(wǎng)頁(yè)的內(nèi)容(HTML色徘、XML恭金、圖像等等)、我們組建一大牛裙前面是4七一褂策,整理訊息(例如加入CSS等)横腿,中間是零2七颓屑,以及計(jì)算網(wǎng)頁(yè)的顯示方式,后面是壹武四耿焊,是學(xué)習(xí)的就加揪惦,不是學(xué)習(xí)的請(qǐng)勿打擾。然后會(huì)輸出至顯示器或打印機(jī)罗侯。瀏覽器的內(nèi)核的不同對(duì)于網(wǎng)頁(yè)的語(yǔ)法解釋會(huì)有不同器腋,所以渲染的效果也不相同。所有網(wǎng)頁(yè)瀏覽器钩杰、電子郵件客戶端以及其它需要編輯纫塌、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核。
JS引擎則:解析和執(zhí)行javascript來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)效果讲弄。
最開(kāi)始渲染引擎和JS引擎并沒(méi)有區(qū)分的很明確措左,后來(lái)JS引擎越來(lái)越獨(dú)立,內(nèi)核就傾向于只指渲染引擎避除。
9. html5有哪些新特性怎披?如何處理HTML5新標(biāo)簽的瀏覽器兼容問(wèn)題?如何區(qū)分 HTML 和 HTML5瓶摆?
(Q1)
HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集凉逛,主要是關(guān)于圖像,位置赏壹,存儲(chǔ)鱼炒,多任務(wù)等功能的增加。
(1)繪畫(huà) canvas;
(2)用于媒介回放的 video 和 audio 元素;
(3)本地離線存儲(chǔ) localStorage 長(zhǎng)期存儲(chǔ)數(shù)據(jù)蝌借,瀏覽器關(guān)閉后數(shù)據(jù)不丟失;
(4)sessionStorage 的數(shù)據(jù)在瀏覽器關(guān)閉后自動(dòng)刪除;
(5)語(yǔ)意化更好的內(nèi)容元素昔瞧,比如 article、footer菩佑、header自晰、nav、section;
(6)表單控件稍坯,calendar酬荞、date、time瞧哟、email混巧、url、search;
(7)新的技術(shù)webworker, websocket, Geolocation;
(Q2)
IE8/IE7/IE6支持通過(guò)document.createElement方法產(chǎn)生的標(biāo)簽勤揩,
可以利用這一特性讓這些瀏覽器支持HTML5新標(biāo)簽咧党,
瀏覽器支持新標(biāo)簽后,還需要添加標(biāo)簽?zāi)J(rèn)的樣式陨亡。
當(dāng)然也可以直接使用成熟的框架傍衡、比如html5shim深员,
10. 簡(jiǎn)述一下你對(duì)HTML語(yǔ)義化的理解?
用正確的標(biāo)簽做正確的事情蛙埂。
html語(yǔ)義化讓頁(yè)面的內(nèi)容結(jié)構(gòu)化倦畅,結(jié)構(gòu)更清晰,便于對(duì)瀏覽器绣的、搜索引擎解析;
即使在沒(méi)有樣式CSS情況下也以一種文檔格式顯示叠赐,并且是容易閱讀的;
搜索引擎的爬蟲(chóng)也依賴(lài)于HTML標(biāo)記來(lái)確定上下文和各個(gè)關(guān)鍵字的權(quán)重,利于SEO;
使閱讀源代碼的人對(duì)網(wǎng)站更容易將網(wǎng)站分塊被辑,便于閱讀維護(hù)理解燎悍。
JavaScript
----------------------------
1. 介紹js的基本數(shù)據(jù)類(lèi)型
Undefined、Null盼理、Boolean谈山、Number、String
2. js有哪些內(nèi)置對(duì)象宏怔?
數(shù)據(jù)封裝類(lèi)對(duì)象:Object奏路、Array、Boolean臊诊、Number 和 String
其他對(duì)象:Function鸽粉、Arguments、Math抓艳、Date触机、RegExp、Error
3. this對(duì)象的理解
this總是指向函數(shù)的直接調(diào)用者(而非間接調(diào)用者)玷或;
如果有new關(guān)鍵字儡首,this指向new出來(lái)的那個(gè)對(duì)象;
在事件中偏友,this指向觸發(fā)這個(gè)事件的對(duì)象蔬胯,特殊的是,IE中的attachEvent中的this總是指向全局對(duì)象Window位他。
4. eval是做什么的氛濒?
它的功能是把對(duì)應(yīng)的字符串解析成JS代碼并運(yùn)行;
應(yīng)該避免使用eval鹅髓,不安全舞竿,非常耗性能(2次,一次解析成js語(yǔ)句窿冯,一次執(zhí)行)骗奖。
由JSON字符串轉(zhuǎn)換為JSON對(duì)象的時(shí)候可以用eval,var obj=eval('('+ str +')')。
5. DOM怎樣添加重归、移除、移動(dòng)厦凤、復(fù)制鼻吮、創(chuàng)建和查找節(jié)點(diǎn)
// 創(chuàng)建新節(jié)點(diǎn)
createDocumentFragment()? ? //創(chuàng)建一個(gè)DOM片段
createElement()? //創(chuàng)建一個(gè)具體的元素
createTextNode()? //創(chuàng)建一個(gè)文本節(jié)點(diǎn)
// 添加、移除较鼓、替換椎木、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子節(jié)點(diǎn)前插入一個(gè)新的子節(jié)點(diǎn)
// 查找
getElementsByTagName()? ? //通過(guò)標(biāo)簽名稱(chēng)
getElementsByName()? ? //通過(guò)元素的Name屬性的值(IE容錯(cuò)能力較強(qiáng),會(huì)得到一個(gè)數(shù)組博烂,其中包括id等于name值的)
getElementById()? ? //通過(guò)元素Id香椎,唯一性
6. null和undefined的區(qū)別?
null是一個(gè)表示"無(wú)"的對(duì)象禽篱,轉(zhuǎn)為數(shù)值時(shí)為0畜伐;undefined是一個(gè)表示"無(wú)"的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN躺率。
undefined:
(1)變量被聲明了玛界,但沒(méi)有賦值時(shí),就等于undefined悼吱。
(2) 調(diào)用函數(shù)時(shí)慎框,應(yīng)該提供的參數(shù)沒(méi)有提供,該參數(shù)等于undefined后添。
(3)對(duì)象沒(méi)有賦值的屬性笨枯,該屬性的值為undefined。
(4)函數(shù)沒(méi)有返回值時(shí)遇西,默認(rèn)返回undefined馅精。
null:
(1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對(duì)象努溃。
(2) 作為對(duì)象原型鏈的終點(diǎn)硫嘶。
7. new操作符具體干了什么呢?
(1)創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象梧税,同時(shí)還繼承了該函數(shù)的原型沦疾。
(2)屬性和方法被加入到 this 引用的對(duì)象中。
(3)新創(chuàng)建的對(duì)象由 this 所引用第队,并且最后隱式的返回 this 哮塞。
8. JSON 的了解?
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式凳谦。它是基于JavaScript的一個(gè)子集忆畅。數(shù)據(jù)格式簡(jiǎn)單, 易于讀寫(xiě), 占用帶寬小。
格式:采用鍵值對(duì)尸执,例如:{'age':'12', 'name':'back'}
9. call() 和 apply() 的區(qū)別和作用家凯?
apply()函數(shù)有兩個(gè)參數(shù):第一個(gè)參數(shù)是上下文缓醋,第二個(gè)參數(shù)是參數(shù)組成的數(shù)組。如果上下文是null绊诲,則使用全局對(duì)象代替送粱。
如:function.apply(this,[1,2,3]);
call()的第一個(gè)參數(shù)是上下文,后續(xù)是實(shí)例傳入的參數(shù)序列掂之。
如:function.call(this,1,2,3);
10. 如何獲取UA抗俄?
function whatBrowser() {
document.Browser.Name.value=navigator.appName;
document.Browser.Version.value=navigator.appVersion;
document.Browser.Code.value=navigator.appCodeName;
document.Browser.Agent.value=navigator.userAgent;
}
其他
----------------------------
1. 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)頁(yè)已永久移動(dòng)到新位置。
302 Found? 臨時(shí)性重定向裆馒。
303 See Other? 臨時(shí)性重定向姊氓,且總是使用 GET 請(qǐng)求新的 URI。
304? Not Modified? 自從上次請(qǐng)求后喷好,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò)翔横。
400 Bad Request? 服務(wù)器無(wú)法理解請(qǐng)求的格式,客戶端不應(yīng)當(dāng)嘗試再次使用相同的內(nèi)容發(fā)起請(qǐng)求梗搅。
401 Unauthorized? 請(qǐng)求未授權(quán)禾唁。
403 Forbidden? 禁止訪問(wèn)。
404 Not Found? 找不到如何與 URI 相匹配的資源无切。
500 Internal Server Error? 最常見(jiàn)的服務(wù)器端錯(cuò)誤荡短。
503 Service Unavailable 服務(wù)器端暫時(shí)無(wú)法處理請(qǐng)求(可能是過(guò)載或維護(hù))。
2. 你有哪些性能優(yōu)化的方法哆键?
(1) 減少http請(qǐng)求次數(shù):CSS Sprites, JS掘托、CSS源碼壓縮、圖片大小控制合適籍嘹;網(wǎng)頁(yè)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é)果。減少I(mǎi)O讀取操作孕荠。
(6) 避免使用CSS Expression(css表達(dá)式)又稱(chēng)Dynamic properties(動(dòng)態(tài)屬性)。
(7) 圖片預(yù)加載攻谁,將樣式表放在頂部稚伍,將腳本放在底部? 加上時(shí)間戳。
3. 什么叫優(yōu)雅降級(jí)和漸進(jìn)增強(qiáng)戚宦?
優(yōu)雅降級(jí):Web站點(diǎn)在所有新式瀏覽器中都能正常工作个曙,如果用戶使用的是老式瀏覽器,則代碼會(huì)檢查以確認(rèn)它們是否能正常工作受楼。由于IE獨(dú)特的盒模型布局問(wèn)題垦搬,針對(duì)不同版本的IE的hack實(shí)踐過(guò)優(yōu)雅降級(jí)了,為那些無(wú)法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級(jí)體驗(yàn)卻不至于完全失效艳汽。
漸進(jìn)增強(qiáng):從被所有瀏覽器支持的基本功能開(kāi)始猴贰,逐步地添加那些只有新式瀏覽器才支持的功能,向頁(yè)面增加無(wú)害于基礎(chǔ)瀏覽器的額外樣式和功能的。當(dāng)瀏覽器支持時(shí)河狐,它們會(huì)自動(dòng)地呈現(xiàn)出來(lái)并發(fā)揮作用米绕。
4. 哪些常見(jiàn)操作會(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))。
5. 線程與進(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ū)別。