蘇寧 用友前端面試題小結
1.一分鐘自我介紹,兩個公司的題目有一定程度的重合,例如事件的委托代理,原型鏈等。
2.jquery中事件綁定與事件代理怎麽寫,要寫出來哦,給所有li加點擊事件利用事件代理怎麽寫?
事件綁定的方法主要有bind(),live(),on(),推薦使用on()
事件委托的方法主要有delegate(),
$(‘ul‘).delegate(‘li‘,click,fun)
3.HTML5中的緩存機制,說出其優缺點?
HTML5出來之前,通常使用cookie來存儲用戶數據,cookie只能存儲4K左右的數據,且不同瀏覽器的cookie數量都是有限的。cookie在每次請求時都會隨http傳輸到服務器,讓服務器知道請求是否來自同一個客戶端。
HTML5緩存技術主要分為兩類,本地緩存技術與離線緩存技術。
本地緩存技術主要有sessionStorage和localStorage,它們都是客戶端存儲技術。localStorage存儲的數據,只要用戶沒有手動清理,就一直存在,同一瀏覽器之間localStorage可以實現共享。sessionStorage時會話級別的存儲技術,瀏覽器關閉,客服端存儲的數據自動銷毀。
離線緩存技術主要通過創建cache manifest文件來對web應用的靜態頁面進行緩存,讓web應用在沒有網絡的情況下也可以正常使用。但是只限於頁面展示,對於頁面中的實時數據還是需要利用網絡才能訪問。主要完成需要兩步:
1)服務器端創建mainfest文件,主要聲明語句有cache mainfest ,cache,network,fallback。
2)mainfest文件創建正確的MIME-TYPE:text/cache-manifest。
4.typeof,instanceof的作用是什麽?
typeof的作用是判斷變量的數據類型;
instanceof的作用是判斷左邊對象是否為右邊構造函數的實例。
5.數組常用的方法有哪些?遍歷用哪個?
參考阮老師的教程即可。
6.怎樣判斷一個對象的方法是自己定義的方法而不是繼承而來?
.hasOwnPropertyOf()返回true,表示為對象自身定義的方法,false表示繼承而來的方法。
7.協商緩存了解嗎?講一下
瀏覽器緩存是指瀏覽器在本地磁盤對用戶最近訪問過的頁面進行存儲,當用戶再次訪問剛頁面時,瀏覽器就可以直接從本地磁盤加載文檔。
瀏覽器在請求某一資源時,首先會獲取該資源的緩存的header信息,利用cache-control或Expires判斷是否命中強緩存,cache-control與Expires同時存在的話,cache-control的優先級高於Expires,cache-control中存儲的是相對時間,Expires中存儲的是絕對時間,若命中直接從緩存中獲取資源信息,包括緩存header信息,本次請求不會和服務器進行通信,返回200;
如果沒有命中強緩存,瀏覽器會啟用協商緩存,首先檢查緩存header信息中是否包含Etag,若存在則再發送請求時攜帶If-Not-Match:Etag,Etag是當前資源在服務器端的唯一標識,若Etag未發生變化,返回304和Etag的值,由於Etag的值重新生成過,即時和之前的相同,也會返回;上次請求之後請求頭還會存在last-Modified值,在未命中強緩存時,像服務器發送http請求時會攜帶If-Modified-Since,該字段的值為緩存頭中的Last-Modified的值,服務器拿到該字段時會和服務器上該資源最近一次被修改的時間進行比較,若If-Modified-Since的值晚於服務上該資源最近修改時間,則認為資源沒有變動,返回304;
Last-Modified與Etag可以一起使用,同時存在時會優先驗證Etag,Etag一致的時候,才會對比Last-Modified,最後才決定是否返回304。
Etag出現在http1.1中,Last-Modified出現在http1.0,Etag出現的主要目的是為解決一下幾個難題:
一些文件也許會周期性的修改,有可能內容並未修改,只是改寫了修改時間;其次,服務器有可能並不能獲取到文件的準確修改時間。
8.id選擇權,類選擇器,偽類選擇器,標簽選擇器優先級說一下?
id > class = 偽類 > 標簽
9.js中this指向是定義時決定還是運行時決定?
this的指向實在程序實際運行時確定的,this的最終指向是那個最終調用它的對象。
10.隱藏元素不刪除解構用什麽?
visibility:hidden
11.http狀態碼說一下?
200;301(永久重定向);302(暫時重定向);304(請求資源未修改,取緩存內容);
400(客戶端請求語法錯誤,服務器無法理解);404(服務器無法根據客戶端的請求獲取資源);
500(服務器內部錯誤,無法完成請求)
12.封裝一個ajax,講一下ajax的作用?
ajax是與服務器交換數據的方式,它在不重載全部頁面的情況下,實現了對網頁的部分刷新。
ajax的實現基於XMLHttpRequest對象,onreadystatechange用於監聽事件,readyState代表請求的變化(0,1,2,3,4),status代表http請求的狀態碼。
jquery中封裝了ajax的方法有$.get(),$.post(),$.ajax();三者的區別在於$.ajax()方法可以進行多種狀態事件。
13.行內元素可以設寬嗎?可以設padding和margin嗎?
行內元素在一條直線上排列,默認寬度只與內容有關,在同一行水平排列;
行內元素設置寬高無用,設置margin上下及padding上下無效。
塊內元素各占一行,默認寬度是它本身父容器的100%,垂直方向排列,塊級元素從新行開始,結束接著一個斷行。
14.閉包相關
閉包的理解:閉包就是可以創建一個獨立的環境,每個閉包裏面的環境都是獨立的,互不幹擾;
閉包的創建:在一個函數中嵌套另外一個函數,將被嵌套的函數return出去,將return出的函數保存在一個變量中,就創建了一個閉包。
閉包的作用:在函數外部訪問到函數的內部變量;使一個函數長久的存在於內存當中。
15.有關匿名函數
匿名函數無法直接使用;
匿名函數可以依附於一個變量,並且這個變量名就是匿名函數的名字;
匿名函數在綁定事件中的時候,當這個事件執行的時候這個匿名函數就會被執行;
如果將匿名函數放入到函數表達式中並且後面加上小括號會自動執行這個函數;
匿名函數不能加括號自動執行,除非依附於變量或者函數表達式;
16.js中的回收機制
js中定義的全局變量不會被銷毀;
函數中定義的變量的生命周期在執行完這個函數之後就銷毀,但是有時候需要用到函數執行結束之後的變量值,因此js需要判斷是否要保存上次執行結束後的變量值,當函數中的變量存在外部引用時,這個值就不會被銷毀,這也是閉包可以訪問函數內部變量的原因;
總結:如果一個對象不被引用,那麽這個對象就會被回收;
如果兩個對象相互引用,但沒有被第三個對象所引用,那麽這兩個相互引用的對象也會被回收。
17.js中的靜態屬性與原型屬性
實例對象不能調用靜態屬性,但是可以調用原型屬性,當前實例對象上若不存在某一屬性,會在它的原型屬性上去查找;
實例對象的私有屬性>this上定義的屬性>prototype上的屬性
18.callee與caller
callee的意義在於使用匿名函數時可以調用函數本身arguments.callee();
coller()的作用在於能夠知道函數的調用者是誰。
19.數組去重的方法?
雙重循環判斷;
利用Set對象,Set中的值是不能重復的;
利用對象key/value,一個對象不能有多個同名屬性,如果相同最後一個會覆蓋前邊的一個。
20.怎樣判斷一個方法是對象自身的,而不是從原型鏈上繼承的?
利用hasOwnProperty()方法,返回true表示對象自身定義的方法,false為原型鏈上的方法。
21.for in與for of的區別?
for in的使用方法為let key in obj;for of的使用方法為let key of Object.keys(obj);for in遍歷時不會過濾對象的原型屬性;for of方法會過濾原型屬性。
蘇寧 用友前端面試題小結