web前端面試總結

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

摘要:前端的東西特別多,面試的時候我們如何從容應對,作為一個老兵,我在這里分享幾點我的經驗。

一、javascript 基礎(es5)

1、原型:這里可以談很多,只要圍繞 [[ prototype ]] 談,都沒啥問題

2、閉包:牽扯作用域,可以兩者聯系起來一起談

3、作用域:詞法作用域,動態作用域

4、this:不同情況的調用,this 指向分別如何。順帶可以提一下 es6 中箭頭函數沒有 this, arguments, super 等,這些只依賴包含箭頭函數最接近的函數

5、call,apply,bind 三者用法和區別:參數、綁定規則(顯示綁定和強綁定),運行效率(最終都會轉換成一個一個的參數去運行)、運行情況(call,apply 立即執行,bind 是return 出一個 this “固定”的函數,這也是為什么 bind 是強綁定的一個原因)。

6、json jsonp json 數據格式,什么是真正的json,理解跨域的原理,如何解決跨域。

二、JS 基礎(ES6)

  1. let,const:let 產生塊級作用域(通常配合 for 循環或者 {} 進行使用產生塊級作用域),const 申明的變量是常量(內存地址不變)

  2. Promise:這里你談 promise 的時候,除了將他解決的痛點以及常用的 API 之外,最好進行拓展把 eventloop 帶進來好好講一下,microtask、macrotask 的執行順序,如果看過 promise 源碼,最好可以談一談 原生 Promise 是如何實現的。Promise 的關鍵點在于callback 的兩個參數,一個是 resovle,一個是 reject。還有就是 Promise 的鏈式調用(Promise.then(),每一個 then 都是一個責任人)。

  3. Generator:遍歷器對象生成函數,最大的特點是可以交出函數的執行權

  • function?關鍵字與函數名之間有一個星號;

  • 函數體內部使用?yield?表達式,定義不同的內部狀態;

  • next?指針移向下一個狀態

這里你可以說說?Generator?的異步編程,以及它的語法糖?async和?awiat,傳統的異步編程。ES6 之前,異步編程大致如下

  • 回調函數

  • 事件監聽

  • 發布/訂閱

傳統異步編程方案之一:協程,多個線程互相協作,完成異步任務。

  1. async、await:Generator 函數的語法糖。有更好的語義、更好的適用性、返回值是 Promise。

  • async => *

  • await => yield

基本用法

async function timeout (ms) { await new Promise((resolve) => { setTimeout(resolve, ms) })}async function asyncConsole (value, ms) { await timeout(ms) console.log(value)}asyncConsole('hello async and await', 1000)

注:最好把2,3,4 連到一起講

  1. AMD,CMD,CommonJs,ES6 Module:解決原始無模塊化的痛點

  • AMD:requirejs 在推廣過程中對模塊定義的規范化產出,提前執行,推崇依賴前置

  • CMD:seajs 在推廣過程中對模塊定義的規范化產出,延遲執行,推崇依賴就近

  • CommonJs:模塊輸出的是一個值的 copy,運行時加載,加載的是一個對象(module.exports 屬性),該對象只有在腳本運行完才會生成

  • ES6 Module:模塊輸出的是一個值的引用,編譯時輸出接口,ES6 模塊不是對象,它對外接口只是一種靜態定義,在代碼靜態解析階段就會生成。

三、框架相關

  1. 數據雙向綁定原理:常見數據綁定的方案

  • Object.defineProperty(vue):劫持數據的 getter 和 setter

  • 臟值檢測(angularjs):通過特定事件進行輪循

  • 發布/訂閱模式:通過消息發布并將消息進行訂閱

  1. VDOM:三個 part,

  • 虛擬節點類,將真實 DOM 節點用 js 對象的形式進行展示,并提供 render 方法,將虛擬節點渲染成真實 DOM

  • 節點 diff 比較:對虛擬節點進行 js 層面的計算,并將不同的操作都記錄到 patch 對象

  • re-render:解析 patch 對象,進行 re-render

補充1:VDOM 的必要性?

  • 創建真實DOM的代價高:真實的 DOM 節點 node 實現的屬性很多,而 vnode 僅僅實現一些必要的屬性,相比起來,創建一個 vnode 的成本比較低。

  • 觸發多次瀏覽器重繪及回流:使用 vnode ,相當于加了一個緩沖,讓一次數據變動所帶來的所有 node 變化,先在 vnode 中進行修改,然后 diff 之后對所有產生差異的節點集中一次對 DOM tree 進行修改,以減少瀏覽器的重繪及回流。

補充2:vue 為什么采用 vdom?

