百度面試經(jīng)驗
百度電話面試經(jīng)驗
我是周四接到百度的電話面試通知的,因為當(dāng)時正在移動公司上班,說話不是很方便,直接提出改天進行面試(大家基本都會這樣做,例如第二天再進行,自己好可以準備一下),而我直接提出在周六面試,感覺推得有點時間長了,可能給公司的感覺不是太好,我自己也有些后悔,但事已至此,只能這樣了。周五還是上班,根本就沒準備,直到周六早上讀完英語才大概看了一點東西,真的是花時間太少了,自己忙這也不能算是借口,還是自己沒有太重視,畢竟這也是自己心儀的公司,怎么能這樣對待它呢,如果失敗了,自己可能會后悔一輩子,大家可要注意啦,對任何自己想去的公司可要做最充足的準備呀,我這可是前車之鑒呀!
進入正題:
周六上午10:30,百度的招聘人員打過來電話,并且提醒可以總座機接電話,這點還是比較人性化的。下面是正式的面試環(huán)節(jié),分3大部分:
1. 首先問你最大的項目經(jīng)歷是什么,其中涉及到很多的細節(jié),特別具體。他會問你的職責(zé)是什么,根據(jù)具體的職責(zé)回問更詳細的問題,例如我說我是一個項目組的小組長,他就問我怎么管理項目組,怎么安排的進度、人員,遇到過什么問題,怎么解決的,你們項目中做的最出色的東西是什么,怎么實現(xiàn)的。還會根據(jù)你的回答,往下引伸,比如問了我軟件是怎么進行版本號管理的,是用什么軟件進行管理的嗎,我不太清楚這些,這就很尷尬了,就是盡量多的準備各個方面知識吧,估計詳細準備一兩個項目也該夠了。再就是這其中可以把話題引向你準備好的方向,但要把握住分寸,別搬起石頭砸了自己的腳呀!我就順便提了一下我們現(xiàn)在做的項目,可能是做了一段時間比較熟悉其中的一部分內(nèi)容,想和招聘人員炫耀一下,但是人家問了我別的方面的問題,自己不會,這可丟大人了,所以以后大家要做類似的事情一定要把握住話題的方向,別順著招聘人員的思路走,要不我們會死的很慘的。
2. 詳細討論筆試的題目。可能題目少的話,他會和你逐題討論。他會問你:你認為你的算法怎么樣?還可以有什么改進?然后他提一個算法方案,讓你分析給他聽,比較這2個方案優(yōu)劣,他會提出一些其中可能出現(xiàn)的問題,讓你分析,可以怎么解決,然后順著你的方案,找一些不好地方,再讓你找方案分析給他聽,反正就是非常重視細節(jié),你從宏觀上答給他聽,他是不會滿意的,會一直問你的,可能知道你啞口無言,所以在面試之前,要對筆試的題目好好的準備一下,這點我認為極其重要。
3. 問你以后的人生規(guī)劃,當(dāng)時給我提供了2個方向,一個是開發(fā),另一個是統(tǒng)計,因為我不知道這2個方向的職責(zé)是什么,所以也不知道選什么,就胡亂選了一個,然后他解釋了這兩個方向的具體職責(zé),我認為剛才說的不合適,就改了一個,這樣好像不太好,變得也太快了,所以在面試之前要清楚各個職位的職責(zé),也要盡早確定自己的目標,別給人一種拿不定主意的感覺。
最后,結(jié)束,應(yīng)該對招聘人員表示感謝。
這可是我的第一次面試,就用了電話面試,不是很舒服,應(yīng)該盡量放松吧,只有放松才能做好,才能得到自己心儀的職位,否則只能適得其反。
百度面試經(jīng)驗分享
一面:
給你一棵二叉樹,如何判斷它是否是完全二叉樹? 最開始我連完全二叉樹的定義都忘了,面試官提醒我之后我才明白是啥。。汗。我當(dāng)時回答的是先把它轉(zhuǎn)化成數(shù)組的形式存儲(就是2*n存左孩子,2*n+1存 右孩子的存法),然后循環(huán)判斷一下是不是所有的結(jié)點都是在數(shù)組的前m個位置。
給你一個數(shù)組,求它的一個子串,使該子串的和最大。 這是典型的最大子串和問題,我直接就說這是個經(jīng)典的動態(tài)規(guī)劃問題:令F[m]表示以第m個數(shù)為結(jié)尾的所有子串中和最大的子串的子串和。則若F[m- 1]>0,則F[m]=F[m-1]+a[m],若F[m-1]<0,則F[m]=a[m]。求出所有F[m]中最大的一個就行了。
vector是如何實現(xiàn)的? 這個簡單到爆了,我寥寥幾句說完了。
C++里,虛函數(shù)是如何實現(xiàn)的? 我一聽就明白想說的是vptr和vtable,直接說:如果一個對象含有一個以上虛函數(shù),則它的對象中有一個vptr,指向該對象所屬類型的虛擬函數(shù)地址表(vtable),這樣,就能根據(jù)一個對象的實際類型來確定要執(zhí)行的函數(shù)地址了。
C++里動態(tài)申請一個數(shù)組是用的int *p=new int[10]類型的方法,而銷毀時,則是用delete [] p ,請問,delete時,沒有指明銷毀空間有多大,它是如何知道要delete的數(shù)組是多大的?如果你來設(shè)計C++,你會如何來實現(xiàn)? 這個我之前確實沒思考過,我想了會兒,說可能是new時在前面多申請出幾個字節(jié),用來存該申請出區(qū)域的大小。這樣,返回的p可能不是申請出的首地 址,delete時,用p往前幾個字節(jié),就能知道數(shù)組有多大了。后來網(wǎng)上查了查,似乎確實是用差不多的方法實現(xiàn)的。
給你一個隨機數(shù)發(fā)生器,它有p的概率生成0,1-p的概率生成1,現(xiàn)在讓你設(shè)計一個隨機數(shù)發(fā)生器,有1/2的概率生成0,1/2的概率生成1. 這個想了好一會兒沒想出來好方法。后來面試結(jié)束后,讓大二大三的想,他們找到了個方法:用給出的隨機發(fā)生器,隨機生成兩次數(shù)字,由于先1后0和先0后1的 概論是相同的,都是p(1-p)的概率,所以,如果先1后0,就輸出1,如果先0后1,就輸出0.如果同1或者同0,就重復(fù)試驗,直接兩次生成的數(shù)不相同 為止。
給你一棵樹,并給你兩個結(jié)點,如何求它們的最近公共祖先? 我一聽最近公共祖先(LCA問題),直接說能用tarjan算法來算,然后他又讓我說明具體怎么算,我想了好一會兒才想清楚具體的過程。說完才意識到他現(xiàn) 在只是問求一次最近公共祖先如何求,我又說,如果只求一次的話只需要簡單的一次搜索就可以了。。而求多次的話,每次都搜索太慢,可以用上面說的 tarjan算法或者用一次搜索先轉(zhuǎn)化成+-1RMQ問題來求解。
請詳細說明如何使用socket。 這個我以前我用C語言和C#都寫過socket程序,所以對這個很是熟悉,又是直接說了一通。
TCP和UDP的區(qū)別是什么? 我說TCP是面向連接的,UDP是無連接的。
請詳述TCP的三次握手的過程 這個我當(dāng)時確實不會,就直接說沒了解過。
關(guān)于虛擬內(nèi)存管理,說說你的看法。 這個,我當(dāng)時不太了解,不過猜測和cache管理比較類似,然后就按cache管理答了些東西,后來看看,大致還算比較靠譜。
你有什么問題想要問的沒有? 這個說是問題也可以算是個問題吧,我就隨便扯一點點,然后幫同學(xué)問問一個同學(xué)為什么還沒接到電面通知,他說他會幫我問問的。
然后,面試完和面試官閑談了談,談到我在大連理工參加的大連賽區(qū)的ACM比賽,面試官似乎之前在大連理工上過學(xué),他說似乎大連賽區(qū)這個比賽的申辦和他還有些關(guān)系…
二面: 先是在去往面試地點的路上,電梯里,聊了聊ACM相關(guān)的東西,他問我現(xiàn)在中國有幾個賽區(qū),我說五個,他說“現(xiàn)在這么多賽區(qū)啊”,看樣子他以前也參加過 ACM。面試開始后,他最開始先是讓我自己講一下我寫的OJ系統(tǒng)的工作原理,我扯了一堆linux系統(tǒng)調(diào)用之類的東西,然后,他似乎感覺不錯,開始一直問 我算法方面的題目。 第一道題是讓我在紙上寫一個什么函數(shù),現(xiàn)在忘記到底是啥函數(shù)了,反正不太難,不過在紙上寫代碼確實有些郁悶。 第二個題是給了一個鏈表結(jié)構(gòu),讓我寫個代碼使這個鏈表中的相鄰的元素兩兩進行交換,比如1 2 3 4 5 交換成2 1 4 3 5,最后剩余的元素不再交換。就這么個簡單的程序,我竟然寫了好一會兒,寫錯了n次才終于寫對。當(dāng)時感覺到自己真是弱爆了。 第三道題說的是有m個數(shù),其中部分數(shù)能分到集合一里,部分數(shù)能分到集合二里,部分數(shù)可以分到集合一也可以分到集合二,現(xiàn)在給你集合一的容量和集合二的容 量,如何劃分這些數(shù)(可以分到一個集合中或者不放入任何一個集合),讓兩個集合中數(shù)的和最大。我剛開始把容量理解成是放進這個集合中的數(shù)的和不能超過這個 定值,當(dāng)時想了一會兒沒想好具體怎么去搞。后來他準備去引導(dǎo)我把這題搞出來,在他引導(dǎo)我的時候,我才明白原來他說的容量是指放入的數(shù)的個數(shù),我立刻說這題 能用貪心算法來做,就是從大數(shù)到小數(shù)排序,用三個變量a,b,c分別表示集合一剩余容量,集合二剩余容量,和總剩余容量,然后從大到小對這些數(shù)一個一個進 行處理,如果待處理的數(shù)只能放到集合一中,則讓集合一剩余容量減少,總剩余容量減少,如果只能放到集合二中,則讓集合二剩余容量減少,總剩余容量減少,如 果既可放到一也可放到二,則只讓總剩余容量減少。如果某個數(shù)只能放到集合一(或二)中,而集合一(或二)的剩余容量已為0,則該數(shù)不放入任一集合,當(dāng)總剩 余容量為0時算法停止。 第四道題說的是連連看游戲,說是給你一個連連看的初始狀態(tài),現(xiàn)在讓你判斷某兩個位置的物品是否能夠消除。 我想了一會兒,說可以先橫著枚舉,從兩個物品都往橫方向發(fā)一條直線,枚舉這兩條直線上由該物品可直接到達的點,看看這兩條直線上這些點有沒有橫坐標相同并 且中間沒有阻擋直接到達的情況,如果有,則證明可以消去,如果沒有則不可消去。但是我也知道這個方法似乎很慢。主要就慢在判斷兩個點是否沒有阻擋直接可達 上。然后,我又說要不行的話先預(yù)處理存下所有的點之間的連通狀態(tài)。他讓我算一下空間復(fù)雜度,我一算,似乎需要的額外空間很大,然后我又想到可以利用存前n 項和的方法,也就是說,先把有物品的地方標記為1,沒有物品的地方標記為0,利用部分和的方法求出每一列的前n項和存到一個對應(yīng)的數(shù)組里,(同樣也求出每 一行的前n項和存到另一數(shù)組里),然后利用f[m-1]-f[n]就可以得到第n+1項到第m-1項的和,如果它們?yōu)?,則表明中間沒有阻擋,如果不為 0,則表明有阻擋,則這里每次判斷的復(fù)雜度從O(n)轉(zhuǎn)化成了O(1),然后面試官又說,你這樣是可以很快了,但是,你消除元素之后,如何去更新你的數(shù) 組?我一想這樣的話消除元素之后,更新數(shù)組又成O(n)的復(fù)雜度了。不過瞬間我就想起了這樣求和并需要更新,明顯插點問線型的樹狀數(shù)組可以搞,于是,我立 馬說可以用樹狀數(shù)組進行插線問點。面試官愣了下,問我什么是樹狀數(shù)組。。我汗了一下,然后,意識到他搞競賽時可能樹狀數(shù)組還不流行。。于是解釋了一下原 理,然后說可以實現(xiàn)插點問線。然后面試官才說“哦,知道了,也就是說和線段樹類似嘛”,我說“嗯,不過比線段樹寫起來簡單多了”,然后面試官說好了,面試 結(jié)束了,問我有什么問題要問沒有,我開始變聰明了,問了問面試結(jié)果什么時候出來,面試官直接說,“你二面已經(jīng)通過了,不過今天有點晚了,不能直接三面了, 可能明天或者下周會安排你進行三面”,我又幫另一同學(xué)問了問內(nèi)推的事,他說他也不清楚,于是二面就結(jié)束了。
三面: 面試官先讓自我介紹,這個我還算有點準備,不過感覺面試官聽得很不仔細,邊看電腦邊聽的樣子,于是,心里有些慌,感覺自己想說的面試官沒聽進去。。 不過,我還是把想說的都說了說,說了自己許多優(yōu)點。然后面試官和我聊了會兒之后,開始問我題目,只問了一道題: 現(xiàn)在給你N個點,給你一個函數(shù)能算出任意兩個點之間的距離,現(xiàn)在要把這N個點中距離最近的兩個點合并成一個點(合并之后點的坐標也給你一個現(xiàn)成的函數(shù)能算 出來),然后,繼續(xù)這樣操作,讓你找一個方法,能盡可能高效的把這N個點合并成一個點。如果給你M臺計算機,你該如何利用多臺計算機加快這個過程。
這題不多說了,我當(dāng)時答得沾了個邊,但是答得不是很好,反正我說的是用極小堆和標記數(shù)組搞來搞,后來下來一想當(dāng)時答得有些扯淡,F(xiàn)在想好了一個方法,不過 說起來比較難描述,不多說了。 他又問我能過去實習(xí)不,我想了想說應(yīng)該可以吧。 他又問我有什么想問的或者想說的沒有,我本來想給他說說OJ,后來發(fā)現(xiàn)他對OJ也很熟悉(估計又是一搞過ACM的),然后我就沒啥可說的了,然后我還和二 面時一樣問什么時候能出結(jié)果,面試官又爽快地說我三面已經(jīng)過了。
于是,就這樣拿到了offer。
【百度面試經(jīng)驗】相關(guān)文章:
百度面試07-25
百度貼吧推廣經(jīng)驗12-28
百度實習(xí)及校招全攻略:面試經(jīng)驗,工作感受12-11
百度實習(xí)及校招全攻略面試經(jīng)驗以及工作感受12-11
2017百度貼吧推廣經(jīng)驗分享05-11
面試經(jīng)驗12-14
經(jīng)典的面試經(jīng)驗08-02
面試經(jīng)驗11-06