1. 程式人生 > >[找工作] 2019秋招|從春招到秋招,Java崗經驗總結(收獲AT)

[找工作] 2019秋招|從春招到秋招,Java崗經驗總結(收獲AT)

部分 壓縮 今日頭條 順序 系統 現場 bat 圖片緩存 中心

轉自(有更多)

https://blog.csdn.net/zj15527620802/article/month/2018/10

前言

找工作是一件辛酸而又難忘的歷程。經歷過焦慮、等待、希望,我們最終都能去到屬於自己理想的地方。

從春招到秋招,我總計面試了數十家公司。春招面試了騰訊、去哪兒、360、小米、攜程、華為、今日頭條、美團、菜鳥網絡等9家公司。除了今日頭條止步三面、菜鳥物流備胎至七月底才回絕,其他公司均通過了面試。最後在美團和騰訊中糾結了一段時間後,選擇了騰訊去實習。秋招騰訊轉正的還算順利,目前內部狀態已錄用。在實習結束之際,阿裏內推截止前3天再次內推了阿裏,連續三輪技術,一輪HR走完了阿裏的面試流程,並在一周後收到了錄用意向書。雖然有很多公司福利待遇比騰訊、阿裏好,但作為應屆生,對於自己而言,我還是很傾向於畢業先去AT這樣的公司學習,所以秋招也不想面太多了。可能後面再面一下頭條和美團。

騰訊,是我春招最先面試的一家公司。我記得在三月下旬投遞的當天就接到了面試電話,簡單面了20分鐘基礎就結束了。本來以為,JAVA技術棧可能不太匹配。但是一周後收到了提前批去騰訊總部面試的邀請。在幾經糾結下,還是和同學們一起去了深圳面試。沒想到的是,騰訊的面試真的很順利。3.31號上午,在等著叫號後,就開始的面試。結果面了一輪技術面,就直接HR面了,並且很快就顯示待報批,最終四月初就拿到提前批Offer。總體感覺是,騰訊面試比較基礎,主要是結合項目深問,以及場景設計和基本原理考察。

去哪兒,是在騰訊提前批回校後面的一家公司,是同學內推的。去哪兒應該是個部門Leader直接面的,大概面了半個多小時,直接說給過。主要考察了JAVA基礎、Redis、分布式相關的場景設計。結合項目了解用到的技術。總體感覺比較註重實踐能力。

360,是在Boss直聘上被聯系的。當時問我是否有實習意願後就簡單的進行了電話面試。幾天後被邀請去金融港面試。面試主要進行了兩輪,主要是結合項目經歷問,考察了Spring、Mybatis、Mysql、Redis等相關的知識。面試結束後第二天收到Offer Call。

小米,是通過牛客網同學內推的簡歷。小米的面試部門是小米信息部門,在武漢金融港。大概是四月上旬,收到面試電話後,就確認了面試時間,最後從學校過去面試。大概是從下午四點面試到快七點,連續三輪技術面,一輪HR面。面試完,HR小姐姐加了微信,並表示三天內給Offer。(小米HR小姐姐真的很好看...最後還是沒能去實習...)

攜程,是通過線上筆試去面試的。收到面試邀請後,就坐地鐵去了酒店。攜程面試是在一個大房間裏,裏面很多面試官和學生一對一面試。總體感覺攜程面試比較簡單,前二十分鐘聊項目,後二十分鐘聊規劃,主要是考察了項目實現細節。面試官也給我說,希望我最終選擇攜程...當然,最終也沒去。攜程HR七月份還聯系我說隨時可以去實習,基本都可以轉正...

華為,據說是一家註重學歷學校的公司。內推之後,被邀請去那邊面試。當時面試的同學很多,不過身邊的同學都是去看看,可能後面實在找不到更好的實習就去實習了。我的面試很簡單,印象中就問了一個指針問題,其他都是聊聊項目,聊聊規劃,還補了個行測。後來被告知行測掛了,又做了一次...

今日頭條,通過牛客網內推面的,筆試實在過不了啊...整個面試過程很緊湊,從下午四五點陸陸續續面試到晚上九點,主要是中間等面試官花了些時間。可能是算法準備的確實不夠好,最終沒能拿到頭條的Offer...

美團,通過參加第二輪筆試被撈起來的。記得是五一之後,被美團HR預約面試。可以說,美團是除了阿裏,我很喜歡的以JAVA為技術棧的公司了。整個面試流程也很愉快,每一輪面試都有HR小姐姐預約,面試完了還會告知結果並預約下一輪面試...最後本來決定去美團的,都答應Leader了,然而因為一些原因,還是去了騰訊,頗為遺憾...

阿裏,是很多學習JAVA技術棧的同學最想去的公司。我也很想去。在春招,我在三月下旬內推了阿裏菜鳥網絡,並且在4.2號現場完成了所有面試。但是,可能是自己三面Boss面表現得確實有點糟糕。所以在被告知換了兩次部門後,依舊無果。最終七月底,秋招內推都開始幾周了,才把我給回絕掉。我相信經歷過菜鳥網絡面試的同學都會有自己想要的吐槽點。菜鳥網絡真的是海量備胎求Top N。

這就是面試簡單的總結,面試過後,感覺也沒那麽難。秋招除了騰訊實習轉正,只面了阿裏一家公司,拿到錄用意向書後也不太想面了...我的感覺是,實習經歷很重要,基礎知識要紮實,算法能力要強。想要找到好的工作,這三點是必備的基礎。其次,是你的溝通能力、理解能力,以及學習能力。你在面試過程中要向面試官展現你的思維能力,你的學習能力,讓他相信你是可塑之才...

當然,我一直給自己的規劃是做後臺方向,最好是以JAVA技術棧去發展。從準備找工作,到春招面試,再到秋招,整個過程大概經歷了9個月。刷過的題目主要是《劍指Offer》,刷了兩遍。復習的書籍主要有《計算機網絡》、《操作系統》、《數據結構》、《Redis設計與實現》、《JAVA並發編程的藝術》、《深入理解JAVA虛擬機》、《高性能MySQL》。還有就是一些技術博客,主要涉及到JAVA集合(必問)、Spring源碼分析、分布式一致性協議等。下面有一部分公司的面經,因為有些公司問的不是那麽多或者與已有的基本重復,就沒有全部總結。

時間線

  • 2017.12 至 2018.01 刷劍指Offer、牛客網JAVA基礎
  • 2017.02 至 2018.03 計算機網絡、操作系統、數據機構、JAVA集合
  • 2018.03 至 2018.04 重點總結核心技術點,總結項目,寫簡歷,投簡歷
  • 2018.04 至 2018.05 面試-總結-面試-總結0
  • 2018.06 至 2018.08 實習,努力轉正
  • 2018.08 至 2018.09 騰訊轉正、阿裏提前批
  • 2018.09 至今 忙於畢設,等正式Offer簽約

核心技術點

數據結構與算法

  • 數組、鏈表、二叉樹(熟練)
  • B+樹、紅黑樹(了解)
  • 劍指Offer(熟練),建議刷兩遍以上
  • 冒泡排序、插入排序、堆排序、快排、歸並排序(熟悉)
  • 動態規劃、分治(拔高可專向突破)

操作系統

  • 進程、線程、死鎖產生與預防
  • 虛擬內存
  • IO多路復用(select、pool、epool實現與區別)

計算機網絡

  • 七層網絡模型
  • TCP三次握手、四次揮手以及time-wait的原因
  • TCP與UDP的區別
  • 從瀏覽器輸入URL到頁面顯示所經歷的過程
  • HTTP、HTTP1.1、HTTP2

數據庫

  • MySQL索引實現與優化
  • 索引的實現原理
  • 常用的SQL書寫
  • ACID的定義與原理
  • 隔離級別(不可重復度、可重復讀、順序讀、MVCC)
  • 悲觀鎖、樂觀鎖

JAVA基礎

  • 接口、抽象類、內部類、繼承、多態
  • StringBuilder、StringBuffer的實現與使用區別
  • JAVA集合:HashTable與HashMap的區別、HashMap的實現、ConcurrentHashMap
  • synchronized與Lock的區別、實現原理、CAS的實現與使用
  • JAVA線程的實現,Runnable、Callable、Thread的區別與使用場景
  • JAVA線程池的實現與應用
  • JAVA內存模型(堆、方法區、方法棧、本地方法棧、程序計數器)
  • JAVA中的OOM問題,如何排查和解決OOM
  • JAVA類的加載過程
  • JVM垃圾收集器

框架學習

  • Spring:用到的設計模式、AOP和IOC的實現、動態代理的實現、Spring中對象的加載過程
  • Mybatis:動態SQL、緩存機制
  • Redis :常用的數據類型及其實現原理、RDB和AOP備份、主從同步

分布式

  • 分布式協議(2PC、3PC、PAXOS、Raft、POW、POS、DPOS)
  • 分布式事務(TCC)

面經

騰訊面經

二面

  • 自我介紹
  • 做過有意思的項目
  • mysql索引數據結構
  • 輸入url到頁面顯示的詳細過程
  • IO多路復用技術
  • 使用過的linux命令
  • top命令的作用以及顯示結果的含義
  • 加密算法
  • gdb用法
  • 字節序的概念
  • 30萬表記錄占用的磁盤空間
  • 視頻通話使用tcp還是udp好?
  • 為什麽視頻通話選擇udp?
  • 視頻的一般格式,內部編碼是怎樣的?
  • 如果現在重新做那個項目,如何優化?
  • https了解嗎?
  • 目前在實驗室做什麽研究?
  • 除了java還會別的語言嗎?
  • 有什麽興趣愛好?大概就這些吧,估計忘了一些,記性太差了!感覺是接著電話面繼續的,沒太追究基礎,大部分時間聊項目的實現,優化。回答的不好的地方,面試官也給了他的方法,總體感覺挺愉快。

HR面

騰訊只要技術面過了,HR都還好...

小米面經

一面(四十分鐘)

  1. switch語句,根據輸入的i計算result。
  2. StringBuilder對象傳入函數修改後輸出結果。
  3. 線程安全的單例模式,我寫的是DCL懶漢式,沒問題。
  4. 翻轉字符串,原地翻轉即可。
  5. 用lambda表達式將列表[1,2,3]轉換成["1","2","3"]輸出。
  6. 數據庫四張表Teacher,Student,Course,Grade,讓寫出課程名是“計算機理論”的學生分數低於60分的老師人數。由於長時間沒寫sql,寫的挺復雜,面試官說錯了。還有就是如果課程是全國的所有數據信息,如何優化增加查詢效率。然後出了個題,有一個組合索引(a,b,c),當查詢條件為(a=5,b=1,c < 6 )時是否會用到索引,我想到了比較運算就無法使用索引,於是確定的說不可以。面試官說我錯了,並說數據庫果然很差。
  7. 接下來考察了下Java基礎,講解繼承與組合的區別。
  8. 將一些synchronized與Lock的區別。
  9. 寫一道線程死鎖的例子。
  10. 寫一道兩個線程,通過其中一個線程停止另一個線程。
  11. HashMap 的 put操作詳細過程,index計算方法,結點采用的插入方式。(這裏我都從jdk1.7與jdk1.8詳細解答了,大概從這開始,面試官有點好感了)
  12. ConcurrentHashMap如何實現線程安全的,使用ConcurrentHashMap時並發數如何確定。(這裏我也從jdk1.7和jdk1.8分別描述,說完面試官問我,為什麽這些了解的這麽清除,lambda表達式都不會。。。)
  13. 怎麽學習JAVA源碼的,看過哪些書?(JAVA編程思想優點落後了,我都是看博客的。。。。)
  14. 繼續寫題,寫一個合並兩個有序數組的算法,很簡單,很快搞定。
  15. 繼續寫題,有5個數字(1,2,3,4,5),已知其中一個組合為13245,求用這幾個數組合中比這個數字大的最小的數字。我也知道排列組合,依次比較很low,於是想了一會兒,在他的提示下確定了思路。就是從後向前比較確定次高位最小可存在的數字。依次確定每一個次高位。具體還沒想的很清楚,可以寫一下。
  16. 看著簡歷讓我介紹ELK,問我ElasticSearch的功能,索引是什麽,倒排索引的概念。
  17. 介紹實習中使用的技術棧,實習中主要做的事情。還有一些問題,記不太清了。
  18. 稍等一下,像是給二面的樣子。

二面(30多分鐘)

  1. 自我介紹,聊到實驗室的項目,一個是圖片緩存相關的,一個是塊的相關性。這兩個項目都是自己接觸到的,還沒做啥事情,都是從宏觀上討論。
  2. 實習經歷,實習中的主要工作。api如何保證參數沒有被修改。我說當時公司網關層並沒有左參數防修改操作,如果我做,我會用md5校驗。
  3. 一個請求到達後臺,Spring 處理的詳細過程。這裏主要是說清楚請求的URI是如何找到對應的Handler的,我說是用Map存儲映射關系,看過一個輕量級的MVC框架這麽實現的。
  4. Spring IOC的實現,這裏我也是從源碼的角度講了下,核心就是Map存儲了Java Bean描述對象BeanDefinition,然後根據配置創建對應的JAVA Bean,獲取的時候根據配置原則獲取。
  5. 一道場景算法題,在平面中有很多隨機的點,系統輸入一個點,輸出距離輸入點最近的一個點。提供了兩個方向,一個是從算法本身實現上講解,一個是從系統設計上講解。算法實現側重於降低算法時間空間復雜度,系統設計要求提高系統相應的速度。這個問題討論了挺長時間,開始沒啥思路,想的就是計算點的距離,以及將計算結果緩存。可是輸入點是隨機的,點的數量也太多,不可能這樣全部計算一遍。後來面試官提示讓我與實際應用相結合去思考。我想到了平時使用地圖的經歷,輸入一個位置,會顯示附近的餐館,酒店等。它支持了我的想法,讓我繼續思考。我還是沒太清楚,他就一直問我,為什麽地圖可以顯示你附近的熱點,而不是其他城市,我就想到了區域劃分的概念。最後得到的思路是將平面按照一定的策略劃分成一小塊一小塊的區域。這樣在計算時,就可以根據輸入在小範圍內計算,同時再應用上緩存。面試官這時候才算是比較滿意一點。
  6. 你用到了深度學習,給我講講梯度下降吧。(不會)
  7. 那就講講機器學習吧。(不會)
  8. 那你研究生都學了啥(數學,Hadoop,大數據技術,多媒體基礎。。。)。沒有想從事算法,所以,這一塊不了解。(其實我了解一些,但是不想給自己挖坑,就直接拒絕回答。。。)
  9. 做一道數據庫的題目。有兩個表,查找第一張表中存在,第二張表中不存在的記錄。
  10. 實習中如何進行索引的優化的?
  11. 那就再聊聊計算機網絡吧。從計算機網絡七層模型詳細講解http請求的過程。(於是一層一層的講解)路由器工作在哪一層?作用是什麽?交換機工作在哪一層?作用是什麽?雖然回答的對,但是描述還不夠專業。(是的是的,回頭,我再看看課本。。。)
  12. 平時都看過哪些JAVA相關的書?(JAVA並發編程的藝術,深入理解JAVA虛擬機。)看了多少?感覺怎麽樣?老家哪裏的?什麽時候可以實習?
  13. 你有什麽問題問我的嗎?聊了下武漢研發中心,部門工作內容。
  14. 你等一下,待會兒有人找你。(這是面試通過了,要HR面了嗎?)

三面(25分鐘)

  1. 自我介紹(以為是個男HR,畢竟騰訊HR是個男的,結果聊著聊著還是聊技術。)
  2. 實習主要用到了哪些技術(SSM,nginx,zookeeper,kafka,elk),實習主要工作是什麽?都是增刪改查嗎?(對對對,主要是業務層增刪改,不知道您這邊除了增刪改還有啥高端的操作嘛)我們這邊主要有兩種難點,一種是並發量很高,一種是系統模塊多,業務邏輯復雜。(恩恩,確實高端挺多的。)
  3. 會不會Linux,怎麽學習Linux的?用到了哪些Linux命令。Linux有系統的看過書籍嗎?(沒...)
  4. 如何查看一個文件特定行的內容。(說到了vim,awk,但是都沒說清楚)
  5. vim打開一個超過內存大小的文件會怎麽樣?會出錯嗎?(沒試過....應該會吧,有的IDE其實只會顯示部分內容)
  6. 實習學習了ELK技術,簡單講一下。
  7. 分布式事務怎麽處理的?(主要介紹了通過協調本地事物實現分布式事務管理,以及開源中間件TCC-Transaction,LCN)
  8. 我的問題問完了,你有什麽問題嗎?(這裏又聊了好久,主要是部門的業務,目前小米所使用的技術棧,公司服務化的實施,用到了dubbo,然後還討論了dubbo與SpringCloud的區別,以及他們以後會實現自己的微服務框架。。。。)
  9. 面試結束。我準備起身離開,他讓我等一下。。。(還有面試)

HR面(20分鐘)

以前寫過HR面,就不寫了,差不多就是家住哪裏?什麽時候可以實習?薪資福利介紹,轉正事項?全程都是HR小姐姐給我介紹,我說的話並不多。小米這個HR小姐姐真的很漂亮,很溫柔啊!結束讓我加她微信。通過後,讓我有啥問題隨時跟她聯系...總之,小米面試體驗還是很不錯的,雖然面試可能不是很規範,但是技術實力和面試流程還是可以的。

今日頭條面經

一面(50分鐘)

  • 詳細講一下接口與抽象類的區別
  • String、StringBuilder、StringBuffer的區別
  • 舉例說明棧、堆、靜態區的區別
  • volatile修飾符的作用以及使用場景
  • volatile實現了操作系統的哪些原語?(內存可見性、禁止指令重排序)原子性呢?不能保證原子性啊...
  • 講一下了解的設計模式,寫一個單例模式,為什麽用volatile,volatile在哪一行代碼禁止了重排序。
  • 計算機網絡五層模型
  • TCP屬於那哪一層?
  • 講一下HTTP2協議。HTTP2是如何壓縮的?
  • 講一下GET與POST的區別是什麽。
  • 進程與線程的區別是什麽?主要區別呢?
  • 進程間通信的方式有哪些?
  • 操作系統調度進程的策略有哪些?說一下名字就好。。。
  • 寫一個代碼吧,實現一個sqrt函數,要求精確度是0.0001。(這個問題不難啊,問題是當時死活沒想出來,面試官給我慢慢講了很多,一點一點提示寫出來了。。。主要思想是牛頓叠代法和二分法)
  • 給出一棵二叉樹,要求輸出其左右鏡像後二叉樹的中序遍歷。討論了一會兒,也算是搞出來了。
  • 面完我就退出了,以為涼涼。三分鐘後接到電話讓繼續二面。

二面(30分鐘)

  • Array與ArrayList的區別(Array?不應該是ArrayList與LinkedList的區別?後來想了一下,面試官可能想問數組與ArrayList的區別)
  • 那就講一下ArrayList與LinkedList的區別吧!LinkedList數據結構是雙鏈表還是單鏈表?確定?
  • HashMap與HashTable的區別。
  • ConcurrentHashMap(jdk1.7/jdk1.8)
  • Lock與synchronized的區別,synchronized底層實現。
  • 講一下類的加載過程。
  • 你用過netty,那你給我講講netty吧!
  • epoll有什麽優點,如何實現的?
  • 還是寫一個代碼吧!給定一個數組,和一個目標值,求出所有三個數相加等於目標值的集合。(ThreeSum),寫完講下思路,沒大問題。
  • 講一下了解的設計模式,寫一個單例模式吧!要求懶漢式,線程安全。
  • 你一面寫過這個?怎麽不告訴我?那就在寫一個吧,工廠模式。
  • 寫完看看沒大問題,讓等3面。

