畢業倒計時 — 科班仔Java後端的點滴與學習路線規劃

畢業倒計時 — 科班仔Java後端的點滴與學習路線規劃

一、前言

題記 —— 我也不知道計算機讀出來是幹啥的。

畢業倒計時的兩個月,總想回顧一下大學四年都經歷了啥,提鍵盤又不知道寫什麼。

我也不知道四年前爲什麼會選擇計算機科學與技術(Computer Science and Technology)以下簡稱CS,也從來沒有想過將來能幹什麼。很慚愧,直到大三才漸漸醒悟不能再渾渾噩噩的,2019年3月28號 正值2019年春招火熱期,藉此機會 一個渣渣把簡歷投向了各種大廠中廠小廠,看着招聘軟件與官網下的技能要求,才知道再不努力畢業即失業的慘狀會降臨到我頭上,於是在那個風雨交加的晚上,伴隨這一句 "我打算走Java"從我微信發出,開啓了我的程序人生。
—— 謹以此文 致即將畢業的自己。
在這裏插入圖片描述

二、選好方向—“站在風口上,豬都能上天”

雖是就讀CS專業,但在大一二時卻從未思考過將來能幹點啥,就業方向是啥,大部分原因歸於自己從來沒去想過也沒去打聽過吧,到了大三時恨不得當年在大一的時候能看到一篇文章,講清自己專業的學習規劃路線or職業規劃路線(如果時間能重來,我還是選擇浪)。說一下筆者認知上的大部分的本科技術崗的技術方向吧。

  • 前端開發網頁前端 技術更新較快,負責頁面渲染 常涉及技術如 html,js,react,vue等;
  • 後端開發/服務端開發 後端的選擇語言很多,而且各個公司的語言可能會有不同,假如特別想去的A公司主要開發語言是C++的話 很有可能把java技能樹相關的簡歷直接篩掉 當然也不排除按Java知識點面試你入職後轉語言。目前較多的還是 C CPP JAVA三大經典語言佔領市場,以及近些年勢頭很猛的Go也慢慢被很多公司選擇 ;
  • 算法工程師 算法可以分成很多種研究方向如推薦算法/廣告算法/視覺算法等等 職業要求難度也是極高的一個崗位,對算法要求極高 ACM大佬的選擇;
  • 客戶端開發 ios與android ,與前端有點類似,負責的是移動端上的開發,也有種說法叫大前端。ios瞭解的不多 知道的相關技術又object C,安卓開發目前可分爲兩個選擇 java 或者kotlin ;
  • 運維 運開/運維開發,服務器管理 服務可用性保障,一般都會要求 shell或者python以及Linux系統的命令;
  • 測試 測開/測試開發,簡單來說就是找別人的茬 有沒有bug等;

其實還有很多很多種崗位與職位性質(如 遊戲開發/大數據/數據分析 等等等),但數量相比的話,這些還是佔據了大多數,特別是後端。按照2019年秋招的狀況來看,客戶端的缺口最大,最火熱的當屬後端 狼多肉多,競爭最慘烈的 算法 狼多肉少但肉好吃。

標題中的站在風口上 不要誤解筆者鼓吹要學Java,而是提醒讀者 一定要最好大致路線規劃 明確學習方向,一句傷透技術人的心就是——“你學的這個現在不咋用了” 方向也一樣,有個建議就是可以去各大招聘APP看一些互聯網公司的技術崗位需求以及技能需求,比如說 智聯招聘、拉勾、boss直聘 或者直接去一些公司的招聘官網或公衆號下。

在這裏插入圖片描述

切忌啥都學!!樣樣會沒樣精啥都能懂點但深問都不懂是很尷尬的局面,可以有一門主攻開發語言,精通一門和熟悉多門本身是沒有衝突的,而且語言自身並沒有絕對的界限,有的是應用上的區分 就時間精力有限 還是慎重選擇決定吧。

