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~~