12345678910111213// 創建新節點createDocumentFragment() //創建一個DOM片段createElement() //創建一個具體的元素createTextNode() //創建一個文本節點// 添加、移除、替換、插入appendChild()removeChild()replaceChild()insertBefore() //在已有的子節點前插入一個新的子節點// 查找getElementsByTagName() //通過標簽名稱getElementsByName() //通過元素的Name屬性的值(IE容錯能力較強,會得到一個數組,其中包括id等于name值的)getElementById() //通過元素Id,唯一性6.null和undefined的區別?null是一個表示"無"的對象,轉為數值時為0;undefined是一個表示"無"的原始值,轉為數值時為NaN。undefined:(1)變量被聲明了,但沒有賦值時,就等于undefined。(2) 調用函數時,應該提供的參數沒有提供,該參數等于undefined。(3)對象沒有賦值的屬性,該屬性的值為undefined。(4)函數沒有返回值時,默認返回undefined。null:(1) 作為函數的參數,表示該函數的參數不是對象。(2) 作為對象原型鏈的終點。7.new操作符具體干了什么呢?(1)創建一個空對象,并且 this 變量引用該對象,同時還繼承了該函數的原型。(2)屬性和方法被加入到 this 引用的對象中。(3)新創建的對象由 this 所引用,并且最后隱式的返回 this 。8.JSON 的了解?JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它是基于JavaScript的一個子集。數據格式簡單, 易于讀寫, 占用帶寬小。格式:采用鍵值對,例如:{'age':'12', 'name':'back'}9.call() 和 apply() 的區別和作用?apply()函數有兩個參數:第一個參數是上下文,第二個參數是參數組成的數組。如果上下文是null,則使用全局對象代替。如:function.apply(this,[1,2,3]);call()的第一個參數是上下文,后續是實例傳入的參數序列。如:function.call(this,1,2,3);10.如何獲取UA?123456 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狀態碼知道哪些?100 Continue 繼續,一般在發送post請求時,已發送了http header之后服務端將返回此信息,表示確認,之后發送具體參數信息200 OK 正常返回信息201 Created 請求成功并且服務器創建了新的資源202 Accepted 服務器已接受請求,但尚未處理301 Moved Permanently 請求的網頁已永久移動到新位置。302 Found 臨時性重定向。303 See Other 臨時性重定向,且總是使用 GET 請求新的 URI。304 Not Modified 自從上次請求后,請求的網頁未修改過。400 Bad Request 服務器無法理解請求的格式,客戶端不應當嘗試再次使用相同的內容發起請求。401 Unauthorized 請求未授權。403 Forbidden 禁止訪問。404 Not Found 找不到如何與 URI 相匹配的資源。500 Internal Server Error 最常見的服務器端錯誤。503 Service Unavailable 服務器端暫時無法處理請求(可能是過載或維護)。2.你有哪些性能優化的方法?(1) 減少http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN托管,data緩存 ,圖片服務器。(2) 前端模板 JS+數據,減少由于HTML標簽導致的帶寬浪費,前端用變量保存Ajax請求結果,每次操作本地變量,不用請求,減少請求次數(3) 用innerHTML代替DOM操作,減少DOM操作次數,優化javascript性能。(4) 當需要設置的樣式很多時設置className而不是直接操作style。(5) 少用全局變量、緩存DOM節點查找的結果。減少IO讀取操作。(6) 避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。(7) 圖片預加載,將樣式表放在頂部,將腳本放在底部 加上時間戳。3.什么叫優雅降級和漸進增強?優雅降級:Web站點在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工作。由于IE獨特的盒模型布局問題,針對不同版本的IE的hack實踐過優雅降級了,為那些無法支持功能的瀏覽器增加候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至于完全失效.漸進增強:從被所有瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增加無害于基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現出來并發揮作用。4.哪些常見操作會造成內存泄漏?內存泄漏指任何對象在您不再擁有或需要它之后仍然存在。垃圾回收器定期掃描對象,并計算引用了每個對象的其他對象的數量。如果一個對象的引用數量為 0(沒有其他對象引用過該對象),或對該對象的惟一引用是循環的,那么該對象的內存即可回收。setTimeout 的第一個參數使用字符串而非函數的話,會引發內存泄漏。閉包、控制臺日志、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)5.線程與進程的區別一個程序至少有一個進程,一個進程至少有一個線程. 線程的劃分尺度小于進程,使得多線程程序的并發性高。 另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。 線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
HTML&CSS1.請描述一下 cookies,sessionStorage 和 localStorage 的區別?cookie是網站為了標示用戶身份而儲存在用戶本地終端(Client Side)上的數據(通常經過加密)。cookie數據始終在同源的http請求中攜帶(即使不需要),記會在瀏覽器和服務器間來回傳遞。sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存。存儲大小:cookie數據大小不能超過4k。sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。有期時間:localStorage 存儲持久數據,瀏覽器關閉后數據不丟失除非主動刪除數據;sessionStorage 數據在當前瀏覽器窗口關閉后自動刪除。cookie 設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉2.iframe有那些缺點?iframe會阻塞主頁面的Onload事件;搜索引擎的檢索程序無法解讀這種頁面,不利于SEO;iframe和主頁面共享連接池,而瀏覽器對相同域的連接有限制,所以會影響頁面的并行加載。使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通過javascript動態給iframe添加src屬性值,這樣可以繞開以上兩個問題。3.如何實現瀏覽器內多個標簽頁之間的通信?WebSocket、SharedWorker也可以調用localstorge、cookies等本地存儲方式。localstorge另一個瀏覽上下文里被添加、修改或刪除時,它都會觸發一個事件,我們通過監聽事件,控制它的值來進行頁面信息通信。注意quirks:Safari 在無痕模式下設置localstorge值時會拋出 QuotaExceededError 的異常。4.如何在頁面上實現一個圓形的可點擊區域?(1)map+area或者svg(2)border-radius(3)純js實現 需要求一個點在不在圓上簡單算法、獲取鼠標坐標等等5.介紹一下標準的CSS的盒子模型?低版本IE的盒子模型有什么不同的?(1)有兩種, IE 盒子模型、W3C 盒子模型。(2)盒模型: 內容(content)、填充(padding)、邊界(margin)、 邊框(border)。(3)區 別: IE的content部分把 border 和 padding計算了進去。6.CSS優先級算法如何計算?優先級就近原則,同權重情況下樣式定義最近者為準;載入樣式以最后載入的定位為準;優先級為:!important > id > class > tagimportant比內聯優先級高(style)7.為什么要使用CSS spritesCSS Sprites其實就是把網頁中一些背景圖片整合到一張圖片文件中,再利用CSS的“background-image”,“background-position”的組合進行背景定位,這樣可以減少很多圖片請求的開銷,因為請求耗時比較長;請求雖然可以并發,但是如果請求太多會給服務器增加很大的壓力。8.display:none和visibility:hidden的區別?display:none 隱藏對應的元素,在文檔布局中不再給它分配空間,它各邊的元素會合攏,就當他從來不存在。visibility:hidden 隱藏對應的元素,但是在文檔布局中仍保留原來的空間。9.position的absolute與fixed區別absolute浮動定位是相對于父級中設置position為relative或者absolute最近的父級元素fixed浮動定位是相對于瀏覽器視窗的10.IE 8以下版本的瀏覽器中的盒模型有什么不同?IE8以下瀏覽器的盒模型中定義的元素的寬高不包括內邊距和邊框JavaScript1.JS數組去重以下是展示三種方法:
123456789101112131415161718192021222324252627282930313233Array.prototype.unique1 = function () { var n = []; //一個新的臨時數組 for (var i = 0; i < this.length; i++) //遍歷當前數組 { //如果當前數組的第i已經保存進了臨時數組,那么跳過, //否則把當前項push到臨時數組里面 if (n.indexOf(this[i]) == -1) n.push(this[i]); } return n;}Array.prototype.unique2 = function(){ var n = {},r=[]; //n為hash表,r為臨時數組 for(var i = 0; i < this.length; i++) //遍歷當前數組 { if (!n[this[i]]) //如果hash表中沒有當前項 { n[this[i]] = true; //存入hash表 r.push(this[i]); //把當前數組的當前項push到臨時數組里面 } } return r;}Array.prototype.unique3 = function(){ var n = [this[0]]; //結果數組 for(var i = 1; i < this.length; i++) //從第二項開始遍歷 { //如果當前數組的第i項在當前數組中第一次出現的位置不是i, //那么表示第i項是重復的,忽略掉。否則存入結果數組 if (this.indexOf(this[i]) == i) n.push(this[i]);2.js操作獲取和設置cookie123456789101112131415161718192021222324252627282930313233//創建cookiefunction setCookie(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;}//獲取cookiefunction getCookie(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)); } return cookieValue;}3.ajax 有那些優缺點?如何解決跨域問題?(Q1)優點:(1)通過異步模式,提升了用戶體驗.(2)優化了瀏覽器和服務器之間的傳輸,減少不必要的數據往返,減少了帶寬占用.(3)Ajax在客戶端運行,承擔了一部分本來由服務器承擔的工作,減少了大用戶量下的服務器負載。(4)Ajax可以實現動態不刷新(局部刷新)缺點:(1)安全問題 AJAX暴露了與服務器交互的細節。(2)對搜索引擎的支持比較弱。(3)不容易調試。(Q2)jsonp、 iframe、window.name、window.postMessage、服務器上設置代理頁面。4.JavaScript原型,原型鏈 ? 有什么特點?(1)原型對象也是普通的對象,是對象一個自帶隱式的 __proto__ 屬性,原型也有可能有自己的原型,如果一個原型對象的原型不為null的話,我們就稱之為原型鏈。(2)原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。5.GET和POST的區別,何時使用POST?GET:一般用于信息獲取,使用URL傳遞參數,對所發送信息的數量也有限制,一般在2000個字符POST:一般用于修改服務器上的資源,對所發送的信息沒有限制。GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值,也就是說Get是通過地址欄來傳值,而Post是通過提交表單來傳值。然而,在以下情況中,請使用 POST 請求:無法使用緩存文件(更新服務器上的文件或數據庫)向服務器發送大量數據(POST 沒有數據量限制)發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠6.請解釋一下 JavaScript 的同源策略概念:同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標準。它最早出自Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不同源裝載。這里的同源策略指的是:協議,域名,端口相同,同源策略是一種安全協議。指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。為什么要有同源限制?我們舉例說明:比如一個黑客程序,他利用Iframe把真正的銀行登錄頁面嵌到他的頁面上,當你使用真實的用戶名,密碼登錄時,他的頁面就可以通過Javascript讀取到你的表單中input中的內容,這樣用戶名,密碼就輕松到手了。7.Flash、Ajax各自的優缺點,在使用中如何取舍?Flash適合處理多媒體、矢量圖形、訪問機器;對CSS、處理文本上不足,不容易被搜索。Ajax對CSS、文本支持很好,支持搜索;多媒體、矢量圖形、機器訪問不足。共同點:與服務器的無刷新傳遞消息、用戶離線和在線狀態、操作DOM8.什么是閉包?閉包,官方對閉包的解釋是:一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。閉包的特點:(1)作為一個函數變量的一個引用,當函數返回時,其處于激活狀態。(2) 一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。簡單的說,Javascript允許使用內部函數---即函數定義和函數表達式位于另一個函數的函數體內。而且,這些內部函數可以訪問它們所在的外部函數中聲明的所有局部變量、參數和聲明的其他內部函數。當其中一個這樣的內部函數在包含它們的外部函數之外被調用時,就會形成閉包。9.javascript里面的繼承怎么實現,如何避免原型鏈上面的對象共享用構造函數和原型鏈的混合模式去實現繼承,避免對象共享可以參考經典的extend()函數,很多前端框架都有封裝的,就是用一個空函數當做中間變量10.ajax過程(1)創建xmlhttpRequest對象,也就是創建一個異步調用對象.(2)創建一個新的HTTP請求,并指定該HTTP請求的方法、URL及驗證信息.(3)設置響應HTTP請求狀態變化的函數.(4)發送HTTP請求.(5)獲取異步調用返回的數據.(6)使用JavaScript和DOM實現局部刷新.其他1.一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?(1)查找瀏覽器緩存(2)DNS解析、查找該域名對應的IP地址、重定向(301)、發出第二個GET請求(3)進行HTTP協議會話(4)客戶端發送報頭(請求報頭)(5)服務器回饋報頭(響應報頭)(6)html文檔開始下載(7)文檔樹建立,根據標記請求所需指定MIME類型的文件(8)文件顯示2.為什么換工作?3.你常用的開發工具是什么,為什么?4.對前端界面工程師這個職位是怎么樣理解的?它的前景會怎么樣?5.加班的看法?
新聞熱點
疑難解答