三、學習資源途徑

  1. b站是個好用的學習網站,各類視頻,入門進階,應有盡有。
  2. 各種博客網站 諸如 csdn 博客園 簡書 等會有很多學習資源文章及大佬們的源碼解析,基本上學習過程報了啥錯誤 上csdn一搜就有。
  3. 中國慕課網、網易騰訊雲課堂 等,有收錄很多科班課程視頻 計算機網絡/數據結構 等。
  4. 書 有錢可以買紙質書 看起來可以不收電腦手機影響 電子書能提供搜索的便利(主要不用錢)
  5. Stack Overflow 實在查不到的問題解決方案 可以試試 國外的論壇 (痛批一下當前的環境 百度出來的好多都是複製粘貼,一模一樣 標點符號都不帶改的)

—————華麗麗的分割線—————

上面廢話了很多有的沒的,以下進入正文,後端開發/java方向的學習規劃方向 (個人總結,僅供參考)

四、學校教的基礎知識到底有多重要

科班仔都經歷過的七大課程 《數據結構》《計算機網絡》《計算機組成原理》《操作系統》《數據庫概論》《算法設計》《軟件工程導論》

  • 關於《數據結構》與《算法設計》—— 程序=算法+數據結構

    程序=算法+數據結構 這句話是筆者大一時書上第一頁看到的,以第一頁的地位 就可以看出數據結構跟算法的重要性了hhh。即使很多框架、庫函數 屏蔽掉了很多算法細節以及內部實現採用的數據結構,使用者只要導入依賴庫調用入參獲取出參就可以了,但免不了有很多不適用的情況。而且 數據結構與算法也是校招裏極爲關鍵的一個考察點

    • 八大數據結構:數組、棧、隊列、鏈表、樹、散列表、堆、圖。 筆者的經驗來看對於圖的考察基本可以忽略不計,可能對於本科要求的掌握程度僅到前七種吧。數據結構一定要學紮實,這是一切程序的支架。
    • 七種常考算法:二分法、遞歸、回溯、排序、搜索、貪心、動態規劃。裏面如排序又包括了 穩定排序和非穩定排序,搜索又可再細分爲 DFS深度優先和BFS廣度優先等,除此之外還有許多算法 如kmp字符串匹配算法等,算法是貫穿整個計算機的,算法思想還是有通用性的,這些基本算法在平時也經常會用到,題海戰術是一個很好提高算法能力的選擇。如果常年混跡在ACM的 這些應該是基本里最基本的了,而像筆者這種浪子回頭型的 算法虐我千萬遍,我待算法如初戀。
    • 學習/備戰/提高:理論實踐相結合,看書理解思想(晦澀難懂的話可以選擇看視頻 有人講解起來會清晰很多),前面提到題海戰術,推薦個刷題網站 LeetCode 裏面攬收了很多很多很多算法題,甚至筆者斷言 求職過程99%遇到的算法題 都可以在leetcode找到一模一樣的或者類似改造的。
  • 關於《計算機網絡》—— 連接分散計算機設備以實現信息傳遞的系統

    這是百度上的一個定語,計算機網絡這門課程裏理論化的東西居多,但卻不管身處哪一個崗位,只要跟互聯網沾的上邊 都逃不過它。計算機網絡的知識體系很龐大,但需要掌握的重點也不算很多。

    • OSI七層模型與TCP/IP 四層模型,必知必會的點了
    • 按層級劃分的話,重點落在 網絡層 運輸層 應用層,所以看書的話 對於全部看過的人來說的話,重點關注這幾大章就基本夠了(沒聽過課的話 還是仔細的整本過一遍吧 畢竟層層體系的聯繫在一起完全不看不好貫穿)
    • 幾種經常會出現的P:IP TCP UDP HTTP FTP 等等等。IP地址子網劃分、TCP握手揮手、HTTP應用連接響應、FTP文件傳輸等,都是校招筆試面試繞不開的話題,尤其是HTTP和TCP。
  • 關於《計算機組成原理》—— 書如其名,計算機組成原理,重要不也重要

    重要是因爲許多上層只是都不開這門課程的知識,諸如 計算機基本組成 輸入設備 輸出設備 中央處理器CPU 內存 外存,這些可以說是在計算機系統裏面的五臟六腑了,包括數據的機器語言表示 浮點、反碼、補碼 以及各種底層知識,對於理解高級語言 java c以及系統設計等等 都很有利。要說不重要,只是單獨的拿計算機組成原理作爲考察知識點的不多,那些恐怖的指令系統、尋址、中斷都不是軟件開發從業人員的要求點。

  • 關於《操作系統》—— 系統設計的導讀書

    因爲之前學校學的操作系統是以linux系統爲例,解讀裏面的 進程管理 處理機調度 存儲管理等,單純的以爲這是一本介紹linux系統的書,但是後來慢慢學習發現,很多上層應用開發都離不開這本書的基本知識點。

    • 進程管理:進程與線程的概念、通信方式、死鎖、銀行家算法。
    • 處理機調度算法:先來先服務、短作業優先、時間片輪轉等。
    • 存儲器與頁面置換算法:包括寄存器、緩存、內存、磁盤等,先進先出算法FIFO 最近最久未使用算法LRU。

    這些知識都是在系統設計層面的,而說抽象點 有時我們實現的很多應用系統 都多多少少跟此有很多共性。(筆者在秋招筆試的時候就遇到了一道用鏈表及哈希實現一個LRU_Cache的功能)

  • 關於《數據庫概論》—— 數據最終都要持久化

    算是比較基礎的數據庫知識,應該教學內容都是關係型數據庫,基本SQL語句和幾種關係範式等。而數據庫操作是後端開發人員必備的技能,CURD增刪改查都是在數據庫層面上,這門課程後 不管是對於mysql和oracle或是其他關係數據庫,都能較快的上手。

  • 關於《軟件工程導論》—— 軟件是怎麼一步步開發出來的

    之前以爲這門課程是教如何手寫代碼開發一個軟件,上了課後才知道原來就是個寫PPT和word的課,再到後來實習過後才明白,原來這門課程裏曾經被筆者稱爲過家家的東西 都是在企業開發中極爲重視的。需求分析、概要設計詳細設計、編碼、測試等等,軟件開發的生命週期 算是實際工作中的理論體系課程。

