<section>前端
<section>程序員
點擊上方「程序員江湖」,選擇「置頂或者星標」面試
你關注的就是我關心的!算法

做者:以大橘爲重 連接:https://www.nowcoder.com/disc...數據庫
樓主是19屆應屆生,去年在牛客學到了不少東西,在實習和秋招也收穫了一些offer(Java後端開發工程師)。在20屆春招即將開始之際,把整理了不少資料給你們分享一下,順便打個廣告233。編程
有點標題黨,學習Java可能有兩年時間,不過春秋招復習加起來大概就花了三個月(可是感受比以前學的內容加起來都多...)。後端
覆盤
首先要說的我本身確定不是什麼大神,也拿不到一堆ssp,只是想分享給你們,一個不是很聰明的人(我高中是文科生,數學什麼的不好),如何能盡本身所能找到一份程序員的工做。設計模式
學習歷程
- 大一的時候由於本身學習的專業就業前景通常,而且沒有作學術的志向,家境通常很想找份薪資高點的工做,而後知乎一股CS至上的風氣讓我下了轉專業的決心。大一的時候也並不清楚本身適不適合、能不能作這一行,尤爲是轉專業很容易,一直以來內心都沒什麼底。大一的時候自學了JavaSE,當時看了一噸的各類培訓機構的教學視頻,而後讀了幾本《Java核心技術》、《Java編程思想》等語法書,而後本身照着培訓結構的視頻作了個XX管理系統,而後大一就結束了。
- 大二一年過得很艱難,一年要上兩年的課(補大一的課),但仍是本身抽了一些時間去學JavaEE的技術(也是爲了作課程設計),好比Spring、Hibernate、Spring MVC等框架,還有MySQL、Redis等存儲技術,而後學了一點前端,勉強能本身寫個網站的demo。這時候對Java的原理以及框架的原理都不懂,只能說會用。並且當時培養了一種錯誤的觀念,就是框架學的越多,學的框架越牛逼,就好像本身也牛逼了,大把時間都跑去學各類框架了,寫了一堆demo。
- 大二下不知本身幾斤幾兩地參加了菜鳥的春招,結果一面還不到10min就GG了。緣由大概是一些專業課好比OS、網絡等都沒學過,記得當時問了一些好比Spring原理、Redis原理等問題,天然是啥都不會,還問了有沒有正式的項目經歷,寫了一堆demo的我天然也是沒有...
- 大二下大概也是正常上課,由於有門課的課程設計跟數據分析有關,又跑去學Python、Numpy、Pandas啥的,半途而廢了...
- 春招失敗,但仍是想去找個實習。在大二暑假開始前,學長介紹有個公司招暑期實習,而後就屁顛屁顛去了。結果當時準大三的我,還有幾個準大四的學長,面試好像就隨便問了幾個問題,就莫名其妙GG了...據說最後是要了準大四的學長...
- 大二暑假意識到只學框架是不夠的,最好是能有項目經驗,可是項目經驗也是要實習才能拿到的。此處能夠祭出這張圖。

