12號在百度上海研發中心面商務搜尋部的java,面完就感冒了orz(殺傷力啊......)。聽同學說今年崗位緊,要是去年就進了,看來比較玄了。不過去了一趟總不能白去,寫個面經給大家參考。
張江這地方蠻有趣,路名都是XXX科學家,牛頓路,祖沖之路。路上居然還有有軌電車這種交通工具,怪瘮人的......百度在碧波路690號張江微電子資訊港,應該是IT企業聚集的地方吧。
面試約在兩點,一點半去前台報到,沒看到前台有特別PP的美女(失望啊~~)。報上一面面試官名字,很快面試官就捧著筆記本過來,帶去一小房間。整個面試並沒有涉及上機的,可能是職業習慣吧,不過感覺應該是可以帶些項目的示範資料去,如果對方感興趣,也許可以示範示範。
1面官挺年輕的,臉圓圓胖胖的,說話也很客氣,不過看著總覺得深藏不露的樣子(百度的面試官都很和藹,面試整體氣氛比較輕鬆,不過都猜不透他們心裡怎麼想的orz)。他說“我先做個自我介紹:我叫XXX。該你了。”(還以為他要介紹個幾分鐘的額。)講了講參加競賽和項目的一些經曆。我跟1面官以前都參加過NOIP,提了一句,他沒啥大反應,看來跟面試官套近乎是沒啥用處滴~然後問了些java基礎和項目的東西,記不清了,提到了gc機制吧,1面官對項目興趣不大~~
然後就開始做題了。第一題是關於火車票餘票查詢的,要求怎樣儘快查出一張訂單的餘票數。因為是第一題,比較發懵不知深淺,需求也沒太聽清楚:(。第一想到的是區間圖什麼的,說了一個掃描線方法。面試官似乎也沒特別明白我的意思,不過他舉了些反例說我這方法不好。感覺我想的和他期望的完全不是一個路子哎,他應該很奇怪我怎麼會往這種模型上去想...這題後來就稀裡糊塗過去了(回來後想,用位元儲存每個座位的預定狀況,再用位元運算來查票,可能對路一點吧),應該算這個面試答的最差的一題吧orz,不過當時倒沒覺得怎麼受打擊~
第二題是求一個整數序列和最大的子序列,其實是很基礎的題了,無奈多年不碰演算法,開始還是說了個O(n^2)的笨法子。1面官不動聲色地說“可最佳演算法是線性”,這才想到類似貪心的遞推方法,寫了個遞推式,面試官說“就是這麼簡單”~~感覺這類演算法題只要想對門道,一般都不是怎麼複雜的,所以千萬不要往太複雜的去想,也別想著一個挫方法最佳化來最佳化去。
第三題是求一個序列的逆序對總數。面試官可能發覺我容易想太多,出題的時候就說“答案是O(nlogn),線性就別去想了”。這麼一說我知道是二分法。不過腦子還是不完全開竅,說先把兩個自序列做線性基數排序,然後再像歸併排序那樣邊合并邊統計逆序對數。面試官說,邊歸併排序邊統計不就行了?我說哎呀是是是...唉實在是演算法太生疏了,估計面試官聽到我自己都提到歸併排序了,還說什麼用線性排序,心裡已經樂噴了~然後他讓我寫一個代碼實現(手寫),說不用考慮細節和邊界條件,我以為只是寫個思路,就寫了個虛擬碼...結果他說要真是代碼,只好重寫一遍...回頭想,其實這是在考察代碼風格,他說不用考慮細節是個幌子,實際就是在看細節~~
磕磕碰碰過了一面,都快一個小時了。2面官一來就問1面幾點開始的,看來他覺得是面長了...2面官看起來很精幹,臉方方的,說話也和氣,還不停記筆記,記了滿滿一張。感覺倒有點像被面的orz。也問了項目和java基礎問題,不過更細緻一點。講了講ESP的架構和一些技術細節,綠色JVM和位元組碼加密(還是說項目比較容易~)。java問了equals方法和hashcode,HashMap的實現,確實是很基礎的一些。還問了一些其他方面的,sql,linux什麼的~~
二面題目不再是純演算法,開始接近應用,主要是海量資訊處理相關。先問從一個海量的URL列表裡檢索特定的URL。我說分塊建索引,先定位到一塊,再挨個尋找(感覺這類問題基本就是分布式的思路)。然後又問如何根據前幾個字元進行智能提示,我說根據前幾個字元分塊做索引,再加些排序之類預先處理。說來說去也就是分治、索引、排序,也不知道他滿意不滿意。二面也面了近一個小時,然後2面官就去找3面官了
3面官是部門經理,鴨蛋臉,應該有四十多了,不過保養的不錯,也沒架子。像個老頑童,我在想問題的時候他還跪在轉椅上轉來轉去玩orz。先問了不少個人經曆方面的問題,包括職業取向,過去的經曆,感覺是在考察動機吧。3面官的問題更加靠近使用者,比較偏重資料採礦方面,明顯感覺跟部門職能相關,而不是單純的技術問題。
先問上海地鐵系統每天有一大堆進站和出站記錄,問怎麼估算每條線路上的實際流量。我說就是點對點的最短路徑問題。又問有多條路徑的時候如何選擇,我說根據一些相關因素加權。又問有哪些影響因素,舉出10個以上orz,很具發散性的問題。後來乾脆又讓說怎麼說服廣告主在地鐵投放廣告。明明是來面程式員,怎麼變成招銷售了?看來商務搜素還是很看重商業頭腦的~~
然後又問一種正反不均衡的硬幣,怎麼用來做公平對博?我說用兩個編號,取1正2反和1反2正,其他兩種情況捨棄,他說可以(這時候才覺得思路比較對路了,不像一面時那樣想歪);又問如果確知正反機率為1:3,但不能捨棄任何情況,如何對博?我說多弄幾個,從各種可能情況的機率裡湊一個和正好等於1/2的,他說這思路是對的(雖然回來後細想好像是有問題的orz)。
最後又問有1000種藥物,只有一種有效,而且只能進行一批次的實驗,問至少需要多少小白鼠才能辨別出有效那種。我說把1-1000寫成二進位,第幾位是1就給第幾隻注射,就能確定有效那種當位是1還是0,這樣只要10隻(不過每隻要挨100針orz,好變態...),他說對。
整個面試大概用了3小時,大公司確實是不一樣啊。過程中還是有很多經驗教訓的,希望對大家有用。仍在等結果中,bless~~