之前面了一次百度的實習,並且拿到offer,下面是實習過程中出現的題目,希望給同樣投百度的同學一個參考。
百度垂直搜索部門實習面經
一面
1. 背景問題:自我介紹,問有關項目經歷,描述以前做的東西
語言:
1. C++ 關於vtable,是類對應vtable還是對象對應vtable(類)
2. 構造函數能否是虛函數(我說的比較含糊:個人認為從語言設計角度來講不需要)
3. malloc和new的差別
4. 析構函數不是虛函數的情況給個例子,問會發生神馬
5. 在一個函數new了一個以後,沒有delete,用什麼技術來解決此處發生的內存洩露
6. cpp編譯成二進制文件的過程
7. delete數組有什麼不同,如果用deletep來delete數組,會有什麼問題
OS:
new分配內存的過程,應該回答出一種內存管理方式
如果有多個程序同時申請內存,這個時候操作系統如何做到互斥訪問
海量數據查詢問題:
用戶的輸入常常會有錯誤,錯誤主要分三種情況,多一個,少一個,寫錯一個。
假如我們在數據庫中存儲了所有正確的輸入,利用什麼技術,例如輸入一個錯誤query,來得到所有正確的query。
這個題目是hr提示我的,其實我也沒有什麼思路
想到的是hash表
對正確的數據存儲的時候做如下處理:
例如我們要存儲abcdef,首先存儲abcdef狀態為1,說明是爭取的字符串。
把這個字符串的每個位置去掉一個分別存儲,用來以後做用戶少輸入一個的檢測。
則裡面有bcdef acdef....
在檢索的時候,假如目標串是A, 檢索A,如果檢索到的標記是1,說明輸入的是正確的。 如果檢索到的字符串標記為0,則說明用戶把爭取的少輸入了一個。現在把A的每個位置去掉一個字符。如果檢索到的標記為1,說明用戶多輸入一個,如果檢索到的標記為0,說明用戶輸入錯一個。
二面:
1. 講項目經歷,大概一共聊了15分鐘吧
2. 一個寺廟有N個台階,一個人站在下面,他要去到第M個台階,假設他只有2個方案可以選擇 1. 向上走3台階 2. 向下走2個台階。請問他到達第M個台階最少要走多少步。給出核心算法並分析復雜度
(dp可以解決)
(後來順便扯到如果台階個數特別多,應該如何分配dp[N], 然後又扯到局部變量,全局靜態變量,和堆變量的差別,包括生命周期,分配上的大小限制,讀寫速度,什麼情況使用哪種變量)
3. 簡化題目為:有兩個數組,A[N], B[M],代表兩個集合。
3.1現在求出集合的交集,給出算法的復雜度
3.2 如果兩個集合都已經排好序,如何求出交集