关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。

一、数据库范式

以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。

示例:学生课程登记系统

初始表格如下:

学生ID学生姓名课程ID课程名称教师教师办公室
1张三101数学王老师101室
2李四102英语李老师102室
3王五101数学王老师101室
4赵六103物理陈老师103室

1. 第一范式(1NF)

要求:所有属性值必须是原子值,即每个单元格只能包含一个值,不能包含集合或重复的组。

分析:初始表格已经满足1NF,因为每个字段的值都是单一且不可再分的。

2. 第二范式(2NF)

要求:在满足1NF的基础上,所有非主属性必须完全依赖于主键(消除部分依赖)。

分析:初始表格的主键是(学生ID,课程ID)组合,但“学生姓名”只依赖于“学生ID”,“课程名称”和“教师”依赖于“课程ID”。

转换

学生表

学生ID学生姓名
1张三
2李四
3王五
4赵六

课程表

课程ID课程名称教师教师办公室
101数学王老师101室
102英语李老师102室
103物理陈老师103室

登记表

学生ID课程ID
1101
2102
3101
4103

3. 第三范式(3NF)

要求:在满足2NF的基础上,所有非主属性必须直接依赖于主键,消除传递依赖。

分析:在课程表中,“教师办公室”依赖于“教师”,不是直接依赖于主键“课程ID”。

转换

课程表

课程ID课程名称教师
101数学王老师
102英语李老师
103物理陈老师

教师表

教师教师办公室
王老师101室
李老师102室
陈老师103室

4. 博依斯-科得范式(BCNF)

要求:在满足3NF的基础上,所有决定因素必须是候选键。

分析:目前的表结构已经符合BCNF,因为所有的决定因素都是候选键,没有非候选键的决定因素。

5. 第四范式(4NF)

要求:在满足BCNF的基础上,不存在多值依赖。

分析:我们需要确保表中不存在单个记录的多值依赖。在目前的表中,没有多值依赖的情况,已经满足4NF。

6. 第五范式(5NF)

要求:在满足4NF的基础上,所有的连接依赖都是由候选键隐含的。

分析:我们确保所有数据分解后的重组不会产生冗余数据。在目前的表中已经没有这样的连接依赖,所以满足5NF。

最终规范化结果

学生表

学生ID学生姓名
1张三
2李四
3王五
4赵六

课程表

课程ID课程名称教师
101数学王老师
102英语李老师
103物理陈老师

登记表

学生ID课程ID
1101
2102
3101
4103

教师表

教师教师办公室
王老师101室
李老师102室
陈老师103室

通过这些范式的逐步应用,我们可以看到如何通过规范化过程减少冗余,提高数据的一致性和完整性。每个范式都有其具体的要求和目的,确保数据库设计在不同层次上达到最佳状态。

二、ER图详解

ER图(实体-关系图,Entity-Relationship Diagram)是数据库设计中的一种重要工具,用于直观地表示数据及其关系。ER图由实体、属性和关系构成,帮助设计者理解和组织数据库结构。

1. 基本组件

  1. 实体(Entity):表示现实世界中的对象或概念,可以是物理的(如“学生”、“课程”)也可以是抽象的(如“部门”、“项目”)。

  2. 属性(Attribute):描述实体的特性或性质(如“学生”的姓名、学号)。

  3. 关系(Relationship):表示实体之间的关联(如“学生”选“课程”)。

2. 图示表示

  • 实体:用矩形表示,矩形内写实体名。

  • 属性:用椭圆形表示,椭圆形与实体矩形相连。

  • 关系:用菱形表示,菱形与相关的实体矩形相连。

  • 主键(Primary Key):用下划线标识的属性,唯一标识实体中的每一个实例。

3. 示例:学生课程登记系统

