寫在前面
個人背景:
開發4年,坐標杭州
金九銀十已經過去了,寫這篇文章的目的就是與大家談談面試方面的經驗,心得,就個人方面而言,我之前做過的很多的作業都是面試造核彈,作業擰螺絲,但是不要因為自己是個擰螺絲的就不學哪些難啃的技術,當專案出問題的時候,就是考驗技術沉淀的時候,我也迷茫過好長一段時間,學了忘,學了沒用,到底應該怎么成長才能成為一個別人眼中的大神,大牛,關于面試,關于技術的,我只能說有些路只能靠自己去走,沒人可以幫到自己,哪怕偶爾幫一到兩次,但是技術的路這么長,總歸需要自己獨自成長的,
我們遇到每一次面試我們都應該認真對待,有機會一定要多面試,面試是一種非常鍛煉自己的方式,不要錯過任何—場面試,你在面試的程序中,和對方講自己所學,通過對方提問彌補自己的不足,這對自己提升會非常大,下面我會為大家分享一下我最近的一次面試經歷希望對大家有所幫助,總結的不全的地方也請各位海涵,歡迎在評論區留言指正,
下面就是我這次某C輪金融科技公司的面試經歷了,總共是四面:
一面(技術面)
- 重點聊了Java各種集合的實作原理,以及使用場景,主要包括不限于,ArrayList,LinkedList,HashMap,HashSet,TreeMap
- 執行緒池的實作原理,執行緒池中的等待任務只有一個佇列,如果執行緒池中的執行緒比較多,競爭會比較大,怎么解決?
- Java中實作高并發的幾種策略(COW, cas, 鎖),各自的使用場景及區別?
- 簡單的介紹下專案?
二面(專案+技術)
- 聊下專案中高并發,高可用的實作
- 負載均衡的幾種演算法
- 問了幾個設計模式的實作
- 分布式系統中轉賬問題,如何保證分布式事務,專案中怎么處理這種情況?
- MySQL主從復制的實作
- jvm的記憶體模型,類加載機制,jvm gc實作原理,有沒有jvm線上調優經驗,如果遇到線上問題,一般通過哪些步驟定位,除了看日志和走讀代碼還有沒有其他方法?
三面(專案經理面)
- 聊下專案內容,以及專案目前存在的問題,優化點
- 有沒有帶人的經驗,怎么帶一個新人?
- 離職的原因,對下一份作業的期望?
問了幾個問題:
- 目前這邊開展的是新業務,怎么讓大家這群“新”人很好的配合起來
- 目前公司這塊的業務在技術上的側重是什么,會有哪些挑戰點
四面(地區技術負責人面試)
- 聊了下專案
- 下一份作業,首先考慮的三個點按優先級排列是什么?
- 還有幾個問題記不清了
最后僥幸還是通過了,但是由于自身的一些原因沒有去這家公司作業,后續也是去面試了一些其他公司,但都不是自己理想的公司,下面說一說我的面試總結吧,
- 專案經歷一定要準備好,目前市面上招聘基本上要求都是高并發,大資料,高可用,所以在你的專案中有哪些體現一定要提前準備好,并適當挖坑,也就是說目前還有哪些優化點可以做但是目前沒有做,
- Java的基本功一定要扎實,不是說資料結構和演算法要多么精通,但是至少Java中常見的集合的原理要知道,原始碼要過一遍,使用場景要了如指掌
- Java多執行緒,執行緒池的實作,并發包下面涉及到的經典工具,AQS,CAS,兩種鎖的實作,常用的并發工具,阻塞佇列
- jvm的記憶體模型,HP原則,記憶體可見性;jvm類加載機制,類的加載程序;jvm的運行時資料區;Java gc的實作
- ssm框架的實作原理
- redis等中間件的資料結構,使用場景
- 高并發場景的常見處理手段
- 高可用系統的設計
- 分布式系統的設計,cap理論,分布式系統在實際場景中的運用,
這些年參加的面試場次大大小小也有兩位數了,由于目前整個IT行業也有大量的Java后端程式員,所以后端開發崗位還是比較多的,如何在一大堆的面試者里面脫穎而出是我們要面對的一個最重要的問題,我覺得除了平時的積累,面試前還要系統的梳理一下自己會的知識點,萬丈高樓平地起,掌握底層知識才是最重要的,下面我會把我搜羅到的Java全堆疊知識點筆記與架構面試知識點全梳理筆記分享出來,有需要的讀者老哥文末有獲取方式哈~
Java全堆疊知識點整理(篇幅關系,就只展示目錄了)

這份全堆疊知識點筆記有283頁,需要的讀者老哥幫忙點贊轉發加關注小編一下,然后私信【666】即可獲取~
訊息佇列
- 為什么使用訊息佇列?訊息佇列有什么優點和缺點?Kafka、ActiveMQ、RabbitMQ、R
- 如何保證訊息佇列的高可用?
- 如何保證訊息不被重復消費?或者說,如何保證訊息消費的冪等性?
- 如何保證訊息的可靠性傳輸?或者說,如何處理訊息丟失的問題?
- 如何保證訊息的順序性?
- 如何解決訊息佇列的延時以及過期失效問題?訊息佇列滿了以后該怎么處理?有幾百萬訊息持續積壓幾小時
- 如果讓你寫一個訊息佇列,該如何進行架構設計?說一下你的思路,