課程學校都有指定教材,跟學校的和老師學就好了,就不做書籍推薦了。

五、大學期間做點啥能受益匪淺

  1. 大一:極大多數人對於計算機都是同一起跑線,而此時如果能抓住機會付出點努力多敲敲代碼刷刷題,進軍ACM行列,肯定是最好的選擇路線之一,實力足夠強大拿點含金量足的獎牌在之後的求職過程就是一張很好的通行證。
  2. 大二:比賽或項目。各種各樣的比賽,校的也好 省的也行 國家的牛逼,只要是有意義的比賽都可以儘量多的參加,得獎與否不關鍵,比賽跟項目=項目經驗,項目經驗是啥?就是面試過程中最好吹的東西!
  3. 大三:大三就可以着手準備找工作了,首先關注自己的學分 確保自己能畢業,不夠趕緊補,不要留到大四!大三下學期會有面向上一屆的春招和本屆的實習招聘,千萬不要錯過,能上岸就最好的,沒有的話,攢攢經驗爲後續的秋招做鋪墊也很值。
  4. 大四:秋招 秋招 秋招 ,重要的事情說三遍。

六、我是如何入門Java後端的

學校的教學語言是C++ 所以前兩年都是學的C++ 也學的很一般,後來因爲項目入了Java的“坑”,也因此在這條路上越走越遠了。以下以筆者的學習路線 因爲主要學習途徑是書 也一邊案例書籍吧

  • Java程序基礎:首推《Java核心技術卷 I》,不是我看不起那些噱頭“入門到精通的書” 而是裏面真的會缺斤少兩 少掉很多內容,核心技術卷 I 是很全面的書,不管深度廣度都極佳。這本書看完 Java語言的基礎就大致全部過了一遍了,也即Java SE 。不過裏面的GUI Swing相關的內容 是可以跳過的一部分,實際上基本不會用這些。

在這裏插入圖片描述

  • Java併發編程:併發編程是一個比較重要又很難運用的知識體系,業務場景的複雜沒有一個通用的解決方案,所以在校招的筆試面試 都是一個極爲關鍵的部分。推薦《Java併發編程實戰》 筆者閱讀的第2版,一本很值得打磨多次閱讀的書,口碑極佳。校招常問:鎖策略、線程安全、死鎖····。

