今天和大家分享一下來自粉絲的面經投稿,他在最近半個月內瘋狂的面試,光百度就約面了兩個崗位,一共進行了6場面試,並且其中一個進到了 HR 面。
他的基本情況是這樣的:統招本科,計算機相關專業,擁有八年的工作經驗,目前處於離職狀態,之前的薪資 20K+ ,期望薪資 25K+ 。
大家可以看一下他下面分享的面經的難度:
第一家:百度地圖後端研發工程師
職位要求
工作職責:
- 負責百度地圖POI資料中臺的研發和資料體系建設,支撐千萬級資料處理壓力的高可靠系統研發工作
- 負責POI資料建設與情報/特徵/模型等層面的架構設計和工程實現,場景為大規模分散式儲存、計算、資料探勘應用
- 探索研究大資料解決方案在POI資料處理和情報分析方面的應用,分析與改進現有系統
- 負責地圖部分使用者端產品的研發和資料系統後臺服務架構研發
職責要求:
- 計算機相關專業本科及以上,1年以上相關工作經驗
- 熟悉Linux及常見資料結構和演算法,至少熟悉一種主流開發語言(Python/Golang/C++)
- 對大資料處理和資料工程與分析有濃厚的興趣,良好的團隊合作精神和主動的溝通意識
一面
- 自我介紹
- 說一下IoT雲平臺的搭建,遇到的困難,怎麼解決的
高併發,訊息佇列,分庫分表,redis叢集,將來支撐千萬級上億級(dns負載均衡,反向代理負載均衡)
對比了無服務和微服務的優勢和劣勢
半夜伺服器告警,解決問題
主要對接國外第三方,遇到的困難
- 程式設計題
Go兩個goroutine交替列印1-10
//G1 1
//G2 2
//G1 3
//G2 4
//…
//G1 9
//G2 10
用兩個channel讀寫資料就好了
長度10初始化都為0的陣列,順序填入1-10,因為中間一個數值漏掉了,填到最後發現陣列沒有填滿,找出漏掉了哪個數字?
例如輸入[1,2,3,4,5,7,8,9,10,0] 返回 6
寫出了O(n)的,說用二分查詢可以寫出O(logn),這個不是很明白怎麼寫
- 反問
公司的業務,工作時間,福利等
- 什麼時候能來上班
看offer進度
二面(沒後續了)
- 自我介紹
- 為什麼離職
團隊解散了,協議離職
- 說一下IoT雲平臺構建的實現以及技術難點
訊息佇列:資料傾斜問題,資料不丟,重複消費
redis:使用hash以及Pipline
資料庫:增加索引,分庫分表
這裡聊了很多細節問題,根據業務來說這個東西
- 作業系統處理死鎖的方法
訊號量,共享記憶體(這塊感覺還有別的可以說)
- 作業系統記憶體管理的方法
分頁,分塊,FIFO,LRU(這塊感覺還有別的可以說)
- 會不會寫python指令碼
說寫了爬蟲,爬了百度,彈出了驗證碼
- Redis持久化
AOF,RDB還有混合持久化
- Memcache知道嗎
多執行緒,不支援持久化(具體不瞭解)
- Redis分散式鎖
加鎖,解鎖
- 登入linux終端,輸命令很卡
top檢查cpu使用,網路問題(在國內訪問國外),記憶體,磁碟使用是否在臨界區
- 使用shell統計檔案中top3的ip地址
沒搞定,就說了grep,awk的一些命令
- 磁碟滿了寫不進去,排查命令
df,du檢視磁碟
- 找出資料夾中最大的幾個檔案,命令是什麼
這塊說有什麼命令可以列出來,但是具體忘了
- 說一下ES和Redis的區別
ES是搜尋引擎,redis是資料結構資料庫,可以做很多事情比如訊息佇列,geo啥的
- 寫程式碼
建立連結串列
1->2->3->4->5
輸入2,讓連結串列偏移
4->5->1->2->3
寫出來了,但是有bug,說是看一下程式碼風格,說一下寫題目的思路
- 有沒有offer
暫時還沒有
- 職業規劃
深耕服務端,瞭解架構,有機會也可以走向管理
- 反問
- 介紹了一下業務
- 培訓,晉升
- 福利
第二家:百度文庫研發部_服務端研發工程師
職位要求
工作職責:
- 負責百度文庫的服務端研發工作
- 編寫核心程式碼,承擔關鍵技術攻關任務
- 參與服務架構設計,獨立完成業務需求分析和設計
- 對現有服務框架的升級、效能最佳化和穩定性建設
- 推動技術與產品創新,建設良好的技術文件,幫助團隊理解需求和技術架構,提高開發效率
任職資格:
- 計算機或相關專業,本科及以上學歷
- 兩年以上 Golang/PHP/Java/Python/C++ 專案開發經驗,有良好的程式設計習慣
- 熟悉 Linux 作業系統和開發環境,有良好的資料結構、演算法基礎和系統設計能力,熟悉技術領域的通用元件如Mysql、Redis,Kafka,ElasticSearch等,有較深的理論研究和實踐經驗,並能落地到業務中
- 熟悉web service相關技術,如高併發處理、儲存與快取,RPC、訊息佇列等技術
- 有支付、會員、文件智慧化等系統相關研發設計經驗者優先
- 有較好的團隊合作精神,較強的溝通能力,主動性強,有很強的自我驅動力
- 有較好的產品意識,主動關注產品效果並積極推進產品方案的落實與完善
一面
- 自我介紹
- 還會別的啥語言嗎
會的啊,python後端,java寫android,C/C++配合Lua開發韌體
- go的競爭問題
比如說map,多個協程訪問,可以加鎖。
atomic包的CompareAndSwapInt32
編譯器使用 race 發現競爭問題
- map解決競爭還有什麼辦法
加讀寫鎖,使用sync map
- sync 包還有哪些東西?
mutex,RWmutex,waitGroup,Once
- 看一段程式碼,說下輸出。
package main
import (
"fmt"
"sync"
"time"
)
type Person struct {
name string
age int
}
var p Person
func update(name string, age int) {
p.name = name
time.Sleep(time.Millisecond * 200)
p.age = age
}
func main() {
wg := sync.WaitGroup{}
wg.Add(10)
for i := 0; i < 10; i++ {
name, age := fmt.Sprintf("nobody:%v", i), i
go func() {
defer wg.Done()
update(name, age)
}()
}
wg.Wait()
fmt.Printf("p.name= %s\np.age=%v", p.name, p.age)
}
輸出結果不一定,go的協程執行順序不好說
name和age不一定相等,因為有sleep
加鎖可以解決
- chmod 644什麼意思?
給許可權,4讀,2寫,1執行
檔案所有者,檔案所屬的組,其他的使用者
- Linux 常用命令有哪些
cd,ls,ps,top,
lscpu,cat,touch,mkdir,
grep,awk,
df,du,
ifconfig,netstat,ip addr
- docker的Cgroup有哪些作用?
限制cpu和記憶體資源用的
- docker compose是用來做啥的?
使用yaml檔案,管理啟動和停止多個容器用的
- 寫sql平均年齡大於35的部門id,dpid是部門id,cid是員工id,age是員工的年齡
SELECT dpid
FROM employees
GROUP BY dpid
HAVING AVG(age) > 35;
- 說一下mysql的慢查詢,怎麼排查?
開啟慢查詢的日誌,設定慢查詢的超時時間,用explain顯示執行計劃
將type如果是all或者是index最佳化到range會比較好
索引最佳化
- 索引是什麼樣子的時候type會是range
不是回答的很好,應該是索引的範圍掃描
- type還有哪些取值
ref,system,這塊沒答全
- 說一下最左匹配
老問題,(a,b,c)順序問題
- 聯合索引a,b,c 查詢語句 WHERE c = 1 AND b IN (1, 3) AND a = 3;用的索引長度
這塊a肯定是能有的,b是in不知道能不能用,得拿sql試試
- redis排名怎麼用,取前10的命令
Zset
- 說一下布隆過濾器,原理,問題,最佳化
bitmap實現,多個函式落在裡面,如果說在,不一定在,如果說不在則一定不在,最佳化的話,增加bitmap的長度,設定函式的個數
- 快取穿透,怎麼解決
既不在redis,也不在資料庫。使用布隆過濾器過濾,載入空的key,業務層增加引數校驗,使用分散式鎖減少訪問資料庫
- redis分散式鎖如何實現,zoomkeeper怎麼實現
redis知道,zoomkeeper不太懂
- redis哪個版本加入了setnx帶過期時間的
誰記這東西啊(2.6.12)
- 常用設計模式有哪些,都是幹啥用的?
工廠,抽象工廠,單例,建立物件用的
責任鏈,gin和goframe的中介軟體調next用的
裝飾器,python中用來包裝函式,然後可以用來計時
介面卡,統一外部介面
觀察者,回撥函式實現非同步
- 哪裡人?目前薪資多少?
- 用兩個go協程交替列印1,2,3,4一直到100
這種型別的題目都沒啥好玩的,不過用的是他們的編輯器,沒啥提示,有bug但是最後解決了
- 反問
- zoomkeeper如何實現分散式鎖,剛剛沒答出來:他說自己去搜
- 業務有啥:說文庫,ai生成內容圖表,腦圖啥的,等過來就知道了
- 上班時間:10點到晚上9點(這麼卷!!!)
二面
- 自我介紹
- 其他的語言會不會
會的啊,python後端,java寫android,C/C++配合Lua開發韌體
- go逃逸分析
變數型別不確定,有全域性變數引用,給slice分配的長度太大,給slice分配的長度不定
使用gcflags case by case 分析
- gin的http方法怎麼實現的
這快沒看,然後就說了下gin中介軟體的實現
- gin框架的tag
說了有json,然後說gin的不太熟,但是goframe的有 method方法,v引數校驗,dc描述。
gin應該和goframe差不多
- channel瞭解嗎
說了資料結構裡面有哪些欄位用來幹啥的,說了一下channel的一些用法以及注意事項
- sync包有哪些東西
mutex,rwmutex,sync.map,sync.once,sycn.pool
說了一下他們是幹啥的
- http狀態碼
1XX,2XX,3XX,4XX,5XX
- http狀態碼499
這個沒碰到過(查了一下是Nginx定義的)
- redis的使用,資料一致問題
原子操作,多個操作可以用lua指令碼,也可以用事務,事務用起來比較坑,回滾啥的
- Mysql innodb為什麼主鍵推薦用自增
底層B+樹,不自增的話插入資料容易導致節點分裂和合並,影響效率
- mysql刪除資料,容量會不會變
不會變,刪除只是標記為刪除,要把表刪了才全刪了,因此刪除不會釋放磁碟的空間
- mysql表設計最佳化
先說了表的欄位數量最佳化,再說表的欄位型別最佳化,儘量選容量少的
然後引申到mysql的最佳化,語句最佳化走索引,引數最佳化buffer_pool_size,鎖超時最佳化,連線數最佳化
根據業務最佳化,讀多寫少加快取等
- 微服務優缺點
優點:服務拆分,職責分明,語言不限,部署有工具docker,k8s,多雲端部署
缺點:需要運維關注,不熟悉業務排查問題慢
- 微服務排查問題的方法
根據請求id,鏈路追蹤,log記錄,普羅米修斯監控,grafana告警,架構文件梳理
- 迭代升級頻繁方案
灰度,內測使用者,實時監控狀態,漸進式的開放,出問題回滾還是修復,看業務影響
- 說做的挑戰的專案
訊息佇列:資料傾斜問題,資料不丟,重複消費
redis:使用hash以及Pipline,bigkey拆解
資料庫:效能最佳化,分庫分表
- 寫程式碼
a:="baissbaidubbbaidu"
b:="baidu"
c:="baissbb"
將a中出現的b去掉,輸出的就是c了
用了兩個for迴圈就搞定
- 反問
- 業務有啥:文庫ai gc相關的
- 上班的時間:10點到晚上9點(看來是真的忙,這接近12小時了啊)
- 有後續的話,3天內就有結果了,感覺我挺不錯的
三面
- 自我介紹
- 離職的原因
- 為什麼想來北京發展
- 為什麼畢業了想去深圳
- 做專案的時候合作的比較愉快的經歷
- 有挑戰的專案是哪個,如何克服挑戰的
- 說一下有挑戰的專案的一個業務的邏輯
- 第一份工作的離職原因
- 說一下python和go的一個使用上的區別
- 說一下團隊的大小,以及在團隊中承擔的角色
- 說一下如何學習go的
- 寫go的時候遇到了哪些問題,怎麼解決的
- 如果出現和同事有爭議的事情,該如何解決,如果同事一直堅持怎麼辦
- 領導做出了錯誤的決策怎麼辦
- 反問
- 工作內容,業務
- 工作時間
- 團隊的人數,入職培訓
HR面!
期待他的好訊息。
歡迎關注 ❤
我的文章都首發在同名公眾號:王中陽
需要簡歷最佳化或者就業輔導,可以直接加我微信:wangzhongyang1993 , 備註:XXX平臺名稱