文章篇幅較長,都是滿滿的干貨,看完識訓絕對很多, 文末有學習筆記和學習資料領取
前言
大家好, 這次應博主的邀約,寫一篇關于我的 Java 自學經歷,希望對小伙伴們有所幫助,
我本科就讀于北方某三本院校,和別人交談的時候也不太愿意過多介紹關于自己本科的情況,想著英雄不問出處,不過后面想想,自己的一些經歷分享出來,如果剛好有在某個階段開始迷茫的小伙伴,可以通過閱讀我的經歷,避免掉一些我走過的彎路,那就很好了,

天,總會亮的
關于我
我本科就讀于三本的獨立學院,主要是因為高考考得不好,說白了就是初中和高中階段不愛學習導致的,而且還是調劑到我們學院的計算機專業的,計算機專業在我們院屬于比較墊底的專業(說白了,那時候來計算機院的都是調劑生),我是“被迫”留在了計算機專業,然后就有了后面的故事,不然,我因為當初選的電氣專業可能在爬電線桿了,
初出茅廬
2013年9月份,我帶著行李箱就開始北上了,從北京西站下來后,我是第一次感受到了大城市的繁華,也默默想著希望畢業后能夠留在這里作業,

北京西站
在北京,我和老爸去了北京天安門、故宮 還有長城,也第一次坐上了地鐵,
后來輾轉來到了我們的學校,大學的生活比高中生活更加輕松,不過我也沒有放松自己,平時老師代碼都是給我們在 PPT 上演示,那會也對編程產生了濃厚的興趣,經常老師上課講完的代碼,會用小本子記錄下來,然后跑去圖書館再一行一行的敲上去,那會兒樂此不疲,

大一學習C語言時必學的求圓柱的體積,哈哈
那會兒對于代碼完全是不知所以然,不知道為什么要這么寫,對于一些演算法,比如冒泡排序、選擇排序都是記在本本上,每天看一看,就這樣的狀態,很快大一的時間就過完了,
大二開始,我們開設了 Java 課程,通過學習 Java,我發現了原來編程不僅僅只是做出黑框框的,在命令列上運行的東西,它還能制作出計算器,甚至是游戲(JavaGui)這種高大上,
這里其實特別感謝X客的畢向東老師講解的 Java 基礎 ,那個時候視瞥澩特別匱乏,我有幸接觸到了畢老師的視頻教程,然后花費了一個學期才把 Java 學完(那會基本上一行一行的手敲),后面又跟著X客的另外一門視頻教程《Java貪吃蛇游戲》,我也是整整花費了 1 個月的時間,每一行代碼都是跟著手敲出來的,到最后游戲能運行的那一刻,我突然對編程有了比較濃厚的學習興趣,

大二在寫貪吃蛇小游戲的時候
漸入佳境
大三的時候,我們開始了分班,就是選拔出一些人到卓越工程師班,我和家里人商量了一下,說我準備去參加這個班級,因為我覺得在里面我能夠學習到很多東西,
在通過編程考試以及初試后,最后進行復試(自主選題),我做的就是跟著X客做的貪吃蛇小游戲,我最終的成績是2/29,

卓工班上課的時候
在新的班級里,老師的要求比原來更嚴格了,在保證正常學習本科教學作業的基礎上,同時增加了更多的實踐性的課程,例如:Java編程、HTML+CSS+JavaScript、C#編程、.NET編程、Android編程、嵌入式開發,
那會學習了很多技術,我也很感謝老師那段時間的付出,因為每門課上萬之后,都需要制作一個案例,采取的是小組的形式,然后需要進行答辯講解(也是從這個時候,我開始明白了團隊協作的重要性.)

和三個小伙伴完成的蘑菇音樂,答辯的時候界面驚艷了大家
跌宕起伏
轉眼就來到了大三的暑假了,那會我是覺得直接參加作業去賺錢也不錯,不過家里人希望我能參加考研,等讀完研之后再參加作業,
我最侄訓是被家里說服了,然后開始著手考研的復習,但是心里還想著作業的事情,也正因為這個導致我后面摔跟頭了,希望小伙伴能以此為戒,在面對考研和作業的抉擇時,需要了解到自己喜歡什么,并且能夠堅定自己的目標,而不是隨波逐流、人云亦云,

那會為了準備考研,特意報名了一個輔導班
但是那會考研也沒有很專注,當看到其它同學在找作業的時候,又跟著一起湊熱鬧,一塊參加面試(當初面試實習崗位,面了兩家還都被錄取了),那會對考研的事情又產生了動搖心理,最后在家里人的勸告下,我又繼續回到了考研課程的學習中去,但那會考研也不是專心致志一心一意的,那會每天晚上八點鐘就回到了寢室,然后開始玩游戲,

夢幻西游手游,玩了好幾年的游戲了,后面不玩了就賣了
就這樣一邊復習考研,一邊晚上八點就早早回來繼續打夢幻西游的狀態,一直持續到考研結束,最后考研分數出來了,結果也正如大家所預料的那樣,嗯,完蛋了,
跋山涉水
考研成績出來的那會,還處于大四的寒假,在得知自己無法讀研的時候,毅然決定好好復習專業知識,然后去參加校園招聘,因為我們學院電氣是王牌專業,所以基本上來的都是一些電力相關的,很少有計算機專業的招聘過來( 現在的話,推薦小伙伴們能夠多多關注網站上的校園招聘平臺,比如 牛客網 等),后面就來到了發小的學校,和他一塊準備通過校招來找作業,

