前東家部門是作旅遊的,在此次疫情打擊下,基本玩完。前端
因而我半休半遠程三個月後,在4月底領了裁人便當。至今,差很少找了兩個月的工做。node
本篇不是標準的面經,想從中獲取大廠跳槽經驗的能夠歇一歇。webpack
更多的是想講一下絕大多數如你如我,學歷渣技術差,沒大廠經驗的前端如何走。Offer
狀況我的比較懶,一週可能就面2~3家,只約下午。部分星期沒有面試邀約。nginx
囿於學歷+公司,兩招聘軟件都被我用成「Boss
直拒」和「拉鉤上吊」git
粗略算了下,面了約12家大中小型公司,僅4家Offer
,狀況分別爲:github
做爲一個社交孤兒,在本次跳槽歷程中也是發現本身很多的問題,且聽我慢慢道來。web
本篇雖然有點喪,但大家能夠從中找到對應的問題(我幾乎犯了全部面試的低級錯誤)面試
部分的公司有:360
奇舞團,某上市遊戲公司,風變編程,金山系某司,阿里。docker
面過的公司有點多,一併說了吧。編程
見於:某遊戲公司、小鵝通、阿里一面、另外三家小公司
這問題的答案,我結合了yck
《前端面試之道》和 瀏覽器原理專欄:
整個過程能夠分爲幾步:
用戶輸入
當用戶輸入關鍵字並鍵入回車以後,這意味着當前頁面即將要被替換成新的頁面,不過在這個流程繼續以前,瀏覽器還給了當前頁面一次執行 beforeunload
事件的機會,beforeunload
事件容許頁面在退出以前執行一些數據清理操做,還能夠詢問用戶是否要離開當前頁面。
URL
請求過程
首先,網絡進程會查找本地緩存是否緩存了該資源。
若是有緩存資源,那麼直接返回資源給瀏覽器進程;若是在緩存中沒有查找到資源,那麼直接進入網絡請求流程。這請求前的第一步是要進行 DNS
解析,以獲取請求域名的服務器 IP
地址。若是請求協議是 HTTPS
,那麼還須要創建 TLS
鏈接。
DNS
也有幾步緩存:瀏覽器緩存,hosts
文件,TCP
三次握手,HTTP
。TLS
握手,HTTPS
。接下來就是利用 IP
地址和服務器創建 TCP
鏈接。鏈接創建以後,瀏覽器端會構建請求行、請求頭等信息,並把和該域名相關的 Cookie
等數據附加到請求頭中,而後向服務器發送構建的請求信息。
數據在進入服務端以前,可能還會先通過負責負載均衡的服務器,它的做用就是將請求合理的分發到多臺服務器上,這時假設服務端會響應一個 HTML
文件。
首先瀏覽器會判斷狀態碼是什麼,若是是 200
那就繼續解析,若是 400
或 500
的話就會報錯,若是 300
的話會進行重定向,這裏會有個重定向計數器,避免過屢次的重定向,超過次數也會報錯。
瀏覽器開始解析文件,若是是 gzip
格式的話會先解壓一下,而後經過文件的編碼格式知道該如何去解碼文件。
準備渲染進程
默認狀況下,Chrome
會爲每一個頁面分配一個渲染進程,也就是說,每打開一個新頁面就會配套建立一個新的渲染進程。
渲染階段
文件解碼成功後會正式開始渲染流程,先會根據 HTML
構建 DOM
樹,有CSS
的話會去構建 CSSOM
樹。若是遇到 script
標籤的話,會判斷是否存在 async
或者 defer
,前者會並行進行下載並執行 JS,後者會先下載文件,而後等待 HTML
解析完成後順序執行。
若是以上都沒有,就會阻塞住渲染流程直到 JS
執行完畢。
CSSOM
樹和 DOM
樹構建完成後會開始生成 Render
樹,這一步就是肯定頁面元素的佈局、樣式等等諸多方面的東西
在生成 Render
樹的過程當中,瀏覽器就開始調用GPU
繪製,合成圖層,將內容顯示在屏幕上了。
eventloop
機制,promise
的實現和靜態方法、async
實現。eventloop
題目。
見於:阿里一面、小鵝通、頭條一面、360一面、風變編程、以及其它四家公司,必考。
Event Loop
是什麼?
JavaScript
的事件分兩種,宏任務(macro-task
)和微任務(micro-task
)
script,setTimeout,setInterval
Promise.then(非new Promise)
,process.nextTick(node中)
Event Table
並註冊函數,異步事件完成後,會將回調函數放入Event Queue
中(宏任務和微任務是不一樣的Event Queue
),同步任務執行完成後,會從Event Queue
中讀取事件放入主線程執行,回調函數中可能還會包含不一樣的任務,所以會循環執行上述操做。Promise
的含義
Promise
是一個異步編程的解決方案,簡單來說,Promise
相似一個盒子,裏面保存着在將來某個時間點纔會結束的事件。
三種狀態:
pending
:進行中fulfilled
:已經成功rejected
:已經失敗 狀態改變,只能從 pending
變成 fulfilled
或者 rejected
,狀態不可逆。async
實現和經常使用方法
async
函數的實現原理,就是將 Generator
函數和自動執行器,包裝在一個函數裏。
Generator
函數是協程在 ES6 的實現,最大特色就是能夠交出函數的執行權(即暫停執行)。
協程是一種用戶態的輕量級線程, 協程的調度徹底由用戶控制。協程擁有本身的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其餘地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操做棧則基本沒有內核切換的開銷,能夠不加鎖的訪問全局變量,因此上下文的切換很是快。
Vue
和 React
之間的區別摘自yck《前端面試之道》
Vue 的表單可使用 v-model
支持雙向綁定,相比於 React 來講開發上更加方便,固然了 v-model
其實就是個語法糖,本質上和 React 寫表單的方式沒什麼區別。
改變數據方式不一樣,Vue 修改狀態相比來講要簡單許多,React 須要使用 setState
來改變狀態,而且使用這個 API 也有一些坑點。而且 Vue 的底層使用了依賴追蹤,頁面更新渲染已是最優的了,可是 React 仍是須要用戶手動去優化這方面的問題。
React 16之後,有些鉤子函數會執行屢次,這是由於引入 Fiber 的緣由,這在後續的章節中會講到。
React 須要使用 JSX,有必定的上手成本,而且須要一整套的工具鏈支持,可是徹底能夠經過 JS 來控制頁面,更加的靈活。Vue 使用了模板語法,相比於 JSX 來講沒有那麼靈活,可是徹底能夠脫離工具鏈,經過直接編寫 render
函數就能在瀏覽器中運行。
在生態上來講,二者其實沒多大的差距,固然 React 的用戶是遠遠高於 Vue 的。
在上手成本上來講,Vue 一開始的定位就是儘量的下降前端開發的門檻,然而 React 更多的是去改變用戶去接受它的概念和思想,相較於 Vue 來講上手成本略高。
Vue 3.0
面試題見於:360一面、風變編程,預計下半年必考。
Vue3.0
都有哪些重要新特性?
React Hooks
和webpack
的Tree-shaking
Vue3.0
對比Vue2.0
的優點在哪?
Vue3.0
和React 16.X
都有哪些區別和類似處?
Vue3.0
抄過來,卻作得更好的部分。
Vue3.0
是如何實現代碼邏輯複用的?
Composition API
和mixin
的差別,並凸顯出Vue2.0
那種代碼上下反覆橫跳的缺點。以上答案基本能夠在下面兩篇博客裏找到:
React
高頻面試題
React 16.X
的Fiber
原理
setState
原理,何時是同步的?
React Hooks
相對高階組件和Class
組件有什麼優點/缺點?
React 16.X
的生命週期,以及爲什麼要替換掉之前的?
React
跨平臺的實現原理。
- 說一說
redux
,以及比flux
先進的緣由。
平心而論,若是面試前未要求技術棧,建議往Vue
方向引。React
的面試題要高一兩個難度....
HTTP
高頻面試題見於:阿里一面、頭條一面、360一面、風變編程、以及其它四家公司,必考。
- 講一講強緩存和協議緩存?
HTTP/2.0
都有哪些特性?頭部壓縮的原理?
TCP
三次握手和四次揮手?以其存在乎義。
- 狀態碼。
302.304.301.401.403
的區別?
- 狀態碼。
204
和304
分別有什麼做用?
HTTP
和HTTPS
握手差別?
CSRF
跨站請求僞造和XSS
跨站腳本攻擊是什麼?
- 你是如何解決跨域的?都有幾種?
nginx
瞭解嗎?你都用來作什麼?
- 有了【
Last-Modified,If-Modified-Since
】爲什麼還要有【ETag、If-None-Match
】
我總結過一張xmind
圖,歡迎到我公衆號裏自取。
JS/CSS
高頻基礎問題見於:阿里一面、頭條一面、風變編程、以及其它多家公司,很是高頻。
- 彈性盒子中
flex: 0 1 auto
表示什麼意思?
- 箭頭函數能夠用
new
實例化嗎?聊聊this
的指向問題。
- 聊一聊原型鏈。
- 垃圾回收中的堆和棧的區別。
0.1 + 0.2 != 0.3
背後的原理?
TypeScript
用過嗎?聊聊你對TypeScript
的理解?
- 圖片懶加載的原理。
call、apply
和bind
方法的用法以及區別
Webpack
原理,以及經常使用插件
- 項目中遇到的難點,以及解決思路。
- 你是如何作
Web
性能優化的?首屏渲染如何處理?
這個問題很大,我有個簡略版,回答思路引自專欄《 瀏覽器工做原理與實踐》:
主要圍繞着兩個階段:加載階段 和 交互階段
加載階段:
Webpack
拆/合包,懶加載等)RTT
的時間(Gzip
壓縮,邊緣節點CDN
)交互階段:
JS
代碼不可佔用主線程過久,與首屏無關的腳本加上延後處理(aysnc/defer
)屬性,與DOM
無關的交給Web Worker
。CSS
用對選擇器(儘量綁定Class
或Id
),不然會遍歷屢次。will-change
屬性,瀏覽器會開闢新的層處理(觸發合成機制)
- 埋點數據上報的方案作過嗎?
- 前端架構思考,你是如何考量部門的技術棧的?
- 前端重構思考,老項目在新業務緊急與重構技術債務間如何衡量輕重?
DevOps
認知因爲我第二家公司部門是作DevOps
平臺,有些與前端無關的面試題。
- 單元測試作過嗎?你是怎麼作的?
docker
準備流程?
DevOps
平臺關鍵功能點?
- 自動化測試,
CI/CD
的關鍵核心都有哪些?
- 如何保障
DevOps
推進?
- 接口如何作優化?
Mock
平臺搭建方案?
今年,太難太難了。 @木易楊 大佬的這段話很對:
先來講下大環境,感受很是很差,就一二線互聯網來講招人的沒幾家公司,裁人的、內部調整的、鎖 HC 的確是一大堆,因此你們在換工做的時候必定不要裸辭,風險太大。
今年面試和往年感覺有些不一樣,對於項目的重難點、亮點、我的在團隊中作的貢獻、對項目的 Owner 意識等比較關注,還有就是編程能力的考察會更多一些。
簡單講,就是學歷是第一競爭力,你靠APP
投簡歷幾乎沒反饋,內推最靠譜。
平心而論,過往跳槽都不是很順利,但今年是真感覺到了天花板:
嚴格說,本面渣不配給一些面試技巧,但有些是我沒作好卻很不錯的東西。建議大家看一看:
若是你一沒學歷,二沒大廠簡歷,簡歷寫得稀爛。
相信我,投遞以前,付個幾十塊找業內大佬幫你改改簡歷,你必定會有更多的投遞反饋。
面試官您好!
我叫***
,很開心今天來應聘**
崗位,我有*
年***
崗位工做經驗,工做內容包括**、*** **
等,曾參與***
項目/工做,完成**
業績,這些經驗鍛鍊了我***
能力。除了平常業務開發外,我還在***
方面.....
面試以前,我瞭解到我們公司主要從事***
業務、***
類產 品,屬於行業排名***
的企業,我對這個行業很是看好,也想在這行 長期發展!這個崗位要求的** ***
能力和經驗,與個人工做經歷很 匹配,相信我可以勝任這個崗位,謝謝!
在我面試一個月左右,發現常常掛在二/三面後,開始審視本身的問題:
說實話,挺難述說的,特別是我這種沒啥大項目經驗,前三年都在作中後臺系統居多,只能從一些細節入手,如下是個人草稿(雖然很爛),供大家參考一下。:
Vue後臺細顆粒權限控制與防多人操做:
通常簡單的權限控制會以角色區別,但開發/運維們想本身設成員,需求1
給他們作了一個權限管理的模塊,但由於DevOps的功能模塊太多,記不住,開發/運維們想要直觀的修改權限,需求2。
考慮到這個痛點,我設計了一個「受權模式」,高權限的擁有切換功能。
切換後,該模塊下全部的按鈕都會先攔截左鍵點擊,並攔截默認右鍵,多了一個自定義屬性。以及受權/凍結 菜單。受權功能,直接擁有選擇成員的樹控件彈窗。
使用後會上傳 成員數組 + 自定義屬性。下一次訪問後臺便返回 該自定義屬性 對象 ,以肯定新的權限。
權限問題解決後,開發/運維們又發現,一個部署/發佈 點擊模塊存在同時操做的人不少。會衝突。需求4。
在多人頻繁觸發模塊,加入了WebSocket
管理,實現相似在線文檔的顯示功能,顯示當前操做人,並設屏蔽(同時操做會有顯示姓名,並鎖住)。
簡單版本:當前按鈕 點擊後,後臺設個時間閥值,該段時間內其餘人點擊了就彈出提醒當前有人操做。
複雜版本:多人WebSocket
維護一個值。
對應場景:DevOps
平臺
去年寫過一篇年度總結:
我叫「笑妄」,16年地理信息系統專業專科畢業,自學的前端。 目前三年半的經驗,先後工做過幾家中小公司,作過Python爬蟲,也曾在運維開發部混過。前兩年的工做,都在爲生計掙扎,作碼農僅因自身一無所長,看這行工資高,就擠進來了。--- 《前端廢材的自我勸退之路 》
y1s1
,我底子不好。1年時才搞懂佈局,2年不會函數return
,3年才熟悉React
。
入這行以來,一路雖有伯樂,但於前端領域仍單打獨鬥居多。
卻得益於這行,讓我知「井外方覺天地大」。認識優秀的人越多,越想努力,精進。
因此這段時間也沒閒着,看了一些還不錯的書/專欄:
DevOps
實戰筆記》,有趣,但需有必定的基礎。HTTP
協議》,還不錯,值二刷。Google V8
》,相對第一本《瀏覽器原理》,水了很多,部分值二刷。Nginx
核心知識100講》,目前正在看。如何提升本身的技術競爭力(或收入)?
DevOps
,幫助我搞掂了很多2/3面技術面。這一路上,個人能力,學歷,背景樣樣不如人,也曾懶惰曾迷茫,但一直都在和本身賽跑,我不服輸:
雖然在你離開學校的時候
全部的人都認爲你不會有出息
你卻沒有所以怨天尤人自暴自棄
....
在那時侯咱們身邊都有一卡車的難題
不知道成功的意義就在超越本身
咱們都是和本身賽跑的人
爲了更好的將來拼命努力
爭取一種意義非凡的勝利
爲了更好的明天拼命努力
前方沒有終點
咱們永不停息
若是你以爲這篇內容對你挺有啓發,我想邀請你幫我三個小忙:
閒暇之餘也建了一個「前端人才庫」羣
共同維護了一個面試文檔,近20次面經。很多人也是如願得到了滿意的Offer
:360、騰訊、大搜車、金山等等。想進來討論面試/蹭蹭最新面試題的能夠加我微信。
勸退師我的微信:huab119(加不到的能夠加小號:luob119,或公衆號留言,我加大家)
也能夠來個人GitHub
博客裏拿全部文章的源文件:
前端勸退指南:github.com/roger-hiro/… 一塊兒玩耍呀。~