之前有零零散散整理過一些專題給大家參考學習,這次一次性來個終極手撕之架構大全,包含開源框架、分布式、微服務、性能優化等四個大專題共17個小專題,全部一鍋端,送給大家一起學習~
注意:需要全部完整版架構大全答案的可以
免費獲取~小編會一一回復大家的~
01 開源框架(Spring +SpringMVC+Mybatis)
開源框架答案決議如下:

1.1 手撕開源框架之Spring
- 什么是 Spring 框架?Spring 框架有哪些主要模塊?
- 使用 Spring 框架能帶來哪些好處?
- 什么是控制反轉(IOC)
- 請解釋下 Spring 框架中的 IoC
- BeanFactory 和 和 ApplicationContext 有什么區別?
- Spring 有幾種配置方式?
- 如何用基于 XML 配置的方式配置 Spring
- 如何用基于 Java 配置的方式配置 Spring
- 怎樣用注解的方式配置 Spring
- 請解釋 Spring Bean 的生命周期?
- Spring Bean 的作用域之間有什么區別?
- Spring 框架中的單例 Beans 是執行緒安全的么?
- 請舉例說明如何在 Spring 中注入一個 Java Collection
- 如何向 Spring Bean 中注入一個 Java.util.Properties
- 請解釋 Spring Bean 的自動裝配?
- 請解釋自動裝配模式的區別?
- 如何開啟基于注解的自動裝配?
- 請舉例解釋@Required 注解?
- 請舉例解釋@Autowired 注解?
- 請舉例說明@Qualifier 注解?
- 構造方法注入和設值注入有什么區別?
- Spring 框架中有哪些不同型別的事件?
- Spring 框架中都用到了哪些設計模式?
1.2 手撕開源框架之SpringMVC
- 什么是 SpringMvc?
- Spring MVC 的優點:
- SpringMVC 作業原理?
- SpringMVC 流程?
- SpringMvc 的控制器是不是單例模式,如果是,有什么問題,怎么解決?
- 如果你也用過 struts2.簡單介紹下 springMVC 和 struts2 的區別有哪些?
- SpingMvc 中的控制器的注解一般用那個,有沒有別的注解可以替代?
- @RequestMapping 注解用在類上面有什么作用?
- 怎么樣把某個請求映射到特定的方法上面?
- 如果在攔截請求中,我想攔截 get 方式提交的方法,怎么配置?
- 怎么樣在方法里面得到 Request,或者 Session?
- 我想在攔截的方法里面得到從前臺傳入的引數,怎么得到?
- 如果前臺有很多個引數傳入,并且這些引數都是一個物件的,那么怎么樣快速得到這個物件?
- SpringMvc 中函式的回傳值是什么?
- SpringMVC 怎么樣設定重定向和轉發的?
- SpringMvc 用什么物件從后臺向前臺傳遞資料的?
- SpringMvc 中有個類把視圖和資料都合并的一起的,叫什么?
- 怎么樣把 ModelMap 里面的資料放入 Session 里面?
- SpringMvc 怎么和 AJAX 相互呼叫的?
- 講下 SpringMvc 的執行流程
- SpringMvc 里面攔截器是怎么寫的?
- 當一個方法向 AJAX 回傳特殊物件,譬如 Object,List 等,需要做什么處理?
1.3 手撕開源框架之Mybatis
- 什么是 MyBatis?
- 講下 MyBatis 的快取
- Mybatis 是如何進行分頁的?分頁插件的原理是什么?
- 簡述 Mybatis 的插件運行原理,以及如何撰寫一個插件?
- Mybatis 動態 sql 是做什么的?都有哪些動態 sql?能簡述一下動態 sql 的執行原理不?
- #{}和${}的區別是什么?
- 為什么說 Mybatis 是半自動 ORM 映射工具?它與全自動的區別在哪里?
- Mybatis 是否支持延遲加載?如果支持,它的實作原理是什么?
- MyBatis 與 Hibernate 有哪些不同?
- MyBatis 的好處是什么?
- 簡述 Mybatis 的 Xml 映射檔案和 Mybatis 內部資料結構之間的映射關系?
- 什么是 MyBatis 的介面系結,有什么好處?
- 介面系結有幾種實作方式,分別是怎么實作的?
- 什么情況下用注解系結,什么情況下用 xml 系結?
- MyBatis 實作一對一有幾種方式?具體怎么操作的?
- Mybatis 能執行一對一、一對多的關聯查詢嗎?都有哪些實作方式,以及它們之間的區別?
- MyBatis 里面的動態 Sql 是怎么設定的?用什么語法?
- Mybatis 是如何將 sql 執行結果封裝為目標物件并回傳的?都有哪些映射形式?
- Xml 映射檔案中,除了常見的 select|insert|updae|delete 標簽之外,還有哪些標簽?
- 當物體類中的屬性名和表中的欄位名不一樣,如果將查詢的結果封裝到指定 pojo?
- 模糊查詢 like 陳述句該怎么寫
- 通常一個 Xml 映射檔案,都會寫一個 Dao 介面與之對應, Dao 的作業原理,是否可以多載?
- Mybatis 映射檔案中,如果 A 標簽通過 include 參考了 B 標簽的內容,請問,B 標簽能否定義在 A 標簽的后面,還是說必須定義在 A 標簽的前面?
- Mybatis 的 Xml 映射檔案中,不同的 Xml 映射檔案,id 是否可以重復?
- Mybatis 中如何執行批處理?
- Mybatis 都有哪些 Executor 執行器?它們之間的區別是什么?
- Mybatis 中如何指定使用哪一種 Executor 執行器?
- Mybatis 執行批量插入,能回傳資料庫主鍵串列嗎?
- Mybatis 是否可以映射 Enum 列舉類?
- 如何獲取自動生成的(主)鍵值?
- 在 mapper 中如何傳遞多個引數?
- resultType resultMap 的區別?
- 使用 MyBatis 的 mapper 介面呼叫時有哪些要求?
- Mybatis 比 IBatis 比較大的幾個改進是什么?
- IBatis 和 MyBatis 在核心處理類分別叫什么?
- IBatis 和 MyBatis 在細節上的不同有哪些?
開源框架(Spring +SpringMVC+Mybatis)答案決議整理:

