漲薪50%,從小廠逆襲,坐上美團L8技術專家(面經+心得) 前言 A:面試前的準備 B:面試美團全過程(面試題分享) C:如何實現質的飛躍? 專題面試題 總結

前言

大多數情況下,程序員的個人技能成長速度,遠遠大於公司規模或業務的成長速度。所以,跳槽成爲了這個行業裏最常見的一個詞彙。

實際上,跳槽的目的無非是爲了漲薪或是職業發展,我也不例外。普通本科畢業後,進了一家互聯網公司,這幾年裏不斷在積累經驗,最終選擇跳到美團,漲薪了50%,下面分享一下我個人的面經和一些心得建議。


A:面試前的準備

1.目標企業

在跳槽之前,一定要思考清楚自己的目標企業是什麼,到底是去大公司當一顆螺絲釘,還是在中小公司做萬金油。

當然,去大公司也不一定是螺絲釘,關鍵還是要看自己的技術水平和能力。所以綜合自己的實際情況考量來看,目標企業在美團、字節和京東三家裏選擇。當然,3家都投了簡歷,最終在面試美團時發了力拿下了Offer。


2.時間節點

跳槽的時間節點是非常重要的,不同的時間節點,崗位面試的難易程度可能都有不同,主要是根據缺人的程度以及崗位HC的數量來劃定的。

一般來說,以下兩種情況,是比較容易通過面試拿到offer的:

  1. 着急招人幹活的時候
  2. 年底坑比較多的時候

3.簡歷準備

關於簡歷的準備,我不用多說,大家應該也都明白。簡歷至少要滿足以下幾個要點:

  • 以項目爲主體,設計你的簡歷
  • 針對企業的需要,突出你的技能
  • 項目的三要素(項目 = 產品 + 技術 + 結果)
  • 量化你的項目,給出數字

關於簡歷的準備,很多人可能不知道從何下手,我這邊可以提供一些簡歷模板作爲參考,對我個人來說,幫助還是非常大的。


文中內容涉及到:面試題(含答案)+學習筆記+電子書籍+學習視頻,免費打包分享:
+小助理V   X:   zerdong2020

4.面試複習

關於面試前的複習,重要性我就不過多贅述了,相信只要面試過的人都知道,即使是臨時抱佛腳,也比直接裸面要強得多。至於我的複習方法以及一些技巧,會在文章的第三部分詳細說一說,希望能給你一些啓發。

B:面試美團全過程(面試題分享)

美團一面:

  • redis集羣,爲什麼是16384?哨兵模式,選舉過程,會有腦裂問題麼?raft算法,優缺點
  • JVM類加載器,自定義類加載器,雙親委派機制,優缺點,tomcat類加載機制
  • Tomcat熱部署,熱加載瞭解嗎?怎麼做到的?
  • cms收集器過程,g1收集器原理,怎麼實現可預測停頓的?region的大小,結構
  • 內存溢出,內存泄漏遇到過嗎?什麼場景產生的?怎麼解決的?
  • 鎖升級過程,輕量鎖可以變成偏向鎖麼?偏向鎖可以變成無鎖麼?自旋鎖,對象頭結構,鎖狀態變化過程
  • kafka重平衡,重啓服務怎麼保證kafka不發生重平衡?有什麼方案?
  • 怎麼理解分佈式和微服務?爲什麼要拆分服務?會產生什麼問題?怎麼解決這些問題?
  • 你們用的什麼消息中間件?kafka,爲什麼用kafka?高吞吐量,怎麼保證高吞吐量的?設計模型,零拷貝
  • 算法1:給定一個長度爲N的整形數組arr,其中有N個互不相等的自然數1-N,請實現arr的排序,但是不要把下標0∼N−1位置上的數通過直接賦值的方式替換成1∼N
  • 算法2:判斷一個樹是否是平衡二叉樹

美團二面:

  • Innodb的結構瞭解麼?磁盤頁和緩存區是怎麼配合,以及查找的?緩衝區和磁盤數據不一致怎麼辦?mysql突然宕機了會出現數據丟失麼?
  • redis字符串實現,sds和c區別,空間預分配
  • redis有序集合怎麼實現的?跳錶是什麼?往跳錶添加一個元素的過程,添加和獲取元素,獲取分數的時間複雜度,爲什麼不用紅黑樹?紅黑樹有什麼特點?左旋右旋操作
  • io模型瞭解麼?多路複用,selete,poll,epoll,epoll的結構,怎麼註冊事件,et和lt模式
  • 怎麼理解高可用?如何保證高可用?有什麼弊端,熔斷機制,怎麼實現?
  • 對於高併發怎麼看,怎麼算高併發,你們項目有嗎?如果有會產生什麼問題,怎麼解決
  • 項目介紹
  • 算法:給定一個二叉樹,請計算節點值之和最大的路徑的節點值之和是多少,這個路徑的開始節點和結束節點可以是二叉樹中的任意節點

美團三面:

  • 項目介紹
  • 線上有遇到大流量的情況麼,產生了什麼問題,爲什麼數據庫2000qps就撐不住了,有想過原因麼,你們當時怎麼處理的?
  • 限流怎麼做,如果讓你設計一個限流系統,怎麼實現?
  • 算法:求一個float數的立方根,牛頓迭代法
  • 什麼時候能入職,你對崗位的期望是什麼?
  • 你還在面試其他公司麼,目前是一個什麼流程?

美團面試題答案:

C:如何實現質的飛躍?

1.技術沉澱(學習+積累)

對於技術新人來說,無論是在大廠小廠,還是在外包公司,基本上都是做得簡單的CRUD工作。很多人認爲,重複簡單的工作對自己的技術是沒有提升的,但實際上也有人能從中殺出一條血路,所以關鍵是你自己是否花了心思,付出了努力。

當然,我個人也有自己的一套學習方式和習慣,平時喜歡利用碎片時間來看點什麼東西,比如一些技術性的書籍或文檔,還有一些視頻講解等,經常會讓我有一種恍然大悟的感覺,對我的工作也起到了很大的幫助。

  • 閱讀書籍文檔:


  • 看視頻學習:


  • 面試刷題:

    BAT一線大廠面試題:

專題面試題

2.確立正確的技術方向

在我看來,有時候選擇比能力更重要,俗話說:站在風口上,豬都能起飛。

對於程序員來說,儘早地做好自己的職業規劃,確立發展路線,是很有必要的。我認爲,同樣的實力,善於發現和判斷機會的人,永遠佔據先機。

程序員的發展方向,大致分爲三類:

  • 架構師
  • 項目經理
  • 管理者

首先拋開管理者不談,就前兩個方向來說,對你的技術水平和工作能力都有一定的要求,首先我們要清楚,技術是根基,其次纔是能力偏差。

比如,架構師需要你具備完善和紮實的技術體系,具有一定的修養,具備較好的系統分析和設計能力,具有豐富的開發項目經驗;而項目經理,除了技術要過關以外,還應該瞭解軟件開發的的各個環節、瞭解開發的各種技術和運用、瞭解開發隊伍人員的水平和特點。


3.學習如何閱讀別人的代碼(筆記)

不知道爲啥,很多開發人員總有一股“迷之自信”,抱着“除了我,其他每個人寫的代碼都是垃圾”這種想法,用楊笠的觀念:爲什麼你明明很普通,卻又那麼自信?

實際上,能夠在別人的代碼之上繼續工作是一項有多重好處的偉大技能。因爲不論以前的代碼是多麼混亂或者考慮不周,你都需要去擴展它。

由此,它會對你兩方面都帶來益處:

  • 能夠閱讀他人的代碼是一個瞭解什麼是糟糕設計的好機會。
  • 能夠閱讀別人亂七八糟的代碼的話,也使得在需要更新的時候變得容易。

我個人會閱讀一些大佬的技術筆記,其中就包括了一些開發技巧和源碼:

(篇幅有限,只展示部分了,筆記包括Spring全家桶、Redis、MySQL、JVM等各個知識點)

  • Spring源碼筆記


  • SpringBoot技術筆記


  • 玩轉Redis實用筆記


4.培養自己的場景化思維

在工作的前兩年裏,我一直都在培養自己的場景化思維,這種思維是很難在大學學習中複製到的。何爲場景化思維?也就是會主動去思考最終用戶可能會如何錯誤地使用你的軟件。

由於大部分編程都是維護性的,因此它通常意味着更改與其他代碼高度耦合的代碼。即使是簡單的更改也需要跟蹤對象、方法和 API的每一個可能存在引用的地方。否則,很容易意外地打破你沒有意識到的模塊連接。即使您只是更改了數據庫中的數據類型。它還包括在進入開發之前通過邊緣案例和整體化的高級設計進行思考。

對於開發新模塊或者微服務的場景就更加複雜,花時間去考慮所構建的操作場景非常重要。想想未來的用戶可能需要如何使用您的新模塊,他們可能會如何不正確地使用它,可能需要什麼參數,以及未來的程序員是否會以不同的方式需要您的代碼。

簡單的編碼和編程只是問題的一部分。創建一個在你的電腦上運行良好的軟件是很容易的。但是部署代碼可能出錯的方式就會有很多。一旦進入生產環境,就很難說代碼將如何使用,以及哪些其他代碼將附加到原始代碼中。五年後,未來的程序員可能會對你的代碼侷限性感到沮喪。

總結

Java程序員,最寶貴的時間是從你開始工作那一刻計算的“黃金五年”,這五年是你學習和成長的最好時期。

爲自己奠定一個好的基礎,才能夠在未來的發展道路上少走些彎路,實現自己年薪五十萬、一百萬的夢想。

文中內容涉及到:面試題(含答案)+學習筆記+電子書籍+學習視頻,免費打包分享:
+小助理V   X:   zerdong2020

文章來源:頭條——代碼小當家
整理不易,望珍惜!如果本文對你有所幫助!請點擊頭像查看“傻姑個人簡介”閱讀更多技術乾貨文章,幫助大家一起學習成長!

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