我的故事,你的故事: 這是一本我希望我在大學(xué)就能看到的一本書(shū),。在我讀大學(xué)的時(shí)候,,跟很多同學(xué)一樣也走過(guò)不少?gòu)澛罚浩D難地啃著計(jì)算機(jī)必修課,被里面的指針對(duì)象搞的暈頭轉(zhuǎn)向,,對(duì)i++, ++i區(qū)別死活不理解,,對(duì)操作系統(tǒng)的調(diào)度策略而抓狂,很難對(duì)專業(yè)書(shū)產(chǎn)生興趣,,只是想著去應(yīng)付考試和學(xué)分,。當(dāng)我們畢業(yè)后,哪怕有了計(jì)算機(jī)學(xué)位和實(shí)際工作經(jīng)歷,,但其實(shí)還是不知道最想得到什么,。我當(dāng)時(shí)心中有個(gè)情節(jié),就是希望能去最好的公司,,比如Google,,因?yàn)槟沁吢?tīng)說(shuō)都是最聰明的人,有著最好的待遇和福利做著最有影響力的事情,,當(dāng)我鼓起勇氣去嘗試的時(shí)候,,我發(fā)現(xiàn)我失敗了,并且要進(jìn)入6個(gè)月的冷藏期(失去在一段時(shí)期內(nèi)繼續(xù)面試的機(jī)會(huì)),,而我發(fā)現(xiàn)當(dāng)時(shí)的面試表現(xiàn)是那么的稚嫩和糟糕,,我開(kāi)始懊惱,開(kāi)始反省,,開(kāi)始重新準(zhǔn)備,,這樣才有了我下一個(gè)面試機(jī)會(huì)和其他的Offer,當(dāng)然如果一切可以重新再來(lái),,我可以更有自信更好地發(fā)揮我的能力,,也許當(dāng)時(shí)的理想公司就會(huì)給我Offer。 有些朋友會(huì)認(rèn)為只要能混過(guò)面試,,拿到工作之后有的是時(shí)間可以繼續(xù)學(xué)習(xí),。這話聽(tīng)起來(lái)有道理,但我給個(gè)教訓(xùn):我記得多年前第一份實(shí)習(xí)的任務(wù)是對(duì)某個(gè)大型應(yīng)用程序進(jìn)行性能測(cè)試 ,。我不知道如何創(chuàng)建一個(gè)用戶界面,,然后隨意定義文本字段,,菜單和按鈕。我不知道如何用線程來(lái)思考,,我錯(cuò)誤調(diào)用整個(gè)緩存和線程池,。我也不知道如何去做代碼維護(hù),并沒(méi)有單元測(cè)試,,和編寫基本的文檔,,最后我還是寫了幾千行的Java代碼,這是個(gè)無(wú)法維護(hù)的巨大的類,。而這些如果我在工作之前多一些積累和看一些代碼,,或許不會(huì)那么尷尬。 也有些同學(xué)說(shuō)面試中只會(huì)考沒(méi)有用的算法,,這跟工作沒(méi)有任何直接關(guān)系,。我同意工作中大多數(shù)情況是不會(huì)用到復(fù)雜的算法,但如果你沒(méi)有過(guò)硬的基本功,,在面對(duì)一些新情況,,你就很難舉一反三,靈活運(yùn)用了,。我記得我在第一家公司第一個(gè)項(xiàng)目是在一個(gè)新城市中增加新的排序選項(xiàng)來(lái)選擇上市的所有租房,。這是一個(gè)緊急任務(wù),上司希望我盡快熟悉代碼庫(kù),,我當(dāng)時(shí)也頂著壓力,,做到了一周上線。不久后,,我就在我們總裁面前演示:我看著他點(diǎn)擊了某個(gè)區(qū)的房源,,選擇了新的排序選項(xiàng),結(jié)果花了幾分鐘去加載頁(yè)面,。我之前也驗(yàn)證過(guò)應(yīng)該沒(méi)問(wèn)題,,平常應(yīng)該是幾秒才對(duì),我當(dāng)時(shí)滿頭大汗,,真是搞砸了,。那天晚上,我思考了很久也想通了,。我看中的新代碼做兩個(gè)數(shù)據(jù)庫(kù)調(diào)用需要遍歷其中的每一個(gè),,它需要的N * log N比較的次數(shù),而對(duì)于那個(gè)區(qū)域,,其中有大約N =1000個(gè)房源,,那么大約要2萬(wàn)次數(shù)據(jù)庫(kù)調(diào)用才能完成一個(gè)頁(yè)面加載。當(dāng)然知道了原因怎么優(yōu)化就簡(jiǎn)單了,,通過(guò)調(diào)用緩沖,,把數(shù)據(jù)切成更小塊,,做數(shù)據(jù)量的控制,最后性能提高了100倍,,所以說(shuō)系統(tǒng)優(yōu)化是離不開(kāi)算法和扎實(shí)計(jì)算機(jī)基本功的。 其實(shí)每個(gè)工程師都討厭BUG,,代碼不整潔,,性能太差,用戶界面不人性,,這些都是一些技術(shù)細(xì)節(jié),,是可以慢慢體會(huì)和提高,總會(huì)能找到答案去改進(jìn)的,。但在工作中,,我應(yīng)該學(xué)習(xí)和使用什么樣的技術(shù)?為什么要自動(dòng)化測(cè)試,?如何搭建一個(gè)產(chǎn)品,,看起來(lái)比較靠譜?我怎么去選擇一份工作,?如果我在一家大公司工作,,如何跳槽到創(chuàng)業(yè)公司?我如何談判取得更多的薪金或獎(jiǎng)金,?什么是股票激勵(lì),?這些問(wèn)題倒是更棘手,我也會(huì)在第0章給出一些介紹和輔助工具補(bǔ)充,。 回看我走過(guò)的一路艱辛,,我嘗試反思學(xué)到了什么,我發(fā)現(xiàn)其中大部分經(jīng)驗(yàn)都是來(lái)自于痛苦的反復(fù)試驗(yàn)的結(jié)果,。當(dāng)我意識(shí)到成千上萬(wàn)的面試者或者IT開(kāi)發(fā)人員正在經(jīng)歷同樣的試錯(cuò),,犯同樣的錯(cuò)誤, 我覺(jué)得應(yīng)該做一些更有意義的事情:這本書(shū)就是一個(gè)工具,。誠(chéng)然有些教訓(xùn)只能從在自己的錯(cuò)誤中學(xué)習(xí),,但我希望為你能夠從別人的經(jīng)驗(yàn)中獲得通向成功的捷徑。 現(xiàn)狀: 俗話說(shuō)凡事要“順勢(shì)而為”,,找工作亦是如此?,F(xiàn)如今,借助手機(jī)網(wǎng)絡(luò)帶寬的快速提升以及移動(dòng)互聯(lián)網(wǎng)的概念,,原先在PC平臺(tái)才能開(kāi)展的服務(wù)一下被冠上了“移動(dòng)”二字,。在手機(jī)上使用服務(wù)和電腦上使用服務(wù)本質(zhì)上并沒(méi)有太大區(qū)別,,但關(guān)鍵在于手機(jī)更具有“私密性”和“便攜性”,,大大增加了客戶粘性和使用時(shí)間,進(jìn)而會(huì)對(duì)服務(wù)提供商產(chǎn)生更大的依賴性,。在中國(guó),互聯(lián)網(wǎng)公司中百度,,騰訊,,阿里巴巴三駕馬車分別把持搜索,社交游戲和電商平臺(tái)三大主戰(zhàn)場(chǎng),,互相競(jìng)爭(zhēng),。而硅谷更是百花齊放:Apple,Google,, Microsoft致力于打造自己的生態(tài)圈,,完成硬件,軟件,,服務(wù)的閉環(huán),;而Facebook,Twitter,,LinkedIn等為代表的社交平臺(tái)也迅速通過(guò)巨大的用戶群體完成“圈地運(yùn)動(dòng)”,,將管轄區(qū)域內(nèi)的用戶導(dǎo)向各個(gè)實(shí)體商戶;更有Uber,,Airbnb等新興公司,,致力于通過(guò)移動(dòng)互聯(lián)網(wǎng)思維改變?nèi)藗兊膶?shí)際生活。相比于2000年左右的互聯(lián)網(wǎng)泡沫,,這次的計(jì)算機(jī)高潮來(lái)勢(shì)更為兇猛:不單單提供資訊,,門戶,電郵等虛擬線上服務(wù),,而是直接破壞性地侵入傳統(tǒng)行業(yè),,以更高的效率改變?cè)行袠I(yè)。這就是為什么許多新興科技企業(yè)號(hào)稱是技術(shù)公司,,但實(shí)際上提供著傳統(tǒng)行業(yè)的服務(wù),。當(dāng)前的趨勢(shì)也會(huì)逼迫著傳統(tǒng)公司作出改變,引入更多計(jì)算機(jī)人才,,利用云計(jì)算,,機(jī)器學(xué)習(xí)等新手段與新興公司競(jìng)爭(zhēng)。最簡(jiǎn)單的例子比如Wal-Mart Labs,,以一個(gè)科技智囊的角色隸屬于Wal-Mart,,通過(guò)計(jì)算機(jī)技術(shù)分析,優(yōu)化Wal-Mart的營(yíng)運(yùn)效率,。更有金融,,銀行,地產(chǎn),,石油,,制造,,電子硬件等各個(gè)行業(yè)引入計(jì)算機(jī)技術(shù),大大創(chuàng)造了從業(yè)人員的工作機(jī)會(huì),。 這樣的趨勢(shì)對(duì)你我有什么影響,?人才需求的極速擴(kuò)張意味著找工作難度降低,并且待遇也是水漲船高,。舉例來(lái)說(shuō),,在美國(guó),碩士畢業(yè)加入Apple,,Google,Facebook等等公司起薪至少十多萬(wàn)美金,,每年有年終獎(jiǎng)金和數(shù)萬(wàn)美金的股票,。更不要說(shuō)加入最火的創(chuàng)業(yè)公司,三四年后一旦上市就可以提前退休,,或者把工作作為興趣,。在國(guó)內(nèi),阿里巴巴上市也造就了成百上千個(gè)千萬(wàn)富翁,,即使是上市前一兩年剛加入的新人,,也拿到了一百萬(wàn)人民幣左右的股權(quán)。 如果說(shuō)這些職位難度太高,,對(duì)于你遙不可及,,或者需要很長(zhǎng)的準(zhǔn)備時(shí)間,那也許對(duì)于上面的文字你只會(huì)一笑而過(guò),。但是,,如果告訴你通過(guò)正確的方式準(zhǔn)備,上面所說(shuō)的職位觸手可及,,是不是聽(tīng)起來(lái)更有吸引力了呢,?事實(shí)就是,由于軟件工程師的職業(yè)特性,,面試要求及局限性,,以及市場(chǎng)需求等因素,程序員求職是一種比較具有應(yīng)試性,,相對(duì)容易找到門道的簡(jiǎn)單職業(yè)道路,。網(wǎng)上不乏相關(guān)或不那么相關(guān)專業(yè)的畢業(yè)生通過(guò)半年到一年的努力拿到理想的計(jì)算機(jī)相關(guān)工作,由此可見(jiàn),,挑戰(zhàn)不在于“能”和“不能”,,而是如何通過(guò)正確的方法,迅速地進(jìn)入潮流分一杯羹,。 目的: 本書(shū)存在的目的并不在于代替課本教材,,系統(tǒng)性地講授計(jì)算機(jī)技術(shù),,而是作為一本工具書(shū),創(chuàng)建一個(gè)實(shí)際的,、可操作的面試方法論教程,,提供一條快速熟悉技術(shù)面試題目的捷徑,并且針對(duì)不同類型的題目,,歸納總結(jié)解題方法,。 程序員面試是對(duì)于面試者計(jì)算機(jī)知識(shí)的全面檢測(cè),因此,,關(guān)于計(jì)算機(jī)諸如網(wǎng)絡(luò),,操作系統(tǒng),編譯器,,算法,,數(shù)據(jù)結(jié)構(gòu)等等各個(gè)領(lǐng)域的系統(tǒng)性學(xué)習(xí)不可或缺。但是考慮到面試的局限性,,諸如時(shí)間限制,,面試官對(duì)于面試者的熟悉程度等等,在白板(或者白紙)上寫程序解決一些算法問(wèn)題成為面試官較為青睞的方法之一,。由于該面試方法比較機(jī)械,,相對(duì)容易準(zhǔn)備,也最適合總結(jié)一些方法論,,所以本書(shū)的目的就在于傳授白板寫代碼的準(zhǔn)備技巧,,幫助大家通過(guò)面試。我們將會(huì)遇到的題目,、技術(shù)都是來(lái)自于我們實(shí)際面試過(guò)的一些炙手可熱的硅谷公司和我們自己作為面試官的一些心得及寶貴經(jīng)驗(yàn),。正如參加GRE考試一樣,關(guān)于考試技巧的書(shū)籍并不能讓一個(gè)完全不懂英語(yǔ)的人通過(guò)考試,,但是可以使得英語(yǔ)基礎(chǔ)合格的人如虎添翼,,大大增加通過(guò)考試的幾率。這就是本書(shū)的全部存在意義,。 特色: 其實(shí)市面關(guān)于程序員面試的參考書(shū)也不少,,但是我們認(rèn)為這些書(shū)的關(guān)鍵問(wèn)題在于它們大多是教你“怎么做”,但很少涉及“為什么這么做”,。于是乎,,讀者往往會(huì)覺(jué)得書(shū)中的解法十分精妙,但是在面試的時(shí)候完全想不起來(lái)用哪種方法解決問(wèn)題,。其本質(zhì)原因在于,,這些參考書(shū)代替你做了最關(guān)鍵的一步:判斷用什么方法解決當(dāng)前的問(wèn)題。本書(shū)遵從大多數(shù)面試參考書(shū)的構(gòu)成方式,結(jié)合實(shí)例按照常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),,算法以及計(jì)算機(jī)基礎(chǔ)知識(shí)進(jìn)行章節(jié)劃分,,但是,本書(shū)著眼于如何進(jìn)行“模式識(shí)別”,,通過(guò)分析為什么這個(gè)問(wèn)題被劃分到這個(gè)章節(jié),,來(lái)教大家如何判斷實(shí)際面試問(wèn)題的類型,并且順?biāo)浦鄣氐贸鼋鉀Q問(wèn)題的方法,。對(duì)于每個(gè)章節(jié),,“The Rules”介紹章節(jié)涉及的相關(guān)知識(shí)點(diǎn),回顧通常出現(xiàn)在教材中的重點(diǎn)內(nèi)容,;“模式識(shí)別”給出一些實(shí)例,,幫助大家總結(jié)解決相關(guān)問(wèn)題的常見(jiàn)方法,并且通過(guò)分析問(wèn)題中的關(guān)鍵信息,,教授大家如何從題目中得到關(guān)于題型分類以及解題方法的蜘絲馬跡,;最后,“工具箱”給出該章節(jié)涉及的C++/JAVA類,,它們的常見(jiàn)函數(shù)及使用方法,,還提供一些標(biāo)準(zhǔn)庫(kù)函數(shù),,以及相關(guān)參考資料或擴(kuò)展閱讀,。 如果你有志于投身到滾滾的IT互聯(lián)網(wǎng)浪潮,無(wú)論你是一個(gè)學(xué)生,,還是初級(jí)程序員,,不論你以后是定位于架構(gòu)師還是項(xiàng)目經(jīng)理,你都需要一塊敲門磚,,那么這邊書(shū)就是給你的,。我們做為有著在國(guó)內(nèi)外創(chuàng)業(yè)公司和一線公司經(jīng)歷的過(guò)來(lái)人,希望在這里給你職業(yè)生涯上添磚加瓦,,幫助大家到達(dá)理想的彼岸,。 |
|
來(lái)自: 隱身俠 > 《公司業(yè)務(wù)》