mysql常見筆試題

来源:https://www.cnblogs.com/l-y-h/archive/2020/03/10/12458777.html
-Advertisement-
Play Games

一、Mysql常見筆試題 1、Mysql 中有哪幾種鎖? (1)表級鎖:開銷小,加鎖快。不會出現死鎖,鎖定粒度大,發生鎖衝突的概率高,併發度低。 (2)行級鎖:開銷大,加鎖慢。會出現死鎖,鎖定粒度小,發生鎖衝突的概率低,併發度高。 (3)頁面鎖:開銷時間、加鎖時間、鎖定粒度在 表級鎖 與 行級鎖 之 ...


一、Mysql常見筆試題

1、Mysql 中有哪幾種鎖?

(1)表級鎖:開銷小,加鎖快。不會出現死鎖,鎖定粒度大,發生鎖衝突的概率高,併發度低。

(2)行級鎖:開銷大,加鎖慢。會出現死鎖,鎖定粒度小,發生鎖衝突的概率低,併發度高。

(3)頁面鎖:開銷時間、加鎖時間、鎖定粒度在 表級鎖 與 行級鎖 之間,會出現死鎖,併發度中等。

 

2、CHAR 與 VARCHAR 的區別?

(1)CHAR 長度不可變,範圍 1~255。若存儲長度未達到定義的長度,則以 空格 填充。存取速度快,但容易浪費空間。

(2)VARCHAR 長度可變,範圍 1~65535。若存儲長度未達到定義的長度,則存實際長度數據。存取速度稍慢,但節約空間。

 

3、ACID 屬性?

  事務:資料庫中,對數據的一系列操作可以看成一個整體,稱為事務。這個整體要麼全部執行、要麼全部不執行。
  ACID 屬性的存在確保了 事務的可靠。
(1)Actomicity(原子性):原子性要求 事務中的操作要麼全部完成,要麼回退成之前未操作的狀態。即事務中某個操作失敗後,會相當於什麼都沒發生,不會出現改了部分數據的情況。

(2)Consistency(一致性):一致性要求 事務執行前後,資料庫的狀態一致,即從一個一致性狀態切換到另一個一致性的狀態。

(3)Isolation(隔離性):隔離性要求 併發的事務相互隔離、不可見。即一個事務看不見另一個事務內部的操作以及操作的數據。

(4)Durability(持久性):持久性要求 事務對資料庫數據的修改是永久的。即數據一旦修改提交後,其狀態將永久不變。

 

4、併發問題 -- 臟讀、不可重覆讀、幻讀?

  對於同時運行的多個事務,若這些事務訪問同一數據時,沒有採用必要的隔離機制,則會造成如下的併發問題。
(1)臟讀:臟讀 指的是當一個事務正在訪問某數據,並對這個數據進行的修改,且這條數據還未提交到資料庫中,此時若另一個事務也訪問到這條數據,獲取到的是這條被修改的數據,此時得到的數據不對,即臟讀。
比如:tom 年齡為 22,事務 A 修改 tom 年齡為 30,此時還未提交到資料庫,此時事務 B 獲取 tom 年齡,得到的是 30,事務 A 回滾數據,資料庫的數據依舊是 22,但事務 B 拿到的數據是 30,這就是臟讀,讀錯了數據。

(2)不可重覆讀:指一個事務,多次讀取同一條數據,在這個事務還未結束時,另一個事務也訪問該數據並對其修改,那麼可能造成事務多次讀取的數據不一致,即不可重覆讀。
比如:tom 年齡為 22,事務 A 讀取 tom 年齡為 22,事務未結束。此時事務 B 修改 tom 年齡為 30,並提交到資料庫,當事務 A 再次讀取 tom 年齡為 30,事務 A 兩次讀取的數據不一致,即不可重覆讀。

(3)幻讀:指事務並不是獨立執行時產生的現象。一個事務修改某個表,涉及表的所有行,同時另一個事務也修改表,比如增加或刪除一條數據。此時第一個事務發現多出或者少了一條數據。這種情況就是幻讀。
比如:事務 A 查詢當前表的數據總數為 11, 此時事務 B 向表中插入一條數據,事務 A 再次查詢當前表數據總數為 12,即幻讀。

  註:
    不可重覆讀、幻讀理解起來有些類似。
    不可重覆讀是對一條數據操作,重點在於修改某條數據。
    幻讀是對錶進行操作,重點在於新增或刪除某條數據。

 

