四、設計模式
1、設計模式6大原則
1)單一職責(一個類和方法只做一件事)、
2)里氏替換(多態,子類可擴展父類)、
3)依賴倒置(細節依賴抽象,下層依賴上層)、
4)接口隔離(建立單一接口)、迪米特原則(最少知道,降低耦合)、
5)開閉原則(抽象架構,擴展實現)
2、創建型模式
這類模式提供創建對象的機制, 能夠提升已有代碼的靈活性和可復用性。
3、結構型模式
這類模式介紹如何將對象和類組裝成較大的結構, 并同時保持結構的靈活和高效。
4、行為模式
這類模式負責對象間的高效溝通和職責委派。
五、反射,代理
1、怎么實現反射調用方法
1)獲取目標類的class對象
2)通過class對象獲取要調用的Method對象
3)使用Method對象的invoke()方法調用目標方法
2、怎么代理一個類,有什么場景使用
1)靜態代理:在編譯期就確定代理類和被代理類之間的關系,代理類需要手動編寫
2)JDK動態代理:在運行時動態生成代理類,需要借助Proxy和InvocationHandler
3)CGLIB動態代理:這是基于繼承的動態代理,無需被代理類實現接口,通過生成被代理類的子類來實現代理。
代理方式 | 優點 | 缺點 | 適用場景 |
---|---|---|---|
靜態代理 | 簡單直觀,性能好 | 代碼冗余,維護成本高 | 代理類少且固定的場景 |
JDK 動態代理 | 無需手動編寫代理類,靈活 | 只能代理實現接口的類 | 基于接口的代理場景 |
CGLIB 動態代理 | 可代理沒有實現接口的類 | 生成代理類耗時,性能略低 | 無接口的類代理場景 |
3、類代理的原理是什么
代理類型 | 核心原理 | 依賴條件 | 底層技術 |
---|---|---|---|
靜態代理 | 編譯期手動編寫代理類,組合被代理對象 | 代理類與被代理類實現同一接口 | 硬編碼組合 |
JDK 動態代理 | 運行時生成實現接口的代理類,轉發調用 | 被代理類必須實現接口 | 反射 + 字節碼生成 |
CGLIB 動態代理 | 運行時生成被代理類的子類,重寫方法 | 被代理類不能是 final 類 | ASM 字節碼操作 |
4、有什么框架可以做類代理
1)spring中的AOP
2)CGLIB
3)Javassist?
4)mybatis(動態生成Mapper類的代理)
六、Redis
命令
1、計數命令
incr 和 decr
2、排序命令
sort
3、加鎖命令
set nx
架構
1、常用的數據類型
hash,set,List,String,zset
數據類型 | 底層結構(簡化) | 核心特點 | 常用命令 | 典型應用場景 |
---|---|---|---|---|
String(字符串) | 動態字符串(SDS) | 1. 最基礎類型,value 可存字符串、整數、浮點數 2. 最大存儲容量 512MB 3. 支持原子性增減操作 | SET /GET 、INCR /DECR 、APPEND 、EXPIRE 、MSET /MGET | 1. 緩存:存儲用戶信息、商品詳情等 2. 計數器:文章閱讀量、登錄次數( INCR )3. 分布式鎖: SET key value NX EX |
Hash(哈希) | 哈希表(數組 + 鏈表) | 1. 鍵值對的集合(類似 Java 的 HashMap) 2. 單個 Hash 可存儲多個字段(field-value) 3. 操作單個字段時,無需加載整個 Hash | HSET /HGET 、HMSET /HMGET 、HGETALL 、HDEL 、HKEYS /HVALS | 1. 存儲對象:用戶信息(id 為 key,name/age/phone 為 field) 2. 購物車:用戶 ID 為 key,商品 ID 為 field,數量為 value |
List(列表) | 雙向鏈表(或壓縮列表) | 1. 有序(按插入順序)、可重復的元素集合 2. 支持首尾高效操作(時間復雜度 O (1)),中間操作低效(O (n)) 3. 可實現 “棧” 或 “隊列” | LPUSH /RPUSH (增)、LPOP /RPOP (刪)、LRANGE (查)、LLEN (長度) | 1. 消息隊列:LPUSH ?生產消息,RPOP ?消費消息2. 排行榜:最新評論、最新訂單(首尾插入 + 范圍查詢) 3. 棧 / 隊列: LPUSH+LPOP (棧)、LPUSH+RPOP (隊列) |
Set(集合) | 哈希表(或整數集合) | 1. 無序、不可重復的元素集合 2. 支持交集、并集、差集等集合運算(原子性) 3. 查找元素效率高(O (1)) | SADD /SREM (增刪)、SMEMBERS (查所有)、SISMEMBER (判斷存在)、SINTER (交集)、SUNION (并集) | 1. 標簽:文章標簽(一個文章多個標簽,去重) 2. 社交:共同好友( SINTER )、好友推薦(SUNION )3. 去重:用戶簽到記錄(避免重復簽到) |
Sorted Set(有序集合) | 跳表(+ 哈希表) | 1. 有序(按 “分數” 排序)、不可重復的元素集合 2. 每個元素關聯一個 “分數(score)”,按 score 升序排列 3. 支持按分數范圍 / 排名快速查詢 | ZADD (增)、ZRANGE /ZREVRANGE (按排名查)、ZSCORE (查分數)、ZREM (刪)、ZCOUNT (按分數統計) | 1. 排行榜:游戲積分排名(ZADD ?加分數,ZREVRANGE ?查 Top N)2. 延時任務:score 設為時間戳, ZRANGEBYSCORE ?取到期任務3. 范圍統計:統計分數在 80-100 分的用戶 |
2、數據淘汰策略
1)volatile-lru(least recently used):從已設置過期時間的數據集中挑選最近最少使用的數據淘汰。
2)volatile-ttl:從已設置過期時間的數據集中挑選將要過期的數據淘汰。
3)volatile-random:從已設置過期時間的數據集中任意選擇數據淘汰。
4)allkeys-lru(least recently used):從數據集中移除最近最少使用的數據淘汰。
5)allkeys-random:從數據集中任意選擇數據淘汰。
6)no-eviction(默認內存淘汰策略):禁止驅逐數據,當內存不足以容納新寫入數據時,新寫入操作會報錯。
7)volatile-lfu(least frequently used):從已設置過期時間的數據集中挑選最不經常使用的數據淘汰。
8)allkeys-lfu(least frequently used):從數據集中移除最不經常使用的數據淘汰。
3、單線程的為什么那么快
1)純內存操作:這是最主要的原因,因為Redis數據讀寫都發生在內存中,訪問速度很快
2)高效的IO模型:Redis使用單線程事件循環配置IO多路復用技術,讓單線程可以同時處理多個IO請求,避免了多線程情況下的上下文切換和鎖沖突問題。
3)優化的內部數據結構:Redis會根據數據大小和類型動態選擇最合適的內部編碼,在性能和空間效率之間選擇最佳平衡
4)簡潔高效的通信協議:Redis使用的是自己設計的RESP協議,這個協議實現簡單,解析性能好,并且是二進制安全的
4、RDB和AOF的優缺點
RDB:Redis可以通過創建快照來存儲內存里某個時間點的數據副本,并對其進行備份,還可以將快照復制到其他服務,用于數據同步或者數據恢復的作用。
AOF:Redis會記錄每一條更改Redis數據的命令,并將其記錄在AOF緩沖區中,然后寫入AOF文件。
對比維度 | RDB(快照式) | AOF(日志式) |
---|---|---|
1. 數據安全性 | 劣勢:存在數據丟失風險。 原因:RDB 是 “定時快照”(如每 5 分鐘生成一次),若在兩次快照間隔內宕機,期間新增 / 修改的數據會全部丟失。 | 優勢:數據安全性更高,丟失數據可控制。 原因:AOF 支持三種刷盤策略(見下文),默認? fsync everysec (每秒刷盤一次),最多丟失 1 秒內的數據。 |
2. 文件大小 | 優勢:文件體積小。 原因:RDB 是二進制壓縮文件,僅保存數據最終狀態,不記錄中間過程(如多次修改同一鍵,僅存最終值)。 | 劣勢:文件體積大。 原因:AOF 記錄每一條寫命令,即使多次修改同一鍵,也會保留所有歷史命令(需通過 AOF 重寫優化)。 |
3. 恢復速度 | 優勢:恢復速度快。 原因:加載時直接讀取二進制快照,無需執行命令,適合大數據量場景(如 GB 級數據恢復僅需幾秒)。 | 劣勢:恢復速度慢。 原因:恢復時需逐條執行 AOF 文件中的所有命令,命令越多、數據量越大,恢復時間越長(GB 級數據可能需要分鐘級)。 |
4. 性能影響(寫操作) | 優勢:對寫性能影響小。 原因:RDB 僅在 “生成快照” 時消耗資源(fork 子進程、遍歷內存),平時的寫操作無額外開銷;但?fork 子進程可能導致短暫阻塞(尤其是內存大時,fork 耗時增加)。 | 劣勢:對寫性能有一定影響。 原因:每一條寫命令都需要追加到 AOF 文件,且刷盤( fsync )操作會涉及磁盤 I/O;但可通過調整刷盤策略平衡性能與安全性。 |
5. 持久化策略靈活性 | 劣勢:策略單一,僅支持 “定時快照”(如?save 900 1 ?表示 900 秒內至少 1 次寫操作則觸發快照),無法實現 “實時持久化”。 | 優勢:策略靈活,支持三種刷盤策略(通過?appendfsync ?配置):-? always :每寫一條命令就刷盤(最安全,性能最差);-? everysec :每秒刷盤一次(默認,平衡安全與性能);-? no :由操作系統決定何時刷盤(性能最好,安全性最差)。 |
6. 兼容性 | 優勢:兼容性強。 原因:RDB 文件是二進制格式,幾乎支持所有 Redis 版本(舊版本可加載新版本的 RDB 文件,反之亦然,需注意大版本差異)。 | 劣勢:兼容性較弱。 原因:AOF 文件記錄的是 Redis 命令,不同版本的命令語法可能變化(如舊版本不支持新版本的命令),可能導致恢復失敗。 |
7. 主從復制支持 | 優勢:主從復制初始化時,主節點會生成 RDB 文件發送給從節點,快照文件體積小,傳輸效率高,適合大規模集群部署。 | 劣勢:主從復制初始化不依賴 AOF(默認用 RDB),若強制用 AOF 傳輸,文件體積大,傳輸耗時久,影響集群同步效率。 |
8. 運維成本 | 優勢:運維簡單。 原因:僅需管理一個 RDB 文件,適合定時備份(如每天凌晨生成快照并歸檔)。 | 劣勢:運維稍復雜。 原因:需處理 AOF 重寫(避免文件過大),且可能出現 AOF 文件損壞(需用? redis-check-aof ?工具修復)。 |
5、持久化策略選擇
1)如果Redis里存儲的數據丟失一些也沒有影響的話,可以考慮使用RDB
2)不建議單獨使用AOF,因為時不時創建一個RDB快照,恢復速度也比AOF快,只是需要較大的內存
3)如果保存的數據安全性較高,可以將AOF和RDB混合使用
應用
1、緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級
1)緩存雪崩:大量緩存的key在同一時間段內全部失效,導致原本由緩存支撐的高并發請求全部到了數據庫(隨機設置過期時間)
2)緩存穿透:請求的數據在緩存和數據庫中都不存在,導致每次請求都會穿透緩存到達數據庫(在緩存中設置空值,布隆過濾器)
3)緩存預熱:主動將熱點數據提前存入緩存中,一般使用場景是在秒殺前將商品信息存到緩存
4)緩存更新:當數據庫中的數據發生更新后,要同步到緩存中
5)緩存降級:在系統面臨巨大壓力下,主動放棄非核心數據的緩存能力,返回簡化數據的策略
2、Pipeline有什么好處,為什么要用pipeline
好處
1)一次可以向客戶端發送多條命令,減少往返次數,提升通信效率
2)提升批量操作的吞吐量
3)簡化批量命令的編程模型
為什么要用它?
首先Redis執行命令的速度非常快,那么性能瓶頸就在網絡通信上,通過Pipeline 同時請求多條命令,這樣就可以提升Redis處理數據的速度
3、是否使用過Redis集群,集群的原理是什么
主從架構:由1個主節點+N個從節點組成,主節點負責寫操作,從節點負責讀操作,從節點通過復制同步主節點數據,實現數據備份,缺點是主節點宕機后,需手動切換從節點為主節點,無法自動故障轉移
哨兵架構:由主從架構+哨兵節點(通常3個)組成,可以監控主從節點狀態,當主節點宕機時,自動選舉從節點升級為主節點,并通知客戶端新的主節點地址,缺點是無法解決數據分片問題,單主節點內存受限
Cluster集群架構:由多個主從節點組成,主節點之間通過Gossip協議通信,支持數據分片及故障轉移,適用于海量數據,高并發讀寫的分布式場景
4、Redis的同步機制了解么
Redis的同步機制核心是主從復制,實現目標是主節點向從節點單向同步數據。
全量同步
1)從節點發起同步請求
2)主節點生成RDB快照
3)主節點發送RDB快照給從節點
4)從節點加載RDB快照
5)主節點發送復制緩沖區命令
增量同步
1)從節點連接主節點,將自身數據的偏移量傳給主節點
2)主節點從偏移量開始,將緩沖區的命令同步給從節點
七、MySQL
鎖
1、全局鎖
作用于整個MySQL服務器實例的鎖機制,其核心作用是阻塞所有的寫操作和部分讀操作,確保在獲得鎖的期間,整個MySQL處于靜止狀態,不會發生任何數據變更
2、表鎖
?MySQL 中鎖定粒度最大的一種鎖(全局鎖除外),是針對非索引字段加的鎖,對當前操作的整張表加鎖,實現簡單,資源消耗也比較少,加鎖快,不會出現死鎖
3、行鎖
MySQL 中鎖定粒度最小的一種鎖,是針對索引字段加的鎖?,只針對當前操作的行記錄進行加鎖。 行級鎖能大大減少數據庫操作的沖突。其加鎖粒度最小,并發度高,但加鎖的開銷也最大,加鎖慢,會出現死鎖
4、樂觀鎖、悲觀鎖
樂觀鎖是指對任何請求保持樂觀,認為它們相互不會造成影響
悲觀鎖是指對任何請求保持悲觀,認為它們每次請求都會修改數據
5、排他鎖
事務在修改記錄的時候獲取排他鎖,不允許多個事務同時獲取
6、鎖優化
1)優化索引,避免鎖升級
2)優化事務設計,縮短鎖持有時間
3)優化sql語句,減少鎖競爭
事務
1、事務特征
事務是指對數據庫的一次操作,要么全部成功,要么全部不成功,主要有四大特征:
1)原子性:事務是最小的執行單位,不允許被分割
2)一致性:執行事務前后,數據保持一致
3)隔離性:并發訪問數據庫時,線程之間互不干擾
4)持久性:一次事務對數據庫的操作永久有效
2、臟讀
一個事務讀取數據后,且對數據產生了修改,這個修改對其他事務可見,即使當前事務沒有提交,這時另一個事務讀取這條數據,但是上一個事務因為某些原因被回滾,導致數據沒有同步到數據庫,那么另一個事務讀到的就是臟數據。
3、不可重復讀
一個事務讀取多次同一條數據,但是這條數據被別的事務修改了,這就導致兩次讀取到的值不一樣
4、幻讀
現象與不可重復讀類似,多次讀取數據庫時,由于別的事務插入了幾條數據,導致兩次讀到的數據行數不一樣,像是出現了幻覺。
5、事務隔離
MySQL有四種隔離級別
1)讀未提交
2)讀已提交
3)可重復讀
4)序列化讀
6、事務實現原理
實現核心主要依賴于INNDB引擎,底層是通過日志系統,鎖機制和MVCC三大組件協同工作。
日志系統
undo log回滾日志,redo log重做日志,binlog歸檔日志
MVCC
MVCC 是一種并發控制機制,用于在多個并發事務同時讀寫數據庫時保持數據的一致性和隔離性。它是通過在每個數據行上維護多個版本的數據來實現的。當一個事務要對數據庫中的數據進行修改時,MVCC 會為該事務創建一個數據快照,而不是直接修改實際的數據行。
索引
1、聚簇索引 VS 非聚簇索引
概念 | 核心定義 | 關鍵特征 |
---|---|---|
聚簇索引 | 索引的 B+ 樹結構與數據行的物理存儲完全重合,即?索引的葉子節點就是數據行本身。 | 索引即數據,數據即索引 |
非聚簇索引 | 索引的 B+ 樹結構與數據行物理存儲分離,葉子節點僅存儲 “索引鍵 + 聚簇索引鍵”(而非完整數據)。 | 索引與數據獨立,需 “回表” 查詢 |
2、最左匹配原則
在使用聯合索引時,MySQL會根據索引的字段順序,從左到右依次匹配查詢條件中的字段
3、前綴索引
針對字符串類型字段(如?VARCHAR
、CHAR
、TEXT
?等)的索引優化方式,它不索引字段的完整值,而是僅截取字段的前 N 個字符(前綴)創建索引。
八、框架
Spring
1、Bean的生命周期
創建 -> 賦值 ->?初始化 -> 銷毀
首先,實例化一個bean對象,為bean設置相關屬性和依賴,調用beanNameAware中的setBeanName方法取設置bean的名字,然后調用setBeanFactory方法設置bean對應的工廠信息。然后調用bean前置處理器中的方法,處理一些前置操作,調用初始化接口的方法,處理一些bean初始化是的操作,調用init方法,然后調用bean的后置處理器中的方法,處理一些后置操作。此時,bean已經可以被使用了,當需要銷毀時,調用destroy方法?
2、Bean的定義都包括什么信息
1)bean的唯一標識:beanID或者beanName
2)bean的類型信息,屬于哪個class
3)bean的作用域
4)bean的構造參數
5)bean的屬性
6)bean的初始化和銷毀方法
7)bean的依賴關系
3、Spring 事務中的隔離級別有哪幾種
DEFAULT(默認值):默認值為READ_COMMITTED。
READ_UNCOMMITTED(讀未提交):允許事務讀取其他事務未提交的數據,可能出現臟讀
READ_COMMITTED(讀已提交):事務只能讀取其他事務已經提交的數據,可以避免臟讀,但是可能出現不可重復讀
REPEATABLE_READ(可重復讀):保證同一事務內多次讀取同一數據的結果一致,可以避免臟讀和不可重復讀,但是會出現幻讀
SERIALIZABLE(序列化讀):最高隔離級別,強制事務串行執行,避免所有并發問題。
4、schedule 使用
cron表達式
5、如何解決循環依賴
通過三級緩存來解決的。一級緩存存最終形態的bean,二級緩存存尚未填充屬性的bean,三級緩存存最原始的bean
當Spring創建beanA后,發現A依賴于B,又去創建B,而B又依賴A,又去創建A;此時在創建的時候會發現發生了循環依賴,因為A還沒初始化完成,所以一二級緩存中并沒有它,然后創建一個A最原始的對象放到三級緩存中,提前暴露給B,那么B就可以創建一個未填充屬性的bean放在二級緩存中,此時A可以從二級緩存中獲取到B,然后初始化成功。
6、SpringMVC的工作流程
客戶端向服務端發起一次請求,這個請求會先到中央處理器中,中央處理器接收到請求后會調用handlerMapping處理器映射器,在handlerMapping找到對應的controller處理,并將鏈路返回給中央處理器,中央處理器將鏈路信息傳給handleradapter處理器適配器,在這里會去執行對應的controller并得到modelAndView,然后返回給中央處理器,中央處理器將modelAndView傳給視圖解析器,視圖解析器將模型填充到view視圖中,返回給中央處理器,中央處理器將view返回給客戶端。
7、如何理解AOP和IOC
IOC:控制反轉,就是由容器來負責控制對象的生命周期和對象之間的關系,以前是我們想要什么樣的對象就自己創建,現在是想要什么對象,就去找容器拿
AOP:面向切面編程,能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任(例如事務處理、日志管理、權限控制等)封裝起來,便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可拓展性和可維護性。
8、Springboot的自動裝配
開啟自動裝配的注解是enableAutoConfiguration,但是一般啟動類上的注解是springbootAplication,這是一個復合注解,它里面包含了enableAutoConfiguration
自動裝配的核心邏輯實際上是通過一個AutoConfigrationImportSelector類去實現的,它實現了ImportSelector接口,這個接口的作用就是收集需要導入的配置類,配合import注解就可以將相應的類導入到spring容器中。獲取注入類的方法是selectImports,主要流程是,先獲取注解的屬性,用于后面的排除,然后獲取所有需要自動裝配的的配置類的路徑,這一步是最關鍵的,然后去掉重復的配置類和需要排除的重復類,把需要自動加載的配置類路徑存儲起來,后面再按照路徑依次加載。
9、spring cloud 的核心組件有哪些
Eureka:服務注冊于發現。
Feign:基于動態代理機制,根據注解和選擇的機器,拼接請求 url 地址,發起請求。
Ribbon:實現負載均衡,從一個服務的多臺機器中選擇一臺。
Hystrix:提供線程池,不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務雪崩的問題。
Zuul:網關管理,由 Zuul 網關轉發請求給對應的服務。
10、spring ioc容器啟動時會干什么?
分為兩個階段:容器啟動階段和bean實例化階段
在容器啟動階段中先去加載配置,然后分析配置信息,將其裝配到beanDefinetion中,然后還有一些后置處理,bean實例化階段中先去實例化對象,然后裝配依賴,然后是對象的其他處理,最后再注冊回調接口
Dubbo
1、通信模型是什么樣的
層級 | 作用 | 核心組件 / 實現 |
---|---|---|
傳輸層(Transport) | 負責底層數據的物理傳輸(字節流),處理 TCP 連接、數據讀寫等。 | 基于 Netty(默認)、Mina、Grizzly 等 NIO 框架 |
協議層(Protocol) | 定義數據傳輸的格式(協議頭、序列化方式等),實現 “請求 - 響應” 語義。 | Dubbo 協議(默認)、HTTP、Hessian、gRPC 等 |
代理層(Proxy) | 對服務接口生成代理,屏蔽遠程調用細節(如網絡通信、序列化 / 反序列化)。 | 基于 JDK 動態代理或 CGLIB 生成代理類 |
服務層(Service) | 封裝服務的注冊、發現、負載均衡、容錯等治理能力。 | 注冊中心(ZooKeeper 等)、負載均衡策略等 |
2、Dubbo 和 Spring Cloud 有什么區別
功能模塊 | Dubbo 實現 | Spring Cloud 實現 |
---|---|---|
服務注冊發現 | 內置注冊中心適配(支持 ZooKeeper、Nacos、Redis 等),客戶端主動拉取服務列表。 | 通過 Eureka、Consul、Nacos、ZooKeeper 等組件實現,支持服務健康檢查、自動剔除。 |
遠程通信 | 基于?RPC 協議(默認 Dubbo 協議,支持 Hessian、gRPC 等),二進制傳輸,效率高。 | 早期默認基于?REST API(HTTP/JSON),后期支持 gRPC、Spring Cloud Stream 等,文本 / 二進制均可。 |
負載均衡 | 提供多種內置策略(隨機、輪詢、一致性哈希、最小活躍數等)。 | 集成 Ribbon(已淘汰)、Spring Cloud LoadBalancer,支持類似策略。 |
容錯機制 | 支持重試、降級、熔斷(基于自身機制或整合 Sentinel)。 | 依賴 Hystrix(已淘汰)、Resilience4j 等組件,提供熔斷、限流、降級完整能力。 |
配置中心 | 無內置實現,需集成 Nacos、Apollo 等第三方組件。 | 提供 Spring Cloud Config、Spring Cloud Alibaba Nacos Config 等原生支持。 |
API 網關 | 無內置網關,需集成 Spring Cloud Gateway、Zuul 等。 | 提供 Spring Cloud Gateway(主流)、Zuul 等網關組件,支持路由、過濾、限流。 |
鏈路追蹤 | 需集成 SkyWalking、Zipkin 等(無原生支持)。 | 集成 Spring Cloud Sleuth + Zipkin,原生支持分布式鏈路追蹤。 |
服務監控 | 提供 Dubbo Admin 監控服務調用情況。 | 集成 Spring Boot Actuator + Spring Cloud Admin,監控服務健康、指標。 |
3、dubbo都支持什么協議,推薦用哪種
dubbo://(推薦)
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://
4、Dubbo里面有哪幾種節點角色
1)服務者
2)消費者
3)注冊中心
4)監控中心
5)容器
5、Dubbo中怎么處理的超時斷開
Dubbo 的超時控制基于?“客戶端主動超時檢測”?實現:客戶端發起調用后,會啟動一個定時器,若在指定時間內未收到服務端響應,則觸發超時機制,斷開當前連接(或標記請求失敗),并執行預設的容錯策略(如重試、降級等)。
elasticsearch
1、elasticsearch 的倒排索引是什么
倒排索引是 Elasticsearch 實現高效全文檢索的核心,通過 “關鍵詞→文檔” 的映射關系,將復雜的文本查詢轉化為快速的關鍵詞查找。其結構由 “詞典(Term Dictionary)” 和 “postings list” 組成,配合分詞、標準化、分段索引等優化機制,讓 Elasticsearch 能在海量數據中實現毫秒級的全文檢索。