1. 程式人生 > >從零開始——網際網路學習路線(上)

從零開始——網際網路學習路線(上)

學習路線分上中下三篇,本文是第一篇。其他兩篇這兩天會陸續釋出。歡迎大家關注訂閱。有建議歡迎評論區留言~。

下面的所有的學習資料博主都已經分類整理好了,資料是博主以及身邊同學學習時使用的資料,公眾號後臺回覆“資料”即可獲取整理好的資料

 

本文主要分為三個部分:

  1. 如何學習java基礎

  2. 如何學習javaEE

  3. 你關心的專案問題

 

  • java基礎學習

建議初學者看視訊學習,不推薦看書。入門視訊選擇非常重要,最好是通俗易懂、深入淺出的教學視訊。如果入門視訊選的不好,不知所云,容易產生厭倦心理:“從入門到放棄”。關於java書籍,前期的學習個人不推薦直接看書:書本較為枯燥、不直觀、容易分心、可能堅持不下來。

 

  • javaEE入門學習

上面的基礎部分的學習主要是為後階段打好基礎。javaEE是java開發學習路上舉足輕重的一員,那麼javaEE該如何學習呢?框架那麼多,該學哪些呢?從哪個框架開始學習呢?從博主以及身邊同學的面試來看,javaEE主要需要掌握以下幾個部分:servlet、jsp、hibernate、mybatis、springMvc、spring,有餘力的同學可以學習spring boot,它是輕量級的spring,網際網路公司使用較多,學完spring之後,學習spring boot就很簡單了。框架學習順序,在整理的資料中有寫。

 

servlet和jsp屬於基礎,高層框架都是建立在servlet和jsp的基礎之上,博主和身邊同學建議學習。雖然現在專案中很少直接使用jsp和servlet,但是框架都是在這基礎之上進行了封裝,學習servlet和jsp可以幫助你更好的理解框架,而不是隻會配置,調API,不知原理。另外,servlet在面試中問的很多,jsp面試問的少,但是後面做專案的時候你得會寫簡單的頁面啊,否則專案都搭不起來,會產生嚴重挫敗感。

 

  • 你關心的專案問題

怎麼找專案呢?

微信後臺回覆“資料”,裡面有很多專案,從裡面或者網上找都可以。另外,博主也幫大家整理了一份資料,微信公眾號後臺回覆“資料”即可獲得。

 

怎麼選專案?

  1. 首先最好是使用SSM框架的專案,SSH用的不太多,不推薦;

  2. 分散式的專案最好是,不是也沒關係,大部分網路上的專案都不是分散式的;

  3. 最好不要找商城,因為商城已經爛大街 了。

  4. 資料庫最好mysql,另外面試時資料庫表設計也會是常問問題,大家學習的時候注意一下。

 

怎麼做專案?

很多同學問做專案怎麼才能避免只是跟著視訊敲了一遍程式碼,好像什麼都沒學到的感覺?

javaEE的挑戰在哪裡呢?在沒有分散式、高併發場景下,專案顯得很“low”(大概率就是寫簡單的頁面,控制器查資料庫準備資料、頁面從域物件裡面取出資料填充、返回給瀏覽器),但初學者應該如何學習呢?

 

要回答這一點,首先明白麵試官問專案問的是什麼?之前頭條面試的時候,面試官提到一點:頭條為什麼這麼喜歡問演算法呢?“應屆生簡歷上的專案與生產環境相差很大,不太實用,所以我們不太問專案,偏向演算法、基礎的考察”。面試官其實很清楚你的疑問,但是他們還是會問專案,面試官考察的到底是什麼呢?考察的是你解決問題的能力。在面試中,專案中有的業務/問題可能你之前沒有想過,但是面試官卻給你假設了某個你之前沒考慮到的場景。你說我之前沒有考慮到這種情況;面試官會說,沒有關係的,以前沒有想過也沒有關係,現場想想怎麼解決。也就是面試官考察的是你解決問題的能力。

 

在大多數面試中,專案部分大多會延升到分散式、高併發場合。因為使用者一多、資料量一多,問題就來了,簡單的業務在高併發,大資料的場景下瞬間就會產生很多問題。比如,新浪微博的分層評論/點贊如何實現、專案中的資料庫如何設計、比如說你的分散式中的某一臺機器損壞了,怎麼解決服務不可用問題;再比如說淘寶每天訂單量很多,資料庫如何設計:分庫分表策略;比如說檔案上傳時上傳期間斷網了,那麼你如何實現下次在上次的基礎之上繼續上傳,而不是全部重新上傳?比如說,360的開機打敗百分之多少使用者,這又怎麼實現(360使用者肯定很多,使用盡量小的代價實現)。上面這些基本都是面試中的問題,說了這麼多,我們在跟著視訊做專案的時候,究竟應該注意什麼?

 