5、事務的隔離級別?

  資料庫系統必須具有隔離併發運行的事務的能力,使各事務間不會相互影響,避免併發問題。
  隔離級別:指的是一個事務與其他事務的隔離程度。隔離級別越高,則併發能力越弱。
(1)Read Uncommitted(讀未提交):即讀取到 未提交的內容。
  一般不使用。此隔離級別下,查詢不會加鎖,即可能存在兩個事務操作同一個表的情況。可能會導致 “臟讀”、“不可重覆讀”、“幻讀”。

(2)Read Committed(讀提交):即只能讀取到 已提交的內容。
  常用(oracle、SQL Server 預設隔離級別)。此隔離級別下,查詢採用 快照讀 的機制,即不會讀取到未提交的數據,從而避免 “臟讀”,但是仍可能導致 “不可重覆讀”、“幻讀”。

(3)Repeatable Read(可重覆讀)
  常用(mysql 預設隔離級別)。此隔離級別下,查詢採用 快照讀 的機制,且事務啟動後,當前數據不能被修改,從而可以避免 “不可重覆讀”,但是仍可能導致 “幻讀”(新增或刪除某條數據)。

(4)Serializable(串列化)
  一般不使用。此隔離級別下,事務會串列化執行(排隊執行),執行效率差、開銷大。可以避免 “臟讀”、“不可重覆讀”、“幻讀“。

【舉例:】
select @@transaction_isolation; -- 用於查看當前資料庫的隔離級別(8.0版本)
 set session transaction isolation level read committed; --用於設置隔離級別為 read committed

 

6、Mysql 中表類型 MyISAM 與 InnoDB 的區別?

  Mysql 採用 插件式的表存儲引擎 管理數據,基於表而非基於資料庫。
  常見存儲引擎(表類型):MyISAM 與 InnoDB。
(1)MyISAM:不支持事務,但是每次查詢都是原子的。支持表級鎖,即每次操作都是對整個表加鎖。存儲表的總行數。
(2)InnoDB:支持 ACID 屬性,支持事務的四種隔離級別。支持行級鎖以及外鍵約束。不存儲表的總行數。

 

 

 

7、自增主鍵、UUID?

(1)自增主鍵,數據在物理結構上是順序存儲,性能好,占用空間小。可以是 int 和 bigint 類型。int 4位元組,bigint 8 位元組,項目中理論不應出現 自增主鍵達到最大值的情況,因為數據太大,效率會大大降低,當出現一定的數據量後,應進行分庫分表操作。

(2)UUID,數據在物理結構上是隨機存儲,性能較差,占用空間大。唯一ID,絕不衝突。

 

8、mysql 的約束分類?

(1)約束的作用:是一種限制,用於限製表中的數據,為了保證數據的準確性以及可靠性。
(2)約束分類:
  NOT NULL,非空,用於保證某個欄位不為空。支持列級約束。
  DEFAULT,預設,用於保證某個欄位具有預設值。支持列級約束。
  PRIMARY KEY,主鍵,用於保證某個欄位具有唯一性且非空。支持列級約束以及表級約束。
  UNIQUE,唯一,用於保證某個欄位具有唯一性。支持列級約束以及表級約束。
  FORGIEN KEY,外鍵,用於限制兩個表間的關係。支持表級約束。
註:
  列級約束:指的是定義列的同時指定的約束。
  表級約束:指的是列定義之後指定的約束。

  外鍵常用於一對多的關係。即表的某條數據,對應另外一張表的多條數據。
    將 “一” 的一方稱為 :主表。將 “多” 的一方稱為 :從表。
    通常將 外鍵 置於從表上,即 從表上增加一列作為外鍵,並依賴於主表的某列。

