每日學習Java之一萬個為什么?[MySQL面試篇]

分析SQL語句執行流程中遇到的問題

  • 前言
  • 1 MySQL是怎么在一臺服務器上啟動的
  • 2 MySQL主庫和從庫是同時啟動保持Alive的嗎?
  • 3 如果不是主從怎么在啟動的時候保證數據一致性
  • 4 ACID原則在MySQL上的體現
  • 5 數據在MySQL是通過什么DTO實現的
  • 6 客戶端怎么與MySQL Server建立連接,有哪些建立連接的方式,默認是什么,可以選什么,有哪些應用場景
  • 7.SQL組件接受的SQL是什么形式?為什么單一一條SQL不做任何處理就被MySQL認為是一個事務?
  • 8.查詢后的結果是由哪個組件以什么形式返回?
  • 9.解析器是怎么解析的,解析器會調用API嗎?
  • 10.優化器是怎么優化的?會調用API嗎?
  • 11.SQL報錯機制會在哪些區域出現?以什么形式發給客戶端?以什么形式寫到哪個日志中?
  • 12.執行器本質上是什么?
  • 13 MySQL內部有哪些線程?怎么分類?
  • 14 MySQL進程包含哪些內容
  • 15 執行器會將sql提交給引擎還是調用引擎,又是怎么調用的
  • 16 buffer pool區域中的數據頁有多少,以什么結構存儲,臟頁呢?
  • 17 buffer pool 中的數據頁怎么更新的,淘汰后的數據頁由誰清理
  • 18 后臺線程對臟頁刷盤是怎么實現的
  • 19 sql語句中加鎖在哪個部分實現的
  • 20 事務在engine中怎么實現
  • 21 MVCC怎么實現
  • 22 redolog分為哪幾塊內容?有什么作用
  • 23 binlog呢
  • 24 undolog 呢
  • 25 數據寫磁盤怎么實現的,怎么傳輸的,怎么保證一致性的
  • 26 MySQL斷開連接可以從線程和客戶端區分嗎
  • 27 MySQL進程結束會執行哪些持久化操作

前言

面試想要過關斬將,你就必須捫心自問,問得越多問的越細,才能披荊斬棘。盔甲若是漏洞百出,不被戳死才怪。

下列問題為作者提出,回答搜集而來。
由于作者并沒有系統化從零開始學習MySQL,所以可能某些非常基礎的問題并不了解。

歡迎讀者留言比較重要的基礎,wink👍

1 MySQL是怎么在一臺服務器上啟動的

  • MySQL通過配置文件:my.cnf my.ini 來指定各種參數,如端口號、數據目錄等。
  • 初始化數據庫:首次啟動的時候,MySQL需要初始化系統表(這里指定的是系統表空間嗎)
  • 啟動系統,生成日志

2 MySQL主庫和從庫是同時啟動保持Alive的嗎?

為了實現數據同步,通過binlog+并行復制維持數據一致性,主庫應該首先啟動并正常運行,然后從庫再啟動并連接到主庫。

3 如果不是主從怎么在啟動的時候保證數據一致性

  • 如果不是主從庫,沒法保證,可以自己設置一些通信維護。
    如果沒有同時啟動,其實無所謂。
  • 保證數據一致性,主從之間首先需要通信,分為三類異步、同步、半同步。由于是主庫寫日志,等待從庫響應。所以主庫到底等不等從庫是一個影響性能的問題。異步-半同步-同步,一致性會越來越高,期望響應時間越來越長。(那么這里的sql寫日志都是事務寫進去的嗎)
  • 一句話概括:主庫提交會寫binlog,會由一個dump線程監聽binlog文件的變更,如果有更新會推送更新時間到從庫,從庫接收到事件后會拉取數據,有一個IO線程將binlog傳過來的數據寫到自己的relaylog中,慢慢消化。所以,我們先更新的是事務語句,至于執行則是慢慢來。
  • 5.6庫級別并行復制:
  • 5.7 Group Commit 級別 并行復制
  • logical_clock 邏輯時鐘復制
  • Write Set復制