02 分布式(限流+通訊+數據庫)
分布式答案決議如下:

2.1 手撕分布式限流(Nginx+ZooKeeper)
(1) 手撕分布式限流之Nginx
- 請解釋一下什么是 Nginx?
- 請列舉 x Nginx 的一些特性,
- 請列舉 x Nginx 和 和 Apache 之間的不同點
- 請解釋 x Nginx 如何處理 P HTTP 請求,
- 在 x Nginx 中,如何使用未定義的服務器名稱來阻止處理請求?
- 使用 “ 反向代理服務器 ”
- 請列舉 x Nginx 服務器的最佳用途,
- 請解釋 x Nginx 服務器上的 r Master 和 和 r Worker 行程分別是什么?
- 請解釋你如何通過不同于 0 80 的埠開啟 Nginx?
- 請解釋是否有可能將 x Nginx 的錯誤替換為 2 502 錯誤?
- 在 x Nginx 中,解釋如何在 L URL 中保留雙斜線? ?
- 請解釋 e ngx_http_upstream_module 的作用是什么?
- 請解釋什么是 K C10K 問題?
- 請陳述 s stub_status 和 和 r sub_filter 指令的作用是什么?
- 解釋 x Nginx 是否支持將請求壓縮到上游?
- 解釋如何在 x Nginx 中獲得當前的時間?
- 用 x Nginx 服務器解釋s -s 的目的是什么?
- 解釋如何在 x Nginx 服務器上添加模塊?
(2)手撕分布式限流之ZooKeeper
- ZooKeeper 是什么?
- ZooKeeper 提供了什么?
- Zookeeper 檔案系統
- 四種型別的 znode
- Zookeeper 通知機制
- Zookeeper 做了什么?
- zk 的命名服務(檔案系統)
- zk 的配置管理(檔案系統、通知機制)
- Zookeeper 集群管理(檔案系統、通知機制)
- Zookeeper 分布式鎖(檔案系統、通知機制)
- 獲取分布式鎖的流程
- Zookeeper 佇列管理(檔案系統、通知機制)
- Zookeeper 資料復制
- Zookeeper 作業原理
- zookeeper 是如何保證事務的順序一致性的?
- Zookeeper 下 Server 作業狀態
- zookeeper 是如何選取主 leader 的?
- 分布式通知和協調
- 機器中為什么會有 leader?
- zk 節點宕機如何處理?
- Zookeeper 同步流程
- zookeeper 負載均衡和 nginx 負載均衡區別
- zookeeper watch 機制
2.2 手撕分布式通訊(Kafka+ActiveMQ+RabbitMQ)
(1)手撕分布式通訊之kafka
- Kafka 的設計時什么樣的呢?
- 資料傳輸的事物定義有哪三種?
- Kafka 判斷一個節點是否還活著有那兩個條件?
- producer 是否直接將資料發送到 broker 的 leader(主節點)?
- Kafa consumer 是否可以消費指定磁區訊息?
- Kafka 訊息是采用 Pull 模式,還是 Push 模式?
- Kafka 存盤在硬碟上的訊息格式是什么?
- Kafka 高效檔案存盤設計特點:
- Kafka 與傳統訊息系統之間有三個關鍵區別
- Kafka 創建 Topic 時如何將磁區放置到不同的 Broker 中
- Kafka 新建的磁區會在哪個目錄下創建
- partition 的資料如何保存到硬碟
- kafka 的 ack 機制
- Kafka 的消費者如何消費資料
- 消費者負載均衡策略
- 資料有序
- kafaka 生產資料時資料的分組策略
(2)手撕分布式通訊之ActiveMQ
- 什么是 ActiveMQ?
- ActiveMQ 服務器宕機怎么辦?
- 丟訊息怎么辦?
- 持久化訊息非常慢
- 訊息的不均勻消費,
- 死信佇列,
- ActiveMQ 中的訊息重發時間間隔和重發次數嗎?
(3)手撕分布式通訊之RabbitMQ
- RabbitMQ 中的 broker 是指什么?cluster 又是指什么?
- 什么是元資料?元資料分為哪些型別?包括哪些內容?與 cluster 相關的元資料有哪些?元資料是如何保存的?元資料在 cluster 中是如何分布的?
- RAM node 和 disk node 的區別?
- RabbitMQ 上的一個 queue 中存放的 message 是否有數量限制?
- RabbitMQ 概念里的 channel、exchange 和 queue 這些東東是邏輯概念,還是對應著行程物體?這些東東分別起什么作用?
- vhost 是什么?起什么作用?
- 在單 node 系統和多 node 構成的 cluster 系統中宣告 queue、exchange ,以及進行 binding 會有什么不同?
- 客戶端連接到 cluster 中的任意 node 上是否都能正常作業?
- cluster 中 node 的失效會對 consumer 產生什么影響?若是在 cluster 中創建了mirrored queue ,這時 node 失效會對 consumer 產生什么影響?
- 能夠在地理上分開的不同資料中心使用 RabbitMQ cluster 么?
- 為什么 heavy RPC 的使用場景下不建議采用 disk node ?
- 向不存在的 exchange 發 publish 訊息會發生什么?向不存在的 queue 執行consume 動作會發生什么?
- routing_key 和 binding_key 的最大長度是多少?
- RabbitMQ 允許發送的 message 最大可達多大?
- 什么情況下 producer 不主動創建 queue 是安全的?
- “dead letter”queue 的用途?
- 為什么說保證 message 被可靠持久化的條件是 queue 和 exchange 具有durable 屬性,同時 message 具有 persistent 屬性才行?
- 什么情況下會出現 blackholed 問題?
- 如何防止出現 blackholed 問題?
- Consumer Cancellation Notification 機制用于什么場景?
- Basic.Reject 的用法是什么?
- 為什么不應該對所有的 message 都使用持久化機制?
- RabbitMQ 中的 cluster、mirrored queue,以及 warrens 機制分別用于解決什么問題?存在哪些問題?
2.3 手撕分布式之快取(Redis+memcached+MongoDB)
(1)手撕分布式快取之Redis
- redis 簡介
- 為什么要用 redis /為什么要用快取(高性能、高并發)
- 為什么要用 redis 而不用 map/guava 做快取?
- redis 和 memcached 的區別
- redis 常見資料結構以及使用場景分析(String、Hash、List、Set、Sorted Set)
- redis 設定過期時間
- redis 記憶體淘汰機制(MySQL里有2000w資料,Redis中只存20w的資料,如何保證Redis中的資料都是熱點資料?)
- redis 持久化機制(怎么保證 redis 掛掉之后再重啟資料可以進行恢復)
- redis 事務
- Redis 常見例外及解決方案(快取穿透、快取雪崩、快取預熱、快取降級)
- 分布式環境下常見的應用場景(分布式鎖、分布式自增 ID)
- Redis 集群模式(主從模式、哨兵模式、Cluster 集群模式)
- 如何解決 Redis 的并發競爭 Key 問題
- 如何保證快取與資料庫雙寫時的資料一致性?
(2)分布式快取之memcached
- memcached 是怎么作業的?
- memcached 最大的優勢是什么?
- memcached 和服務器的 local cache (比如 PHP 的 的 APC 、mmap 檔案等)相比,有什么優缺點?
- memcached 和 和 MySQL 的 的 query cache 相比,有什么優缺點?
- memcached 的 的 cache 機制是怎樣的?
- memcached 如何實作冗余機制?
- 我需要把 memcached 中的 item 批量匯出匯入,怎么辦?
- memcached 如何處理容錯的?
- 如何將 memcached 中 中 item 批量匯入匯出?
- memcached 是如何做身份驗證的?
- memcached 的多執行緒是什么?如何使用它們?
- memcached 能接受的 key 的最大長度是多少?
- memcached 對 對 item 的過期時間有什么限制?
- memcached 最大能存盤多大的單個 item ?
- 為什么單個 item 的大小被限制在 1M byte 之內?
(3)手撕分布式快取之MongoDB
- 你說的 NoSQL 資料庫是什么意思?NoSQL 與 RDBMS 直接有什么區別?為什么要使用和不使用NoSQL 資料庫?說一說 NoSQL 資料庫的幾個優點?
- NoSQL 資料庫有哪些型別?
- MySQL 與 MongoDB 之間最基本的差別是什么?
- 你怎么比較 MongoDB、CouchDB 及 CouchBase?
- MongoDB 成為最好 NoSQL 資料庫的原因是什么?
- 32 位系統上有什么細微差別?
- journal 回放在條目(entry)不完整時(比如恰巧有一個中途故障了)會遇到問題嗎?
- 分析器在 MongoDB 中的作用是什么?
- 名字空間(namespace)是什么?
- 如果用戶移除物件的屬性,該屬性是否從存盤層中洗掉?
- 能否使用日志特征進行安全備份?
- 允許空值 null 嗎?
- 更新操作立刻 fsync 到磁盤?
- 如何執行事務/加鎖?
- 為什么我的資料檔案如此龐大?
- 啟用備份故障恢復需要多久?
- 什么是 master 或 primary?
- 什么是 secondary 或 slave?
- 我必須呼叫 getLastError 來確保寫操作生效了么?
- 我應該啟動一個集群分片(sharded)還是一個非集群分片的 MongoDB 環境?
- 分片(sharding)和復制(replication)是怎樣作業的?
- 資料在什么時候才會擴展到多個分片(shard)里?
- 當我試圖更新一個正在被遷移的塊(chunk)上的檔案時會發生什么?
- 如果在一個分片(shard)停止或者很慢的時候,我發起一個查詢會怎樣?
- 我可以把 moveChunk 目錄里的舊檔案洗掉嗎?
- 我怎么查看 Mongo 正在使用的鏈接?
- 如果塊移動操作(moveChunk)失敗了,我需要手動清除部分轉移的檔案嗎?
- 如果我在使用復制技術(replication),可以一部分使用日志(journaling)而其他部分則不使用嗎?
- 當更新一個正在被遷移的塊(Chunk)上的檔案時會發生什么?
- MongoDB 在 A:{B,C}上建立索引,查詢 A:{B,C}和 A:{C,B}都會使用索引嗎?
- 如果一個分片(Shard)停止或很慢的時候,發起一個查詢會怎樣?
- MongoDB 支持存盤程序嗎?如果支持的話,怎么用?
- 如何理解 MongoDB 中的 GridFS 機制,MongoDB 為何使用 GridFS 來存盤檔案?
分布式(限流+快取+通訊)答案決議整理:

03 微服務(Dubbo+Spring Boot+Spring Cloud)
微服務答案決議如下:

3.1 手撕微服務之Dubbo
- Dubbo 支持哪些協議,每種協議的應用場景,優缺點?
- Dubbo 超時時間怎樣設定?
- Dubbo 有些哪些注冊中心?
- Dubbo 集群的負載均衡有哪些策略
- Dubbo 的核心功能?
- Dubbo 服務注冊與發現的流程?
- Dubbo 的架構設計?
- Dubbo 框架設計一共劃分了 10 個層:
- Dubbo 支持哪些協議,每種協議的應用場景,優缺點?
- dubbo 推薦用什么協議?
- Dubbo 默認采用注冊中心?
- Dubbo 與 Spring 的關系?
- Dubbo 的集群容錯方案有哪些?
- Dubbo 的默認集群容錯方案?
- Dubbo 在安全機制方面是如何解決?
- Dubbo 和 Spring Cloud 的關系?
- Dubbo 超時時間怎樣設定?
- Dubbo 和 Spring Cloud 的區別?
3.2 手撕微服務之Spring Boot
- 什么是 Spring Boot?
- Spring Boot 有哪些優點?
- 什么是 JavaConfig?
- 如何重新加載 Spring Boot 上的更改,而無需重新啟動服務器?
- Spring Boot 中的監視器是什么?
- 如何在 Spring Boot 中禁用 Actuator 端點安全性?
- 如何在自定義埠上運行 Spring Boot 應用程式?
- 什么是 YAML?
- 什么是 Spring Profiles?
- 什么是 Spring Batch?
- 如何集成 Spring Boot 和 ActiveMQ?
- 如何使用 Spring Boot 實作分頁和排序?
- 什么是 Swagger?你用 Spring Boot 實作了它嗎?
- 什么是 FreeMarker 模板?
- 如何使用 Spring Boot 實作例外處理?
- 您使用了哪些 starter maven 依賴項?
- 什么是 CSRF 攻擊?
- 什么是 WebSockets?
- 什么是 AOP?
- 什么是 Apache Kafka?
- 我們如何監視所有 Spring Boot 微服務?
3.3 手撕微服務之Spring Cloud
- 什么是 Spring Cloud?
- 使用 Spring Cloud 有什么優勢?
- 服務注冊和發現是什么意思?Spring Cloud 如何實作?
- 負載平衡的意義什么?
- 什么是 Hystrix?它如何實作容錯?
- 什么是 Hystrix 斷路器?我們需要它嗎?
- 什么是 Spring Cloud Bus?我們需要它嗎?
- 什么是 Netflix Feign?它的優點是什么?
微服務(Dubbo+Spring Boot+Spring Cloud)答案決議整理:

04 性能優化(JVM+Tomcat+MySQL)
性能優化答案決議如下:

4.1 手撕性能優化之JVM
- Java 類加載程序?
- 描述一下 JVM 加載 Class 檔案的原理機制?
- Java 記憶體分配,
- GC 是什么? 為什么要有 GC?
- 簡述 Java 垃圾回識訓制,
- 如何判斷一個物件是否存活?(或者 GC 物件的判定方法)
- 垃圾回收的優點和原理,并考慮 2 種回識訓制
- 垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收記憶體嗎?有什么辦法主動通知虛擬機進行垃圾回收?
- Java 中會存在記憶體泄漏嗎,請簡單描述,
- 深拷貝和淺拷貝,
- System.gc() 和 Runtime.gc() 會做什么事情?
- finalize() 方法什么時候被呼叫?解構式 (finalization) 的目的是什么?
- 如果物件的參考被置為 null,垃圾收集器是否會立即釋放物件占用的記憶體?
- 什么是分布式垃圾回收(DGC)?它是如何作業的?
- 串行(serial)收集器和吞吐量(throughput)收集器的區別是什么?
- 在 Java 中,物件什么時候可以被垃圾回收?
- 簡述 Java 記憶體分配與回收策率以及 Minor GC 和 MajorGC
- JVM 的永久代中會發生垃圾回收么?
- Java 中垃圾收集的方法有哪些?
- 什么是類加載器,類加載器有哪些?
- 類加載器雙親委派模型機制?
4.2 手撕性能優化之Tomcat
- 你怎樣給 tomcat 去調優?
- 如何加大 tomcat 連接數
- tomcat 中如何禁止列目錄下的檔案
- 怎樣加大 tomcat 的記憶體
- Tomcat 有幾種部署方式
- Tomcat 的優化經驗
4.3 手撕性能優化之MySQL
- 為查詢快取優化你的查詢
- EXPLAIN你的SELECT查詢
- 當只要一行資料時使用LIMIT 1
- 為搜索欄位建索引
- 在Join表的時候使用相當型別的例,并將其索引
- 千萬不要 ORDER BY RAND()
- 避免 SELECT *
- 永遠為每張表設定一個 ID
- 使用 ENUM 而不是 VARCHAR
- 從 PROCEDURE ANALYSE() 取得建議
- 盡可能的使用 NOT NULL
- Prepared Statements
- 無緩沖的查詢
- 把 IP 地址存成 UNSIGNED INT
- 固定長度的表會更快
- 垂直分割
- 拆分大的 DELETE 或 INSERT 陳述句
- 越小的列會越快
- 選擇正確的存盤引擎
- 使用一個物件關系映射器(Object Relational Mapper)
- 小心“永久鏈接”
性能優化(JVM+Tomcat+MySQL)答案決議整理:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/162897.html
標籤:其他

