spring框架(SSM)

news2025/2/28 12:11:24

Spring Framework系统架构

Spring框架是一个开源的企业级Java应用程序框架,它为开发Java应用程序提供了一个全方位的解决方案。Spring的核心优势在于它的分层架构,这使得开发者可以灵活选择使用哪些模块而无需引入不需要的依赖。下面是Spring框架的一些关键知识点总结:

核心容器(Core Container)

  • Spring Core:是Spring框架的基础,提供IoC(Inverse of Control,控制反转)和DI(Dependency Injection,依赖注入)功能,管理Bean的生命周期和配置。
  • BeanFactory:是最基本的IoC容器,负责实例化、配置和管理Bean对象。
  • ApplicationContext:是BeanFactory的扩展,提供了更多高级特性,如事件传递、国际化支持、载入资源文件等。

核心容器(Core Container)是Spring框架的基础部分,它包含了Spring最核心的功能模块,是构建其他功能模块的基础。核心容器主要由以下几个部分组成:

1. Spring Core

  • IoC(Inverse of Control,控制反转):这是Spring框架的核心思想,它倡导将对象的创建和依赖关系的管理交由Spring容器来处理,而不是在代码中手动创建对象和管理依赖。这一机制减轻了组件之间的耦合,提高了系统的灵活性和可维护性。
  • DI(Dependency Injection,依赖注入):是实现IoC的一种具体方式,Spring容器通过读取配置元数据(如XML配置文件或注解),自动将依赖对象注入到需要它们的组件中。支持构造器注入、setter方法注入等多种注入方式。
  • BeanFactory:是Spring中最基础的IoC容器接口,负责实例化、配置和管理Bean。它提供了获取Bean、管理Bean依赖关系的基本功能。
  • ApplicationContext:是BeanFactory的高级版本,除了提供BeanFactory的所有功能外,还添加了对国际化的支持、事件传播、资源加载等企业级功能。ApplicationContext是大多数Spring应用的首选容器。

2. Bean的生命周期管理

  • Spring负责Bean的创建、初始化、装配以及销毁等整个生命周期的管理。开发者可以通过实现特定的接口或者使用注解来定制Bean的初始化和销毁过程,例如@PostConstruct@PreDestroy注解,或是通过实现InitializingBeanDisposableBean接口。

3. 资源管理

  • Spring提供了资源抽象接口,如Resource,用于统一访问不同类型的外部资源,如文件系统资源、类路径资源、URL资源等。

4. 事件监听

  • Spring支持发布/订阅模型的事件机制,允许在 ApplicationContext 中注册监听器来监听特定的事件,增强了应用的松耦合性和灵活性。

5. SpEL(Spring Expression Language)

  • SpEL是Spring框架内置的一个强大的表达式语言,用于在运行时查询和操作对象图。它支持访问和操作Bean的属性、方法调用、算术运算、逻辑运算等多种功能,常用于配置文件中进行复杂的表达式计算。

综上所述,核心容器是Spring框架的基石,通过其提供的IoC和DI能力,开发者可以构建松耦合、易于测试和管理的应用程序。

AOP(Aspect Oriented Programming,面向切面编程)

  • AOP允许将横切关注点(如日志记录、事务管理)从核心业务逻辑中分离出来,通过“切面”来模块化这些关注点。Spring AOP基于代理模式实现,支持JDK动态代理和CGLIB代理。

AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它将横切关注点(Cross-Cutting Concerns)从业务逻辑中分离出来,通过一种称为“切面”(Aspects)的机制集中进行处理。横切关注点是指那些遍布于应用各处的功能,比如日志记录、安全检查、事务管理等,这些功能通常会分散在多个模块中重复出现。

关键概念

  1. 切面(Aspect):封装了横切关注点的模块,包含了执行这些关注点的代码。例如,一个日志记录的切面会包含所有与日志记录相关的逻辑。

  2. 连接点(Joinpoint):在程序执行过程中某个特定的点,比如方法的调用或者异常的抛出,可以被切面所拦截。

  3. 切入点(Pointcut):定义了切面应该在哪些连接点上执行的规则。通过表达式来匹配感兴趣的连接点,例如,匹配所有以getset开头的方法。

  4. 通知(Advice):切面中的实际操作,即在特定的连接点上执行的代码。有多种类型的通知,如:

    • 前置通知(Before):在目标方法调用之前执行。
    • 后置通知(After):在目标方法调用之后执行,无论方法是否成功完成。
    • 返回通知(AfterReturning):仅在目标方法成功完成后执行。
    • 异常通知(AfterThrowing):在目标方法抛出异常后执行。
    • 环绕通知(Around):包裹着目标方法调用,在方法调用前后都可以执行自定义的行为。
  5. 织入(Weaving):将切面应用到目标对象上的过程,可以在编译期、类加载期或运行期进行。

Spring AOP 实现

Spring框架通过代理模式(JDK动态代理或CGLIB代理)实现AOP。开发者可以通过XML配置或注解(如@Aspect@Before@After@AfterReturning@AfterThrowing@Around等)来定义切面和通知。

优势

  • 模块化:通过将横切关注点分离,使得业务逻辑更加清晰,便于维护。
  • 复用性:切面可以跨多个对象应用,减少代码重复。
  • 灵活性:修改切面逻辑不影响业务代码,易于调整和优化横切关注点的实现。

总之,AOP为解决企业级应用中的横切关注点提供了一种高效、灵活的手段,是Spring框架中不可或缺的一部分。

数据访问/集成(Data Access/Integration)

  • JDBC抽象:提供了一个JDBC的抽象层,简化了数据库访问,并能有效管理数据库资源。
  • ORM(Object-Relational Mapping)集成:包括对Hibernate、JPA(Java Persistence API)等ORM工具的支持。
  • 事务管理:支持编程式和声明式事务管理,能够与JDBC、JTA及各种ORM框架无缝集成。

数据访问/集成(Data Access/Integration)是Spring框架的重要组成部分,它为Java应用提供了与数据源交互的能力,包括传统的关系型数据库和现代的NoSQL数据库等。这一层主要包括以下几个关键模块:

1. JDBC抽象和DAO支持

  • JdbcTemplate:Spring提供了一个JDBC模板类,简化了使用JDBC的操作,如查询、更新、批处理等,同时自动管理资源,如连接和语句的关闭,减少了样板代码。
  • NamedParameterJdbcTemplate:在JdbcTemplate的基础上增加了命名参数支持,使SQL语句更易读且减少SQL注入风险。
  • DAO支持:Spring提供了一系列的DAO(Data Access Object)支持类和模板,帮助开发者更容易地编写数据访问层代码,同时支持事务管理。

2. ORM集成

  • JPA(Java Persistence API):Spring通过Spring Data JPA项目提供对JPA规范的完整支持,简化了数据访问层的开发,支持实体映射、Repository模式等。
  • Hibernate:Spring对Hibernate提供了良好的集成,包括事务管理、Session管理等,使得在Spring应用中使用Hibernate变得更加简单。
  • MyBatis:虽然不是直接由Spring提供,但Spring框架通过MyBatis-Spring项目实现了与MyBatis的紧密集成,支持事务管理和依赖注入。

3. 对象-关系映射(ORM)工具模型

  • 这些工具(如Hibernate、JPA实现、MyBatis)提供了将对象模型映射到关系型数据库表的能力,以及从数据库查询结果重建对象模型的功能,大大简化了数据库操作的复杂度。

4. 事务管理

  • PlatformTransactionManager:Spring定义了一个平台无关的事务管理接口,针对不同的持久化技术提供了具体的实现,如JDBC的DataSourceTransactionManager、JPA的JpaTransactionManager、Hibernate的HibernateTransactionManager等。
  • 支持编程式和声明式事务管理。编程式事务管理需要在代码中显式调用开始、提交或回滚事务;而声明式事务管理则通过@Transactional注解或在配置文件中定义事务规则,让Spring自动管理事务边界。

5. 数据源和连接池

  • Spring提供了对多种数据源的支持,包括但不限于Apache Commons DBCP、C3P0、HikariCP等,并且能够方便地与这些连接池集成,以提高数据库访问性能。