4 ACID原則在MySQL上的體現

  • A:MySQL使用BEGIN /COMMIT /ROLLBACK 來管理事務
  • C:通過約束和觸發器確保數據庫的狀態始終符合預期
  • I:支持四種隔離級別,讀未提交,讀已提交,可重復讀,串行化,通過鎖定機制和MVCC實現
  • D:一旦事務提交,數據就會永久保存,即使發生系統崩潰也不會丟失。MySQL使用重做日志 和 雙寫緩沖區來實現持久性

5 數據在MySQL是通過什么DTO實現的

6 客戶端怎么與MySQL Server建立連接,有哪些建立連接的方式,默認是什么,可以選什么,有哪些應用場景

  • TCP IP 通過網絡地址和端口連接到MySQL服務器,適用于遠程連接
  • Unix Socket連接:在本地Linux/Unix系統上,可以通過Unix域套接字連接到MySQL服務器。這種方式比TCP IP更快,因為它避免了網絡層的開銷
jdbc:mysql://database_name?socket=/temp/mysql.sck
  • 命名管道:僅適用于win 本地連接

  • 共享內存:另一種win特有的連接方法

  • 默認使用TCP IP

7.SQL組件接受的SQL是什么形式?為什么單一一條SQL不做任何處理就被MySQL認為是一個事務?

MySQL接收到的SQL是標準的SQL語句,通常以文本的形式發給服務層

在MySQL中,默認情況下,每條單獨提交的SQL語句都被視為一個獨立的事務。這是因為autocommit模式下,每條語句執行完畢后會自動提交事務。如果autocommit被關閉,需要顯式的 使用 BEGIN 和 COMMIT 提交事務

8.查詢后的結果是由哪個組件以什么形式返回?

執行器也就是sql線程生成結果集,通過網絡協議返回給客戶端

  • 執行器:執行查詢并生成結果集 MYSQL_RES結構
  • 網絡層:將結果集打包成適當的格式(如二進制或文本),并通過連接通道返回給客戶端。
typedef struct st_mysql_res
{
my_ulonglong row_count;
unsigned int field_count,current_field;
MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;
MEM_ROOT field_alloc;
MYSQL_ROW row;
MYSQL_ROW current_row;
unsigned long *lengths;
MYSQL *handle;
my_bool eof;
}MYSQL_REStypedef struct st_mysql_rows 
{struct st_mysql_rows *next;	//列表的行MYSQL_ROW data;
} MYSQL_ROWS;   //mysql的數據的鏈表節點。可見mysql的結果集是鏈表結構typedef struct st_mysql_data 
{my_ulonglong rows;unsigned int fields;MYSQL_ROWS *data;MEM_ROOT alloc;
} MYSQL_DATA;   // 數據集的結構typedef struct st_mysql_field 
{char *name;					// 列名稱 char *table;	                //如果列是字段,列表char *def;	                //默認值(由mysql_list_fields設置)enum enum_field_types type;	//類型的字段。Se mysql_com。h的類型unsigned int length;	        //列的寬度unsigned int max_length;	    //選擇集的最大寬度unsigned int flags;	        //Div標記集unsigned int decimals;	    //字段中的小數位數
} MYSQL_FIELD;  //列信息的結構typedef struct st_used_mem      //結構為once_alloc
{	struct st_used_mem *next;   	//下一個塊使用unsigned int left;	        //記憶留在塊unsigned int size;	        //塊的大小
} USED_MEM;     //內存結構typedef struct st_mem_root 
{USED_MEM *free;USED_MEM *used;USED_MEM *pre_alloc;unsigned int	min_malloc;unsigned int	block_size;void (*error_handler)(void);
} MEM_ROOT;  //內存結構

可以看到MySQL是用C++/C 開發的

9.解析器是怎么解析的,解析器會調用API嗎?

  • 詞法分析:將SQL語句分解為一個個token

  • 語法分析:tokens轉換語法樹

  • 語義分析

  • 解析器本身并不調用外部API,但他可能會調用內部函數或者模塊來完成某些任務,例如:

  • 元數據訪問:訪問系統表或緩存中的元數據,以驗證表和列的存在性。

  • 權限檢查:調用權限管理模塊,確保用戶有足夠的權限執行該操作

