新鮮出爐的2020年阿里前端校招筆試10道選擇題

據說昨天有個學弟參加了2020年阿里的前端校招筆試,作爲一個前端怎麼能錯過這種機會,今天趕忙讓他把題目發過來研究一下,這裏貼出選擇題供你們共同窗習,由於沒拿到標準答案,題目是我本身作的不保證都對,歡迎你們指正探討,有標準答案了也會更新。javascript

1. 如下關於Javascript執行引擎描述正確的是:

  • ECMAScript 2015中規定了執行引擎須要實現EventLoop機制。
  • V8做爲最早進的Javascript執行引擎,能夠在執行階段對全部代碼進行優化。
  • Node.js經過V8實現異步I/O。
  • Node.js的Buffer類型對象在建立時內存不會分配到V8堆上。
  • Chakra是Firefox內嵌的Javascript執行引擎。
  • 代碼正確的狀況下,垃圾回收不會致使有內存沒法回收。

解析:css

  • 執行階段,V8會先生成字節碼(快),再在運行過程當中逐步將高頻函數轉化成優化後的機器碼(慢)。相關資料
  • Node.js經過libuv抽象封裝層不一樣平臺使用不一樣方法實現異步I/O,windows是IOCP,*nix是自定義線程池(詳情可參考《深刻淺出nodejs》第三章)。
  • Node的Buffer模塊性能相關部分有C++實現,因此Buffer對象的內存分配不是在V8的堆內存中,而是在Node的C++層面實現內存申請的(詳情可參考《深刻淺出nodejs》第六章)。
  • Chakra是IE的js引擎,Firefox的js引擎是SpiderMonkey。

2. 對於解構一下說法錯誤的是:

  • 不徹底結構,也會成功,不會報錯。
  • 只要支持Iterator接口,均可以被結構賦值。
  • null能夠替代默認值,而成功的結構賦值。
  • 結構中不定參數能夠出如今除第一個之外的其它的其餘位置。
  • 解構是先找到同名的屬性,而後再賦給對應的變量。
  • 默認值能夠引用結構賦值的其餘變量,但該變量必須已經聲明。

解析:html

  • 結構賦值的默認值只對undefined有效。
  • 不定參數只能出如今最後一個位置。

3.下列對css外邊距描述正確的是(不考慮BFC對邊距的影響):

  • 外邊距的css代碼是padding
  • 兩個上下相鄰的同級元素Div1,Div2。Div1的下邊距是10px,Div2的上邊距是10px。Div1和Div2的間距是20px
  • 兩個上下相鄰的同級元素Div1,Div2。Div1的下邊距是20px,Div2的上邊距是10px。Div1和Div2的間距是20px
  • 外邊距的值爲(10px 20px 30px)。因此其上邊距爲10px,下邊距爲20px,左邊距爲30px,右邊距爲30px
  • 一個空元素的高度,邊框,內邊距都是0,上下外邊距爲20px,那麼這個空元素的框模型的高度爲40px
  • 一個空元素的高度,邊框,內邊距都是0,上下外邊距爲20px,那麼這個空元素的框模型的高度爲20px

解析:前端

  • 塊級元素的上外邊距和下外邊距有時會合並(或摺疊)爲一個外邊距,其大小取其中的最大者,這種行爲稱爲外邊距摺疊(margin collapsing),有時也翻譯爲外邊距合併,一般狀況下上下兩個相鄰塊元素的margin會發生合併。相關資料
  • 一個空元素中不包含任何內容,而且在其 margin-top 與 margin-bottom 之間沒有邊框、內邊距、行內內容、height、min-height 將二者分開,也會發生摺疊。

4.如下對於git說法正確的是:

  • git是由github創造的代碼管理工具
  • git和svn實現的原理是同樣的
  • 從git原理設計上來說,執行git pull和先執行git fetch再執行git merge效果是同樣的。
  • git將代碼提交到遠程倉庫的命令是git commit
  • git rm只會將文件從git提交記錄中刪除,不會刪除磁盤上的物理文件
  • git push -f將會從新提交當前的commit節點,不會重寫歷史commit

解析:html5

  • git pull至關於先執行git fetch再執行git merge,可是能夠經過--rebase將第二步變爲git rebase操做相關資料

