为什么要用数据库管理系统?5个你不得不知道的理由

你是否曾经想过,为什么几乎所有的企业和组织都在使用数据库管理系统(DBMS)?为什么不直接使用文件系统来存储和管理数据呢?如果你有这样的疑问,那么这篇文章正是为你而写。在接下来的内容中,我们将深入探讨使用数据库管理系统的5个关键原因,这些原因将彻底改变你对数据管理的认知。
在这里插入图片描述

目录

    • 1. 数据独立性:解放你的数据
      • 1.1 物理数据独立性
      • 1.2 逻辑数据独立性
    • 2. 数据完整性:保证你的数据可靠性
      • 2.1 实体完整性
      • 2.2 参照完整性
      • 2.3 域完整性
      • 2.4 用户定义完整性
    • 3. 并发控制:多用户访问的秘密武器
      • 3.1 锁定机制
      • 3.2 多版本并发控制(MVCC)
      • 3.3 时间戳排序
      • 3.4 乐观并发控制
    • 4. 数据安全:保护你的数字资产
      • 4.1 身份认证
      • 4.2 访问控制
      • 4.3 数据加密
      • 4.4 审计跟踪
    • 5. 数据恢复:你的数据安全网
      • 5.1 事务日志
      • 5.2 定期备份
      • 5.3 时间点恢复
      • 5.4 复制和故障转移
    • 结语:为什么数据库管理系统是不可或缺的

1. 数据独立性:解放你的数据

想象一下,如果你的所有数据都直接存储在应用程序中,每次需要更改数据结构时,你都需要修改整个应用程序。这听起来就像是一场噩梦,不是吗?这就是为什么数据独立性如此重要。

数据库管理系统提供了两种类型的数据独立性:

  1. 物理数据独立性
  2. 逻辑数据独立性
    image.png

1.1 物理数据独立性

物理数据独立性允许你更改数据的物理存储方式,而无需修改应用程序。例如,你可以将数据从一个磁盘移动到另一个磁盘,或者更改存储格式,而应用程序不会受到任何影响。

以下是一个简单的例子,说明了物理数据独立性的重要性:

-- 假设我们有一个存储用户信息的表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100)
);-- 现在,我们想要将这个表移动到一个新的表空间
ALTER TABLE users MOVE TABLESPACE new_tablespace;

image.png

在这个例子中,我们将users表移动到了一个新的表空间。这是一个物理存储的变更,但是使用这个表的应用程序不需要做任何修改。

1.2 逻辑数据独立性

逻辑数据独立性允许你更改数据库的逻辑结构(如添加新的字段),而不影响已经存在的应用程序。

考虑以下场景:

-- 原始的用户表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100)
);-- 现在,我们想要添加一个新的字段来存储用户的电话号码
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

image.png

在这个例子中,我们向users表添加了一个新的phone字段。已经存在的应用程序仍然可以继续使用这个表,而不需要任何修改。只有那些需要使用新字段的应用程序才需要更新。

数据独立性不仅简化了数据管理,还大大提高了系统的灵活性和可维护性。想象一下,如果每次数据结构变化都需要修改所有相关的应用程序,那将是多么令人头疼的事情!

2. 数据完整性:保证你的数据可靠性

数据完整性是确保数据准确性和一致性的关键。没有proper的数据完整性约束,你的数据库就像是一个没有保安的银行金库。数据库管理系统提供了多种机制来确保数据完整性:

  1. 实体完整性
  2. 参照完整性
  3. 域完整性
  4. 用户定义完整性
    image.png

2.1 实体完整性

实体完整性确保每个表都有一个唯一的标识符(主键),防止重复记录的出现。

CREATE TABLE products (product_id INT PRIMARY KEY,  -- 这就是实体完整性约束product_name VARCHAR(100),price DECIMAL(10, 2)
);

在这个例子中,product_id被定义为主键,确保每个产品都有一个唯一的标识符。
image.png

2.2 参照完整性

参照完整性确保表之间的关系保持一致。它防止孤立的记录出现在相关表中。

CREATE TABLE orders (order_id INT PRIMARY KEY,product_id INT,quantity INT,FOREIGN KEY (product_id) REFERENCES products(product_id)  -- 这是参照完整性约束
);

这个外键约束确保每个订单都引用了products表中存在的产品。
image.png

2.3 域完整性

域完整性确保每个列中的值都符合定义的类型和约束。