10.優化器是怎么優化的?會調用API嗎?

  • 查詢重寫:對查詢初步重寫,以簡化查詢結構
  • 統計信息收集:收集表的統計信息(例如行數、索引選擇性等),用于生成最優執行計劃。
  • 生成候選計劃:基于不同的訪問路徑(如全表掃描、索引掃描),生成多個候選執行計劃(生成策略?)
  • 選擇最佳計劃:評估每個候選計劃的成本(評估算法?),選擇成本最低的計劃作為最終執行計劃
  • 優化器內部統計信息模塊:獲取表的統計信息(包含什么?)
  • 代價模型:計算成本 (理論支持?)
  • 訪問路徑模塊:確定可用的訪問路徑(索引、表掃描等)

11.SQL報錯機制會在哪些區域出現?以什么形式發給客戶端?以什么形式寫到哪個日志中?

報錯機制出現的區域:

  • 解析階段:SQL語法錯誤或未知表/列名
  • 優化階段:無法生成有效的執行計劃
  • 執行階段:運行時錯誤,如違反約束、超時等
  • 網絡傳輸階段:連接斷開或其他通信錯誤

發給客戶端的形式:

  • 錯誤代碼:一個唯一的數字標識。
  • 錯誤消息:詳細的描述信息,幫助理解錯誤原因。
{"code":1054,"message":"Unknown column 'nonexistent_column'in 'field list'"
}

寫入日志的形式:

  • 錯誤日志:記錄所有嚴重的錯誤和警告,默認位于/var/log/mysql/error.log 或安裝目錄下的data文件夾中。
  • 慢查詢日志:記錄執行時間超過閾值的查詢,默認位于/var/log/mysql/slow-query.log
2025-02-27T11:41:23.123456Z 0 [ERROR] [MY-01054] Unknown column 'nonexistent_column' in 'field list'

12.執行器本質上是什么?

執行器是MySQL查詢處理過程中實際執行查詢計劃的部分。它根據優化器生成的執行計劃,調用存儲引擎接口來訪問和修改數據。

執行器的主要職責:

1.物理操作執行:根據執行計劃中的物理操作(如表掃描、索引查找等)執行相應的數據庫操作。
2.數據獲取與處理:從存儲引擎中獲取數據,并進行必要的過濾、排序、聚合等操作。
3.結果集生成:將處理后的數據組織成結果集,準備返回給客戶端。

執行器的工作流程:
1.初始化執行計劃:加載執行計劃并準備執行環境。
2.執行物理操作:按順序執行各個物理操作步驟。
3.返回結果

13 MySQL內部有哪些線程?怎么分類?

1.主線程(Main Thread)

  • 職責:負責啟動和管理其他的線程
  • 實例:mysql進程的主線程

2.連接處理線程(Connection Threads)

  • 職責:處理客戶端連接請求,每個客戶端連接對應一個獨立的線程
  • 實例:thd線程對象,用于處理每個客戶端連接

3.后臺線程(Background Threads)

  • 職責:執行各種后臺任務,如日志刷新、數據頁刷盤等。
  • 示例:InnoDB緩沖池線程:負責緩沖池管理和臟頁刷盤。Binlog Dump線程:監聽binlog 發送給從庫。Purge線程:負責清理不再需要的undo日志

4.IO線程(I/O Threads)

  • 職責:處理與存儲設備的IO操作
  • 示例:Redo Log線程:負責寫入重做日志。 Binlog線程:負責寫入二進制日志。

5.事務處理線程(Transaction Handing Threads)

  • 職責:管理事務的開始、提交和回滾操作。
  • 示例:事務管理線程,負責協調事務的狀態。

14 MySQL進程包含哪些內容

MySQL進程(mysqld)包含多個組件和模塊,主要分為以下幾個部分:

  • 1.服務器核心 Server Core

    1. 存儲引擎 Strorage Engines
  • 3.緩存和緩沖區(Caches and Buffers)

    • Buffer Pool:用于緩存數據和索引數據。
    • Query Cache:緩存查詢結果以提高查詢效率(讀緩存已被移除)
  • 日志系統 (Logging System)

    • Binlog:用于主從復制和數據備份,記錄所有更改操作。
    • Undo Log:用于事務回滾,記錄事務的反向操作
    • Redo Log:用于崩潰恢復,記錄所有未提交的事務
  • 網絡層(Network Layer)

    • 處理客戶端連接、數據傳輸和協議解析。
  • 安全管理(Security Management)

    • 執行各種后臺任務,如日志刷新、數據頁刷盤等。