实体和属性
  1. 学生(Student)

  • 学生ID(StudentID) 主键

  • 姓名(Name)

  • 年级(Grade)

  1. 课程(Course)

  • 课程ID(CourseID) 主键

  • 课程名称(CourseName)

  • 学分(Credits)

  1. 教师(Teacher)

  • 教师ID(TeacherID) 主键

  • 姓名(Name)

  • 办公室(Office)

  1. 选课(Enrollment)

  • 学生ID(StudentID) 外键

  • 课程ID(CourseID) 外键

  • 成绩(Grade)

关系
  1. 选课(Enrollment)

  • 关系类型:学生和课程之间的多对多关系。

  • 属性:成绩。

  1. 授课(Teaches)

  • 关系类型:教师和课程之间的一对多关系。

  • 无额外属性。

4. ER图表示

+-----------------+                 +-----------------+|     学生        |                 |     课程        ||-----------------|                 |-----------------|| +学生ID (PK)    |<--------------->| +课程ID (PK)    ||  姓名           |                 |  课程名称       ||  年级           |                 |  学分           |+-----------------+                 +-----------------+^                              ^|                              ||                              ||                              |+-----------------+                 +-----------------+|   选课          |                 |    教师         ||-----------------|                 |-----------------|| +学生ID (FK)    |                 | +教师ID (PK)    || +课程ID (FK)    |                 |  姓名           ||  成绩           |                 |  办公室         |+-----------------+                 +-----------------+^                              ^|                              ||                              ||                              ||                              |+------------------------------+授课

5. 详细解释

  1. 学生实体(Student)

  • 属性:学生ID、姓名、年级。

  • 主键:学生ID唯一标识每个学生。

  1. 课程实体(Course)

  • 属性:课程ID、课程名称、学分。

  • 主键:课程ID唯一标识每门课程。

  1. 教师实体(Teacher)

  • 属性:教师ID、姓名、办公室。

  • 主键:教师ID唯一标识每个教师。

  1. 选课关系(Enrollment)

  • 外键:学生ID、课程ID。

  • 属性:成绩。

  • 多对多关系:一个学生可以选多门课程,一门课程可以有多个学生选修。

  1. 授课关系(Teaches)

  • 外键:教师ID、课程ID。

  • 一对多关系:一个教师可以授多门课程,但一门课程由一个教师授课。

6. ER图符号详解

  • 矩形(实体):表示一个实体,包含实体的名字。

  • 椭圆(属性):表示一个属性,包含属性的名字。主键属性在属性名下加下划线。

  • 菱形(关系):表示一个关系,包含关系的名字。

  • 连接线:实体、属性和关系之间用线连接,表明它们之间的关联。

  • 多对多关系:实体和关系之间的线标注为“n”和“m”。

  • 一对多关系:实体和关系之间的线标注为“1”和“n”。

  • 一对一关系:实体和关系之间的线标注为“1”和“1”。

7. 实践应用

ER图广泛用于数据库设计的初期阶段,它帮助设计者:

  • 明确系统中涉及的实体和它们的属性。

  • 理解实体之间的关系及其性质。

  • 提供直观的图形化表示,便于与利益相关者沟通。

  • 确定主键和外键,为后续的数据库表设计打下基础。

通过ER图的使用,可以将复杂的数据库设计过程简化为多个直观的组件和关系,确保设计的数据库结构既高效又符合业务需求。

三、如何避免数据库过度设计

在实际应用中,设计一个良好的数据库需要遵循一系列数据库理论和最佳实践,同时避免过度设计。这些理论和实践帮助确保数据库设计高效、灵活、易于维护,并且能满足业务需求。以下是一些关键的理论和原则:

1. 正规化理论(Normalization Theory)

目的:通过将数据分解成更小的、彼此独立的关系,减少数据冗余,避免数据异常。

常用范式

  • 第一范式(1NF):确保每个属性值都是原子值。

  • 第二范式(2NF):在1NF的基础上,消除非主键字段对主键的部分依赖。

  • 第三范式(3NF):在2NF的基础上,消除非主键字段对主键的传递依赖。

  • 博依斯-科得范式(BCNF):在3NF的基础上,所有决定因素必须是候选键。

  • 第四范式(4NF):在BCNF的基础上,消除多值依赖。

  • 第五范式(5NF):在4NF的基础上,确保每个连接依赖都由候选键隐含。

