百度前端三面面試題全部公開,三面的最后一個問題令我窒息


分享一次百度面試,部分題目會帶有面試答案,百度二面三面都有手寫代碼的環節,對於動手能力弱的小伙伴來說會有些挺吃力。

一面

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.流暢表達 : 面試就是一個表達的過程,一些問題心里明白不行,還要流暢的表述出來,基本上如果面試官覺得你表達的很流暢,當你講到一半就不會再讓你說下去了,證明已經通過了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM