- 常用那幾種瀏覽器測試?有哪些內(nèi)核(Layout Engine)?(Q1) 瀏覽器:IE,Chrome镇辉,F(xiàn)ireFox,Safari贴捡,Opera忽肛。(Q2) 內(nèi)核:Trident,Gecko栈暇,Presto麻裁,Webkit箍镜。2. 說下行內(nèi)元素和塊級元素的區(qū)別源祈?行內(nèi)塊元素的兼容性使用?(IE8 以下)(Q1) 行內(nèi)元素:會在水平方向排列色迂,不能包含塊級元素香缺,設(shè)置width無效,height無效(可以設(shè)置line-height)歇僧,margin上下無效图张,padding上下無效。塊級元素:各占據(jù)一行诈悍,垂直方向排列祸轮。從新行開始結(jié)束接著一個(gè)斷行。(Q2) 兼容性:display:inline-block;display:inline;zoom:1;3. 清除浮動有哪些方式侥钳?比較好的方式是哪一種适袜?(Q1)(1)父級div定義height。(2)結(jié)尾處加空div標(biāo)簽clear:both舷夺。(3)父級div定義偽類:after和zoom苦酱。(4)父級div定義overflow:hidden售貌。(5)父級div定義overflow:auto。(6)父級div也浮動疫萤,需要定義寬度颂跨。(7)父級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不存在或格式不正確會導(dǎo)致文檔以兼容模式呈現(xiàn)。(Q2) 標(biāo)準(zhǔn)模式的排版和JS運(yùn)作模式都是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行痕慢。在兼容模式中尚揣,頁面以寬松的向后兼容的方式顯示,模擬老式瀏覽器的行為以防止站點(diǎn)無法工作。6. HTML5 為什么只需要寫 <!DOCTYPE HTML>掖举?HTML5不基于 SGML快骗,因此不需要對DTD進(jìn)行引用,但是需要doctype來規(guī)范瀏覽器的行為(讓瀏覽器按照它們應(yīng)該的方式來運(yùn)行)塔次。而HTML4.01基于SGML,所以需要對DTD進(jìn)行引用方篮,才能告知瀏覽器文檔所使用的文檔類型。7. 頁面導(dǎo)入樣式時(shí)励负,使用link和@import有什么區(qū)別藕溅?(1)link屬于XHTML標(biāo)簽,除了加載CSS外继榆,還能用于定義RSS, 定義rel連接屬性等作用巾表;而@import是CSS提供的,只能用于加載CSS;(2)頁面被加載的時(shí)略吨,link會同時(shí)被加載集币,而@import引用的CSS會等到頁面被加載完再加載;(3)import是CSS2.1 提出的,只在IE5以上才能被識別翠忠,而link是XHTML標(biāo)簽鞠苟,無兼容問題。8. 介紹一下你對瀏覽器內(nèi)核的理解?主要分成兩部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎偶妖。渲染引擎:負(fù)責(zé)取得網(wǎng)頁的內(nèi)容(HTML姜凄、XML、圖像等等)趾访、我們組建一大牛裙前面是4七一态秧,整理訊息(例如加入CSS等),中間是零2七扼鞋,以及計(jì)算網(wǎng)頁的顯示方式申鱼,后面是壹武四,是學(xué)習(xí)的就加云头,不是學(xué)習(xí)的請勿打擾捐友。然后會輸出至顯示器或打印機(jī)。瀏覽器的內(nèi)核的不同對于網(wǎng)頁的語法解釋會有不同溃槐,所以渲染的效果也不相同匣砖。所有網(wǎng)頁瀏覽器、電子郵件客戶端以及其它需要編輯昏滴、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核猴鲫。JS引擎則:解析和執(zhí)行javascript來實(shí)現(xiàn)網(wǎ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)于圖像抚恒,位置,存儲豁陆,多任務(wù)等功能的增加柑爸。(1)繪畫 canvas;(2)用于媒介回放的 video 和 audio 元素;(3)本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失;(4)sessionStorage 的數(shù)據(jù)在瀏覽器關(guān)閉后自動刪除;(5)語意化更好的內(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. 簡述一下你對HTML語義化的理解?用正確的標(biāo)簽做正確的事情迂求。html語義化讓頁面的內(nèi)容結(jié)構(gòu)化碾盐,結(jié)構(gòu)更清晰,便于對瀏覽器揩局、搜索引擎解析;即使在沒有樣式CSS情況下也以一種文檔格式顯示毫玖,并且是容易閱讀的;搜索引擎的爬蟲也依賴于HTML標(biāo)記來確定上下文和各個(gè)關(guān)鍵字的權(quán)重,利于SEO;使閱讀源代碼的人對網(wǎng)站更容易將網(wǎng)站分塊凌盯,便于閱讀維護(hù)理解孕豹。JavaScript----------------------------1. 介紹js的基本數(shù)據(jù)類型Undefined、Null十气、Boolean励背、Number、String2. js有哪些內(nèi)置對象砸西?數(shù)據(jù)封裝類對象:Object叶眉、Array、Boolean芹枷、Number 和 String其他對象:Function衅疙、Arguments、Math鸳慈、Date饱溢、RegExp、Error3. this對象的理解this總是指向函數(shù)的直接調(diào)用者(而非間接調(diào)用者)走芋;如果有new關(guān)鍵字绩郎,this指向new出來的那個(gè)對象;在事件中翁逞,this指向觸發(fā)這個(gè)事件的對象肋杖,特殊的是,IE中的attachEvent中的this總是指向全局對象Window挖函。4. eval是做什么的状植?它的功能是把對應(yīng)的字符串解析成JS代碼并運(yùn)行;應(yīng)該避免使用eval,不安全津畸,非常耗性能(2次振定,一次解析成js語句,一次執(zhí)行)肉拓。由JSON字符串轉(zhuǎn)換為JSON對象的時(shí)候可以用eval后频,var obj =eval('('+ str +')')。5. DOM怎樣添加帝簇、移除徘郭、移動、復(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)抱环,會得到一個(gè)數(shù)組,其中包括id等于name值的)getElementById() //通過元素Id纸巷,唯一性6. null和undefined的區(qū)別镇草?null是一個(gè)表示"無"的對象,轉(zhuǎn)為數(shù)值時(shí)為0瘤旨;undefined是一個(gè)表示"無"的原始值梯啤,轉(zhuǎn)為數(shù)值時(shí)為NaN。undefined:(1)變量被聲明了存哲,但沒有賦值時(shí)因宇,就等于undefined。(2) 調(diào)用函數(shù)時(shí)祟偷,應(yīng)該提供的參數(shù)沒有提供察滑,該參數(shù)等于undefined。(3)對象沒有賦值的屬性修肠,該屬性的值為undefined贺辰。(4)函數(shù)沒有返回值時(shí),默認(rèn)返回undefined嵌施。null:(1) 作為函數(shù)的參數(shù)饲化,表示該函數(shù)的參數(shù)不是對象。(2) 作為對象原型鏈的終點(diǎn)艰管。7. new操作符具體干了什么呢?(1)創(chuàng)建一個(gè)空對象滓侍,并且 this 變量引用該對象,同時(shí)還繼承了該函數(shù)的原型牲芋。(2)屬性和方法被加入到 this 引用的對象中。(3)新創(chuàng)建的對象由 this 所引用,并且最后隱式的返回 this 缸浦。8. JSON 的了解夕冲?JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。它是基于JavaScript的一個(gè)子集裂逐。數(shù)據(jù)格式簡單, 易于讀寫, 占用帶寬小歹鱼。格式:采用鍵值對,例如:{'age':'12', 'name':'back'}9. call() 和 apply() 的區(qū)別和作用卜高?apply()函數(shù)有兩個(gè)參數(shù):第一個(gè)參數(shù)是上下文弥姻,第二個(gè)參數(shù)是參數(shù)組成的數(shù)組。如果上下文是null掺涛,則使用全局對象代替庭敦。如: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請求時(shí)疼电,已發(fā)送了http header之后服務(wù)端將返回此信息,表示確認(rèn)减拭,之后發(fā)送具體參數(shù)信息200 OK 正常返回信息201 Created 請求成功并且服務(wù)器創(chuàng)建了新的資源202 Accepted 服務(wù)器已接受請求蔽豺,但尚未處理301 Moved Permanently 請求的網(wǎng)頁已永久移動到新位置。302 Found 臨時(shí)性重定向拧粪。303 See Other 臨時(shí)性重定向修陡,且總是使用 GET 請求新的 URI。304 Not Modified 自從上次請求后既们,請求的網(wǎng)頁未修改過濒析。400 Bad Request 服務(wù)器無法理解請求的格式,客戶端不應(yīng)當(dāng)嘗試再次使用相同的內(nèi)容發(fā)起請求啥纸。401 Unauthorized 請求未授權(quán)号杏。403 Forbidden 禁止訪問。404 Not Found 找不到如何與 URI 相匹配的資源斯棒。500 Internal Server Error 最常見的服務(wù)器端錯(cuò)誤盾致。503 Service Unavailable 服務(wù)器端暫時(shí)無法處理請求(可能是過載或維護(hù))。2. 你有哪些性能優(yōu)化的方法荣暮?(1) 減少http請求次數(shù):CSS Sprites, JS庭惜、CSS源碼壓縮、圖片大小控制合適穗酥;網(wǎng)頁Gzip护赊,CDN托管惠遏,data緩存 ,圖片服務(wù)器骏啰。(2) 前端模板 JS+數(shù)據(jù)节吮,減少由于HTML標(biāo)簽導(dǎo)致的帶寬浪費(fèi),前端用變量保存AJAX請求結(jié)果判耕,每次操作本地變量透绩,不用請求,減少請求次數(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(動態(tài)屬性)固棚。(7) 圖片預(yù)加載,將樣式表放在頂部仙蚜,將腳本放在底部 加上時(shí)間戳此洲。3. 什么叫優(yōu)雅降級和漸進(jìn)增強(qiáng)?優(yōu)雅降級:Web站點(diǎn)在所有新式瀏覽器中都能正常工作委粉,如果用戶使用的是老式瀏覽器呜师,則代碼會檢查以確認(rèn)它們是否能正常工作。由于IE獨(dú)特的盒模型布局問題贾节,針對不同版本的IE的hack實(shí)踐過優(yōu)雅降級了,為那些無法支持功能的瀏覽器增加候選方案汁汗,使之在舊式瀏覽器上以某種形式降級體驗(yàn)卻不至于完全失效。漸進(jìn)增強(qiáng):從被所有瀏覽器支持的基本功能開始栗涂,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增加無害于基礎(chǔ)瀏覽器的額外樣式和功能的知牌。當(dāng)瀏覽器支持時(shí),它們會自動地呈現(xiàn)出來并發(fā)揮作用斤程。4. 哪些常見操作會造成內(nèi)存泄漏角寸?內(nèi)存泄漏指任何對象在您不再擁有或需要它之后仍然存在。垃圾回收器定期掃描對象忿墅,并計(jì)算引用了每個(gè)對象的其他對象的數(shù)量扁藕。如果一個(gè)對象的引用數(shù)量為 0(沒有其他對象引用過該對象),或?qū)υ搶ο蟮奈┮灰檬茄h(huán)的疚脐,那么該對象的內(nèi)存即可回收亿柑。setTimeout 的第一個(gè)參數(shù)使用字符串而非函數(shù)的話,會引發(fā)內(nèi)存泄漏棍弄。閉包望薄、控制臺日志疟游、循環(huán)(在兩個(gè)對象彼此引用且彼此保留時(shí),就會產(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è)被大神提攜的小小程序員窄赋。