在發小的宿舍進行學習
在發小那邊大概呆了半個月,但是一直沒有等到他們學校校招的訊息,這個時候因為經過半個月的學習,基本上對 Java 開發有一定的了解(現在想想,其實就是一些皮毛,只學了 JSP 和Servlet ,做了兩個 JSP 相關的專案,想想那會也是太年輕 ),所以就打算直接去深圳尋找公司實習,
因為想著以后就在深圳作業了,所以就先試著看能不能找到深圳的實習先做著,但事與愿違,后面并沒有按照我理想的那樣來…

在出租屋里學習
找到落腳點后,就開始了作業的投遞,那會真是饑不擇食,只要寫的招收實習生的公司,基本上都投遞,但是也遇到了很多坑:要么面試一家就發現是培訓機構,要求你先繳納培訓費,實訓完成后給你安排作業;要么就是職場 PUA,首先給你特別難的面試題,來摧毀你的面試信心,最后再告訴你,即使不會這些也沒關系,有專業的專案經理給你崗前實訓,有些說沒錢也沒關系,可以給你安排先培訓,就業后還款,
后面我就知道了,可以通過天眼查先查公司的運營范圍,如果這家公司運營范圍包含了 技能培訓,或者計算機培訓,那么很大的概率就是培訓機構了

使用天眼查看公司運營范圍
在深圳的半個月里,我陸陸續續參加了 10 場面試,其實有 8家面試都是和培訓機構有關的,另外兩場是因為能力沒有滿足人家的要求(那會只學了 JSP、連 Spring 相關的框架都沒了解過),而且因為離南山區比較遠,那會也沒有通地鐵,基本上是坐車 2 小時,面試 10 分鐘,那段時光也是最艱難的時光,不過我心態其實還挺好的,沒有找到作業,就當去深圳玩了一陣子~,

去深圳大學逛了一圈,對面就是騰訊大廈
這半個月的深圳找作業之旅,最后以失敗告終,想想可能還是自己能力太弱呢(現在想想,其實可能是選錯了方式,因為我走的這條路屬于社招的道路,如果還沒有畢業的小伙伴,還是要多多關注一些校招平臺,以及對應的公眾號:校招優選、校招薪水 等,或者直接是訪問人家的官網),在后面的一段日子里,我開始繼續強化自己的 Java 技能
健步如飛
在經過一段時間的強化學習后,本科的小伙伴邀請我去北京試試機會,后面我又踏上了北上的道路,那個時候只想著能找個管飯的作業,哈哈,

深圳開往北京西的火車站
來到了北京,和之前的同學一塊去參加招聘,白天參加招聘,晚上就回來一塊互相總結經驗,

去北京參加的招聘會現場
其中,中間還回學校參加了校園招聘,不過公司都不太合適,最后還是選擇在北京尋找實習機會,大概在北京面試了一個禮拜后,終于通過了一家公司的面試,最后也順利辦理了實習入職手續,正式擁有了自己的工位,

第一天上班裝系統
即使那個時候實習的工資并不高,但我也格外珍惜這來之不易的機會,所以在作業的時候,也很認真地在學習,公司對于代碼這塊也有很多規范,每隔一段時間就需要進行代碼的 review,自己首次提交的代碼,也都會經過同事的一輪評審、二輪審核通過后,才能提交成功,
實習的幾個月里,我真正了解到了企業級專案是如何開發的,同時加深了Git、Maven、Spring、Mybatis 等框架的使用,雖然公司很小,核心開發人員只有 7 個人,但做事都很有規范,并且每隔兩天就會有一個 20 分鐘的短會,介紹自己目前做了哪些作業,然后遇到了什么問題,未來將做什么?
如果有其它小伙伴遇到問題了,比如我開發某個模塊卡住了,那么其它小伙伴可以協助一塊進行開發,我也特別感謝另外兩個實習小伙伴,幫助我一塊解決專案中遇到的問題,尤其是前期在閱讀專案時所遇到的,

同事指出我寫的不規范的地方
有的時候來早了,公司可能還沒開門,所以就在樓下坐著等待一會,看看技術相關的文章

公司的樓下
卷土重來
后面畢業后,就在公司轉正了,雖然工資不高,不過那會兒想著應屆生畢業之后能學到技術就好了,后面家里人打電話跟我說不要因為一次的考研失敗就放棄了,可以再去嘗試嘗試,我聽了他們的話,也沒有馬上同意或者拒絕,而是靜下心來考慮了一段時間,
在后面 9 月份的時候,我堅定了考研二戰的想法和決心,當時全身心得想著再沖一次,所以就離職了,直接收拾東西,在 2017年 9 月 28 日踏上了回家考研復習的征程,

