前端面試題

1.宏任務(wù)和微任務(wù)

  • 宏任務(wù):宏任務(wù)隊列可以有多個

setTimeout() , setInterval , script , requestAnimationFrame,setImmediate, I/O, UI rendering;

  • 微任務(wù):微任務(wù)隊列只能有一個

Promise , process.nextTick ,MutationObserver ,Object.observer

首先先總結(jié)一下異步函數(shù)的執(zhí)行過程:
同步和異步分別進(jìn)入不同的執(zhí)行場所,同步的進(jìn)入主線程,異步的進(jìn)入Event table并注冊函數(shù)。 當(dāng)(指定的事情)注冊函數(shù)完成時,Event table會將這個函數(shù)移入Event queue。 主線程內(nèi)的任務(wù)執(zhí)行完畢為空,會去Event queue讀取一個對應(yīng)的函數(shù),進(jìn)入主線程執(zhí)行,執(zhí)行完之后再去event queue里面去對應(yīng)的函數(shù)再進(jìn)入主線程執(zhí)行。上述過程會不斷的重復(fù),也就是Event loop(事件循環(huán))

但是js異步還有一個機(jī)制,就是遇到宏任務(wù),先執(zhí)行宏任務(wù),將宏任務(wù)放入event queue里面,然后再執(zhí)行微任務(wù),將微任務(wù)放如event queue里面,最騷的是,這兩個event queue不是同一個,當(dāng)你往外面拿的時候,先從微任務(wù)里面的event queue拿回調(diào)函數(shù)來執(zhí)行,然后再從宏任務(wù)里面的event queue拿回調(diào)函數(shù)。
也就是說,先執(zhí)行所有微任務(wù),微任務(wù)執(zhí)行完為空之后再執(zhí)行宏任務(wù)。

2.promise的方法 :狀態(tài) pending 觸發(fā) Fulfilled , Rejected

  • promise.all() 的實現(xiàn)原理;
  • Promise.race()
  • Promise.resolve()
  • Promise.reject()
  • Promise.try()
  • Promise.prototype.then()
  • Promise.prototype.catch()
  • Promise.prototype.finally()

3.event.loop:事件循環(huán)

4.new Set(); //set對象

  • [..new Set(arr)];

5.預(yù)編譯

6.強制類型轉(zhuǎn)換

  • String()
  • Number()
  • Object()

7.隱式類型轉(zhuǎn)換

  • ++,-- ,+-/*,< > <= >= ,== !,
  • 不發(fā)生類型轉(zhuǎn)換:=== !== ,(undefined == null) //true

8.路由的實現(xiàn)原理:

  • URL中的hash:
  1. #號代表網(wǎng)頁中的一個位置。其右面的字符就是該位置的標(biāo)識符。
  2. HTTP請求不包括'#':#是用來指導(dǎo)瀏覽器動作的,對服務(wù)器端完全無用。
  3. #后的字符:都會被瀏覽器解讀為位置
  4. 改變#不觸發(fā)網(wǎng)頁重載
  5. 改變#會改變?yōu)g覽器的訪問歷史
  6. window.location.hash讀取#值
  7. onhashchange事件: 當(dāng)#值發(fā)生改變時就會觸發(fā)這個事件。

9.預(yù)加載和懶加載的概念

  • 預(yù)加載: 提前加載圖片,當(dāng)用戶需要查看時可直接從本地緩存中渲染。
    1. 圖片等靜態(tài)資源在使用前的提前請求。
    2. 資源后續(xù)使用時可以從緩存中加載,提升用戶體驗。
    3. 頁面展示的依賴關(guān)系維護(hù)(必須的而資源加載完才可以展示頁面,防止白屏等)

實現(xiàn)的方式:如用css和js實現(xiàn)預(yù)加載;僅用js實現(xiàn)預(yù)加載; 使用ajax實現(xiàn)預(yù)加載。
1.html中img標(biāo)簽最初設(shè)置為display:none;

2.js腳本中使用Image對象動態(tài)創(chuàng)建好圖片;使用onload方法

3.使用XMLHttpRequest對象可以更加精細(xì)的控制預(yù)加載過程,缺點是無法跨域;

  • 懶加載也叫延遲加載: JS圖片延遲加載,延遲加載圖片或符合某些條件時才加載圖片。
  1. 優(yōu)點:頁面加載速度快、可以減輕服務(wù)器的壓力、節(jié)約了流量,用戶體驗好。

懶加載的實現(xiàn)方式有:注意不要將圖片地址放在src屬性中,而是放到自定義特性里面(data-)

方法一:純粹的延遲加載,使用setTimeOut或setInterval進(jìn)行加載延遲。

方法二:條件加載,符合某些條件,或觸發(fā)了某些事件才開始異步加載;

方法三:可視區(qū)加載,即僅加載用戶可以看到的區(qū)域,這個主要由監(jiān)控滾動條來實現(xiàn),一般會在距用戶看到某圖片前一定距離便開始加載,這樣能保證用戶拉下時正好能看到圖片。

預(yù)加載和懶加載的區(qū)別:

    1. 一個是提前加載,一個是遲緩甚至不加載。
    1. 懶加載對服務(wù)器有一定的緩解壓力作用,預(yù)加載則會增加服務(wù)器端壓力。

10.VUE的實現(xiàn)原理

11.push返回的是什么?

12.split返回的是什么?

13.slice返回的是什么?

14.數(shù)組的方法:

  • forEach()
  • map()
  • filter()
  • indexOf()
  • every()
  • some()
  • reduce()
  • 改變元素組
  • push()
  • pop()
  • shift()
  • unshift()
  • sort()
  • reverse()
  • splice()
  • 不改變原數(shù)組
  • concat()
  • slice()
  • split()
  • substr() 截取字符串方法

15.為什么要new XMLHTTPrequest?

16.前后端交互的幾個方法?

  • 利用cookie
  • 利用ajax
  • jsonp
  • 服務(wù)端渲染
  • webSocket 和 Socket.io

17.Vue怎么拿到當(dāng)前點擊元素?

18.組件之間傳遞參數(shù)

19.范德薩發(fā)

20.本地存儲

21.為什么要使用XMLHttpRequest對象?

使用該對象可以更加精細(xì)的控制預(yù)加載過程,缺點是無法跨域。

22.h5新特性

23.瀏覽器存儲

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、移動端你遇到過什么兼容問題?1、如果在input設(shè)置邊框顏色在ios系統(tǒng)里會出現(xiàn)兼容性問題,需要在外面加一個d...
    阿帕奇喲閱讀 916評論 0 8
  • 1、移動端你遇到過什么兼容問題? 1、如果在input設(shè)置邊框顏色在ios系統(tǒng)里會出現(xiàn)兼容性問題,需要在外面加一個...
    青青菜鳥閱讀 4,507評論 0 28
  • 面試題一:https://github.com/jimuyouyou/node-interview-questio...
    R_X閱讀 1,761評論 0 5
  • 一、理論基礎(chǔ)知識部分 1.1、講講輸入完網(wǎng)址按下回車,到看到網(wǎng)頁這個過程中發(fā)生了什么 a. 域名解析 b. 發(fā)起T...
    我家媳婦蠢蠢噠閱讀 3,248評論 2 106
  • Vue面試題 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次頁面加載會觸發(fā)哪幾個鉤子 4...
    在下高姓閱讀 2,502評論 0 11

友情鏈接更多精彩內(nèi)容