15 執行器會將sql提交給引擎還是調用引擎,又是怎么調用的

執行器會通過調用存儲引擎的接口來執行具體的數據庫操作

調用方式:

  • 接口調用:執行器通過調用存儲引擎提供的接口(如InnoDB的API)來執行具體的操作。
  • 物理操作執行:根據優化器生成的執行計劃,執行器調用相應的存儲引擎接口來訪問和修改數據。

16 buffer pool區域中的數據頁有多少,以什么結構存儲,臟頁呢?

數據頁數量:

  • 大小可配置:Buffer Pool的大小可以通過配置文件中的innodb_buffer_pool_size參數設置,默認值通常為系統內存的70%-80%。
  • 每頁大小:默認情況下,每頁大小為16KB。

存儲結構:

  • LRU鏈表:Buffer Pool 使用LRU(Least Recently Used)鏈表來管理數據也。最近使用的頁面位于鏈表前端,較少使用的頁面位于鏈表末端。
  • Flush鏈表:臟頁(已修改但尚未寫入磁盤的頁面)會被放入Flush鏈表中,等待刷盤

臟頁:

  • 定義:臟頁是指已經被修改但還寫回到磁盤的數據頁。
  • 存儲位置:臟頁同樣存儲在Buffer Pool中,并被標記為臟頁。
  • 管理:臟頁通過Flush鏈表管理,定期或在特定條件下(如內存不足或打到一定閾值)被刷回磁盤。

17 buffer pool 中的數據頁怎么更新的,淘汰后的數據頁由誰清理

數據頁更新:

  • 讀取當前數據頁:當需要訪問某個數據頁時,如果該頁不在Buffer Pool中,則從磁盤加載到Buffer Pool。
  • 修改數據頁:對數據頁進行修改后,將其標記為臟頁。
  • 寫回磁盤:臟頁會在適當的時候(如內存不足或達到一定的閾值)通過后臺線程寫回到磁盤。

淘汰后的數據頁清理:

  • LRU鏈表:當Buffer Pool 滿時,使用LRU算法淘汰最近最少使用的頁面

  • 清理過程:

    • 如果被淘汰的頁面是干凈的(未修改),可以直接丟棄。
    • 如果被淘汰的頁面是臟頁,則必須先將其寫回磁盤(通過Flush鏈表管理)。

18 后臺線程對臟頁刷盤是怎么實現的

后臺線程通過以下幾種機制實現臟頁的刷盤:
1.定時刷盤:

  • InnoDB自動刷新:InnoDB會定期檢查臟頁的比例,如果超過設定的閾值(如innodb_max_dirty_pages_pct),則觸發自動刷新操作。

2.后臺線程:

  • Page Cleaner線程:負責將臟頁寫回到磁盤。它會定期檢查Flush鏈表中的臟頁,并將這些臟頁回到磁盤。

3.事務提交:

  • 同步刷盤:在某些情況下(如事務提交),為了保證數據一致性,需要立即刷盤。此時會調用fsync()函數確保數據已經寫入磁盤。

4.內存壓力:

  • 當Buffer Pool內存不足時,會優先淘汰臟頁,并將其寫回磁盤。

19 sql語句中加鎖在哪個部分實現的

SQL語句的加鎖操作主要在執行器和存儲引擎中實現:

1.解析階段:

  • 解析器解析SQL語句,識別出需要加鎖的對象(如表、行等)

2.執行器:

  • 執行器根據解析結果,在執行過程中調用存儲引擎的加鎖接口,對相關對象加鎖。

3.存儲引擎:

  • 存儲引擎實現具體的加鎖機制。例如,InnoDB支持行級鎖(共享鎖,排他鎖)和表級鎖。
SELECT * FROM users WHERE id = 1 FOR UPDATE;

執行器在執行這條查詢時,會調用InnoDB的加鎖接口,對users表中id=1的行加排它鎖

20 事務在engine中怎么實現

事務在存儲引擎中的實現主要包括以下幾個方面:

1.事務管理器:

  • 負責事務的生命周期,包括開始、提交、回滾。

