順利找到工作了!
二哥的編程知識星球 (點擊了解詳情)正式上線了,來和 170 多名 小伙伴一起打怪升級吧!這是一個 Java 學(xué)習(xí)指南 + 編程實戰(zhàn)的私密圈子,你可以向二哥提問、幫你制定學(xué)習(xí)計劃、跟著二哥一起做實戰(zhàn)項目,沖沖沖。
你好,我是二哥。
今天來分享一位知識星球內(nèi)部小伙伴的投稿,記錄了自己從考研失敗被迫找工作,到順利找到自己滿意的工作的經(jīng)歷!走心了,看完之后很受觸動!
下面是正文。
我來自一個沒什么名氣的雙非一本,自己的專業(yè)是計算機科學(xué)與技術(shù)。在大二的時候,由于家里的一些影響和我自己對于未來的迷茫,正如你們所見,我走向了考研這條路。
去年,因為參加考研錯過了秋招,走出考場的那一刻,我便知道自己在研究生這條路上已經(jīng)沒辦法再繼續(xù)走下去了。我認(rèn)認(rèn)真真的準(zhǔn)備了將近一年半的時間,最后由于某校復(fù)試線漲幅 45 分導(dǎo)致遺憾敗北,我很失落,我很難過,但同時我也知道這樣的自甘墮落并不能讓我獲得一個美好的未來,并不能讓我實現(xiàn)自己早已經(jīng)規(guī)劃好的未來計劃。于是我轉(zhuǎn)頭就加入了數(shù)以百萬計的春招大軍,當(dāng)時的我還不知道前方到底有什么在等著我。
因為自己的大學(xué)專業(yè)與 Java 相關(guān)的課程僅僅只有兩門,并且由于當(dāng)時的不重視也導(dǎo)致自己對于 Java 這門語言的了解僅僅停留在面向?qū)ο笙嚓P(guān)知識以前,只會一些簡單的條件判斷、循環(huán)控制等。
在前期的準(zhǔn)備時,通過各大招聘網(wǎng)站和向相關(guān)前輩的咨詢,我漸漸明白了在這之后還有封裝、繼承、多態(tài),以及企業(yè)開發(fā)用到的框架、分布式、微服務(wù)等知識。看著用鼠標(biāo)甚至一下滑不到底的學(xué)習(xí)路線圖,我有些恐懼,但是時間沒有給我繼續(xù)患得患失的機會,咬咬牙,來吧!
備戰(zhàn)面試
下面是我從開始學(xué)習(xí)直到現(xiàn)在的大致時間表。
一月中上旬開始根據(jù)馬士兵的 Java SE 視頻進行學(xué)習(xí),我知道相比于后面的一些知識,這里的基礎(chǔ)是十分重要的,因此我在每天聽完幾個小節(jié),完成作業(yè)之后會在晚上重新進行知識點的復(fù)盤,將自己這一天所學(xué)到的知識以博客的形式記錄下來,并且在第二天抽碎片時間進行前一天的知識復(fù)盤。這樣的日子大概持續(xù)到了二月中旬。
二月中旬到二月底是我進行前端(HTML+CSS+JavaScript+Vue+ElementUI 套件)學(xué)習(xí)的時間段,這里我僅僅是掌握了一些比較基礎(chǔ)的語法知識,寫了幾個 Demo 和兩個大作業(yè)就結(jié)束了這方面的學(xué)習(xí),因為只是為了給自己后面的項目做鋪墊。同時因為這部分入門比較輕松,自己也會經(jīng)常復(fù)盤 SE 的相關(guān)知識。
三月初開始我已經(jīng)陸陸續(xù)續(xù)開始關(guān)注牛客網(wǎng)、Boss 直聘、攜程上面的消息。并一邊進行 Java EE 知識的學(xué)習(xí)一遍迭代自己的項目。從最基本的 SSM 迭代到后來的 SpringBoot,在這段時間我明顯的感知到經(jīng)常動手去實現(xiàn)自己的想法,才是這個階段學(xué)習(xí)的最好方法。
大概到三月二十號,我就基本完成了自己的項目功能,雖然說還有部分功能僅僅停留于設(shè)想之中,但是因為是重復(fù)的工作,考慮到時間的問題就沒有再繼續(xù)完善。從這個時間段一直到五月中旬,都是在不停的筆試面試,準(zhǔn)備八股項目經(jīng)歷中(這里感謝 G 哥和他的網(wǎng)站 JavaGuide 以及星球內(nèi)部的 《Java 面試指北》 ,可以說是我全程準(zhǔn)備八股的明燈?。。。?。最終功夫不負(fù)有心人,在五月中旬,我選擇了自己最滿意的 offer,上岸了。

我的面經(jīng)
以下是字節(jié)飛書,哈啰,谷歌中國,美團面試和其他中小廠被問到的知識點,列出這些技術(shù)點以供大家參考。
Java 基礎(chǔ)篇
JDK & JVM & JRE 的區(qū)別 包裝類型的常量池技術(shù) 接口和抽象類的區(qū)別 String、StringBuffer、StringBuilder 的區(qū)別 泛型擦除的原理 反射的應(yīng)用場景 異常的類型,具體的例子有哪些 說說常用的容器和各自的特點 ArrayList 的擴容機制 HashMap 源碼實現(xiàn) ConcurrentHashMap 的底層實現(xiàn) Lambda 表達(dá)式有什么好處,什么壞處,應(yīng)用場景有哪些
Java 并發(fā)篇
為什么要使用多線程,有什么好處,舉例具體場景 線程的生命周期以及每個周期進入和結(jié)束的標(biāo)志 避免死鎖的三個必要條件 簡述哲學(xué)家進餐問題和銀行家算法 為什么我們調(diào)用 start() 方法時會執(zhí)行 run() 方法,為什么我們不能直接調(diào)用 run() 方法? 場景題:如何實現(xiàn)一個實時排序的游戲戰(zhàn)力榜單 場景題:如何實現(xiàn)一個競技場挑戰(zhàn)功能,考慮高并發(fā) volatile 的用法 synchronized 和 ReentrantLock 的區(qū)別 樂觀鎖和悲觀鎖的底層實現(xiàn) 不加鎖如何保證線程安全 synchronized 是可重入鎖么 使用了 vector 就一定能保證線程安全嗎 多線程的實現(xiàn)方式 場景題:高并發(fā)的情況下保證數(shù)據(jù)的一致性怎么做到 場景題:有 10 個線程分別對 i = 0 做 10 次自增操作,最后 i 的值會是多少,為什么 ThreadLocal 的原理 場景題:在生產(chǎn)者消費者問題中怎么保證當(dāng)消費者用完產(chǎn)品后生產(chǎn)者會馬上得知,不能使用 while 循環(huán)去解決 Java 的線程池類型有哪些 Java 線程池的參數(shù)以及其具體意義 線程池的拒絕策略
JVM 篇
JVM 的基本結(jié)構(gòu) 雙親委派模型的好處 運行時數(shù)據(jù)區(qū)的基本結(jié)構(gòu),各種結(jié)構(gòu)都有什么用途 垃圾回收策略 垃圾回收器都有哪些 如何判斷一個類是無用的類 查看運行內(nèi)存,JVM 狀態(tài)有什么方法 G1 回收器與之前的回收器相比最大的不同是什么 類加載的過程是什么,每個過程具體做到了什么事 JVM 的常用參數(shù)有哪些 JVM 調(diào)優(yōu)常用的手段是什么
Spring 篇
Spring 的特性和優(yōu)勢是什么 Spring 有哪些組件 場景題:如果實現(xiàn)一個你自己的 Spring 框架需要考錄那些方面,簡單聊聊 Spring MVC 底層實現(xiàn)原理 IOC 和 AOP 具體介紹一下 Spring Bean 是什么 IOC 和 DI 是什么關(guān)系 IOC 配置的三種方式 依賴注入的三種方式 為什么推薦構(gòu)造器注入方式? 場景題:在使用構(gòu)造器注入方式時注入了太多的類導(dǎo)致 Bad Smell 怎么辦 AspectJ 注解方式接觸過嗎,具體說說有什么特點和不足 Spring 為何不能解決非單例屬性之外的循環(huán)依賴? Spring 中 Bean 的生命周期介紹一下 場景題:自定義一個你自己的 starter 怎么實現(xiàn)(開共享屏幕實現(xiàn))
MyBatis 篇
接口層和數(shù)據(jù)庫交互的方式有哪些 簡述 MyBatis 的層次結(jié)構(gòu) sqlSessionFactory 與 SqlSession 介紹一下 Excutor 的概念 動態(tài) SQL 有哪些,都有什么用途 為什么要使用連接池 $ 和 # 的區(qū)別
計算機網(wǎng)絡(luò)篇
OSI 和 TCP/IP 介紹一下 HTTP 和 HTTPS 的區(qū)別 HTTPS 的加密手段是什么 三次握手的過程以及每一次起到了什么作用 四次揮手的過程以及每一次起到了什么作用 TCP 協(xié)議中的流量控制起到什么作用 介紹一下 ARQ 協(xié)議 從輸入 URL 到頁面加載發(fā)生了什么 HTTP 如何保存用戶狀態(tài) Cookie 的作用是什么 Cookie 和 Session 有什么區(qū)別 HTTP 狀態(tài)碼有哪些
數(shù)據(jù)庫篇
數(shù)據(jù)庫設(shè)計通常分為哪幾步 MySQL 的分頁怎么做的 MyISAM 和 InnoDB 的區(qū)別 MySQL 日志都有什么,分別有什么作用 讀鎖和寫鎖實現(xiàn)的底層原理 表級鎖和行級鎖的實現(xiàn)原理 事務(wù)的特性 并發(fā)事務(wù)帶來的問題有哪些 事務(wù)隔離級別有哪些 場景題:MySQL 對于千萬級的數(shù)據(jù)庫或者大表怎么處理 MVCC 解決什么問題 索引有什么作用 索引的底層數(shù)據(jù)結(jié)構(gòu) 為什么 InnoDB 使用 B+樹作為索引的數(shù)據(jù)結(jié)構(gòu) 索引有哪些種類 為什么會出現(xiàn)回表查詢,怎么避免 解釋一下最左前綴法則 覆蓋索引是什么意思 MySQL 讀寫分離方案 MySQL 主從復(fù)制是什么意思 MySQL 主從的延遲怎么解決
Redis 篇
為什么 Redis 是單線程的 Redis 一般有哪些使用場景 Redis 有哪些數(shù)據(jù)類型,每一種都有什么實際應(yīng)用 sds 存在的意義 為什么會設(shè)計 Redis Stream Redis Stream 消費者崩潰帶來的會不會消息丟失問題 Redis Steam 壞消息問題,死信問題 Redis 的持久化機制是什么 AOF 是寫前日志還是寫后日志 Redis 過期鍵的刪除策略有哪些 Redis 內(nèi)存淘汰算法有哪些 Redis 如何做內(nèi)存優(yōu)化 Redis 事務(wù)相關(guān)命令 Redis 事務(wù)中出現(xiàn)錯誤的處理 為什么 Redis 不支持回滾 Redis 緩存有哪些問題,如何解決 Redis6.0 之前為什么一致不用多線程
最后
不得不承認(rèn)從這一次找工作的經(jīng)歷中讓我成長了許多,從不斷地學(xué)習(xí)復(fù)習(xí)中我明白了扎扎實實學(xué)習(xí)和不斷復(fù)盤的重要性、從每天背不完的八股文和熬夜刷視頻中我明白了勝利成果的來之不易;從最多的時候每天 3-5 場面試中我明白了實踐是檢驗學(xué)習(xí)成果的唯一方式;從自己手中不斷接到的 offer 和等待心儀的 offer 的焦慮中我明白了原來勝利果實的滋味是這么的甘甜。
再次感謝二哥、JavaGuide 以及星球內(nèi)部的 《Java 面試指南》 ,還有群里的小伙伴們。感謝能夠給我 offer 的公司的認(rèn)可,也在這里表達(dá)我對拒絕一些 offer 的歉意。
我們都是非常平凡的人,為了生活,為了理想,為了家庭,為了未來。只有自己的目標(biāo)清晰,并付出不斷的努力,才能勉強達(dá)到一個普普通通的水平。在大環(huán)境普遍唱衰的互聯(lián)網(wǎng)當(dāng)下,“卷”已經(jīng)不再是前幾年大家口中的玩笑話,也不再是什么包含著濃濃貶義的詞匯,而是已經(jīng)演變成了一種風(fēng)氣,當(dāng)我們無法改變世界,能做到的只有改變我們自己。
總有一天我們會扛起家里的大旗,成為父母的依靠,希望包括我在內(nèi)的大家,不要在那個時候后悔當(dāng)初為什么沒有拼盡全力,希望到了那個時候,我們可以淡淡的從容面對。
最后,在 Java 開發(fā)這條路上的旅程對我而言才剛剛開始,所謂師傅領(lǐng)進門,修行在個人。希望看到我,認(rèn)識我的人能夠多多包涵這個剛二十出頭的小伙子,畢竟他還有許多的路要走,許多的虧要吃。
一路走來有你們,真好!
沒有什么使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不系之舟。
推薦閱讀:

