1. 程式人生 > 其它 >基於TOP-K的面試題解總結(5)

基於TOP-K的面試題解總結(5)

  21.移動端適配有哪些方案?
  • rpx
  • rem,em
  • 百分比
  • 獲取當前瀏覽器視窗寬度高度等資訊
  • Hybrid
  • Flutter框架
  22.localstorage 與 cookie 的區別是什麼?
  • localstorage:
    • 主要作為本地儲存使用,瀏覽器支援5M儲存大小,屬於永久性儲存
    • 可以將第一次請求的資料直接儲存到本地
    • 不會被爬蟲抓取到
  • cookie:
    • 只能儲存文字,大小限制4KB左右
    • 數量限制:一個瀏覽器大概50條左右
    • 面向會話儲存,一般會在會話結束後刪除。可以設定過期時間
  • sessionstorage:
    • 擴大型cookie
    • 面向會話層,會話結束後自動刪除
  23.簡述 Javascript 中 this 的指向有哪些?
  • 預設繫結:
    • 嚴格模式下,預設this指向為undefined
    • 非嚴格模式下,預設this指向全域性,即windows
  • 顯式繫結:
    • call(obj, arg1, arg2,...)
    • apply(obj,[arg1, arg2,...])
    • bind(obj,...args)
  • 隱式繫結:
    • 在宣告的函式體內,this指向被引用的函式物件
  • new繫結:
    • 通過new生成的例項中,this指向該例項物件
  • 箭頭函式:
    • 箭頭函式的this指向父級作用域
  24.簡述圖片的懶載入原理
  • HTML中圖片通過<img>引入,由src屬性請求。所以懶載入就是在圖片沒有進入到可視區的時候不給src賦值,等圖片區域進入可視區的時候,再給src賦值去請求圖片。
  • 將圖片的地址放在data-set屬性中,由於圖片並沒有在src中,並不會傳送http請求。比較圖片到整個頁面距離(Y)和  頁面滑動的距離 (X) +  瀏覽器可視區域的大小(Z) ,Y小於兩者之和,則圖片就顯示出來,將圖片的data-set屬性換為src屬性
  25.什麼是跨域,什麼情況下會發生跨域請求?
  • 跨域原因:
    • 瀏覽器從一個域名的網頁去請求另一個域名的資源時,域名、埠、協議任一不同,都會產生跨域問題
    • 由於瀏覽器的同源策略限制,同源即為兩個頁面具有相同的協議,主機和埠號
  • 跨域:當一個請求url的協議、域名、埠三者之間任意一個與當前頁面url不同即為跨域
  • 解決方法:
    • 使用Nginx代理進行埠監聽,然後將請求代理轉發到相同埠
    • 使用Ajax的jsonp
      • 缺點:請求方式只能是get請求
    • 使用jQuery的jsonp
      • 優點:get請求和post請求
      • 缺點:返回的仍是jsonp格式
  26.簡述瀏覽器的垃圾回收機制
    • 標記清除:
      • 垃圾收集器給記憶體中的所有變數都加上標記,然後去掉環境中的變數以及被環境中的變數引用的變數的標記。在此之後被加上標記的變數即為需要回收的變數。
    • 引用技術(廢棄)
      • 跟蹤記錄每個值被引用的次數。當聲明瞭一個變數並將一個引用型別賦值給該變數時,則這個值的引用次數就是1。相反,如果包含對這個值引用的變數又取得了另外一個值,則這個值的引用次數就減1。當這個引用次數變成0時,則說明沒有辦法再訪問這個值了,因而就可以將其所佔的記憶體空間給收回來。這樣,垃圾收集器下次再執行時,它就會釋放那些引用次數為0的值所佔的記憶體。該方式會引起記憶體洩漏的原因是它不能解決迴圈引用的問題
    • V8的垃圾回收機制
      • 分為新生代和老生代兩個垃圾回收器
        • 新生代:物件存活時間短,經過兩次垃圾回收還存活的物件將會移到老生區中
        • 老生代:物件佔用空間大,存活時間長