CREATE TABLE employees (employee_id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,  -- NOT NULL 是一种域完整性约束age INT CHECK (age >= 18),  -- CHECK 约束也是域完整性的一部分email VARCHAR(100) UNIQUE   -- UNIQUE 约束确保每个邮箱地址都是唯一的
);

在这个例子中,我们定义了多种域完整性约束:

  • name不能为空
  • age必须大于或等于18
  • email必须是唯一的
    image.png

2.4 用户定义完整性

用户定义完整性允许你定义特定于业务的规则。

CREATE TABLE inventory (product_id INT PRIMARY KEY,quantity INT,CONSTRAINT check_quantity CHECK (quantity >= 0)  -- 这是用户定义的完整性约束
);

这个约束确保库存数量永远不会为负数,这是一个特定于业务的规则。

通过这些完整性约束,数据库管理系统能够在数据输入阶段就捕获错误,而不是等到数据被使用时才发现问题。这不仅提高了数据的质量,还节省了大量的时间和资源。
image.png

3. 并发控制:多用户访问的秘密武器

在现代的多用户环境中,并发控制是至关重要的。想象一下,如果多个用户同时访问和修改同一条数据会发生什么?没有proper的并发控制,数据很容易变得不一致,甚至可能丢失。

数据库管理系统通过实现各种并发控制机制来解决这个问题:

  1. 锁定机制
  2. 多版本并发控制(MVCC)
  3. 时间戳排序
  4. 乐观并发控制
    image.png

3.1 锁定机制

锁定是最常见的并发控制方法之一。它允许多个事务同时读取数据,但只允许一个事务在任何给定时间修改数据。

-- 事务1
BEGIN TRANSACTION;
SELECT * FROM accounts WHERE account_id = 1 FOR UPDATE;
-- 此时,account_id = 1 的行被锁定,其他事务无法修改这行数据
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
COMMIT;-- 事务2(同时进行)
BEGIN TRANSACTION;
SELECT * FROM accounts WHERE account_id = 1 FOR UPDATE;
-- 这个事务会被阻塞,直到事务1完成并释放锁
UPDATE accounts SET balance = balance + 50 WHERE account_id = 1;
COMMIT;

image.png

在这个例子中,FOR UPDATE子句用于获取排他锁,确保在更新操作期间没有其他事务可以修改相同的数据。

3.2 多版本并发控制(MVCC)

MVCC是一种更高级的并发控制方法,它通过维护数据的多个版本来提高并发性。

-- 假设我们有一个商品表
CREATE TABLE products (id INT PRIMARY KEY,name VARCHAR(100),price DECIMAL(10, 2),version INT
);-- 事务1
BEGIN TRANSACTION;
SELECT * FROM products WHERE id = 1 AND version = 1;
-- 假设查询结果为: (1, 'Product A', 100.00, 1)
UPDATE products SET price = 110.00, version = version + 1 WHERE id = 1 AND version = 1;
COMMIT;-- 事务2(同时进行)
BEGIN TRANSACTION;
SELECT * FROM products WHERE id = 1 AND version = 1;
-- 假设查询结果为: (1, 'Product A', 100.00, 1)
UPDATE products SET price = 105.00, version = version + 1 WHERE id = 1 AND version = 1;
-- 这个更新会失败,因为版本号已经被事务1更新了
COMMIT;

在这个例子中,我们使用了一个version字段来实现MVCC。当两个事务试图同时更新同一条记录时,只有一个事务能成功,另一个事务会因为版本号不匹配而失败。这种方法避免了锁定,提高了系统的并发性。
image.png

3.3 时间戳排序

时间戳排序是另一种并发控制方法,它为每个事务分配一个唯一的时间戳,并使用这些时间戳来决定操作的执行顺序。

-- 假设我们有一个带有时间戳的账户表
CREATE TABLE accounts (id INT PRIMARY KEY,balance DECIMAL(10, 2),last_updated TIMESTAMP
);-- 事务1
BEGIN TRANSACTION;
UPDATE accounts 
SET balance = balance - 100, last_updated = CURRENT_TIMESTAMP
WHERE id = 1 AND last_updated < CURRENT_TIMESTAMP;
COMMIT;-- 事务2(同时进行)
BEGIN TRANSACTION;
UPDATE accounts 
SET balance = balance + 50, last_updated = CURRENT_TIMESTAMP
WHERE id = 1 AND last_updated < CURRENT_TIMESTAMP;
COMMIT;

