未来已来:Spring Boot引领数据库智能化革命

深入探讨了Spring Boot如何与现代数据库技术相结合,预测并塑造未来的数据访问趋势。本书不仅涵盖了Spring Data JPA的使用技巧,还介绍了云原生数据库的概念,微服务架构下的数据访问策略,以及AI在数据访问层的创新应用。旨在帮助开发者把握先机,引领数据库智能化的新潮流!

文章目录

    • 1. Spring Data JPA 简介
      • 1.1 Spring Data JPA 原理与优势
      • 1.2 核心接口与功能实现
      • 1.3 查询方法命名规则与自定义查询
    • 2. 集成各种数据库
      • 2.1 MySQL 数据库集成
        • 2.1.1 配置连接与实体映射
        • 2.1.2 示例:CRUD 操作
      • 2.2 PostgreSQL 数据库集成
        • 2.2.1 安装与配置
        • 2.2.2 特性与最佳实践
      • 2.3 其他数据库选项简介
    • 3. 使用 SpringBoot 进行数据库迁移和版本控制
      • 3.1 Liquibase 简介
        • 3.1.1 初始化配置
        • 3.1.2 迁移脚本编写
      • 3.2 Flyway 数据库迁移工具
        • 3.2.1 安装与集成
        • 3.2.2 版本控制策略
      • 3.3 数据迁移最佳实践与选型建议
    • 4. 数据访问层的深入探讨
      • 4.1 数据模型的设计原则
      • 4.2 高级查询技术
      • 6.3 性能优化策略
      • 4.4 事务管理
      • 4.5 安全性考虑
      • 4.6 云原生数据库集成
      • 4.7 微服务架构下的数据访问
      • 4.8 AI与机器学习的应用
      • 4.9 数据访问层的未来展望
    • 结论
      • 数据访问层设计总结
      • SpringBoot 数据集成的优势回顾
      • 未来发展趋势预测
      • 参考文献

在这里插入图片描述

1. Spring Data JPA 简介

1.1 Spring Data JPA 原理与优势

想象一下,你是一个程序员,每天面对着成堆的数据库操作代码,就像面对着一桌丰盛的自助餐,虽然美味,但吃多了也会腻。这时,Spring Data JPA 就像一位贴心的服务员,帮你把各种美味佳肴按照你的口味精心搭配,让你可以轻松享受每一餐。

Spring Data JPA 是 Spring 家族中的一个成员,它基于 Java Persistence API (JPA),帮助开发者简化数据库操作。它的原理很简单,就是通过约定优于配置的方式,减少重复的模板代码,让你可以更专注于业务逻辑的实现。

优势嘛,就像自助餐的好处:

  • 减少代码量:你不需要写大量的样板代码,Spring Data JPA 会帮你搞定。
  • 提高开发效率:有了 Spring Data JPA,你可以更快地实现数据库操作,就像快速挑选你喜欢的菜品。
  • 易于维护:统一的接口和方法命名规则,让你的代码更加整洁,维护起来也更加方便。

1.2 核心接口与功能实现

现在,让我们来认识一下 Spring Data JPA 的几位核心成员。首先是 JpaRepository 接口,它就像自助餐中的主菜,提供了基本的 CRUD 操作,包括保存、删除、查找等。你只需要继承这个接口,就可以拥有这些功能,是不是很神奇?

接下来是 CrudRepository 接口,它是 JpaRepository 的父接口,提供了一些更基础的操作,比如保存和删除单个实体。

还有 PagingAndSortingRepository 接口,它在 CrudRepository 的基础上增加了分页和排序的功能,让你可以轻松地处理大量数据。

1.3 查询方法命名规则与自定义查询

在 Spring Data JPA 中,有一种非常有趣的查询方法命名规则,它允许你通过方法名来定义查询条件。比如,你想查询所有名字为 “Tom” 的用户,你只需要定义一个方法 findAllByName(String name),Spring Data JPA 就会自动为你生成相应的查询。

当然,如果你的需求比较特殊,Spring Data JPA 也支持自定义查询。你可以使用 @Query 注解来编写 JPQL 或 SQL 查询语句,就像在自助餐中添加一些特别的调料,让菜品更加符合你的口味。

这就是 Spring Data JPA 的基本,就像自助餐的开胃菜,希望它能够激发你对 Spring Data JPA 的兴趣。接下来,我们将深入探讨如何将这些美味佳肴融入到你的项目中,让它们成为你开发过程中的得力助手。别着急,慢慢来,我们一步一步来!

2. 集成各种数据库

2.1 MySQL 数据库集成

2.1.1 配置连接与实体映射

想象一下,你走进一家餐厅,服务员递给你一份菜单,上面有各式各样的美味佳肴。在 Spring Boot 中集成 MySQL 数据库,就像在菜单上选择你最喜欢的菜品一样简单。

首先,你需要在 application.propertiesapplication.yml 文件中配置数据库连接信息。这就像是告诉服务员你的口味偏好,比如:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=root
spring.datasource.password=secret

接下来,你需要定义你的实体类,这就像是点菜时告诉厨师你想要什么样的食材和烹饪方式。在实体类中,你使用 JPA 注解来告诉 Spring Data JPA 如何将 Java 对象映射到数据库表中:

@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// getters and setters
}
2.1.2 示例:CRUD 操作

现在,让我们来点一些具体的菜品,也就是 CRUD 操作。假设你已经继承了 JpaRepository 接口,那么你可以轻松地执行创建、读取、更新和删除操作。

  • 创建:将新用户添加到数据库中,就像点一份新菜。
userRepository.save(new User("Alice", "alice@example.com"));
  • 读取:从数据库中检索用户,就像查看菜单上的菜品。
User user = userRepository.findById(1L).orElse(null);
  • 更新:更新用户信息,就像告诉厨师调整菜品的口味。
user.setEmail("newalice@example.com");
userRepository.save(user);
  • 删除:从数据库中删除用户,就像从菜单上划去一道不再提供的菜品。
userRepository.delete(user);

2.2 PostgreSQL 数据库集成

2.2.1 安装与配置

现在,让我们转向另一家餐厅,尝试一些不同的风味——PostgreSQL。安装 PostgreSQL 就像在新餐厅注册成为会员,你需要下载并安装数据库服务器。

配置 PostgreSQL 与配置 MySQL 类似,但你需要使用 PostgreSQL 的 JDBC 驱动,并可能需要调整一些特定的配置,比如连接池设置:

spring.datasource.url=jdbc:postgresql://localhost:5432/your_database
spring.datasource.username=postgres
spring.datasource.password=secret
spring.datasource.driver-class-name=org.postgresql.Driver
2.2.2 特性与最佳实践

PostgreSQL 以其强大的功能和灵活性而闻名,它提供了许多 MySQL 没有的特性,比如更复杂的数据类型、全文搜索和高级的索引选项。

使用 PostgreSQL 时,最佳实践包括:

  • 使用合适的数据类型:比如使用 ARRAY 类型存储数组数据。
  • 利用索引优化查询:PostgreSQL 支持多种索引类型,如 GIN、GIST,可以针对特定查询进行优化。
  • 考虑事务隔离级别:根据应用需求选择合适的隔离级别,以避免并发问题。

2.3 其他数据库选项简介

就像世界美食的多样性,Spring Boot 也支持多种数据库。除了 MySQL 和 PostgreSQL,你还可以集成 Oracle、SQL Server、MariaDB 等。每种数据库都有其独特的风味和最佳实践,选择适合你项目需求的数据库,就像选择适合你口味的餐厅。

集成数据库的过程就像是在餐厅点餐,Spring Boot 为你提供了丰富的选择和便捷的服务。通过这些步骤,你可以轻松地将各种数据库集成到你的应用程序中,享受数据访问的便捷与乐趣。接下来,我们将探索如何通过数据库迁移工具,保持我们的“菜单”始终新鲜和一致。别着急,我们一步一步来。

在这里插入图片描述

3. 使用 SpringBoot 进行数据库迁移和版本控制

3.1 Liquibase 简介

3.1.1 初始化配置

想象一下,你经营着一家餐馆,随着时间的推移,菜单需要更新,新菜品要添加,旧菜品可能要下架。在数据库的世界里,这就是所谓的“数据库迁移”。Liquibase 就是那个帮你管理菜单变化的智能系统。

首先,你需要在 Spring Boot 项目中引入 Liquibase 的依赖。这就像是在厨房里安装了一套先进的点餐系统,确保一切井然有序。

<dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId>
</dependency>

接着,在 application.properties 中配置 Liquibase 的连接信息和迁移脚本的位置:

spring.liquibase.url=jdbc:mysql://localhost:3306/your_database
spring.liquibase.user=root
spring.liquibase.password=secret
spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.xml
3.1.2 迁移脚本编写

编写迁移脚本就像是设计新菜单。在 Liquibase 中,你通过 XML 文件来定义数据库的变更集(change sets)。每个变更集包含了数据库变更的指令,比如创建表、添加列等。

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"><changeSet id="1" author="your_name"><createTable tableName="new_dish"><column name="id" type="int" autoIncrement="true"><constraints primaryKey="true"/></column><column name="name" type="varchar(255)"/></createTable></changeSet>
</databaseChangeLog>

每次你更新数据库结构时,只需添加一个新的变更集,Liquibase 就会帮你管理这些变更。

3.2 Flyway 数据库迁移工具

3.2.1 安装与集成

Flyway 是另一个流行的数据库迁移工具,它就像是你的餐厅里的另一位大厨,专注于为你的数据库带来新的风味。

集成 Flyway 到你的 Spring Boot 项目同样简单,只需要添加 Flyway 的依赖:

<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId>
</dependency>

然后在配置文件中设置数据库连接和迁移脚本的位置:

spring.flyway.url=jdbc:mysql://localhost:3306/your_database
spring.flyway.user=root
spring.flyway.password=secret
spring.flyway.locations=classpath:/db/migration
3.2.2 版本控制策略

Flyway 使用版本号来管理迁移脚本,这就像是给每道菜品贴上标签,确保你知道它们的来历和变化。

你可以创建一个 SQL 文件,文件名以版本号开头,如下所示:

V1__Initial_schema.sql
V2__Add_new_column_to_users_table.sql

Flyway 会按照版本号的顺序执行这些脚本,确保数据库结构的一致性和版本控制。

3.3 数据迁移最佳实践与选型建议

无论是选择 Liquibase 还是 Flyway,数据迁移的最佳实践都包括:

  • 版本控制:将迁移脚本纳入版本控制系统,如 Git。
  • 回滚策略:为每个迁移脚本编写回滚脚本,以便在出现问题时能够回退到上一个版本。
  • 自动化:利用 CI/CD 流程自动化迁移过程,确保在不同环境间的一致性。
  • 测试:在部署迁移脚本之前,确保在测试环境中进行充分的测试。

至于选型建议,这取决于你的具体需求和偏好。Liquibase 提供了更多的配置选项和灵活性,而 Flyway 以其简洁和易用性著称。就像选择餐厅一样,最重要的是找到最适合你口味的那一个。


数据库迁移和版本控制就像是餐厅的菜单更新,需要精心策划和执行。通过 Liquibase 和 Flyway 这样的工具,你可以确保数据库结构的平滑过渡和持续改进。下一步,我们将总结数据访问层的设计,并回顾 SpringBoot 数据集成的优势。别着急,我们一步一步来。

很抱歉,但似乎存在一些误解。在之前的回答中,我们并没有讨论到第六点,而是讨论了关于Spring Boot数据访问层的总结和未来趋势。如果您需要我继续扩展某个特定的话题或创建一个新的第六点,请提供更多的细节或指导。

如果您希望我继续探讨Spring Boot数据访问层的相关内容,或者有其他特定的话题想要了解,请告诉我,我会很高兴为您提供帮助。

如果您需要我写一篇关于Spring Boot数据访问层的深入文章,我可以提供以下内容:

4. 数据访问层的深入探讨

4.1 数据模型的设计原则

数据模型是数据访问层的核心,它直接影响到数据的组织、存储和访问效率。设计数据模型时,我们需要遵循一些基本原则:

  • 规范化:通过规范化理论,我们可以消除数据冗余,保证数据的一致性。
  • 反规范化:在某些情况下,为了提高性能,我们可能需要对数据模型进行反规范化。
  • 域驱动设计:通过将业务逻辑与数据模型紧密结合,我们可以创建更加灵活和可维护的数据模型。

4.2 高级查询技术

Spring Data JPA提供了许多高级查询技术,帮助我们更有效地访问和管理数据:

  • JPQL:Java Persistence Query Language,它允许我们以面向对象的方式编写查询。
  • Criteria API:这是一种类型安全的方法,用于构建动态查询。
  • 方法命名查询:通过方法名定义查询,Spring Data JPA可以自动解析并执行。

6.3 性能优化策略

性能是数据访问层的关键考虑因素。以下是一些性能优化策略:

  • 索引优化:合理使用索引可以显著提高查询性能。
  • 查询优化:避免复杂的联表查询,尽量使用懒加载和延迟加载。
  • 缓存策略:使用缓存可以减少数据库的访问次数,提高应用的响应速度。

4.4 事务管理

事务管理是确保数据一致性的重要机制。Spring提供了声明式和编程式两种事务管理方式:

  • 声明式事务:通过注解或配置文件来管理事务,简单易用。
  • 编程式事务:通过代码手动管理事务,提供了更高的灵活性。

4.5 安全性考虑

数据访问层的安全性同样重要。我们需要考虑以下方面:

  • SQL注入防护:通过预编译的SQL语句和参数化查询来防止SQL注入攻击。
  • 数据加密:对敏感数据进行加密,保护用户隐私。
  • 访问控制:确保只有授权用户才能访问特定的数据。

4.6 云原生数据库集成

随着云计算的兴起,云原生数据库成为了一种趋势。Spring Boot对云原生数据库的支持也在不断增强:

  • 自动配置:Spring Boot可以自动配置连接到云数据库。
  • 弹性扩展:云数据库提供了弹性扩展的能力,可以根据负载动态调整资源。
  • 备份与恢复:云数据库提供了备份和恢复功能,确保数据的安全性。

4.7 微服务架构下的数据访问

在微服务架构下,每个服务都有自己的数据访问层,这带来了一些新的挑战和机遇:

  • 数据一致性:需要采用分布式事务或最终一致性模型来保证数据的一致性。
  • 服务间通信:服务之间需要通过API网关或其他机制进行通信。
  • 数据隔离:每个服务都应该有自己的数据库实例,以实现数据隔离。

4.8 AI与机器学习的应用

AI和机器学习技术正在改变数据访问层:

  • 智能查询优化:AI可以分析查询模式,自动优化查询性能。
  • 预测性维护:通过机器学习模型预测系统负载,提前进行资源扩展。
  • 自动化测试:AI可以自动生成测试数据和测试用例,提高测试效率。

4.9 数据访问层的未来展望

随着技术的不断进步,数据访问层将继续发展和演变:

  • 更智能的缓存策略:AI将帮助我们实现更智能的缓存策略,进一步提高性能。
  • 更安全的数据处理:随着数据隐私法规的加强,数据访问层将更加注重安全性。
  • 更灵活的数据模型:NoSQL数据库和多模型数据库将提供更灵活的数据模型,以适应不断变化的业务需求。

数据访问层是任何应用程序的基础,它关系到数据的存储、访问和管理。随着技术的不断发展,数据访问层的设计和实现也在不断进步。作为开发者,我们需要不断学习和适应新技术,以构建更加高效、安全和可扩展的应用程序。

Spring Boot作为一个流行的开发框架,为我们提供了强大的工具和机制来构建数据访问层。通过深入理解Spring Boot的数据访问技术,我们可以更好地利用这些工具,解决实际问题,提高开发效率。

在未来的开发工作中,让我们继续探索和创新,利用Spring Boot构建更加出色的应用程序。同时,我们也应该关注新技术的发展,把握技术趋势,为未来的挑战做好准备。

感谢您的阅读,希望本文能够为您提供有价值的信息和启发。如果您有任何问题或建议,请随时与我们交流。让我们一起努力,创造一个更加美好的技术未来!
在这里插入图片描述

结论

数据访问层设计总结

在这段美食之旅的尾声,我们来到了总结的环节。数据访问层(DAL)就像餐厅的后厨,是整个应用的支撑点。通过 Spring Data JPA,我们简化了数据操作,使得 CRUD 变得像点菜一样简单。集成了 MySQL、PostgreSQL 等数据库后,我们的“菜单”变得更加丰富多样。而 Liquibase 和 Flyway 则像是我们的菜单更新助手,确保每一次的“菜品”更新都能精准无误。

在设计数据访问层时,我们遵循了一些关键原则:

  • 单一职责原则:每个数据访问对象只负责一种类型的数据操作。
  • 开闭原则:对扩展开放,对修改封闭。通过继承和接口,我们可以轻松添加新的数据访问逻辑,而不需要修改现有代码。
  • 依赖倒置原则:高层模块(业务逻辑)不依赖于低层模块(数据访问),两者都依赖于抽象(接口或抽象类)。

SpringBoot 数据集成的优势回顾

Spring Boot 为我们的数据访问层带来了许多便利:

  • 自动配置:Spring Boot 能够根据项目中的依赖自动配置数据库连接和数据访问对象。
  • 简化开发:通过 Starter 依赖,我们能够快速集成各种数据库和数据访问技术,而不需要手动配置大量细节。
  • 社区支持:Spring Boot 拥有庞大的社区支持,无论是 MySQL、PostgreSQL 还是 Liquibase、Flyway,都有大量的文档和社区资源可供参考。

未来发展趋势预测

展望未来,数据访问层的设计和实现将继续向着更加智能、自动化的方向发展。我们可以预见:

  • 云原生数据库:随着云计算的普及,云原生数据库将成为主流,Spring Boot 将更好地与这些服务集成。
  • 微服务架构:微服务架构将继续发展,数据访问层的设计也将更加注重服务间的解耦和独立性。
  • 智能化:AI 和机器学习将在数据访问层扮演更重要的角色,帮助我们优化查询、预测负载和自动调整资源。

随着我们的美食之旅即将结束,我们不仅品尝了 Spring Boot 数据访问层的美味,还学会了如何制作和更新这些“菜品”。记住,无论技术如何发展,核心始终是服务于我们的业务需求和用户体验。让我们一起期待并拥抱未来的技术变革,为用户带来更加丰富、便捷的数据访问体验。别着急,我们一步一步来,未来可期!

参考文献

  1. Spring Data JPA 官方文档

    • 链接:Spring Data JPA Official Documentation
    • 描述:Spring Data JPA 的官方文档提供了全面的指南和最佳实践,涵盖了从基础概念到高级特性的所有内容。
  2. MySQL & PostgreSQL 官方集成指南

    • 链接:MySQL Official Documentation
    • 链接:PostgreSQL Official Documentation
    • 描述:这两个链接分别指向 MySQL 和 PostgreSQL 的官方文档,提供了关于如何安装、配置以及使用这两种数据库的详细信息。
  3. Liquibase 官网教程

    • 链接:Liquibase Documentation
    • 描述:Liquibase 的官方文档提供了关于如何使用 Liquibase 进行数据库版本控制和管理的详细教程。
  4. Flyway Database Migration Tool - User Guide

    • 链接:Flyway Documentation
    • 描述:Flyway 的用户指南详细介绍了 Flyway 的安装、配置以及如何执行数据库迁移。
  5. SpringBoot 数据访问最佳实践 - 博客文章集合

    • 链接:Various Blogs on SpringBoot Data Access
    • 描述:一系列博客文章,涵盖了 SpringBoot 数据访问的最佳实践、设计模式和性能优化技巧。

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

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

相关文章

XFeat:速度精度远超superpoint的轻量级图像匹配算法

代码地址&#xff1a;https://github.com/verlab/accelerated_features?tabreadme-ov-file 论文地址&#xff1a;2404.19174 (arxiv.org) XFeat (Accelerated Features)重新审视了卷积神经网络中用于检测、提取和匹配局部特征的基本设计选择。该模型满足了对适用于资源有限设备…

在table中获取每一行scope的值

目的 当前有一份如下数据需要展示在表格中&#xff0c;表格的页面元素套了一个折叠面板&#xff0c;需要循环page_elements中的数据展示出来 错误实践 将template放在了折叠面板中&#xff0c;获取到的scope是空数组 <el-table-column label"页面元素" show-o…

【并发程序设计】15.信号灯(信号量)

15.信号灯(信号量) Linux中的信号灯即信号量是一种用于进程间同步或互斥的机制&#xff0c;它主要用于控制对共享资源的访问。 在Linux系统中&#xff0c;信号灯作为一种进程间通信&#xff08;IPC&#xff09;的方式&#xff0c;与其他如管道、FIFO或共享内存等IPC方式不同&…

分析和设计算法

目录 前言 循环不变式 n位二进制整数相加问题 RAM模型 使用RAM模型分析 代码的最坏情况和平均情况分析 插入排序最坏情况分析 插入排序平均情况分析 设计算法 分治法 总结 前言 循环迭代&#xff0c;分析算法和设计算法作为算法中的三个重要的角色&#xff0c;下面…

Java——二进制原码、反码和补码

一、简要介绍 原码、反码和补码只是三种二进制不同的表示形式&#xff0c;每个二进制数都有这三个形式。 1、原码 原码是将一个数的符号位和数值位分别表示的方法。 最高位为符号位&#xff0c;0表示正&#xff0c;1表示负&#xff0c;其余位表示数值的绝对值。 例如&…

如何解决游戏行业DDOS攻击问题

随着网络游戏行业的迅速发展&#xff0c;网络游戏问题也不可忽视&#xff0c;特别是目前网络攻击频发&#xff0c;DDoS攻击的简单化以及普及化&#xff0c;对游戏来说存在非常大的安全威胁。 随着受攻击对象的范围在不断地拓展&#xff0c;网络游戏这种这种新型并且有着丰厚利…

Scala编程基础3 数组、映射、元组、集合

Scala编程基础3 数组、映射、元组、集合 小白的Scala学习笔记 2024/5/23 14:20 文章目录 Scala编程基础3 数组、映射、元组、集合apply方法数组yield 数组的一些方法映射元组数据类型转换求和示例拉链集合flatMap方法 SetHashMap apply方法 可以new&#xff0c;也可以不new&am…

flink Jobmanager metaspace oom 分析

文章目录 现象作业背景分析现象分析类卸载条件MAT 分析 解决办法flink 官方提示 现象 通过flink 页面提交程序&#xff0c;多次提交后&#xff0c;jobmanager 报metaspace oom 作业背景 用户代码是flink 代码Spring nacos 分析 现象分析 从现象来看肯定是因为有的类没有被…

Linux系统-前台任务组,后台任务组

文章目录 前台进程后台进程新命令jobsfg 【后台进程组序号】ctrlz组合键信号 和 bg命令ctrlz组合键信号bg 【后台进程组序号】 session会话此时我们关闭本次的会话&#xff0c;我们的后台进程是否也会退出呢&#xff1f; 总结 前台进程 在我们远程登录Linux服务器后&#xff0…

创建__init__()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在创建类后&#xff0c;可以手动创建一个__init__()方法。该方法是一个特殊的方法&#xff0c;类似Java语言中的构造方法。每当创建一个类的新实例时…

【AI界的狼人杀】人工智能“反图灵测试”实验

5月28日&#xff0c; AI Power Users、Unity 独立开发者&#xff1a;Tore Knabe 在其社交平台发布了一则名为《Reverse Turing Test Experiment with AIs》的视频&#xff0c;立马引发了热议。 视频中共出现了五位主要角色&#xff0c;“他们”分别是&#xff1a;亚里士多德&am…

961操作系统知识总结

部分图片可能无法显示&#xff0c;参考这里&#xff1a;https://zhuanlan.zhihu.com/p/701247894 961操作系统知识总结 一 操作系统概述 1. 操作系统的基本概念 重要操作系统类型&#xff1a;批处理操作系统(批量处理作业&#xff0c;单道批处理/多道批处理系统&#xff0c;用…

RabbitMQ-直连交换机(direct)使用方法

RabbitMQ-默认读、写方式介绍 RabbitMQ-发布/订阅模式 目录 1、概述 2、直连交换机 3、多重绑定 4、具体代码实现 4.1 生产者部分 4.2 消费者部分 5、运行代码 6、总结 1、概述 直连交换机&#xff0c;可以实现类似路由的功能&#xff0c;消息从交换机发送到哪个队列…

夜天之书 #98 Rust 程序库生态合作的例子

近期主要时间都在适应产品市场&#xff08;Product Marketing&#xff09;的新角色&#xff0c;不少想法还在酝酿和斟酌当中&#xff0c;于是文章输出没有太多时间来推敲和选题&#xff0c;只能保持每月发布相关的进展或一些零碎的思考。或许我可以恢复最早的模式&#xff0c;多…

YOLOv8改进(一)-- 轻量化模型ShuffleNetV2

文章目录 1、前言2、ShuffleNetV2代码实现2.1、创建ShuffleNet类2.2、修改tasks.py2.3、创建shufflenetv2.yaml文件2.4、跑通示例 3、碰到的问题4、目标检测系列文章 1、前言 移动端设备也需要既准确又快的小模型。为了满足这些需求&#xff0c;一些轻量级的CNN网络如MobileNe…

十_信号4-SIGCHLD信号

SIGCHLD信号 在学习进程控制的时候&#xff0c;使用wait和waitpid系统调用何以回收僵尸进程&#xff0c;父进程可以阻塞等待&#xff0c;也可以非阻塞等待&#xff0c;采用轮询的方式不停查询子进程是否退出。 采用阻塞式等待&#xff0c;父进程就被阻塞了&#xff0c;什么都干…

力扣83. 删除排序链表中的重复元素

Problem: 83. 删除排序链表中的重复元素 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义快慢指针fast、slow均指向head&#xff1b; 2.每次fast后移一位&#xff0c;当fast和slow指向的节点值不一样时&#xff0c;将slow.next指向fast同时使slow指向fast&#xff1b; 3…

MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType

一、开发方式 MyBatis-Dao层Mapper接口化开发 二、注意事项 1、Mapper接口与Mapper.xml映射文件要满足4个对应 &#xff08;1&#xff09;Mapper接口的全类名必须与Mapper映射文件中的namespace相同 &#xff08;2&#xff09;Mapper接口中的每一个方法名在Mapper映射文件…

回溯算法之电话号码字母组合

题目&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "2…

Java web应用性能分析之【jvisualvm远程连接云服务器】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 前面整理了java进程问题分析和分析工具&#xff0c;现在可以详细看看jvisualvm的使用&#xff0c;一般java进程都是部署云服务器&#xff0c;或者托管IDC机…