從機械自動化專業轉行到Java工程師的學習之路


秋招已經過半,突然想寫篇文章總結下自己的 Java 轉行之路和秋招提前批、暑期實習的面試經歷及個人感悟。因為要寫的東西比較多,拆分成三篇:

第一篇:Java 轉行之路

第二篇:Java 面試必備知識點

第三篇:秋招面經集合

 

個人基本情況

本科:機械制造及其自動化專業

研究生:機械制造及其自動化專業

實驗室項目:兩項校企合作項目

實習:兩段互聯網實習經歷:滴滴出行、拼多多

技術棧:Java 后端

 

學習時間軸

2017.08-2017.09:HTML5、CSS、JavaScript、JQuery

2017.10-2018.03:Java基礎、Servlet、JDBC、JSP、MySQL、Spring、Struts2、Hibernate

2018.04-2018.05:數據可視化項目(SSH)

2018.06-2018.10:兩網融合項目(SSH)

2018.11-2019.01:數據結構與算法、Java 集合類源碼、Java 虛擬機、Java 並發編程、劍指 offer、計算機網絡協議、計算機操作系統、設計模式、SpringMVC、MyBatis

2019.02-2019.04:滴滴出行實習、Maven、Git

2019.05-2019.06:刷題(左神、LeetCode)、Redis、RabbitMQ

2019.07-2019.09:拼多多實習、Dubbo、Kafka

 

暑期實習 offer

騰訊:(深圳)TEG 后端開發工程師

拼多多:(上海)后端開發工程師

華為:(杭州)CloudBU 軟件開發工程師

思科:(杭州)大數據開發工程師

愛奇藝:(上海)后端開發工程師

 

秋招 offer

百度:(上海研發中心)后端開發工程師

字節跳動:(深圳)后端開發工程師

拼多多:(上海)后端開發工程師

順豐科技:(深圳)后端開發工程師(offer 審批中、sp 專場)

騰訊:(深圳)IEG 后端開發工程師 復試

我為什么要轉互聯網?

 

專業興趣

對機械專業缺乏興趣愛好:本科雖然成績排名還比較靠前,可能是因為一直覺得既然不知道自己喜歡什么,那就學好當前的專業。在本科畢設的時候接觸了一些軟件相關的東西,發現自己對軟件相關的東西要比機械感興趣的多,所以在研究生期間就和導師溝通參與的都是軟件相關的項目。一直覺得興趣愛好才是職業成長的最好驅動力,至少可以決定你在某個行業的深度。

 

未來學業規划

未來學業規划:研一開學就對讀不讀博進行了認真的思考,綜合自己的性格、研究所的課題后決定不讀博。因為如果讀博的話,最好還是多搞一些基礎研究,不要花過多的時間在軟件項目上,因為都是簡單的搬磚,對於博士大佬來說有點“浪費時間”。

 

薪資

機械專業的薪資和互聯網行業的薪資着實差距太大,這也是很多人轉行的最大動力之一吧。不過個人覺得還是興趣為先,薪資只能作為職業選擇的加分項,畢竟各行各業都有自己的優缺點。

 

就業城市

互聯網城市相對來說都是在一線,北、上、廣、深、杭,如果你要是沒有打算留在一線城市,轉行也要慎重,畢竟一線以下城市互聯網公司可能比較少,發展也比較受限。

 

個人生活

每個人對生活的追求都是不一樣的,有的人喜歡互聯網的9、9、6,也有人喜歡國企/外企的 9、5、5。我了解到的國內大部分互聯網行業的工作強度是要高於其他行業,但是也是要分公司的。有一些國企或者外企性質的互聯網公司還是很舒服的,錢也不少。

Java的自學之路

我是2017年8月開始自學的 Java。

最開始花了大概兩個月時間學習了 web 前端:HTML5、CSS、JS,后面都在學習后端的知識。我主要是通過視頻、書籍、博客學習的,大概說下我的學習歷程和一些覺得不錯的書籍的推薦吧。

 

學習歷程

第一階段:視頻學習

主要是在嗶哩嗶哩上刊培訓視頻。看視頻學習的最大好處就是入門很快,看一遍,再跟着敲一遍,但是缺點就是時間會花費長一些。我入門階段基本上都是看視頻學習,建議是找最新的視頻學習,因為培訓機構也會根據公司每年面試的側重點調整自己的教學方案。如果找不到資源,可以和博主說下,還是收藏了一些。

第二階段:書籍學習

