學習建議https://m.toutiao.com/is/JbbJWSG/ 對于技術(shù)崗,,軟件基礎知識可以說是個人的硬實力,是你能通過面試的一個大前提,。而說到軟件基礎的學習,,對于很多還沒有基礎的同學可能會有點懵逼,軟件基礎知識這么雜,,技術(shù)書籍這么多,,該從何看起呢? 先不用慌,,當初的我也和你們有一樣的困惑,,之后一步步挖坑填坑,,才構(gòu)建了比較完整的知識體系。自己回頭想想,,如果當初還是小白的時候,,就能確定一個比較合理的學習路線,對知識由淺入深的進行學習,,學習的過程肯定會順利一些,,效率自然也會更高。因此,,我會根據(jù)自己的學習經(jīng)歷,,結(jié)合軟件基礎的幾大板塊知識,制定一個合適的學習路線,,希望能讓正在學習的同學們少走一些冤枉路,! 首先,對于軟件基礎知識的學習,,建議盡可能地去看一些經(jīng)典的書籍,,看第一遍的時候可以不用太過細致,快速地看,,重在了解這本書的知識框架,,在把握了整體的邏輯框架之后,第二遍就可以詳細學習各章節(jié)的細節(jié),,這個時候也能根據(jù)自己的情況,,選擇性地去看一些相對重要的章節(jié),效率會更高,。對于一些經(jīng)典的技術(shù)書籍,,只看一兩遍很難完全理解其中的精髓,之后可能還要多次地回顧,,也可能在實際應用中再來回顧書中的理論知識,,也能更深入地進行理解。例如深入理解計算機系統(tǒng)這本書,,內(nèi)容非常經(jīng)典,,很多地方當你再看一遍又會有不一樣的理解和體會。 每看完每本書,,都要學會去做筆記,,對自己所學的知識進行總結(jié)消化,筆記中的內(nèi)容才是自己的東西,,而且在我們學習的過程中難免會對一些知識點的理解有所偏差和不足,,筆記能夠很好地幫助我們發(fā)現(xiàn)這些問題,然后加以糾正并很好地記錄下來,。 軟件基礎主要分為這幾大板塊:C++基礎,、數(shù)據(jù)結(jié)構(gòu)與算法,、操作系統(tǒng)、計算機網(wǎng)絡,、數(shù)據(jù)庫,、設計模式。 C++基礎:
軟件學習中,,語言肯定是最基礎的,,由于C++較低層,語法非常靈活(比較適合寫算法),,就導致語法規(guī)則比較繁雜,,而且涵蓋了C語言的內(nèi)容,學習C++語法相對python,、java等其他高級語言時間成本更高一些,。 學習C++語法,首推C++ Primer 第5版,,C++語法學習的最權(quán)威書籍,,以C++11來講解,,非常全面地講解了C++的語法以及C++11的各種新特性,,看完幫助很大,如果有時間建議至少看兩遍,,時間有限的話,,建議至少通讀一遍,把握這本書的大體框架,,然后結(jié)合個人情況選擇性地去看一些重點章節(jié),。 STL 源碼剖析這本書講解了C++底層實現(xiàn),內(nèi)容包括C++底層內(nèi)存管理,、各種容器的數(shù)據(jù)結(jié)構(gòu)實現(xiàn),、常見算法的實現(xiàn)等,建議列為必讀,,可以幫助深入理解C++底層,,同時也是對數(shù)據(jù)結(jié)構(gòu)的復習和鞏固。其中也有很多面試??嫉闹R點,,如內(nèi)存池的機制、traits技法,、一些常用容器的底層數(shù)據(jù)結(jié)構(gòu)等,。 深度探索C++對象模型這本書講解了C++面向?qū)ο筇匦缘牡讓訉崿F(xiàn)機制,由于是翻譯版本,,讀起來內(nèi)容會相對晦澀一些,,但是內(nèi)容非常重要,,尤其是虛函數(shù)底層的實現(xiàn)機制,建議多看幾遍加深理解,,這個基本是C++必問的知識點,。看完這本書,,對C++面向?qū)ο蟮睦斫鈳椭鷺O大,,建議必讀。 Effective C++這本書主要講解了編寫C++程序的過程中需要注意的一些條款,,有助于梳理在編寫C++程序時的一些常見錯誤和注意事項,,也是面試常考的,。如果認真讀過了C++ Primer,,這本書看起來會非常快,,其中的很多內(nèi)容都包含在C++ Primer中了,。 總之,C++由于它自身的特點,,學習起來不會很輕松,,需要一定的時間成本,但是如果你認真的學習了以上4本書,,你會對C++有一個新的認識,!相信我,等你學好C++,,再學習其他高級語言會覺得輕松許多,! 數(shù)據(jù)結(jié)構(gòu)與算法:數(shù)據(jù)結(jié)構(gòu)
算法
刷題
數(shù)據(jù)結(jié)構(gòu)可以說是軟件設計的精髓,建議將基礎打扎實,。大話數(shù)據(jù)結(jié)構(gòu)這本書對于新手,,很適合作為入門,用于建立數(shù)據(jù)結(jié)構(gòu)的知識體系,,另外浙大數(shù)據(jù)結(jié)構(gòu)網(wǎng)上課程也非常不錯,,B站上直接可以搜到,講解簡明易懂,,彌補了大話數(shù)據(jù)結(jié)構(gòu)中一些講解不清楚的地方,。在學習了數(shù)據(jù)結(jié)構(gòu)的基礎后,可以開始學習算法,,建議學習算法這本書,,可以幫助你梳理一些常用算法的原理和應用。 在學習數(shù)據(jù)結(jié)構(gòu)與算法的同時,,建議同步學習C++語法知識,,兩者基礎都學習完之后,,就可以刷題了,而在刷題的過程中,,可以同步學習STL 源碼剖析,,有助于你更游刃有余的去使用STL,提高代碼效率,。刷題的話,,建議先刷LeetCode,英語不好的可以到LeetCode中文網(wǎng)站,,LeetCode中有一個數(shù)據(jù)結(jié)構(gòu)的探索專欄,,根據(jù)難度,分為初級,、中級和高級,,基本覆蓋了各個知識板塊的面試高頻題,可以幫助新手循序漸進地刷題,,培養(yǎng)寫代碼的感覺,。 另外的話,劍指offer這本書中也涵蓋了很多面試高頻題,,可以到??途W(wǎng)的劍指offer專欄中刷題,由于題目難度劃分層次不太明確,,新手刷起來效率會偏低,,建議在刷完LeetCode探索專欄中的初級,、中級之后,,再去刷劍指offer的題目,其中的題目在面試中出現(xiàn)的非常高頻,,建議最好刷兩遍,,熟練掌握每道題的思路和優(yōu)化方法。最后,,作為進階,,可以看左神寫的程序員代碼面試指南,非常好的一本書,,其中講解的編程題都非常經(jīng)典,,不僅僅限于國內(nèi)的IT公司,而是面向全球,,包含了國外知名IT公司的一些面試高頻題,,可以幫助開闊視野。 在刷題的過程中,,要非常注意方法,,一般將刷題方法分為龜系和兔系,。 龜系刷法的精髓就是每個題目要注意質(zhì)量,不要滿足于一種解法,,各種解法都嘗試寫一寫,,并對比它們的時間空間復雜度。但龜系不是說在一道題上耗死,。越是龜系越要注意時間上要掌握好分寸,,能解出來最好,解不出來也不要倔強,。我覺得比較好的一個平衡點差不多是一個小時,。如果一個小時還是解決不了,可以看看提示,,如果還是解決不了,,可以看看討論區(qū)的答案或者網(wǎng)上搜索答案。 兔系刷法精髓就是要暴力,,天馬流星拳,,大力出奇跡。作為兔系選手,,講求的就是要瘋,,一上來就看答案,照著答案寫,。這個做法看起來不靠譜,,其實它有內(nèi)在的合理性:大部分算法都不是我們發(fā)明的,如動態(tài)規(guī)劃,,二叉樹,,線段樹,并查集,,貪心算法等等,,到后來所謂的不看答案自己做出來,其實都是在用固定套路,。另外編程題的知識點很多很雜,,LeetCode中將題目分為各種標簽,建議對標簽按照廣度優(yōu)先的順序去刷題,,刷題盡量覆蓋每個標簽,。我個人更傾向于龜系,這種方法能夠更好地理解每道題的方法套路,,也能訓練自己的思維,,畢竟刷題不是題海戰(zhàn)術(shù),刷題質(zhì)量更重要,每刷完一道題,,最好將其中的思路方法記錄下來,,然后定期做總結(jié),對一些常用方法進行總結(jié)分類,,慢慢的會發(fā)現(xiàn)刷來刷去就是那些套路,,你會對它們了然如胸。 操作系統(tǒng):操作通用知識
Linux
內(nèi)核
在語言基礎和數(shù)據(jù)結(jié)構(gòu)之外,,操作系統(tǒng)可以說是面試考查最多的內(nèi)容了,,在面試中很可能會問的比較深,畢竟操作系統(tǒng)是很深奧的,! 學習操作系統(tǒng)知識,,可以先看深入理解計算機系統(tǒng),操作系統(tǒng)方面的神書,,內(nèi)容非常經(jīng)典,,而且比較通俗易懂,適合入門,,軟件的話建議先學習第二部分和第三部分,,再根據(jù)個人情況學習第一部分。然后再學習操作系統(tǒng) 精髓與設計原理,,這本書比現(xiàn)代操作系統(tǒng)更通俗易懂,,可以結(jié)合CSAPP一起看,兩本書的知識點相互有所彌補,??赐昵懊鎯杀緯绻雽?strong>編譯鏈接的原理進行深入學習,,可以參考程序員的自我修養(yǎng),,這本書非常詳細的講解了程序編譯過程中的具體細節(jié)。 另外,,針對Linux進行學習,,可以先看鳥哥的Linux私房菜,快速看,,主要是了解Linux基本命令。進一步學習系統(tǒng)編程,,可以學習APUE,,其中講解了Linux/UNIX常用系統(tǒng)編程接口的使用方法和對應的應用實例,由于這本書有些理論知識講解地比較簡略,,而Linux/UNIX系統(tǒng)編程手冊講解更為詳細,,建議兩本書結(jié)合著看。 在學習完前面所說的操作系統(tǒng)書籍之后,如果還想對Linux內(nèi)核原理進行學習,,可以看Linux內(nèi)核設計與實現(xiàn)和深入理解Linux內(nèi)核,,由于后者更加偏重理論細節(jié)的講解,看起來比較晦澀難懂,,容易陷入細節(jié),。而 LKD這本書以實踐為主,沒有贅述很多細節(jié),,主要是結(jié)合各個模塊,,以宏觀的視角來講解,能幫助你快速建立比較完整的的知識框架,。建議先學習后者,,再學習前者,這樣可以更好地去理解各個知識板塊的邏輯關(guān)系和細節(jié)實現(xiàn),。 如果有同學對操作系統(tǒng)底層知識感興趣,,可以看我一個朋友的博客 底層知識學習記錄,總結(jié)的非常不錯,,看完會非常有幫助,! 計算機網(wǎng)絡:
學習網(wǎng)絡,可以先看計算機網(wǎng)絡這本書,,講解通俗易懂,,前面的物理層和鏈路層可以快速看,了解基本原理即可,,重點學習網(wǎng)絡層,、傳輸層和應用層,其中傳輸層的TCP和UDP是面試最??嫉?,非常重要。網(wǎng)絡的知識比較容易理解,,但是知識點比較繁雜,,一段時間不看就很容易忘記,建議學習之后將各個知識點整理成文檔或者筆記,,有助于找工作前復習,。 學完計算機網(wǎng)絡,可以基本建立計算機網(wǎng)絡的知識體系,,但是這本書深度不夠,,建議繼續(xù)學習TCP/IP詳解 卷1,作為對TCP/IP協(xié)議的深入,,這本書講解非常細致,,看的過程中很容易陷入細節(jié),對整本書系統(tǒng)學習的話比較花時間,如果時間有限的話,,可以先選擇性地學習一些章節(jié),,建議先將傳輸層的內(nèi)容看完,有助于對TCP和UDP的深入理解,,其他層的內(nèi)容可以根據(jù)個人情況選擇性的學習,。 學習完前面兩本書的基礎知識,就基本掌握了計算機網(wǎng)絡的理論知識,,建議將這兩本書列為必讀,。另外,如果想要對網(wǎng)絡編程進行實踐,,可以繼續(xù)學習UNIX網(wǎng)絡編程 卷1,。 數(shù)據(jù)庫:
數(shù)據(jù)庫的知識面試問的不多,但是數(shù)據(jù)庫對于以后工作是肯定會用到的,,如果有時間建議將基礎打好,,可以先看數(shù)據(jù)庫系統(tǒng)概念,了解數(shù)據(jù)庫的基礎知識,,然后閱讀mysql必知必會這本書,,可以幫助你快速學習 mysql 的基本語法。 設計模式:大話設計模式 對于設計模式,,如果沒有大型軟件的項目經(jīng)驗,,這方面的能力很難體現(xiàn)出來,所以可以作為知識點的擴展學習,,對其進行了解即可,,面試常考的有單例模式,、工廠模式等常見的設計模式,。 以上知識的學習路線和相關(guān)書籍,是我結(jié)合自己的學習經(jīng)歷總結(jié)的,,不一定適合所有同學,,但我相信大的方向還是具備通用性的,在學習過程中可以作為參考,,也可以根據(jù)自己情況靈活調(diào)整自己的學習路線,,找到自己認為最有效率的學習計劃。 面試技巧 在具備了技術(shù)上硬實力的基礎上,,面試技巧也是非常重要的,,它決定了你能否充分展現(xiàn)自己的實力。 從以下幾點,,來談談我對面試的看法: 個人簡歷: 簡歷一般包括個人信息、項目經(jīng)歷、專業(yè)技能,、個人榮譽這四個方面,,其中項目和技能是最為核心的。對于項目,,描述邏輯一般是:簡介項目的需求和目的 -> 自己主要負責的內(nèi)容 -> 分為幾點詳細描述自己的工作 -> 最終的進展和相關(guān)成果,,對于自己所做的工作要非常清楚,同時要善于挖掘自己項目中的技術(shù)點,,對每個技術(shù)點要爛熟于心,,多問自己為什么,為什么用這個技術(shù),,這個技術(shù)的優(yōu)點和缺點是什么,,為什么適合現(xiàn)在的項目,使用之后取得的效果等等,。,。。 然后有條理地將它們寫在自己的工作中,。對于專業(yè)技能,,首先要真正了解自己的掌握情況,對自己的掌握程度要描述準確,,一般用詞是了解->熟悉->精通,。如果只是學習了基本理論知識,沒有很深入,,建議用了解,;如果理論知識學習比較深入,并且有相關(guān)的實踐經(jīng)歷,,建議用熟悉,;而如果在某個技能上可以說是大牛甚至專家級別,才建議用精通,。因此,,一般大部分時候建議用了解和熟悉來描述專業(yè)技能,精通盡量不要用,。 面試前準備: 面試之前,,首先要調(diào)整自己的心態(tài),有一個好的心理素質(zhì),,防止自己在面試中過于緊張而顯得很慌亂,。然后就是自我介紹的準備,一般3-5分鐘時間,,簡單介紹自己的信息,、項目經(jīng)歷和一些獲獎經(jīng)歷等等,,有些自己的亮點,可以在自我介紹的時候突出表現(xiàn),,有可能引起面試官的興趣,。 內(nèi)容可以事先在紙上寫好,在家里或宿舍對著鏡子多練習幾遍,,直到自己能表達地條理清晰,,流暢自然。然后就是面試問題的準備,,這方面首先是自己對相關(guān)知識有了系統(tǒng)的學習,,并做了知識點的總結(jié)或者筆記,然后在網(wǎng)上收集一些面試的高頻題來檢驗自己,。 之后可以在網(wǎng)上找一些面經(jīng),,嘗試著模擬面試去回答面經(jīng)中的問題,面試不多的同學會有這種感覺,,面試官問的這個問題你實際上知道,,但是突然問你,你不一定能回答的很有條理,,很有邏輯性,,這個模擬訓練能夠很好地提升自己這方面的能力,在面對每一個問題,,力求回答條理清晰,,描述流暢,并且分析透徹,,最好能夠橫向縱向地進行一些擴展,。 面試中: 首先,在衣著方面,,面技術(shù)的同學穿的干凈得體即可,,不用特意穿正裝,如果你穿著正裝去面試,,很有可能發(fā)現(xiàn)只有你一個人穿了,。。,。如果是現(xiàn)場面試,,最好自己打印幾張簡歷過去,在面試的過程中,,一定要保持自信的狀態(tài),,面帶微笑,說話禮貌謙遜,,給面試官第一感覺比較好,。 面試的時候,,一般是先進行自我介紹,面試官在這個過程中了解你的基本信息,,然后開始問問題,,如果對你的項目很感興趣,,一般會問項目問的比較多,,對項目中的每個技術(shù)點都可能問的很細很深,有可能會針對項目問一些開放擴展性的問題,,比如這個項目或者技術(shù)點,,你認為還有沒有能夠優(yōu)化的地方,應該怎么優(yōu)化,?因此要將自己的項目爛熟于心,,每個技術(shù)點的細節(jié)都要清楚,而且要能夠發(fā)散的去思考,,對一些技術(shù)點進行展望和擴展,。 在問項目之外,重點就是問基礎知識了,,在回答問題的過程中,,注意一定要控制自己的節(jié)奏,要嘗試引導面試官往你擅長的知識上走,,遇到自己很熟的知識,,也不要太著急,語速也不要太快,,有條理并且全面地問答出來,;如果是不太熟或者不記得的知識,可以先對問題中的一些概念進行解釋,,打打擦邊球,,在這個過程中也能給自己一些思考的時間,如果實在不清楚或者不記得了,,就坦誠地說自己不太熟,,如果勉強自己亂回答,反而效果更差,,給面試官不好的印象,。 另外,互聯(lián)網(wǎng)大廠一般會要求現(xiàn)場寫代碼,,要求將核心處理代碼寫在紙上,,因此在平時刷題的過程中,盡量一個一個字母敲上去,,不要用代碼補全,,當然刷題就顯得非常重要,。在面試的最后,一般面試官會問你還有什么問題想問,?這時候問一些自己感興趣的話題,,例如部門研究方向,用到哪些技術(shù)等等,。 面試后: 每次面試完,,就不要太在意面試結(jié)果怎么樣,下去之后及時將面試問題記錄下來,,特別是自己答得不好的問題,,一定要花時間去研究,解決這些問題,,下次面試再遇到相同的問題就能夠很好地解決,。每經(jīng)過一次面試,都能發(fā)現(xiàn)自己項目或者基礎知識的一些不足,,下去一定要將項目進行適當?shù)匦薷暮脱a全,,基礎方面也能發(fā)現(xiàn)自己比較薄弱的地方,要多看書多研究,,同時也會發(fā)現(xiàn)自己在表達方面的一些不足,,要及時調(diào)整,盡量在下次面試能夠做得更好,。 總之,,找工作就是一場戰(zhàn)役,在這里你會不斷跌倒不斷爬起來,,在這個過程中,,一定要調(diào)整好自己的心態(tài),做好長期堅持的準備,,不要因為一次面試的失敗就否定自己,,變得情緒失落,如果真的受到挫敗,,對情緒影響很大,,可以找朋友家人傾訴,有助于排解自己的不開心,,在下次面試前一定調(diào)整好自己的情緒,,以飽滿的精神狀態(tài)去面對每一次考試。 另外,,前面主要提到技術(shù)面的一些技巧,,這里補充說一下HR面,一般你的技術(shù)面表現(xiàn)和本人性格都OK,,HR面問題就不大,,但是也要重視起來,,畢竟是通往offer的最后一關(guān)。HR面一般是和專業(yè)知識無關(guān)的,,主要看個人性格和崗位匹配度,,會問一些個人信息,如家庭情況,、有沒有女朋友,,想去的工作城市等等。對于常見的HR問題,,可以到網(wǎng)上搜一些常見的回答技巧,,在面試中稍加注意即可,在此基礎上,,最重要的還是保持坦誠謙虛的態(tài)度,做真實的自己,! |
|