面經手冊 · 開篇《面試官都問我啥》


做者:小傅哥
博客:https://bugstack.cnhtml

沉澱、分享、成長,讓本身和他人都能有所收穫!😄

1、前言

一直以來都有小夥伴問我何時出一些面試系列的文章,腦殼一熱一口答應下來,《重學Java設計模式》寫完就安排。可是怎麼寫,要寫成什麼樣纔對讀者有幫助成了難點。git

再三思考,面試只是一時的,工做、學習,纔是長久堅持的。不少人面試不理想多半也是來自於自我學習能力的不足和工做內容的單一以及業務體量小致使。因此我想從全局培養人才的角度出發,也算是技術成長的經歷中提取學習框架,幫助小夥伴們提高技術能力的同時也能夠應對面試。程序員

好像面試愈來愈難?github

招聘一個合格的研發有多難?近半年我差很少收了400份簡歷,篩選簡歷到初面經過的不足10%。這裏面不少人連簡歷都寫很差,面試時也常常回答不到點上,技術棧廣度不夠深度不足,項目經驗缺少,沒有解決複雜場景的經驗等等。但也一樣有不少優秀的,手裏有多個offer最後流失。對於企業是損失,但對於我的來講,我佩服這樣的人,他們技術好有更多的選擇。web

30歲要有30歲的能力,35歲要有35的經歷面試

有時候不是面試難,而是年齡與能力不匹配,對企業招聘來講,一樣能力下你價格還高,爲何不招聘個年輕有活力的呢?(什麼?找對象) 有時候你會說這是販賣焦慮,這是洗腦,但這條路上終究有人前進,有人被動回退。redis

學習是你這個職業一生的事算法

手裏有個 1 2 3,不要想着去懟別人的 4 5 6,由於還有你不知道的 7 8 9。保持空瓶心態從0開始才能學到10全spring

這一篇我會從簡歷的視角出發,簡要概況出研發人員應該具有的能力 有了這篇的基礎上,後續在逐步擴展系列的面試場景,以及對應的面試題細節講解和從哪學習這些知識的一個引導。sql

2、程序員的願望

5年,時間不長不短,有人結婚生娃、有人回家開店、也有人繼續在大城市打拼。

頭兩天在研發羣裏作了一次願望留言,期待下5年後的本身。如圖;

留言心願集中的點,在於;

  1. 身體健康
  2. 頭髮還在
  3. 加薪升職

努力!也照顧好本身。奮鬥!也愛惜好身體。

願望地址:https://github.com/fuzhengwei/CodeGuide/issues/111

3、謝飛機簡歷

這是一份工做4年的謝飛機簡歷,以下;

  • 先看看簡歷,與本身的對比下,有什麼可取之處
  • 若是你是求職者,還但願在這份簡歷裏補充什麼
  • 若是你是面試官,你舉得這份簡歷還差了什麼

  • 這一份開篇的簡歷,能夠閱讀完下面的面試框架進行比對,看看你應該作些什麼 。
  • 後續的系列面經文章,將圍繞簡歷開始,提問和講解面試題。

4、面試框架

1. 自我介紹

  1. 1分鐘左右的自我介紹,簡要的描述出;姓名、畢業時間、工做年限、工做經歷、技術影響力[博客、Github、開源貢獻、專利]等。
  2. 若是有較大型項目或者你們有一致性認知的項目和技術難點攻克,能夠簡單說出項目名稱等。
  3. 方法論沉澱相關;架構設計能力、帶太小組或者團隊、跨部門協調、流程規範制定和執行等。

你要透露出的核心點就是我的的一個基本信息,以及項目和技術上的沉澱,給面試官流出和你留下去的話題

例如:

面試官好,我叫謝飛機,16年畢業於天津工業大學,軟件工程專業,目前已工做4年。我從畢業後就任於途樂數字科技,負責營銷和訂單系統開發。在系統搭建、代碼優化、問題處理上有較豐富的經驗和處理能力。同時也喜歡寫一些技術博客和看一些技術書籍,另外在Spring、Dubbo等源碼學習上有過一些研究以及複用到業務開發中。感謝!

2. 面試類型

