Java面试黄金宝典29
1. 什么是普通索引和唯一性索引
- 定义:
- 普通索引:是最基本的索引类型,它为数据表中的某一列或多列建立索引,以加快数据的查询速度。它不限制索引列的值重复,允许存在多个相同的值。
- 唯一性索引:在普通索引的基础上,增加了索引列值必须唯一的约束条件,即该列中不允许出现重复的值,但可以有一个
NULL值。
- 要点:
- 普通索引主要用于提高查询效率,不保证数据的唯一性。
- 唯一性索引在提高查询效率的同时,还能保证数据的唯一性。
- 应用:普通索引适用于经常用于查询条件但不要求唯一的数据列,如商品表中的商品类别列。唯一性索引适用于需要保证数据唯一性的列,如用户表中的邮箱列。
- SQL 代码举例:
sql
-- 创建表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100)
);-- 创建普通索引
CREATE INDEX idx_name ON users (name);-- 创建唯一性索引
CREATE UNIQUE INDEX idx_email ON users (email);
2. 什么是单个索引和复合索引
- 定义:
- 单个索引:是指在数据表的某一个列上创建的索引,用于加快对该列数据的查询速度。
- 复合索引:也叫组合索引,是在数据表的多个列上创建的索引,数据库会按照定义的列顺序来存储和检索数据。
- 要点:
- 单个索引适用于仅对单个列进行查询的场景。
- 复合索引在多列查询时能显著提高效率,但要遵循最左前缀原则。
- 应用:单个索引常用于单条件查询,如按用户年龄查询用户信息。复合索引适用于多条件查询,如同时按用户年龄和性别查询用户信息。
- SQL 代码举例:
sql
-- 创建表
CREATE TABLE products (id INT PRIMARY KEY,category VARCHAR(50),price DECIMAL(10, 2),stock INT
);-- 创建单个索引
CREATE INDEX idx_category ON products (category);-- 创建复合索引
CREATE INDEX idx_category_price ON products (category, price);
3. 什么是聚簇索引和非聚簇索引
- 定义:
- 聚簇索引:表数据按照索引的顺序进行存储,索引的叶子节点直接存储实际的数据行。一个表只能有一个聚簇索引。
- 非聚簇索引:索引的叶子节点存储的是指向实际数据行的指针,而不是数据本身。一个表可以有多个非聚簇索引。
- 要点:
- 聚簇索引能快速定位数据行,因为数据和索引存储在一起。
- 非聚簇索引需要先通过索引找到指针,再通过指针找到实际数据行,可能会增加磁盘 I/O。
- 应用:聚簇索引适用于需要快速定位数据的场景,如按主键查询。非聚簇索引适用于经常进行范围查询的列。
- SQL 代码举例:
sql
-- 创建表,InnoDB 中主键索引是聚簇索引
CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE
) ENGINE=InnoDB;-- 创建非聚簇索引
CREATE INDEX idx_customer_id ON orders (customer_id);
4. 什么是主索引和外键索引
- 定义:
- 主索引:通常指主键索引,是一种特殊的唯一性索引,用于唯一标识表中的每一行数据。一个表只能有一个主索引。
- 外键索引:用于建立和加强两个表数据之间的关联,保证数据的引用完整性。外键是一个表中的一列或多列,其值必须与另一个表的主键值匹配。
- 要点:
- 主索引确保表中数据的唯一性和快速查找。
- 外键索引维护表之间的关系,保证数据的一致性。
- 应用:主索引用于唯一标识表中的记录,如用户表中的用户 ID。外键索引用于关联不同表之间的数据,如订单表中的用户 ID 关联用户表的主键。
- SQL 代码举例:
sql
-- 创建用户表
CREATE TABLE users (user_id INT PRIMARY KEY,username VARCHAR(50)
);-- 创建订单表
CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,order_date DATE,FOREIGN KEY (user_id) REFERENCES users(user_id)
);
5. 什么是全文索引
- 定义:全文索引是一种特殊的索引类型,用于在文本数据中进行全文搜索。它会对文本内容进行分词处理,然后建立索引,以便快速查找包含特定关键词的文本。
- 要点:
- 全文索引适用于对大文本字段进行搜索,如文章内容、产品描述等。
- 它的搜索效率比使用
LIKE关键字进行模糊查询要高。
- 应用:常用于搜索引擎、文章检索等需要对大量文本进行搜索的场景。
- SQL 代码举例:
sql
-- 创建表
CREATE TABLE articles (article_id INT PRIMARY KEY,title VARCHAR(200),content TEXT
);-- 创建全文索引
CREATE FULLTEXT INDEX idx_fulltext ON articles (content);-- 使用全文索引进行搜索
SELECT * FROM articles WHERE MATCH(content) AGAINST('关键词');
6. 什么是空间索引
- 定义:空间索引是一种特殊的索引,用于对空间数据(如地理坐标、几何图形等)进行高效的存储和查询。它通过对空间数据进行划分和组织,使得可以快速定位和查询特定范围内的空间对象。
- 要点:
- 空间索引适用于处理地理信息系统(GIS)、地图应用等需要处理空间数据的场景。
- 它可以大大提高空间数据的查询效率。
- 应用:在地图应用中查找附近的商家、地理信息系统中查询特定区域内的地理对象等。
- SQL 代码举例:
sql
-- 创建表
CREATE TABLE locations (location_id INT PRIMARY KEY,name VARCHAR(50),geom GEOMETRY
);-- 创建空间索引
CREATE SPATIAL INDEX idx_spatial ON locations (geom);
7. InnoDB 与 MyISAM 引擎区别
- 定义:
- InnoDB:是 MySQL 的默认存储引擎,支持事务、外键、行级锁等特性。它使用聚簇索引来存储数据,数据和索引是存储在一起的。
- MyISAM:是 MySQL 早期的存储引擎,不支持事务和外键,只支持表级锁。它的索引和数据是分开存储的。
- 要点:
- InnoDB 适合对数据一致性要求较高、有事务处理需求的场景。
- MyISAM 适合对查询性能要求较高、对事务和外键没有要求的场景。
- 应用:InnoDB 常用于电商系统的订单表、银行系统的账户表等需要保证数据一致性和事务处理的场景。MyISAM 常用于日志表、统计报表表等对事务要求不高的场景。
- SQL 代码举例:
sql
-- 使用 InnoDB 引擎创建表
CREATE TABLE innodb_table (id INT PRIMARY KEY,name VARCHAR(50)
) ENGINE=InnoDB;-- 使用 MyISAM 引擎创建表
CREATE TABLE myisam_table (id INT PRIMARY KEY,name VARCHAR(50)
) ENGINE=MyISAM;
8. 什么是脏读、幻读、可重复读、不可重复读
- 定义:
- 脏读:一个事务读取了另一个未提交事务修改的数据。如果另一个事务回滚,那么读取到的数据就是无效的。
- 不可重复读:一个事务在多次读取同一数据时,由于其他事务对该数据进行了修改并提交,导致每次读取的结果不一致。
- 可重复读:一个事务在执行过程中,多次读取同一数据时,无论其他事务是否对该数据进行了修改并提交,读取的结果都是一致的。
- 幻读:一个事务在执行过程中,根据某个条件查询到了一些数据,在该事务再次根据相同条件查询时,由于其他事务插入或删除了符合条件的数据,导致查询结果的行数发生了变化。
- 要点:
- 脏读是读取未提交的数据,会导致数据的不一致性。
- 不可重复读主要是针对数据的修改操作。
- 可重复读保证了在一个事务内多次读取同一数据的一致性。
- 幻读主要是针对数据的插入和删除操作。
- 应用:通过设置不同的事务隔离级别来避免这些问题,以满足不同的业务需求。
- SQL 代码举例:
sql
-- 设置事务隔离级别为可重复读
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;-- 开始事务
START TRANSACTION;-- 查询数据
SELECT * FROM users WHERE id = 1;-- 其他事务可能会修改数据-- 再次查询数据
SELECT * FROM users WHERE id = 1;-- 提交事务
COMMIT;
9. 如何进行 SQL 优化
- 定义:SQL 优化是指通过对 SQL 查询语句、数据库表结构、索引等进行优化,以提高 SQL 查询的执行效率,减少查询时间和资源消耗。
- 要点:
- 索引优化:合理创建索引,避免创建过多或不必要的索引,遵循最左前缀原则。
- 查询语句优化:避免使用
SELECT *,尽量使用EXISTS代替IN,使用UNION ALL代替UNION等。 - 表结构优化:合理设计表结构,避免数据冗余,使用合适的数据类型。
- 应用:在实际开发中,对经常执行的查询语句进行优化,以提高系统的性能。
- SQL 代码举例:
sql
-- 原查询语句
SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'China');-- 优化后的查询语句
SELECT o.* FROM orders o JOIN customers c ON o.customer_id = c.customer_id WHERE c.country = 'China';
10. 简介数据库特性 ACID
- 定义:ACID 是数据库事务的四个基本特性,用于保证数据库操作的一致性和可靠性。
- 原子性(Atomicity):一个事务中的所有操作要么全部成功,要么全部失败。如果事务中的任何一个操作失败,整个事务都会回滚到初始状态。
- 一致性(Consistency):事务执行前后,数据库的状态必须保持一致。也就是说,事务不能破坏数据库的完整性约束。
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不能被其他事务干扰。每个事务都应该感觉不到其他事务的存在。
- 持久性(Durability):一旦事务提交,它对数据库的修改就会永久保存,即使数据库发生故障也不会丢失。
- 要点:
- 原子性保证了事务的完整性。
- 一致性保证了数据的正确性。
- 隔离性保证了事务的并发执行。
- 持久性保证了数据的永久性。
- 应用:在需要保证数据一致性和可靠性的场景中,如银行转账、电商订单处理等,都需要使用事务来保证 ACID 特性。
- SQL 代码举例:
sql
-- 开始事务
START TRANSACTION;-- 执行操作
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;-- 提交事务
COMMIT;
友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读
https://download.csdn.net/download/ylfhpy/90560531
相关文章:
Java面试黄金宝典29
1. 什么是普通索引和唯一性索引 定义: 普通索引:是最基本的索引类型,它为数据表中的某一列或多列建立索引,以加快数据的查询速度。它不限制索引列的值重复,允许存在多个相同的值。唯一性索引:在普通索引的基…...
git `switch` 命令详解与实用示例
文章目录 git switch 命令详解与实用示例git switch vs git checkoutgit switch 用法1. 切换到已有分支2. 创建并切换到新分支3. 切换到上一个分支4. 切换到远程分支(自动创建本地分支并追踪远程)5. 放弃未提交的修改并切换分支 总结 git switch 命令详解…...
Oracle中文一二三四排序【失败】
原文地址: Oracle数据库如何对中文的一二三四五六七八九十数进行正序排列排序_中文数字排序-CSDN博客 自定义排序函数 -- 自定义中文映射阿拉伯数字函数 CREATE OR REPLACE FUNCTION P_ORDER_CHINESE_TO_ARABIC(V_NUM VARCHAR2) RETURN NUMBER IS BEGIN-- 根据…...
AWS S3 和 Lambda 使用
目录: AWS概述 EMR Serverless AWS VPC及其网络 关于AWS网络架构的思考 AWS S3 和 Lambda 使用 本文将通过一个实例来说明如何使用 AWS S3 和 Lambda。 使用场景:通过代码将文件上传到S3,该文件需要是公开访问的,并对上传的文件进…...
Mysql 在什么样的情况下会产生死锁?
在 MySQL 中,死锁是指两个或多个事务相互等待对方释放锁,导致所有相关事务无法继续执行的情况。死锁会影响数据库的并发性能,因此需要及时检测并处理。假设有两个事务 T1 和 T2: 事务 T1 首先锁定 表 A 的行 1。然后尝试锁定 表 B…...
符号秩检验
内容来源 非参数统计(第2版) 清华大学出版社 王星 褚挺进 编著 符号秩检验 在符号检验的基础上,增加了数据绝对值大小的信息 检验统计量 用一个简单的例子来说明 样本数据 X i , i 1 , ⋯ , 6 X_i,i1,\cdots,6 Xi,i1,⋯,6 如下 X …...
RainbowDash 的 Robot
H RainbowDash 的 Robot - 第七届校赛正式赛 —— 补题 题目大意: 给一个 n ∗ m n*m n∗m 的二维网格,在第 i i i 列中,前 a i a_i ai 单元格被阻断,无法通行,即 [ 1 , a i ] [1,a_i] [1,ai] 。 一个机器人正…...
yum repolist all全部禁用了 怎么办
文章目录 步骤思考解决yum仓库全部被禁用的问题步骤思考: 检查仓库状态:运行yum repolist all,查看所有仓库的启用状态。 被禁用的仓库会显示为disabled。 启用所有仓库:可以逐一启用,或者使用命令批量启用。 例如使用yum-config-manager --enable ‘*’,但需要注意是否有…...
SQL WHERE 与 HAVING
WHERE 和 HAVING 都是 SQL 中用于筛选数据的子句,但它们有重要的区别 WHERE 子句 在 分组前 过滤数据 作用于 原始数据行 不能使用聚合函数 执行效率通常比 HAVING 高 SELECT column1, column2 FROM table WHERE condition; HAVING 子句 在 分组后 过滤数据 …...
如何在 Unity3D 导入 Spine 动画
一、前言 《如何在 Unity3D 项目中导入 Spine 动画》,虽然在网上有很多这种文章,直接将问题交给 DeepSeek 也能得到具体的操作流程,但是照着他们提供的方法还是能遇到几个问题,比如: AI 回答没有提到 Unity 无法识别.…...
子网划分2
子网分配的问题,下列vlsm如何设置? 某公司申请了一个C类202.60.31.0的IP地址,要求设置三个子网,一个为100台主机,一个为50台主机,另一个为50台主机,用VLSM如何设置? 哪位高手指教一…...
C++的UDP连接解析域名地址错误
背景 使用c开发一个udp连接功能的脚本,可以接收发送数据,而且地址是经过内网穿透到外网的 经过 通常发送数据给目标地址,需要把目的地址结构化,要么使用inet_addr解析ip地址,要么使用inet_pton sockaddr_in target…...
23种设计模式中的观察者模式
定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。 观察者模式是一种发布-订阅模式。它让发送通知的一方(被观察者)和接收通知的一方(观察者)能够解耦…...
论文笔记:ASTTN模型
研究现状 现有研究大多通过分别考虑空间相关性和时间相关性或在滑动时间窗口内对这种时空相关性进行建模,而未能对直接的时空相关性进行建模。受最近图领域Transformer成功的启发,该模型提出利用局部多头自关注,在自适应时空图上直接建立跨时…...
Java单例模式详解
单例模式详解 一、单例模式概述 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。 核心特点 唯一实例:保证一个类只有一个实例存在全局访问:提供统一的访问入…...
Linux命令-tar
tar 命令的完整参数列表: 参数 描述 -c 创建新的归档文件 -x 解压归档文件 -t 列出归档文件内容 -r 追加文件到归档文件 -u 更新归档文件中的文件 -d 从归档文件中删除文件 -f 指定归档文件的名称 -v 显示详细信息(verbose) -z 使用 gzip 压缩…...
深入解析 Git Submodule:从基础到高级操作指南
深入解析 Git Submodule:从基础到高级操作指南 一、Git Submodule 是什么? git submodule 是 Git 提供的一个强大功能,允许在一个 Git 仓库(主仓库)中嵌入另一个独立的 Git 仓库(子模块)。主仓…...
2025-4-2 蓝桥杯刷题情况(分布式队列)
1.题目描述 小蓝最近学习了一种神奇的队列:分布式队列。简单来说,分布式队列包含 N 个节点(编号为0至N-1,其中0号为主节点),其中只有一个主节点,其余为副节点。 主/副节点中都各自维护着一个队列,当往分布式队列中添加…...
C/C++指针核心难点全解析:从内存模型到实战避坑指南
引言:指针为何被称为C/C的“灵魂”? 指针是C/C语言中最强大的工具之一,也是开发者通往底层编程的必经之路。它直接操作内存地址的能力,赋予了程序极高的灵活性和性能优势。然而,指针的复杂性也让无数初学者“折戟沉沙…...
ray.rllib-入门实践-12-2:在自定义policy中注册使用自定义model(给自定义model新增参数)
建议先看博客 ray.rllib-入门实践-12-1:在自定义policy中注册使用自定义model , 本博客与之区别在于可以给自定义的 model 新增自定义的参数,并通过 config.model["custom_model_config"] 传入自定义的新增参数。 环境配置…...
【Java中级】10章、内部类、局部内部类、匿名内部类、成员内部类、静态内部类的基本语法和细节讲解配套例题巩固理解【5】
❤️ 【内部类】干货满满,本章内容有点难理解,需要明白类的实例化,学完本篇文章你会对内部类有个清晰的认知 💕 内容涉及内部类的介绍、局部内部类、匿名内部类(重点)、成员内部类、静态内部类 🌈 跟着B站一位老师学习…...
swift-7-汇编分析闭包本质
一、汇编分析 fn1里面存放的东西 func testClosure2() {class Person {var age: Int 10}typealias Fn (Int) -> Intvar num 0func plus(_ i: Int) -> Int {num ireturn num}return plus} // 返回的plus和num形成了闭包var fn1 getFn()print(fn1(1)) // 1print(fn1(…...
Linux: 进程信号初识
目录 一 前言 二 信号的感性认识 三 信号处理常见方式 四 系统信号列表 五 信号的保存 六 信号的产生 1. 通过终端按键产生信号 2. 通过系统调用向进程发送信号 3. 硬件异常产生信号 4. 软件条件产生信号 一 前言 在Linux操作系统中,进程信号是一个非常重…...
python 项目怎么通过docker打包
python 项目怎么通过docker打包 1. 编写Dockerfile 在Python项目的根目录下创建一个名为 Dockerfile 的文件,其内容示例如下: # 使用Python基础镜像 FROM python:3.9-slim# 设置工作目录 WORKDIR /app# 将当前目录下的所有文件复制到工作目录 COPY . /app# 安装项目依赖 R…...
MySQL-- 函数(单行函数):数值函数, 字符串函数
目录 1.数值函数 2. 字符串函数 1.数值函数 ABS:绝对值 ; SIGN:数字正负,正返回1,负返回-1 , 0返回0 ; CEIL,CEILING:取数上面的数 ;FLOOR:取数下面的数 ; MOD:取余 #基本的操作 SELECT ABS(-123),ABS…...
CSS--解决float: right在空间不够时会自动往下移的问题
原文网址:CSS--解决float: right在空间不够时会自动往下移的问题-CSDN博客 简介 众所周知,float: right在空间不够时会自动往下移。那么怎样让它不要往下移呢?本文介绍解决方案。 需求 我想写一个无需列表,每个列表后边跟一个…...
深度学习 Deep Learning 第14章 自编码器
深度学习 Deep Learning 第14章 自编码器 内容概要 本章深入探讨了自编码器(Autoencoders),这是一种用于特征学习和降维的神经网络架构。自编码器通过编码器和解码器两个部分,将输入数据映射到一个内部表示(编码&…...
C++(匿名函数+继承+多态)
#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>using namespace std;// 基类 Weapon class Weapon { protected:int atk; public:Weapon…...
软考中级网络工程师第十一章网络管理
11-1考点分析 11-2网络管理基础(记忆) 网络管理体系结构 网络管理五大功能域:故障管理、配置管理、计费管理、性能管理和安全管理。 助记: “安配能计障” 故障管理:尽快发现故障,找出故障原因&#x…...
创维E900V22C/E900V22D_S905L3(B)_安卓9.0_指示灯正常_线刷固件包
创维E900V22C/E900V22D_S905L3(B)_安卓9.0_指示灯正常_线刷固件包 线刷方法:(新手参考借鉴一下) 1、准备好一根双公头USB线刷刷机线,长度30-50CM长度最佳,同时准备一台电脑; 2、电脑上安装好刷…...