在这个例子中,只有时间戳较新的事务能成功更新账户余额。这确保了更新操作的顺序性,防止了并发冲突。

3.4 乐观并发控制

乐观并发控制假设冲突是罕见的,允许事务自由进行,但在提交时检查是否有冲突。

-- 假设我们有一个商品表
CREATE TABLE products (id INT PRIMARY KEY,name VARCHAR(100),price DECIMAL(10, 2),last_updated TIMESTAMP
);-- 事务1
BEGIN TRANSACTION;
SELECT * FROM products WHERE id = 1;
-- 假设查询结果为: (1, 'Product A', 100.00, '2023-01-01 10:00:00')
-- 应用程序进行一些计算...
UPDATE products 
SET price = 110.00, last_updated = CURRENT_TIMESTAMP
WHERE id = 1 AND last_updated = '2023-01-01 10:00:00';
-- 如果另一个事务已经更新了这条记录,这个更新会失败
COMMIT;

在这个例子中,我们在更新操作中检查last_updated时间戳。如果这个时间戳与事务开始时读取的值不同,说明有其他事务修改了这条记录,当前事务就会失败。

这些并发控制机制使得数据库管理系统能够处理复杂的多用户场景,确保数据的一致性和正确性。想象一下,如果你需要自己实现这些机制,那将是多么复杂和容易出错的工作!

4. 数据安全:保护你的数字资产

image.png

在当今的数字世界中,数据安全比以往任何时候都更加重要。数据库管理系统提供了多层次的安全机制来保护你的宝贵数据:

  1. 身份认证
  2. 访问控制
  3. 数据加密
  4. 审计跟踪
    image.png

4.1 身份认证

身份认证是确保只有授权用户才能访问数据库的第一道防线。

-- 创建一个新用户
CREATE USER 'john_doe'@'localhost' IDENTIFIED BY 'very_secure_password';-- 登录
mysql -u john_doe -p
Enter password: very_secure_password

这个例子展示了如何创建一个新的数据库用户并使用密码进行身份认证。现代的数据库管理系统通常支持更高级的认证方法,如双因素认证或集成with企业级身份管理系统。

4.2 访问控制

一旦用户通过身份认证,访问控制决定了他们可以执行哪些操作。数据库管理系统通常提供细粒度的权限控制。

-- 授予john_doe用户对customers表的SELECT权限
GRANT SELECT ON database_name.customers TO 'john_doe'@'localhost';-- 授予john_doe用户对orders表的INSERT和UPDATE权限
GRANT INSERT, UPDATE ON database_name.orders TO 'john_doe'@'localhost';-- 撤销john_doe用户对customers表的SELECT权限
REVOKE SELECT ON database_name.customers FROM 'john_doe'@'localhost';

这些命令展示了如何精确控制用户对特定表的访问权限。你可以授予或撤销SELECT、INSERT、UPDATE、DELETE等权限,甚至可以控制对特定列的访问。

4.3 数据加密

加密是保护敏感数据的关键。现代数据库管理系统提供了多种加密选项:

  1. 传输加密(TLS/SSL)
  2. 静态数据加密
  3. 列级加密

以下是一个使用MySQL的列级加密例子:

-- 创建一个加密函数
CREATE FUNCTION encrypt_func (p_plaintext VARCHAR(255), p_key VARCHAR(32))
RETURNS VARBINARY(255)
RETURN AES_ENCRYPT(p_plaintext, p_key);-- 创建一个解密函数
CREATE FUNCTION decrypt_func (p_ciphertext VARBINARY(255), p_key VARCHAR(32))
RETURNS VARCHAR(255)
RETURN AES_DECRYPT(p_ciphertext, p_key);-- 创建一个带有加密列的表
CREATE TABLE sensitive_data (id INT PRIMARY KEY,好的,让我们继续探讨数据安全这个重要话题:name VARCHAR(100),credit_card VARBINARY(255)  -- 用于存储加密后的信用卡号
);-- 插入加密数据
INSERT INTO sensitive_data (id, name, credit_card)
VALUES (1, 'John Doe', encrypt_func('1234-5678-9012-3456', 'my_secret_key'));-- 查询并解密数据
SELECT id, name, decrypt_func(credit_card, 'my_secret_key') AS decrypted_cc
FROM sensitive_data;