依賴於面試官的不一樣,與你一塊兒進入面試的方式也不一樣,好比;

  1. 直接提問型;直接提問一些技術棧問題或者有些公司會考算法。
  2. 場景引導型;經過讓你介紹的一些項目經歷,用過什麼技術棧,在場景下提問。
  3. 連環追問型;從一個點出發,你的每個回答都在爲下一個深刻的問題作開始。
  4. 壓力逼問型;壓力面通常很少,但抗的住並能抓住重點,offer基本穩了。

直接提問型 須要你有必定的技術棧廣度和深度,問題每每也比較有跳躍性。但大部分題目會是熱點問題,但可能不是平常開發中頻率最高的技術點。

場景引導型 須要你有必定的開發架構經驗和項目落地能力,這部分問題基本都會結合實際的業務場景進行提問,每個場景就是一個複雜問題問題的解決能力。這裏問到的場景會與你簡歷中的工做經歷和項目相關,但複雜程度可能會超過你目前簡歷中的項目內容。好比;你寫了一個訂單類的,那麼會問你秒殺的實際解決方案。這樣的問題很難背題應付,須要真的經歷過,研究過。

連環追問型 從一個小的技術點開始,一層層往下剝,每一次的回答也幾乎都是下一個問題的深刻點的來源。這種問題不只考察面試者,也是對面試官的考驗。每每在招聘高級別開發時會進行定向深刻挖掘提問,找到匹配的行業專家級技術人員。

壓力逼問型 這種面試方式通常很少,但可能有的高級面試官會讓你感覺到這種氣場。一方面是確實人家有這樣的技術氣勢,另一個是來自本身的緊張。若是會不是問題,還會在面試官那留下很高的打分。若是不會,那麼會感受到你越不會什麼,面試官越問你什麼。

以上就是基本這四類面試官的風格,求職除了技術能力外還有一部分是眼緣,不必定一個問題不會就是你不優秀,而是在尋找這個職位最適合匹配度的人員。

3. 算法

算法一整塊內容來考的互聯網公司目前有一些,好比;頭條、谷歌、百度,但不必定全部職位都須要去考算法。熱頻考點大部分能夠分以下幾塊:

  1. 動態規劃
  2. 數據結構
  3. 算法思惟

在題目上通常會有排序、二分查找、迴文鏈表、反鏈鏈表,和數據結構設計方面。這些題目能夠經過 leetcode-cn.com 刷題進行練習。

4. 技術棧

技術棧考查的是程序員在編程開發領域學習的廣度很深度,平常的業務開發每每提高都是對API使用的熟練程度,若是再缺乏一些系統設計和技術難點攻克,或者說沒有大流量的衝擊。那麼確實很難回答一些技術深度問題。以下彙總了基本會再技術棧面試中涉及的考題,能夠參考提高我的技術能力。

4.1 技能

4.1.1 Java
JDK源碼
  1. HashMap

    1. HashMap的數據結構(1.七、1.8的區別)
    1. HashMap的實現原理
    2. HashMap擴容爲何是2^n-1
    3. HashMap是線程安全的嗎
    4. HashMap、HashTable是什麼關係?
  2. ThreadLocal

    1. 講講你對ThreadLocal的一些理解
    2. ThreadLocal有哪些應用場景
    3. 瞭解過FastThreadLocal嗎
  3. ArrayList、LinkList

    1. 是否保證線程安全
    2. 底層數據結構
    3. 插入和刪除是否受元素位置的影響
    4. 是否支持快速隨機訪問
    5. 內存空間佔用
    6. 如何進行擴容的,默認初始化空間是多少
  4. String StringBuffer StringBuilder

    1. 有什麼區別
    2. 是線程安全的嗎
  5. jdk1.8的新特性

    1. lambda表達式
    2. Functional Interfaces
    3. Optionals
    4. Stream 流
    5. Parallel-Streams 並行流