北京西站準備回家
考研的時間是 12 月 25 日,回到家后已經是 10月 1 日,距離考研還有 80 多天,因為有了之前的經驗,所以這次的復習也更加有了針對性,比如數學就跟著張宇、英語跟著劉曉燕,政治跟著肖秀榮,死死咬住一個人,專業課因為有往年的真題,所以就結合課本和真題進行復習,下面是我考研時寫的每日計劃(請忽略我寫的這么丑的字,這種獨具一格的字,在政治這門估計是吃大虧了),

寫的每日目標
然后開始刷題、背題….

狂背肖4-網圖
這個狀態一直持續到了考試結束,到后面成績公布,最后出分數線了,我很走運有機會進入復試,所以后面就開始準備復試相關的了,因為之前參加過實習和作業,所以就先把自己的簡歷好好寫寫,把握好自己的優勢,最后隨著復試結果的公布,成功被如今的學校錄取,最終考研一事塵埃落定,
新的旅途
在考研已經確定被錄取后,那個時候是在 4 月份,而研究生入學是在 9 月份,這中間有大概 5 個月的空窗期,因此,我又萌生出去打工的想法,找一份作業先做著,等到開學的時候再去入學,
所以后面很快又來到了北京,有了之前的經歷,后面找作業就輕松了許多,面試了 10 天,最后拿了 3 家公司的 Offer ,最終選擇了一家比較近的,
在第二家公司,主要做的是小程式相關的業務,然后由我和另外一個小伙伴負責,但是技術經理要求我們使用SpringBoot + Vue + 微信小程式 來做,但是由于我對于這一塊比較新的技識訓不是特別了解,所以后面就特意花了一段時間來學習,
-
Vue:主要是根據Vue官方檔案來學習的,因為中文檔案比較友好:https://cn.vuejs.org
-
ElementUi:Vue 的框架,也是直接看檔案:https://element.eleme.cn
-
微信小程式:因為之前畢設是用微信小程式做的,所以還算有點熟悉
專案經理把專案架構的搭建到業務編碼開發以及最后運維部署都交給了我們兩個人,我們兩個也是互相協同開發,來這四個月里,做到了從 0 ~ 1 完成整條開發流水線的作業,
在新的作業中,沒有了之前的迷茫,在做需求的時候,也懂得了如何將需求切分,更好的去完成每一項開發功能,

用工資給自己換了一臺新電腦和鍵盤
四個月的時光,很快就過去了,又到了離開的時候,踏上旅途,開始去讀研了,這次的離開,可能以后都很少有機會再回去了…
步履矯健
在進入研究生階段后,我首先明確了自己的目標,比如:讀博 or就業 ?我的選擇是畢業后直接就業,因為之前經歷了社招的痛苦,所以現在格外珍惜自己以后的校招機會,
入學后的第一天我就給自己定下目標,能堅持做一款開源軟體,用來記錄自己學習中遇到的問題,最后經過敲定,決定還是以 蘑菇博客 為名,

蘑菇博客的第一次代碼提交
蘑菇博客專案最開始由我一個人開發,中間陸陸續續有一兩個小伙伴參與其中,開發了一部分模塊,我也想著能盡可能把更多的技術融合進來,畢竟通過自己手把手的操作一遍,也能夠算是入門了,
我也很慶幸我成功將自己的專案開源出來了,并且堅持下來,蘑菇博客起源是 2018 年 9 月,很感謝之前在公司里的同事和領導,是他們帶我入門企業級的專案開發,讓我養成了很多 Java專案開發的規范,但是到真正在自己手把手搭建一個專案的時候,還是會捉襟見肘,有各種意外情況,
起初專案開源在碼云上,沒有多少人關注,在2019年12月14日,蘑菇博客被碼云推薦了,后面陸續有一些小伙伴關注了專案,并且參與到開發中,也提供了很多issue,在這里我也學習到了很多規范和功能的實作,

蘑菇博客上首頁了
然后專案的關注度就開始上升了,有些小伙伴就開始關注,所以我也花費了一些時間,整理了博客的開發、運行、部署的檔案,希望每個小伙伴都能夠通過本專案一起學習,
因為更新比較勤快,專案也在碼云 "博客" 關鍵字搜索的第一個,不過未來要走得路還很長,我也希望能夠認識更多志同道合的小伙伴,然后一起學習和交流,

搜索博客
2020年7月28日,蘑菇博客成功達到1000star,也完成了我之前定下的一個小目標,這也是一個新的起點,后面我還需要更加努力,

蘑菇博客專案
2020年9月7號收到了碼云郵寄過來的Gitee 1000star獎杯~

蘑菇博客1000Star獎杯
2020年12月16日,到目前為止,蘑菇博客已經2Kstar了

我的Gitee首頁
并且后面開源的 LearningNotes專案 (學習筆記,記錄平時的博客),也已經識訓了 1.5K star

學習筆記1000Star獎杯
學習筆記Gitee地址:https://gitee.com/moxi159753/LearningNotes
關于開源
從開源的程序中,不僅自己的能力能得到提升,同時也能認識非常多志同相合的小伙伴,包括在群里的小伙伴們,也有一些一塊參與到專案的維護和開發中,也有一些給我們提供 issue 和idea ,同時能夠和一些參加多年作業經驗的老哥交流,也是受益匪淺的,
通過開源,我也獲得了很多作業機會,就本次秋招來講,其實很多面試官對我做的開源專案比較感興趣,所以面試上其實很多時間都在聊這個開源專案,同時,我也收到過獵頭通過 Github 上的郵箱給我發的郵件,期望我去參加他們推薦的作業 ( 哈哈哈,后面因為知道我還沒有畢業的事情,就放棄了,因為他們招的是5年作業經驗的,就因為這個原因錯過了阿里P6-P7的崗位了,簡直太虧了啊)

獵頭推薦郵件
滿滿干貨
JavaSE
JavaSE是 Java 的核心和基礎,我最早接觸 JavaSE 是在2014年10月 ,那會剛剛上大二,學校剛剛開設 Java 課程,那會的老師在給我們講解 JavaGui 編程的時候,我突然發現原來通過代碼寫出來的東西,不僅僅只是在黑框框上運行,也是有可視化的界面,從這一刻我突然對 Java 有了濃厚的興趣,
為啥學 C++ 的時候沒有這感覺?因為覺得C++只能寫出黑框框程式,還有就是指標& *#@ …
后面又通過網上沖浪,我發現了X客的視頻教程,從此就開啟了Java 入門之旅,

Java圖片-網圖
我最先接觸的是X客畢向東老師的 Java基礎視頻教程 ,畢老師詼諧幽默的語言,然后絲毫感受不到學習的枯燥,在 Java 基礎課程中,會學習到 Java環境的搭建、進制的轉換、運算子、條件陳述句、陣列、面向物件、多執行緒、集合類、IO流 等內容,在基礎部分是最花費時間的,我當初在大二的時候,學習基礎就花費了兩三個月才看完,同時我也希望剛剛入門的小伙伴們,能夠打好基礎,這樣才能走的更遠,
在 JavaSE 階段,小伙伴們需要掌握一下幾個重點部分
面向物件、集合類、IO流、反射、泛型、例外處理
MySQL
在學習完 JavaEE 的課程后,我們就可以開始 MySQL 資料庫的學習了,這門課程可能很多小伙伴在本科大二或者大三的時候會開設,如果已經學過的小伙伴,那么這個小節就可以直接跳過,

MySQL圖片-網圖
在這里,我們將學習資料庫和表的常用操作、約束、視圖、存盤程序和函式、流程控制結構以及綜合運用各種命令實作資料的增刪改查操作,
Bilibili圖靈 MySQL:
https://www.bilibili.com/video/BV1b5411G7uF
JDBC
JDBC 的全稱是 Java Data Base Connectivity ,即 Java資料庫連接,目的是為了簡化和統一對資料庫的操作,定義的一套 Java 操作資料庫的規范,
JDBC 的開發步驟主要分為一下四步:加載驅動、獲得連接、基本操作、釋放資源
在后面我們將會學習一些 ORM 框架,比如Hibernate、MyBatis、MyBatis Plus ,他們將會屏蔽很多技術實作細節,讓我們更加專注于業務的編碼,但是如果我們提升內功,進行MySQL調優,這個時候就需要查看內部實作細節,就可能需要用到 JDBC 了,
因此,本章節如果對于想要快速入門的小伙伴,可以直接跳過,
JavaWeb
在學習完 Java 基礎和如何使用 Java 操作 MySQL 資料庫,就進入到了 JavaWeb 的階段,在這里我們將學習一些前端的技術,用來開發頁面(不要說,這是前端做的,有的時候去了小公司的話,可能你就是全堆疊開發了),
前端技術我們主要會學習:HTML、CSS、JavaScript、JQuery等,
關于后端技術,我們主要學習Servlet程式、Filter過濾器、Listener監聽器、JSP頁面、EL運算式、JSTL標簽庫、jQuery框架、Cookie技術、Session會話、JSON使用、Ajax請求等大量Web開發核心技術點,
同時最后將會結合目前學習到的技術,完成一個書城專案,JavaWeb的課程主要是讓我們奠定扎實的基礎,為以后框架學習做好技術準備,
ps:最近討論比較激烈的話題就是,2020年了,我們還需要學習JSP 么,下面是我在知乎搜索 JSP 時出現的討論

JSP討論-知乎截圖
其實 JSP 在后面是有很多被替代的模板引擎,比如:Freemark、Thymeleaf ,但是他們因為都是模板引擎,所以基本上用法和 JSP 都差不多,就是通過自己的標簽語法將后臺的資料渲染出來,因此為了后面能夠非常平穩的過度,還是建議小伙伴們能夠了解一下,掌味訓本的用法即可,畢竟還有非常多的舊專案還在使用 JSP進行維護和開發,
JavaEE
JavaEE 又被稱為 J2EE,主要是用于開發 Java 企業應用,在這里我們主要將會學習 Java 企業開發框架 SSM,即Spring、SpringMVC、MyBatis ,
Spring框架:是一個輕量級 Java 開發框架,主要是為了解決企業應用開發的復雜性而創建的,
SpringMVC框架:SpringMVC 分離了 控制器、模型物件、分派器,讓我們更容易進行開發定制
MyBatis框架:是一個 Java 持久層框架,用于操作資料庫,消除了幾乎所有的 JDBC 代碼,使用簡單的 XML 或 注解即可完成資料庫操作,
SSH框架,即 Struts2、Spring、Hibernate 框架,現在Structs2 和 Hibernate相對用的較少,因此這里就暫時不推薦現在去了解,
Maven
Maven 是目前流行的自動化構建工具,也是一款在大型專案開發程序中不可或缺的重要工具,
陌溪在本科時期,老師教我們用 JDBC 連接資料庫時,那會就還沒有用到 Maven 進行依賴管理,當初開發是非常痛苦的,需要我們自己去找相關的 jar 包,例如:commons-dbcp、commons-pool、mysql-connector-jar,而且非常容易出現版本沖突,直到后面學習了 Maven ,終于擺脫了自己尋找 jar包的痛苦了,因為都通過統一的中央倉庫來管理依賴,我們只需要通過定義基本坐標,就可以將依賴引入到專案中,
在本節中,我們將會學習:Maven 的作用、常用的命令、如何配置依賴、依賴的范圍、依賴的傳遞性、依賴的排除、生命周期等
Spring
Spring5框架是一個輕量級開源的JavaEE框架,為了解決企業應用開發的復雜性而出現,它提供了功能強大IOC、AOP及Web MVC等功能,Spring框架可以單獨構建應用程式,也可以和其他框架組合使用,Spring框架憑借其強大的功能以及優良的性能,在企業開發中被廣泛應用,

Spring-網圖
在這里,我們主要從 Spring5 框架的基礎開始學習,然后需要學習的技術包括:Spring5基礎知識、IOC容器、AOP、JdbcTemplate、事務、Spring5新功能等,
其中,IOC容器 、AOP 和 事務 這幾個部分是非常重要的點,在以后面試中,主要問到 Spring 框架,那么它們就是必問的考點,因此在這節需要小伙伴們能夠好好的學習,Spring 框架將奠定我們整個 Java 編碼的基石,毫不夸張的說,學習Java就是學習Spring開發 ,
Bilibili圖靈 框架:
https://www.bilibili.com/video/BV1r64y1o7iD
SpringMVC
SpringMVC框架采取了松耦合可插拔組件結構,比其它MVC框架更加具有擴展性和靈活性,在這里我們將學習到 RequestMapping、RequestParam 等注解的使用,以及 攔截器、過濾器、國際化、檔案上傳和例外處理等方面的內容,同時將會學習到 REST風格的URL請求,這將會讓使我們未來在完成前后端分離專案時,如虎添翼,
Bilibili SpringMVC:
https://www.bilibili.com/video/BV19t4y1Y7K2
Mybatis
MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存盤程序以及高級映射,MyBatis 免除了幾乎所有的 JDBC 代碼以及設定引數和獲取結果集的作業,MyBatis 可以通過簡單的XML 或注解來配置和映射原始型別、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 物件)為資料庫中的記錄,

Mybatis-網圖
在這節,我們將學習如何撰寫 Mybatis 組態檔、配置動態SQL、快取機制、整合 SSM 以及 Mybatis逆向工程
想當初陌溪在開發蘑菇博客第一版本的時候,就是使用的SSM框架,那會在整合SSM框架的時候,足足花費了 2 周的時間,那會視頻教程沒有這么多,我在遇到問題只能通過百度和 Google來檢索,還好最后終于成功了~
同時通過學習 Mybatis逆向工程,可以自動生成基礎的代碼,讓我們更加專注于業務的開發,
Bilibil MyBatis實戰教程:
https://www.bilibili.com/video/BV1Jy4y1U7yR
MybatisPlus
MyBatisPlus是一款非常強大的MyBatis增強工具包,只做增強不做改變,

MybatisPlus-網圖
陌溪最早接觸 Mybatis-Plus 的時候,是在逛碼云的時候看到的,那會它已經是年度最受歡迎的開源專案了,然后我為了學習Mybatis-Plus 的使用,在蘑菇博客技術選型的時候,就把Mybatis-Plus 作為了蘑菇博客的ORM框架,
Mybatis-Plus開源地址:
https://gitee.com/baomidou/mybatis-plus
Mybatis-Plus 在不用撰寫任何 SQL陳述句 的情況下即可以方便的實作單一、批量、分頁等操作,
在這節,我們將學習,如何集成 MyBatisPlus、通用CRUD、EntityWrapper 條件構造器、ActiveRecord 等基本操作,更有代碼生成器、插件擴展、自定義全域操作、公共欄位填充、Idea 快速開發插件等高階技術.,
同時會涉及到 MyBatis 框架相關的原理,需要我們提前對Mybatis 有一定的了解,
Git
我們把上面的內容學習完之后,其實就已經可以開始上手寫專案了,
但是以后作業肯定不會是一個人單打獨斗,而是需要和大家一塊協同開發,但是協同開發不可避免的就會遇到代碼沖突,就是兩個人同時修改某一塊區域,最終以誰的代碼為準?

