轉自(有更多)
https://blog.csdn.net/zj15527620802/article/month/2018/10
前言
找工做是一件辛酸而又難忘的歷程。經歷過焦慮、等待、但願,咱們最終都能去到屬於本身理想的地方。java
從春招到秋招,我總計面試了數十家公司。春招面試了騰訊、去哪兒、360、小米、攜程、華爲、今日頭條、美團、菜鳥網絡等9家公司。除了今日頭條止步三面、菜鳥物流備胎至七月底纔回絕,其餘公司均經過了面試。最後在美團和騰訊中糾結了一段時間後,選擇了騰訊去實習。秋招騰訊轉正的還算順利,目前內部狀態已錄用。在實習結束之際,阿里內推截止前3天再次內推了阿里,連續三輪技術,一輪HR走完了阿里的面試流程,並在一週後收到了錄用意向書。雖然有不少公司福利待遇比騰訊、阿里好,但做爲應屆生,對於本身而言,我仍是很傾向於畢業先去AT這樣的公司學習,因此秋招也不想面太多了。可能後面再面一下頭條和美團。mysql
騰訊,是我春招最早面試的一家公司。我記得在三月下旬投遞的當天就接到了面試電話,簡單面了20分鐘基礎就結束了。原本覺得,JAVA技術棧可能不太匹配。可是一週後收到了提早批去騰訊總部面試的邀請。在幾經糾結下,仍是和同窗們一塊兒去了深圳面試。沒想到的是,騰訊的面試真的很順利。3.31號上午,在等着叫號後,就開始的面試。結果面了一輪技術面,就直接HR面了,而且很快就顯示待報批,最終四月初就拿到提早批Offer。整體感受是,騰訊面試比較基礎,主要是結合項目深問,以及場景設計和基本原理考察。linux
去哪兒,是在騰訊提早批迴校後面的一家公司,是同窗內推的。去哪兒應該是個部門Leader直接面的,大概面了半個多小時,直接說給過。主要考察了JAVA基礎、Redis、分佈式相關的場景設計。結合項目瞭解用到的技術。整體感受比較注重實踐能力。nginx
360,是在Boss直聘上被聯繫的。當時問我是否有實習意願後就簡單的進行了電話面試。幾天後被邀請去金融港面試。面試主要進行了兩輪,主要是結合項目經歷問,考察了Spring、Mybatis、Mysql、Redis等相關的知識。面試結束後次日收到Offer Call。面試
小米,是經過牛客網同窗內推的簡歷。小米的面試部門是小米信息部門,在武漢金融港。大概是四月上旬,收到面試電話後,就確認了面試時間,最後從學校過去面試。大概是從下午四點面試到快七點,連續三輪技術面,一輪HR面。面試完,HR小姐姐加了微信,並表示三天內給Offer。(小米HR小姐姐真的很好看...最後仍是沒能去實習...)算法
攜程,是經過線上筆試去面試的。收到面試邀請後,就坐地鐵去了酒店。攜程面試是在一個大房間裏,裏面不少面試官和學生一對一面試。整體感受攜程面試比較簡單,前二十分鐘聊項目,後二十分鐘聊規劃,主要是考察了項目實現細節。面試官也給我說,但願我最終選擇攜程...固然,最終也沒去。攜程HR七月份還聯繫我說隨時能夠去實習,基本均可以轉正...sql
華爲,聽說是一家注重學歷學校的公司。內推以後,被邀請去那邊面試。當時面試的同窗不少,不過身邊的同窗都是去看看,可能後面實在找不到更好的實習就去實習了。個人面試很簡單,印象中就問了一個指針問題,其餘都是聊聊項目,聊聊規劃,還補了個行測。後來被告知行測掛了,又作了一次...數據庫
今日頭條,經過牛客網內推面的,筆試實在過不了啊...整個面試過程很緊湊,從下午四五點陸陸續續面試到晚上九點,主要是中間等面試官花了些時間。多是算法準備的確實不夠好,最終沒能拿到頭條的Offer...編程
美團,經過參加第二輪筆試被撈起來的。記得是五一以後,被美團HR預定面試。能夠說,美團是除了阿里,我很喜歡的以JAVA爲技術棧的公司了。整個面試流程也很愉快,每一輪面試都有HR小姐姐預定,面試完了還會告知結果並預定下一輪面試...最後原本決定去美團的,都答應Leader了,然而由於一些緣由,仍是去了騰訊,頗爲遺憾...vim
阿里,是不少學習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.一、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都還好...
小米麪經
一面(四十分鐘)
- switch語句,根據輸入的i計算result。
- StringBuilder對象傳入函數修改後輸出結果。
- 線程安全的單例模式,我寫的是DCL懶漢式,沒問題。
- 翻轉字符串,原地翻轉便可。
- 用lambda表達式將列表[1,2,3]轉換成["1","2","3"]輸出。
- 數據庫四張表Teacher,Student,Course,Grade,讓寫出課程名是「計算機理論」的學生分數低於60分的老師人數。因爲長時間沒寫sql,寫的挺複雜,面試官說錯了。還有就是若是課程是全國的全部數據信息,如何優化增長查詢效率。而後出了個題,有一個組合索引(a,b,c),當查詢條件爲(a=5,b=1,c < 6 )時是否會用到索引,我想到了比較運算就沒法使用索引,因而肯定的說不能夠。面試官說我錯了,並說數據庫果真不好。
- 接下來考察了下Java基礎,講解繼承與組合的區別。
- 將一些synchronized與Lock的區別。
- 寫一道線程死鎖的例子。
- 寫一道兩個線程,經過其中一個線程中止另外一個線程。
- HashMap 的 put操做詳細過程,index計算方法,結點採用的插入方式。(這裏我都從jdk1.7與jdk1.8詳細解答了,大概從這開始,面試官有點好感了)
- ConcurrentHashMap如何實現線程安全的,使用ConcurrentHashMap時併發數如何肯定。(這裏我也從jdk1.7和jdk1.8分別描述,說完面試官問我,爲何這些瞭解的這麼清除,lambda表達式都不會。。。)
- 怎麼學習JAVA源碼的,看過哪些書?(JAVA編程思想優勢落後了,我都是看博客的。。。。)
- 繼續寫題,寫一個合併兩個有序數組的算法,很簡單,很快搞定。
- 繼續寫題,有5個數字(1,2,3,4,5),已知其中一個組合爲13245,求用這幾個數組合中比這個數字大的最小的數字。我也知道排列組合,依次比較很low,因而想了一下子,在他的提示下肯定了思路。就是從後向前比較肯定次高位最小可存在的數字。依次肯定每個次高位。具體還沒想的很清楚,能夠寫一下。
- 看着簡歷讓我介紹ELK,問我ElasticSearch的功能,索引是什麼,倒排索引的概念。
- 介紹實習中使用的技術棧,實習中主要作的事情。還有一些問題,記不太清了。
- 稍等一下,像是給二面的樣子。
二面(30多分鐘)
- 自我介紹,聊到實驗室的項目,一個是圖片緩存相關的,一個是塊的相關性。這兩個項目都是本身接觸到的,還沒作啥事情,都是從宏觀上討論。
- 實習經歷,實習中的主要工做。api如何保證參數沒有被修改。我說當時公司網關層並無左參數防修改操做,若是我作,我會用md5校驗。
- 一個請求到達後臺,Spring 處理的詳細過程。這裏主要是說清楚請求的URI是如何找到對應的Handler的,我說是用Map存儲映射關係,看過一個輕量級的MVC框架這麼實現的。
- Spring IOC的實現,這裏我也是從源碼的角度講了下,核心就是Map存儲了Java Bean描述對象BeanDefinition,而後根據配置建立對應的JAVA Bean,獲取的時候根據配置原則獲取。
- 一道場景算法題,在平面中有不少隨機的點,系統輸入一個點,輸出距離輸入點最近的一個點。提供了兩個方向,一個是從算法自己實現上講解,一個是從系統設計上講解。算法實現側重於下降算法時間空間複雜度,系統設計要求提升系統相應的速度。這個問題討論了挺長時間,開始沒啥思路,想的就是計算點的距離,以及將計算結果緩存。但是輸入點是隨機的,點的數量也太多,不可能這樣所有計算一遍。後來面試官提示讓我與實際應用相結合去思考。我想到了平時使用地圖的經歷,輸入一個位置,會顯示附近的餐館,酒店等。它支持了個人想法,讓我繼續思考。我仍是沒太清楚,他就一直問我,爲何地圖能夠顯示你附近的熱點,而不是其餘城市,我就想到了區域劃分的概念。最後獲得的思路是將平面按照必定的策略劃分紅一小塊一小塊的區域。這樣在計算時,就能夠根據輸入在小範圍內計算,同時再應用上緩存。面試官這時候纔算是比較滿意一點。
- 你用到了深度學習,給我講講梯度降低吧。(不會)
- 那就講講機器學習吧。(不會)
- 那你研究生都學了啥(數學,Hadoop,大數據技術,多媒體基礎。。。)。沒有想從事算法,因此,這一塊不瞭解。(其實我瞭解一些,可是不想給本身挖坑,就直接拒絕回答。。。)
- 作一道數據庫的題目。有兩個表,查找第一張表中存在,第二張表中不存在的記錄。
- 實習中如何進行索引的優化的?
- 那就再聊聊計算機網絡吧。從計算機網絡七層模型詳細講解http請求的過程。(因而一層一層的講解)路由器工做在哪一層?做用是什麼?交換機工做在哪一層?做用是什麼?雖然回答的對,可是描述還不夠專業。(是的是的,回頭,我再看看課本。。。)
- 平時都看過哪些JAVA相關的書?(JAVA併發編程的藝術,深刻理解JAVA虛擬機。)看了多少?感受怎麼樣?老家哪裏的?何時能夠實習?
- 你有什麼問題問個人嗎?聊了下武漢研發中心,部門工做內容。
- 你等一下,待會兒有人找你。(這是面試經過了,要HR面了嗎?)
三面(25分鐘)
- 自我介紹(覺得是個男HR,畢竟騰訊HR是個男的,結果聊着聊着仍是聊技術。)
- 實習主要用到了哪些技術(SSM,nginx,zookeeper,kafka,elk),實習主要工做是什麼?都是增刪改查嗎?(對對對,主要是業務層增刪改,不知道您這邊除了增刪改還有啥高端的操做嘛)咱們這邊主要有兩種難點,一種是併發量很高,一種是系統模塊多,業務邏輯複雜。(恩恩,確實高端挺多的。)
- 會不會Linux,怎麼學習Linux的?用到了哪些Linux命令。Linux有系統的看過書籍嗎?(沒...)
- 如何查看一個文件特定行的內容。(說到了vim,awk,可是都沒說清楚)
- vim打開一個超過內存大小的文件會怎麼樣?會出錯嗎?(沒試過....應該會吧,有的IDE其實只會顯示部份內容)
- 實習學習了ELK技術,簡單講一下。
- 分佈式事務怎麼處理的?(主要介紹了經過協調本地事物實現分佈式事務管理,以及開源中間件TCC-Transaction,LCN)
- 個人問題問完了,你有什麼問題嗎?(這裏又聊了很久,主要是部門的業務,目前小米所使用的技術棧,公司服務化的實施,用到了dubbo,而後還討論了dubbo與SpringCloud的區別,以及他們之後會實現本身的微服務框架。。。。)
- 面試結束。我準備起身離開,他讓我等一下。。。(還有面試)
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你。。。)。總之,面試仍是學到了不少,知道本身還存在很大的差距,感謝頭條的幾個面試官。學習了!繼續彌補基礎知識和算法功底。
總結
- 提早批的機會必定要抓住,不管是春招仍是秋招,可是必定要充分準備再投簡歷。
- 投遞阿里的建議晚點投遞,最好內推結束前一週內投遞。這樣你不只能夠快速走完面試流程,還能獲取大量的準備時間,減小沒必要要的等待。菜鳥網絡慎投,那真的是海量備胎,還不掛你...
- 春招必定要積極準備,即便實驗室不容許實習...面試經歷可讓你在秋招遊刃有餘,實習轉正保底,讓你秋招更有底氣。
- 面試是雙向選擇,好好準備,積極自信,每一個人都擁有選擇的權利。
- 要有高目標,保底目標,衝一衝、穩一穩。即便BAT面試很差,還有TMD、即便這些都沒面好,還有不少能夠選擇的,別放棄...
- 早點想清楚你喜歡作的事情,擅長作的事情。不要由於市場火熱就扎進去,看看如今市場中的算法就知道了。大量不那麼專業的同窗都在投遞算法,面試結果可想而知...
- 用心對照你的目標崗位複習,從準備春招到秋招結束也就半年多的時間,不要秋招開始了,你纔開始找工做...
- 實習很重要...爭取實習!
- 加油,都會有滿意的Offer的,相信本身。____________________________________________________________________________________________________________________________________________________________________________-