一、手撕
合并升序鏈表? ? ?合并兩個排序的鏈表_牛客題霸_牛客網
順時針翻轉矩陣??順時針旋轉矩陣_牛客題霸_牛客網
二、八股
1、靜態變量和實例變量
public class House {public static String buildDate = "2024-10-27"; // 靜態變量public String color; // 實例變量public House(String color) {this.color = color; // 初始化實例變量}public static void main(String[] args) {House house1 = new House("red");House house2 = new House("blue");System.out.println(House.buildDate); // 通過類名訪問靜態變量System.out.println(house1.color); // 通過對象訪問實例變量}
}
2、jvm垃圾回收算法
JAVA基礎-2-CSDN博客
3、Linux如何顯示正在進行的程序指令
ps
ps aux
:顯示所有進程的詳細信息(用戶、CPU、內存占用等)。
ps -ef | grep <進程名>
:快速查找特定進程。
top
實時顯示系統進程,按?CPU/Memory?排序,默認每3秒刷新一次。
strace
跟蹤進程的系統調用,如?
strace -p <PID>
?查看指定進程的指令。
lsof
顯示進程打開的文件和網絡連接,如?
lsof -i :<端口>
?查看端口占用情況。
4、MySQL的索引
MySQL索引詳解 | JavaGuide
按照數據結構維度劃分:
- BTree 索引:MySQL 里默認和最常用的索引類型。只有葉子節點存儲 value,非葉子節點只有指針和 key。存儲引擎 MyISAM 和 InnoDB 實現 BTree 索引都是使用 B+Tree,但二者實現方式不一樣。
- 哈希索引:類似鍵值對的形式,一次即可定位。
- RTree 索引:一般不會使用,僅支持 geometry 數據類型,優勢在于范圍查找,效率較低,通常使用搜索引擎如 ElasticSearch 代替。
- 全文索引:對文本的內容進行分詞,進行搜索。目前只有
CHAR
、VARCHAR
、TEXT
列上可以創建全文索引。一般不會使用,效率較低,通常使用搜索引擎如 ElasticSearch 代替。按照底層存儲方式角度劃分:
- 聚簇索引:索引結構和數據一起存放的索引,InnoDB 中的主鍵索引就屬于聚簇索引。
- 非聚簇索引:索引結構和數據分開存放的索引,二級索引(輔助索引)就屬于非聚簇索引。MySQL 的 MyISAM 引擎,不管主鍵還是非主鍵,使用的都是非聚簇索引。
按照應用維度劃分:
- 主鍵索引:加速查詢 + 列值唯一(不可以有 NULL)+ 表中只有一個。
- 普通索引:僅加速查詢。
- 唯一索引:加速查詢 + 列值唯一(可以有 NULL)。
- 覆蓋索引:一個索引包含(或者說覆蓋)所有需要查詢的字段的值。
- 聯合索引:多列值組成一個索引,專門用于組合搜索,其效率大于索引合并。
- 全文索引:對文本的內容進行分詞,進行搜索。目前只有
CHAR
、VARCHAR
、TEXT
列上可以創建全文索引。一般不會使用,效率較低,通常使用搜索引擎如 ElasticSearch 代替。- 前綴索引:對文本的前幾個字符創建索引,相比普通索引建立的數據更小,因為只取前幾個字符。
5、主從同步有哪幾種
異步復制(Asynchronous)
- 原理:主庫不等待從庫確認,直接提交事務。
- 優缺點:性能高,但可能丟失數據。
半同步復制(Semi-Synchronous)
- 原理:主庫等待至少一個從庫確認后再提交。
- 優缺點:平衡性能與數據一致性,減少數據丟失風險。
全同步復制(Fully Synchronous)
- 原理:主庫等待所有從庫確認后才提交。
- 優缺點:數據零丟失,但延遲高,性能差。
6、長連接和短連接
7、SQL注入
-
動態SQL的構造方式
應用程序在處理用戶輸入時,直接將輸入內容拼接到SQL語句中,形成動態SQL查詢。例如:SELECT * FROM users WHERE username = '輸入的用戶名' AND password = '輸入的密碼';
如果用戶輸入未經過濾或轉義,攻擊者可以插入惡意SQL代碼,改變查詢邏輯。
-
輸入未過濾或驗證
程序員未對用戶輸入的數據進行嚴格的校驗和轉義,導致惡意代碼能直接拼接到SQL語句中。 -
攻擊者構造惡意輸入
攻擊者通過輸入特殊字符(如單引號'
、分號;
、注釋符--
等)或邏輯表達式,閉合原SQL語句并注入新的SQL命令。惡意輸入會破壞原SQL語句的邏輯結構,執行攻擊者意圖的操作,例如:繞過身份驗證,獲取敏感數據,刪除或篡改數據,執行系統命令
例如:
正常登錄流程
用戶輸入用戶名admin
和密碼123
,生成的SQL語句為:
SELECT * FROM users WHERE username = 'admin' AND password = '123';
攻擊者輸入惡意代碼
攻擊者在密碼字段輸入:1' OR '1'='1
,則拼接后的SQL語句變為:
SELECT * FROM users WHERE username = 'admin' AND password = '1' OR '1'='1';
單引號'
閉合原密碼字段的值。
OR '1'='1'
始終為真,使得條件成立,無需正確密碼即可登錄。
執行結果
數據庫返回用戶名為admin
的第一條記錄,攻擊者成功繞過登錄驗證。
防御關鍵點
?參數化查詢(預編譯語句)
- 核心原理:將用戶輸入作為參數傳遞,而非直接拼接到SQL語句中,確保輸入數據不會被解釋為SQL代碼。
- 實現方式:
- 使用PreparedStatement等API
String sql = "SELECT * FROM orders WHERE user_id = ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setString(1, id); // 自動處理引號和特殊字符
- 使用PreparedStatement等API
- 優勢:徹底阻斷惡意SQL的注入路徑,是防御SQL注入的最有效方法
8、安全XXS
這篇文章寫的很清楚
XSS攻擊詳解_xxs原理-CSDN博客
總結
對于安全的知識不是那么了解,還需要繼續學習