你之所以會有上面“我僅僅是跟著視訊敲完了程式碼”的感覺(首先初學者有這種感覺是很正常的),因為視訊的專案大多不是分散式、沒有海量使用者、不用考慮容災問題。怎麼彌補這一點呢?在跟著視訊做專案的時候,視訊中的老師提出一個問題之後,你想想解決思路,如果把場景延時到幾億的使用者呢?海量的資料呢?這些問題至關重要,並且你需要把這些問題記錄下來。

 

專案相關面試問題中一定會有:“你在做這個專案過程中遇到哪些問題,你是怎麼解決的?”、“專案的亮點在哪裡?(和第一個問題一樣回答)”。面試不像考試,“亮點”不是說非得獨一無二,你可以轉到你遇到了哪些問題,你是怎麼解決的,或者還沒解決的問題可以問問面試官的意見,這樣在下次面試中,上一位面試官的解決方案就是你的了。

 

所以,專案這塊就是這樣通過面試不斷積累的過程,這也是為什麼極力建議在實習招聘的時候投遞簡歷,無論你最終可不可以去實習。因為這就是你“升級打怪”積累的過程,前期多投小公司,積累“升級打怪”的經驗。後期在面對BAT、TMD等一些大boss的時候你才能不虛,才能順利通關。上面說的在做專案時把場景延時到分散式、併發場景,這很難,只是建議,不要因噎廢食,通過面試積累專案經驗,後面你會發現,很多公司針對你專案提的問題都差不多,最後你會發現原來你認為“沒有什麼東西”的專案其實問題一大堆,這些問題的發現主要靠面試積累。最後強調一次,一定要把專案中遇到或者是你想到的問題記錄下來,一定要。另外,有同學可能會說:“我在做專案的時候沒有遇到問題,或者沒有難點,那怎麼辦?”

 

首先,你再看一遍這篇文章;其次,沒有問題,我們要學會創造問題。比如說:你知道java會有OOM,並且你知道OOM怎麼排查,你完全可以把OOM這個問題的排查過程認為這就是你遇到的問題;再比如說,JDK7以及之前的HashMap在併發情況下會發生死迴圈,如果你知道這個原理,也知道怎麼解決,這也可以成為你的debug的經歷;再比如說,linux自啟動問題,一個專案部署到linux上,肯定要配置自啟動,如果你知道怎麼做,這又可以是一個問題。上面這些例子只是希望大家明白:沒有問題可以創造問題。當然,專案業務相關的問題或者開始你沒有考慮高併發,在考慮之後出現的問題等一些業務相關的問題可能會給面試官留下更好的印象,我只想傳達:“你做專案過程中不可能沒有任何問題”。專案業務緊密相連的問題,其中一個問的比較多的問題是:如果其中某個業務在處理過程中失敗了,你應該怎麼處理?

 

在web專案中一般使用者的行為都會交由執行緒池處理,如果在處理某個業務的過程中發生了異常,導致這個任務沒有處理完,這時你要怎麼處理?這裡這樣舉例的意思是:大家要隨機應變,要學會創造問題。只要你知道問題解決的方案,面試官怎麼可能知道你在做專案的時候究竟有沒有遇到過這個問題呢?問題來源於想象。最後,注意積累專案問題,在每一場面試中,面試官會不斷提出問題,面試完後,下來找到這些問題的答案或者和同學討論。這樣每次面試下來你的問題庫裡面又多了幾個高質量的問題。一定積累之後,面試會很順利~。不要擔心面試官對你的專案提不出任何問題,如果是這樣,這大概率是面試官的能力問題。

 

總之,專案面試是一個積累過程,前期多投小公司的實習和秋招,為後期“升級打怪”積累經驗。專案面試無法一蹴而就,是一個積累的過程。

 

本文所有資料都在微信公眾號分享了,公眾號回覆“資料”即可獲得:

公眾號後臺回覆“資料”即可獲得2T的學習資料(長期更新ing)以及博主整理好的精品資料一份。2T資料涵蓋各個求職方向,並且每一個方向都有對應的經典專案,可寫入簡歷的大型專案