各位小伙伴,大家好。我是Google 的資深工程師 & 面試官,今天想跟大家聊一聊應(yīng)聘技術(shù)崗的一些事,包括一點經(jīng)驗技巧,以及我整理出的必問必考的算法問題。根據(jù)經(jīng)驗,我精選了100道算法題目,希望大家能吃透、理解。我的想法是題目要刷,但不在多而在精,融匯貫通最好。
我想學(xué)習(xí)本課程的大多數(shù)小伙伴,都是有計劃進(jìn)軍大廠,想在某大廠發(fā)光發(fā)熱的熱血少年。而我在加入 Google 之前,也曾僅僅是某外包公司的合同工,有幸的是后來就職于某著名電商平臺。從外包公司到Google, 除了技術(shù)上要跟緊時代, 算法基礎(chǔ)是不能落下的。所以,今天重點來給大家講講怎么刷算法題,希望可以通過這個專欄,將我的心得與大家分享一二。
現(xiàn)在,先要與各位小伙伴一起厘清思路,從宏觀層面總覽本課程的目標(biāo)、計劃、重難點等。希望通過對本專欄的學(xué)習(xí),能為大家的面帶來幫助。
目標(biāo)篇
1)學(xué)會怎么刷? 2)吃透精選題 3)面試技巧
幾乎每個剛剛開始刷題的人都要問上一遍,我到底要刷多少題呢?答案是顯而易見的:題目在于質(zhì)量,而不在數(shù)量。刷題的目的在于提升分析、建模、解決問題的能力,而不是盼望著面試時能夠遇上原題。為了提升自己的能力,我們更需要科學(xué)地訓(xùn)練與反思,而不是盲目地追求題目的數(shù)量。
如果非要給出一個數(shù)字,那我認(rèn)為100題左右也就夠了。在專欄中,我將與大家分享我的刷題經(jīng)驗與思考,伴隨著課程講解,還會穿插一些面試中溝通和問答的技巧分享。這套方法曾經(jīng)幫助數(shù)十位同學(xué)進(jìn)入Google / Facebook / Microsoft / Oracle / Amazon / 字節(jié)跳動等一線科技公司,希望也能幫到你。
準(zhǔn)備篇
讀者需要至少掌握一門面向?qū)ο缶幊陶Z言,并了解該語言內(nèi)置的數(shù)據(jù)結(jié)構(gòu)。我會以java作為基礎(chǔ)教學(xué)語言,分析題目的思路。希望各位在學(xué)習(xí)的過程中能夠有所收獲,找到理想的工作。
學(xué)習(xí)篇
專欄重點
本專欄側(cè)重兩大板塊,一是“硬實力培養(yǎng)”,即跟著我一起學(xué)習(xí)和研究,我挑選出的最有價值的100道算法題,根據(jù)難度由淺入深地拆分成不同子專題,并分類講解:鏈表,二叉樹,圖,堆,棧,遞歸,動態(tài)規(guī)劃,搜索,排序,數(shù)組,字符串……
二是“軟實力養(yǎng)成”,我會盡我所能,教你在面試過程中應(yīng)當(dāng)如何隨機應(yīng)變,又應(yīng)當(dāng)如何與面試官保持良好的氣氛進(jìn)行有效溝通。正確而有效的溝通很重要,你的面試場景如果是面試官出一道題,然后你就埋頭寫題,低著頭沉默著渡過一個小時,那么基本上離拒信也就不遠(yuǎn)了,即使是技術(shù)面試,核心依然在溝通上。舉個“栗子”,關(guān)于算法的復(fù)雜度問題,就需要具體問題具體分析。有的面試官會要求給出最優(yōu)解法,有的面試官會要求先給出可行解再盡可能優(yōu)化。各種情況皆有可能,所以一定要預(yù)先溝通清楚,明確面試官的要求。
綜上,在本專欄中,我們將基于各種算法真題,一起探討以下這些問題:
如何用幾個例子確保自己理解正確的輸入輸出;
面試時,要不要寫test測試corner case;
如果遇上了原題,要不要和面試官交代;
題目有哪些暗含的假設(shè)、數(shù)據(jù)量是否大的超出內(nèi)存;
寫代碼前后怎么向面試官解釋自己的思路;
……
建議篇
希望大家根據(jù)課程安排,能真的有所收獲,而不會再有同學(xué)抱怨“我明明是前后端全棧開發(fā),安卓/iOS樣樣上手,為什么因為我沒有刷過算法題就掛掉面試?”。另外,也希望大家能理解和體會到,事實上,在Google、Amazon、騰訊、阿里這樣的大廠里,大多數(shù)崗位是不需要工程師承擔(dān)一個完整的項目開發(fā)的,更多的是在已有的系統(tǒng)上開發(fā)新的feature。隨著公司的業(yè)務(wù)規(guī)模成長,我們就會發(fā)現(xiàn),越是發(fā)展業(yè)務(wù)場景就細(xì)化、feature越碎片化、工程師越螺絲釘化。大公司需要的工程師是能夠?qū)懗鼍_、高效的功能代碼,而不是所謂“精通前后端”。這樣看來,給出一個明確的小任務(wù),使用一段不超過兩百行的函數(shù)來解決問題、并進(jìn)行優(yōu)化,其實才是面試開發(fā)崗最正常的流程。
心態(tài)調(diào)整篇
有的時候你可能自信滿滿,而面試結(jié)果卻和心理預(yù)期背道而馳。這樣的事情幾乎每天都會發(fā)生。以大多數(shù)人的水平而言,過面試其實全靠面試官給面子。所以最重要的是,千萬別給面試官掛你的機會,尤其不要在面試過程中與面試官對著干,比如質(zhì)疑或者否認(rèn)面試官的邏輯。一個好的辦法是多和同學(xué)、同事交流,大家相互mock面試場景。這樣既可鍛煉自己的臨場水平,也能借助旁觀者發(fā)現(xiàn)自己的不足。
調(diào)整好心態(tài),應(yīng)對每一次挑戰(zhàn)吧!
由衷的希望,本課程真的能為屏幕前的你帶來價值,在你向上先前的路上助你一臂之力?,F(xiàn)在,就讓我們共同走進(jìn)這100道精選算法題,開啟你的成功路吧!