在這裏插入圖片描述

  • JVM虛擬機:Java繞不開的話題,推薦《深入理解Java虛擬機》,雖然說裏面的JVM調優、優化是很難搞很頂的東西,但是很多基礎知識確實公司裏實打實要求,而且JVM也可以更深入的理解Java這門語言的特性。校招常問:內存區域、溢出異常、類雙親委派、GC垃圾回收····。

在這裏插入圖片描述

  • JavaWeb技術:以上的三本書,都可以列爲Java的基礎知識,很淺也很深。後面就是應用層面了,Web這算是繼SE之後一個分支了,也是比較主要的一個方向,Java在Web服務端/後端領域的疆土還是很廣闊的。《深入分析Java Web技術內幕》不錯 但是隻看過裏面的一部分 因爲這本收錄的東西很雜,上至Spring 下至JVM 都多多少少有談到。筆者的認爲是 對於Web領域的基礎知識看了就行,早期的web技術裏的 如jsp已經基本被棄置不用了 所以對於jsp可以只做瞭解。重點關注 Cookie、Session、Servlet、HTTP、Tomcat

  • JavaEE框架:常見SSH、SSM框架,目前SSH已經慢慢的退出舞臺了,SSM即 Spring+SpringMVC+Mybatis ,前面提到了一個叫Servlet的東西,現在已經不再是Servlet來接受請求doGet或doPost,取而代之的是Controller,但是Servlet這個東西還是尤爲關鍵,Spring MVC最核心的一個東西 DispatcherServlet,推薦《Java EE互聯網輕量級框架整合開發》,裏面包含了SSM+Redis的基本使用以及框架應用裏的許多前導知識 反射、動態代理等。

在這裏插入圖片描述

  • Spring三劍客:發展至今,說Java幾乎離不開Spring我覺得不過分。Spring三劍客包括《Spring實戰》,《SpringBoot實戰》,《SpringCloud實戰》。Spring爲Java開發提供了很多便利,Spring實戰詳細的列出了Spring都能幹些啥,很多知識在上一本SSM的那本書肯定見過 但是有一些是這裏纔有的 如Spring Security權限控制等。SpringBoot更像是一個快速構建服務的東西,前面構建SSM時 會有很多雜亂看着就讓人頭暈的xml配置文件,而到了SpringBoot 更推崇約定大於配置,以註解和一箇中心配置文件 yaml/properties 來構建項目基本環境。Spring Cloud是解決分佈式系統的一個微服務框架,但我不大建議一開始就讀這本,後面會推另外一本。基本校招技術要求 也就到了SpringBoot 。

在這裏插入圖片描述

  • Sql/NoSql:雖然在學校裏有數據庫課程,但是那些知識是不足以拿來企業開發的,可以根據自己想法,選擇數據庫學習,我選擇的是 MySQL和Redis。Mysql推薦《高性能Mysql第三版》的第1/5/6/7章 這本書厚的沒人性 當然有精力可以全看,作爲前導知識 B和B+樹也得去了解一下。Redis選擇《Redis實戰》和《Redis設計與實現》,後面那本書就講得是Redis的底層實現,C語言編寫 學過C/C++的讀起來會輕鬆不少。

在這裏插入圖片描述

在這裏插入圖片描述

  • 分佈式系統與中間件等:這是我目前正在學習的東西,前面提到不推薦一開始就讀《SpringCloud實戰》,它更偏向於應用手冊而不是理論手冊,推薦《大型網站系統與Java中間件實踐》 這是書雖說有點年代,但它闡述了分佈式系統誕生的過程,解決方案的提出與思考。
    在這裏插入圖片描述

  • 其他書籍:Java技術的廣度和深度絕不僅於此,但精力有限的情況下,前面的書籍已經足以支撐去找一份滿意的工作了,Java網絡編程的《Netty實戰》,設計模式《Head First設計模式》,編程習慣《Effective Java》都是值得一看的書。

七、校招生要學到什麼程度

這個是沒有比較明確的界限的,從資本家的角度當然是越多越好啦(手動狗頭),但大部分情況下,校招更看重基礎知識以及在項目中運用的技術,並不會明確要求說要會什麼技術什麼工具。以我而言,即使在大四秋招時 我還是沒接觸過中間件和分佈式系統的,這是簽好工作後 有時間慢慢學過來的,所以Java基礎知識過後,SSM+Spring Boot就差不多了。