2.日志系統:

  • Redo Log:記錄所有未提交的事務操作,用于崩潰恢復。
  • Undo Log:記錄事務的反向操作

3.并發控制:

  • MVCC(多版本并發控制):支持高并發下的讀寫操作,避免鎖沖突
  • 鎖機制:提供行級鎖和表級鎖,確保事務的隔離性。

4.持久化:

  • 雙寫緩沖區(Doublewrite Buffer):確保數據頁在寫入磁盤時的一致性。
  • 刷盤操作:通過后臺線程定期將臟頁協會到磁盤里。

21 MVCC怎么實現

MVCC,通過維護數據不同的版本來支持高并發下的讀寫操作。其主要實現機制如下:

  • 隱藏列:每個數據行包含兩個隱藏列:DB_TRX_ID 事務ID DB_ROLL_PTR 指向undo的指針。
  • 快照讀:讀操作(如SELECT)不會阻塞寫操作,而是讀取數據的歷史版本。讀操作會根據當前事務的Read View來決定讀取哪個版本的數據
  • 寫操作:寫操作會在新版本的數據上進行操作,并記錄undo日志以便回滾。
  • Undo日志:記錄事務的反向操作,用于事務回滾和舊版本構建

假如有一個事務在時間點T1插入一條記錄,另一個事務B在時間點T2更新了該記錄。事務C在T3時間點進行讀取操作時,會讀取到T2時間點之前的數據版本。

22 redolog分為哪幾塊內容?有什么作用

Redo Log 是 InnoDB 存儲引擎用于崩潰恢復的日志系統,其主要分為以下幾個部分:

  • 1.Log Blocks:

    • Redo Log被劃分為多個固定大小的塊(通常是512字節),每個塊稱為一個 Log Block。
  • 2.Log Sequence Number(LSN):

    • 每條日志記錄都有一個唯一的LSN,表示日志記錄的順序號。
  • 3.Checkpoint

    • Checkpoint 是 Redo Log中的一個特殊標記,表示已成功寫入磁盤的數據頁。它用于加速崩潰恢復的過程。
  • 崩潰恢復:在MySQL崩潰重啟時,通過Redo Log恢復未完成的事務,確保數據的一致性。

  • 提高性能:通過批量寫入Redo Log,減少頻繁的磁盤IO操作。

23 binlog呢

主要用于主從復制和數據備份。

  • 事件類型:

    • Query Event:記錄SQL查詢語句。
    • Row Event:記錄行級別的變更。
    • XID Event:記錄事務提交信息。
  • 格式:

    • Statement-Based Logging:記錄SQL語句。
    • Row-Based Logging : 記錄每一行的變化。
    • Mixed-Based Logging :混合使用Statement和Row格式。

24 undolog 呢

Undo Log 是 InnoDB 存儲引擎用于事務回滾和MVCC 的日志系統。其主要分為以下幾個部分:

  • 1.Undo Segment:每個事務分配一個Undo Segment,用于記錄該事務的所有Undo日志。

  • 2.Undo Record:每條Undo日志記錄一次事務的反向操作,用于回滾和舊版本數據的構建。

  • 事務回滾:在事務回滾時,通過Undo Log 將數據恢復到事務開始前的狀態。

  • MVCC:提供歷史版本的數據,支持高并發下的操作。

25 數據寫磁盤怎么實現的,怎么傳輸的,怎么保證一致性的

數據寫磁盤的實現:

  • 1.Buffer Pool:數據首先寫入Buffer Pool,而不是直接寫入磁盤。
  • 2.Dirty Page:修改后的數據頁標記為臟頁,等待后續刷盤操作。
  • 3.后臺線程:通過后臺線程定期將臟頁寫回磁盤。

數據傳輸:

  • 異步寫入:大多數情況下,數據寫入磁盤是異步的,以提高性能。
  • 同步寫入:在某些情況下(如事務提交),需要確保數據已經寫入磁盤,此時會調用fsync()函數。

保證一致性:

  • Redolog:記錄所有未提交的事務操作,用于數據恢復。
  • 雙寫緩沖區:確保數據頁在寫入磁盤時的一致性。
  • 兩階段提交:在分布式環境中,使用兩階段提交協議,確保事務的原子性和一致性。