【舉例:】
員工與部門間的關係。
一個部門可以有多個員工,而一個員工屬於一個部門。此時部門與員工間為 一對多 的關係。
部門表為主表,員工表為從表。外鍵建立在 員工表(從表)上。

CREATE TABLE dept (
    -- 此處的 primary key 為 列級約束。
    deptId int primary key auto_increment,
    deptName varchar(20) not null
);

CREATE TABLE emp (
    id int primary key auto_increment,
    name varchar(32),
    age int,
    deptId int,
    -- 此處的 foreign key 為表級約束。
    foreign key(deptId) references dept(deptId)
);

 

9、drop、delete 與 truncate 的區別:

(1)格式:

drop table 表名;   -- 用於刪除數據表。
truncate table 表名;  -- 用於刪除數據表的數據,但保留表結構。
delete from 表名 [where 條件];  -- 用於刪除數據標的數據,但保留表結構,可回滾。

 

(2)delete 與 truncate 相比較:

delete 可以添加刪除條件,truncate 不可以。
delete 刪除後可以回滾,truncate 不可以。
delete 效率較低,truncate 效率較高。
delete 可以返回受影響的行數,truncate 沒有返回值。
delete 刪除數據後再次插入數據時,標識列從斷點處開始,truncate 標識列從 1 開始。

 

10、隱式事務、顯式事務?

  隱式事務:事務沒有明顯的開啟與關閉的標誌。比如 insert、delete、update等語句會自動提交。
  顯式事務:事務具有明顯的開啟與關閉的標誌,前提需禁用自動提交功能。

show variables like "autocommit"; -- 用於查看自動提交功能是否打開
set autocommit=1; -- 用於打開自動提交功能
set autocommit=0; -- 用於關閉自動提交功能

【顯式事務步驟:】
Step1:開啟事務,關閉自動提交功能。
    set autocommit=0;
    
Step2:編寫事務語句。
    selectinsertdeleteupdate。
    SAVEPOINT A;  -- 可以設置回滾點
    
Step3:結束事務。
    commit; -- 提交事務
    rollback; -- 回滾事務
    rollback to A;  -- 回滾到回滾點

 

11、視圖

(1)視圖:是一種虛擬存在的表,其數據是使用視圖的過程中動態創建的數據,其只保存 sql 邏輯,不保存查詢的結果數據。
  註:
    可以理解成 java 的封裝好的一段方法,直接調用即可。

(2)格式:

【創建視圖】
    CREATE VIEW 視圖名
    AS
    查詢語句;
    
【使用視圖(與使用普通表類似)】
    SELECT *
    FROM 視圖名

【舉例:】
    CREATE VIEW testView
    AS
    SELECT * 
    FROM DEPT;
    
    SELECT *
    FROM testView;
    
【修改視圖:(方式一)】
    -- 若視圖存在則修改,若視圖不存在則創建
    CREATE OR REPLACE VIEW 視圖名
    AS
    查詢語句;
    
【修改視圖:(方式二)】
    ALTER VIEW 視圖名
    AS
    查詢語句;
    
【刪除視圖:】
    drop view 視圖名;

 

(3)好處:
  可以重用 sql 語句。
  簡化複雜的 sql 操作,不必清楚查詢細節。
  保護數據,提高安全性。

 

12、變數

(1)系統變數:變數由系統提供。可以細分為 全局變數(global,針對資料庫的所有連接))以及 會話變數(session,預設,僅針對當前連接)。

【查看當前所有的變數:】
    show [global | session] variables;

【查看部分變數:】
    show [global | session] variables like '%transaction%';

【查看具體的變數:】
     select @@[global | session].變數名;
 
 【設置具體的變數】
     set [global | session] 變數名 = 值;
     或者
     set @@[global | session].變數名;

 

(2)自定義變數:變數由用戶自定義。可以細分為 用戶變數(針對當前連接,聲明的位置任意)以及 局部變數(僅在begin ~ end 塊中使用,且聲明的位置為 begin ~ end 塊的第一句話)。

========================用戶變數===========================
【聲明用戶變數並賦值:(三種方式)】
    set @變數名=值;
    set @變數名:=值;
    select @變數名:=值;

