作者:小傅哥
部落格:https://bugstack.cn
沉澱、分享、成長,讓自己和他人都能有所收穫!?
一、前言
一直以來都有小夥伴問我什麼時候出一些面試系列的文章,腦袋一熱一口答應下來,《重學Java設計模式》寫完就安排。但是怎麼寫,要寫成什麼樣才對讀者有幫助成了難點。
再三思考,面試只是一時的,工作、學習,才是長久堅持的。很多人面試不理想多半也是來自於自我學習能力的不足和工作內容的單一以及業務體量小導致。所以我想從全域性培養人才的角度出發,也算是技術成長的經歷中提取學習框架,幫助小夥伴們提升技術能力的同時也可以應對面試。
好像面試越來越難?
招聘一個合格的研發有多難?近半年我差不多收了400份簡歷,篩選簡歷到初面通過的不足10%。這裡面很多人連簡歷都寫不好,面試時也經常回答不到點上,技術棧廣度不夠深度不足,專案經驗缺乏,沒有解決複雜場景的經驗等等。但也同樣有很多優秀的,手裡有多個offer最後流失。對於企業是損失,但對於個人來說,我佩服這樣的人,他們技術好有更多的選擇。
30歲要有30歲的能力,35歲要有35的經歷
有時候不是面試難,而是年齡與能力不匹配,對企業招聘來說,同樣能力下你價格還高,為什麼不招聘個年輕有活力的呢?(什麼?找物件
) 有時候你會說這是販賣焦慮,這是洗腦,但這條路上終究有人前進,有人被動回退。
學習是你這個職業一輩子的事
手裡有個 1 2 3
,不要想著去懟別人的 4 5 6
,因為還有你不知道的 7 8 9
。保持空瓶心態從0
開始才能學到10全
。
這一篇我會從簡歷的視角出發,簡要概況出研發人員應該具備的能力 有了這篇的基礎上,後續在逐步擴充套件系列的面試場景,以及對應的面試題細節講解和從哪學習這些知識的一個引導。
二、程式設計師的願望
5年,時間不長不短,有人結婚生娃、有人回家開店、也有人繼續在大城市打拼。
頭兩天在研發群裡做了一次願望留言,期待下5年後的自己。如圖;
留言心願集中的點,在於;
- 身體健康
- 頭髮還在
- 加薪升職
努力!也照顧好自己。奮鬥!也愛惜好身體。
願望地址:https://github.com/fuzhengwei/CodeGuide/issues/111
三、謝飛機簡歷
這是一份工作4年的謝飛機簡歷,如下;
- 先看看簡歷,與自己的對比下,有什麼可取之處
- 如果你是求職者,還希望在這份簡歷裡補充什麼
- 如果你是面試官,你舉得這份簡歷還差了什麼
- 這一份開篇的簡歷,可以閱讀完下面的面試框架進行比對,看看你應該做些什麼 。
- 後續的系列面經文章,將圍繞簡歷開始,提問和講解面試題。
四、面試框架
1. 自我介紹
- 1分鐘左右的自我介紹,簡要的描述出;姓名、畢業時間、工作年限、工作經歷、技術影響力[部落格、Github、開源貢獻、專利]等。
- 如果有較大型專案或者大家有一致性認知的專案和技術難點攻克,可以簡單說出專案名稱等。
- 方法論沉澱相關;架構設計能力、帶過小組或者團隊、跨部門協調、流程規範制定和執行等。
你要透露出的核心點就是個人的一個基本資訊,以及專案和技術上的沉澱,給面試官流出和你留下去的話題
例如:
面試官好,我叫謝飛機,16年畢業於天津工業大學,軟體工程專業,目前已工作4年。我從畢業後就職於途樂數字科技,負責營銷和訂單系統開發。在系統搭建、程式碼優化、問題處理上有較豐富的經驗和處理能力。同時也喜歡寫一些技術部落格和看一些技術書籍,另外在Spring、Dubbo等原始碼學習上有過一些研究以及複用到業務開發中。感謝!
2. 面試型別
依賴於面試官的不同,與你一起進入面試的方式也不同,比如;
- 直接提問型;直接提問一些技術棧問題或者有些公司會考演算法。
- 場景引導型;通過讓你介紹的一些專案經歷,用過什麼技術棧,在場景下提問。
- 連環追問型;從一個點出發,你的每一個回答都在為下一個深入的問題做開始。
- 壓力逼問型;壓力面一般不多,但抗的住並能抓住重點,offer基本穩了。
直接提問型 需要你有一定的技術棧廣度和深度,問題往往也比較有跳躍性。但大部分題目會是熱點問題,但可能不是日常開發中頻率最高的技術點。
場景引導型 需要你有一定的開發架構經驗和專案落地能力,這部分問題基本都會結合實際的業務場景進行提問,每一個場景就是一個複雜問題問題的解決能力。這裡問到的場景會與你簡歷中的工作經歷和專案相關,但複雜程度可能會超過你目前簡歷中的專案內容。比如;你寫了一個訂單類的,那麼會問你秒殺的實際解決方案。這樣的問題很難背題應付,需要真的經歷過,研究過。
連環追問型 從一個小的技術點開始,一層層往下剝,每一次的回答也幾乎都是下一個問題的深入點的來源。這種問題不僅考察面試者,也是對面試官的考驗。往往在招聘高階別開發時會進行定向深入挖掘提問,找到匹配的行業專家級技術人員。
壓力逼問型 這種面試方式一般不多,但可能有的高階面試官會讓你感受到這種氣場。一方面是確實人家有這樣的技術氣勢,另外一個是來自自己的緊張。如果會不是問題,還會在面試官那留下很高的打分。如果不會,那麼會感覺到你越不會什麼,面試官越問你什麼。
以上就是基本這四類面試官的風格,求職除了技術能力外還有一部分是眼緣,不一定一個問題不會就是你不優秀,而是在尋找這個職位最適合匹配度的人員。
3. 演算法
演算法一整塊內容來考的網際網路公司目前有一些,比如;頭條、谷歌、百度,但不一定所有職位都需要去考演算法。熱頻考點大部分可以分如下幾塊:
- 動態規劃
- 資料結構
- 演算法思維
在題目上一般會有排序、二分查詢、迴文連結串列、反鏈連結串列,和資料結構設計方面。這些題目可以通過 leetcode-cn.com 刷題進行練習。
4. 技術棧
技術棧考查的是程式設計師在程式設計開發領域學習的廣度很深度,日常的業務開發往往提升都是對API使用的熟練程度,如果再缺少一些系統設計和技術難點攻克,或者說沒有大流量的衝擊。那麼確實很難回答一些技術深度問題。如下彙總了基本會再技術棧面試中涉及的考題,可以參考提升個人技術能力。
4.1 技能
4.1.1 Java
JDK原始碼
-
HashMap
- HashMap的資料結構(1.7、1.8的區別)
- HashMap的實現原理
- HashMap擴容為什麼是2^n-1
- HashMap是執行緒安全的嗎
- HashMap、HashTable是什麼關係?
-
ThreadLocal
- 講講你對ThreadLocal的一些理解
- ThreadLocal有哪些應用場景
- 瞭解過FastThreadLocal嗎
-
ArrayList、LinkList
- 是否保證執行緒安全
- 底層資料結構
- 插入和刪除是否受元素位置的影響
- 是否支援快速隨機訪問
- 記憶體空間佔用
- 如何進行擴容的,預設初始化空間是多少
-
String StringBuffer StringBuilder
- 有什麼區別
- 是執行緒安全的嗎
-
jdk1.8的新特性
- lambda表示式
- Functional Interfaces
- Optionals
- Stream 流
- Parallel-Streams 並行流
併發程式設計(j.u.c)
-
volatile
- volatile 的作用和使用場景
- volatile 如何保證指令重排
- 什麼情況下會發生指令重排
-
synchronized
- 一般用在什麼場景
- 實現原理
- 鎖升級過程(偏向鎖、輕量級鎖、重量級鎖)
- 這是JVM層面鎖,還是JDK層面鎖{JVM層面}
- 這是一種悲觀鎖還是樂觀鎖{悲觀鎖是獨佔鎖}
-
lock
- 這是JVM層面鎖,還是JDK層面鎖{JDK層面}
- 這是一種悲觀鎖還是樂觀鎖
- 是可重入鎖嗎
-
ReentrantLock
- 與synchronized相比較有什麼不同
- ReentrantLock 與 Lock 的關係
- 鎖過程中是否可中斷,與之對應的synchronized可中斷嗎
-
CAS
- Unsafe 類的作用
- CAS 的理解(compareAndSet)
- 什麼是ABA問題
- CAS的實現有什麼(AtomicInteger)
-
AQS
- 實現類有哪些
ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier - 實現了AQS的鎖有哪些
自旋鎖、互斥鎖、讀鎖寫鎖、條件產量、訊號量、柵欄都是AQS的衍生物
記憶體屏障,幾乎所有的處理器至少支援一種粗粒度的屏障指令,通常被稱為“柵欄(Fence)”
- 實現類有哪些
多執行緒
-
執行緒池的種類
- newCachedThreadPool
- newFixedThreadPool
- newScheduledThreadPool
- newSingleThreadExecutor
-
執行緒的生命週期
- 新建、就緒、執行、阻塞(等待阻塞、同步阻塞、其他阻塞)、死亡
JVM
- GC 優化
- JVM 逃逸分析
- 類的物件頭都包括什麼
- new Object() 初始化都做了什麼
- 執行時資料區
- Java的記憶體模型以及GC演算法
設計模式
- 設計模式6大原則
單一職責(一個類和方法只做一件事)、里氏替換(多型,子類可擴充套件父類)、依賴倒置(細節依賴抽象,下層依賴上層)、介面隔離(建立單一介面)、迪米特原則(最少知道,降低耦合)、開閉原則(抽象架構,擴充套件實現) - 建立型模式
這類模式提供建立物件的機制, 能夠提升已有程式碼的靈活性和可複用性。 - 結構型模式
這類模式介紹如何將物件和類組裝成較大的結構, 並同時保持結構的靈活和高效。 - 行為模式
這類模式負責物件間的高效溝通和職責委派。
反射、代理
- 怎麼實現反射呼叫方法
- 怎麼代理一個類,有什麼場景使用
- 類代理的原理是什麼
- 有什麼框架可以做類代理
4.1.2 Redis
命令
- 計數命令
- 排序命令
- 加鎖命令
架構
- 常用的資料型別
- 資料淘汰策略
- 單執行緒的為什麼那麼快
- RDB和AOF的優缺點
- 持久化策略選擇
應用
- 快取雪崩、快取穿透、快取預熱、快取更新、快取降級
- Pipeline有什麼好處,為什麼要用pipeline
- 是否使用過Redis叢集,叢集的原理是什麼
- Redis的同步機制瞭解麼
4.1.3 Mysql
鎖
- 全域性鎖
- 表鎖
- 行鎖
- 樂觀鎖、悲觀鎖
- 排他鎖
- 鎖優化
事務
- 事物特徵
- 髒讀
- 幻讀
- 不可重複讀
- 事物隔離
- 併發事物
- 事物實現原理
日誌
- 慢查詢日誌
- 錯誤日誌
- redo log(重做日誌)
- binlog(歸檔日誌)
- undo log(回滾日誌)
索引
- 聚集索引 VS 非聚集索引
- 最左匹配原則
- 字首索引
引擎
- InnoDB
- MyISAM
4.2 框架
4.2.1 Spring
- Bean的註冊過程
- Bean的定義都包括什麼資訊
- Spring 事務中的隔離級別有哪幾種
- schedule 使用
4.2.2 Mybatis
- mybatis在spring的使用中,只需要定義介面,就可以和xml中的配置的sql語句,進行關聯,執行資料庫增刪改查操作。怎麼實現的
- session是怎麼管理的
4.3.3 SpringBoot
- SpringBoot 怎麼開發一個自己的Stater
4.2.4 SpringCloud
- spring cloud 斷路器的作用是什麼
- spring cloud 的核心元件有哪些
Eureka:服務註冊於發現。
Feign:基於動態代理機制,根據註解和選擇的機器,拼接請求 url 地址,發起請求。
Ribbon:實現負載均衡,從一個服務的多臺機器中選擇一臺。
Hystrix:提供執行緒池,不同的服務走不同的執行緒池,實現了不同服務呼叫的隔離,避免了服務雪崩的問題。
Zuul:閘道器管理,由 Zuul 閘道器轉發請求給對應的服務。
4.3 元件
4.3.1 Dubbo
- 通訊模型是什麼樣的
- Dubbo 和 Spring Cloud 有什麼區別
- dubbo都支援什麼協議,推薦用哪種
dubbo://(推薦)
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest:// - Dubbo裡面有哪幾種節點角色
- Dubbo中怎麼處理的超時斷開
4.3.2 Mq
- RabbitMq
- Kafka
4.3.3 elasticsearch
- elasticsearch 瞭解多少,說說你們公司 es 的叢集架構,索引資料大小,分片有多少,以及一些調優手段 。
- elasticsearch 的倒排索引是什麼
- elasticsearch 是如何實現 master 選舉的
- 詳細描述一下 Elasticsearch 搜尋的過程
4.3.4 Hbase
- 擴充類問題
4.3.5 otter
- 擴充類問題
4.4 工具
- Idea
- Maven
- Jenkins
- JMeter
4.5 架構
4.5.1 系統搭建
- MVC
- DDD 領域驅動設計
4.5.2 資料庫設計
- 分庫分表(水平拆分、垂直拆分)
- 業務場景
- 基礎配置優化相關
4.5.3 服務治理
- 負載均衡
- 熔斷
- 降級
- 限流
- 黑白名單
4.5.4 分散式任務
- xxl-job
4.5.5 監控
- 系統非入侵全鏈路監控
- TP99、TP999、QPS、TPS的熟悉程度
4.5.6 壓測
- 是否壓測過,有無經驗
- 對系統健壯性的把控
- JVM引數
- GC調優
- 程式碼優化
4.6 環境
- Linux
- Tomcat
- docker
- k8s
5. 專案
5.1 專案經驗
- 開發了哪些專案
- 重點專案是什麼
- 你主要負責哪些
- 有過什麼優化
5.2 工作業績
- 中大型專案架構能力
- 複雜專案落地能力
- 重點專案執行落地
- 交付能力&質量
5.3 技術沉澱
- 方法論
- 流程規範制定
- 交付質量
- 公用元件建設
- 開源專案
- 複雜架構設計經驗
- 團隊技術分享
5.4 工程師品質
- 認知範圍,技術、業務、運營
- 學習能力,接受能力
- 創新技術,遷移能力
5.5 疑難問題處理
- 複雜問題推進解決能力
2 . 緊急事故解決能力
5.6 專案推進
- 中大型專案推進落地
- 資源協調安排
- 流程規範實施
5.7 專業影響力
- 專案推進過程中方案執行落地
- 帶動他人共同完成,並賦予能力提升
- 技術價值創造
- 開源專案和專利
6. 個人&面試官
6.1 個人
- 可能會有一個人性的問題
- 介紹自己部門是什麼的
- 其他你早點入職
6.2 面試官
- 部門主要做什麼業務
- 入職後承擔哪塊
- 有什麼技術挑戰需要提前學習瞭解的
五、總結
- 結合以上框架內容看自己是否是一個能抗住打的求職者,綜合素質是否全面,技術棧廣度、深度是否在瓶頸裡徘徊,思考下怎麼突破。
- 面試只是一份求職的開始,面試題也只是學習過程的知識點總結,只流於背題很容易被問倒。不同的面試官風格、水平、關注點也都不同,只有自己學紮實了才能隨心所面。
- 以上的技術框架總結有一個xmind思維導圖,以及面試簡歷,都可以通過在公眾號:
bugstack蟲洞棧
,回覆資源下載進行獲取。獲取連結開啟,找到ID:19