|
2010年3月22日
1474 geometry
1000 ad hoc
1003 ad hoc
1004 ad hoc
1005 ad hoc
1008 ad hoc
1023 ad hoc
1045 ad hoc
1046 ad hoc
1047 ad hoc
1079 ad hoc
1102 ad hoc
1126 ad hoc
1140 ad hoc
1207 ad hoc
1218 ad hoc
1220 ad hoc
1289 ad hoc
1306 ad hoc
1316 ad hoc
1326 ad hoc
1423 ad hoc
1450 ad hoc
1477 ad hoc
1488 ad hoc
1491 ad hoc
1493 ad hoc
1517 ad hoc
1519 ad hoc
1528 ad hoc
1552 ad hoc
1565 ad hoc
1583 ad hoc
1628 ad hoc
1635 ad hoc
1657 ad hoc
1658 ad hoc
1663 ad hoc
1665 ad hoc
1759 ad hoc
1775 ad hoc
1781 ad hoc
1809 ad hoc
1859 ad hoc
1868 ad hoc
1936 ad hoc
1942 ad hoc
1969 ad hoc
2000 ad hoc
2006 ad hoc
2013 ad hoc
2015 ad hoc
2017 ad hoc
2027 ad hoc
2083 ad hoc
2105 ad hoc
2109 ad hoc
2126 ad hoc
2136 ad hoc
2140 ad hoc
2141 ad hoc
2144 ad hoc
2159 ad hoc
2190 ad hoc
2196 ad hoc
2231 ad hoc
2249 ad hoc
2262 ad hoc
2272 ad hoc
2301 ad hoc
2305 ad hoc
2309 ad hoc
2316 ad hoc
2321 ad hoc
2328 ad hoc
2330 ad hoc
2350 ad hoc
2351 ad hoc
2379 ad hoc
2380 ad hoc
2390 ad hoc
2403 ad hoc
2419 ad hoc
1131 algebra
1707 algebra
1125 all pairs shortest paths
1375 analytical geometry
1473 analytical geometry
2098 analytical geometry
2242 analytical geometry
1001 arbitrary precision calculation
1354 arbitrary precision calculation
1454 arbitrary precision calculation
1503 arbitrary precision calculation
2389 arbitrary precision calculation
2413 arbitrary precision calculation
2240 Bellman-Ford algorithm
1195 binary indexed tree
1330 binary search
2418 binary search tree
1466 bipartite graph matching
1087 bipartite graph matching or maximum flow
2018 bisection and dynamic programming
1505 bisection and greedy
1434 bisection method
2155 bit operation or binary indexed tree
1111 breadth first search
1562 breadth first search
1724 breadth first search
1753 breadth first search
1915 breadth first search
1924 breadth first search
2225 breadth first search
2243 breadth first search
2251 breadth first search
2312 breadth first search
2386 breadth first search
2415 breadth first search
2426 breadth first search
2435 breadth first search
1209 calendar
2080 calendar
2210 calendar
1031 computational geometry
1127 computational geometry
1648 computational geometry
1654 computational geometry
1675 computational geometry
1912 computational geometry
2099 computational geometry
2150 computational geometry
2318 computational geometry
2398 computational geometry
2423 computational geometry
1032 construction
1147 construction
1148 construction
1702 construction
1844 construction
1898 construction
1906 construction
2085 construction
2319 construction
2356 construction
2402 construction
1426 construction or breadth first search
1606 construction or breadth first search
1113 convex hull
2187 convex hull and enumeration
1010 depth first search
1011 depth first search
1022 depth first search
1054 depth first search
1118 depth first search
1144 depth first search
1190 depth first search
1564 depth first search
1655 depth first search
1904 depth first search
1980 depth first search
2184 depth first search
2186 depth first search
2362 depth first search
2378 depth first search
2438 depth first search
1151 discretization and union of intervals or segment tree
1182 disjoint sets
1291 disjoint sets
1703 disjoint sets
1984 disjoint sets
2021 disjoint sets
2236 disjoint sets
2371 divide and conquer
2388 divide and conquer
1014 dynamic programming
1015 dynamic programming
1018 dynamic programming
1036 dynamic programming
1038 dynamic programming
1050 dynamic programming
1088 dynamic programming
1093 dynamic programming
1156 dynamic programming
1157 dynamic programming
1159 dynamic programming
1160 dynamic programming
1163 dynamic programming
1170 dynamic programming
1191 dynamic programming
1221 dynamic programming
1338 dynamic programming
1458 dynamic programming
1579 dynamic programming
1631 dynamic programming
1651 dynamic programming
1661 dynamic programming
1664 dynamic programming
1678 dynamic programming
1685 dynamic programming
1722 dynamic programming
1732 dynamic programming
1745 dynamic programming
1821 dynamic programming
1909 dynamic programming
1923 dynamic programming
1925 dynamic programming
1953 dynamic programming
2033 dynamic programming
2133 dynamic programming
2151 dynamic programming
2181 dynamic programming
2229 dynamic programming
2247 dynamic programming
2250 dynamic programming
2342 dynamic programming
2353 dynamic programming
2355 dynamic programming
2385 dynamic programming
2393 dynamic programming
2397 dynamic programming
2414 dynamic programming
2430 dynamic programming
2439 dynamic programming
2441 dynamic programming
2442 dynamic programming
2084 dynamic programming and arbitrary precision calculation
1387 dynamic programming and enumeration
1322 dynamic programming or generating function
1012 enumeration
1013 enumeration
1142 enumeration
1171 enumeration
1183 enumeration
1318 enumeration
1411 enumeration
1543 enumeration
1647 enumeration
1650 enumeration
1828 enumeration
1916 enumeration
1930 enumeration
2078 enumeration
2100 enumeration
2191 enumeration
2245 enumeration
2326 enumeration
2346 enumeration
2363 enumeration
2381 enumeration
2436 enumeration
2444 enumeration
1267 enumeration and bisection
1129 enumeration and depth first search
1186 enumeration and hash table
1348 enumration
1472 expression evaluation
2106 expression evaluation
2246 expression evaluation
2269 expression evaluation
2234 game theory
2348 game theory
2425 game theory
1799 geometry
1927 geometry
1939 geometry
1940 geometry
2007 geometry
2208 geometry
2276 geometry
2365 geometry
2405 geometry
1981 geometry and enumeration
1090 Gray code
1832 Gray code
1017 greedy
1042 greedy
1083 greedy
1230 greedy
1328 greedy
1456 greedy
1862 greedy
1922 greedy
2054 greedy
2082 greedy
2209 greedy
2291 greedy
2313 greedy
2325 greedy
2370 greedy
2376 greedy
2431 greedy
2433 greedy
2437 greedy
1405 greedy and arbitrary precision calculation
1659 greedy and construction
1026 group theory
1033 group theory
1286 group theory
1674 group theory
2369 group theory
2409 group theory
2366 hash table or binary search
1521 Huffman tree
1742 knapsack
2392 knapsack
1538 Lagrangian interpolation
2344 linear algebra and greedy
1462 linear systems
1914 linear systems
2440 matrix algebra
1149 maximum flow
1273 maximum flow
1459 maximum flow
2125 maximum flow and minimum cut
2377 maximum spanning tree
1258 minimum spanning tree
1679 minimum spanning tree
1861 minimum spanning tree
2421 minimum spanning tree
1166 modular systems
1222 modular systems
1681 modular systems
2345 modular systems
1905 Newton's iteration
2420 Newton's iteration
2299 number of inversions
1006 number theory
1061 number theory
1067 number theory
1152 number theory
1284 number theory
1320 number theory
1401 number theory
1455 number theory
1597 number theory
1808 number theory
1811 number theory
1845 number theory
1995 number theory
2115 number theory
2407 number theory
2417 number theory
2429 number theory and enumeration
1146 permutation
1256 permutation
1731 permutation
1833 permutation
2079 rotating calipers
2104 search
1177 segment tree
2182 segment tree
2352 segment tree or binary indexed tree
1016 simulation
1028 simulation
1048 simulation
1049 simulation
1051 simulation
1060 simulation
1281 simulation
1298 simulation
1363 simulation
1504 simulation
1573 simulation
1578 simulation
1589 simulation
1592 simulation
1600 simulation
1656 simulation
1660 simulation
1666 simulation
1684 simulation
1926 simulation
1928 simulation
1978 simulation
2014 simulation
2039 simulation
2050 simulation
2051 simulation
2081 simulation
2271 simulation
2317 simulation
2339 simulation
2340 simulation
2359 simulation
2383 simulation
2410 simulation
2424 simulation
2443 simulation
2387 single source shortest paths
2394 single source shortest paths
1002 sorting
1245 sorting
1520 sorting
2092 sorting
2408 sorting
1007 stable sorting
1572 string manipulation
1646 string manipulation
1917 string manipulation
2406 string matching
1128 topological sorting
1785 treap
2201 treap
2255 tree manipulation
1089 union of intervals
1797 variation of Dijkstra's shortest path algorithm
2253 variation of Dijkstra's shortest path algorithm
2395 variation of Dijkstra's shortest path algorithm
2254 vector algebra
2354 vector algebra
2412 vector algebra
1130 vertex connectivity
1308 vertex connectivity
2320 vertex connectivity
2010年2月21日
百度筆經(jīng)&面經(jīng)(zz,詳細(xì)!贊!) 2007年10月20日 星期六 16:34發(fā)信人: ptlj (PT), 信區(qū): Job_Discuss ?標(biāo) 題: 百度筆經(jīng)&面經(jīng) 發(fā)信站: 武漢白云黃鶴站 (2007年10月08日12:50:13 星期一) ?看了一下精華區(qū),好像關(guān)于百度的筆經(jīng)和面經(jīng)很少,所以上來發(fā)一下,積攢RP~~PS:我投的是商務(wù)搜索部的引擎研發(fā)工程師。
【筆試】百度的在華科的筆試在9月21號晚上宣講會后馬上舉行。宣講會那叫一個人山人海, 很多不是畢業(yè)班的人也來湊熱鬧感受一下百度招聘。筆試題目有選擇題,編程題,系統(tǒng)設(shè) 計題三種類型。選擇題難度不是很大,但我太水了,很多基礎(chǔ)知識都不記得了,正則表達 式,shell編程~~~汗死,不說了,好多都是蒙的。 編程題有3題,第一題是找出字符串 的最長不重復(fù)子串,輸出長度。我想了半天,只會O(n^2)的算法,是個人都可以想出來的 笨辦法,想著寫下來也沒啥意義,題目問有沒O(n)的,那看來肯定有O(n)的,就不寫 了,看后面的題算了。第二題是找出一個字符串的最長回文子串。這個問題好像以前考研 復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)時看過,想起來判斷一個回文串可以用棧來實現(xiàn),稍微回憶一下,算法思路 就出來了。于是提筆寫下了個O(n^3)的算法。汗死了,自己太笨了,只能想出這種垃圾算 法,看來百度不好混啊。第三題是在2.5億個整數(shù)中找出不重復(fù)的整數(shù),內(nèi)存空間不足以容 納這2.5億個整數(shù)。這種題是百度的特色,海量數(shù)據(jù)處理,我也沒啥思路。既然不能一次扔 進內(nèi)存,我就分批扔進去,盡量減少從外存讀進內(nèi)存的次數(shù),然后算了一下,分2批扔進內(nèi) 存。然后每批排序,找出每批里面不重復(fù)的數(shù),把這些不重復(fù)的再在另一批數(shù)中過一遍,去掉重復(fù)的,然后匯總。寫不出具體代碼,只把思路寫了一下。當(dāng)時心情沮喪極了,想著,掛了,代碼不會寫,難得寫出一題又是效率極低的。最后那道系統(tǒng) 設(shè)計題,我壓根沒啥好思路,題目大概是海量數(shù)據(jù)分布在100臺電腦中,想個辦法高效統(tǒng)計 出這批數(shù)據(jù)的TOP10。草草寫了幾筆,時間就到了,交卷~~~看來,這次除非有奇跡,不 然筆試肯定被BS了。
考完回到寢室,和兄弟們討論一下題目,第一題原來可以用Hash實現(xiàn),時間復(fù)雜度降 到O(n)。自己仔細(xì)想了一下,整個算法的思路就清晰了,郁悶啊,這么簡單的題居然沒想 出來,看來自己還是太菜了。ZZ對第二題還有個新穎的算法,學(xué)習(xí)了一下,贊啊,虧他想 得出來,呵呵。第二天還有Microsoft的筆試,趕緊拿Primer來抱抱佛腳,這么好的一本書 ,我學(xué)C++時怎么就沒看???后悔,懊惱充斥著我的大腦,大有相見恨晚的感覺。 雖然自己筆試很爛,但是還是寄希望于奇跡出現(xiàn),能有機會去面試。于是晚上睡覺開著手機,因為座談會時百度說如果筆試通過,當(dāng)晚凌晨就會出面試通知了。晚上輾轉(zhuǎn)反側(cè) ,難以入睡,期待手機鈴聲響起,都不知道幾點才睡著。早上起床一照鏡子,大熊貓再現(xiàn)拉,唉,為百度消得我憔悴啊。自己空想也沒用,眼前還有MS等著我呢。考MS時,手機都沒關(guān),就等著百度電話,希望考試時能有電話來。果然,早上11點多還在考試時,手機響起,掛掉,我還在為了MS筆試而撓頭呢。幾分鐘后,又響了一次,再次掛掉。考完試,出 考場拿手機一看,咦,是027的哦,好像是個小靈通?;?fù)?,不通,繼續(xù)回?fù)埽€是不通, 不死心,我就不信撥不通你。結(jié)果撥了10多次還是不通,算了,只好等他再打來?;貙嶒?室,上Q問問這個號碼是不是百度的,JG他們說是的,驚喜,Oh,yeah,百度面試來臨了, Miracle居然發(fā)生了。于是和JG,DJ,Q拼車去弘毅面百度。結(jié)果面官說我不接電話,他們安排了其它同學(xué)面試,叫我第二天早上10點再來面。FT,怎么這么曲折啊,不過給我點時 間復(fù)習(xí)準(zhǔn)備,也好。
【一面】 晚上好好看了一下項目,把重點溫習(xí)了一下。又問了下JG面試問了啥,心里有個底了 。第二天,一個人飛的去了弘毅,花了22大洋,好心疼啊。去到昨天那個房間,看見面官 了,一個光頭,和JG昨天的面官一樣。果然,他上來就問了我昨天問JG的同樣問題,設(shè)計 一種數(shù)據(jù)結(jié)構(gòu),結(jié)合了鏈表和數(shù)組的優(yōu)點。我想了一下,說用Hash鏈表,這樣插入和查找 的效率都比較高,但是有conflict問題要解決。他馬上就問我如何解決conflict問題,有沒什么好方法。我說修改hash函數(shù),使得hash值產(chǎn)生的conflict概率盡可能低。他問那你怎么設(shè)計?我倒,這個問題我可沒想過啊。當(dāng)場郁悶了,立馬陷入苦思狀態(tài)。想出幾個點 子,都不管是否可以降低conflict的概率,都和面官說了。他很快就舉例否定我好不容易 想出的點子,說你的辦法還是不行哦,有沒更好的?打擊死了,我已經(jīng)盡力了啊,沒想到這么快就被他找到反例,郁悶死我了。不過面官人很好,看我實在想不出更好的了,就不為難我了,換下一個題目。后面一題是海量日志數(shù)據(jù),提取出某日訪問百度次數(shù)最多的那個IP。想了一下,說了個思路。面官就問你這樣需要的存儲空間太大,有沒優(yōu)化方法???來思路是正確的了,但是優(yōu)化問題嘛,好棘手啊。我又說了個優(yōu)化的方法,面官不太滿意,搖頭。完了,實在想不出來了。。。。面官見我苦思冥想,也不為難我了。接著就問了下項目經(jīng)驗,我balabala一通,他對我的項目不太感冒,沒問什么問題。 然后就問筆試卷子了,他問我第一題干嘛空白?我說了原因,他問我現(xiàn)在有好的想法 沒?我就把自己考完后想的O(n)的算法說了一下,他比較滿意,沒問我什么就問第二題 了。我又說了下我當(dāng)時的算法思想,他問有沒更好的優(yōu)化算法?我說可以做到O(n^2), 把思路說了下。似乎不是他的滿意答案,也沒問我啥。接著問第三題,我把我的想法說了 。他說,你最后還需要折半查找這么麻煩嗎?對2個有序的數(shù)組,查找A數(shù)組的元素是否在 B數(shù)組中出現(xiàn)有沒更好的算法?我想了一下,突然靈機一動,想起歸并排序的算法。就說, 是不是像歸并數(shù)組那樣,直接在B中定位出A的位置,這樣就可以在O(m+n)內(nèi)實現(xiàn)。他比較滿意,說:“是啊,都有序了,你還折半這么麻煩???”暴汗,看來面官水平比我高太多了,思維跟不上。然后看面官總算露出點笑容,忍不住問句:“你覺得我這個算法可以接受不?”他的回答讓我很吃驚,他說:“當(dāng)然可以接受拉,我覺得挺好的啊,不過你的算法要訪外存,可能時間效率不是很高。不過先要完成題目的任務(wù),再考慮優(yōu)化?!蔽亿s緊補一句:“是啊,先要讓它work,再考慮如何讓它work better?!泵婀龠€來句:“不過這個題最好的算法可以一次把2.5億數(shù)據(jù)扔進內(nèi)存,這需要你設(shè)計一個好的數(shù)據(jù)結(jié)構(gòu)?!蔽覇枺骸斑@個,怎么設(shè)計哦?”面官表示不能告訴我答案,讓我自己回去想。 這時,面官看看表,我也看看表,已經(jīng)面了50分鐘了。他說:“現(xiàn)在我們再做2道數(shù)學(xué)推理題。第一題,2個盒子,容量足夠大,現(xiàn)在有50個紅球,50個藍 球,你如何安放這 些球進盒子,使得我隨機抽取一個盒子,然后從里面隨機抽一個球,這個球是紅球的概率 最大?給你2分鐘時間考慮,直觀分析給出結(jié)果。”當(dāng)場我就暈倒了,從小到大,我都不會 做IQ題的啊,這可是我的最弱項。沒辦法,不能直接說我不會啊。只好硬著頭皮上,分析 一下,我說:“列條概率的表達式,求最值,可以求出結(jié)果。”他說:“你這樣搞2個小時 都算不出結(jié)果。從直觀上分析就可以知道結(jié)果了。你再想想”,被打擊了。只好繼續(xù)想, 我想,那把50個紅球放到一個盒子,另一個盒子全放藍球,這樣一個有100%,另一個是0 %,平均下來有50%。也不理想啊,這個時候,靈感再次突現(xiàn),50個紅球全放一個盒子不 是浪費嘛?放1個也是100%,2個也是100%,那就放一個好了,其它全部扔到另一個盒子和 藍球一起。再想一下,這樣概率有75%,應(yīng)該很高了。也沒仔細(xì)想是不是正確答案,就脫 口而出,說了這種放法。面官再次露出笑容,說“正確!”我那時心里好激動啊,沒想到 運氣這么好,居然還答對了。接著又來下一題,A射擊命中率80%,B60%,C40%,A,B,C互為競爭對手,每人都知道另外2人的命中率,3個人同場 競技互相射擊,同時開了第一槍,問第一槍射后,誰最有可能掛掉?我分析了一下,說了答案,他問我思路,我說了我的思路后,他居然來句:“你的思維和別人不 一樣?!盕T,我和別人不一樣,估計說錯了,自己確實回答IQ題比別人笨一截,沒辦法。面官說:“好了,時間差不多了。你有什么問題問我不?”我問:“如 果我有幸通過一面,什么時候會二面?”“通過的話,明早就二面。”然后,和面官握了下手,就這樣結(jié)束了我的一面。 面完一面后,去找LP吃飯,下午陪她上自習(xí),感覺自己一面還行吧,大部分題都答出了思路,雖然進一步的優(yōu)化沒有想完整,而且運氣也好得不得了,連最后2題居然還被我蒙對1題,如果進不了2面,只能說明自己離百度的要求還是差距太大了。結(jié)果好運再次降臨,晚上6點多接到電話,通知第二天早上10點去二面,呵呵,竟然進了二面,真是 too lucky。
【二面】 第二天準(zhǔn)時去到面試房間,換了位面官面我。一上來就問我一道海量數(shù)據(jù)處理題。題目是:很多記錄數(shù)據(jù),有ID號,還有幾個不同的屬性域,現(xiàn)在要根據(jù)ID號高速查詢到對應(yīng) ID號的數(shù)據(jù),設(shè)計個算法。然后,現(xiàn)在要根據(jù)特定的屬性域排序查詢,既要高效找到排名 在第N-M名的記錄,還要經(jīng)常插入,刪除記錄。我說,查詢ID可以用Hash表查詢,把ID號hash,然后可以在O(1)查到對應(yīng)的記錄。第二個問題,有點復(fù)雜,類似于結(jié)合數(shù)組和鏈表的優(yōu)點設(shè)計數(shù)據(jù)結(jié)構(gòu)。我說了好幾種方案,問他這樣行不行。他說:“你自己覺得行不行啊 ,現(xiàn)在是我面你,不是你面我啊,你自己考慮答案啊?!睍灥?,我實在想不出更好的,也 不知道應(yīng)該如何抉擇,備選方案都各有優(yōu)缺點啊。最后,還是選了其中一種,回答了這個 問題。面官說:“其實這個問題很難有最佳方案,就看你怎么選擇,權(quán)衡,選一種較好的 方案?!卑Γ膊恢牢业拇鸢缚刹豢梢越邮埽耆珱]了一面時的靈感了。然后面官看了 下我簡歷,驚訝地說道:“你是武漢理工畢業(yè)的?”我也很驚訝:“你聽說過這個學(xué)校? ”因為我感覺,武漢理工又不是很有名,在北方,連華中科技名氣都不是很響,沒想到面 官竟然知道武漢理工。結(jié)果面官說:“我就是武漢理工畢業(yè)的啊。”一聽,心中竊喜,居然還有校友,趕緊套一下親近。問他哪一級的,什么時候畢業(yè)啊,加入百度多久了之類的問題。然后自己又說了一下個人對武漢理工的感覺,尤其是當(dāng)年放棄保研名額,選擇去考研。他聽著也覺得有點意思,我就繼續(xù)說:“覺得學(xué)習(xí)氛圍很重要,身邊的同學(xué)對自己的影響很大。本科時,很多同學(xué)沉溺于網(wǎng)游,都墮落了,自己想找個人討論問題都沒有?,F(xiàn)在去了華中科技,身邊的同學(xué)都很優(yōu)秀,經(jīng)常和同學(xué)討論問題,一起進步,感覺很好?!彼犃撕簏c點頭,說:“你這個決定挺正確的。......blabala一通,他也不感冒。他又問我:“干嘛想加入百度公司?”我說:“自己對互聯(lián)網(wǎng)技術(shù)很感興趣,從本科起對數(shù)據(jù)結(jié)構(gòu)和算法就有濃厚的興趣。 加上自己將來想搞研發(fā),百度公司的技術(shù)很吊,里面的人很強,加入百度可以得到很好的鍛煉,學(xué)到很多東西。百度公司現(xiàn)在發(fā)展很快,對自己的職場生涯很有幫助?!比缓?,他問我:“你對搜索引擎了解不?”我說:“之前不了解,聽了座談會后了解了一些?!彼謫枺骸澳銓ψ匀徽Z言分析處理了解不?”“不懂”說完, 我汗死了,完全不懂,有點不祥的預(yù)感了。誰知道,更郁悶的事還在后頭。他接著來一句:“你做的項目都是網(wǎng)絡(luò)安全方面的,和我們的活不對口啊?”最讓我擔(dān)心 的事終于發(fā)生了,我故作鎮(zhèn)定說:“恩,既有網(wǎng)絡(luò)安全,也有網(wǎng)絡(luò)應(yīng)用和管理方面的?!比缓竺婀倬驼f:“好了,我的問題差不多了,你有什么問題要問嗎?”我看了下表,倒,才面了30分鐘就沒問題了,看來我方向不對口,他對我已經(jīng)沒興趣了,不行,這樣草草了結(jié),二面肯定掛掉了,得扯點他感興趣的問題才行。馬上把自己本科的那個畢業(yè)設(shè)計網(wǎng)絡(luò)五子棋里面涉及的算法問題拿出來問問他,看看他有什么優(yōu)化的方法。他想了一會,說:“這個問題有點復(fù)雜哦?!蔽腋`喜,哈哈,該不會把你難倒了吧?接著他來句:“你當(dāng)時是怎么做的?”我心想,你還真行,把問題又丟回來給我了。我就說了我當(dāng)時的做法,也得到了他的認(rèn)可和贊許。恩,第一步目標(biāo)達成。 然后又問他我投的那個職位對哪方面的要求比較高?他說:“良好的算法和數(shù)據(jù)結(jié)構(gòu)的基 礎(chǔ)最重要?!蔽矣謫枺骸澳菙?shù)據(jù)庫,腳本語言,網(wǎng)絡(luò)編程方面呢?”這些都是我的弱項哦 。他說:“這些都有很多現(xiàn)成的成果可以直接利用了,算法和數(shù)據(jù)結(jié)構(gòu)可能比較難提高, 所以需要有個良好的基礎(chǔ)才行?!甭犕?,心里有點高興,自己的強項就是算法和數(shù)據(jù)結(jié)構(gòu) 方面,既然弱項不是很重要,那看來對我的影響不大。這又讓我想起李開復(fù)的一句話:“ 你進MS時,懂C#很好,不懂也不要緊,來了可以學(xué)。但是如果你不懂得如何學(xué)習(xí),那就糟 糕了。”看來,基礎(chǔ)和學(xué)習(xí)能力是很多大公司所看重得。然后又和面官聊一下武漢理工的 變化,和在華中科技讀研的一些生活。最后,面官說了句:“其實,你的技術(shù)還是不錯的 。”聽了這句后,很高興,但是自己對搜索引擎的不了解和專業(yè)的不對口又讓自己產(chǎn)生一絲隱憂。最后問了下“還會有3面不?”“Maybe?!焙兔婀賡ay goodbye,然后結(jié)束了二面。
【后記】 二面后就是漫長的等待(其實也就等了6天而已,但是自己已經(jīng)覺得很漫長了)。期間沒有任何消息,BBS說二面過了就發(fā)offer,二面不過就去三面。對這個說法,我持保留意見,身邊很多大牛都去3面了,3面是非技術(shù)面,都問你期望的月薪的,自己覺得應(yīng)該是過了2面的才有3面機會吧。自己一直沒等來3面的電話通知,已經(jīng)覺得自己掛了。期間找 LP訴苦,她安慰我說:“說不定就像BBS說的那樣,二面過了就不用三面了吧。你干著急也沒用啊,好好復(fù)習(xí)等消息吧?!彪m然是安慰我的話,但是在等待的日子里有個人可以訴苦感覺還是挺好的。聯(lián)系了一下內(nèi)推的那個人,他說他也不知道結(jié)果,問我是誰面我的。我說一面是光頭,把二面面官的名字報了一下。他說:“光頭是他們部門經(jīng)理。”我很驚訝 ,???部門經(jīng)理?看不出來啊,既然部門經(jīng)理都讓我過1面了,應(yīng)該機會還挺大的啊,自我感覺一面比二面好多了。每天逛BBS,不僅看白云,還看珞珈山水,交大思源,還有天大求 實。等待真是種煎熬啊,雖然各方面的信息都是朝著不利的一面發(fā)展,但是自己還是不死心,一天沒發(fā)offer,就還有機會;既然沒發(fā)據(jù)信,那就還有希望。等啊等,終于在國慶前 一天發(fā)offer了,居然自己也有! 回顧這次百度之旅,感覺運氣太好了。一面是部門經(jīng)理,其實過了他這關(guān)基本問題就不大了。恰好自己那天狀態(tài)超好,靈感不時出現(xiàn),臨場超水平發(fā)揮,總算過了第一關(guān)。第二關(guān)在形勢很不利的情況下(連說幾個“不懂”),自己給自己找加分項目,朝著職位的要求往上靠。既然算法和數(shù)據(jù)結(jié)構(gòu)要求高,我就要表現(xiàn)出自己這個方面有優(yōu)勢,扯畢業(yè)設(shè) 計的算法設(shè)計和面官聊,表示自己對這方面有興趣,基礎(chǔ)不差。還有突出一下自己其它方 面的優(yōu)點,例如上進,好學(xué),對技術(shù)有偏執(zhí)(百度系統(tǒng)部老大的經(jīng)典說法)等。覺得面試時還有一點做得不錯的就是,當(dāng)面對一個自己沒什么思路的問題時,只要你有什么新想法 ,不要管這個想法是否可行,是否可以真的解決問題,先把它說給面官聽,讓他覺得你的 思考問題的能力還是很強的。一定不要想了半天,結(jié)果說“不知道”這樣面官對你的印象 就會很差。雖然你的idea可能不是很work,但是只要是朝著正確的方向前進就OK拉,面試官會給你一定的指引的。你繼續(xù)朝著那個方向想,說不定很快就可以解決問題了。 以前都是看別人的面經(jīng),獲益良多,這次自己寫寫筆經(jīng),面經(jīng),希望對大家有幫助。 最后,希望大家都能找到自己滿意的工作,其實付出和收獲真是成正比的??梢詮氖伦约?喜歡的工作,真是很高興。目標(biāo)和準(zhǔn)備方向的正確可能是我這次應(yīng)聘成功的最主要因素之一吧。我投簡歷只投研發(fā)的崗位,對不搞技術(shù)的公司壓根沒投,不管公司有多大有多好, 像P&G,MARS,國企,公務(wù)員等。一來不想占用別人的機會,二來也知道自己更適合在技術(shù) 方面發(fā)展,去非技術(shù)類公司自己的發(fā)展可能不如技術(shù)類公司。呵呵,寫得我好累啊,就寫到這吧,希望能對大家有用。
2010年2月6日
原理 令h(1)=1,h(0)=1,catalan數(shù)滿足遞歸式: h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2) 另類遞歸式: h(n)=((4*n-2)/(n+1))*h(n-1); 該遞推關(guān)系的解為: h(n)=C(2n,n)/(n+1) (n=1,2,3,...) 卡特蘭數(shù)的應(yīng)用 ?。▽嵸|(zhì)上都是遞歸等式的應(yīng)用) 括號化問題 矩陣鏈乘: P=a1×a2×a3×……×an,依據(jù)乘法結(jié)合律,不改變其順序,只用括號表示成對的乘積,試問有幾種括號化的方案?(h(n)種) 出棧次序問題 一個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列? 分析:對于每一個數(shù)來說,必須進棧一次、出棧一次。我們把進棧設(shè)為狀態(tài)‘1’,出棧設(shè)為狀態(tài)‘0’。n個數(shù)的所有狀態(tài)對應(yīng)n個1和n個0組成的2n位二進制數(shù)。由于等待入棧的操作數(shù)按照1‥n的順序排列、入棧的操作數(shù)b大于等于出棧的操作數(shù)a(a≤b),因此輸出序列的總數(shù)目=由左而右掃描由n個1和n個0組成的2n位二進制數(shù),1的累計數(shù)不小于0的累計數(shù)的方案種數(shù)。 在2n位二進制數(shù)中填入n個1的方案數(shù)為c(2n,n),不填1的其余n位自動填0。從中減去不符合要求(由左而右掃描,0的累計數(shù)大于1的累計數(shù))的方案數(shù)即為所求。 不符合要求的數(shù)的特征是由左而右掃描時,必然在某一奇數(shù)位2m+1位上首先出現(xiàn)m+1個0的累計數(shù)和m個1的累計數(shù),此后的2(n-m)-1位上有n-m個 1和n-m-1個0。如若把后面這2(n-m)-1位上的0和1互換,使之成為n-m個0和n-m-1個1,結(jié)果得1個由n+1個0和n-1個1組成的2n位數(shù),即一個不合要求的數(shù)對應(yīng)于一個由n+1個0和n-1個1組成的排列。 反過來,任何一個由n+1個0和n-1個1組成的2n位二進制數(shù),由于0的個數(shù)多2個,2n為偶數(shù),故必在某一個奇數(shù)位上出現(xiàn)0的累計數(shù)超過1的累計數(shù)。同樣在后面部分0和1互換,使之成為由n個0和n個1組成的2n位數(shù),即n+1個0和n-1個1組成的2n位數(shù)必對應(yīng)一個不符合要求的數(shù)。 因而不合要求的2n位數(shù)與n+1個0,n-1個1組成的排列一一對應(yīng)。 顯然,不符合要求的方案數(shù)為c(2n,n+1)。由此得出 輸出序列的總數(shù)目=c(2n,n)-c(2n,n+1)=1/(n+1)*c(2n,n)。 ?。ㄟ@個公式的下標(biāo)是從h(0)=1開始的) 類似:有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?(將持5元者到達視作將5元入棧,持10元者到達視作使棧中某5元出棧) 凸多邊形的三角剖分問題 求將一個凸多邊形區(qū)域分成三角形區(qū)域的方法數(shù)。 類似:一位大城市的律師在她住所以北n個街區(qū)和以東n個街區(qū)處工作。每天她走2n個街區(qū)去上班。如果她從不穿越(但可以碰到)從家到辦公室的對角線,那么有多少條可能的道路? 類似:在圓上選擇2n個點,將這些點成對連接起來使得所得到的n條線段不相交的方法數(shù)? 用給定節(jié)點組成二叉樹的問題 給定N個節(jié)點,能構(gòu)成多少種不同的二叉樹? ?。軜?gòu)成h(N)個)
2010年2月5日
BUPT OJ 1094ACM的組隊 1095探險家Javaman 1096老鷹捉小雞 1098機器人工廠 1099Plant 1010Snooper 1011PrisonBreak 1012SuperRock教授的教案
2010年1月1日
題目鏈接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1797 題目描述:求從指定起點到指定終點每條可能路徑上各段邊的最小值 注意事項:有向圖/無向圖 提交情況:3次Runtime Error,是最開始嘗試用Kruskal時間接排序的數(shù)組r大小只開了MAXN個;3次WA的主要原因是無向圖按照有向圖做的。用鄰接表存儲圖時一定要注意有向圖和無向圖的問題,已經(jīng)出錯好幾次了。 心得體會:本道題實際是按照Prim求最大生成樹的思路,逐條添加邊;在添加的過程中,注意從1點出發(fā),在遇到n時,即使最大生成樹仍沒有構(gòu)造完,也可以從函數(shù)中返回了。最開始以為是簡單的生成樹問題,所有用Kruskal來作,遇到起點和終點都訪問過就退出,但此時,構(gòu)造的生成樹可能根本就沒有連接,而Prim在構(gòu)造的初始就是從一棵樹開始拓展的,不會出現(xiàn)這個問題。需要對每個具體的算法有更深入的理解。 1 #include<queue> 2 #include<stdio.h> 3 #include<string.h> 4 using namespace std; 5 6 #define MAXN 1010 7 #define MAXM 1000010 8 9 struct Edge 10 { 11 int start; 12 int end; 13 int weight; 14 15 bool operator>(const Edge &e) const 16 { 17 return weight<e.weight; 18 } 19 }; 20 21 Edge edge[2*MAXM]; 22 int visited[MAXN]; 23 int first[MAXN]; 24 int next[2*MAXM]; 25 26 int Prim(int n) 27 { 28 memset(visited,0,sizeof(visited)); 29 int result = 10000000; 30 priority_queue<Edge,vector<Edge>,greater<Edge> > pq; 31 for(int e=first[1];e!=-1;e=next[e]) 32 { 33 pq.push(edge[e]); 34 } 35 visited[1]=1; 36 37 while(!pq.empty()) 38 { 39 int start = pq.top().start; 40 int end = pq.top().end; 41 int weight = pq.top().weight; 42 pq.pop(); 43 44 if(visited[end]==1) 45 continue; 46 visited[end] = 1; 47 48 if(weight<result) 49 result = weight; 50 if(end==n) 51 break; 52 for(int e=first[end];e!=-1;e=next[e]) 53 { 54 if(visited[edge[e].end]==0) 55 { 56 pq.push(edge[e]); 57 } 58 } 59 } 60 return result; 61 } 62 63 int main() 64 { 65 int snum; 66 scanf("%d",&snum); 67 for(int i=1;i<=snum;i++) 68 { 69 int n,m,start,end,weight; 70 scanf("%d%d",&n,&m); 71 72 memset(first,-1,sizeof(first)); 73 for(int j=0;j<2*m;j+=2) 74 { 75 scanf("%d%d%d",&start,&end,&weight); 76 77 edge[j].start = start; 78 edge[j].end = end; 79 edge[j].weight = weight; 80 81 edge[j+1].start = end; 82 edge[j+1].end = start; 83 edge[j+1].weight = weight; 84 85 next[j] = first[start]; 86 first[start] = j; 87 88 next[j+1] = first[end]; 89 first[end] = j+1; 90 91 } 92 93 int result = Prim(n); 94 printf("Scenario #%d:\n",i); 95 printf("%d\n\n",result); 96 } 97 }
2009年12月22日
題目鏈接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1840 題目描述:求方程的根的個數(shù) 注意事項:hash可以用char,避免占用內(nèi)存過多 提交情況:1次MLE,用int開數(shù)組太大了 心得體會:暫無 1 #include<stdio.h> 2 #include<string.h> 3 4 int calCube(int x) 5 { 6 return x*x*x; 7 } 8 9 char hash[25000010]; 10 11 int main() 12 { 13 int a1,a2,a3,a4,a5; 14 scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5); 15 16 int result; 17 memset(hash,0,sizeof(hash)); 18 for(int i=-50;i<=50;i++) 19 { 20 if(i==0) 21 continue; 22 for(int j=-50;j<=50;j++) 23 { 24 if(j==0) 25 continue; 26 for(int k=-50;k<=50;k++) 27 { 28 if(k==0) 29 continue; 30 result=a1*calCube(i)+a2*calCube(j)+a3*calCube(k); 31 if(result>12500000||result<-12500000) 32 continue; 33 hash[result+12500000]++; 34 } 35 } 36 } 37 38 int ans=0; 39 for(int i=-50;i<=50;i++) 40 { 41 if(i==0) 42 continue; 43 for(int j=-50;j<=50;j++) 44 { 45 if(j==0) 46 continue; 47 result=a4*calCube(i)+a5*calCube(j); 48 result=-result; 49 ans+=hash[result+12500000]; 50 } 51 } 52 53 printf("%d\n",ans); 54 }
2009年12月19日
題目鏈接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1416 所用算法:枚舉(01枚舉) 注意事項:注意位操作,要細(xì)心 提交情況:半個月前(12月4號,兩次wa),今天重新讀題又完全換思路重寫了一遍,ac 心得體會:數(shù)據(jù)量小,直接枚舉就可以,并不一定必須要深搜或剪枝。這道題如果深搜的話,剪枝的條件也是非常明顯的。代碼很亂,希望半個月后review的話還能看得懂。 1 #include<iostream>
2 #include<stdio.h>
3 #include<math.h>
4 #include<stdlib.h>
5 #include<string.h>
6 using namespace std;
7
8 int calvalue(int t,int sum)
9 {
10 int result=0;
11 int j=0;
12 for(int i=0;i<=5;i++)
13 {
14 if(t&(1<<i))
15 {
16 result=result+sum%(int)pow(10,j+1);
17 sum=sum/(int)pow(10,j+1);
18 //printf("%d %d\\n",result,sum);
19 j=0;
20 }
21 else
22 {
23 j++;
24 }
25 }
26 return result+sum;
27 }
28
29 int printvalue(int t,int sum)
30 {
31 int stack[10];
32 int top=0;
33 int j=0;
34 for(int i=0;i<=5;i++)
35 {
36 if(t&(1<<i))
37 {
38 stack[top++]=sum%(int)pow(10,j+1);
39 sum=sum/(int)pow(10,j+1);
40 j=0;
41 }
42 else
43 {
44 j++;
45 }
46 }
47 stack[top++]=sum;
48 while(top!=1)
49 {
50 printf("%d ",stack[--top]);
51
52 }
53 printf("%d\\n",stack[0]);
54 }
55
56 int main()
57 {
58 int target;
59 char num[7];
60 //freopen("data.in","r",stdin);
61 while(scanf("%d%s",&target,num)==2)
62 {
63 if(target==0&&num[0]=='0')
64 break;
65 int sum=0;
66 int flag=0;
67 int length=strlen(num);
68 int minvalue=0;
69 int partition=-1;
70 for(int i=0;i<length;i++)
71 {
72 sum=10*sum+num[i]-'0';
73 minvalue+=num[i]-'0';
74 }
75
76 if(sum==target)
77 {
78 printf("%d %d\\n",target,sum);
79 continue;
80 }
81 else if(minvalue>target)
82 {
83 printf("error\\n");
84 continue;
85 }
86 else
87 {
88 minvalue=0;
89 int mysum=0;
90 int times=1<<(length-1);
91 for(int j=0;j<times;j++)
92 {
93 mysum=calvalue(j,sum);
94 if(mysum==minvalue)
95 {
96 flag=1;
97 }
98 else if(mysum<=target&&mysum>minvalue)
99 {
100 minvalue=mysum;
101 flag=0;
102 partition=j;
103 }
104 }
105 }
106 if(flag==1)
107 {
108 printf("rejected\\n");
109 }
110 else
111 {
112 printf("%d ",minvalue);
113 printvalue(partition,sum);
114 }
115
116 }
117 }
118
2009年12月18日
摘要: 題目鏈接:http://acm.pku.edu.cn/JudgeOnline/problem?id=3083題目描述:求最短路,求沿特定方向走迷宮的步數(shù)所用算法:最短路用bfs求,特定方向走迷宮直接用while計數(shù)(這里寫的比較繁瑣,要細(xì)心,本來看題目分類是在dfs里面的,以為這要用dfs,細(xì)想想不用,而求迷宮最短路徑,bfs應(yīng)該是首選了)提交情況:1次wa(忘了加<stdio.h>頭... 閱讀全文
題目鏈接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1936 所用算法:字符串 提交情況:1A 注意事項:無 心得體會:水題 1 #include<stdio.h> 2 3 char s[100010]; 4 char t[100010]; 5 6 int judge(char s[],char t[]) 7 { 8 int i=0; 9 int j=0; 10 while(s[i]!='\0'&&t[j]!='\0') 11 { 12 if(s[i]==t[j]) 13 { 14 i++; 15 j++; 16 } 17 else 18 { 19 j++; 20 } 21 } 22 if(s[i]=='\0') 23 return 1; 24 else 25 return 0; 26 } 27 28 int main() 29 { 30 //freopen("data.in","r",stdin); 31 while(scanf("%s %s",s,t)==2) 32 { 33 if(judge(s,t)) 34 printf("Yes\n"); 35 else 36 printf("No\n"); 37 } 38 }
2009年12月17日
題目鏈接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2299 題目描述:求冒泡排序的交換次數(shù) 所用算法:用歸并排序,求逆序數(shù)的個數(shù) 提交情況:1次tle(直接冒泡排序n^2的復(fù)雜度,對于5000000的數(shù)據(jù)量,必然超時),1次wa(統(tǒng)計個數(shù)時整數(shù)溢出了),1a 心得體會:初看題目很簡單,沒有往數(shù)據(jù)量方面想,直接冒泡計數(shù)提交,然后看著poj上一直running&&judging直到tle, 時限7000ms呀。沒做過逆序數(shù)的類似問題,而且題目本身分類也在排序那,然后考慮是不是能快排一下,比較排序前和排序后各個數(shù)的位置??紤]再三,發(fā)現(xiàn)解決不了。去論壇上瞄了一眼,看到可以用逆序數(shù)解,于是百度+算法導(dǎo)論,學(xué)到了如何用歸并排序計算逆序數(shù)的數(shù)目,寫成程序,中間還出現(xiàn)了一次wa,然后就ac了。我在看算法導(dǎo)論時,因為merge在書一開始講的,想平時排序都是快排為主流,就沒有仔細(xì)想過merge可能的變種,這道題充分印證了,即使merge本身可能用的不多,但分冶的思想?yún)s是無所不在 類似題目:poj1804 1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 5 int num[500010]; 6 int left_t[500010]; 7 int right_t[500010]; 8 9 long long count=0; 10 11 void merge(int a[],int p,int q,int r) 12 { 13 int n1=q-p+1; 14 int n2=r-q; 15 for(int i=1;i<=n1;i++) 16 { 17 left_t[i]=a[p+i-1]; 18 } 19 for(int i=1;i<=n2;i++) 20 { 21 right_t[i]=a[q+i]; 22 } 23 left_t[n1+1]=0x7fffffff; 24 right_t[n2+1]=0x7fffffff; 25 26 int i=1; 27 int j=1; 28 for(int k=p;k<=r;k++) 29 { 30 if(left_t[i]<=right_t[j]) 31 { 32 a[k]=left_t[i]; 33 i=i+1; 34 } 35 else 36 { 37 a[k]=right_t[j]; 38 j=j+1; 39 count+=n1-i+1; 40 } 41 } 42 } 43 44 void merge_sort(int a[],int p,int r) 45 { 46 if(p<r) 47 { 48 int q=(p+r)/2; 49 merge_sort(a,p,q); 50 merge_sort(a,q+1,r); 51 merge(a,p,q,r); 52 } 53 } 54 55 int main() 56 { 57 int n; 58 scanf("%d",&n); 59 while(n!=0) 60 { 61 for(int i=0;i<n;i++) 62 { 63 scanf("%d",&num[i]); 64 } 65 merge_sort(num,0,n-1); 66 printf("%lld\n",count); 67 count=0; 68 scanf("%d",&n); 69 } 70 } 的
|