【賦值給用戶變數:(通過select into)】
    select 欄位 into @變數名
    from 表;

【查看用戶變數值:】
select @變數名;

【舉例:】
    select count(*) into @count
    from dept;
    
    select @count;
    
========================局部變數===========================
【聲明局部變數:】
    declare 變數名 類型;
    declare 變數名 類型 default 值;

【局部變數賦值:(先聲明再賦值,直接賦值會出錯)】
    set 變數名=值;
    set 變數名:=值;
    
    select 欄位 into 變數名
    from 表;
    
【查看用戶變數值:】
    select 變數名;

 

13、存儲過程

(1)存儲過程:
  指的是 一組預先編譯好的 sql 語句的集合,可以理解成批處理語句。類似於 Java 中的方法,使用時調用方法名即可。

(2)好處:
  提高了代碼的重用性。
  簡化操作。
  減少了編譯次數、與資料庫交互的次數,提高了效率。

(3)語法:

【創建存儲過程:】
    DELIMITER $
    CREATE PROCEDURE 存儲過程名(參數列表)
    BEGIN
        存儲過程體(一組合法的 sql 語句)
    END $
    DELIMITER ;
註:
    參數列表分三個部分,分別為 參數模式、參數名、參數類型
    參數模式:IN、OUT、INOUT。
        IN:指該參數可以作為輸入,即接收值(預設)。
        OUT:指該參數可以作為輸出,即返回值。
       INOUT:指該參數即可作為輸入、又可作為輸出。
   
    存儲過程體中每條語句必須以分號 ; 結尾。
    DELIMITER 用於設置結束標記,用於存儲過程末尾,執行到標記處則存儲過程結束。
    
【調用存儲過程:】
    CALL 存儲過程名(參數列表);
    
【刪除存儲過程:】
    DROP PROCEDURE 存儲過程名;

【查看存儲過程結構:】
    SHOW CREATE PROCEDURE 存儲過程名;

(4)舉例:

# 創建一個 user 表,若已經存在該表,先刪除
DROP TABLE IF EXISTS user;
CREATE TABLE user(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    password VARCHAR(20)
);

# 用於設置結束標記,此處 sql 結束標記有 ; 改為 $
DELIMITER $

# 創建存儲過程(無參),用於向 user 表中插入 5 個數據
DROP PROCEDURE IF EXISTS user_no_parameter $
CREATE PROCEDURE user_no_parameter()
BEGIN
    INSERT INTO USER(name, password) VALUES('tom', 'tom123'),('jarry', 'jarry123'),('jack', 'jack123'),('tim', 'tim123'),('rose', 'rose123');
END $

# 創建有參存儲過程,根據輸入的用戶名,找到相應的密碼,並返回該用戶的 id。
DROP PROCEDURE IF EXISTS user_parameter $
CREATE PROCEDURE user_parameter(IN name VARCHAR(20), OUT password VARCHAR(20), INOUT id INT)
BEGIN
    SELECT user.password, user.id INTO password, id
    FROM user
    WHERE user.name = name;
END $

# 用於設置結束標記,此處 sql 結束標記有 $ 改為 ;
DELIMITER ;

# 調用無參存儲過程
CALL user_no_parameter();

# 查看當前表數據
SELECT * FROM user;

# 調用有參存儲過程
set @id = 0;
CALL user_parameter('jack', @password, @id);

# 查看有參存儲過程執行後的結果
SELECT @password, @id;

 

 

 

14、函數

(1)函數:
  與存儲過程類似,也是一組預先編譯好的 sql 語句的集合。
註:
  與存儲過程的區別:
    存儲過程可以沒有返回值,可以有多個返回值,適合進行批處理(批量插入、刪除等)。
    函數有且僅有一個返回值,一般用於處理數據並返回一個結果。

(2)語法:

【創建函數:】
    DELIMITER $
    CREATE FUNCTION 函數名(參數列表) RETURNS 返回類型
    BEGIN
        函數體(一組合法的 sql 語句)
    END $
    DELIMITER ;
註:
    參數列表分兩個部分,分別為 參數名、參數類型。
    函數體必須包含 return 語句。
    