实际应用

  • 遵循3NF:通常,遵循到第三范式就能满足大部分业务需求,减少数据冗余和异常。

  • 平衡性能与正规化:在某些情况下,高度正规化的数据库可能导致复杂的查询和性能问题,因此需要在正规化和性能之间找到平衡。

2. 反规范化(Denormalization)

目的:在满足性能需求的前提下,对正规化的数据库进行适当的反规范化,减少查询的复杂度和提高性能。

实际应用

  • 适当反规范化:在实际应用中,为了提高查询性能,可以适当反规范化,例如通过增加冗余字段或预计算字段。

  • 基于使用场景:反规范化应基于实际使用场景和性能需求,不宜过度。

3. 数据完整性(Data Integrity)

目的:确保数据库中的数据准确、一致、可靠。

实际应用

  • 实体完整性:每个表都有唯一的主键。

  • 参照完整性:使用外键维护表与表之间的关系,确保引用的有效性。

  • 域完整性:确保每个列的数据类型和取值范围正确。

4. 数据库索引(Indexing)

目的:提高数据库查询性能。

实际应用

  • 创建索引:为常用的查询字段、主键和外键创建索引。

  • 平衡索引数量:避免创建过多索引,因为索引会增加写操作的开销。

5. 事务管理(Transaction Management)

目的:确保数据库操作的一致性和可靠性,支持原子性、一致性、隔离性和持久性(ACID)。

实际应用

  • 使用事务:在涉及多表操作或复杂操作时,使用事务管理,确保操作的完整性。

  • 隔离级别:根据业务需求设置合适的隔离级别,避免数据并发问题。

6. 数据库安全(Database Security)

目的:保护数据库免受未授权访问和攻击。

实际应用

  • 访问控制:为不同用户和角色设置不同的权限。

  • 数据加密:对敏感数据进行加密存储和传输。

  • 审计日志:记录数据库操作日志,监控和审计数据库访问。

7. 数据库备份与恢复(Backup and Recovery)

目的:保护数据免受丢失或损坏。

实际应用

  • 定期备份:定期备份数据库,确保数据的安全性。

  • 恢复测试:定期进行恢复测试,确保备份数据可用。

8. 数据库设计原则

实际应用

  • 理解业务需求:在设计数据库之前,深入了解业务需求,确保设计符合实际业务场景。

  • 灵活性和扩展性:设计时考虑未来可能的变化和扩展需求。

  • 避免过度设计:遵循“KISS”(Keep It Simple, Stupid)原则,避免不必要的复杂性。

  • 文档和沟通:保持良好的文档记录,确保团队成员之间的有效沟通。

综合应用实例

示例:电子商务系统数据库设计

  1. 理解业务需求:需要管理用户、产品、订单和库存。

  2. 初步设计实体和关系

  • 用户(User):用户ID、用户名、密码、电子邮件。

  • 产品(Product):产品ID、名称、描述、价格、库存数量。

  • 订单(Order):订单ID、用户ID、订单日期、总金额。

  • 订单明细(OrderDetail):订单ID、产品ID、数量、单价。

  1. 应用正规化

  • 用户表(User):满足3NF。

  • 产品表(Product):满足3NF。

  • 订单表(Order):满足3NF。

  • 订单明细表(OrderDetail):满足3NF。

  1. 性能优化和反规范化

  • 根据查询频率和性能需求,适当反规范化,例如在订单表中增加总金额字段,减少计算开销。

  1. 索引和事务管理

  • 为用户ID、产品ID、订单ID等字段创建索引。

  • 使用事务管理订单创建和订单明细插入操作,确保操作的原子性。

  1. 数据完整性和安全

  • 使用外键维护用户、产品和订单之间的参照完整性。

  • 设置不同用户角色的访问权限,保护敏感数据。