視頻學習一般都是比較基礎和偏向案例實現的的教學,如果要想系統的了解某一模塊的知識,閱讀專業書籍是少不了的。如果有時間肯定多讀一些書好,但是最優的做法是在有限的時間內閱讀完經典書籍。拿 Java 后端來說,《Java編程思想》、《深入理解Java虛擬機》,毫不誇張的說幾乎每次面試都會有很多知識點都是出自這些書中。所以,這類書籍,多讀幾遍。最好看完后,能夠寫出自己的讀書筆記。我一般是寫讀書筆記前,會看一看別人的讀書筆記,看看自己對書中的知識點是否有理解偏差或者有遺漏的地方。

第三階段:博客學習

這一階段是一個持續的過程,主要是寫博客和看博客。總感覺看了書很快就忘了,所以為了以后高效的復習,開始寫了一些博客,當然博客內容主要來源自書本以及一些大牛的博客,再加上自己的理解。堅持寫博客,先仿寫/轉載別人的,再進行自己的原創,這樣一點點的深入,會有很大收獲

第四階段:實驗室項目

一共做過兩個校企合作項目,這兩個項目雖然很簡單,都是單點的 web 服務,但是卻給自學 Java 帶來了很大的幫助。 而且在最開始找實習的時候,這兩段項目還是起了很大的作用。個人感覺項目簡單也沒有關系,只要你把項目中涉及到的知識點都搞清楚,還是很加分的。至少把自己做的東西弄懂了。

項目1:可視化項目。這個項目比較簡單,采集機床的數據,然后存儲到數據庫里,最后再進行二維、三維的圖、表展示。主要涉及的技術是:Java、Spring、Struts2、Hibernate、Json。

項目2:兩網融合項目。負責其中一個服務,通過發布 WebService 接口的形式實現不同服務之間的文件上傳、下發功能。主要涉及的技術是:Java、WebService、Spring、Struts2、Hibernate、XML。

第五階段:實習

個人觀點:實習是非常重要的。

我是在研一的暑假開始投遞了一些公司,大公司基本上要么是沒有面試機會,要么就是一輪游。但是還是比較建議大家盡早投遞一些公司試試水,我一直覺得通過面試復習是非常高效的。

這里給大家幾點建議:

1. 先投遞一些小公司,鍛煉自己的面試表達能力;

2. 再投遞一些不會去的大公司,鍛煉算法、完善基礎知識;

3. 最后再投遞目標公司,最好也是難度大的放在最后面。

資源推薦

1、書籍:

Java基礎:《Java編程思想》、《深入理解Java虛擬機》、《Java並發編程之美》

數據庫:《SQL必知必會》、《高性能MySQL》

計算機網絡:《圖解HTTP》、《計算機網絡》

操作系統:《深入理解計算機系統》、《鳥哥的Linux私房菜》

數據結構與算法:《算法4》、《劍指offer》

設計模式:《大話設計模式》

2、github

3、csdn

付費

極客時間:

我是比較推薦這個付費軟件的,我訂閱過《數據結構與算法之美》、《MySQL 實戰》、《趣談網絡協議》、《從0開始學微服務》。這種專欄最大的好處在於每篇文章都比較短,大概10-15分鍾,可以在公交車、排隊時閱讀。知識都是積累出來的,而且每篇文章都是某個知識點的精華講解,簡單易懂。

左神算法:

算法在應屆生求職面試中的重要性就不用“大寫加粗”了。左神算法分為初、高級兩部分。初級主要講解基本的數據結構及其相關的題目,如:棧、隊列、鏈表、樹、圖、貪心算法、動態規划等。高級主要講解一些常用的算法,如:KMP、Manacher、BFPRT、蓄水池算法、滑動窗口、單調棧等。

牛客網項目:

牛客網項目分為初、中、高級,我做了中級《秒殺系統》的項剛要找實習並且沒有項目的同學,我還是比較推薦做下秒殺的項目,雖然這個項目已經被很多人寫進簡歷里了,但是只要你把其中涉及的知識點(扣庫存、緩存、消息隊列等)都弄清楚了,這就是你的項目。

工具推薦

思維導圖 Xmind:很好用,基本上都用過。

印象筆記:在線同步筆記、好友分享。

IDEA:做 Java 開發的盡量使用 IDEA 代替 Eeclipse。

Git:版本控制更加推薦 Git,SVN 用的很少了。

Postman:一款功能強大的網頁調試與發送網頁 HTTP 請求的軟件。

實習的那點事