引入 Virtual DOM 在性能方面的考量僅僅是一方面。

性能受場景的影響是非常大的,不同的場景可能造成不同實現方案之間成倍的性能差距,所以依賴細粒度綁定及 Virtual DOM 哪個的性能更好還真不是一個容易下定論的問題。

Vue 之所以引入了 Virtual DOM,更重要的原因是為了解耦 HTML 依賴,這帶來兩個非常重要的好處是:

  • 不再依賴 HTML 解析器進行模版解析,可以進行更多的 AOT 工作提高運行時效率:通過模版 AOT 編譯,Vue 的運行時體積可以進一步壓縮,運行時效率可以進一步提升;

  • 可以渲染到 DOM 以外的平臺,實現 SSR、同構渲染這些高級特性,Weex 等框架應用的就是這一特性。

綜上,Virtual DOM 在性能上的收益并不是最主要的,更重要的是它使得 Vue 具備了現代框架應有的高級特性。

  1. vue 和 react 區別

  • 相同點:都支持 ssr,都有 vdom,組件化開發,實現 webComponents 規范,數據驅動等

  • 不同點:vue 是雙向數據流(當然為了實現單數據流方便管理組件狀態,vuex 便出現了),react 是單向數據流。vue 的 vdom 是追蹤每個組件的依賴關系,不會渲染整個組件樹,react 每當應該狀態被改變時,全部子組件都會 re-render。

上面提到的每個點,具體細節還得看自己的理解

  1. 為什么用 vue :簡潔、輕快、舒服、沒了

四、緩存

首先得明確 http 緩存的好處

1、減少了冗余的數據傳輸,減少網費

2、減少服務器端的壓力

3、Web 緩存能夠減少延遲與網絡阻塞,進而減少顯示某個資源所用的時間

4、加快客戶端加載網頁的速度

常見 http 緩存的類型

1、私有緩存(一般為本地瀏覽器緩存)

2、代理緩存

然后談談本地緩存

本地緩存是指瀏覽器請求資源時命中了瀏覽器本地的緩存資源,瀏覽器并不會發送真正的請求給服務器了。它的執行過程是

1、第一次瀏覽器發送請求給服務器時,此時瀏覽器還沒有本地緩存副本,服務器返回資源給瀏覽器,響應碼是200 OK,瀏覽器收到資源后,把資源和對應的響應頭一起緩存下來。

2、第二次瀏覽器準備發送請求給服務器時候,瀏覽器會先檢查上一次服務端返回的響應頭信息中的Cache-Control,它的值是一個相對值,單位為秒,表示資源在客戶端緩存的最大有效期,過期時間為第一次請求的時間減去Cache-Control的值,過期時間跟當前的請求時間比較,如果本地緩存資源沒過期,那么命中緩存,不再請求服務器。

3、如果沒有命中,瀏覽器就會把請求發送給服務器,進入緩存協商階段。

  • 更多分享請關注,微信公眾號:xiaohumuhe13,或今日頭條號:(大話前端),還能獲得海量視頻資源哦~
  • 我的目標:做最好最全的前端資源分享 ?

轉載于:https://my.oschina.net/jinsanpang/blog/1608811

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391431.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

783. 二叉搜索樹節點最小距離(dfs)

給你一個二叉搜索樹的根節點 root ,返回 樹中任意兩不同節點值之間的最小差值 。 注意:本題與 530:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同 示例 1: 輸入:root [4,2,6,1,3] 輸…

linux epoll機制對TCP 客戶端和服務端的監聽C代碼通用框架實現

1 TCP簡介 tcp是一種基于流的應用層協議,其“可靠的數據傳輸”實現的原理就是,“擁塞控制”的滑動窗口機制,該機制包含的算法主要有“慢啟動”,“擁塞避免”,“快速重傳”。 2 TCP socket建立和epoll監聽實現 數據結構…

linux中安裝robot環境

https://www.cnblogs.com/lgqboke/p/8252488.html(文中驗證robotframework命令應該為 robot --version) 可能遇到的問題: 1、python版本太低 解決:升級python https://www.cnblogs.com/huaxingtianxia/p/7986734.html 2、pip安裝報…

angular 模塊構建_我如何在Angular 4和Magento上構建人力資源門戶

angular 模塊構建Sometimes trying a new technology mashup works wonders. Both Magento 2 Angular 4 are very commonly talked about, and many consider them to be the future of the development industry. 有時嘗試新技術的mashup會產生奇跡。 Magento 2 Angular 4都…

tableau破解方法_使用Tableau瀏覽Netflix內容的簡單方法

