Java面试黄金宝典34
1. 主键索引底层的实现原理
- 定义
主键索引是数据库中用于唯一标识表中每一行记录的索引,常见的底层实现是 B+ 树结构。B+ 树是一种平衡的多路搜索树,由内部节点和叶子节点组成。内部节点只存储索引键和指向下一层节点的指针,不存储实际数据;叶子节点存储索引键和对应的实际数据记录,并且所有叶子节点通过指针连接成一个有序链表。查询时从根节点开始,依据索引键的值在内部节点中比较,逐步向下查找直至找到对应的叶子节点获取数据。
- 要点
- 平衡性:B+ 树所有叶子节点在同一层,保证查询时间复杂度稳定在 O (log n),n 为数据记录数量。
- 多路搜索:每个节点可有多个子节点,降低树的高度,减少磁盘 I/O 次数,提升查询效率。
- 链表结构:叶子节点间通过指针连接成有序链表,便于进行范围查询。
- 应用
在电商系统的商品表中,以商品 ID 作为主键索引。当用户根据商品 ID 查询商品详情时,数据库能通过 B+ 树快速定位到对应的商品记录,提高查询效率。
SQL 代码示例
sql
-- 创建商品表并设置商品 ID 为主键索引
CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(100),price DECIMAL(10, 2)
);-- 插入数据
INSERT INTO products (product_id, product_name, price) VALUES (1, 'iPhone', 999.99);
INSERT INTO products (product_id, product_name, price) VALUES (2, 'iPad', 599.99);-- 根据主键索引查询商品
SELECT * FROM products WHERE product_id = 1;
Java 代码示例(模拟 B+ 树查询)
java
import java.util.ArrayList;
import java.util.List;// 简单模拟 B+ 树节点
class BPlusTreeNode {List<Integer> keys;List<BPlusTreeNode> children;boolean isLeaf;BPlusTreeNode next;public BPlusTreeNode(boolean isLeaf) {this.keys = new ArrayList<>();this.children = new ArrayList<>();this.isLeaf = isLeaf;this.next = null;}
}// 简单模拟 B+ 树查询
class BPlusTree {BPlusTreeNode root;public BPlusTree() {this.root = new BPlusTreeNode(true);}public Integer search(int key) {BPlusTreeNode node = root;while (!node.isLeaf) {int i = 0;while (i < node.keys.size() && key > node.keys.get(i)) {i++;}node = node.children.get(i);}for (int i = 0; i < node.keys.size(); i++) {if (node.keys.get(i) == key) {return key;}}return null;}
}public class BPlusTreeExample {public static void main(String[] args) {BPlusTree bPlusTree = new BPlusTree();Integer result = bPlusTree.search(5);System.out.println(result);}
}
2. 01 索引
- 定义
“01 索引” 指的是位图索引,它是一种特殊的索引结构,用位图表示每个索引键的值。对于每个索引键,位图中的每一位对应一个数据记录,若该记录的索引键值等于该索引键,对应位为 1,否则为 0。通过位图的位运算可快速进行查询和过滤。
- 要点
- 空间效率高:对于低基数(不同值数量较少)的列,能显著减少存储空间。
- 查询效率高:利用位运算可快速查询和过滤,尤其适用于多条件查询。
- 更新成本高:数据记录插入、更新或删除时,需更新对应位图,成本较高。
- 应用
在数据仓库的用户表中,对于性别(只有男、女两种值)列可使用位图索引。当需要统计男性用户数量时,通过位图的位运算能快速得出结果。
SQL 代码示例(创建位图索引)
sql
-- 假设表名为 users,列名为 gender
CREATE TABLE users (user_id INT,gender CHAR(1)
);-- 创建位图索引
CREATE BITMAP INDEX idx_users_gender ON users (gender);-- 插入数据
INSERT INTO users (user_id, gender) VALUES (1, 'M');
INSERT INTO users (user_id, gender) VALUES (2, 'F');-- 查询男性用户
SELECT * FROM users WHERE gender = 'M';
3. 如何在长文本中快捷的筛选出你的名字
- 定义
在长文本中筛选指定名字可借助字符串匹配算法。常见算法有朴素匹配算法、KMP 算法、Boyer - Moore 算法等,这些算法通过不同策略在长文本中查找目标名字的位置。
- 要点
- 朴素匹配算法:简单直观,但时间复杂度高,为 O (m * n),m 是长文本长度,n 是要匹配名字的长度。
- KMP 算法:预处理要匹配的名字,构建部分匹配表,避免匹配过程中的不必要回溯,时间复杂度为 O (m + n)。
- Boyer - Moore 算法:从右向左匹配,利用坏字符规则和好后缀规则跳过尽可能多的字符,平均时间复杂度接近 O (m)。
- 应用
在新闻文章的搜索系统中,用户输入关键词(如人名),系统可使用高效的字符串匹配算法在大量文章中快速筛选出包含该关键词的文章。
Java 代码示例(使用 KMP 算法)
java
public class KMP {public static int kmpSearch(String text, String pattern) {int[] lps = computeLPSArray(pattern);int i = 0; // 文本指针int j = 0; // 模式指针while (i < text.length()) {if (pattern.charAt(j) == text.charAt(i)) {j++;i++;}if (j == pattern.length()) {return i - j; // 找到匹配} else if (i < text.length() && pattern.charAt(j) != text.charAt(i)) {if (j != 0) {j = lps[j - 1];} else {i++;}}}return -1; // 未找到匹配}private static int[] computeLPSArray(String pattern) {int[] lps = new int[pattern.length()];int len = 0;int i = 1;lps[0] = 0;while (i < pattern.length()) {if (pattern.charAt(i) == pattern.charAt(len)) {len++;lps[i] = len;i++;} else {if (len != 0) {len = lps[len - 1];} else {lps[i] = 0;i++;}}}return lps;}public static void main(String[] args) {String text = "Hello, my name is John. John is a good person.";String pattern = "John";int index = kmpSearch(text, pattern);System.out.println("Index of pattern: " + index);}
}
4. 数据库的完整性约束, 事务隔离级别
- 数据库的完整性约束
- 定义
数据库的完整性约束是为保证数据库中数据的正确性、一致性和有效性而设置的规则。包括实体完整性、参照完整性和用户定义的完整性。实体完整性确保表中每一行记录唯一,通常通过主键约束实现;参照完整性保证表之间关联关系正确,通常通过外键约束实现;用户定义的完整性是根据业务需求定义的规则,如检查约束、默认值约束等。
- 要点
- 主键约束:一个表只能有一个主键,主键值必须唯一且不为空。
- 外键约束:外键是表中的列,引用另一个表的主键,其值必须存在于被引用表的主键中或为空。
- 检查约束:限制列的取值范围,如年龄必须大于 0。
- 默认值约束:为列指定默认值,插入记录时若未指定该列值,则使用默认值。
- 应用
在学生选课系统中,学生表的学生 ID 作为主键,课程表的课程 ID 作为主键。选课表中通过外键关联学生 ID 和课程 ID,确保选课信息的正确性。同时,可设置成绩列的检查约束,保证成绩在 0 - 100 分之间。
SQL 代码示例(创建完整性约束)
sql
-- 创建学生表
CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT CHECK (age > 0)
);-- 创建课程表
CREATE TABLE courses (course_id INT PRIMARY KEY,course_name VARCHAR(100)
);-- 创建选课表
CREATE TABLE enrollments (enrollment_id INT PRIMARY KEY,student_id INT,course_id INT,grade DECIMAL(5, 2) CHECK (grade >= 0 AND grade <= 100),FOREIGN KEY (student_id) REFERENCES students(student_id),FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
事务隔离级别
- 定义
事务隔离级别用于控制多个事务之间的可见性和并发操作行为。不同隔离级别影响事务的并发性能和数据一致性。常见的事务隔离级别有读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
- 要点
- 读未提交:一个事务可读取另一个未提交事务的数据,可能出现脏读、不可重复读和幻读问题。
- 读已提交:一个事务只能读取另一个已提交事务的数据,避免脏读问题,但可能出现不可重复读和幻读问题。
- 可重复读:在一个事务中,多次读取同一数据结果相同,避免脏读和不可重复读问题,但可能出现幻读问题。
- 串行化:所有事务依次执行,避免脏读、不可重复读和幻读问题,但并发性能最低。
- 应用
在银行转账系统中,为保证数据一致性,可将事务隔离级别设置为可重复读。例如,在一个事务中进行转账操作时,多次读取账户余额结果相同,避免出现数据不一致的情况。
SQL 代码示例(设置事务隔离级别)
sql
-- 设置事务隔离级别为可重复读
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;-- 开始事务
START TRANSACTION;-- 执行转账操作
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;-- 提交事务
COMMIT;
5. 数据库悲观锁怎么实现的
- 定义
数据库悲观锁是一种保守的并发控制策略,假设数据处理过程中会发生冲突,因此在访问数据前先对数据加锁,防止其他事务修改数据。常见实现方式有共享锁(读锁)和排他锁(写锁)。
- 要点
- 共享锁:多个事务可同时对同一数据加共享锁用于读取数据。加共享锁后,其他事务可继续加共享锁,但不能加排他锁,直到所有共享锁释放。
- 排他锁:一个事务对数据加排他锁后,其他事务不能再对该数据加任何类型的锁,直到排他锁释放。排他锁用于修改数据,保证数据一致性。
- 应用
在电商系统的库存管理中,当用户下单时,对相应商品的库存记录加排他锁,防止其他用户同时购买导致库存数据不一致。
SQL 代码示例(使用排他锁)
sql
-- 会话 1
START TRANSACTION;
SELECT * FROM products WHERE product_id = 1 FOR UPDATE;
-- 进行库存更新操作
UPDATE products SET stock = stock - 1 WHERE product_id = 1;
COMMIT;-- 会话 2
START TRANSACTION;
SELECT * FROM products WHERE product_id = 1 FOR UPDATE;
-- 会被阻塞,直到会话 1 的排他锁释放
COMMIT;
6. 建表的原则
- 定义
建表原则是为保证数据库设计合理、高效、可维护和可扩展而遵循的准则。设计表结构时需考虑数据的完整性、一致性、性能和可维护性等因素。
- 要点
- 遵循范式:尽量遵循数据库的范式设计,如第一范式(1NF)、第二范式(2NF)和第三范式(3NF),减少数据冗余。
- 选择合适的数据类型:根据数据特点和使用场景,选择合适的数据类型,避免数据类型不匹配导致的性能问题。
- 合理设置主键和索引:为表设置合适的主键,确保数据唯一性。根据查询需求,合理创建索引,提高查询性能。
- 考虑数据的扩展性:设计表结构时要考虑未来数据增长和业务变化,预留一定扩展性。
- 应用
在企业的员工管理系统中,设计员工表、部门表和项目表时,遵循建表原则。员工表以员工 ID 为主键,部门表以部门 ID 为主键,项目表以项目 ID 为主键。通过外键关联员工和部门、员工和项目,同时根据查询需求在相关列上创建索引。
SQL 代码示例(创建符合建表原则的表)
sql
-- 创建部门表
CREATE TABLE departments (department_id INT PRIMARY KEY,department_name VARCHAR(100)
);-- 创建员工表
CREATE TABLE employees (employee_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,department_id INT,salary DECIMAL(10, 2),hire_date DATE,FOREIGN KEY (department_id) REFERENCES departments(department_id),INDEX idx_department_id (department_id)
);-- 创建项目表
CREATE TABLE projects (project_id INT PRIMARY KEY,project_name VARCHAR(100),start_date DATE,end_date DATE
);-- 创建员工项目关联表
CREATE TABLE employee_projects (employee_project_id INT PRIMARY KEY AUTO_INCREMENT,employee_id INT,project_id INT,FOREIGN KEY (employee_id) REFERENCES employees(employee_id),FOREIGN KEY (project_id) REFERENCES projects(project_id)
);
7. 索引的定义和用法
- 定义
索引是数据库中一种特殊的数据结构,用于加快数据查询速度。它对表中某些列的值进行排序和存储,建立快速查找的映射关系,使数据库查询时可直接定位所需数据记录,无需扫描整个表。
- 用法
- 创建索引:使用
CREATE INDEX
语句创建索引,如CREATE INDEX idx_column_name ON table_name (column_name);
- 使用索引:在查询语句中,数据库会自动根据索引进行优化,提高查询效率,如
SELECT * FROM table_name WHERE column_name = 'value';
- 删除索引:使用
DROP INDEX
语句删除索引,如DROP INDEX idx_column_name ON table_name;
- 要点
- 选择合适的列创建索引:通常在经常用于查询条件、排序和连接的列上创建索引。
- 避免创建过多的索引:过多索引会增加数据插入、更新和删除的开销,同时占用更多存储空间。
- 定期维护索引:随着数据变化,索引可能碎片化,影响查询性能,需定期重建和优化索引。
- 应用
在电商系统的商品搜索功能中,对商品名称、价格等列创建索引。当用户根据商品名称或价格范围进行搜索时,数据库可利用索引快速定位到相关商品记录。
SQL 代码示例(创建和使用索引)
sql
-- 创建商品表
CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(100),price DECIMAL(10, 2),category VARCHAR(50)
);-- 创建索引
CREATE INDEX idx_product_name ON products (product_name);
CREATE INDEX idx_price ON products (price);-- 使用索引进行查询
SELECT * FROM products WHERE product_name = 'iPhone';
SELECT * FROM products WHERE price > 500;-- 删除索引
DROP INDEX idx_product_name ON products;
8. 怎么创建表
- 定义
创建表是数据库操作的基本操作,通过 SQL 语句在数据库中创建新表。创建时需指定表名、列名、数据类型和约束条件等信息。
- 要点
- 表名:应具有描述性,清晰表达表的用途。
- 列名:也应具有描述性,清晰表达列的含义。
- 数据类型:根据数据特点和使用场景,选择合适的数据类型,如整数类型、字符串类型、日期类型等。
- 约束条件:可为列添加约束条件,如主键约束、外键约束、唯一约束、检查约束等,保证数据的完整性和一致性。
- 应用
在开发一个博客系统时,需要创建文章表、用户表和评论表。通过合理创建表结构,保证系统数据的有效存储和管理。
SQL 代码示例(创建表)
sql
-- 创建用户表
CREATE TABLE users (user_id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 创建文章表
CREATE TABLE articles (article_id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(200) NOT NULL,content TEXT,author_id INT,published_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (author_id) REFERENCES users(user_id)
);-- 创建评论表
CREATE TABLE comments (comment_id INT PRIMARY KEY AUTO_INCREMENT,article_id INT,user_id INT,comment_text TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (article_id) REFERENCES articles(article_id),FOREIGN KEY (user_id) REFERENCES users(user_id)
);
9. 已知两条 SQL 语句, 如何根据这两条语句建索引
- 定义
根据 SQL 语句创建索引是为提高查询性能。需要分析 SQL 语句中的查询条件、排序条件和连接条件,在这些条件涉及的列上创建索引。
- 要点
- 查询条件:在经常用于
WHERE
子句的列上创建索引,如WHERE column_name = 'value'
。 - 排序条件:在经常用于
ORDER BY
子句的列上创建索引,如ORDER BY column_name
。 - 连接条件:在经常用于
JOIN
子句的列上创建索引,如JOIN table_name ON table1.column_name = table2.column_name
。
- 应用
在一个图书管理系统中,有两条 SQL 语句:一条用于查询某一分类下价格大于 50 元的图书,另一条用于按图书出版日期排序查询。可根据这两条语句在分类列、价格列和出版日期列上创建索引。
SQL 代码示例(根据 SQL 语句创建索引)
sql
-- 假设有两条 SQL 语句
-- 语句 1: SELECT * FROM books WHERE category = 'fiction' AND price > 50;
-- 语句 2: SELECT * FROM books ORDER BY publish_date;-- 创建图书表
CREATE TABLE books (book_id INT PRIMARY KEY,title VARCHAR(200),category VARCHAR(50),price DECIMAL(10, 2),publish_date DATE
);-- 根据语句 1 创建复合索引
CREATE INDEX idx_category_price ON books (category, price);-- 根据语句 2 创建索引
CREATE INDEX idx_publish_date ON books (publish_date);
10. select 语句实现顺序
- 定义
SELECT
语句的执行顺序并非按照语句中各子句的书写顺序,而是遵循特定的逻辑顺序。数据库先确定查询范围和条件,再进行数据筛选、分组、排序等操作,最后返回结果。
- 要点
SELECT
语句的执行顺序如下:
- FROM:指定要查询的表或视图。
- JOIN:若有连接操作,进行表的连接。
- WHERE:根据条件筛选记录。
- GROUP BY:对筛选后的记录进行分组。
- HAVING:对分组后的结果进行筛选。
- SELECT:选择要返回的列。
- DISTINCT:去除重复的记录。
- ORDER BY:对结果进行排序。
- LIMIT:限制返回的记录数量。
- 应用
在学生成绩统计系统中,要统计每个班级的平均成绩,并筛选出平均成绩大于 80 分的班级,按平均成绩降序排列,取前 5 个班级。通过了解 SELECT
语句的执行顺序,可正确编写查询语句。
SQL 代码示例(演示 SELECT
语句执行顺序)
sql
-- 假设有两个表:students 和 scores
-- students 表包含 student_id, class_id, name 列
-- scores 表包含 score_id, student_id, score 列SELECT s.class_id, AVG(sc.score) AS average_score
FROM students s
JOIN scores sc ON s.student_id = sc.student_id
WHERE sc.score > 60
GROUP BY s.class_id
HAVING AVG(sc.score) > 80
ORDER BY average_score DESC
LIMIT 5;
在这个示例中,数据库先执行 FROM
和 JOIN
操作,连接 students
表和 scores
表;接着执行 WHERE
子句,筛选出成绩大于 60 分的记录;然后执行 GROUP BY
操作,按班级 ID 分组;再执行 HAVING
子句,筛选出平均成绩大于 80 分的班级;之后执行 SELECT
操作,选择班级 ID 和平均成绩;最后执行 ORDER BY
和 LIMIT
操作,对结果排序并限制返回的记录数量。
友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读
https://download.csdn.net/download/ylfhpy/90567261
相关文章:
Java面试黄金宝典34
1. 主键索引底层的实现原理 定义 主键索引是数据库中用于唯一标识表中每一行记录的索引,常见的底层实现是 B 树结构。B 树是一种平衡的多路搜索树,由内部节点和叶子节点组成。内部节点只存储索引键和指向下一层节点的指针,不存储实际数据&am…...
计算机系统---CPU
定义与功能 中央处理器(Central Processing Unit,CPU),是电子计算机的主要设备之一,是计算机的核心部件。CPU是计算机的运算核心和控制核心,负责执行计算机程序中的指令,进行算术运算、逻辑运算…...
AWS云安全基线:构建企业级安全防护体系的完整指南
1. 引言 随着越来越多的企业将其业务和数据迁移到云端,云安全已成为一个不容忽视的关键议题。AWS作为全球领先的云服务提供商,提供了丰富的安全工具和最佳实践。本文将深入探讨如何构建一个全面的AWS云安全基线,以确保您的企业在云环境中的安全性。 2. AWS共享责任模型 在深…...
(三十三)Dart 中使用 Pub 包管理系统与 HTTP 请求教程
Dart 中使用 Pub 包管理系统与 HTTP 请求教程 Pub 包管理系统简介 Pub 是 Dart 和 Flutter 的包管理系统,用于管理项目的依赖。通过 Pub,开发者可以轻松地添加、更新和管理第三方库。 使用 Pub 包管理系统 1. 找到需要的库 访问以下网址,…...
如何实现单例模式?
一、模式定义与核心价值 单例模式(Singleton Pattern)是一种创建型设计模式,保证一个类仅有一个实例,并提供全局访问点。其核心价值在于: 资源控制:避免重复创建消耗性资源(如数据库连…...
【51单片机】2-4【I/O口】震动传感器控制继电器
1.硬件 51最小系统继电器模块震动传感器模块 2.软件 #include "reg52.h"sbit vibrate P3^3;//震动传感器DO接到P3.3口 sbit switcher P1^1;//继电器控制端IN接到P1.1void Delay2000ms() //11.0592MHz {unsigned char i, j, k;// _nop_();i 15;j 2;k 235;do{…...
正点原子 迷你 miniSTM32用ST link烧录后程序不运行(已解决)
情况,在程序和配置都没有问题时检查 烧录使用ST linkv2 烧录后有时程序可行,有时不可行 解决方法 加USB供电配合SW烧录 建议直接用USB转串口烧录 不推荐JLINK供电,也不推荐ST linkv2供电...
如何确保MQ消息队列不丢失:Java实现与流程分析
前言 在分布式系统中,消息队列(Message Queue, MQ)是核心组件之一,用于解耦系统、异步处理和削峰填谷。然而,消息的可靠性传递是使用MQ时需要重点考虑的问题。如果消息在传输过程中丢失,可能会导致数据不一…...
Pascal语言的系统监控
Pascal语言的系统监控 引言 在现代计算机系统中,系统监控是确保计算机平稳运行的重要组成部分。无论是个人计算机还是大型服务器,监控系统的性能、资源使用及状态,都是提高系统效率、及时发现问题的关键。Pascal语言作为一种结构化编程语言…...
6.0 使用Qt+ OpenCV+Python加载图片
本例作为python图像处理的入门课程1,使用Qt+ OpenCV+Python加载图片。 主要有如下几个地方需要注意: 1. OpenCV 默认使用 BGR 格式,而 Qt 使用 RGB。显示前需要转换:cv2.cvtColor(img, cv2.COLOR_BGR2RGB),一般使用某个QLabel控件进行显示。 pic = cv2.cvtColor(pic, cv2.C…...
低成本训练垂直领域文娱大模型的技术路径
标题:低成本训练垂直领域文娱大模型的技术路径 内容:1.摘要 在文娱产业快速发展且对智能化需求日益增长的背景下,为降低垂直领域文娱大模型的训练成本,本研究旨在探索低成本训练的有效技术路径。采用对现有开源模型进行微调、利用轻量化模型架构以及优化…...
音视频入门基础:RTP专题(21)——使用Wireshark分析海康网络摄像机RTSP的RTP流
一、引言 使用vlc等播放器可以播放海康网络摄像机的RTSP流: 网络摄像机的RTSP流中,RTSP主要用于控制媒体流的传输,如播放、暂停、停止等操作。RTSP本身并不用于转送媒体流数据,而是会通过PLAY方法使用RTP来传输实际的音视频数据。…...
【Java网络编程详解】
文章目录 前言一、网络编程基础知识1. 什么是网络编程? 二、Java网络编程核心类三、TCP编程实现1. TCP通信原理2. TCP服务器端示例3. TCP客户端示例 四、UDP编程实现1. UDP通信原理2. UDP服务器端示例3. UDP客户端示例 五、使用HttpURLConnection发送HTTP请求1. GET…...
DuckDB系列教程:如何分析Parquet文件
Parquet 是一种强大的、基于列的存储格式,适用于实现更快捷和更高效的数据分析。您可以使用 DuckDB 这种内存型分析数据库来处理 Parquet 文件并运行查询以对其进行分析。 在这篇文章中,我们将逐步介绍如何使用 DuckDB 对存储在 Parquet 文件中的餐厅订单…...
uniapp的v-for不显示或者swiper-item的不显示
今天开发的时候碰见一个问题,在布局的时候发现v-for遍历的时候不显示内容 H5是正常的 但是在小程序就是不显示 最后排查的原因是同一个组件 swiper-item的 v-for不能用相同的名称 比如 <swiper-item v-for"i in 3" :key"i"><image …...
解决LeetCode“使括号有效的最少添加”问题
目录 问题描述 解题思路 复杂度分析 示例分析 暴力替换“不讲码德” 总结 问题描述 给定一个仅由 ( 和 ) 组成的字符串 s,我们需要通过添加最少数量的括号(( 或 ))使得字符串有效。有效字符串需满足: 空字符串是有效的。 …...
黑马点评_知识点
将手机验证码保存到HttpSession中进行验证(感觉已经过时) Controller中的参数有HttpSession,存验证码session.setAttribute(SystemConstants.VERIFY_CODE, code); 其他的都是逻辑代码 Cookie的缺点 什么是Session集群共享问题? …...
2025年渗透测试面试题总结-某腾讯-玄武实验室扩展(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 某腾讯-玄武实验室扩展 一、Web安全基础原理与关联漏洞 1.1 CSRF攻击原理深度解析 1.2 反序列化漏洞…...
管理系统 UI 设计:提升企业办公效率的关键
一、管理系统UI设计的基本原则 管理系统UI设计应遵循一系列基本原则,以确保界面友好、操作便捷、信息直观。这些原则包括: 简洁性:界面应去除冗余元素,保持简洁明了,避免用户迷失在复杂界面中。一致性:界…...
Apache Commons Lang3 中的 `isNotEmpty` 与 `isNotBlank`的区别
前言 在 Java 开发中,字符串的空值(null)、空字符串(“”)和空白字符串(如 " ")的判断是高频需求。Apache Commons Lang3 的 StringUtils 类提供了两个核心方法:isNotEmp…...
WPF 登录页面
效果 项目结构 LoginWindow.xaml <Window x:Class"PrismWpfApp.Views.LoginWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.…...
CExercise_05_1函数_2海伦公式求三角形面积
题目: 键盘录入三个边长(带小数),然后用海伦公式计算三角形的面积(如果它确实是一个三角形的话) 海伦公式求三角形面积: 要求基于下列两个函数完成这个编程题: // 判断abc是否可以组…...
Muduo网络库实现 [十五] - HttpContext模块
目录 设计思路 类的设计 解码过程 模块的实现 私有接口 请求函数 解析函数 公有接口 疑惑点 设计思路 记录每一次请求处理的进度,便于下一次处理。 上下文模块是Http协议模块中最重要的一个模块,他需要记录每一次请求处理的进度,需…...
构建自己的私有 Git 服务器:基于 Gitea 的轻量化部署实战指南
对于个人开发者、小型团队乃至企业来说,将项目代码托管在 GitHub、Gitee 等公共平台虽然方便,但也存在一定的隐私与可控性问题。 搭建一套私有 Git 代码仓库系统,可以实现对源码的完全控制,同时不依赖任何第三方平台,…...
【计科】计算机科学与技术,从离散数学到软件工程,从理学/抽象/科学到工学/具体/技术
【计科】计算机科学与技术,从离散数学到软件工程,从理学/抽象/科学到工学/具体/技术 文章目录 1、发展史与桥梁(离散数学 -> 算法/数据结构 -> 软件工程)2、离散数学(数理逻辑-命题/谓词/集合/函数/关系 -> 代…...
架构与大数据-RabbitMQ和Kafka的技术实现异同及落地场景上的异同
RabbitMQ与Kafka技术实现及场景对比 一、技术实现异同 对比维度RabbitMQKafka核心协议/模型基于 AMQP 协议,支持点对点、发布/订阅、Topic Exchange 等多种消息模式,支持灵活的路由规则基于 发布-订阅模型,…...
工程画图-UML类图 组合和聚合
组合VS聚合 组合&聚合浅层理解 组合似组装,电脑组装,少装一个CPU行不?不行,没CPU哪还是电脑啊。用实心菱形表示。 而聚合似起义,聚是一团火,散是满天星。就像公司和员工,少你一个照常运转…...
Go语言-初学者日记(七):用 Go 写一个 RESTful API 服务!
👷 实践是最好的学习方式!这一篇我们将用 Go Gin 框架从零开始开发一个用户管理 API 服务。你将学到: 如何初始化项目并引入依赖如何组织目录结构如何用 Gin 实现 RESTful 接口如何通过 curl 测试 API进阶功能拓展建议 🧰 一、项…...
数据结构:手工创建表达式树的方法
1. 表达式树 表达式树(Binary Expression Tree)是一类特殊的二叉树,用以表示表达式,如图 7.6.1 所示,是一棵表示了 a b * c d * (e f) 的表达式树。 图 7.6.1 表达式树示例 表达式树有如下特点: 操作数…...
自定义类型:联合和枚举
文章目录 前言一、联合体类型的声明1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员的结构体和联合体对比1.4 联合体大小的计算1.5 联合体的一个练习 二、枚举类型的声明2.1 枚举类型的声明2.2 枚举类型的优点2.3 枚举类型的使用1. 用于 switch 语句2. 作为函数参数 总结 前…...
注意力机制
实现了Bahdanau式加法注意力的核心计算逻辑。以下是三个线性层设计的完整技术解析: 一、数学公式推导 注意力分数计算流程: s c o r e ( h d e c , h e n c ) v T ⋅ tanh ( W 1 ⋅ h e n c W 2 ⋅ h d e c ) score(h_{dec}, h_{enc}) v^T \cdot …...
OrangePi5Plus开发板不能正确识别USB 3.0 设备 (绿联HUB和Camera)
1、先插好上电(可正确识别) 2、上电开机后插,报错如下,只能检测到USB2.0--480M,识别不到USB3.0-5Gbps,重新插拔也不行 Apr 4 21:30:00 orangepi5plus kernel: [ 423.575966] usb 5-1: reset high-speed…...
KubeVirt虚拟化管理架构
目录 一. KubeVirt简介 1.1 KubeVirt的价值 1.2 KubeVirt架构 1.3 KubeVirt组件 1.4 KubeVirt流程管理 KubeVirt实战 2.1 Kubevirt安装 2.1.1节点规划 2.1.2 环境准备 2.1.3 安装KubeVirt 2.1.4 安装CDI 2.1.5 安装virtctl命令工具 2.1.6 生成官方虚拟机 2.1.7 进…...
游戏引擎学习第202天
调试器:启用“跳转到定义/声明”功能 开始了一个完整游戏的开发过程,并分享了一些实用技巧。首先,讨论了如何在 Visual Studio 中使用“跳转到定义”和“跳转到声明”功能,但当前的项目并未启用这些功能,因为缺少浏览…...
sqlalchemy查询json
第一种:字段op是json格式: {"uid": "cxb123456789","role": 2,"op_start_time": 1743513707504,"op_end_time": 1743513707504,"op_start_id": "op_001","op_end_id"…...
2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、握手问题-(解析)-简单组合问题(别人叫她 鸽巢定理)😇,感觉叫高级了…...
Linux系统之wc命令的基本使用
Linux系统之wc命令的基本使用 一、命令简介二、基本语法格式三、核心功能选项四、典型使用案例4.1 创建示例文件4.2 基础统计操作4.3 组合选项使用4.4 管道流处理 五、高级应用技巧4.1 递归统计代码行数4.2 统计CSV文件数据量4.3 监控日志增长速率4.4 字符与字节差异说明 七、命…...
SQL Server 2022 脏读问题排查与思考
总结sqlserver的使用,总是会回想起很多开发过程当中加班努(拼)力(命)的场景,今天,就把之前一个由于数据库脏读到这的OA系统员工请假流程状态不一致问题和解决思路分享一下。 业务场景描述 由于…...
Linux系统时间
1. Linux系统时间 jiffies是linux内核中的一个全局变量,用来记录以内核的节拍时间为单位时间长度的一个数值。 jiffies变量开机时有一个基准值,然后内核每过一个节拍时间jiffies就会加1。 一个时间节拍的时间取决于操作系统的配置,Linux系统一…...
【Windows批处理】命令入门详解
Windows 批处理(Batch Script)是一种用于在 Windows 操作系统上自动执行命令的脚本语言。它基于 Windows 命令提示符(cmd.exe)并使用 .bat 或 .cmd 文件格式。 一、批处理基础 1. 创建批处理文件 批处理脚本本质上是一组按顺序执…...
fpga系列 HDL:ModelSim 条件断点调试 modelsim支持的tcl语言
条件断点调试配置流程: 触发动作用tcl语言描述,modelsim支持的tcl语言见:https://home.engineering.iastate.edu/~zzhang/courses/cpre581-f08/resources/modelsim_quickguide.pdf 运行效果:...
Linux: network: 两台直连的主机业务不通
前提环境,有一个产品的设定是两个主机之间必须是拿网线直连。但是设备管理者可能误将设置配错,不是直连。 最近遇到一个问题,说一个主机发的包,没有到对端,一开始怀疑设定的bond设备的问题,检查了bond的设置状态,发现没有问题,就感觉非常的奇怪。后来就开始怀疑两个主机…...
虚拟地址空间布局架构
一、内存管理架构 1.Linux内核整体架构以及子系统 内存管理子系统架构分为用户空间、内核空间及硬件部分 3 个层面: 用户空间:应用程序使用malloc()申请内存资源,通过free()释放内存资源。内核空间:内核是操作系统的一部分&…...
在VMware下Hadoop分布式集群环境的配置--基于Yarn模式的一个Master节点、两个Slaver(Worker)节点的配置
你遇到的大部分ubuntu中配置hadoop的问题这里都有解决方法!!!(近10000字) 概要 在Docker虚拟容器环境下,进行Hadoop-3.2.2分布式集群环境的配置与安装,完成基于Yarn模式的一个Master节点、两个…...
go day 01
go day 01 配置go环境 install go on D:\huang\lang\go\D:\huang\lang\go\bin\go xxx.go # D:\huang\lang\go\bin 设置到环境变量go go version# 创建任意一个目录,创建三个文件夹 # D:\huang\lang\goProject bin、pkg、src # 创建三个系统环境变量 GOROOT GOPATH GOBIN # GOR…...
(二)RestAPI 毛子(Tags)
文章目录 项目地址一、给Habit添加Tags1.1 创建Tags1. 创建一个新的HabitTags实体2. 设置Habit和Tags的关系3. 设置HabitTag表4. 在HabitConfiguration里配置5. 将表添加到EFCore里6. 迁移数据 1.2 给Habit增加/修改标签1. 创建UpsertHabitTagsDto2. 创建查询HabitWithTagsDto3…...
Elasticsearch:使用机器学习生成筛选器和分类标签
作者:来自 Elastic Andre Luiz 探索使用机器学习模型与传统硬编码方法在搜索体验中自动创建筛选器和分类标签的优缺点 筛选器和分类标签是用来优化搜索结果的机制,帮助用户更快速地找到相关内容或产品。在传统方法中,规则是手动定义的。例如…...
Python接口自动化测试之UnitTest详解
↵ 基本概念 UnitTest单元测试框架是受到JUnit的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。 它分为四个部分test fixture、Te…...
《概率论与数理统计》期末复习笔记_上
目录 第1章 随机事件与概率 1.1 随机事件 1.2 事件的关系与运算 1.3 概率的定义与性质 1.4 古典概型_重点 1.5 几何概型 1.6 条件概率与乘法公式 1.7 全概率公式与贝叶斯公式_重点 1.8 事件的独立性_重点 1.9 伯努利概型_重难点 第2章 随机变量及其分布 2.1 随机变…...
工程师 - Doxygen介绍
Code Documentation. Automated. Free, open source, cross-platform. Version 1.12.0 is now available! Release date: 7 August 2024 官方网址: Doxygen homepage 文档: Doxygen: Overview Github网址: https://github.com/doxygen/…...