26 MySQL斷開連接可以從線程和客戶端區分嗎

線程角度:
線程終止:MySQL 服務器端會終止對應的連接線程,并釋放相關的資源。
日志記錄:斷開連接的信息會被記錄到錯誤日志中。
客戶端角度:
異常處理:客戶端應用程序需要捕獲連接斷開的異常,并進行相應的處理(如重新連接)。
超時機制:客戶端可以通過設置超時參數(如 wait_timeout 和 interactive_timeout)來控制連接的有效期。

27 MySQL進程結束會執行哪些持久化操作

MySQL 進程結束時會執行一系列持久化操作,以確保數據的一致性和完整性:

Redo Log 刷盤:
將所有未提交的事務操作寫入 Redo Log,確保在崩潰恢復時能夠恢復這些事務。
Dirty Page 刷盤:
將 Buffer Pool 中的所有臟頁寫回到磁盤,確保數據的一致性。
Binlog 刷盤:
將 Binlog 中的所有更改操作寫入磁盤,確保主從復制和數據備份的一致性。
Checkpoints:
創建 Checkpoint,標記已成功寫入磁盤的數據頁,加快崩潰恢復的速度。
關閉存儲引擎:
關閉所有存儲引擎實例,釋放相關資源。
日志記錄:
記錄進程結束的相關信息到錯誤日志中,便于后續排查問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72089.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳細解析d3dx9_27.dll丟失怎么辦?如何快速修復d3dx9_27.dll

運行程序時提示“d3dx9_27.dll文件缺失”,通常由DirectX組件損壞或文件丟失引起。此問題可通過系統化修復方法解決,無需重裝系統或軟件。下文將詳細說明具體步驟及注意事項。 一.d3dx9_27.dll缺失問題的本質解析 當系統提示“d3dx9_27.dll丟失”時&…

IP----訪問服務器流程

這只是IP的其中一塊內容-訪問服務器流程,IP還有更多內容可以查看IP專欄,前一段學習內容為IA內容,還有更多內容可以查看IA專欄,可通過以下路徑查看IA-----配置NAT-CSDN博客CSDN,歡迎指正 1.訪問服務器流程 1.分層 1.更利于標準化…

Linux報 “device or resource busy” 異常的原因以及解決辦法

首先,Linux報"device or resource busy"的原因是因為某個進程正在占用該設備或資源,導致其他進程無法訪問該設備或資源。 解決該問題的辦法有以下幾種: 查找占用該設備或資源的進程,然后將其停止或結束。可以使用以下…

和鯨科技推出人工智能通識課程解決方案,助力AI人才培養

2025年2月,教育部副部長吳巖應港澳特區政府邀請,率團赴港澳宣講《教育強國建設規劃綱要 (2024—2035 年)》。在港澳期間,吳巖闡釋了教育強國目標的任務,并與特區政府官員交流推進人工智能人才培養的辦法。這一系列行動體現出人工智…

java springboot 中調用 C++ 方法

以下是一個完整的 Spring Boot 調用 C 方法的 Demo,采用 JNI (Java Native Interface) 方式實現,包含詳細步驟說明: 1. 項目結構 demo-project/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/…

JSX基礎 —— 識別JS表達式

