金山辦公2020校招前端開發(fā)工程師筆試題

每天看看面試題,鞏固知識,沖鴨


一 、寫出如下代碼的執(zhí)行結(jié)果

考察了 promise,以及任務(wù)處理順序。promise值得單寫一篇文章,這里不過多贅述。

new Promise((resolve) => {
    console.log('1')
    resolve()
    console.log('2')
}).then(() => {
    console.log('3')
})
setTimeout(() => {
    console.log('4')
})
console.log('5')
  1. 首先需要搞清楚JS中是單線程的,并且執(zhí)行的優(yōu)先級是同步大于異步,并且是所有同步執(zhí)行完后才回來執(zhí)行異步操作
  2. 異步操作中又分為微任務(wù)(promise等)和宏任務(wù)(setTimeOut、I/O操作等)。顧名思義,微任務(wù)是具體的點,而宏任務(wù)是大的一個塊兒。
  3. 微任務(wù)和宏任務(wù)的執(zhí)行順序為前者優(yōu)先

所以,正確答案:1 2 5 3 4

二 、請列舉幾種除了px外的CSS度量單位并解釋其含義。

  1. rem 相對于根字體大小的單位,比如可以設(shè)置 1rem=50px
  2. em 相對于font-size,比如font-size:16px(瀏覽器默認),則2em=32px
  3. vm 即viewpoint width,視窗寬度,比如1vm的寬度為相對于視窗的寬度的百分之一
  4. vh 即viewpoint height ,同上

三 、new操作符做了什么?

考察原型和原型鏈,這個知識不在贅述

簡單點來說,new操作符會先創(chuàng)建一個空對象,然后將this指向這個空對象,并且進行賦值,最后返回這個this。
但是其中還涉及到了proto 、prototype,不過多贅述

四 、簡述cookie/session記住登錄狀態(tài)機制原理。

這里不寫答案,但是要知道cookie和session的作用。同時還要了解一下token。

五 、網(wǎng)頁中接收事件的順序(事件流)有哪些?它們之間的區(qū)別是什么?

首先說一下什么是事件流,個人理解為假設(shè)在??途W(wǎng)做題,當我點擊了提交按鈕,瀏覽器是如何知道我點擊了什么東西呢?這個時候就需要使用到事件流

最開始有兩種,一個是冒泡,一個是事件捕獲。

先說說冒泡:和冒泡排序一樣(雖然這是個憨批算法),都是從最底層開始,即那個點擊按鈕的標簽

假設(shè)這是個DOM,那么冒泡流就是從p開始,到div,然后body、html、document

html
  head
    body
      div
        p 提交

再來說說事件捕獲流:不用說太多,因為這剛好和上面是冒泡流相反,即從最外層的標簽開始,最后才到達p標簽。

最后來說說現(xiàn)在標準,DOM2級事件流,即首先進行事件捕獲流,然后到達事件所在的標簽后,進行處理,然后在開始進行事件冒泡流,類似于koa2中的洋蔥模型

六 、簡述你對HTTP控制訪問(CORS)的理解

首先要搞明白什么是同源,什么是跨域。

打一個簡單的比方,你自己從你家里拿東西,不會有人說,這是同源;但是你要從隔壁的鄰居的冰箱去拿可樂,你覺得可能嗎,這就是跨域。

從比方中回來,事實其實沒有那么簡單。理解了概念后,得知道如何去判斷同源還是跨域。web服務(wù)器有三要素:協(xié)議(http、https)、端口號(不過多說)、web服務(wù)器域名(比如https://github.com/mamba666
https://github.com就是域名)。三要素必須全部一致才算同源

個人認為寫完上面的東東后已經(jīng)理解了同源跨域已經(jīng)如何區(qū)分。接下來就來看看真正的干貨,不講同源,只講跨域(以下參考MDN)

瀏覽器端

如果發(fā)現(xiàn)有一個請求是跨域,那么瀏覽器會自動先攔截一下,給它的http header加上Origin字段。比如 http://localhost:8080變?yōu)镺rigin:http://localhost:8080。這樣一來,服務(wù)器端就可以區(qū)分這個請求是不是跨域了。

服務(wù)器端

當服務(wù)器端收到瀏覽器端發(fā)送過來的請求后,會有一個響應(yīng)header。它會告訴請求的瀏覽器哪兒些域名可以請求我,哪兒些方法可以執(zhí)行。

響應(yīng)回到瀏覽器端

此時瀏覽器會根據(jù)這個響應(yīng)自動判斷,然后在做決定。

服務(wù)器端返回給瀏覽器端的東西

  • Access-Control-Allow-Origin 允許跨域的Origin列表
  • Access-Control-Allow-Methods 允許跨域的方法列表(GET、POST等)
  • Access-Control-Allow-Headers 允許跨域的Header列表
  • Access-Control-Expose-Headers 允許暴露給JavaScript代碼的Header列表
  • Access-Control-Max-Age 最大的瀏覽器緩存時間,單位為s

跨域請求形式

有兩種,簡單和非簡單請求。這里說說我常遇到的 application/json 。這就是一種非簡單請求,在以上所寫的瀏覽器端之前,會先進行一次預(yù)請求,根據(jù)這個結(jié)果再去判斷是否正式請求。

其實寫了這么多,最重要的就是對CORS的理解,已經(jīng)這個流程是怎么樣的。

?著作權(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)容

  • 面試題一:https://github.com/jimuyouyou/node-interview-questio...
    R_X閱讀 1,759評論 0 5
  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線文章,題為“Ajax: A new App...
    霜天曉閱讀 942評論 0 1
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,687評論 1 11
  • 本文旨在加深對前端知識點的理解,資料來源于網(wǎng)絡(luò),由本人(博客:http://segmentfault.com/u/...
    風起云帆閱讀 357評論 0 0
  • 本文旨在加深對前端知識點的理解,資料來源于網(wǎng)絡(luò) position的值, relative和absolute分別是相...
    新晉小牛牛閱讀 1,398評論 0 15

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