併發編程(j.u.c)
  1. volatile

    1. volatile 的做用和使用場景
    2. volatile 如何保證指令重排
    3. 什麼狀況下會發生指令重排
  2. synchronized

    1. 通常用在什麼場景
    2. 實現原理
    3. 鎖升級過程(偏向鎖、輕量級鎖、重量級鎖)
    4. 這是JVM層面鎖,仍是JDK層面鎖{JVM層面}
    5. 這是一種悲觀鎖仍是樂觀鎖{悲觀鎖是獨佔鎖}
  3. lock

    1. 這是JVM層面鎖,仍是JDK層面鎖{JDK層面}
    2. 這是一種悲觀鎖仍是樂觀鎖
    3. 是可重入鎖嗎
  4. ReentrantLock

    1. 與synchronized相比較有什麼不一樣
    2. ReentrantLock 與 Lock 的關係
    3. 鎖過程當中是否可中斷,與之對應的synchronized可中斷嗎
  5. CAS

    1. Unsafe 類的做用
    2. CAS 的理解(compareAndSet)
    3. 什麼是ABA問題
    4. CAS的實現有什麼(AtomicInteger)
  6. AQS

    1. 實現類有哪些
      ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier
    2. 實現了AQS的鎖有哪些
      自旋鎖、互斥鎖、讀鎖寫鎖、條件產量、信號量、柵欄都是AQS的衍生物
      內存屏障,幾乎全部的處理器至少支持一種粗粒度的屏障指令,一般被稱爲「柵欄(Fence)」
多線程
  1. 線程池的種類

    1. newCachedThreadPool
    2. newFixedThreadPool
    3. newScheduledThreadPool
    4. newSingleThreadExecutor
  2. 線程的生命週期

    1. 新建、就緒、運行、阻塞(等待阻塞、同步阻塞、其餘阻塞)、死亡
JVM
  1. GC 優化
  2. JVM 逃逸分析
  3. 類的對象頭都包括什麼
  4. new Object() 初始化都作了什麼
  5. 運行時數據區
  6. Java的內存模型以及GC算法
設計模式
  1. 設計模式6大原則
    單一職責(一個類和方法只作一件事)、里氏替換(多態,子類可擴展父類)、依賴倒置(細節依賴抽象,下層依賴上層)、接口隔離(創建單一接口)、迪米特原則(最少知道,下降耦合)、開閉原則(抽象架構,擴展實現)
  2. 建立型模式
    這類模式提供建立對象的機制, 可以提高已有代碼的靈活性和可複用性。
  3. 結構型模式
    這類模式介紹如何將對象和類組裝成較大的結構, 並同時保持結構的靈活和高效。
  4. 行爲模式
    這類模式負責對象間的高效溝通和職責委派。
反射、代理
  1. 怎麼實現反射調用方法
  2. 怎麼代理一個類,有什麼場景使用
  3. 類代理的原理是什麼
  4. 有什麼框架能夠作類代理
4.1.2 Redis
命令
  1. 計數命令
  2. 排序命令
  3. 加鎖命令
架構
  1. 經常使用的數據類型
  2. 數據淘汰策略
  3. 單線程的爲何那麼快
  4. RDB和AOF的優缺點
  5. 持久化策略選擇
應用
  1. 緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級
  2. Pipeline有什麼好處,爲何要用pipeline
  3. 是否使用過Redis集羣,集羣的原理是什麼
  4. Redis的同步機制瞭解麼
4.1.3 Mysql
  1. 全局鎖
  2. 表鎖
  3. 行鎖
  4. 樂觀鎖、悲觀鎖
  5. 排他鎖
  6. 鎖優化
事務
  1. 事物特徵
  2. 髒讀
  3. 幻讀
  4. 不可重複讀
  5. 事物隔離
  6. 併發事物
  7. 事物實現原理
日誌
  1. 慢查詢日誌
  2. 錯誤日誌
  3. redo log(重作日誌)
  4. binlog(歸檔日誌)
  5. undo log(回滾日誌)
索引
  1. 彙集索引 VS 非彙集索引
  2. 最左匹配原則
  3. 前綴索引
引擎
  1. InnoDB
  2. MyISAM

4.2 框架

4.2.1 Spring
  1. Bean的註冊過程
  2. Bean的定義都包括什麼信息
  3. Spring 事務中的隔離級別有哪幾種
  4. schedule 使用
4.2.2 Mybatis
  1. mybatis在spring的使用中,只須要定義接口,就能夠和xml中的配置的sql語句,進行關聯,執行數據庫增刪改查操做。怎麼實現的
  2. session是怎麼管理的
4.3.3 SpringBoot
  1. SpringBoot 怎麼開發一個本身的Stater
4.2.4 SpringCloud
  1. spring cloud 斷路器的做用是什麼
  2. spring cloud 的核心組件有哪些
    Eureka:服務註冊於發現。
    Feign:基於動態代理機制,根據註解和選擇的機器,拼接請求 url 地址,發起請求。
    Ribbon:實現負載均衡,從一個服務的多臺機器中選擇一臺。
    Hystrix:提供線程池,不一樣的服務走不一樣的線程池,實現了不一樣服務調用的隔離,避免了服務雪崩的問題。
    Zuul:網關管理,由 Zuul 網關轉發請求給對應的服務。