沒有正式上線的項目經驗,就只能靠基礎知識補了。緩存
- 暑假補了補Java的併發、NIO相關的基礎,寫了一個聊天室項目(不知道爲啥後來就100+star了...);而後是讀了一些併發的書《Java併發編程實戰》。
- 而後是想起學JavaSE時候有個教程教如何手寫(只用JavaSE API)一個WebServer,而後就模仿着本身寫了一個,最初的版本也就1000行,後來春招又完善了一下。
- 固然又補了一些框架/中間件,好比SpringBoot、Dubbo、RocketMQ的學習,又寫了一堆demo。有一個demo(本身)以爲還不錯的,就是本身在本機上搞了一堆虛擬機模擬分佈式,分庫分表,還有用MQ來解分佈式事務的問題(其實也沒啥技術含量,只不過比單機的demo強一點...)
- 學框架/中間件的教程(一些什麼架構師教程233...)中看到了Netty,瞭解到Netty是一個網絡編程框架,作分佈式網絡通訊的(也就是作中間件的,不是搞應用開發的),讀了《Netty權威指南》,又寫了一些demo。
- 再後來...一言難盡,自制力不足去打王者榮耀了emmmm。
- 大三上的話課程也是有點多的,還有課程設計,爲了課程設計學了Vue.js和PHP(這部分對找工做來講實踐證實是沒用的...),而後想要讀一讀框架源碼的,就花了大概一兩週讀了Spring源碼,讀了《Spring源碼深度解析》,還寫了一些源碼解析文章(固然和網上流傳的大同小異),而後又本身模仿着《架構探險-從零開始寫JavaWeb框架》,本身又寫了一個簡化版的Spring IOC+AOP(不事後面面試的時候講這個項目講着講着就講到了Spring源碼)。
- 大三上快結束的時候意識到立刻要決定之後的去向了,頓時慌得一批,本身分析了一下去向。成績應該能保研,可是最後是放棄了,給本身找了一些理由:
- 只能保研本校本專業,不能去更好的學校
- 讀研最好是能搞機器學習之類的,作Java開發搬磚啥的好像也不用讀研
- 懶吧,以爲要讀研就要在兩年後再經歷一場春招秋招...還不如如今把這個事解決掉,要不又要提心吊膽擔憂失業
- 另外本身以爲前兩年也算是爲找工做作了一點準備,也不至於說從零開始
決定了以後就開始迷茫,不知道要學哪些東西,學到什麼程度。而後就花了好幾天的時間去牛客網上找面經,大概看了有100篇+的面經,把問題分類都記了下來,算是內心有了點底。網絡
春招
- 大概是從1月中旬開始複習,而後3月上旬開始投簡歷,中旬開始面試,一直面試到4月中旬。
複習的內容大概是如下這些,我本身是文科生,在高中時時候就有個習慣是記筆記,由於本身記性不好,看過的書過幾天就忘光了,因此本身記了不少筆記,以後在春找面試期間/秋招復習能夠只看筆記快速複習。