通过这些组件,Spring的数据访问/集成层极大地简化了数据访问层的开发工作,提高了应用的可维护性和扩展性,同时也保证了应用在处理数据时的一致性和可靠性。

Web

  • Spring MVC:是一个基于Servlet的Web框架,用于构建Web应用。它提供了一个清晰的角色分离模型,包括DispatcherServlet(前端控制器)、Model、View和Controller,支持RESTful风格的请求处理。
  • Spring WebFlux:是Spring 5引入的一个非阻塞的、响应式的Web框架,适用于异步和事件驱动的服务端编程模型。

在Spring框架中,Web层是专门设计来支持Web应用程序开发的部分,它为创建动态网页和Web服务提供了丰富的功能。Spring Web层主要包括两个主要的MVC框架:Spring MVC和Spring WebFlux。

1. Spring MVC(Model-View-Controller)

  • DispatcherServlet:作为前端控制器,接收HTTP请求,并根据请求分发给合适的处理器(Controller)。
  • Controller:处理HTTP请求,执行业务逻辑,并返回逻辑视图名或直接返回响应体(如JSON)。
  • HandlerMapping:负责将请求映射到具体的Controller和处理器方法上。
  • ViewResolver:根据逻辑视图名解析出实际的视图技术(如JSP、Thymeleaf等),渲染视图并返回给客户端。
  • 模型数据(Model):在Controller中准备的数据,用于填充视图。
  • 支持RESTful风格:通过注解(如@RestController@PathVariable@RequestBody等)轻松构建RESTful Web服务。

2. Spring WebFlux

  • 专为响应式编程设计的非阻塞Web框架,适用于异步和事件驱动的服务端应用。
  • 基于Reactor库,利用背压(Backpressure)机制处理高并发场景。
  • 支持两种编程模型:基于注解的控制器(类似Spring MVC)和功能性端点(通过函数式编程定义路由)。
  • 服务器兼容性广,不仅限于传统的Servlet容器,还支持Netty、Undertow等高性能服务器。

共享特性

无论是Spring MVC还是Spring WebFlux,都共享以下一些重要特性:

  • 统一异常处理:通过@ExceptionHandler注解或实现HandlerExceptionResolver接口,集中处理全局或特定控制器的异常。
  • 数据绑定与验证:Spring提供了强大的数据绑定机制,能够自动将请求参数绑定到方法参数上,并支持JSR 303/JSR 349进行数据验证。
  • 拦截器(Interceptor)与过滤器(Filter):提供了在请求处理前后执行自定义逻辑的能力,拦截器更贴近Spring MVC流程,过滤器则位于Servlet容器级别。
  • 模板引擎支持:Spring无缝集成多种视图模板引擎,如Thymeleaf、FreeMarker、Velocity等,便于视图层的开发。

Spring的Web层设计充分考虑了现代Web应用的需求,无论是传统的同步请求处理,还是新兴的响应式编程模型,都能提供高效、灵活的解决方案。

Spring Boot

一些常见面试题:

  • Spring Boot旨在简化Spring应用的初始搭建以及开发过程,通过提供默认配置来快速创建独立运行的、生产级别的基于Spring的应用程序。它集成了自动配置、起步依赖、Actuator监控等特性,极大地提高了开发效率。

Spring Boot是Spring家族中的一个重量级成员,它旨在简化Spring应用程序的初始搭建和开发过程,使得开发者能够快速创建独立运行、生产就绪的Spring应用程序。Spring Boot的关键特点和优势包括:

1. 自动配置(Auto-Configuration)

  • Spring Boot通过自动配置机制,根据项目依赖的jar包自动设置Spring框架的相关配置,从而大大减少了XML配置文件的需要,甚至可以做到“零配置”。

2. 起步依赖(Starter Dependencies)

  • 提供一系列预定义的“起步依赖”,这些依赖本质上是一组Maven或Gradle坐标,包含了启动和运行特定功能所需的所有依赖项。例如,添加spring-boot-starter-web依赖即可开始构建Web应用,无需手动添加每个相关库。

3. 内嵌式容器

  • Spring Boot应用默认包含了Tomcat、Jetty或Undertow等内嵌式Web服务器,这意味着应用可以被打包成独立的jar文件,直接通过java -jar命令运行,无需部署到外部应用服务器。

4. Actuator

  • 提供了一组端点(Endpoints),用于暴露应用运行时信息,如健康检查、metrics监控、环境配置信息等,便于运维和监控。

5. 外部化配置

  • 支持从多种来源(如application.properties/yaml文件、环境变量、命令行参数等)读取配置,便于在不同环境间切换配置。

6. Spring Initializr

  • Spring Boot项目提供了一个在线的项目生成器(Spring Initializr),开发者只需选择所需的依赖,即可快速生成项目骨架代码,进一步加速开发流程。

7. DevTools

  • Spring Boot DevTools提供了额外的开发时特性,如自动重启应用、热部署、LiveReload等,提高了开发效率。

8. 异步编程支持

  • Spring Boot原生支持异步处理,包括对CompletableFuture的支持,以及与Spring WebFlux的集成,便于构建高性能、响应式的Web服务。

9. 安全性

  • Spring Boot提供了开箱即用的安全配置,通过简单的配置即可启用基本的安全特性,如基本认证、OAuth2等。

Spring Boot凭借其简化配置、快速启动、生产就绪等特点,已经成为现代Java微服务和云原生应用开发的首选框架。它降低了Spring应用的入门门槛,让开发者能够更加专注于业务逻辑的实现。

Spring Security

  • 提供了一套全面的安全解决方案,支持认证(Authentication)和授权(Authorization),保护Web应用程序不受攻击。

Spring Security是一个强大的、高度可定制的身份验证和访问控制框架,它是Spring家族的一部分,专门设计用于为基于Spring的应用程序提供安全服务。Spring Security的核心功能和特点包括:

1. 认证(Authentication)

  • Spring Security支持多种认证方式,包括基本的用户名/密码认证、LDAP、JWT(JSON Web Tokens)、OAuth2、OpenID Connect等。它提供了一个灵活的认证架构,允许开发者轻松地集成自定义认证机制。

2. 授权(Authorization)

  • 支持多种授权策略,如基于角色的访问控制(Role-Based Access Control, RBAC)、访问决策管理器等,可以细粒度地控制用户对资源的访问权限。

3. CSRF防护(Cross-Site Request Forgery Protection)

  • 自动集成CSRF防护机制,保护应用免受跨站请求伪造攻击。

4. 安全上下文(Security Context)

  • 维护用户的登录状态和安全信息,使得安全相关的决策可以在应用的任何地方一致且方便地执行。

5. 会话管理(Session Management)

  • 提供了会话固定攻击防护、会话过期、并发会话控制等高级会话管理功能。

6. Spring MVC集成

  • 无缝集成Spring MVC,可以很容易地为RESTful API和传统的Web应用添加安全控制。

7. 安全HTTP头(Secure HTTP Headers)

  • 自动配置以确保使用安全的HTTP头部,如X-Content-Type-Options、X-XSS-Protection、Content-Security-Policy等,增强应用安全性。

8. 过滤器链(Filter Chain)

  • 基于Servlet过滤器的设计模式,提供高度灵活的请求处理流程,允许开发者自定义安全处理逻辑。

9. 密码编码(Password Encoding)

  • 支持多种密码编码策略,并鼓励使用强密码存储策略,如BCrypt和PBKDF2。

10. 测试支持

  • 提供了测试支持,使得在开发阶段就能方便地对安全功能进行测试,确保应用的安全性。

Spring Security的灵活性和强大功能使其成为构建安全Web应用的首选框架,无论是简单的认证需求还是复杂的企业级安全解决方案,都能找到合适的配置和扩展方式。

Spring Cloud

  • 为开发云原生应用提供了一系列框架和服务。它基于Spring Boot,实现了微服务架构中的配置管理、服务发现、断路器、智能路由、微代理、控制总线等一系列分布式系统模式。

Spring Cloud是一系列框架的集合,用于帮助开发者在分布式系统(特别是微服务架构)中快速构建云应用。它基于Spring Boot,提供了众多开箱即用的解决方案,简化了服务发现、配置管理、智能路由、断路器、微代理、控制总线等微服务架构中的常见问题。以下是Spring Cloud的关键组件和功能:

1. 服务发现(Service Discovery) - Eureka / Consul / ZooKeeper

  • Eureka:Netflix开发的服务发现组件,支持服务注册与发现。
  • Consul 和 ZooKeeper:除了服务发现,还提供了键值存储、多数据中心支持等功能。

2. 配置中心(Config Server & Config Client)

  • Spring Cloud Config:支持分布式配置管理,允许从Git、SVN等存储库中读取配置,并动态刷新应用配置。

3. 路由与负载均衡 - Spring Cloud Gateway / Zuul

  • Spring Cloud Gateway:第二代API网关,基于Spring 5和Project Reactor,提供更强大的路由与过滤功能。
  • Zuul:第一代API网关,由Netflix开发,主要用于路由和过滤请求。

4. 断路器 - Hystrix / Resilience4j

  • Hystrix:Netflix的库,通过断路器模式防止服务雪崩效应,现已进入维护模式。
  • Resilience4j:轻量级容错库,提供了与Hystrix类似的断路器、重试、限流等功能,更适合Java 8及更高版本。

5. 消息总线 - Spring Cloud Bus

  • 用于在分布式系统中传播状态变化,如配置更新事件,支持RabbitMQ、Kafka等消息中间件。

6. 分布式事务 - Spring Cloud Sleuth / Zipkin

  • Spring Cloud Sleuth:用于收集服务间的跟踪信息,为分布式系统提供追踪解决方案。
  • Zipkin:一个分布式跟踪系统,用于收集和分析Sleuth产生的跟踪数据,帮助诊断服务间的调用问题。

7. 客户端负载均衡 - Ribbon / LoadBalancer

  • Ribbon:Netflix的客户端侧负载均衡器,尽管已不再积极开发,但仍被广泛使用。
  • Spring Cloud LoadBalancer:是Spring Cloud对客户端负载均衡的新推荐,更轻量,与Ribbon相比,它直接依赖于Load Balancer SPI,简化了配置。

8. API聚合 - Spring Cloud OpenFeign / Feign

  • OpenFeign:基于Feign的声明式HTTP客户端,简化了服务间调用的接口定义与实现。

9. 安全 - Spring Cloud Security / OAuth2

  • 集成了OAuth2协议,支持安全的微服务间通信和对外提供安全的API访问。

10. 事件驱动 - Spring Cloud Stream / Spring Cloud Function

  • Spring Cloud Stream:为消息驱动的微服务提供抽象,简化消息中间件的集成。
  • Spring Cloud Function:支持无服务器功能,便于在云平台上运行函数式微服务。

Spring Cloud通过上述组件和功能,提供了一套全面的解决方案,帮助开发者快速构建云原生应用,实现了微服务架构下的服务治理和自动化配置,大大降低了微服务应用的开发和运维复杂度。

Test

  • Spring框架还包含了一个测试模块,支持JUnit和TestNG进行单元测试和集成测试,提供了模拟对象(Mock Objects)等功能,简化了在Spring环境下进行测试的过程。

Spring框架为Java应用程序的测试提供了丰富的支持,旨在简化和加速单元测试及集成测试的编写和执行过程。Spring Test模块主要关注以下方面:

1. Spring TestContext Framework

  • 核心概念:这是一个通用的测试上下文框架,用于为集成测试和单元测试提供一致的配置和管理测试环境。它支持注解驱动的测试配置,如@ContextConfiguration@RunWith(SpringRunner.class)(或JUnit 5中的@ExtendWith(SpringExtension.class))等。

2. Spring MVC测试

  • 提供了模拟HTTP请求和响应的能力,可以直接测试Spring MVC控制器(Controllers),无需启动完整的Web服务器。这包括MockMvc类,它允许你发起GET、POST等HTTP请求并验证响应。

3. Spring WebFlux测试

  • 对于反应式应用程序,提供了WebTestClient,这是一个非阻塞的、功能丰富的客户端,用于测试WebFlux应用,支持验证响应状态、内容、标题等。