5.如下關於跨域說法錯誤的是?

  • http://taobao.com/a.htmlhttps://taobao.com/b.html是相同的域名,屬於同源
  • 經過document.domain的調用,可使ifram內嵌的http://a.taobao.com/page.html經過父頁面http://taobao.com/home.html的同源檢測
  • CSS中經過@font-face使用字體也會有跨域問題
  • Cookie,LocalStorage和IndexedDB都會受到同源策略的限制
  • postMessage,JSONP,WebSocket都是經常使用的解決跨域的方案
  • 跨域資源共享規範中規定了除了GET以外的HTTP請求,或者搭配某些MINE類型的POST請求,瀏覽器都須要先發一個OPTIONS請求。

解析:java

  • 協議,端口和主機都相同,則兩個頁面算同源。 相關資料

6.如下說法正確的是?

  • 經過new URL('www.taobao.com') ,能夠解析url內容。
  • console.log()是異步調用
  • Async functions本質上是Generators的語法糖
  • 在發佈NPM模塊時,版本號能夠任意
  • process.nextTrick()和setImmediate()執行時機一致
  • Node.js是一門後端語言

解析:node

  • new URL(url, [base])第一個參數必須爲一個完整url(不能缺乏協議)或相對url。相關資料
  • async function本質上是generators+ promises模式的語法糖
  • NPM模塊版本號必須爲x.y.z形式
  • process.nextTrick是微任務,setImmediate是宏任務,執行時機不一致

7.下面哪些是瀏覽器的緩存相關功能?

  • indexDB
  • localStorage
  • sessionStorage
  • applicationCache
  • File System API
  • Cache API

解析:git

  • File System API是文件系統相關API

8.關於HTML<script>標籤的defer和async屬性,說法正確的是

  • 加了async屬性的腳本加載和執行不會阻塞頁面的渲染
  • 加了defer屬性的腳本加載和執行不會阻塞頁面的渲染
  • 加了async屬性的腳本加載完成後會立馬執行
  • 加了defer屬性的腳本加載完成後會在DOMContentLoaded事件前執行
  • 全部加了defer屬性的腳本加載完成後不保證執行順序

解析: github


9.如下操做,可以在必定程度上保證npm模塊安全的是

  • 使用安全服務檢查,如:synk等
  • 開啓npm兩步驗證 (不肯定)
  • 使用lockfile
  • 在須要的時候,把密鑰放在包裏,方便使用
  • 直接使用知足功能的包
  • 安裝包時使用--ignore-scripts

解析:npm

  • synk是一個幫助發現、修復和監視開放源碼中的已知漏洞的命令行和構建時工具。
  • --ignore-scripts 能夠幫助咱們安裝一個npm包但不執行它的腳本。 相關資料

10.如下描述正確的是

  • 標準盒子模型中:盒子所佔寬度 = 左右margin + 左右border + 左右padding + width
  • 當樣式box-sizing:border-box時,塊級別元素width包括border、padding
  • IE盒子模型中:盒子總寬度 = 左右margin + 左右border + width
  • 經過設置overflow:hidden能夠建立一個新的BFC
  • 一個浮動的div加文字可能會出現文字環繞的狀況,此時能夠經過建立一個新的BFC來解決該問題。
  • 絕對定位元素的外邊距不會摺疊

解析:

  • 塊格式化上下文(Block Formatting Context,BFC) 是頁面中的一塊渲染區域,能夠看做是隔離了的獨立容器,容器裏面的元素不會在佈局上影響到外面的元素,而且 BFC 具備普通容器所沒有的一些特性。建立BFC的一些方式有浮動(元素的 float 不是 none),行內塊元素(元素的 display 爲 inline-block),overflow 值不爲 visible 的塊元素等。 相關資料
  • 浮動元素和絕對定位元素的外邊距不會摺疊。

疑問點說明

不少朋友說第8題最後一個選項defer屬性能保證順序不該該選上,可是《javascript高級程序設計第3版》(p13)這個地方提了一下。

html5規範要求腳本按照它們出現的前後順序執行,所以第一個延遲腳本會先於第二個延遲腳本執行,而這兩個腳本會先於DOMContentLoaded事件執行。在現實當中,延遲腳本並不必定會按照順序執行,也不必定會在DOMContentLoaded事件觸發前執行,所以最好只包含一個延遲腳本。

因此我這裏就按照實際狀況選上了,若是不選也有理論支持,因此看你們本身支持哪一種見解了,思否的這個問題下也有討論,感興趣的能夠參與一下。 問題地址


第九題npm兩步驗證那個選項,我後面加了不肯定,是由於這題的安全我理解爲使用者確保引入包的安全,而兩步驗證屬於開發者保證本身發佈包安全性的一種行爲,我這裏不是很想選上,等後面標準答案吧。

相關文章
相關標籤/搜索