- 這些筆記我不太肯定是否合適放到網上,由於在記筆記的時候是處處抄(當前本身也有總結),有抄書上的,有抄別人博客的,圖省事都沒記錄下出處。因此在這想問一下你們這些資料是否合適上傳到網上,被原做者發現有什麼後果.....
- 複習順序大概是先去複習數據結構和算法,這部分由於本身不太聰明吧,學的很吃力。當時也買了牛客網的直通BAT面試算法精講課。而後刷了《劍指Offer》,原本打算刷leetcode的,可是這裏想討點巧,本身確實不擅長,若是公司真的要求很高,乾脆就放棄好了(對,說的就是你,頭條)。
- 而後是看操做系統、計算機網絡、數據庫理論之類的,這部分就看的當前上課時候整理的筆記
- 以後是Java、分佈式還有框架/中間件的複習。這部分是看了好多書,感受這個寒假看的書比前兩年加起來的都要多emmmm。
《Java併發編程實戰》
《Java併發編程的藝術》
《深刻理解Java虛擬機》
《Java編程思想》(這本不建議突擊看,最好是平時看)
《分佈式Java應用 基礎與實踐》
《大型網站技術架構 核心原理與架構分析》
《大型網站系統與Java中間件實踐》
《Head First 設計模式》
《Spring 源碼深度解析》
《架構探險 從零開始寫JavaWeb框架》
《深刻分析Java Web技術內幕》
《Redis實戰》
《高性能MySQL》
《從Paxos到Zookeeper 分佈式一致性原理與實踐》
《深刻剖析Tomcat》(這本看的比較粗略,看博客也行)
《深刻分佈式緩存 從原理到實踐》
《劍指Offer》(神書!除了頭條、騰訊或者外企或者其餘國內比較重視算法的公司,這本書足夠應付面試了,固然對算法比較感興趣的建議刷leetcode,更穩一些,筆試也不容易被刷,另外左程雲的《程序員代碼面試寶典》也很好,有時間能夠看)
《Netty實戰》
此外還要看操做系統、計算機網絡、數據結構和Linux相關的教材。
另外還有一些我還沒來得及看,但感受很是好的書:
《Redis設計與實現》
《MySQL技術內幕 InnoDB存儲引擎》
《大規模分佈式存儲系統》
《億級流量網站架構核心技術》
- 由於學了Netty、Dubbo等技術,打算再深刻一點,把Netty用在一個稍微正式一點的項目上,不要只停留在demo上。因此花了一些時間手寫了一個RPC框架,最第一版本也就1000+行。
- 這個時候以爲寫一些網站的(尤爲是非正式上線的項目,本身寫着玩的)之類的寫不出什麼花來,翻來覆去仍是用別人的東西。可是面試,尤爲是阿里巴巴,對原理要求挺高的,你在項目裏用了啥,你最好是能說得出來它是怎麼work的。若是本身去造個輪子之類的,你會對某個組件或框架變得很熟悉,比讀一遍源碼在理解上要深一些(並且沒有SSM那麼low...)。
- 而後就開始春招了,總共投了18家公司,最後是收到了5家公司的offer(酷家樂、快手、菜鳥、攜程、網易),最後是選擇了菜鳥,主要是由於阿里巴巴對Javaer吸引力確實很大。說到菜鳥仍是挺有意思的,一方面是去年就透過實習,另外一方面內推名額不是找人要的,而是一位師兄在Github上爬蟲爬到個人,而後就給我發了郵件說你的Github上的項目很讓人印象深入balabala,而後發了內推。後來實習入職之後問這位師兄,由於特別好奇是哪一個項目被阿里大佬看上了,結果人家說是全發了...沒有篩選(這可太尷尬了....)
- 以後5月份中旬就跑去實習了,雖然學校規定是7月份期末考完才能出去,可是本身算了一下7月份實習到9月份轉正答辯的話實習時間過短了,感受作不了什麼事情,因此提早就溜了。固然另外一方面是課程也比較少,不過考試不少,要考好幾回。實習了大概三個月就買了十幾張南京——杭州的高鐵票(感受實習徹底沒賺到錢,全花在路費上了emmmm)
- 4月中旬到5月中旬也是突然頹廢的一個月,明明後面還有秋招,但又去打遊戲(那時候frostpunk剛出,玩了好幾天),看小說。技術上就只是把WebServer這個項目又完善了一下,把原來的網絡實現從BIO改爲了BIO/NIO/AIO。
實習
而後就開始了實習,實習的時候大概作了幾件事,好比給師兄研發的中間件開發一個Web控制檯,作一個快遞相關的業務系統,還有一個相似於ABTest的系統。
- 第一件事其實業務很簡單,只是熟悉了集團內部的一些中間件,可是後來以爲這樣後面面試的時候實在沒得聊,就把師兄自研的中間件的源碼讀了一遍,本身總結了一下。
- 第二件事花的時間最多,可是代碼快寫完了忽然收到通知說項目取消,業務沒談成...這件事對我來講打擊挺大的,至此對業務開發就產生了不少負面情緒,這也是我後來離職從新秋招的主要緣由。
- 第三件事也是挺簡單的,基本上沒學到什麼新東西。
- 在實習後期以爲本身作的事情技術難度不大,學不到什麼新的東西;並且以爲業務開發很差,很想去作中間件或者基礎設施相關的研發。在一番糾結後(大概是7月下旬)決定從新秋招。可是本身狀況不好勁,一方面實習任務仍是挺重的,沒有時間學新的技術;另外一方面春招復習的內容也忘得七七八八了。
- 以後打算先作點新的東西,總不能跟春招一個水平吧。而後就花了兩個多周(主要是晚上和週末)把RPC項目從新寫了一遍(模仿着Dubbo的分層結構),最後大概有4000行左右。
- 另外抽時間把Dubbo、RocketMQ等中間件的源碼也看了一遍。
- 以後就決心要離職了,白天也開始複習春招時候的筆記,複習了大概一週,而後就離職了。
秋招
秋招時候一門心思想找偏技術的方向,先是聯繫了一些阿里的其餘部門,包括集團的中間件、螞蟻的中間件等,外面的面的比較少,只面了PDD和網易。比較遺憾的是集團的中間件沒有面過,仍是本身的水平不足。其餘的拿到了offer,最後是選擇了螞蟻中間件。
建議
- Java方向的話最好是寫點有本身思考的項目,不只限於CRUD的那種。好比我簡歷中寫了4個項目,一個是Web項目,其餘都是小輪子,大部分面試官明顯都對小輪子感興趣,對全是套路的JavaWeb項目感受興趣不大。
- 簡歷中項目中的各個實現要儘可能熟悉,若是作得時間久了,能夠考慮畫一個類圖或者時序圖來加深印象
- 有真實的、在線上運行的、有必定用戶量的項目會加分的
- 筆試的話必定要給後面的編程題留足時間
- 不夠熟悉的技術乾脆不要往簡歷上寫,好比我會寫Vue.js,但僅限於使用,而面試官必定是會問基礎的,作Java的前端基礎不夠好的話就不要寫熟悉前端了...
- 多刷刷牛客的面經
面經
這裏簡單的總結了一下面試過程當中常常被問到的,本身記性不太好,沒有在每次面試完以後記一遍問到的問題(明明是懶...)
- Java集合框架源碼,幾乎每一個公司直接間接地都問過
- Java併發相關的知識,源碼問的較集合少一些
- Linux經常使用命令,列舉一些
- 關係數據庫的事務、索引、鎖、範式
- JVM, 基本都在《深刻理解Java虛擬機》上
- 基礎數據結構(鏈表、二叉樹、隊列、棧)以及排序查找算法
- TCP UDP等網絡協議,OSI七層,三次握手四次揮手等
- 設計模式
- 項目,這部分看我的狀況,你在項目上寫過什麼技術,面試的時候就更容易被問到,並且每每會側重原理
軟文時間
咱們團隊是螞蟻中間件中作中間件產品化工做的,固然也負責好比監控Metrics等一些中間件,主要是作金融科技產品的對外輸出,就是把支付寶積累的高併發、高可靠的中間件、PaaS等產品化,以公有云或私有云的方式對外輸出。目前螞蟻金服的一大戰略就是金融科技,咱們能夠算得上是內部創業,將來發展前景很是好,也很是缺人。
如今咱們團隊須要20屆的實習生,崗位有Java工程師、Go工程師等,三月份開始把簡歷錄到系統裏而後開始面試,如今就能夠投起來了。
下面是師兄發的JD,你們能夠把簡歷發到師兄的郵箱 xiangfeng.xzc@antfin.com。
你們若是有什麼疑問或者想求助,也能夠牛客私信我。
崗位描述:
• 加入咱們,你將參與 SOFA 開源的研發,打造金融級分佈式架構的體系。
• 加入咱們,你將接受到每一年雙十一,雙十二帶來的高併發的,高性能的極致性能挑戰。
• 加入咱們,你將在實際生產環境中應用世界前沿的技術方向,引領將來。
崗位要求:
• 酷愛着計算機以及互聯網技術,熱衷於解決挑戰性的問題,追求極致的用戶體驗;
• 癡迷於數據結構和算法,熱衷於ACM,經常爲看到「accept」而興奮的手足舞蹈;
• 至少熟悉一門計算機語言(C,C++,Java,Python,Golang,Rust),有良好和快速的學習能力。
• 有良好的進取心和責任感,有良好的團隊合做精神。
• 有大賽獲獎經驗,開源項目經驗者優先。
郵箱:xiangfeng.xzc@antfin.com

<section>
推薦閱讀:
百度面試兩板斧:手寫算法問基礎
記一次面試騰訊的奇葩經歷
</section>

<section>
<section>
<section>
</section>
<section>
<section>
<section>你點的每一個」在看」,我都認真當成了喜歡</section>
</section>
</section>
</section>
</section>
</section>
</section>