八、備戰實習春招和正式校招

實習春招是在大三的下學期,金三銀四 三月份是最關鍵的,正式校招是 大四的上學期 金九銀十 九月份最火熱 牛客網統計九月份當日最高筆試人次高達5W。時間要先明確,船開過了就補不上票了。

  • 實習春招的關鍵:筆試、基礎、項目經驗。實習是上大廠的岸的一個很好的途徑,很多都是實習轉正的校招offer 這種又能有實習又免去了後面找正式工作的煩惱 簡直不要太爽。而且 實習=實習經驗+項目經驗,一舉兩得。
  • 秋招的關鍵:筆試、基礎、項目經驗、實習經驗。在大三到大四的那個暑假是一個很關鍵的轉折點。

從校招進度來談談咋整吧,路線規劃跟方向真的太重要了。
投簡歷——>筆試——>技術一輪面試——>技術二輪面試——>HR面試——>結果。

  1. 投簡歷:越早越好,事情是有兩面性的 晚投可能複習的全面一點 早投有hc充足的優勢。但總體來說還是越早越好,因爲晚了HC就沒了!不要等待截止時間 很可能已經招滿人了。(說是金三金九 提前批可能提前一個月就開始走上筆試面試流程了,而有些公司提前批就會發出大量的offer),去哪投是關鍵,前面提到的很多招聘軟件 恕我直言 招聘質量都很一般 智聯招聘/拉鉤/boss直聘 並不是校招生的首選,雖有 但不多,我選擇化身牛吹,推薦牛客網,很多面向校招生的招聘渠道,內推信息、面經等。

  2. 筆試:如果平時有刷leetcode的話 筆試基本是無憂的,筆試題前面說過很多是跟leetcode原題 或者相近的解決方法,如果平時沒有積累 時間又不是很充足,建議刷**《劍指offer》**系列題,裏面是五六十道常見題目 難度適中,基本能搞懂的話 筆試也不會有大問題。不要只想着作弊,往往面試也會讓手撕算法題,筆試除去算法題外 也會包含一些選擇填空甚至解決方案設計、數據庫表設計、sql語句編寫等。還是題海戰術,刷題 牛客網是一個良心網站

  3. 技術面試:主要就四個東西,項目 理論 解決方案 手撕算法

    • 聊項目:幾乎會佔據一半的時間,所以一定要提前去回顧一下項目的內容 技術難點 以及如何解決難點等技術問題。所以如果沒有項目的話 可能會入不了面試官的法眼,直接failed或者加大理論考察的深度廣度

    • 理論 :一般來講都會挖的很深,挖到不會爲止,這是個很磨人的階段 大腦迅速檢索知識 組織語言 清晰表達,恐怖一點還會挖到源碼深入JVM等層面,做好複習,路線規劃推薦一個fork大佬的整理Java複習路線 github鏈接:

      https://github.com/YoungerJam/JavaGuide ,Java外還有前面第四提到的基礎知識。

    • 解決方案: 方案設計,場景題 這個就看個人的平時積累跟腦洞了 見仁見智,不要不敢說 對錯是一回事 體現出自己的思考纔是關鍵。

    • 手撕算法 :要麼足夠強 要麼刷的題足夠多。

    關於這方面的東西,我還是繼續吹一下牛客網,裏面大量的面經可以做參考。

  4. HR面試:基本就是聊聊家常聊聊薪水了。

  5. 結果:沒有拿到正式的offer郵件或書面offer,口頭offer一個標點符號都不能信。不管本次結果怎麼樣 如果有精力 過於不過都繼續堅持的投下去,這像極了高三時的自己 處於自己的一個知識頂峯了。如果運氣不好 遲遲沒有offer 不要放棄留到春招,可怕的二八定律(20%的大佬拿了80%的offer)大佬們會慢慢把hc吐出來的 此時被撈上岸的機率很大。

九、結語

—— 別慌,月亮也正在大海的某處迷茫。

@Author Jam 2020.3.31

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章