無論是日常實習還是暑期實習,都要先想清楚一件事情:我為什么要選擇這份實習?

個人建議是最好能有兩段實習:暑期實習面試前(每年3月份)有一段日常實習經歷,可以用在暑期實習的面試中。還有就是暑期實習,最好去能夠轉正的大廠,這樣有轉正 offer 保底,不至於很慌。

 

實習的好處

1. 暑期實習有轉正機會:很多大廠,比如:阿里、騰訊、拼多多等都是很喜歡留用實習生的,畢竟企業培養一個實習生肯定是賠本的買賣,稍微有點貢獻的基本上都可以留下來。甚至有一些公司的暑期實習 offer 就可以代表秋招 offer,因為面試難度都是一樣的;

2. 面試加分:這也是我認為最重要的一點,實習可以增加簡歷篩選通過的概率,更會在面試過程中凸顯出很大的作用。如果你有一段還不錯的實習經驗,在面試的時候可以挑這段實習中做的事情來說。如果沒有實習經歷,那只能狂懟基礎知識了,而且有些公司和面試官更偏向於要有過實習經歷的應屆生;

3. 基礎知識的鞏固:我經常會有一種感受,很多學過的知識,看過的面經,只有在真正用到時,才會理解的很深刻,通過實習可以鞏固自己的基礎知識;

4. 編碼習慣的規范:自己平時寫代碼可能不會注意那么多,只要實現功能就行了。但是實習過程中往往都是要先熟悉所在小組現有的工程代碼,可以看看大佬們是怎么寫代碼的,比如:設計模式的使用、日志的規范格式、單元測試等等;

5. 工程業務開發能力的鍛煉:一般實習生都會先分一些小需求做,可以學到如何和產品溝通需求、開發、測試、上線一整套流程。而且在互聯網公司實習,特別是大廠,基本上都是分布式的服務,可以學到很多分布式的實際應用場景,可以利用這樣的機會學習分布式框架、分布式事務等等知識;

6. 提前了解一個公司:這里我有一個個人建議,千萬不要只聽別人說某某公司怎么樣,一定要自己深入的去了解下。因為很多人都“黑”我多的上班時間,去實習后發現並沒有說的那么嚴重,而且我是在 C 端部門,如果是基礎架構或者 B 端可能會下班更早一些。因為大廠部門很多,下班時間是要看部門和個人工作效率的。除了工作時間,最重要的是你去實習,你可以了解到公司的企業文化、價值觀,Leader 的風格、團隊的技術等等;

 

實習的弊端

1. 有些互聯網公司對實習生要求還是比較高的,可能會分配比較多的需求。那么這樣的話,就沒有太多的時間復習;

2. 秋招筆試一般都是兩個小時,如果在實習的話,多多少少會有些不方便;

3. 還有一種實習最坑的,實習快結束的時候,leader 說沒有轉正機會。遇到這種情況,也是欲哭無淚。

 

實習要做的事情

1. 實習最重要的事情肯定還是能夠學到東西。要利用好公司的資源,盡量多學習一些實習團隊項目中涉及的知識點。因為不懂的隨時可以問團隊中的大牛們,一般都會比較耐心的解答。畢竟實際工程中的應用還是和書本上學來的有所差別;

2. 記錄好自己做的事情、遇到的坑,這樣方便以后面試的時候用。不要等到實習結束的時候再去補充,可能會忘記一些東西,因為一般互聯網公司日常開發都是使用自己內網的,離職后也沒有權限去訪問了;

3. 看公司的文檔資料,一般團隊都會有一個 wiki 文檔,記錄平時的開發需求及故障復盤。因為面試中經常會被問到“你開發中遇到過什么問題?你是怎么解決的?”,如果你覺得自己的問題比較簡單,就可以看看團隊的 wiki 故障記錄,再問下 wiki 的記錄者,只要把這個場景下的問題搞清楚了,就可以應用到面試中;

4. 一定要搞清楚自己做過的項目的全貌,一般面試中需要給面試官講清楚整個項目的結構,而不僅僅是你做的那一點點。所以,做需求之余,要搞清楚整個服務的業務邏輯。不然面試官會覺得你是一個只做需求,沒有思考的開發人員。

 

秋招提前批

 

什么時候開始復習?