Git-網圖
這個時候 Git 就出現了,Git 一個最重要的功能就是 版本控制,讓我們在開發程序中管理我們對檔案、目錄或工程等內容的修改歷史,方便我們查看更改歷史記錄和備份,以便恢復以前的版本,
本節主要講解:Git安裝程序,本地庫基本操作、遠程基本操作、碼云的注冊和使用、IDEA中集成Git操作以及GIt分支管理
SpringBoot
其實談到 SpringBoot 的時候,我們不得不說它和SpringMVC 的關系,SpringMVC 相當于一輛自動擋的汽車,而 SpringBoot 相當于把手動擋變成了自動擋,同時加入了無人駕駛等功能,讓你開車更加省心,但是車的主體功能還是不變的,你還是需要使用到 SpringMVC,
SpringBoot 因為遵循約定大于配置,大量減少了組態檔的使用,讓開發人員不需要定義樣板化的配置,從而使得開發變得更加簡便,提高了我們的編碼效率,

SpringBoot-網圖
SpringBoot 本身并不提供 Spring 框架的核心特性以及擴展功能,只是用于快速、敏捷地開發新一代基于 Spring框架的應用程式,同時 SpringBoot 并不能替代 SpringMVC,它只是簡化了 SpringMVC 相關配置,
雖然說,小伙伴們直接上手 SpringBoot 也未嘗不可,但是如果在不了解 SpringMVC 原理的情況下就使用其進行開發,這叫知其然不知所以然,不是正確的學習方式,
在本節,將介紹 SpringBoot的使用和內部原理,其中包括 微服務概念、組態檔、日志框架的使用、Web開發、Thymeleaf模板引擎、Docker容器技術教程等,
Linux
在我們學習完 SpringBoot 后,其實就可以打包成 Jar 包然后部署到Linux服務器上了,雖然說在服務器上部署可能就是一條指令:java -jar ,但是以后我們難免需要在上面進行除錯和錯誤定位,因此,為了以后能夠了解運維相關的內容,所以我們也有必要去系統學習一波 Linux 的使用,

Linux-網圖
本章節,主要從Linux歷史、基本命令、專案實戰發布上線、等方面來講解,告訴我們一個專案是如何打包并且部署在阿里云服務器中的,
Docker
Docker 是一個開源的應用容器引擎,可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,同時容器是完全使用沙箱機制,相互之間不會有任何介面(類似于 iphone的 app ),更重要的是容器的性能開銷非常低,

Docker-來源網路
蘑菇博客也是使用了Docker進行部署的,最開始的時候,是通過拉取一個 CentOS 的鏡像,然后制作成容器,最后在上面安裝博客所需的環境:Nginx、Redis、Rabbitmq、MySQL 等,最后將容器再次打包成鏡像,發布到 DockerHub 上,其它小伙伴只需要拉取該鏡像,即可快速完成環境的搭建,
本章節中,將從 Docker概念、鏡像、容器、部署、Portainer可視化、容器資料卷、DockerFile、Docker網路 等方面鏡像講解,
Docker Compose
Docker Compose 屬于 Docker 的高階部分,在我們之前使用 Docker 的時候,需要定義 DockerFile 檔案,然后使用 docker build 、 docker run 等命令操作容器,然而微服務架構的應用系統一般包含若干個微服務,每個微服務一般都會部署多個實體,如果每個微服務都要手動開啟和關閉,那么效率是非常低的,耗費運維的成本,

Docker Compose-來源網路
這個時候 Docker Compose 就運營而生,它可以非常輕松、高效的管理容器,同時它也是一個用于定義和運行多個容器的Docker 管理工具,
在本章節中,主要講解 Docker Compose概念、Compose配置撰寫規則、使用Docker Compose一鍵部署 WordPress博客、撰寫微服務實戰、Swarm集群搭建、Raft一致性協議,
Redis
我們都知道大量查詢 MySQL 是比較耗時的,目前蘑菇博客其實有很多場景都使用到了 Redis 作為快取資料庫,例如:首頁內容的顯示,熱門的文章,資料字典,用戶的令牌資訊 等等,都是存盤在 Redis 中的,就目前企業級開發來說, Redis 也是使用的非常多,一些需要通過計算得到的資料,并且未來將會再次使用,都可以將其存盤在 Redis 中,來加快介面訪問的效率,

Redis圖片-來源網路
在本章節,將從 NoSQL談起,深入講解 Redis 的基本資料型別、擴展特殊型別、Java 操作 Redis、SpringBoot集成 Redis、Redis的事務、組態檔的詳解,同時在原理層面,將講解 Redis的發布訂閱模型、持久化機制、主從復制、哨兵模式、快取穿透 和 快取雪崩的處理,
Bilibili Redis最新超詳細版教程:
https://www.bilibili.com/video/BV1Mz4y1r7ii
RabbitMQ
MQ(Message Queue),即訊息佇列,談到佇列我們都知道,就是一個 先進先出的資料結構,而訊息佇列,就是將訊息存盤在佇列里,先存入的佇列就將會提前被消費,MQ 引入到系統中,就是有三個目的:異步、削峰、解耦
目前主流的訊息佇列主要有:Kafka、ActiveMQ、RabbitMQ、RocketMQ,關于各自的特點,請看下圖

image-20201222171358114
RabbitMQ 只是目前訊息佇列中的一種,因為最開始我被小兔子(RabbitMQ) 的控制面板吸引,所以在搭建蘑菇博客的時候,選擇了 RabbitMQ,當然,小伙伴們在學習的時候,也可以結合自己喜歡的 MQ,

