- 常用那幾種瀏覽器測(cè)試?有哪些內(nèi)核(Layout Engine)?(Q1) 瀏覽器:IE,Chrome,F(xiàn)ireFox,Safari,Opera。(Q2) 內(nèi)核:Trident,Gecko,Presto,Webkit。2. 說下行內(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ù)一行,垂直方向排列。從新行開始結(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定義偽類: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)行繪制。通過從已設(shè)定的寬度和高度分別減去邊框和內(nèi)邊距才能得到內(nèi)容的寬度和高度。5. Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?(Q1) <!DOCTYPE>告知瀏覽器的解析器用什么文檔標(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 為什么只需要寫 <!DOCTYPE HTML>?HTML5不基于 SGML,因此不需要對(duì)DTD進(jìn)行引用,但是需要doctype來規(guī)范瀏覽器的行為(讓瀏覽器按照它們應(yīng)該的方式來運(yùn)行)。而HTML4.01基于SGML,所以需要對(duì)DTD進(jìn)行引用,才能告知瀏覽器文檔所使用的文檔類型。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ú)兼容問題。8. 介紹一下你對(duì)瀏覽器內(nèi)核的理解?主要分成兩部分:渲染引擎(layout engineer或Rendering Engine)和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來實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)效果。最開始渲染引擎和JS引擎并沒有區(qū)分的很明確,后來JS引擎越來越獨(dú)立,內(nèi)核就傾向于只指渲染引擎。9. html5有哪些新特性?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分 HTML 和 HTML5?(Q1) HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲(chǔ),多任務(wù)等功能的增加。(1)繪畫 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支持通過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ì)瀏覽器、搜索引擎解析;即使在沒有樣式CSS情況下也以一種文檔格式顯示,并且是容易閱讀的;搜索引擎的爬蟲也依賴于HTML標(biāo)記來確定上下文和各個(gè)關(guān)鍵字的權(quán)重,利于SEO;使閱讀源代碼的人對(duì)網(wǎng)站更容易將網(wǎng)站分塊,便于閱讀維護(hù)理解。JavaScript----------------------------1. 介紹js的基本數(shù)據(jù)類型Undefined、Null、Boolean、Number、String2. js有哪些內(nèi)置對(duì)象?數(shù)據(jù)封裝類對(duì)象:Object、Array、Boolean、Number 和 String其他對(duì)象:Function、Arguments、Math、Date、RegExp、Error3. this對(duì)象的理解this總是指向函數(shù)的直接調(diào)用者(而非間接調(diào)用者);如果有new關(guān)鍵字,this指向new出來的那個(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() //通過標(biāo)簽名稱getElementsByName() //通過元素的Name屬性的值(IE容錯(cuò)能力較強(qiáng),會(huì)得到一個(gè)數(shù)組,其中包括id等于name值的)getElementById() //通過元素Id,唯一性6. null和undefined的區(qū)別?null是一個(gè)表示"無(wú)"的對(duì)象,轉(zhuǎn)為數(shù)值時(shí)為0;undefined是一個(gè)表示"無(wú)"的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN。undefined:(1)變量被聲明了,但沒有賦值時(shí),就等于undefined。(2) 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。(3)對(duì)象沒有賦值的屬性,該屬性的值為undefined。(4)函數(shù)沒有返回值時(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)單, 易于讀寫, 占用帶寬小。格式:采用鍵值對(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è)未修改過。400 Bad Request 服務(wù)器無(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í)無(wú)法處理請(qǐng)求(可能是過載或維護(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é)果。減少IO讀取操作。(6) 避免使用CSS Expression(css表達(dá)式)又稱Dynamic properties(動(dòng)態(tài)屬性)。(7) 圖片預(yù)加載,將樣式表放在頂部,將腳本放在底部 加上時(shí)間戳。3. 什么叫優(yōu)雅降級(jí)和漸進(jìn)增強(qiáng)??jī)?yōu)雅降級(jí):Web站點(diǎn)在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器,則代碼會(huì)檢查以確認(rèn)它們是否能正常工作。由于IE獨(dú)特的盒模型布局問題,針對(duì)不同版本的IE的hack實(shí)踐過優(yōu)雅降級(jí)了,為那些無(wú)法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級(jí)體驗(yàn)卻不至于完全失效。漸進(jìn)增強(qiáng):從被所有瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁(yè)面增加無(wú)害于基礎(chǔ)瀏覽器的額外樣式和功能的。當(dāng)瀏覽器支持時(shí),它們會(huì)自動(dòng)地呈現(xiàn)出來并發(fā)揮作用。4. 哪些常見操作會(huì)造成內(nèi)存泄漏??jī)?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))。5. 線程與進(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ū)別。
想做個(gè)被大神提攜的小小程序員。