如果你還在糾結這個問題,我可以很明確的告訴你: 現在就開始復習。參加過暑期實習面試和秋招的同學都有一個共同的感受就是復習的時間不夠。不要想面試前再去復習,那樣很容易會被吊打的,除非你基礎真的特別好,不然的話就從現在開始制定復習計划。可能你現在只是大二、研一的學生,那么還是要復習的,學過的東西,一定要及時復習,保留感覺,不然都堆積到最后復習,你會懷疑自己到底有沒有學過這些東西。

02

怎么復習?

我覺得怎么復習取決於距離面試的時間和你當前的技術水平。如果時間還比較多的情況下,是比較建議認真過一下每一個知識點,不要遺留下什么問題,否則在后續的面試中你就很有可能因為遺留下的個別問題“跪”的很慘,我是有過這樣教訓的。復習過的問題可以使用一些筆記軟件記錄清楚,方便下次復習。

如果時間不是很充裕,基礎又不是特別好,面試又得硬上的情況下,以面經為主,把要面試公司最近的面經都過一遍,然后再過一下每個知識點模塊中常被問到的問題。為了面試,實在不行就“背”。

03

什么時候投遞提前批最合適?

秋招提前批是非常重要的,大部分人都是希望在提前批能夠拿到保底 offer。2019年秋招提前批大概是在6月上旬就開始了(VIVO),然后7月中旬-8月中旬開始大規模面試。投遞提前批雖然重要,還是比較建議在復習差不多的情況下再投遞,或者說沒有怎么復習的情況下盡量不要投遞秋招心儀的公司,否則大概率只會去當“炮灰”。當然,也不要等到都復習好了再去投遞,因為大部分人都會發現永遠沒有復習好的那一天,感覺差不多了就開始投,邊面試邊復習。

04

復習的重點

1. 數據結構與算法:《劍指Offer》、LeetCode Top100、常考的一些算法:TopK、生產者消費者模式、多線程交替打印、HashMap 的簡單實現等等;

2. 計算機網絡:五層/七層協議、TCP 和 UDP 的區別、TCP 三次握手和四次揮手、HTTP 的特點、HTTP 與 HTTPS 的區別、HTTPS 過程等等;

3. 計算機操作系統:進程與線程的區別、死鎖的概念/檢測/避免、進程間的通信方式、內存管理等等;

4. 設計模式:單例模式、工廠三兄弟、適配器模式、代理模式、裝飾者模式等等,以及項目中和 JDK/Spring中用到過的設計模式;

5. Java 語言基礎:重載和重寫的區別、抽象類和接口的區別、String/StringBuilder/StringBuffer 的區別、關鍵字(static、super、this、transient)、異常、IO 流、反射、動態代理、序列化等等;

6. Java 集合類:HashMap 的 get、put、resize、JDK1.7 和 1.8、多線程下會發生什么問題、HashMap 和 HashTable/ConcurrentHashMap 的區別、ArrayList 和 LinkedList 的區別等等;

7. Java 並發編程:線程的狀態轉換、wait 和 sleep 的區別、synchronized 關鍵字、volatile 關鍵字、鎖:ReentranrLock、讀寫鎖等、線程池:核心參數、類型等等;

8. Java 虛擬機:運行時數據區、垃圾回收算法、垃圾回收器、垃圾回收策略、JVM 監控和調優、類加載機制、Java 內存模型等等;

9. MySQL:常用的 SQL 語句、索引的數據結構、類型及其優化、事務、鎖、存儲引擎、主從復制、分庫分表等等;

10. Spring:AOP:代理方式、JDK 動態代理的實現;IOC:Bean 的生命周期和作用域、單例 Bean 的線程安全問題;事務:隔離級別、傳播特性等等;

11. SpringMVC:核心組件、處理請求的流程等等;

12. MyBatis:分頁方式、延遲加載、一級和二級緩存等等;

13. Linux:需要掌握基本的操作指令;

14. Redis:基本的數據類型、使用場景、緩存穿透、緩存雪崩、持久化、緩存和數據庫雙寫一致性問題等等;

15. 消息隊列:使用場景、如何保證消息不被重復消費、如何保證可靠傳輸、如何保證順序性等等;

16. Zookeeper:主要功能、部署模式、狀態同步、通知機制等等;

17. 分布式:分布式框架 Dubbo :基本組件、協議、集群容錯模式、負載均衡策略等等;分布式事務及其解決方案、分布式鎖及其解決方案。

 

有完整的Java初級,高級對應的學習路線和資料!專注於java開發。分享java基礎、原理性知識、JavaWeb實戰、spring全家桶、設計模式、分布式及面試資料、開源項目,助力開發者成長!


歡迎關注微信公眾號:碼邦主


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM