分享一次百度面試,部分題目會帶有面試答案,百度二面三面都有手寫代碼的環節,對於動手能力弱的小伙伴來說會有些挺吃力。
一面
1. 為什么要用flex布局,align-items和justify-content的區別
傳統布局基於盒模型,非常依賴 display屬性 、position屬性 、float屬性。而flex布局更靈活,可以簡便、完整、響應式地實現各種頁面布局,比如水平垂直居中。
align-items:定義在側軸(縱軸)方向上的對齊方式;
justify-content:定義在主軸(橫軸)方向上的對齊方式。
2. webpack是怎么打包的,babel又是什么?
把項目當做一個整體,通過一個給定的主文件(如:index.js),Webpack將從這個文件開始找到項目的所有依賴文件,使用loaders處理它們,最后打包為一個(或多個)瀏覽器可識別的JavaScript文件。
babel將es6、es7、es8等語法轉換成瀏覽器可識別的es5或es3語法。
3. saas和less不同於普通css的地方
- 定義變量,可以把反復使用的css屬性值定義成變量,然后通過變量名來引用它們,而無需重復書寫這一屬性值;
- 嵌套寫法,父子關系一目了然;
- 使用運算符,可以進行樣式的計算;
- 內置一些顏色處理函數用來對顏色值進行處理,例如加亮、變暗、顏色梯度等;
- 繼承:為多個元素定義相同樣式的時候,我們可以考慮使用繼承的做法;
- Mixins (混入):有點像是函數或者是宏,當某段 CSS經常需要在多個元素中使用時,可以為這些共用的 CSS 定義一個Mixin,然后只需要在需要引用這些 CSS 地方調用該 Mixin 即可。
4. es 6模塊和其他模塊不同的地方
對比了一下es6模塊和CommonJS模塊:
5. 有沒有用過es6的一些異步處理函數
Promise,generator,async await
6. redux怎么處理異步操作
可以引入Redux-thunk或者redux-promise這種中間件,可以延遲事件的派發。
其中的原理:是因為他們用了applymiddleware()包裝了store的dispatch方法,擁有可以處理異步的能力。
7. 為什么reducer要是個純函數,純函數是什么?
純函數:對於相同的輸入,永遠會得到相同的輸出,而且沒有任何可觀察的副作用,也不依賴外部環境的狀態。
原因:Redux只通過比較新舊兩個對象的存儲位置來比較新舊兩個對象是否相同(淺比較)。如果你在reducer內部直接修改舊的state對象的屬性值,那么新的state和舊的state將都指向同一個對象。因此Redux認為沒有任何改變,返回的state將為舊的state。兩個state相同的話,頁面就不會重新渲染了。
因為比較兩個Javascript對象所有的屬性是否相同的的唯一方法是對它們進行深比較。但是深比較在真實的應用當中代價昂貴,因為通常js的對象都很大,同時需要比較的次數很多。因此一個有效的解決方法是作出一個規定:無論何時發生變化時,開發者都要創建一個新的對象,然后將新對象傳遞出去。同時,當沒有任何變化發生時,開發者發送回舊的對象。也就是說,新的對象代表新的state。
8. 高階函數是什么,怎么去寫一個高階函數
高階函數:參數值為函數或者返回值為函數。例如map,reduce,filter,sort方法就是高階函數。
編寫高階函數,就是讓函數的參數能夠接收別的函數。
9. vue跟react的區別是什么
10. nodejs處理了什么問題
可以處理高並發的I/O,也能與websocket配合,開發長連接的實時交互應用程序。
11. 響應式布局,怎么做移動端適配
使用媒體查詢可以實現響應式布局。
移動端適配方案:
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
width=device-width:
讓當前viewport寬度等於設備的寬度
user-scalable=no:
禁止用戶縮放
initial-scale=1.0:
設置頁面的初始縮放值為不縮放
maximum-scale=1.0:
允許用戶的最大縮放值為1.0
minimum-scale=1.0:
允許用戶的最小縮放值為1.0
(2)媒體查詢(響應式)
(3)動態 rem 方案
二面
1. 怎么做一個實時的聊天系統
使用WebSocket和nodejs,《nodejs實戰》這本書詳細介紹了這個項目。
2. 當消息有延遲的時候,怎么保證消息的正確順序
每個消息在被創建時,都將被賦予一個全局唯一的、單調遞增的、連續的序列號(SerialNumber,SN)。可以通過一個全局計數器來實現這一點。通過比較兩個消息的SN,確定其先后順序。
3. 怎么做一個登陸窗口,input有哪些兼容性
使用form表單。
4. input按鈕如何校驗
使用正則表達式。
5. 如何實現水平垂直居中,relative、absolute、fixed
6. 寫一個函數,1s之后依次輸出1,2,3,4,5
直接使用了let和定時器。
for(let i = 1 ; i < 6; i++){
setTimeout(() => {
conosle.log(i)
}, 1000)
}
7. 事件隊列(宏任務、微任務)
8. 如何每隔三個數加一個逗號,還要考慮小數點的情況
function transform(number){
var num = number.toString()
var numArr = num.split('.')
var [num, dotNum] = numArr
var operateNum = num.split('').reverse()
var result = [], len = operateNum.length
for(var i = 0; i< len; i++){
result.push(operateNum[i])
if(((i+1) % 3 === 0) && (i !== len-1)){
result.push(',')
}
}
if(dotNum){
result.reverse().push('.', ...dotNum)
return result.join('')
}else{
return result.reverse().join('')
}
}
9. webpack有配置過嗎?原理知道嗎
10. 父子組件如何通信,子組件怎么跟父組件通信?
父組件把state作為props傳遞給子組件進行通信。
父組件寫好state和處理該state的函數,同時將函數名通過props屬性值的形式傳入子組件,子組件調用父組件的函數,同時引起state變化。
11. 簡單說一下pwa
三面
1. 手寫indexOf
function indexOf(str, val){
var strLen = str.length, valLen = val.length
for(var i = 0; i < strLen; i++){
var matchLen = i + valLen
var matchStr = str.slice(i, matchLen)
if(matchLen > strLen){
return -1
}
if(matchStr === val){
return i
}
}
return -1
}
2. 實現 JS 的繼承
function A () {
this.name = 'a';
}
A.prototype.getName = function () {
return this.name;
}
function B () {
}
// B 如何繼承 A
3. 從url輸入到頁面顯示會有哪些步驟
(1)DNS服務器解析域名,找到對應服務器的IP地址;
(2)和服務器建立TCP三次握手連接;
(3)發送HTTP請求,服務器會根據HTTP請求到數據服務器取出相應的資源,並返回給瀏覽器;
(4)瀏覽器處理響應
- 加載:瀏覽器對一個html頁面的加載順序是從上而下的。
當加載到外部css文件、圖片等資源,瀏覽器會再發起一次http請求,來獲取外部資源。
當加載到js文件,html文檔會掛起渲染(加載解析渲染同步)的線程,等待js文件加載、解析完畢才可以恢復html文檔的渲染線程。 - 解析:解析DOM樹和CSSDOM樹。
- 渲染:構建渲染樹,將DOM樹進行可視化表示,將頁面呈現給用戶。
4. method有哪些方法,分別是什么意思?post和put的區別
post:上傳資源
put:修改資源
5. https有幾次握手
6. http2比http1好的地方
7. 頁面刷新不出來,是有哪些問題
可以從第三題的每個步驟進行分析,大概是:
- 域名不存在,或者ip地址錯誤
- 網絡問題,不能建立正常的tcp連接
- 服務器找不到正確的資源
8. 上一次系統性的學習是什么時候,怎么學習的
9. 你覺得項目中最自豪的是什么
10. 上家公司有哪些不好的地方
再窒息也要好好回答出來!小編整的一份2022前端面試題精編包括了人事面試題、描述項目、兼容性、小程序、開發中遇到的BUG、HTML5\CSS3、JS、HTTP、ES6、VUE、React面試題,想看完整版的2021前端面試題精編的小伙伴點擊這就OK了哦。
人事面試題
- 請你自我介紹一下你自己?
- 你覺得你個性上最大的優點是什么?
- 說你最大的缺點?
- 你對加班的看法?
- 你對薪資的要求?
- 在五年的時間內,你的職業規划?
- 你還有什么問題要問嗎?
- 談談你對跳槽的看法?
- 你對於我們公司了解多少?
- 最能概括你自己的三個詞是什么?
如何描述自己做過的項目
- 開篇
- 在面試前准備項目描述,別害怕,因為面試官什么都不知道
- 准備項目的各種細節,一旦被問倒了,就說明你沒做過
- 不露痕跡地說出面試官愛聽的話
- 一定要主動,面試官沒有義務挖掘你的亮點
- 你可以引導,但不能自說自話
小程序面試題整理
- 數據請求怎么封裝
- 參數傳值的方法
- 提高小程序的應用速度的方法
- 小程序的優點
- 小程序的缺點
- 簡述小程序原理
- 怎么解決異步請求問題
- 小程序和Vue寫法的區別
- 小程序的雙向綁定和vue哪里不一樣
- 生命周期函數
- 幾種跳轉,小程序內的頁面跳轉
- 如何自定義組件
開發中遇到的BUG
- vue項目中用v-for 循環本地圖片, 圖片不顯示,解決辦法:使用require動態引入圖片,
- 合並多個對象並去重(es6)
- vue計算屬性里如何傳參:需求是需要把數值轉為三位數,類似1需要變為001,10變為010這樣。
- JS監聽同源其他窗口發生的事件,主要是利用 window.addEventListener('s
- 前端做登錄注冊時提交按鈕問題在用ajax傳數據給后端時,通常給button按鈕綁定js事件
- ajax傳輸給nodejs后台數據時的數據類型問題
- 用isNaN判斷數據是否是非數字值,是則true,不是則false
HTML5\CSS3面試題整理
- Doctype作用? 嚴格模式與混雜模式-如何觸發這兩種模式,區分它們有何意義?
- 行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?
- CSS的盒子模型有幾種?各有什么特點?
- link 和@import 的區別是?
- CSS 選擇符有哪些?哪些屬性可以繼承?優先級算法如何計算? CSS3新增偽類有那些?
- 如何居中div,如何居中一個浮動元素?
- 瀏覽器的內核分別是什么? 經常遇到的瀏覽器的兼容性有哪些?原因,解決方法是什么,常用hack的技
- css屬性那些有繼承性?哪些沒有?
- 如果盒子都為浮動,父類會沒有高度,如何解決
- visibility和display 的隱藏有什么區別?
- 偽類的寫作順序?
- border和outline的區別
JSvascript面試問題整理
- 原型/原型鏈/構造函數/實例/繼承
- 如何實現 new 運算符
- 有幾種方式可以實現繼承
- arguments
- 數據類型判斷
- 作用域鏈、閉包、作用域
- Ajax的原生寫法
- 對象深拷貝、淺拷貝
- 圖片懶加載、預加載
- 實現頁面加載進度條
- this 關鍵字
- 函數式編程
- 手動實現 parseInt
VUE面試問題整理
- 什么是MVVM?
- mvvm和mvc區別?它和其它框架(jquery)的區別是什么?哪些場景適合?
- vue的優點是什么?
- 組件之間的傳值?
- 路由之間跳轉
- vue.cli中怎樣使用自定義的組件?有遇到過哪些問題嗎?
- vue如何實現按需加載配合webpack設置
- vuex面試相關
- v-show和v-if指令的共同點和不同點
- 如何讓CSS只在當前組件中起作用
-
- Vue中引入組件的步驟?
由於篇幅原因列舉的內容不多,需要完整版2021前端面試題精編的小伙伴們直接點擊這領取,祝大家順風順水順財神!
小結百度面試感悟
1.邏輯清晰:一定要邏輯清晰,不然即使你知道這個問題的答案,面試官也不會滿意,如果你邏輯清晰,即使這個答案不會,面試官也會給你加分。
2.獨特理解: 現在的面試題大同小異,那么如何體現出你的優勢就很重要。結合業務以及你自身的知識儲備來講。
3.深入思考 : 對每個問題一定要有深入的思考,不然就很難進入大公司了,深度上要有一個拔高才能在面試中獲得好的成績
4.流暢表達 : 面試就是一個表達的過程,一些問題心里明白不行,還要流暢的表述出來,基本上如果面試官覺得你表達的很流暢,當你講到一半就不會再讓你說下去了,證明已經通過了