SpringBoot3笔记

简介:

springboot整合了springframework,整合了许多配置,让我们能够快速创建一个以springframework为基础的项目。

问题:

到目前为止,你已经学习了多种配置Spring程序的方式。但是无论使用XML、注解、Java配置类还是他们的混合用法,你都会觉得配置文件过于复杂和繁琐,让人头疼!

解决:

SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用(说明:SpringBoot底层是Spring),大多数 SpringBoot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术

SpringBoot总结:简化开发,简化配置,简化整合,简化部署,简化监控,简化运维

快速入门

父工程的pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <!-- springboot(将springboot提供的基础包做父工程) -->

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-parent</artifactId>

            <version>3.0.5</version>

    </parent>

    <groupId>com.atguigu</groupId>

    <artifactId>springboot-base-quick-01</artifactId>

    <version>1.0-SNAPSHOT</version>

    <!-- 导入对应的启动器 -->

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

    </dependencies>

</project>

启动类

/**

 * 创建一个启动类

 * 步骤:

 * 在该类上加上@SpringBootApplication代表此类是启动类

 *                该注解的作用:

 *                ①代表此类事配置类,

 *                ②自动加载配置 @EnableAutoConfiguration 自动加载其他配置类

 *                ③@ComponentScan 默认会扫描当前包/子包的注解

 * 在方法中通过 SpringApplication调用run()方法,传入当前类.class与args

 *                作用:

 *                ①创建ioc容器

 *                ②启动内置的web服务

 *                当运行该类时,自动创建ioc容器,启动tomcat服务器软件

 * 只要在启动类相同的包或子包下加的注解就会被自动扫描

 */

@SpringBootApplication//启动类

public class Main {

    public static void main(String[] args) {

        SpringApplication.run(Main.class,args);//自动创建ioc容器,启动tomcat服务器软件

    }

}

总结:

1. 为什么依赖不需要写版本?

    - 每个boot项目都有一个父项目`spring-boot-starter-parent`

    - parent的父项目是`spring-boot-dependencies`

    - 父项目 **版本仲裁中心**,把所有常见的jar的依赖版本都声明好了。

    - 比如:`mysql-connector-j`

在父工程中已经做了依赖管理,所以在导入依赖时就不需要写版本了。

2 启动器(starter)是什么?(整合web开发需要的所有依赖)

(我们的项目需要许多依赖web,servlet jackson等等,启动器会帮我们自动导好)

Spring Boot提供了一种叫做Starter的概念,它是一组预定义的依赖项集合,旨在简化Spring应用程序的配置和构建过程。Starter包含了一组相关的依赖项,以便在启动应用程序时自动引入所需的库、配置和功能。

主要作用如下:

1. 简化依赖管理

2. 自动配置

3. 提供约定优于配置

4. 快速启动和开发应用程序

5. 模块化和可扩展性

3 @SpringbootApplication的作用

@SpringBootApplication添加到启动类上,是一个组合注解,他的功效有具体的子注解实现!

@SpringBootApplication注解是Spring Boot框架中的核心注解,它的主要作用是简化和加速Spring Boot应用程序的配置和启动过程。

具体而言,@SpringBootApplication注解起到以下几个主要作用:

1. 自动配置:@SpringBootApplication注解包含了@EnableAutoConfiguration注解,

2. 组件扫描:@SpringBootApplication注解包含了@ComponentScan注解

3. 声明配置类:@SpringBootApplication注解本身就是一个组合注解,它包含了@Configuration注解

总的来说,@SpringBootApplication注解的主要作用是简化Spring Boot应用程序的配置和启动过程。它自动配置应用程序、扫描并加载组件,并将配置和启动类合二为一,简化了开发者的工作量,提高了开发效率。

统一配置管理  

 application.properties(统一文件):

 所有的配置文件都统一写在一个文件中,该文件的名称为application.properties或application.yml,且该文件必须放在src/main/resources目录下这是因为src/main/resources目录是Spring Boot默认的类路径(classpath),配置文件会被自动加载并可供应用程序访问。

注意:

①固定的key配置一些参数

②自定义key

代码举例:

application.properties文件:

#使用springboot提供的配置,修修改程序的参数,注意:key是固定的

server.servlet.context-path=/boot

#自定义配置

#如何读取引用配置文件:直接在controller类中声明接收该值的属性,然后用@value为其赋值即可

lq.name=刘清

lq.age=19

读取:

controller类

    @Value("${lq.name}")

    private String name;

    @Value("${lq.age}")

    private int age;

application.yaml配置介绍和使用

properties方式

web 设置服务器的端口号 项目根路径

key=value

出现的问题:

因为要为所有框架提供配置参数的位置,又要保证key不重复,所以key就会特别长-----------一般不推荐使用

推荐使用以.yml或.yaml结尾的application文件

yaml方式

#yaml是层次,可以继承的配置文件格式

#例如:

server:

  port: 8080

  servlet:

    context-path: /boot

lq:

  info:

    age;18 #注意:key:空格value

#集合配置

  gfs:

    - 高圆圆

    - 范冰冰

    - 二狗子

#yaml语法:

#  1. 数据结构用树形结构呈现,通过缩进来表示层级,

#  2. 连续的项目(集合)通过减号 ” - ” 来表示

#  3. 键值结构里面的key/value对用冒号 ” : ” 来分隔。

#  4. YAML配置文件的扩展名是yaml 或 yml

读取配置文件

读取方式和properties一致

#YAML格式相对于:properties文件具有更好的层次结构表示、自我描述性、注释支持、多行文本表示、复杂数据类型支持和更好的可读性。

批量配置文件读取

/**

 lq:

 info:

 password:123456   #注意:key:空格value

 username:liuqing

 gfs:

 - 高圆圆

 - 范冰冰

 - a

 - b

 * 读取配置文件的

 *   方式一:使用@value注解

 *     直接在属性上添加,注意:@value是为组件属性赋值的,所以该类一定要加入ioc容器

 *     ①@Value(key必须写全了)

 *     ②@Value只能读取单个值

 *   方式二:批量读取

 *   在实体类上添加一个@ConfigurationProperties(prefix = "lq.info")里面填通用的前缀

 *   优势:方便不用一个一个读取

 *              ②可以给集合类型赋值

 */

@Component

@Data

@ConfigurationProperties(prefix = "lq.info")

public class User {

    private String password;

    private String username;

    private List<String> gfs;

}

多环境配置与激活 

1. 属性文件分离:将应用程序的配置参数分离到不同的属性文件中,每个环境对应一个属性文件。例如,可以创建`application-dev.properties``application-prod.properties``application-test.properties`等文件。在这些文件中,可以定义各自环境的配置参数,如数据库连接信息、端口号等。然后,`application.properties`中通过`spring.profiles.active`属性指定当前使用的环境。Spring Boot会根据该属性来加载对应环境的属性文件,覆盖默认的配置。

2. YAML配置文件:与属性文件类似,可以将配置参数分离到不同的YAML文件中,每个环境对应一个文件。例如,可以创建`application-dev.yml`、`application-prod.yml`和`application-test.yml`等文件。在这些文件中,可以使用YAML语法定义各自环境的配置参数。同样,通过`spring.profiles.active`属性指定当前的环境,Spring Boot会加载相应的YAML文件。

例如:

其他文件名---------application-key.yml

application-dev.yml(开发)

spring:

  jdbc:

    datasource:

      driverClassName: com.mysql.cj.jdbc.Driver

      url: jdbc:mysql:///dev

      username: root

      password: root

application-test.yml(测试)

spring:

  jdbc:

    datasource:

      driverClassName: com.mysql.cj.jdbc.Driver

      url: jdbc:mysql:///test

      username: root

      password: root

application-prod.yml(生产)

spring:

  jdbc:

    datasource:

      driverClassName: com.mysql.cj.jdbc.Driver

      url: jdbc:mysql:///prod

      username: root

      password: root

环境激活

spring:

  profiles:

    active: dev(填的是文件名中的key)

注意;

如果设置了spring.profiles.active,并且和application有重叠属性,以active设置优先。

如果设置了spring.profiles.active,和application无重叠属性,application设置依然生效!

springmvc整合与配置

web相关配置

1.`server.port`: 指定应用程序的HTTP服务器端口号。

2. `server.servlet.context-path`: 设置应用程序的上下文路径。这是应用程序在URL中的基本路径。默认情况下,上下文路径为空。

3. `spring.mvc.view.prefix`和`spring.mvc.view.suffix`: 这两个属性用于配置视图解析器的前缀和后缀

4. `spring.resources.static-locations`: 配置静态资源的位置。默认情况下,Spring Boot会将静态资源放在classpath:/static目录下(故而一般不用配置)

5. `spring.http.encoding.charset`和`spring.http.encoding.enabled`: 这两个属性用于配置HTTP请求和响应的字符编码。

例如:

#springmvc相关的配置

#一般在server下设置

server:

  port: 80  #设置端口号,默认是8080

  servlet:

    context-path: /boot #设置项目根路径

spring:

  mvc:

    view: #视图解析器配置

      prefix: /WEB-INF/views/  #前缀名

      suffix: .jsp  #后缀名

  web:

    resources:

      static-locations: classpath:/webapp  #配置静态资源文件夹

      #一旦配置了,那么默认的静态资源文件夹就无法访问了

      #外部访问金泰资源的时候无需写静态资源文件夹(直接写文件名即可,要带上后缀)

静态资源处理:

在springboot中就定义了静态资源的默认查找路径

默认的静态资源路径为:

* *· classpath:/META-INF/resources/**

**· classpath:/resources/**

**· classpath:/static/**

**· classpath:/public/**

我们只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。 我们习惯会把静态资源放在classpath:/static/ 目录下。在resources目录下创建index.html文件

springbootspringmvc中的东西还是正常使用

springmvc的整合还是创建一个配置类实现WebMvcConfigurer

拦截器,全局异常类像之前一样创建;

druid池与兼容性处理

所需要导入的依赖:

            <!--  web开发的场景启动器 -->

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-web</artifactId>

            </dependency>

            <!-- 数据库相关配置启动器 jdbctemplate 事务相关-->

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-jdbc</artifactId>

            </dependency>

            <!-- druid启动器的依赖  -->

            <dependency>

                <groupId>com.alibaba</groupId>

                <artifactId>druid-spring-boot-3-starter</artifactId>

                <version>1.2.18</version>

            </dependency>

            <!-- 驱动类-->

            <dependency>

                <groupId>mysql</groupId>

                <artifactId>mysql-connector-java</artifactId>

                <version>8.0.28</version>

            </dependency>

            <dependency>

                <groupId>org.projectlombok</groupId>

                <artifactId>lombok</artifactId>

                <version>1.18.28</version>

            </dependency>

所配置的信息:application.yaml文件

spring:

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource  #使用druid连接池

#    username: 账号

#    password: 密码  #如果是springboot2整合druid连接池,可使用此信息配置账号和密码,springboot3不行

      # Druid的其他属性配置 springboot3整合情况下,数据库连接信息必须在Druid属性下!

    druid:

        url: jdbc:mysql://localhost:3306/day01

        username: root

        password: root

        driver-class-name: com.mysql.cj.jdbc.Driver

        # 初始化时建立物理连接的个数

        initial-size: 5

        # 连接池的最小空闲数量

        min-idle: 5

        # 连接池最大连接数量

        max-active: 20

        # 获取连接时最大等待时间,单位毫秒

        max-wait: 60000

        # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

        test-while-idle: true

        # 既作为检测的间隔时间又作为testWhileIdel执行的依据

        time-between-eviction-runs-millis: 60000

        # 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)

        min-evictable-idle-time-millis: 30000

        # 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)

        validation-query: select 1

        # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true

        test-on-borrow: false

        # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true

        test-on-return: false

        # 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。

        pool-prepared-statements: false

        # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100

        max-pool-prepared-statement-per-connection-size: -1

        # 合并多个DruidDataSource的监控数据

        use-global-data-source-stat: true

测试代码

需求:查询t_emp表中的所有数据

实体类:Employee略

controller

@Controller

@ResponseBody

@RequestMapping("emp")

public class EmployeeController {

    @Autowired

    private JdbcTemplate jdbcTemplate;

    @GetMapping("list")

    public List<Employee> list(){

        //数据库

        String sql="select * from t_emp";

        List<Employee> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class));

        return query;

    }

}

出现问题:

通过源码分析,druid-spring-boot-3-starter目前最新版本是1.2.18,虽然适配了SpringBoot3,但缺少自动装配的配置文件,

解决

需要手动在resources目录下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,文件内容如下!

                    com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure

mybatis整合与配置

mybatis整合步骤:

1. 导入依赖:在您的Spring Boot项目的构建文件(如pom.xml)中添加MyBatis和数据库驱动的相关依赖。例如,如果使用MySQL数据库,您需要添加MyBatis和MySQL驱动的依赖。

2. 配置数据源:在`application.properties`或`application.yml`中配置数据库连接信息,包括数据库URL、用户名、密码、mybatis的功能配置等。

3. 创建实体类:创建与数据库表对应的实体类。

4. 创建Mapper接口:创建与数据库表交互的Mapper接口。

5. 创建Mapper接口SQL实现: 可以使用mapperxml文件或者注解方式

6. 创建程序启动类

7. 注解扫描:在Spring Boot的主应用类上添加`@MapperScan`注解,用于扫描和注册Mapper接口

8. 使用Mapper接口:在需要使用数据库操作的地方,通过依赖注入或直接实例化Mapper接口,并调用其中的方法进行数据库操作。

为什么此时的mapper接口与mapper.xml文件的包结构可以不一样:

之前是批量扫描,按照包去找对应的mapper接口与mapper.xml文件

在springboot场景下会分开配,会在配置文件中指定mapper.xml文件的配置;而接口的位置,会在启动类上用注解扫描。

代码举例:

Application.xml文件

server:

  address: 0.0.0.0  # 允许所有IP访问

# druid连接池

spring:

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource

    druid:

      url: jdbc:mysql://localhost:3306/mybatis-example

      username: root

      password: abc123LQ

      driver-class-name: com.mysql.cj.jdbc.Driver

#mybatis-彻底抛弃了mybatis-config.xml文件

#mapperxml文件的配置    setting的配置     别名的设置

mybatis:

  mapper-locations: classpath:/mappers/*.xml  #指定mapper.xml文件的位置

  type-aliases-package: com.atguigu.pojo  #给类起别名的设置

  configuration:

    map-underscore-to-camel-case: true  #开启驼峰式

    auto-mapping-behavior: full   #自动字段映射

    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl  #日志输出

实体类Employee:略

Mapper.xml文件(EmployeeMapper.xml):lue

Controller(EmployeeController类):略

启动类

@SpringBootApplication

@MapperScan("com.atguigu.mapper") //指定mapper接口所在的位置,会自动将所有mapper接口的代理对象放到ioc容器

public class Main {

    public static void main(String[] args) {

        SpringApplication.run(Main.class,args);

        System.out.println("hello world!");

    }

}

aop与tx整合

tx整合:

原来:

     * 给方法添加事务的操作

     *        0 导入JDBC的依赖

     *        1 选定我们需要的事务管理器的实现类,在配置类中创建该类的对象,使用注解的方法将该类添加到ioc

     *                         注意:该组件需要引入连接池的组件

     *        2 在配置类上加上 @EnableTransactionManagement 表示开启事务注解

     *        3 在我们想要添加事务的方法上加上 @Transactional那么该方法就有事务了

 

现在(使用spring-boot后):

因为添加了jbdc的依赖;而SpringBoot项目会自动配置一个 DataSourceTransactionManager,

所以我们只需在方法(或者类)加上 @Transactional 注解,就自动纳入 Spring 的事务管理了,

也不需要在配置类加@EnableTransactionManagement//开启事务注解的支持

     * 给方法添加事务的操作

     *        0 导入JDBC的依赖   

     *        1 选定我们需要的事务管理器的实现类,在配置类中创建该类的对象,使用注解的方法将该类添加到ioc(可以省略)

     *                         注意:该组件需要引入连接池的组件

     *        2 在配置类上加上 @EnableTransactionManagement 表示开启事务注解(可以省略)

     *        3 在我们想要添加事务的方法上加上 @Transactional那么该方法就有事务了

实现代码:

service

@Service

public class EmployeeService {

    @Autowired

    private EmployeeMapper employeeMapper;

    @Transactional

    public void delete( ){

        int rows=employeeMapper.delete(1);

        System.out.println("rows = " + rows);

        int i=1/0;

    }

}

controller

@Controller

@ResponseBody

@RequestMapping("/emp")

public class EmployeeController {

    @Autowired

    private EmployeeMapper employeeMapper;

    @Autowired

    private EmployeeService employeeService;

    @GetMapping

    public List<Employee> query(){

        employeeService.delete();

        return null;

    }

}

aop整合:

原来:

定义一个增强类(该类要加入ioc),在该类中定义一些方法(通知用@Before/@After…修饰),在用切点表达式指明改通知要作用在那些方法上(execution))

现在:

只需要导入依赖;然后直接使用aop注解即可。

不用在配置类添加@EnableAspectJAutoProxy//开启aspectj注解

代码举例:

@Component

@Aspect

public class LogAdvice {

    @Before("execution(* com..service.*.*(..))")

    public void before(JoinPoint point){

        String simpleName = point.getTarget().getClass().getSimpleName();

        String name = point.getSignature().getName();

        System.out.println("name = " + name);

        System.out.println("simpleName = " + simpleName);

    }

}

直接测试:成功

Springboot3项目打包和运行

添加打包插件:

> 在Spring Boot项目中添加`spring-boot-maven-plugin`插件是为了支持将项目打包成可执行的可运行jar包。如果不添加`spring-boot-maven-plugin`插件配置,使用常规的`java -jar`命令来运行打包后的Spring Boot项目是无法找到应用程序的入口点,因此导致无法运行。

<!--    SpringBoot应用打包插件-->

<build>

    <plugins>

        <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

        </plugin>

    </plugins>

</build>

执行打包:

Clean-package

 

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

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

相关文章

DeepSeek和文心一言的区别

文章目录 1.开发公司&#xff1a;2.应用场景&#xff1a;3.训练数据&#xff1a;4.模型架构&#xff1a;5.技术特点&#xff1a;6.语言风格&#xff1a;7.开源性&#xff1a;8.界面与用户体验&#xff1a; 1.开发公司&#xff1a; DeepSeek 由杭州深度求索人工智能基础技术研究…

Windows 10 安装Mysql 8

安装准备 下载 MySQL Windows ZIP版&#xff08;无安装程序&#xff09;&#xff1a; 进入官网&#xff1a;https://dev.mysql.com/downloads/mysql/ 选择 Windows → 下载 ZIP Archive&#xff0c;例如&#xff1a; mysql-8.0.34-winx64.zip 如果你的电脑没有安装 VC Redi…

ARM分拣机vs传统PLC:实测数据揭示的4倍效率差

在苏州某新能源汽车零部件仓库&#xff0c;凌晨3点的分拣线上依然灯火通明。8台搭载ARM Cortex-A72处理器的智能分拣机正在以每秒3件的速度处理着形状各异的电池包组件&#xff0c;它们通过MES系统接收订单信息&#xff0c;自主规划最优路径&#xff0c;将不同规格的零部件精准…

使用python访问mindie部署的vl多模态模型

说明 今天使用mindie1.0部署了qwen2_7b_vl模型&#xff0c;测试过程出现一些问题&#xff0c;这里总结下。 问题1&#xff1a;transformers版本太低 报错信息&#xff1a; [ERROR] [model_deploy_config.cpp:159] Failed to get vocab size from tokenizer wrapper with ex…

vscode 跳转失败之c_cpp_properties.json解析

{"configurations": [{"name": "Linux", // 配置名称&#xff0c;对应当前平台&#xff0c;VS Code 中可选"includePath": ["${workspaceFolder}/**", // 包含当前工作区下所有文件夹的头文件&#xff08;递归&…

飞速(FS)解决方案验证实验室搬迁升级,赋能客户技术服务

飞速&#xff08;FS&#xff09;解决方案验证实验室近日顺利完成搬迁升级&#xff0c;标志着飞速&#xff08;FS&#xff09;在解决方案可行性验证、质量保障以及定制化需求支持方面迈上新台阶&#xff0c;进一步提升了产品竞争力和客户信任度。 全新升级的实验室定位为技术验证…

安装kerberos认证的cdh环境

1、服务端安装 1.1 安装wget yum -y install wget 由于本地已安装过wget&#xff0c;所以显示Nothing to do 1.2 进入 home 目录 cd /home 1.3 下载centos6.7.iso文件&#xff0c;并挂载 wget https://archive.kernel.org/centos-vault/6.7/isos/x86_64/CentOS-6.7-x86_64…

MySQL基础 [六] - 内置函数+复合查询+表的内连和外连

内置函数一般要用select调用 内置函数 日期函数 current_date函数 current_date函数用于获取当前的日期。如下&#xff1a; current_time函数 current_time函数用于获取当前的时间。如下&#xff1a; now函数 now函数用于获取当前的日期时间。如下&#xff1a; date函数 dat…

CS内网渗透 - 如何通过冰蝎 Webshell 上线 Weblogic 服务器到 Cobalt Strike 并绕过杀软检测(360、火绒)?

目录 1. 冰蝎连接上 Weblogic 服务器如何上线到 Cobalt Strike 2. 服务器安装杀毒工具如何绕过杀软上线到 Cobalt Strike 2.1 杀软对 Webshell 命令执行的检测及绕过 2.2 杀软对 Cobalt Strike 上线木马的检测及绕过 2.3 杀软对这两方面的限制及综合绕过 3. 如何生成免杀…

[ctfshow web入门] web10

前置知识 cookie Cookie是网站存储在浏览器中的小数据片段&#xff0c;用于识别用户、保持登录状态或记住偏好设置。 也就是说&#xff0c;我以会员A的身份登录了网站&#xff0c;网站会发送一段cookie(会员卡)给我&#xff0c;上面写着会员卡A&#xff0c;下一次我再访问&am…

蓝桥杯:日期统计

文章目录 问题描述解法一递归解法二&#xff1a;暴力破解 问题描述 首先我们要了解什么是子序列&#xff0c;就是一个序列之中可以忽略元素但是不能改变顺序之后获得的序列就叫做子序列。 如"123"就是"11234"的子序列而不是"11324"的子序列 解法…

蓝桥杯 C/C++ 组历届真题合集速刷(一)

一、1.单词分析 - 蓝桥云课 &#xff08;模拟、枚举&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std;int main() {string s;cin>>s;unordered_map<char,int> mp;for(auto ch:s){mp[ch];}char result_charz;int max_count0;fo…

重塑知识的引擎:人工智能如何改变知识的生产与传播

一、引言&#xff1a;知识的边界正在被人工智能重构 千百年来&#xff0c;人类对于“知识”的获取方式一直遵循着某种路径依赖&#xff1a;感知现实 → 归纳总结 → 文字表达 → 教育传承 → 学术沉淀。这一过程复杂而缓慢&#xff0c;需要经过代际的努力才能实现知识的积累与…

list的底层:

我们之前讲解了list&#xff0c;今天我们来看一下list的底层&#xff1a; list底层是一个双向带头循环的链表&#xff0c;之前我们学习数据结构的时候&#xff0c;我们就学过。 迭代器的封装&#xff1a; 我们看这个图片&#xff0c;我们的链表的指针可以达到链表的迭代器能力…

遵循IEC62304YY/T0664:确保医疗器械软件生命周期合规性

一、EC 62304与YY/T 0664的核心定位与关系 IEC 62304&#xff08;IEC 62304&#xff09;是国际通用的医疗器械软件生命周期管理标准&#xff0c;适用于所有包含软件的医疗器械&#xff08;如嵌入式软件、独立软件、移动应用等&#xff09;&#xff0c;其核心目标是确保软件的安…

【next函数python】`next()`函数

在Python中&#xff0c;next()函数结合生成器表达式用于高效地查找序列中第一个符合条件的元素。以下是如何理解和编写类似代码的步骤&#xff1a; 1. 生成器表达式 生成器表达式&#xff08;如 (e for e in energy3 if e ! 0)&#xff09;是一种惰性计算的迭代结构。它不会一…

[创业之路-364]:穿透表象:企业投资的深层逻辑与误区规避

前言&#xff1a; 透过现象看本质 企业一生与人生相似 看企业如同看人 三岁看大&#xff0c;七岁看老 三十年河东&#xff0c;三十年河西 企业也有品行、文化、气质、性格、赚钱、生命周期与赚钱曲线 投资公司的目的是未来赚钱&#xff0c;赚未来赚钱。投资创业中的企业主要看…

【C++】Stack Queue 仿函数

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲STL中的stack和queue。因为前面我们已经有了string、vector和list的学习基础&#xff0c;所以这篇文章主要关注一些stack和queue的细节问题&#xff0c;以及了解一下deque&#xff08;缝合怪&#xff09;和priority_queue &am…

[实战] 天线阵列波束成形原理详解与仿真实战(完整代码)

天线阵列波束成形原理详解与仿真实战 1. 引言 在无线通信、雷达和声学系统中&#xff0c;波束成形&#xff08;Beamforming&#xff09;是一种通过调整天线阵列中各个阵元的信号相位和幅度&#xff0c;将电磁波能量集中在特定方向的技术。其核心目标是通过空间滤波增强目标方…

深圳漫云科技户外公园实景儿童剧本杀小程序:开启亲子互动新纪元

在亲子娱乐需求日益增长的当下&#xff0c;深圳漫云科技推出的户外公园实景儿童剧本杀小程序&#xff0c;凭借其创新玩法与丰富功能&#xff0c;为亲子家庭带来全新体验。该小程序融合户外探险、角色扮演与逻辑推理&#xff0c;不仅满足孩子好奇心&#xff0c;更提升其思维能力…