三面(40分鐘)

  • 講一下TCP三次握手吧。
  • TCP快速失敗還是快速啟動來著,當時沒搞清楚。
  • TCP MTU了解嗎?TCP是如何探測MTU的。。。(懵逼)扯到了TCP粘包與拆包。
  • 寫過Socket程序嗎?TCP程序與UDP程序是否可以共用一個端口號?(說好的套路呢...),沒這樣試過,我想應該不可以。。。(面試官笑的挺開心的。。我也尬笑)
  • 用過那些數據庫?MySQL InnoDB索引有哪幾種?順序索引是什麽?B+樹索引是什麽?
  • B+樹與B樹的區別是什麽?B+樹非葉子結點為什麽指針域與B樹不同。。。
  • 用過Redis?Redis用做緩存時,可以有哪些緩存替換策略?
  • 設計實現一個LRU緩存替換策略。鏈表的查詢效率太低怎麽辦?
  • 會調試代碼嗎?都是怎麽調試的?
  • 你覺得你最擅長什麽?(怕坑,跟面試官打哈哈)
  • 你擅長的技術是什麽?(就是不放過啊!JAVA技術棧相關的技術比較熟悉)
  • 你實習用過ELK?用了多長時間,主要做什麽?
  • 看你有博客,怎麽搭建的?文章都是自己寫的嗎?
  • 再寫一個算法題吧!用兩個棧實現一個隊列你寫過嗎?那就不寫了。實現一個ip查詢庫,根據ip地址返回對應的城市。ip庫中保存類似下面的數據:
    • 112.123.50.0/24 -> 上海
    • 163.123.1.0/12 -> 武漢

  • 一開始理解有問題,討論了一會兒還是沒踩到點。面試官說要開會,讓我繼續想,一小時後繼續。
    大概九點半,面試官電話來了。讓我上線,講了下思路就讓寫代碼。十幾分鐘寫完了。面試官繼續問了些存在的問題,我也都給了對應的解決方案。
  • 面試結束,需要跟前兩位面試官碰一下。。。。

記性不太好,主要的問題應該都記下來了。頭條面試的感覺還是很不錯了,面試過程很緊湊,一輪接一輪。主要是下午四點半開始,斷斷續續十點才結束,餓死了!回頭想想其實面試難度也沒有想想象的那麽大,而且頭條面試官都很有耐心,不會因為你不會就馬上放棄。而是一點一點的引導你去實現。(可能在心裏也會diss你。。。)。總之,面試還是學到了很多,知道自己還存在很大的差距,感謝頭條的幾個面試官。學習了!繼續彌補基礎知識和算法功底。

總結

    1. 提前批的機會一定要抓住,無論是春招還是秋招,但是一定要充分準備再投簡歷。
    2. 投遞阿裏的建議晚點投遞,最好內推結束前一周內投遞。這樣你不僅可以快速走完面試流程,還能獲取大量的準備時間,減少不必要的等待。菜鳥網絡慎投,那真的是海量備胎,還不掛你...
    3. 春招一定要積極準備,即使實驗室不允許實習...面試經歷可以讓你在秋招遊刃有余,實習轉正保底,讓你秋招更有底氣。
    4. 面試是雙向選擇,好好準備,積極自信,每個人都擁有選擇的權利。
    5. 要有高目標,保底目標,沖一沖、穩一穩。即使BAT面試不好,還有TMD、即使這些都沒面好,還有很多可以選擇的,別放棄...
    6. 早點想清楚你喜歡做的事情,擅長做的事情。不要因為市場火熱就紮進去,看看現在市場中的算法就知道了。大量不那麽專業的同學都在投遞算法,面試結果可想而知...
    7. 用心對照你的目標崗位復習,從準備春招到秋招結束也就半年多的時間,不要秋招開始了,你才開始找工作...
    8. 實習很重要...爭取實習!
    9. 加油,都會有滿意的Offer的,相信自己。


      ____________________________________________________________________________________________________________________________________________________________________________-


[找工作] 2019秋招|從春招到秋招,Java崗經驗總結(收獲AT)