【調用函數:】
    SELECT 函數名(參數列表);
    
【查看函數:】
    DROP FUNCTION 函數名;

【刪除函數:】
    SHOW CREATE FUNCTION 函數名;

 

(3)舉例:

# 用於設置結束標記,此處 sql 結束標記有 ; 改為 $
DELIMITER $

# 創建無參函數,若函數已存在,則先刪除再創建
DROP FUNCTION IF EXISTS test1 $
CREATE FUNCTION test1() RETURNS INT
BEGIN
    DECLARE a INT DEFAULT 10;
    DECLARE b INT DEFAULT 10;
    return  a + b;
END $

# 創建有參函數,若函數已存在,則先刪除再創建
DROP FUNCTION IF EXISTS test2 $
CREATE FUNCTION test2(a INT, b INT) RETURNS INT
BEGIN
    RETURN a - b;
END $

# 用於設置結束標記,此處 sql 結束標記有 $ 改為 ;
DELIMITER ;

# 調用無參函數
SELECT test1();

# 調用有參函數
SELECT test2(20, 10);

 

 

註:
  若出現錯誤 ERROR 1418 (HY000),修改 log_bin_trust_function_creators 值即可。

【錯誤:】
    ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

【解決:】
    SET GLOBAL log_bin_trust_function_creators = 1;

 

15、流程式控制制語句

(1)IF 語句

【語法1:(IF 函數)】
    IF(表達式1, 結果1, 結果2);
註:
    表達式 1 成立,則返回 結果1.
    表達式 1 不成立,則返回 結果2.
    
【語法2:需要寫在 BEGIN - END 中】
    BEGIN
        IF 表達式 1 THEN 結果 1;
        ELSEIF 表達式 2 THEN 結果 2;
        ELSE 結果 3;
        END IF;
    END
    
【舉例:】
    DELIMITER $
    DROP FUNCTION IF EXISTS test3 $
    CREATE FUNCTION test3() RETURNS INT
    BEGIN
        IF 2 > 3 THEN RETURN 3;
        ELSEIF 2 > 4 THEN RETURN 4;
        ELSE RETURN 5;
        END IF;    
    END $
    DELIMITER ;
    
    SELECT test3() value1, IF(2 > 3, 2, 3) value2;

 

 

(2)CASE 語句

【語法1:相當於 Java 中的 switch 語句】
    CASE 表達式 | 變數
    WHEN1 THEN 返回的結果 1 
    WHEN2 THEN 返回的結果 2
    ELSE 返回的結果 3
    END
    
【語法2:相當於 Java 中的 IF - ELSE 語句】
    CASE 
    WHEN 表達式 1 THEN 返回的結果 1
    WHEN 表達式 2 THEN 返回的結果 2
    ELSE 返回的結果 3
    END
    
【舉例:】
SELECT (
    CASE 2 + 3
    WHEN 2 THEN 2
    WHEN 3 THEN 3
    ELSE 4
    END
) value1,
(
    CASE 
    WHEN 2 > 3 THEN 2
    WHEN 2 < 3 THEN 3
    ELSE 4
    END
) value2;

 

 

 

(3)迴圈

【分類:需要放在 BEGIN - END 里】
    while、loop、repeat

【迴圈標誌:】
    iterate: 類似於 Java 中的 continue,結束本次迴圈,進行下一次迴圈。
    leave: 類似於 Java 中的 break,結束當前所有的迴圈。
    
【while 語法:(先判斷再執行迴圈)】
BEGIN
   [標簽:] WHILE 迴圈條件 DO
        迴圈體;
    END WHILE [標簽];
END
    
【loop 語法:(沒有條件的死迴圈,需使用 leave 退出)】
BEGIN
   [標簽:] LOOP
        迴圈體;
    END LOOP [標簽];
END
    
【repeat 語法:(先執行迴圈再判斷)】
BEGIN
   [標簽:] REPEAT
        迴圈體;
    UNTIL 結束迴圈的條件
    END REPEAT [標簽];
END

【舉例:】
DELIMITER $