4.3 組件

4.3.1 Dubbo
  1. 通訊模型是什麼樣的
  2. Dubbo 和 Spring Cloud 有什麼區別
  3. dubbo都支持什麼協議,推薦用哪一種
    dubbo://(推薦)
    rmi://
    hessian://
    http://
    webservice://
    thrift://
    memcached://
    redis://
    rest://
  4. Dubbo裏面有哪幾種節點角色
  5. Dubbo中怎麼處理的超時斷開
4.3.2 Mq
  1. RabbitMq
  2. Kafka
4.3.3 elasticsearch
  1. elasticsearch 瞭解多少,說說大家公司 es 的集羣架構,索引數據大小,分片有多少,以及一些調優手段 。
  2. elasticsearch 的倒排索引是什麼
  3. elasticsearch 是如何實現 master 選舉的
  4. 詳細描述一下 Elasticsearch 搜索的過程
4.3.4 Hbase
  1. 拓展類問題
4.3.5 otter
  1. 拓展類問題

4.4 工具

  1. Idea
  2. Maven
  3. Jenkins
  4. JMeter

4.5 架構

4.5.1 系統搭建
  1. MVC
  2. DDD 領域驅動設計
4.5.2 數據庫設計
  1. 分庫分表(水平拆分、垂直拆分)
  2. 業務場景
  3. 基礎配置優化相關
4.5.3 服務治理
  1. 負載均衡
  2. 熔斷
  3. 降級
  4. 限流
  5. 黑白名單
4.5.4 分佈式任務
  1. xxl-job
4.5.5 監控
  1. 系統非入侵全鏈路監控
  2. TP9九、TP99九、QPS、TPS的熟悉程度
4.5.6 壓測
  1. 是否壓測過,有無經驗
  2. 對系統健壯性的把控
  3. JVM參數
  4. GC調優
  5. 代碼優化

4.6 環境

  1. Linux
  2. Tomcat
  3. docker
  4. k8s

5. 項目

5.1 項目經驗

  1. 開發了哪些項目
  2. 重點項目是什麼
  3. 你主要負責哪些
  4. 有過什麼優化

5.2 工做業績

  1. 中大型項目架構能力
  2. 複雜項目落地能力
  3. 重點項目執行落地
  4. 交付能力&質量

5.3 技術沉澱

  1. 方法論
  2. 流程規範制定
  3. 交付質量
  4. 公用組件建設
  5. 開源項目
  6. 複雜架構設計經驗
  7. 團隊技術分享

5.4 工程師品質

  1. 認知範圍,技術、業務、運營
  2. 學習能力,接受能力
  3. 創新技術,遷移能力

5.5 疑難問題處理

  1. 複雜問題推動解決能力

2 . 緊急事故解決能力

5.6 項目推動

  1. 中大型項目推動落地
  2. 資源協調安排
  3. 流程規範實施

5.7 專業影響力

  1. 項目推動過程當中方案執行落地
  2. 帶動他人共同完成,並賦予能力提高
  3. 技術價值創造
  4. 開源項目和專利

6. 我的&面試官

6.1 我的

  1. 可能會有一我的性的問題
  2. 介紹本身部門是什麼的
  3. 其餘你早點入職

6.2 面試官

  1. 部門主要作什麼業務
  2. 入職後承擔哪塊
  3. 有什麼技術挑戰須要提早學習瞭解的

5、總結

  • 結合以上框架內容看本身是不是一個能抗住打的求職者,綜合素質是否全面,技術棧廣度、深度是否在瓶頸裏徘徊,思考下怎麼突破。
  • 面試只是一份求職的開始,面試題也只是學習過程的知識點總結,只流於背題很容易被問倒。不一樣的面試官風格、水平、關注點也都不一樣,只有本身學紮實了才能隨心所面。
  • 以上的技術框架總結有一個xmind思惟導圖,以及面試簡歷,均可以經過在公衆號:bugstack蟲洞棧,回覆資源下載進行獲取。獲取連接打開,找到ID:19

推薦閱讀

相關文章
相關標籤/搜索