百度雲端計算部門面試
感覺百度部門之間面試都沒加鎖呢。。一個個部門都開始來面試了。。。
今天面了一個百度的雲端計算部門,對方是一個姐姐,感覺還挺客氣的,說重點吧,講講面試的過程,不過感覺那個姐姐就是列了個題目列表,按順序一個個問的。
(1)for和foreach的區別(從原始碼角度分析一下)?
答:在固定長度或長度不需要計算的時候for迴圈效率高於foreach。
在不確定長度,或計算長度有效能損耗的時候,用foreach比較方便。
並且foreach的時候會鎖定集合中的物件,期間不能修改。
foreach
//第一次 var a in GetList() 時 呼叫 GetEnumerator 返回第一個物件 並 賦給a,以後每次再執行 var a in GetList() 的時候 呼叫 MoveNext.直到迴圈結束.
foreach (var a in GetList()){
...
}
var a;
IEnumerator e = GetList().GetEnumerator();
while (e.MoveNext){
a = e.Current;
}
for
//for 迴圈每次迴圈會呼叫 GetCount() 來比較長度, 而 foreach 不考慮長度,只調用一次GetList()。
for(int i = 0; i < GetCount(); i++)
{
....
}
int i = 0;
while (i < GetCount())
{
...
}
(2)32位系統int的取值範圍?
unsigned int 0~4294967295(2^32-1)
int -2147483648(-2^31) ~2147483647(2^32-1)
十億數量級的。
(3)HashMap的原始碼?什麼時候擴容?擴容方式?解決衝突方式?
(4)memory copy與string copy的區別?
答:表示不會,沒有答出來,感覺是C++的呀。。。
網上搜了一個答案:
1、memory拷貝,根據拷貝的位元組個數,從src一個一個位元組拷貝到dst,拷貝過程不管src的取值,也不管dst是否能容納。
2 、因此,對於memory拷貝,src中NULL字元(取值為0的字元)後面的字元也能拷貝過去。不管dst是否能容納,都拷貝過去,會存在踩記憶體。為了避免踩記憶體,拷貝的位元組個數,需要小於等於dst分配的大小。
3、string拷貝,遇到src的NULL字元結束。因此,strcpy有兩個問題特別需要注意:一,src結尾必須要有NULL字元,否則會一直拷貝下去,直到遇到NULL字元。二,dst在src有效長度的基礎上,要多分配一個字元,用於儲存NULL字元,如果沒有多分配這個字元,會導致拷貝到dst的時候,踩一個位元組的記憶體。
4、src沒有NULL字元,會一直拷貝下去,直到遇到NULL字元,怎麼解決這個問題?
使用strncpy,表示最多拷貝n個位元組。如果不到n個位元組,遇到src中的NULL字元,結束拷貝,並且從當前點到n位置,補充NULL。這一點和memory拷貝不同,memcpy不管src的取值,都會拷貝n個位元組。
5、注意:
string src ="abcdabcd";
char* dst = new char[8];
strcpy(dst,src.c_str()); // 踩記憶體,src多出一個NULL,而dst分配的記憶體不夠
strncpy(dst,src.c_str(),8);// 不踩記憶體
memcpy(dst,src.c_str(),8); // 不踩記憶體
strncpy和memcpy不踩記憶體,但是會導致dst沒有結束符。這往往會出現問題,比如dst再拷貝到其他地方。因此,解決辦法最好是 dst多分配一個字元,用於儲存NULL,並且初始化dst,如下:
char* dst = new char[src.size()+1];
memset(dst,0,src.size()+1);
(5)【作業系統】頁面置換演算法有哪些?LRU怎麼進行優化?
(6)【作業系統】分頁與分段的區別?
(7)【演算法題】判斷一個括號字串是否匹配正確,如果括號有多種,怎麼做?如(([]))正確,[[(()錯誤。
答:用個棧就行啦,leetcode上的easy難度。
(8)【演算法題】一個數組,前半段是遞增的,後半段是遞減的,找出陣列中最大的值?
答:類似於二分查詢,丟棄另一半,時間複雜度O(n)
(9)【演算法題】最長公共子序列?
(10)【計算機網路】traceroute命令?
(11)【計算機網路】什麼時候會進入time-wait狀態?
(12)【JVM】什麼時候會觸發GC?
(13)【JVM】JVM引數設定時newsize代表了什麼?
(14)Spark提交任務的整體工作流程描述一下?
(15)Spark如何進行效能調優?詳細描述。
(16)Spark設定中executor-memory 和spark.default.parallelism分別代表什麼?
(17)資料傾斜的解決方案?
(18)寬依賴和窄依賴的比較。。。
時間:一個小時10分鐘