RabbitMQ圖片-來源網路
蘑菇博客使用 RabbitMQ 的場景,主要是在 更新 Solr 和ElasticSearch 索引(用于全文檢索),以及發送郵件和短信,因為這些程序都是可以異步執行的,所以就使用了 RabbitMQ 的異步特性,
在本節,主要講解:MQ的概念、主流的MQ、RabbitMQ的安裝及配置、RabbitMQ的作業模式、佇列和交換機、SpringBoot專案整合RabbitMQ,
ElasticStack
如果你沒有聽說過 Elastic Stack,那你一定聽說過 ELK ,實際上 ELK 是三款軟體的簡稱
ELK = ElasticSearch + Logstash + Kibana
隨著 Beats 的加入,原來的 ELK 體系變成了 ElasticStack,即
ElasticStack = ElasticSearch + Logstash + Kibana +Beats

ElasticStack技術堆疊
在本章節,我們將學習到 ElasticStack 技術堆疊,主要包括如下內容:
Elasticsearch 基于 Java,是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,Restful 風格介面,多資料源,自動搜索負載等,
Logstash 基于 Java,是一個開源的用于收集,分析和存盤日志的工具,
Kibana 基于nodejs,也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的Web 界面,可以匯總、分析和搜索重要資料日志,
Beats 是 Elastic 公司開源的一款采集系統監控資料的代理agent,是在被監控服務器上以客戶端形式運行的資料收集器的統稱,可以直接把資料發送給 Elasticsearch 或者通過Logstash 發送給 Elasticsearch,然后進行后續的資料分析活動,
如果細心觀察的小伙伴,可以看到蘑菇博客的架構圖中,日志收集模塊,其實就是使用 ElasticStack 實作的,同時全文檢索也使用到了 ElasticSearch

SpringCloud
微服務 是一種用于構建應用程式的架構方案,微服務架構與傳統架構的區別在于,微服務可以將應用拆分成多個核心功能,每個功能都被稱為一項服務,可以單獨部署,這也意味著各項微服務在作業(出現故障時,不會相互影響),關于微服務的更多理解,可以參考 martinfowler 的論文
https://martinfowler.com/articles/microservices.html

martinfowler關于微服務的論文
蘑菇博客最開始的架構是基于 SpringCloud 進行搭建,但是后面隨著 SpringCloud 各種組件停止更新,進入維護階段,后續技術組件的升級和替換策略方案選型,最終將 SpringCloud 升級為 現在的 SpringCloud Alibaba 架構,
在本章節中,學習 SpringCloud 各個組件,例如:Eureka、Feign、Hystrix、Ribbo、Config、Zuul、Zipkin 等,同時順應時代變化,加入了 SpringCloud Alibaba 相關組件的,例如:Nacos、Sentinel、Seata 等技術,同時對微服務中的服務降級、服務熔斷、服務限流、hotkey控制、分布式統一配置管理、分布式全域事務控制、RabbitMQ與Stream整合、Nacos和Nginx配置高可用集群等技術進行學習,
Bilibili圖靈最新版SpringCloud教程:
https://www.bilibili.com/video/BV1Wp4y1r7GE
演算法學習
首先我推薦的就是劍指Offer,里面都是一些經典的題型大概 67題,如果劍指Offer的演算法題刷完的話,那就可以繼續去LeetCode上刷題了,leetcode上刷題的話,也是要有針對性,比如,你可以優先選擇熱門的題目
leetcode: https://leetcode-cn.com/problemset/all

LeetCode熱門題目
如果時間允許的話,當然可以采用題海戰術,把Leetcode的中等題目都進行掃盲式的學習,
如果時間不允許的話,那就需要站在別人的肩膀上學習了,比如可以合理的使用 牛客網搜索,根據前面人面試總結出的高頻題,來進行突擊性的訓練,
以位元組跳動為例:搜索 位元組跳動 高頻

