百度2016實習生面經(三面)
五一在外面玩的時候收到百度發來的下週六上午10點面試的通知,那是一個興奮啊。唉,導致了五一玩的那叫一個糾結呀。一邊玩一邊想著面試的事,真叫痛並快樂著。嘿嘿。終於體會到了心在曹營身在漢的感覺。五一過後,便返回學校了。返回學校之後,便是複習以前的知識。資料結構、作業系統、計算機網路、linux、C++等。唉,複習的想吐了,都有想撕書的衝動了。終於,這艱難的幾天過去了,週六來了。好激動啊。因為10點面試,早上8點起床,整理了一番後,蓄勢待發。找了一間比較安靜的教室,大概也就9點10分了。看了幾眼書,其實根本就看不進去。開始把耳機拿出來,等著電話過來,啊啊啊,但是悲劇了,耳機是耳塞式耳機,一個頭竟然掉了。只有一個頭,唉,只能帶著殘缺美上路了。終於等到10點了,以為會按時打過來,結果還沒有,就怎樣一直等啊等,那叫一個緊張and糾結啊。終於10點40,電話all來了。面試官上來先道歉,說讓我久等了,面試官挺客氣的,說話的聲音聽著比我大不了多少歲。嘿嘿。然後就插著只有一個頭的耳機面試就正式開始了,
一面:
例行公事,上來要我自我介紹。還好之前我有準備。之前去騰訊面試的時候,第一次沒有經驗,連自我介紹都不知道該怎麼說。唉唉,還是自己太年輕了。然後我就把我之前準備的自我介紹說了一遍,中間還賤賤的反問了兩個問題。1、在棧上,定義陣列時,為什麼不可以用變數作為陣列的長度。2、在函式內定義一個字元陣列,用gets函式輸入字串的時候,如果輸入越界,為什麼程式會崩潰。現在想想,這兩個問題還寫的比較有價值。然後面試官對我的第二個問題也挺感興趣的,就問我為什麼,因為之前準備過,然後我就balabala,涉及到C/C++函式呼叫機制,以及彙編層面的知識。感覺說的還可以,面試官聽完之後什麼也沒說就開始正式問問題了
1、上來問了我的最近的一個專案,技術難點啊,怎麼克服的。balabala
2、C++引用和指標的區別,這個學過C++的應該都知道,然後我也說了一些涉及到彙編層面的東西。比如引用其實是佔用記憶體空間的、引用的指向並非是不能修改的,可以通過嵌入彙編程式碼修改。
3、C程式記憶體佈局,這個應該都知道。
4、說說棧區和堆區,又是balabala,說的挺詳細的
5、new和malloc的區別,其實都挺基礎的,繼續balabala
6、快速排序的思想、時間複雜度、三種快排以及四種優化方法。當時腦子抽了,把時間複雜度說成了O(logn),艹啊
7、程序和執行緒的區別,這個學過作業系統的都不在話下,可以說一些深入的東西,Linux核心級執行緒啊什麼的。
8、程序間的通訊方式,管道、訊息佇列、共享記憶體、訊號量、套接字
9、又問我IO多路,select、poll、epoll,epoll機制
10、說幾個linux命令,我說awk、grep啊什麼的。怎樣建立資料夾、檢視資料夾的大小、檢視CPU使用率等
11、又問我最近在看什麼書。因為之前看別人的面經的時候,說一面問你看什麼書HR面也會問,你最好回答的都一樣。我就說C++程式設計思想、深度探索C++物件模型、資料結構與演算法
12、最後他說問我一個開放性的問題:秒殺一個獎品,讓你設計一種軟體模型。瞬間傻眼。然後一想,要解決高併發、高流量、避免重複秒殺獎品。然後就說可以用生產者消費者模型來,給獎品加鎖,他說,可以,但是加鎖之後會降低併發量,問我怎麼辦,我想了說可以分流,把高流量分流,他又問我怎麼分流,我說可以把獎品分組,每一組獎品加鎖,然後把分流後的每一組流量分別打到每一組獎品上。他說可以,問我還有沒有別的方法,我想了一會說,不知道了,唉唉,比較菜。他說,沒事,這就是一道開放性的問題,沒有確定答案。但是後來才知道,這是不可以使用鎖的。把資料放在記憶體中操作,不把結果立即寫入資料庫,在記憶體中操作以及用系統自帶的鎖機制。
13、差不多40-50分鐘也夠了,他說他要給我登成績,說我可以先去吃個午飯。也沒有讓我問他問題,不過這樣也好,我也不知道問什麼,之前準備了問面試官的問題,現在看來,還好沒問,我準備的兩個問題剛好二面面試官我問他一個,HR面試官問她一個。剛剛好。之前以為自己撐不到最後就只准備了兩個問題,一面和二面。
二面:
下著雨,關鍵是還沒有傘,嗚嗚。吃完飯後回到圖書館休息,突然1點10分左右二面面試官就打過來電話了,問我方便麵試不,肯定方便啊,我說,讓我找一間比較安靜的教室。約定15分鐘後打過來。果然15分鐘後打過來了
1、上來就說對我的專案經驗比較感興趣。感覺自己做的專案在人家眼中就是小程式。問我專案中遇到什麼技術難題,怎麼解決的,還有對軟體設計的看法啊,拿到一個專案後,你是怎麼進行架構設計的,然後就在那裡和麵試官扯開了,什麼自上向下啊、模組分解啊、介面實現和業務邏輯實現分開啊什麼的等。又問我在我的那個專案中,C++是用面向物件程還是面向過程的方式寫的,我說我先抽象出一些類,然後balabala。問了大概有20分鐘,差不多快佔面試時間的一半了。說完之後就感覺自己戲不大,自信心暴減啊。感覺二面應該通不過。接下來終於問我具體的程式設計知識了
2、說說C語言中union和const關鍵字。又是一頓balabala,又問我union有什麼好處,我說節省記憶體空間,設計一個學生的成績時就可以使用共用體,他還問我有沒有別的好處了,我說還可以用來測大小端儲存,別的就不知道了
3、C語言中變數有幾種儲存方式。這個學過C語言的應該都知道,balabala,不過感覺最好說的細緻一點,我有說了一些關於編譯器層面的理解。
4、又是這兩個問題,一面都問過了。程序和執行緒區別、程序間的通訊方式,回答的和一面一樣
5、執行緒間怎樣實現獨立訪問,我說可以用鎖,他說除了用鎖還可以用什麼,訊號量,條件變數。可以使用互斥量和訊號量來實現執行緒池之間的同步。
6、然後又問我對XX資料庫理解不,第一,沒有聽清是什麼資料庫,第二完全沒有聽過這個資料庫。直接說不知道。然後他說,那問你關係型資料庫的問題,他說的那個資料庫應該就是非關係型資料庫了
7、說說資料庫的事物,我說不知道。唉,沒有複習資料庫,艹啊,自信心又大減
8、資料庫為什麼要建立索引,以及索引的缺點。索引由B+樹實現,索引型別等balabala,感覺說的一般般
9、vector的分配問題,balabala,還好沒有問vector為什麼每一次擴容都是2倍,這個問題之前百度過,但是沒有找到答案,個人感覺是採用Linux記憶體管理的夥伴系統的思想。還有在vector中插入n個數的時間複雜度,尾插是O(1)即常數時間複雜度,如果插在中間或頭,就是線性時間複雜度了。插入後會造成之後以及當前迭代器失效等等
10、有2個很大的檔案,也就是不能放到記憶體中,檔案的每一行存放的是一個URL,每個檔案的URL都不重複,但是兩個檔案之間可能有重複的,讓你找出兩個檔案重複的URL。明顯的大資料問題啊,還好之前準備過。我說,先通過雜湊對映,用URL做雜湊碼,把每個大檔案分成許多的小檔案,他又問我,URL怎麼做雜湊碼,我說URL也是字串序列,可以把每個字元的ASCII碼相加,他說這樣做雜湊衝突有點大,又問我怎麼處理雜湊衝突,等,這些都是課本上的,還應付的來。然後我又說可以把每個URL擷取3段,最左邊,中,和最右邊,然後求ASCII碼。然後我又說,可以用bitmap來把每一個小檔案裡的URL對映到唯一的一個位中,如果位有相同的那麼這個URL就是重複的URL。他又問我,怎麼把URL對映到每一位中,艹啊,於是想了之後說,可以用一個基準字串,把URL的每個字元到這個基準字元的距離相加得到一個整數值,這個整數值就可以唯一的標識該URL了。其實後來才知道有字串雜湊函式的。最常用的莫過於ELFHash了。他說bitmap中有重複的怎麼辦,我說如果重複了就可以說明這個URL是重複的,就可以確定了。然後面試官也木有說什麼了。可能是我太菜了。。
11、有n個數,找出第k個大的樹。我說可以先維護一個k個元素的最大堆,然後遍歷剩下的n-k個元素,如果大於最大堆的根,就交換值(當時說錯了,應該是最小堆。艹啊,太緊張了餓。)遍歷一遍得到k個元素的最小堆裡的k個數就是最大的k個數,然後快排或者堆排,最小的就是第k個大的數
又問我時間複雜度是多少,我說O(nlogn),當時緊張說錯了,應該是O(nlogk),他又問我還有沒有別的方法,如果資料在記憶體中可以放下的話可以使用快排的partition函式。達到O(n)
12、問我有沒有想問他的,我就說了一個,感覺二面都不會過了,就直接回圖書館了
HR面:
剛剛到圖書館還沒有坐下來,HR姐姐打電話說她是第三面面試官,聲音好甜,嘿嘿然後我說等我找個安靜的教室。又是飛奔到教室。
然後上來就問我想什麼時候去實習,實習時間啊,我本來想說實習暑假的,想了以下太短,又說實習3個月,她說希望可以至少實習半年。那必須聽人家的啊。我急忙說,我們課比較少,可以實習半年。她又問我什麼時候去實習,她那邊希望儘快最好,我傻啦吧唧的說7月中旬,她說可以。感覺應該說立刻可以去實習的。唉唉,接下來就是正式面試了
1、問我的專案,感覺問的比二面還要細緻,我就balabala,說了好大一會,說的嘴都幹了
2、又問我對搜尋引擎的看法啊,技術難點啊,什麼的,非法排名啊
3、又問我對當下比較熱門的技術的看法,人工智慧、機器學習什麼的,一直在那裡扯,感覺都不知道要說什麼了,感覺HR面比技術面還要煎熬
4、又問我有沒有搜尋引擎、資料方面的專案經驗,啊啊,直接說沒有
5、又問我對什麼感興趣,演算法啊、等,我說演算法,又問了一大堆演算法方面的東東
6、問我想從事哪一塊的工作,我也不知道有啥,嘿嘿,我就說C/C++後臺伺服器開發,她說,範圍太大了,我給你說幾種吧,資料探勘、機器學習、人工智慧等。我隨便選了一個,資料探勘。其實後來才知道這是個坑。本科生做不了的。研究生才做的。
7、又問了我資料探勘的好多東西。比如想挖取大眾點評的論壇的裡面的內容,要怎麼樣做。艹啊,一頓亂扯。我說先用一個爬蟲去爬取,可以偽裝這注冊一個使用者,然後這個使用者就可以看到論壇裡面的東西了,就可以用爬蟲來挖取走。然後我又說如果大眾點評有這種反假使用者分技術就不好半了,balabala,說了一大堆,然後又說但是這種方式效率有點低,我說可以分散式。。。真的快頂不下去了。
8、又問我資料探勘的技術難點啊,我叉,身體and心靈已經千瘡百孔,我說第一,會被識破虛假使用者的身份,她說確實是一個難題,我還說資料更新這一塊也是個難題,具體更新到什麼時候也不確定。還真被我給暈對了,看來平時經常關注網際網路還是好處大大的。HR姐姐說這還真是一個比較大的難題。看來今天是人品大爆發了,嘿嘿。
9、問我有沒有什麼想問她的,我說百度公司內部文化。
後記:終於完了,3面大概都是40-50分鐘。