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