4. 数据库测试支持

  • 嵌入式数据库:Spring Test支持使用嵌入式数据库(如H2、HSQLDB、Derby)进行集成测试,可以在每次测试前自动创建和销毁数据库,确保测试的隔离性。
  • 事务管理:提供@Transactional注解支持,自动在测试方法前后回滚事务,保持测试数据的清洁。

5. 依赖注入

  • 在测试类中支持Spring的依赖注入,使得测试代码可以方便地使用到应用中的Bean和服务,提高了测试的准确性和便利性。

6. Spring Boot测试

  • Spring Boot进一步简化了测试配置,提供了@SpringBootTest注解,它可以自动配置并启动一个应用上下文用于集成测试,同时支持自动配置的特性,如自动配置的数据库连接、缓存等。

7. Spring Cloud Contract

  • 虽然不直接属于Spring Test模块,但Spring Cloud Contract为微服务架构提供了消费者驱动契约测试(Consumer-Driven Contracts,CDC)的支持,确保服务间的交互按照预期进行,特别适合微服务间的集成测试。

8. Spock和Groovy测试

  • Spring Test也支持使用Spock框架(基于Groovy语言)编写测试,提供更加简洁和表现力强的语法。

通过这些工具和特性,Spring测试框架极大地提升了测试的效率和质量,确保应用在不断迭代的过程中保持稳定可靠。

Spring框架因其高度的模块化、灵活性和强大的社区支持,成为了Java企业应用开发的首选框架之一。掌握上述知识点有助于深入理解并高效利用Spring进行现代应用的开发。

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

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

相关文章

Cisco Packet Tracer实验(三)

