意難平!面試小米,一步之遙...

1d4e7c154ca0792c7fb8b8e987cb45e.jpg
面試訓練營的同學,前幾天面試小米,都三面了,本來以爲穩了,但沒想到最後還是掛了。

按往年的經驗來看,小米相比與其他互聯網大廠來說,面試的難度比較低,而且薪資也比較低,所以拿到 Offer 的概率還是很大的。

但今年這個情況,這位同學還是碩士身份,最後還是掛在三面了,確實挺可惜的。

那咱們今天來看看,最近小米麪試的真題吧,帶大家看看小米的面試難度。

1.電商系統開發中都遇到了哪些問題?

電商系統遇到的常見問題:

  1. 高併發 -> 緩存、限流、熔斷。
  2. 庫存問題
    1. 超賣:限流、分佈式鎖、Redis Lua(先判斷庫存 -> 減庫存 + 加訂單)、使用數據庫 update 操作庫存。
    2. 少賣:及時對賬系統 -> 人工介入處理。
  3. 弱網支付問題:支付平臺提供回調方法進行支付狀態的刷新、手動觸發主動出查詢得到支付狀態、定時任務進行刷新。
  4. 刷單:添加圖形驗證碼、IP 黑名單。
  5. 重複訂單問題:業務實現冪等性判斷、數據庫的唯一約束。

2.怎麼用Redis實現秒殺業務?

Redis Lua(先判斷庫存 -> 減庫存 + 加訂單)。

3.爲什麼Redis單線程執行還這麼快?

原因有以下幾個:

  1. 基於內存操作。
  2. Redis 瓶頸是在內存和帶寬,而不是在 CPU 操作。
  3. Redis 使用多路複用的 IO。
  4. 避免多線程切換和過度爭搶。

4.Redis如何掃描前綴相同的key?

Redis 查詢前綴相同的 Key 實現方式:

  1. keys -> keys user*。
  2. scan -> scan 0 math user* count 100。

5.Redis的keys和scan有什麼區別?

keys 查詢所有的匹配數據,scan 是可以查詢部分數據。

6.如何使用Redis實現分佈式鎖?

分佈式鎖實現:

  1. 原始方式:setnx key true(死鎖)/set key true ex 30 nx(鎖誤刪)-> 鎖重入問題。
  2. Redisson 框架實現方式:Redis + Lua 實現。

7.長連接的好處與壞處?

長連接優點:

  1. 避免了重複創建和銷燬連接。
  2. 提高傳輸效率。
  3. 實現實時傳輸。
  4. 節省了系統資源的浪費。

長連接缺點:

  1. 佔用了更多的資源。
  2. 增加了服務器的壓力。
  3. 對網絡環境的要求是比較高。

8.TCP和HTTP有什麼區別?

TCP VS HTTP:

  1. 層級不同:HTTP 屬於應用層協議;TCP 屬於傳輸層的協議。
  2. 數據傳輸方式不同:HTTP 傳輸文本或二進制文件;TCP 傳輸的是數據流。

9.說說HTTPS的執行流程?

HTTPS 執行流程:

  1. 客戶端(瀏覽器)發送 HTTPS 請求到服務器端。
  2. 服務器端使用非對稱加密,產生一個公鑰,將公鑰和 CA 證書給到客戶端。
  3. 客戶端驗證 CA 證書真僞,使用對稱加密生成一個共享祕鑰,使用剛纔的公鑰將共享祕鑰進行加密,將加密信息發送給服務器端。
  4. 服務器端得到信息之後,使用非對稱加密私鑰進行解密,得到對稱加密的共享祕鑰進行通訊。

10.說說ThreadLocal底層實現?

ThreadLocal 底層是通過 ThreadLocalMap 實現,key -> ThreadLocal;value -> 需要存儲的值。

11.ThreadLocal父線程和子線程的數據傳遞?

new InheritableThreadLocal();

12.爲什麼HashMap是線程不安全的?

HashMap 不是線程安全的原因:

  1. JDK 1.8 之前 -> 鏈表死循環問題、數據覆蓋的問題。
  2. JDK 1.8 之後 -> 數據覆蓋的問題。

13.synchronized和volatile有什麼區別?

synchronized VS volatile:

  1. 保證線程安全不同:synchronized 能保證線程安全;volatile 不能保證線程安全。
  2. 底層實現不同
    1. synchronized 底層實現 -> JVM Monitor(監視器)-> C++ ObjectMonitor -> 操作系統 Mutex Lock。
    2. volatile 底層實現 -> 可見性(MESI 協議)、順序性(內存屏障)。

14.說說ThreadPoolExecutor的參數?

ThreadPoolExecutor 參數:

  1. 核心線程數。
  2. 最大線程數(核心線程數+臨時線程數)。
  3. 臨時線程在空閒時間可以存活的最大時間。
  4. 參數三的單位描述。
  5. 任務隊列。
  6. 線程池的創建工廠。
  7. 拒絕策略。

15.說說ThreadPoolExecutor運行機制?

運行機制(當任務來了之後的執行流程):

  1. 判斷核心線程數是否已滿;如果未滿創建核心線程執行任務;如果滿了執行後續操作。
  2. 判斷任務隊列是否已滿;如果未滿將任務添加到隊列;如果滿了執行後續流程。
  3. 判斷最大線程數是否已滿;如果未滿創建臨時線程執行任務;如果滿了執行後續流程。
  4. 執行拒絕策略(內置4種拒絕策略+自定義的拒絕策略)。

16.RocketMQ和Kafka有什麼區別?

RocketMQ VS Kafka 主要區別:

  1. 吐吞量區別:Kafka 吞吐量最高,到達單機百萬級的吞吐;RocketMQ 吐吞量是十萬到百萬級。
  2. 功能上區別:RocketMQ 本身支持死信隊列、延遲隊列、支持消息推和拉取消息;Kafka 本身不支持死信隊列、延遲隊列、消息獲取方式只能是消費者自己來拉取。

17.說說RocketMQ的重試機制?

RocketMQ 重試機制:

  1. 生產者重試:生成者發送消息的類型有同步發送、異步發送、單次發送(oneway),但模式爲同步發送、異步發送纔有消息重試機制。
  2. 消費者重試:消費者模式有廣播模式和集羣模式;廣播模式不會進行消息重試,它只會記錄警告信息;集羣模式會進行消息重試(通過延遲任務來實現消息重試,默認情況下如果重試超過 16 次就會將此消息存到死信隊列)。

18.說說MySQL的事務?

事務特性:

  1. 一致性
  2. 持久化
  3. 原子性
  4. 隔離性
    1. 讀未提交:存在髒讀、不可重複讀和幻讀問題。
    2. 讀已提交:不存在髒讀問題,但依然存在不可重複讀和幻讀的問題。
    3. 可重複讀(MySQL 默認的隔離級別):不存在髒讀問題、不可重複讀,依舊存在幻讀問題。
    4. 串行化:不存在髒讀問題、不可重複讀、幻讀問題,但執行效率不高。

19.說說MySQL的優化?explain有什麼用?

MySQL 優化措施:

  1. 使用合適的查詢語句,不要所有的都使用 select *。
  2. 使用合適的數據類型。
  3. 正確使用索引:
    1. 該創建索引的創建索引。
    2. 查詢時一定要正確的觸發索引。
  4. 數據量大分庫分表。
  5. 使用分佈式數據庫,例如 TiDB。

20.SpringCloud有哪些組件?

Spring Cloud 包含的組件:

  1. 註冊中心:Spring Cloud Alibaba Nacos、Spring Cloud Netflix Euruka。
  2. 配置中心:Spring Cloud Alibaba Nacos。
  3. 網關:Spring Cloud Gateway。
  4. 負載均衡器:Spring Cloud LoadBalancer。
  5. Restful 請求:Spring Cloud Openfeign。
  6. 限流、熔斷:Spring Cloud Alibaba Sentinel。
  7. 分佈式鎖事務:Spring Cloud Alibaba Seata。
  8. 分佈式鏈路追蹤系統:Skywalking。

21.Nacos和Euruka的區別?

Nacos VS Euruka 主要區別:

  1. 功能上不同:Nacos 既提供註冊中心又提供配置中心;Euruka 只有註冊中心。
  2. 通訊方式不同:Nacos 通訊方式是依靠 Netty 實現的長連接;Euruka 短連接+定時任務。
  3. CAP 理論支持不同:Nacos 默認是 AP 模式,但它支持手動設置 CP 模式;Euruka 只支持 AP 模式。
  4. 健康檢查機制不同:Nacos 健康檢查機制(默認臨時實例),每 5s 上報一次健康狀況;15s 未上報任務不健康;30s 會剔除此實例;Euruka 健康檢查機制,每 30s 上報一次健康狀況;60s 未收到認爲不健康;90s 未收到剔除此實例。

22.Nacos怎麼保證數據一致性的

Nacos 通過 Raft 實現 Leader 節點的選舉,由 Leader 節點將數據同步給所有的普通節點,以保證數據的一致性的。

23.反向代理是什麼?

反向代理定義:用於客戶端和服務器端進行通訊,代理服務器端的一種代理,可以隱藏真實的服務器地址。反向代理的經典實現就是 Nginx。
優點:

  1. 反向代理服務器可以有緩存,增加查詢的效率。
  2. 可以實現負載均衡,從而提升服務器的 QPS,實現服務器的水平擴展。
  3. 反向代理通常自帶健康檢查機制,可以幫你正確的訪問健康的服務實例。
  4. 隱藏真實服務器的地址,一定程度的保證了服務器的安全性。

24.Spring事務是怎麼實現的?

Spring 事務實現方式:

  1. 編程式事務
  2. 聲明式事務:動態代理實現 -> 1.攔截目標方法;2.在方法執行前開啓事務;3.如果方法執行期間出現異常回滾事務;4.在方法執行完之後沒有異常,提交事務。

25.SpringBoot自動裝配的實現流程?

Spring Boot 實現流程:

  1. 啓動 Spring Boot 項目時,執行 @SpringBootApplication 註解類。
  2. 去框架資源文件 spring.factories 讀取需要自動裝配的類。
  3. 查找自動裝配類的 @Configuration + @Condition 條件註解,如果滿足自動裝配的條件,將此類通過反射機制創建,並放到 IoC 容器,反之則不創建。

最後

想要此面試題視頻解析的同學,加我微信:GG_Stone【備註:小米】,免費獲取小米麪試解析視頻。

本文已收錄到我的面試小站 www.javacn.site,其中包含的內容有:Redis、JVM、併發、併發、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設計模式、消息隊列等模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章