在这个例子中,我们创建了自定义的加密和解密函数,并使用它们来保护敏感的信用卡信息。这种方法确保即使数据库被攻破,攻击者也无法直接读取敏感信息。

4.4 审计跟踪

审计跟踪允许数据库管理员监控和记录数据库活动,这对于安全和合规性都至关重要。

-- 启用MySQL审计插件
INSTALL PLUGIN audit_log SONAME 'audit_log.so';-- 配置审计日志
SET GLOBAL audit_log_file = '/var/log/mysql/audit.log';
SET GLOBAL audit_log_policy = 'ALL';-- 查看审计日志(在服务器上执行)
tail -f /var/log/mysql/audit.log

审计日志可以记录各种数据库活动,包括:

  • 登录尝试(成功和失败)
  • 执行的SQL语句
  • 数据修改操作
  • 权限变更

通过分析这些日志,你可以:

  1. 检测异常活动
  2. 跟踪数据变更
  3. 调查安全事件
  4. 满足合规要求(如GDPR, HIPAA等)

数据库管理系统的这些安全特性为你的数据提供了全方位的保护。想象一下,如果你需要从头开始实现所有这些安全措施,那将是多么困难和耗时的任务!使用DBMS,你可以专注于业务逻辑,而将复杂的安全问题交给专业的系统来处理。

5. 数据恢复:你的数据安全网

数据是现代企业的生命线。丢失关键数据可能导致巨大的财务损失,甚至威胁到企业的生存。这就是为什么数据恢复能力如此重要。数据库管理系统提供了强大的数据恢复机制,包括:

  1. 事务日志
  2. 定期备份
  3. 时间点恢复
  4. 复制和故障转移

5.1 事务日志

事务日志记录了数据库的所有变更,允许你在系统崩溃后恢复到一致的状态。

-- 启用事务日志(MySQL InnoDB引擎默认启用)
SET GLOBAL innodb_log_file_size = 50331648;  -- 设置日志文件大小为48MB
SET GLOBAL innodb_log_files_in_group = 2;    -- 使用2个日志文件-- 模拟一个事务
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 系统在此时崩溃-- 重启后,数据库会自动使用事务日志恢复到一致状态

在这个例子中,即使系统在事务中途崩溃,事务日志也能确保数据库恢复到一致的状态。这种机制防止了部分更新导致的数据不一致问题。

5.2 定期备份

定期备份是防止数据丢失的基本策略。大多数数据库管理系统提供了内置的备份工具。

# 使用mysqldump进行完整备份
mysqldump -u root -p --all-databases > full_backup_$(date +%Y%m%d).sql# 恢复备份
mysql -u root -p < full_backup_20230101.sql

这个例子展示了如何使用mysqldump工具创建一个完整的数据库备份,以及如何在需要时恢复这个备份。

5.3 时间点恢复

image.png

时间点恢复允许你将数据库恢复到过去的任意时间点。这在意外删除或损坏数据时特别有用。

-- 启用二进制日志(MySQL)
SET GLOBAL log_bin = ON;-- 假设我们不小心删除了重要数据
DELETE FROM important_table;-- 使用mysqlbinlog工具恢复到删除操作之前的状态
mysqlbinlog --stop-datetime="2023-01-01 12:00:00" /var/lib/mysql/mysql-bin.* | mysql -u root -p

在这个例子中,我们使用二进制日志来恢复数据。通过指定一个时间点,我们可以恢复到那个时刻之前的状态,有效地"撤销"之后的所有操作。

5.4 复制和故障转移

复制技术允许你维护数据库的多个副本,不仅提高了可用性,还为灾难恢复提供了基础。

-- 在主服务器上配置复制
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';-- 在从服务器上设置复制
CHANGE MASTER TOMASTER_HOST='master_host_name',MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;START SLAVE;

这个例子展示了如何设置MySQL的主从复制。在主服务器发生故障时,你可以快速切换到从服务器,minimizing停机时间。

数据库管理系统的这些数据恢复特性为你的数据提供了多层保护。它们不仅能帮助你从各种故障中恢复,还能minimizing数据丢失的风险。想象一下,如果没有这些工具,你将如何处理系统崩溃、人为错误或硬件故障带来的数据丢失风险?

结语:为什么数据库管理系统是不可或缺的