高頻題搜索
能看到會有人總結出來,其它人在面試時候遇到的原題,而且這些題目會反復的出現,大家如果就打算沖某些大廠的話,最好把這些高頻演算法題都過一遍,一定要學會站在前人的肩膀上進行學習,
計算機基礎課程
前面講的都是關于 Java 方面的,但是并不是說計算機基礎(資料結構、作業系統、計算機網路、資料庫),就可以放下警惕了,其實他們同樣也是高頻的考點,非常的重要,
比如計算機網路:HTTPS 和 HTTP、TCP和 UDP 相關知識點,同時隨著面試的內卷化,難度也會不斷加深,關于三次握手和四次揮手,要求你能描述每次狀態碼的變化,可能還會問 為什么TCP連接是三次握手,而不是兩次;為什么是四次揮手而不是三次等等一系列的連環套路,
計算機網路,我主要就是跟著Bilibili韓立剛老師的視頻教程來學習的
Bilibili韓立剛老師的視頻教程:https://www.bilibili.com/video/BV1WK4y1f71A
關于作業系統,我之前都是根據博客來進行學習的,比如看一些:執行緒和行程的區別,以及如何通信,然后死鎖相關、銀行家演算法、虛擬記憶體、磁盤調度等
如果時間充裕,還是推薦進行系統的學習一下,小伙伴推薦的作業系統課程,B站第一中文作業系統當之無愧~
作業系統(哈工大李治軍老師) :https://www.bilibili.com/video/BV1d4411v7u7
問到資料庫的話,可能會叫你寫SQL陳述句,或者講述一下MySQL的索引,然后就能講到B樹 、B+樹、聚簇索引和非聚簇索引、MySQL索引優化,分析某條SQL陳述句走了那些索引(explain)、MySQL行鎖和表鎖 等,
如果是專案做的比較多的話,可能還會問你資料庫的分庫分表操作,或者MySQL的主從復制,
同時關于資料庫,可能還會問到你快取相關,比如Redis,從Redis就能延伸出很多知識點了,Redis底層資料結構、跳躍表的實作、Redis的持久化策略AOF和RDB、Redis的快取穿透、快取雪崩、Redis的主從復制原理 和 Redis的哨兵原理,同時像Redis的一致性Hash問題都有可能問到,
同時可能還會結合專案來問,比如問你專案中,高并發環境下,先操作資料庫還是先洗掉快取?或者在Redis主備切換時的資料丟失問題,異步復制和集群腦裂等等,
上次位元組跳動的時候,就從Redis問到了過期策略,最后叫我講解一下LRU演算法,并要求我能手動實作,
圖靈MySQL資料庫高級:https://www.bilibili.com/video/BV1b5411G7uF
圖靈超經典Redis教程:https://www.bilibili.com/video/BV1Mz4y1r7ii
關于Linux在面試這塊,主要被問到Linux下的一些指令,例如:如何查看日志,查看埠,查看系統負載情況,個人的話,如果想要系統的學習Linux,推薦閱讀:鳥哥的Linux私房菜,這本書我是購買過的,
鳥哥的Linux私房菜(在線):http://cn.linux.vbird.org/
識訓果實
我整個秋招其實只面試了三家公司:位元組跳動、京東、滴滴出行
-
位元組跳動:三天走完面試流程,最后拿了Offer
-
京東:兩輪技術面通過,HR面掛 (這個掛的莫名其妙,感覺被KPI了)
-
滴滴出行:一天完成三輪技術面試,最后拿到SP意向書,
從2020年2月份開始為秋招而準備,到我們學校開學后,大概在6月20號左右,就開始準備投遞簡歷了(在這里我特別建議小伙伴們把握好提前批,因為有些公司的提前批是直接免筆試的),
位元組跳動是我面試的第一家公司,當初面試位元組很大的原因還是我的本科小伙伴找他同學幫我內推的(在這里特別感謝堯堯和大壯)

小伙伴幫我咨詢內推情況
在等待一段時間后,收到了位元組跳動杭州分部的Data部門面試的通知,

面試邀約
不得不說,位元組跳動的效率還是非常的快,就完成了流程:6月28日:第一面 + 第二面;6月30日:第三面 + HR面;7月7日:意向書

面試通過發放意向書
其實在拿到位元組跳動的Offer后,就準備躺平了,因為位元組也是之前一直心心念念的公司,這也算了卻了一樁心愿,不過,如果想沖擊更高的薪資的話,那么我建議你可以多面幾家,因為這樣在面對公司給予的薪資,才有可以商量的余地,
結束語
如果你和我一樣,本科出生不好,研究生也讀了一個雙非的學校,那么我們就更需要趁早準備,學歷不行,那么就靠能力吃飯,好在就互聯網公司而言,其實不是特別看重學歷,只要你擁有本科學歷,然后擁有比較強的能力的話,都可以吃上互聯網這碗飯,
但是既然選擇了從事 IT 開發 ,那么我們就需要時刻有危機意識,也就是在要求我們需要終生學習,不斷的去學習和挑戰新的難題,
就拿Java開發來說,你可能學習了SpringBoot+MySQL就可以開發了,但是我們不能僅僅滿足于此,我們還需要去嘗試著去了解微服務相關的知識,在我們業務只用MySQL的時候,我們可以去學習Redis、Memcached相關的知識,
只有這樣我們才能不斷保持自己的核心競爭力,讓自己立于不敗之地,只有這樣我們才能夠去沖擊高薪,而不是等到 35 歲就被優化,
我們要知道,五年作業經驗不等于 一年作業經驗用五年,而是在這五年的時光里,不斷的去學習新的知識,去解決各種問題,最后積累出來的經驗,
最后,如果你和我一樣出身不好,家里也沒有礦,并且決心從事軟體開發,那么我希望你能夠和我一起,投入時間,投入精力去學習,現在多流汗,回頭多拿錢!
最新2021整理收集的一些面試題(都整理成檔案),有很多干貨,包含mysql,netty,spring,執行緒,spring cloud等詳細講解,也有詳細的學習規劃圖,面試題整理等,
點擊 : 一線大廠核心技術分享 分享最新技術,走在知識前端
點擊一起學習 暗號:csdn 最新學習資料+簡歷優化資源


后續會分享更多純干貨文章,希望能真正幫到你們,你們的支持就是我最大的動力!歡迎關注點贊啊!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245207.html
標籤:其他
上一篇:計算機組成原理簡答
下一篇:2020北郵復試回憶錄