通过遵循这些数据库理论和最佳实践,可以设计出高效、可靠且符合业务需求的数据库,同时避免过度设计。

四、常用的数据库GUI管理工具

常用的数据库GUI设计及管理工具在数据库开发、管理和维护中起着至关重要的作用。这些工具提供直观的用户界面,帮助开发人员和数据库管理员更有效地进行数据库设计、查询、调优和管理。以下是一些常用的数据库GUI设计及管理工具:

1. MySQL Workbench

特点

  • 支持数据库设计和建模,包括ER图设计。

  • 提供查询和脚本编辑器。

  • 支持数据库迁移和数据导入导出。

  • 提供性能监控和调优功能。

适用数据库:MySQL

优点

  • 丰富的功能,适用于MySQL数据库的各种任务。

  • 跨平台支持(Windows, macOS, Linux)。

2. phpMyAdmin

特点

  • 基于Web的MySQL和MariaDB管理工具。

  • 提供直观的用户界面,支持常见的数据库操作。

  • 支持SQL查询、数据库导入导出和权限管理。

适用数据库:MySQL, MariaDB

优点

  • 易于使用,适合新手和中小型项目。

  • 无需安装客户端,只需在服务器上配置。

3. pgAdmin

特点

  • 专为PostgreSQL设计的管理工具。

  • 支持复杂的SQL查询和脚本执行。

  • 提供数据库设计、监控和调优功能。

  • 支持可视化分析和数据导入导出。

适用数据库:PostgreSQL

优点

  • 强大的功能集,专注于PostgreSQL。

  • 跨平台支持(Windows, macOS, Linux)。

4. SQL Server Management Studio (SSMS)

特点

  • 微软SQL Server的官方管理工具。

  • 提供数据库设计、查询、调优和监控功能。

  • 支持集成报表和分析服务。

适用数据库:SQL Server, Azure SQL Database

优点

  • 完全集成的环境,适合企业级应用。

  • 丰富的功能,支持SQL Server的各种管理任务。

5. Oracle SQL Developer

特点

  • Oracle数据库的官方管理工具。

  • 支持数据库设计、查询和调优。

  • 提供数据导入导出和迁移工具。

适用数据库:Oracle

优点

  • 专为Oracle设计,功能全面。

  • 跨平台支持(Windows, macOS, Linux)。

6. DBeaver

特点

  • 支持多种数据库,包括MySQL, PostgreSQL, Oracle, SQL Server, SQLite等。

  • 提供数据库设计、查询和数据管理功能。

  • 开源且免费,社区版和企业版可选。

适用数据库:多种数据库

优点

  • 跨平台支持(Windows, macOS, Linux)。

  • 支持广泛的数据库,适合多种场景。

7. HeidiSQL

特点

  • 轻量级的MySQL, MariaDB和PostgreSQL管理工具。

  • 提供SQL查询、数据编辑和导入导出功能。

  • 支持数据库设计和ER图生成。

适用数据库:MySQL, MariaDB, PostgreSQL, SQL Server

优点

  • 易于使用,适合小型项目和个人使用。

  • 免费开源,社区支持。

8. DataGrip

特点

  • JetBrains出品的跨数据库管理工具。

  • 支持多种数据库,包括MySQL, PostgreSQL, Oracle, SQL Server等。

  • 提供智能SQL编辑、调试和查询分析功能。

适用数据库:多种数据库

优点

  • 强大的IDE功能,支持代码补全和调试。

  • 跨平台支持(Windows, macOS, Linux)。

9. Navicat

特点

  • 支持多种数据库,包括MySQL, PostgreSQL, Oracle, SQL Server, SQLite等。

  • 提供数据库设计、查询、调优和管理功能。

  • 支持数据同步和备份恢复。

适用数据库:多种数据库

优点

  • 丰富的功能,适合企业级应用。

  • 用户界面友好,易于使用。

10. Toad

特点

  • 提供强大的数据库管理和开发工具。

  • 支持SQL优化和调优。

  • 支持多种数据库,包括Oracle, SQL Server, MySQL, PostgreSQL等。

适用数据库:多种数据库

优点

  • 专业的数据库管理工具,功能强大。

  • 适合企业级应用和复杂数据库管理任务。

结论

选择合适的数据库GUI设计和管理工具取决于具体的需求、使用的数据库类型以及个人或团队的偏好。以上列出的工具都是业内常用且功能强大的工具,能够满足不同层次的数据库管理和开发需求。

五、数据库性能优化思考

数据库性能优化是一个多维度的过程,涉及多方面的考量和策略。下面从多个角度探讨数据库性能优化的方法:

1. 数据库设计和架构

1.1 正规化和反规范化

  • 正规化:减少数据冗余,确保数据一致性。遵循第三范式(3NF)通常是一个好的起点。

  • 反规范化:在读取性能成为瓶颈时,可以考虑适当反规范化,通过冗余数据来减少复杂查询的次数。

1.2 分区(Partitioning)

  • 将大型表划分成较小的部分,可以是水平分区(按行划分)或垂直分区(按列划分),提高查询性能和管理效率。

1.3 索引(Indexing)

  • 适当创建索引:为频繁查询的字段创建索引,如主键、外键和常用查询条件的列。

  • 避免过多索引:索引虽能加速读取,但会增加写入和更新的成本。

2. 查询优化

2.1 查询重写

  • 优化SQL查询语句,避免不必要的复杂查询,使用高效的查询方式,如避免SELECT *,只选择所需字段。

2.2 使用联合(JOIN)

  • 合理使用JOIN,避免嵌套循环(nested loop),可以使用哈希连接或合并连接(merge join)等更高效的连接方式。

2.3 查询计划(Query Plan)

  • 分析查询计划(EXPLAIN)以了解查询的执行过程,识别性能瓶颈,如全表扫描,使用适当的索引来优化查询路径。

3. 数据库配置

3.1 缓存配置

  • 数据库缓存:调整数据库缓存参数,如InnoDB缓冲池(MySQL),提高缓存命中率。

  • 查询缓存:启用查询缓存,将重复的查询结果缓存起来,减少数据库的计算负担。

3.2 连接池(Connection Pooling)

  • 配置适当的连接池大小,避免频繁创建和销毁连接,减少连接开销。

4. 硬件和系统优化

4.1 硬件升级

  • 内存:增加服务器内存,尤其是用于数据库缓存和缓冲。

  • 磁盘:使用SSD代替传统HDD,提供更快的数据读取和写入速度。

4.2 系统参数调整

  • 文件系统优化:选择适合数据库的文件系统,如XFS或EXT4。

  • 网络配置:优化网络设置,减少延迟,提高吞吐量。

5. 数据库集群和分布式系统

5.1 主从复制(Replication)

  • 设置主从复制,实现读写分离,主库负责写操作,从库负责读操作,提高读操作性能。

5.2 分片(Sharding)

  • 将数据分片存储在不同的数据库服务器上,每个分片只存储一部分数据,提高写入性能和扩展性。

5.3 分布式数据库

  • 使用分布式数据库系统(如Cassandra、CockroachDB),利用其横向扩展能力来应对高并发和大规模数据处理需求。

6. 日常维护和监控

6.1 定期维护

  • 定期进行数据库重组(REORGANIZE)、更新统计信息和索引重建,确保数据库的健康状态。

6.2 性能监控

  • 实时监控数据库性能指标(如慢查询日志、CPU使用率、内存使用率),及时发现和处理性能问题。

6.3 自动化脚本

  • 使用自动化脚本定期执行备份、清理日志和数据归档操作,保持数据库稳定运行。

7. 应用层优化

7.1 缓存策略

  • 应用层缓存:在应用层使用缓存机制(如Memcached、Redis),减少数据库的读取负担。

  • 前端缓存:利用CDN和浏览器缓存,减少对数据库的直接访问。

7.2 数据库连接管理

  • 优化应用程序的数据库连接管理,避免长时间保持空闲连接,合理使用连接池。

7.3 分批处理

  • 对大量数据操作进行分批处理,避免一次性操作大量数据导致性能下降。

结论

数据库性能优化是一个综合性的过程,需要从数据库设计、查询优化、配置调整、硬件升级、集群和分布式系统、日常维护以及应用层优化等多个方面进行考虑。通过系统性的方法,结合具体的业务需求和使用场景,可以有效提升数据库性能,确保系统的高效稳定运行。

六、数据库权限管理思考

数据库权限管理是确保数据安全、数据完整性和系统稳定性的关键方面。有效的权限管理策略能够防止未经授权的访问和操作,保护敏感信息,确保合法用户的正常操作。以下是从多个角度探讨数据库权限管理的方法和最佳实践:

1. 角色和用户管理

1.1 角色定义

  • 创建角色:根据不同的职责和权限要求创建角色。例如,创建数据库管理员(DBA)、开发者、读写用户和只读用户等角色。

  • 分配权限:为每个角色分配适当的权限,确保角色的权限满足其职责要求。

1.2 用户管理

  • 创建用户:为每个需要访问数据库的个体创建用户账号。

  • 分配角色:将用户分配给适当的角色,确保用户获得所需的权限。

2. 权限分配

2.1 最小权限原则

  • 限制权限:仅授予用户完成其工作所需的最小权限,避免不必要的权限暴露。

  • 细粒度控制:根据需要授予具体的权限,如表级、列级或行级权限。

2.2 权限层级

  • 系统权限:涉及数据库系统级的操作权限,如创建用户、备份恢复等。

  • 对象权限:涉及具体数据库对象的操作权限,如表、视图、存储过程等的查询、插入、更新和删除权限。

3. 审计和监控

3.1 日志记录

  • 操作日志:记录所有对数据库的操作,包括查询、插入、更新和删除操作。

  • 访问日志:记录用户的登录和退出操作,跟踪用户的活动。

3.2 审计策略

  • 设置审计策略:定义需要审计的操作和事件,如敏感数据访问、权限变更等。

  • 定期审计:定期审查审计日志,发现和处理异常操作和安全事件。

4. 数据加密

4.1 静态数据加密

  • 数据库加密:对数据库文件进行加密保护,防止未经授权的物理访问。

  • 字段级加密:对敏感字段进行加密,如用户密码、信用卡信息等。

4.2 传输数据加密

  • 使用SSL/TLS:确保客户端和服务器之间的数据传输加密,防止中间人攻击。

5. 安全策略和规范

5.1 密码策略

  • 强密码:要求用户设置强密码,避免简单易猜的密码。

  • 定期更换:要求用户定期更换密码,提高安全性。

5.2 账号策略

  • 锁定策略:对多次失败登录尝试进行账号锁定,防止暴力破解。

  • 过期策略:设置用户账号过期时间,定期审核和清理不再使用的账号。

6. 数据库管理工具

6.1 使用安全工具

  • 数据库防火墙:部署数据库防火墙,防止SQL注入和其他攻击。

  • 安全扫描工具:定期使用安全扫描工具检查数据库漏洞和不安全配置。

6.2 自动化管理

  • 权限管理工具:使用权限管理工具自动化权限分配和管理,简化管理过程。

  • 审计和监控工具:使用专业的审计和监控工具,提高操作透明度和安全性。

7. 教育和培训

7.1 安全意识培训

  • 用户培训:定期对用户进行安全意识培训,提高用户的安全意识和操作规范。

  • 管理员培训:对数据库管理员进行安全培训,掌握最新的安全技术和最佳实践。

实践案例

案例:金融机构数据库权限管理

  1. 角色和用户管理

  • 定义角色:创建如DBA、开发者、数据分析师、审计员等角色。

  • 创建用户:为每个员工创建数据库账户,根据其职责分配适当的角色。

  1. 权限分配

  • 最小权限原则:仅授予开发者读写开发数据库的权限,生产数据库仅由DBA和审计员访问。

  • 细粒度控制:对客户信息表的敏感字段(如社会保障号码)仅允许特定用户查询和修改。

  1. 审计和监控

  • 启用审计日志,记录所有对客户信息表的查询和修改操作。

  • 定期审查审计日志,检查是否有异常访问和操作。

  1. 数据加密

  • 使用数据库提供的加密功能对客户信息表进行加密存储。

  • 配置SSL/TLS,确保所有客户端和服务器之间的通信加密。

  1. 安全策略和规范

  • 强制使用强密码策略,要求每季度更换一次密码。

  • 对连续三次失败登录尝试进行账号锁定,需要管理员解锁。

  1. 数据库管理工具

  • 部署数据库防火墙,防止SQL注入攻击。

  • 定期使用安全扫描工具检查数据库配置和权限设置。

  1. 教育和培训

  • 对所有用户进行年度安全意识培训。

  • 对DBA进行季度安全培训,更新最新的安全技术和最佳实践。

通过这些措施,金融机构可以确保其数据库系统的安全性和稳定性,有效防止未经授权的访问和操作,保护客户的敏感信息。

f4b49f7f1a4bedd08036da4e4412eb15.png

希望对您有用!关注锅总,可及时获得更多花里胡哨的运维实用操作!

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

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

相关文章

【Docker】容器

目录 1. 容器启动 2. 容器启动/重启/停止 3. 进入容器 4. 容器查询 5. docker 镜像的构建 方式一&#xff1a;docker 容器 commit 方式二&#xff1a;Dockerfile 定制镜像 1. 容器启动 docker run –it/-d –p/P –name imageID/name 2. 容器启动/重启/停止 docker sta…

Linux-笔记 全志T113移植正点4.3寸RGB屏幕笔记

目录 前言 线序整理 软件 显示调试 触摸调试 背光调试 前言 由于手头有一块4.3寸的RGB屏幕(触摸IC为GT1151)&#xff0c;正好开发板上也有40Pin的RGB接口&#xff0c;就想着给移植一下&#xff0c;前期准备工作主要是整理好线序&#xff0c;然后用转接板与杜邦线连接验证好…

vue3+ts:监听dom宽高变化函数

一、效果展示 二、代码 getSize.ts import { ref, Ref, watchEffect } from "vue";export const getWidth (domRef: Ref<HTMLElement | null>) > {const width ref<number>(0);const height ref<number>(0);const observer new ResizeObs…

Qt事件传递顺序是怎样的?

1、事件传递顺序规则 在Qt中&#xff0c;事件传递的顺序事件首先传递到目标对象的事件过滤器&#xff0c;然后传递到事件处理函数&#xff0c;最后传递到父对象的事件过滤器和事件处理函数。 为了更好地理解这一过程&#xff0c;下面将通过一个示例来展示事件在父窗口和子窗口…

投票多功能小程序(ThinkPHP+Uniapp+FastAdmin)

&#x1f389;你的决策小助手&#xff01; 支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c;Uniapp提供全部无加密源码。​ 一、引言&#xff1a;为什么我们需要多功能投票小程序&#…

小程序的基本使用

【 0 】前言 【 0 】 这个就是js代码的存放地方 app.json // pages/banner/banner.js Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示…

【安卓13 源码】RescueParty救援机制

RescueParty机制正是在这个背景下诞生的&#xff0c;当它注意到系统或系统核心组件陷入循环崩溃状态时&#xff0c;就会根据崩溃的程度执行不同的救援行动&#xff0c;以期望让设备恢复到正常使用的状态。 开机后会自动重启&#xff0c;进入Recovery界面。经查找&#xff0c;是…

代码随想录-Day39

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

线程安全问题(一)——锁的简单使用

多线程安全问题 线程安全问题的引入案例引入多线程指令排序问题 线程不安全的原因解决线程不安全的方法锁的引入上锁和解锁过程一个简单的锁Demo对这个案例进行几次修改 总结 线程安全问题的引入 在前面的博文中&#xff0c;我们了解到通过Thread.join()的方法让线程进入等待&…

统信UOS系统忘记登录密码怎么办

在使用统信操作系统UOS的时候有可能会出现忘记密码的情况&#xff0c;当遇到了用户登录密码忘记时如何修改&#xff1f;今天分享一下忘记超级系统管理员Root以及普通密码时的解决方法。 因为UOS系统版本的原因&#xff0c;UOS 1031操作系统取消了单用户更改密码的方法&#xff…

jupyter notebook的markdown语法不起作用

在这个界面编辑&#xff0c;发现markdown你编辑的是什么就是什么&#xff0c;不起作用&#xff0c;然而点一下&#xff1a; 右上角“Notebook转发”&#xff0c;就会单独跳出一个jupyter notebook的界面&#xff0c;此时就会奏效&#xff1a;

【CT】LeetCode手撕—72. 编辑距离

目录 题目1- 思路动规五部曲 2- 实现⭐72. 编辑距离——题解思路 3- ACM 实现 题目 原题连接&#xff1a;72. 编辑距离 1- 思路 模式识别&#xff1a;编辑举例 ——> 动态规划 动规五部曲 1.dp数组的含义 int[][] dp new int[word1.length()][word2.length()];以 i-1 …

6-47选择整数计算

整数计算&#xff1a; 用swing组件来实现整数计算&#xff0c;需要对整数计算的值进行校验。 import javax.swing.*; import java.awt.*; import java.awt.event.*;public class IntegerCalculator extends JFrame implements ActionListener {private JCheckBox[] checkBoxe…

【分布式文件系统HDFS】文件操作基本命令的使用

目录 一、按照下述要求写出相应的文件操作命令&#xff0c;执行并观察结果 1. 新建目录 1.1 在本地文件系统按要求创建如下的文件夹 1.2 在HDFS文件系统按要求创建如下的文件夹 2. 编辑文件test1.txt&#xff0c;放入本地文件夹 /opt/user/myfile 3. 使用moveFromLocal命令…

本地部署大模型的简单方法

https://ollama.com/https://ollama.com/ 在本地安装ollama windows版本。安装好后&#xff0c;就可以验证大模型了。 可以先测试一下qwen 0.5b&#xff0c;打开cmd&#xff0c;执行ollama run qwen:0.5b&#xff0c;首次会下载大模型的模型资源。 模型下好后就可以交互…

H5、Vue3、UniApp实现抖音短视频功能

H5、Vue3、UniApp实现抖音短视频功能 ml-swiper https://ext.dcloud.net.cn/plugin?id18973 可 0 配置&#xff0c;高性能、低代码、全端兼容 APP端效果图 微信小程序端效果图 Vue网页端效果图 ml-swiper 可 0 配置&#xff0c;高性能、低代码、全端兼容 APP端效果图 …

扩散模型 GLIDE:35 亿参数的情况下优于 120 亿参数的 DALL-E 模型

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

媒体邀约中媒体采访应该如何做?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 在媒体邀约中&#xff0c;媒体采访应该遵循以下几个步骤和…

Python读取中文路径,出现乱码问题解决方案

Python读取中文路径&#xff0c;出现乱码问题解决方案 一、问题描述二、问题解决 欢迎学习交流&#xff01; 邮箱&#xff1a; z…1…6.com 网站&#xff1a; https://zephyrhours.github.io/ 一、问题描述 笔者在使用opencv读取带有中文路径的图片时&#xff0c;发现会出现乱…

C++ 模板:全特化和偏特化

目录 全特化&#xff08;Full Specialization&#xff09; 偏特化&#xff08;Partial Specialization&#xff09; 特点和使用场景 注意事项 在C中&#xff0c;模板特化&#xff08;template specialization&#xff09;是一种强大的功能&#xff0c;允许对模板进行特定情…