续实验二 问题一:使用二层交换机连接的网络需要配置网关吗?为什么? 二层交换机作为网络设备中的一种,主要用于在局域网(LAN)内部进行数据包的转发。它工作在OSI模型的第二层(数据链路层&#xf…

08_基于GAN实现人脸图像超分辨率重建实战_超分辨基础理论

1. 超分辨的概念与应用 我们常说的图像分辨率指的是图像长边像素数与图像短边像素数的乘积,比如iPhoneX手机拍摄照片的分辨率为 4032px3024px,为1200万像素。 显然,越高的分辨率能获得更清晰的成像。与之同时,分辨率越高也意味着更大的存储空间,对于空间非常有限的移动设…

Embedding 模型的选择和微调

构建一个检索增强生成 (Retrieval-Augmented Generation, RAG) 应用的概念验证过程相对简单,但要将其推广到生产环境中则会面临多方面的挑战。 『RAG 高效应用指南』系列将就如何提高 RAG 系统性能进行深入探讨,提供一系列具体的方法和建议。同时读者也需…

StableSwarmUI 安装教程(详细)

文章目录 背景特点安装 背景 StableSwarmUI是StabilityAI官方开源的一个文生图工作流UI,目前处于beta阶段,但主流程是可以跑通的。该UI支持接入ComfyUI、Stable Diffusion-WebUI。其工作原理就是使用ComfyUI、Stable Diffusion-WebUI或者StabilityAI官方…

张艺兴step新专开启自由驾驶新纪元

张艺兴《Step》新专,开启自由驾驶新纪元!当音乐与驾驶相遇,会碰撞出怎样的火花?当实力派艺人张艺兴遇上全新英文专辑《Step》,便为我们解锁了一种前所未有的出行体验!这不仅仅是一张音乐专辑,更…

英伟达GPU对比分析:A100、A800、H100与H800

在当今技术迅速发展的时代,英伟达的GPU产品线提供了多种高性能选项,以满足不同类型的工作负载需求。本文将对英伟达的四种GPU型号——A100、A800、H100和H800进行深入对比分析,探讨它们在性能、架构、应用场景等方面的差异,以帮助…

Redis原理篇——分布式锁

Redis原理篇——分布式锁 分布式锁是什么?分布式锁有哪些特性?分布式锁常用实现方式Redis 实现分布式锁一、简单的 Redis 锁二、带过期时间的 Redis 锁三、加上 Owner 的 Redis 锁四、Lua 脚本确保原子性 分布式锁是什么? 分布式锁是在分布式…

HTML解析之Beautiful Soup

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Beautiful Soup是一个用于从HTML和XML文件中提取数据的Python库。Beautiful Soup 提供一些简单的、函数用来处理导航、搜索、修改分析树等功能。Beau…

YOLOX: 无锚点机制 + 解耦头部设计 + 动态标签分配策略的高性能目标检测器 + Apache-2.0 开源可商用

YOLOX: 无锚点机制 解耦头部设计 动态标签分配策略的高性能目标检测器 Apache-2.0 开源可商用 1. Decoupled Head 解耦头部的使用2. 强化数据增强策略3. 采用无锚点检测机制4. 多正样本策略5. SimOTA标签分配策略6. CSPDarkNet 网络结构DarkNet53 的深度特征提取能力DarkNet…

简单http客户端程序

要求和目的 深入理解http协议以及http下载相关功能的程序设计 实验环境 Java语言,PC平台 实验要求 基本要求:使用Socket类,实现一个简单的HTTP客户端程序。用户输入URL,该程序可以从服务器下载URL指定的资源,并将之…

LabVIEW RT在非NI硬件上的应用与分析

LabVIEW RT(实时操作系统)可运行在非NI(National Instruments)硬件上,如研华工控机,但需要满足特定硬件要求。本文从硬件要求、开发和运行差异、可靠性、稳定性、优势和成本等多角度详细分析在非NI硬件上运…

后端返回前端时间格式化

时间格式化的方法总共包含以下 5 种。 1.前端时间格式化 JS 版时间格式化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function dateFormat(fmt, date) { let ret; const opt { "Y": date.getFullYear().toString(), // 年 …

挂耳式耳机哪个牌子好性价比高、五大招牌力作精选归纳

如果说你很喜欢户外运动,日常生活中也是需要经常佩戴耳机,那么你一定有了解到耳机是开放式耳机,这类耳机无论在户外运动防水防汗还是在耳朵健康方面都具备它的优点,在市面上是很受欢迎的。 但面对市面上不同品牌的耳机都会显得眼…

【面试干货】深入理解Java中的final关键字

【面试干货】深入理解Java中的final关键字 一、被 final 修饰的类二、被 final 修饰的方法三、被 final 修饰的变量四、被 final 修饰的常量 💖The Begin💖点点关注,收藏不迷路💖 在Java中,final关键字有多种用途&…

组合和外观模式

文章目录 组合模式1.引出组合模式1.院系展示需求2.组合模式基本介绍3.组合模式原理类图4.解决的问题 2.组合模式解决院系展示1.类图2.代码实现1.AbsOrganizationComponent.java 总体抽象类用于存储信息和定义方法2.University.java 第一层,University 可以管理 Coll…

atcoder ABC 355-C题详解

atcoder ABC 355-C题详解 ​ Problem Statement There is an NN grid, where the cell at the i-th row from the top and the j-th column from the left contains the integer N(i−1)j. Over T turns, integers will be announced. On Turn i, the integer Ai​ is anno…

C++入门8 构造函数析构函数顺序|拷贝构造

一&#xff0c;构造函数析构函数 调用顺序 我们先来看下面的代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> using namespace std; class student { public:char my_name[20];int my_id;student(int a) {my_id a;co…

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态&#xff0c;并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势&#xff0c;包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…

ADS基础教程20 - 电磁仿真(EM)参数化

EM介绍 一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号 四、总结 一、引言 参数化EM仿真&#xff0c;是在Layout环境下创建参数&#xff0c;相当于在原理图中声明变量。 二、参数化设置 1.参数定义 1&#xff09;在Layout视图&#xff0c;菜单栏中选中EM&g…

哈喽GPT-4o——对GPT-4o 写论文的思考与看法

目录 几小时即可完成一份1万字论文的编写1、改写降重2、同义词替换降重3、避免连续相同4、缩写扩写降重5、关键词汇替换降重6、句式变换降重7、逻辑重组8、综合改写9、数据呈现方式变更10、概念解释降重 大家好&#xff0c;我是哪吒。 在ChatGPT4o对话框中输入&#xff1a;写一…