通过深入探讨这5个关键原因,我们可以清楚地看到为什么数据库管理系统在现代数据管理中扮演着如此重要的角色:

  1. 数据独立性让你能够灵活地改变数据的物理和逻辑结构,而不影响现有的应用程序。这大大提高了系统的可维护性和scalability。

  2. 数据完整性确保你的数据始终保持准确和一致。通过实体、参照、域和用户自定义完整性约束,DBMS帮助你在数据输入阶段就捕获错误,提高数据质量。

  3. 并发控制使得多用户环境下的数据访问变得安全和高效。无论是通过锁定、MVCC还是其他机制,DBMS都能确保数据的一致性,同时maximizing系统的并发性能。

  4. 数据安全特性为你的宝贵数据资产提供了全方位的保护。从身份认证到访问控制,从数据加密到审计跟踪,DBMS提供了一整套工具来应对各种安全威胁。

  5. 数据恢复能力为你提供了强大的安全网。无论是系统崩溃、人为错误还是灾难性事件,DBMS的恢复机制都能帮助你minimizing数据丢失并快速恢复业务运营。

这些功能不仅提高了数据管理的效率和可靠性,还大大降低了开发和维护成本。想象一下,如果你需要自己实现所有这些功能,那将是多么巨大的工作量!使用数据库管理系统,你可以将精力集中在核心业务逻辑上,而将复杂的数据管理问题交给专业的系统来处理。

在当今数据驱动的世界中,高效、安全、可靠的数据管理比以往任何时候都更加重要。数据库管理系统不仅满足了这些需求,还为未来的发展提供了坚实的基础。随着大数据、人工智能和物联网等技术的兴起,数据库管理系统的重要性只会越来越高。

所以,下次当你考虑如何管理你的数据时,记住:数据库管理系统不仅仅是一个选择,它是现代数据管理的必要工具。它为你的数据提供了一个安全、高效、可靠的家,让你能够充分利用这些宝贵的数字资产,驱动你的业务走向成功。

选择合适的数据库管理系统,掌握其强大的功能,你将为你的组织打开一扇通向数据驱动未来的大门。在这个数据就是新石油的时代,DBMS就是你挖掘、提炼和利用这种宝贵资源的强大工具。拥抱它,利用它,让它成为你数字化转型旅程中的得力助手!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/394823.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业及园区电力能源管理系统方案

概述 面对中小型的用能集团、园区能耗监测分析等场景需求&#xff0c;拓扑未来公司推出标准化的企业及园区电力能源管理系统方案&#xff0c;力求高效高质地为目标客户提供高效部署、轻松运维的本地化能源管理解决方案。 本方案以软硬件一体的方式&#xff0c;集成了标准电力监…

c++----初识模板

大家好&#xff0c;这篇博客想与大家分享一些我们c中比较好用的知识点。模板。首先咧&#xff0c;我们都知道模板嘛&#xff0c;就是以前人的经验总结出来的知识。方便我们使用。这里的模板也是一样的。当我们学习过后&#xff0c;对于一些在c中的自定义函数&#xff0c;我们在…

GIS,矢量瓦片加载速度优化

文章目录 一、前言二、矢量瓦片的基础知识三、矢量切片加载速度优化3.1 地图缩编3.2 矢量瓦片中的图层根据显示层级定制3.3 矢量瓦片中的图层字段要按需定制3.4 多个图层合并为矢量切片图层组发布 四、总结 一、前言 单个矢量瓦片的大小并没有固定的上限&#xff0c;这意味着在…

C语言典型例题30

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.7 从银行贷了一笔款d&#xff0c;准备每月还款额为p&#xff0c;月利率为r&#xff0c;计算多少个月能还清。 设d30000元&#xff0c;p6000元&#xff0c;r1%。对求得的月份取小数点后一位&#xff0c;对第二…

Spring面试篇章——IOC

IOC概念和原理 IOC概念 IOC就是控制反射&#xff0c;把对象创建和对象之间的调用过程&#xff0c;交给Spring进行管理使用IOC的目的&#xff1a;降低耦合度 IOC底层原理 xml解析、工厂模式、反射 图解&#xff1a; 原始模式 耦合度太高了&#xff0c;即当dao改了&#xf…

【Liunx】线程与进程的经典面试题总结

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 线程与进程的面试题总结 1 简述什么是LWP2 简述LWP与pthread_create创建的线程之间的关系3 简述轻量级进程ID与进程ID之间的区别4 请简述什么是线程互斥&#xff0c;为什么需要互斥5 简述你了解的进程间通信方式…