DROP PROCEDURE IF EXISTS test1 $
CREATE PROCEDURE test1(OUT a INT, OUT b INT, OUT c INT)
BEGIN
    # 測試 while 迴圈,temp >= 10 時退出迴圈。
    DECLARE temp INT DEFAULT 0;
    testWhile: WHILE temp < 10 DO
        SET temp = temp + 1;
        # 當 temp = 8 時,給 a 賦值並退出 while 迴圈
        IF temp = 8 THEN SET a = temp; LEAVE testWhile;
        END IF;
    END WHILE testWhile;
    
    # 測試 repeat 迴圈, temp >= 10 時退出迴圈。
    SET temp = 0;
    testRepeat: REPEAT 
        SET temp = temp + 1;
        # 當 temp = 7 時,給 b 賦值並退出 repeat 迴圈
        IF temp = 7 THEN SET b = temp; LEAVE testRepeat;
        END IF;
        # 註意 until 是迴圈結束條件
        UNTIL temp >= 10
    END REPEAT testRepeat;
    
    # 測試 loop 迴圈
    SET temp = 0;
    testLoop: LOOP
        SET temp = temp + 1;
        # 當 temp = 6 時,給 c 賦值並退出 loop 迴圈
        IF temp = 6 THEN SET c = temp; LEAVE testLoop;
        END IF;
    END LOOP testLoop;
END $ 

DELIMITER ;

CALL test1(@a, @b, @c);

SELECT @a, @b, @c;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前能用的虛擬機網路,在關閉後,再次使用時網路不可用了,ping www.baidu.com發現並不能通 檢查了一下虛擬機的網路配置都沒有問題,懷疑是windows的vmware相應服務沒有啟動,檢查一下 發現有一個vmware NAT的服務沒有啟動,右鍵點擊把它啟動即可 再次ping www.ba ...
  • Linux 概述 什麼是Linux?Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟體、應用程式和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是 ...
  • 1. 和用戶級相比,核心級線程有什麼不同? 在用戶級線程中,根據TCB(線程式控制制塊)切換用戶棧, 而核心級線程是,根據TCB(線程式控制制塊)切換一套棧,切換用戶棧和內核棧 2. 用戶棧和內核棧之間的關聯 進入內核棧的唯一方法是中斷 例子: 3. 開始內核中的切換 switch_to 4. 內核線程sw ...
  • 問題: 安裝了Wkhtmltopdf後,在odoo中列印出的報表顯示為已損壞。 odoo發出了一個警告提示版本不對,需要安裝qt補丁。 2020-03-10 01:53:27,152 9236 WARNING warehouse_management odoo.addons.base.models. ...
  • MRAM技術MRAM或磁性隨機存取存儲器使用1晶體管–1磁性隧道結(1T-1MTJ)架構,其中鐵磁材料的磁性“狀態”作為數據存儲元素。由於MRAM使用磁性狀態進行存儲(而不是隨時間推移而“泄漏”的電荷),因此MRAM可以提供非常長的數據保留時間(+20年)和無限的耐用性。切換磁極化(Write Cy ...
  • 不管是 Windows 電腦還是 Linux 電腦,在使用的過程中,或多或少都會留下很多重覆的文件。這些文件不僅會占用我們的磁碟,還會拖累我們的系統,所以,很有必要幹掉這些重覆的文件。 本文將介紹 6 種方法找到系統里的重覆文件,讓你快速釋放硬碟空間! 1. 使用 diff 命令比較文件 在我們平常 ...
  • 存儲引擎: 早期的時候,存在如何選擇MyISAM和Innodb? 現在,Innodb不斷地發展完善,成為了主流的存儲引擎。 因此5.5之後的mysql,無腦選擇Innodb即可。 MYSQL中的數據,索引以及其他的對象,是如何存儲的,是一套文件系統的實現。 MYSQL支持很多的存儲引擎,使用 SHO ...
  • mysql調優 1.選擇合適的存儲引擎 + 經常用來讀的表使用myisam引擎 + 其餘的表都使用innodb引擎 2.SQL語句調優(儘量避免全表掃描) + 在select where order by常涉及到的欄位上建立索引 + where語句中不使用 !=,否則將放棄使用索引進行全表掃描 + ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...