搜索引擎
- es 的分布式架構原理能說一下么(es 是如何實作分布式的啊)?
- es 寫入資料的作業原理是什么啊?es 查詢資料的作業原理是什么啊?底層的 lucene 介紹
- es 在資料量很大的情況下(數十億級別)如何提高查詢效率啊?
- es 生產集群的部署架構是什么?每個索引的資料量大概有多少?每個索引大概有多少個分片?

Redis快取
- 專案中快取是如何使用的?為什么要用快取?快取使用不當會造成什么后果?
- redis 和 memcached 有什么區別?redis 的執行緒模型是什么?為什么 redis
- redis 都有哪些資料型別?分別在哪些場景下使用比較合適?
- redis 的過期策略都有哪些?記憶體淘汰機制都有哪些?手寫一下 LRU 代碼實作?
- 如何保證 redis 的高并發和高可用?redis 的主從復制原理能介紹一下么?redis 的哨
- redis 的持久化有哪幾種方式?不同的持久化機制都有什么優缺點?持久化機制具體底層是如何實作的
- redis 集群模式的作業原理能說一下么?在集群模式下,redis 的 key 是如何尋址的?分
- 了解什么是 redis 的雪崩、穿透和擊穿?redis 崩潰之后會怎么樣?系統該如何應對這種情況
- 如何保證快取與資料庫的雙寫一致性?
- redis 的并發競爭問題是什么?如何解決這個問題?了解 redis 事務的 CAS 方案嗎?
- 生產環境中的 redis 是怎么部署的?

分庫分表
- 為什么要分庫分表(設計高并發系統的時候,資料庫層面該如何設計)?用過哪些分庫分表中間件?不同的分
- 現在有一個未分庫分表的系統,未來要分庫分表,如何設計才可以讓系統從未分庫分表動態切換到分庫分表上
- 如何設計可以動態擴容縮容的分庫分表方案?
- 分庫分表之后,id 主鍵如何處理?

讀寫分離
你們有沒有做 MySQL 讀寫分離?如何實作 MySQL 的讀寫分離?MySQL 主從復制原理的是啥

如何設計一個高并發系統?

分布式系統
- 說一下的 dubbo 的作業原理?注冊中心掛了可以繼續通信嗎?說說一次 rpc 請求的流程?
- dubbo 支持哪些通信協議?支持哪些序列化協議?說一下 Hessian 的資料結構?PB 知道
- dubbo 負載均衡策略和集群容錯策略都有哪些?動態代理策略呢?
- dubbo 的 spi 思想是什么?
- 如何基于 dubbo 進行服務治理、服務降級、失敗重試以及超時重試?
- 分布式服務介面的冪等性如何設計(比如不能重復扣款)?
- 分布式服務介面請求的順序性如何保證?
- 如何自己設計一個類似 Dubbo 的 RPC 框架?
- zookeeper 都有哪些使用場景?
- 一般實作分布式鎖都有哪些方式?使用 redis 如何設計分布式鎖?使用 zk 來設計分布式鎖可
- 分布式事務了解嗎?你們是如何解決分布式事務問題的?
- 集群部署時的分布式 session 如何實作?

高可用架構
- Hystrix介紹
- 基于 Hystrix 執行緒池技術實作資源隔離
- 基于 Hystrix 信號量機制實作資源隔離
- Hystrix 隔離策略細粒度控制
- 深入 Hystrix 執行時內部原理
- 基于 request cache 請求快取技術優化批量商品資料查詢介面
- 基于本地快取的 fallback 降級機制
- 深入 Hystrix 斷路器執行原理
- 深入 Hystrix 執行緒池隔離與介面限流
- 基于 timeout 機制為服務介面呼叫超時提供安全保護
- 如何限流?在作業中是怎么做的?說一下具體的實作?
- 如何做技術選型?Sentinel 還是 Hystrix?

SpringCloud微服務架構
- 什么是 Spring Cloud?
- 使用 Spring Cloud 有什么優勢?
- 服務注冊和發現是什么意思?Spring Cloud 如何實作?
- 負載平衡的意義什么?
- 什么是 Hystrix?它如何實作容錯?
- 什么是 Hystrix 斷路器?我們需要它嗎?
- 什么是 Netflix Feign?它的優點是什么?
- 什么是 Spring Cloud Bus?我們需要它嗎?


為了不影響大家的閱讀體驗,就只能將主要內容展示出來了,需要這份178頁Java架構面試知識點整理筆記跟上面的全堆疊知識點筆記的讀者老哥,幫忙點贊轉發加關注小編一下,然后添加小助理vx:bjmsb2020 即可獲取,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/226191.html
標籤:其他