360安全大模型为什么是“非卖品”?

大模型虽然不是万能的&#xff0c;但是没有大模型又是万万不能的。以AI大模型为动力引擎&#xff0c;AI正在重塑各行各业&#xff0c;并快速“飞入寻常百姓家”。 AI安全 以“模”制“模” 2024年全国两会&#xff0c;“人工智能”首次被写入政府工作报告。报告中提出&#xff…

【2024算力大会分会 | SPIE出版】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 2024中…

嵌入式学习之文件IO和标准IO

IO概述 I/O是Input/Output的缩写&#xff0c;指的是输入/输出。在计算机科学和工程领域&#xff0c;I/O是指计算机系统与外部环境或内部组件之间进行数据交换的过程和机制。 用户I/O 用户通过输入设备与计算机交互。例如&#xff0c;通过键盘输入文字、通过鼠标点击界面等。…

图片怎么裁剪成想要的尺寸?图片裁剪的几个常用方法

裁剪图片到精准且令人满意的尺寸&#xff0c;是每一位图像编辑爱好者、社交媒体达人以及专业设计师在日常工作中不可或缺的技能。在这个视觉为王的时代&#xff0c;一张完美适配各种平台的图片&#xff0c;能够瞬间抓住观众的眼球&#xff0c;传递出最精准的信息与情感。从手机…

Vue3项目创建及相关配置

Vue是一种用于构建用户界面的JavaScript框架。它采用了一种称为MVVM&#xff08;Model-View-ViewModel&#xff09;的架构模式。 MVVM是一种将用户界面与业务逻辑和数据分离的设计模式。它包括三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;表示应用程序…

混合现实技术在虚拟培训、销售展示及教育科研等领域的应用方向

混合现实技术是虚拟现实技术的进一步发展方向&#xff0c;与传统的沉浸式虚拟现实技术相比混合现实技术能够为用户提供更多元化的观看场景。通过将虚拟物体与现实世界融合的全新形式为&#xff0c;包括虚拟训练、产品销售、教育科研等领域赋能。 混合现实技术中最为重要的是显示…

【JUC】并发编程与源码分析 1-7章

1 线程基础知识复习 1把锁&#xff1a;synchronized&#xff08;后面细讲&#xff09; 2个并&#xff1a; 并发&#xff08;concurrent&#xff09;&#xff1a;是在同一实体上的多个事件&#xff0c;是在一台机器上“同时”处理多个任务&#xff0c;同一时刻&#xff0c;其…

程序员保碗之策

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 1. **持续深化技术实力&#xff1a;从基础到前沿**夯实基础紧跟技术前沿跨领域融合 2. **提升实战能力&#xff1a;从项目到产品**参与实际项目自主实践产品思维 3. **建立个人品牌与影响力&#xff…

vs+qt一些问题

一直遇到的两个问题&#xff0c;今天解决了 1、 因为前后端分离&#xff0c;前端写完了&#xff0c;后端还在一直修改&#xff0c;但是每次都是单独打开的后端的sln&#xff0c;所以会出现这个&#xff0c;把前端的模块删掉就好了。 2、打开vs项目&#xff0c;很多报错&#…

sql注入靶场sqli-labs常见sql注入漏洞详解

目录 sqli-labs-less1 1.less1普通解法 1.在url里面填写不同的值&#xff0c;返回的内容也不同&#xff0c;证明&#xff0c;数值是进入数据库进行比对了的&#xff08;可以被注入&#xff09; 2.判断最终执行的sql语句的后面还有内容吗&#xff0c;并且能够判断是字符型的拼接…

MySQL:VIEW视图

概述 MySQL 视图&#xff08;View&#xff09;是一种虚拟存在的表&#xff0c;同真实表一样&#xff0c;视图也由列和行构成&#xff0c;但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表&#xff0c;并且是在使用视图时动态生成的。 数据库中只…

Unity物理模块 之 2D效应器

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 1.什么是效应器 2D 效应器 - Unity 手册 2D 效应器是与 2D 碰撞器一起使用的组件&#xff0c;相当于预先编写好的插…

⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》

[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code&#xff1a; cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…

【合并 K 个升序链表】python刷题记录

R4-分治篇 目录 最小堆方法 分治法 ps: 如果只是数组就很好处理了 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def mergeKLists(self, lists…