在JSX中可以通過 大括號語法 { } 識別JS中的表達式,比如常見的變量、函數調用、方法調用等等 1、使用引號傳遞字符串 2、使用JavaScript變量 3、函數調用和方法調用 (函數和方法本質沒有區別,這里默認: 函數是自己定義的,方法是…

git從零學起

從事了多年java開發,一直在用svn進行版本控制,如今更換了公司,使用的是git進行版本控制,所以打算記錄一下git學習的點滴,和大家一起分享。 百度百科: Git(讀音為/g?t/)是一個開源…

關于對async和await的初步理解

async 包裹著的函數中進程是堵塞的 ,是同步化的, await等待的是個promise對象,否則"await" 對此表達式的類型沒有影響 例1 async getDataDD(){await this.fun1()await this.fun2()// await Promise.all([this.fun1(),this.fun…

MySQL—Keepalived+MySQL雙主復制實現MySQL高可用

Keepalived原理: Keepalived 的原理主要基于虛擬路由冗余協議(VRRP,Virtual Router Redundancy Protocol)、健康檢查機制和負載均衡機制,以下為你詳細介紹: VRRP 協議實現高可用:VRRP 是 Keep…

SpringBoot AOP 源碼解析

文章目錄 一、AOP 代碼示例1. 準備注解和目標類2. 定義 Aspect3. 結論 二、源碼1. AOP 實現核心類2. 代理類的創建流程2.1 核心類 AbstractAutoProxyCreator2.2 AbstractAutoProxyCreator#postProcessBeforeInstantiation2.3 AspectJAwareAdvisorAutoProxyCreator#shouldSkip2.…

Linux:Shell環境變量與命令行參數

目錄 Shell的變量功能 什么是變量 變數的可變性與方便性 影響bash環境操作的變量 腳本程序設計(shell script)的好幫手 變量的使用:echo 變量的使用:HOME 環境變量相關命令 獲取環境變量 環境變量和本地變量 命令行…

MySQL數據庫入門到大蛇尚硅谷宋紅康老師筆記 高級篇 part 5

第05章_存儲引擎 為了管理方便,人們把連接管理、查詢緩存、語法解析、查詢優化這些并不涉及真實數據存儲的功能劃分為MySQLserver的功能,把真實存取數據的功能劃分為存儲引擎的功能。所t以在MySQLserver完成了查詢優化后,只需按照生成的執行…

JAVA面試_進階部分_23種設計模式總結

1. 單例模式:確保某一個類只有一個實例,而且自行實例化并向整個系統提供這 個實例。 (1)懶漢式 public class Singleton { /* 持有私有靜態實例,防止被引用,此處賦值為null,目的是實現延遲加載…

滲透測試(WAF過濾information_schema庫的繞過,sqllib-46關,海洋cms9版本的注入)

1.sqlin-lib 46關 打開網站配置文件發現 此網站的對ID進行了排序,我們可以知道,order by接不了union ,那我們可以通過測試sort,rond等函數,觀察網頁的反饋來判斷我們的盲注是否正確 我們發現 當參數有sort來排序時&…

AORO M6北斗短報文終端:將“太空黑科技”轉化為安全保障

在衛星導航領域,北斗系統作為我國自主研發的全球衛星導航系統,正以其獨特的短報文通信功能引發全球范圍內的廣泛關注。這一突破性技術不僅使北斗系統在全球四大導航系統中獨樹一幟,具備了雙向通信能力,更通過遨游通訊推出的AORO M…

ARCGIS國土超級工具集1.4更新說明

ARCGIS國土超級工具集V1.4版本,功能已增加至54 個。本次更新在V1.3版本的基礎上,新增了“拓撲問題修復工具”并同時調整了數據處理工具欄的布局、工具操作界面的選擇圖層下拉框新增可選擇位于圖層組內的要素圖層功能、數據保存路徑新增了可選擇數據庫內的…

Element Plus中el-select選擇器的下拉選項列表的樣式設置

el-select選擇器,默認樣式效果: 通過 * { margin: 0; padding: 0; } 去掉內外邊距后的樣式效果(樣式變丑了): 通過 popper-class 自定義類名修改下拉選項列表樣式 el-select 標簽設置 popper-class"custom-se…

基于Linux系統的物聯網智能終端

背景 產品研發和項目研發有什么區別?一個令人發指的問題,剛開始工作時項目開發居多,認為項目開發和產品開發區別不大,待后來隨著自身能力的提升,逐步感到要開發一個好產品還是比較難的,我認為項目開發的目的…

java excel xlsx 增加數據驗證

隱藏表下拉框 // 創建隱藏工作表存儲下拉框數據String hiddenSheetName "HiddenSheet"System.currentTimeMillis();Sheet hiddenSheet workbook.createSheet(hiddenSheetName);//設置隱藏sheetworkbook.setSheetHidden(workbook.getSheetIndex(hiddenSheetName), …

linux中安裝部署Jenkins,成功構建springboot項目詳細教程

參考別人配置Jenkins的git地址為https,無法連上github拉取項目,所以本章節介紹通過配置SSH地址來連github拉取項目 目錄: 1、springboot項目 1.1 創建名為springcloudproject的springboot項目工程 1.2 已將工程上傳到github中,g…