tableau破解方法Are you struggling to perform EDA with R and Python?? Here is an easy way to do exploratory data analysis using Tableau.您是否正在努力使用R和Python執行EDA? 這是使用Tableau進行探索性數據分析的簡單方法。 Lets Dive in to know the …

六周第三次課

2019獨角獸企業重金招聘Python工程師標準>>> 六周第三次課 9.6/9.7 awk awk也是流式編輯器,針對文檔中的行來操作,一行一行地執行。 awk比sed更強大的功能是它支持了分段。 -F選項的作用是指定分隔符,如果不加-F選項,…

面試題字符集和編碼區別_您和理想工作之間的一件事-編碼面試!

面試題字符集和編碼區別A recruiter calls you for a position with your dream company. You get extremely excited and ask about their recruiting process. He replies saying “Its nothing big, you will have 5 coding rounds with our senior tech team, just the sta…

初探Golang(1)-變量

要學習golang,當然要先配置好相關環境啦。 1. Go 安裝包下載 https://studygolang.com/dl 在Windows下,直接下載msi文件,在安裝界面選擇安裝路徑,然后一直下一步就行了。 在cmd下輸入 go version即可看到go安裝成功 2. Golan…

macaca web(4)

米西米西滴,吃過中午飯來一篇,話說,上回書說道macaca 測試web(3),參數驅動來搞,那么有小伙本又來給雷子來需求, 登錄模塊能不能給我給重新封裝一下嗎, 我說干嘛封裝&…

linux中安裝cx_Oracle

https://blog.csdn.net/w657395940/article/details/41144225 各種嘗試都,最后 pip install cx-Oracle 成功導入 轉載于:https://www.cnblogs.com/gcgc/p/11447583.html

rfm模型分析與客戶細分_如何使用基于RFM的細分來確定最佳客戶

rfm模型分析與客戶細分With some free time at hand in the midst of COVID-19 pandemic, I decided to do pro bono consulting work. I was helping a few e-commerce companies with analyzing their customer data. A common theme I encountered during this work was tha…

leetcode 208. 實現 Trie (前綴樹)

Trie(發音類似 “try”)或者說 前綴樹 是一種樹形數據結構,用于高效地存儲和檢索字符串數據集中的鍵。這一數據結構有相當多的應用情景,例如自動補完和拼寫檢查。 請你實現 Trie 類: Trie() 初始化前綴樹對象。 void…

那些年收藏的技術文章(一) CSDN篇

#Android ##Android基礎及相關機制 Android Context 上下文 你必須知道的一切 Android中子線程真的不能更新UI嗎? Android基礎和運行機制 Android任務和返回棧完全解析,細數那些你所不知道的細節 【凱子哥帶你學Framework】Activity啟動過程全解析 【凱子…

chrome json插件_如何使用此免費的Chrome擴展程序(或Firefox插件)獲取易于閱讀的JSON樹

chrome json插件JSON is a very popular file format. Sometimes we may have a JSON object inside a browser tab that we need to read and this can be difficult.JSON是一種非常流行的文件格式。 有時我們可能需要在瀏覽器選項卡中包含一個JSON對象,這很困難。…

test10

test10 轉載于:https://www.cnblogs.com/Forever77/p/11447638.html

數據倉庫項目分析_數據分析項目:倉庫庫存

數據倉庫項目分析The code for this project can be found at my GitHub.該項目的代碼可以在我的GitHub上找到 。 介紹 (Introduction) The goal of this project was to analyse historic stock/inventory data to decide how much stock of each item a retailer should hol…

leetcode 213. 打家劫舍 II(dp)

你是一個專業的小偷,計劃偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都 圍成一圈 ,這意味著第一個房屋和最后一個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一…

HTTP緩存的深入介紹:Cache-Control和Vary

簡介-本文范圍 (Introduction - scope of the article) This series of articles deals with caching in the context of HTTP. When properly done, caching can increase the performance of your application by an order of magnitude. On the contrary, when overlooked o…

059——VUE中vue-router之路由嵌套在文章系統中的使用方法:

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vue-router之路由嵌套在文章系統中的使用方法&#xff1a;</title><script src"vue.js"></script><script src"v…

web前端效率提升之瀏覽器與本地文件的映射-遁地龍卷風

1.chrome瀏覽器&#xff0c;機制是攔截url&#xff0c;      1.在瀏覽器Element中調節的css樣式可以直接同步到本地文件&#xff0c;反之亦然&#xff0c;瀏覽器會重新加載css&#xff0c;省去刷新   2.在source面板下對js的編輯可以同步到本地文件&#xff0c;反之亦然…