SpringBoot框架:入门指南(二)

一. RESTful API开发

1. 创建RESTful控制器

在企业级Java开发中,RESTful API扮演着至关重要的角色,为系统提供了灵活、可扩展的接口。下面将详细介绍如何创建高质量的RESTful控制器,充分利用Spring Boot注解。

1.1 RESTful设计原则

RESTful API设计遵循一系列原则,以确保接口的清晰性、可读性和易维护性。这些原则包括:

  • 资源识别与URI设计: 识别业务资源,并采用清晰的URI结构表示。例如,/users/{id}表示单个用户资源。

  • HTTP方法的正确使用: 利用HTTP方法来执行对资源的操作。GET用于获取资源,POST用于创建资源,PUT和PATCH用于更新资源,DELETE用于删除资源。

  • 状态码的合理应用: 使用适当的HTTP状态码表示操作的结果,如200表示成功,404表示未找到,500表示服务器错误等。

1.2 Spring Boot注解的运用

Spring Boot简化了RESTful API的开发过程,通过注解轻松搭建API。以下是一些关键注解的用法:

  • @RestController: 将类标记为RESTful控制器,自动处理HTTP请求。

  • @RequestMapping: 指定URL路径,定义处理请求的方法。

  • @GetMapping/@PostMapping: 指定GET或POST请求的处理方法,简化了代码。

1.3 示例代码

让我们通过一个简单的示例来演示RESTful控制器的创建:

@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);return ResponseEntity.ok(user);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User createdUser = userService.createUser(user);URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(createdUser.getId()).toUri();return ResponseEntity.created(location).body(createdUser);}
}

在这个示例中,我们使用了Spring Boot的注解,创建了一个处理用户资源的RESTful控制器。通过@GetMapping@PostMapping注解,我们定义了获取用户和创建用户的操作。ResponseBody和ResponseEntity用于处理响应体和状态码。

2. 处理HTTP请求与响应

在RESTful API开发中,深入理解HTTP协议并实现统一的错误处理机制对于构建可靠的API至关重要。下面将详细介绍在Java控制器中如何处理不同类型的HTTP请求,以及如何实现统一的错误处理。

2.1 深入了解HTTP协议

HTTP基础知识

了解HTTP协议的基础知识对于处理请求和响应至关重要。HTTP是一种无状态协议,每个请求都是独立的,不会记住之前的请求。了解HTTP方法(GET、POST、PUT、DELETE等)、头部信息和状态码等是必须的。

控制器中的HTTP请求处理

在Java控制器中,可以使用Spring Boot注解来处理不同类型的HTTP请求。例如:

  • @GetMapping: 处理GET请求
  • @PostMapping: 处理POST请求
  • @PutMapping: 处理PUT请求
  • @DeleteMapping: 处理DELETE请求

通过这些注解,可以轻松定义不同操作的处理方法,确保遵循RESTful设计原则。

2.2 统一的错误处理机制

异常处理

在API开发中,异常处理是不可忽视的一环。通过统一处理异常,可以提高API的可靠性和可维护性。在Spring Boot中,可以使用@ControllerAdvice注解创建全局异常处理器。示例代码如下:

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleException(Exception ex) {ErrorResponse errorResponse = new ErrorResponse("Internal Server Error", HttpStatus.INTERNAL_SERVER_ERROR.value());return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);}@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity<ErrorResponse> handleResourceNotFoundException(ResourceNotFoundException ex) {ErrorResponse errorResponse = new ErrorResponse(ex.getMessage(), HttpStatus.NOT_FOUND.value());return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);}
}

在这个例子中,@ControllerAdvice标记了全局异常处理器,@ExceptionHandler用于捕获特定类型的异常并返回适当的响应。

自定义错误响应

创建一个自定义的错误响应类(例如ErrorResponse),用于包装错误信息,提供清晰的错误反馈给API的调用者。

public class ErrorResponse {private String message;private int statusCode;// 省略构造方法和getter/setter
}
3. 示例代码
@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);if (user == null) {throw new ResourceNotFoundException("User not found with id: " + id);}return ResponseEntity.ok(user);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {User createdUser = userService.createUser(user);URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(createdUser.getId()).toUri();return ResponseEntity.created(location).body(createdUser);}
}

在这个示例中,通过@GetMapping@PostMapping处理GET和POST请求。如果在GET请求中找不到用户,抛出ResourceNotFoundException,由全局异常处理器捕获并返回适当的错误响应。

  1. 使用Postman进行接口测试
    • 利用Postman进行全面的接口测试,包括请求验证、响应断言等。
    • 掌握Mock Server的使用,模拟接口行为,确保系统在各种情况下都能正常运行。

二. 数据库访问与整合

1. 使用Spring Data JPA进行数据库操作

在企业级Java开发中,与数据库的高效交互是至关重要的一环。Spring Data JPA为我们提供了简化数据库操作的工具,以下是关于使用Spring Data JPA的基本概念和常见操作的介绍。

1.1 JPA基本概念

Java Persistence API (JPA) 是一种用于管理Java应用程序中关系型数据的标准规范。它提供了一种将Java对象映射到数据库表的方法,同时定义了一套查询语言(JPQL)用于数据库查询。

  • 实体类: 通过注解标记Java类,使其成为JPA实体,与数据库表进行映射。
  • Repository接口: 继承JpaRepository接口,通过继承接口的方法实现常见的数据库操作。
1.2 Spring Data JPA的使用

示例:使用Spring Data JPA进行用户管理

@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String email;// 省略构造方法和getter/setter
}
public interface UserRepository extends JpaRepository<User, Long> {// 可通过继承JpaRepository接口实现常见的CRUD操作Optional<User> findByUsername(String username);
}
1.3 常见的CRUD操作

使用Spring Data JPA,常见的CRUD操作可以通过继承JpaRepository接口来实现:

  • 保存用户:

    userRepository.save(user);
    
  • 根据ID查询用户:

    Optional<User> userOptional = userRepository.findById(userId);
    
  • 根据用户名查询用户:

    Optional<User> userOptional = userRepository.findByUsername(username);
    
  • 更新用户信息:

    User existingUser = userRepository.findById(userId).orElse(null);
    if (existingUser != null) {existingUser.setEmail(newEmail);userRepository.save(existingUser);
    }
    
  • 删除用户:

    userRepository.deleteById(userId);
    
1.4 使用JPQL查询语言

除了常见的CRUD操作外,Spring Data JPA还支持使用JPQL进行自定义查询:

public interface UserRepository extends JpaRepository<User, Long> {@Query("SELECT u FROM User u WHERE u.email = :email")Optional<User> findByEmail(@Param("email") String email);
}

通过@Query注解,可以在Repository接口中定义自定义的JPQL查询方法,以实现更复杂的数据库查询需求。


2. 配置数据源与持久化

在复杂业务场景下,可能需要配置多数据源以处理不同数据库的访问。同时,理解事务管理对于确保数据库操作的一致性至关重要。

2.1 配置多数据源

Spring Boot允许配置多个数据源,可以通过@Primary注解标记主要数据源,通过@Qualifier注解指定使用哪个数据源。

@Configuration
public class DataSourceConfig {@Primary@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource dataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource dataSourceSecondary() {return DataSourceBuilder.create().build();}
}
2.2 事务管理

在涉及到多个数据库操作时,事务管理是确保操作一致性的关键。通过使用@Transactional注解,可以将一系列操作包装在一个事务中,确保它们要么全部成功,要么全部失败。

@Service
public class TransactionalService {@Autowiredprivate UserRepository userRepository;@Autowiredprivate AnotherRepository anotherRepository;@Transactionalpublic void performTransaction() {// 数据库操作userRepository.save(new User("John", "john@example.com"));anotherRepository.save(new AnotherEntity("Some data"));}
}

3. 实现简单的数据库操作

通过实际案例演示数据库操作,包括关联查询、分页查询等,可以更好地理解数据库访问与整合的实际应用。

public interface OrderRepository extends JpaRepository<Order, Long> {List<Order> findByUserId(Long userId);Page<Order> findByStatus(String status, Pageable pageable);
}

在这个例子中,findByUserId实现了根据用户ID查询订单的操作,而findByStatus实现了根据订单状态进行分页查询的操作。

三. Web开发与Thymeleaf模板引擎

1. 创建Web页面

在Web开发中,使用Spring Boot可以快速创建基本的Web页面。以下是一些步骤和注意事项:

1.1 使用Spring Boot创建Web项目

通过Spring Initializer或使用Spring Boot CLI,创建一个基本的Spring Boot项目,并选择Web作为依赖。

1.2 遵循前后端分离原则

采用前后端分离的原则,前端负责页面的展示和用户交互,后端负责提供数据和处理业务逻辑。前后端之间通过API进行通信,通常使用JSON格式传递数据。

1.3 实现清晰的前后端交互

定义清晰的API接口,确保前端能够方便地调用后端服务。使用RESTful风格的API,明确定义HTTP方法和URI路径。

2. 使用Thymeleaf渲染页面

Thymeleaf是一款强大的Java模板引擎,可用于在Web应用中渲染动态页面。以下是使用Thymeleaf的基本步骤:

2.1 引入Thymeleaf依赖

pom.xml中引入Thymeleaf依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
</dependencies>
2.2 创建Thymeleaf模板

src/main/resources/templates目录下创建Thymeleaf模板文件,例如index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Thymeleaf Example</title>
</head>
<body><h1 th:text="${message}">Hello World!</h1>
</body>
</html>
2.3 在Controller中使用Thymeleaf

在Controller中处理请求时,返回Thymeleaf模板的名称:

@Controller
public class MyController {@GetMapping("/hello")public String hello(Model model) {model.addAttribute("message", "Welcome to Thymeleaf!");return "index";}
}
2.4 实现动态数据的展示

Thymeleaf支持动态数据的展示,通过在模板中使用${variable}来引用Controller中传递的数据。

3. 实现基本的Web应用

结合RESTful API,构建完整的Web应用。以下是一些建议和步骤:

3.1 使用Ajax等技术实现异步交互

通过Ajax等技术,实现页面的异步加载和交互。这可以提高页面加载速度和用户体验。

3.2 构建完整的Web应用

将前端页面与后端API整合,构建一个完整的Web应用。确保前端能够通过API调用后端服务,并正确处理返回的数据。

3.3 前后端分离的优势

前后端分离可以提高项目的可维护性和灵活性。前端可以独立开发和测试,后端可以专注于业务逻辑和数据处理。

四. 单元测试与集成测试

1. 编写基本的单元测试

编写单元测试是保障代码质量的关键步骤。以下是一些建议和步骤:

1.1 使用JUnit等测试框架

JUnit是Java中广泛使用的测试框架,用于编写和运行单元测试。创建测试类,使用@Test注解标记测试方法,断言方法的预期行为。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;public class MyServiceTest {@Testpublic void testAdd() {MyService myService = new MyService();int result = myService.add(2, 3);assertEquals(5, result);}
}
1.2 引入Mockito等工具

Mockito是一个用于模拟对象行为的框架,可以帮助我们创建虚拟对象,确保代码的可测试性。使用@Mock@InjectMocks注解,结合whenthenReturn方法,模拟对象的行为。

import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.Mockito.when;
import static org.junit.jupiter.api.Assertions.assertEquals;public class MyServiceTest {@Mockprivate MyRepository myRepository;@InjectMocksprivate MyService myService;@Testpublic void testGetData() {when(myRepository.getData()).thenReturn("Mocked Data");String result = myService.getData();assertEquals("Mocked Data", result);}
}

2. 使用Spring Boot Test进行测试

Spring Boot Test是Spring Boot中专门用于测试的模块,它提供了一系列的注解和工具,用于编写和执行各种类型的测试。

2.1 掌握Spring Boot Test的使用

使用@SpringBootTest注解可以加载整个Spring应用程序上下文,方便进行集成测试。

import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class MyIntegrationTest {// 测试代码
}
2.2 制定测试策略

在编写测试时,制定测试策略是非常重要的。包括选择适当的测试粒度、定义测试数据、确保测试的独立性等。使用@Transactional注解可以在测试完成后回滚数据库事务,保持数据库的一致性。

import org.springframework.transaction.annotation.Transactional;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
@Transactional
public class MyIntegrationTest {// 测试代码
}

3. 编写集成测试

集成测试用于验证系统不同模块的协同工作,确保系统功能完备。以下是一些建议:

3.1 利用集成测试验证系统不同模块的协同工作

编写集成测试时,需要关注系统不同组件之间的协同工作。确保集成测试覆盖了系统的主要功能路径。

3.2 使用真实的依赖

在集成测试中,通常使用真实的依赖(如数据库、消息队列等)而非模拟对象,以更真实地模拟实际系统环境。

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;@SpringBootTest
@AutoConfigureTestDatabase
public class MyIntegrationTest {// 测试代码
}

通过以上步骤,你将能够编写基本的单元测试,使用Mockito等工具模拟对象行为,掌握Spring Boot Test的使用进行集成测试,编写集成测试验证系统不同模块的协同工作。这将有助于确保代码的质量和系统的稳定性。

五. 安全性与身份认证

1. 引入Spring Security

保障系统的安全性是应用程序开发中的一项关键任务。引入Spring Security可以提供全面的安全防护。

1.1 了解常见的安全威胁

在引入Spring Security之前,了解常见的安全威胁是非常重要的。这些威胁包括但不限于:身份伪造、SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。

1.2 配置基本的身份认证策略

Spring Security提供了强大的身份认证和授权机制。通过配置,可以定义哪些用户能够访问系统的哪些资源。以下是一个简单的示例:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().antMatchers("/admin/**").hasRole("ADMIN").anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().logoutUrl("/logout").permitAll();}@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("user").password("{noop}password").roles("USER").and().withUser("admin").password("{noop}password").roles("USER", "ADMIN");}
}

在上述示例中,配置了基于角色的权限管理,并定义了登录和注销的行为。

2. 配置基本的身份认证

身份认证是保障系统安全性的重要一环。通过Spring Security,可以轻松配置基本的身份认证。

2.1 使用Spring Security配置用户认证和授权

通过实现UserDetailsService接口,可以自定义用户认证和授权的逻辑。以下是一个简单的示例:

@Service
public class CustomUserDetailsService implements UserDetailsService {@Autowiredprivate UserRepository userRepository;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user = userRepository.findByUsername(username);if (user == null) {throw new UsernameNotFoundException("User not found with username: " + username);}return new CustomUserDetails(user);}
}
2.2 实现基于角色的权限管理

通过配置角色和权限,可以实现基于角色的权限管理。在上述的Spring Security配置示例中,使用.hasRole("ADMIN")指定了某个URL需要ADMIN角色才能访问。

3. 安全防护措施简介

在开发过程中,需要注意一些常见的安全防护措施,以防止常见的攻击。以下是一些防范措施的简介:

3.1 防止SQL注入

使用预编译语句或ORM框架,避免直接拼接SQL语句。Spring Data JPA等框架提供了防范SQL注入的机制。

3.2 防止跨站脚本攻击(XSS)

对用户输入的内容进行合适的过滤和转义,避免在页面中执行恶意脚本。Thymeleaf等模板引擎可以帮助防范XSS攻击。

3.3 防止跨站请求伪造(CSRF)

使用Spring Security等工具,配置CSRF保护机制。确保每个请求都带有CSRF令牌,防止恶意站点伪造请求。

通过以上步骤,你将能够了解常见的安全威胁,引入Spring Security进行全面的安全防护,配置基本的身份认证策略,确保系统只允

许合法访问。此外,了解安全防护措施,并通过Spring Security等工具来防范常见攻击,将有助于提高系统的安全性。

六. 性能优化与监控

1. 集成Actuator进行监控

Spring Boot Actuator是Spring Boot提供的监控和管理工具。通过集成Actuator,可以方便地监控应用的各项指标,并进行性能分析。

1.1 配置Spring Boot Actuator

pom.xml中引入Actuator依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
</dependencies>

application.propertiesapplication.yml中开启Actuator的各项功能:

management:endpoints:web:exposure:include: '*'
1.2 利用监控数据进行性能分析

Actuator提供了众多的监控端点,比如/actuator/health/actuator/metrics等。通过访问这些端点,可以获取应用的健康状况和各项指标数据。根据这些数据进行分析,找出潜在的性能瓶颈。

2. 性能优化的基本策略

性能优化是系统开发和维护中的一个重要方面。以下是一些建议和基本策略:

2.1 优化数据库查询
  • 使用合适的索引,加速查询。
  • 考虑使用数据库连接池,减少连接的创建和销毁开销。
  • 尽量避免全表扫描,使用合适的查询条件。
2.2 缓存的合理使用
  • 使用缓存来存储频繁访问的数据,减轻数据库压力。
  • 选择合适的缓存策略,如LRU(Least Recently Used)等。
  • 注意缓存的及时更新和过期机制。
2.3 代码优化
  • 使用合适的数据结构和算法。
  • 避免过多的嵌套循环和递归调用。
  • 尽量减少不必要的对象创建。

3. 使用Spring Boot Admin进行监控

Spring Boot Admin是一个用于监控和管理Spring Boot应用的开源项目。通过引入Spring Boot Admin,可以更直观地监控应用的各项指标。

3.1 引入Spring Boot Admin

pom.xml中引入Spring Boot Admin依赖:

<dependencies><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.5.1</version></dependency>
</dependencies>
3.2 配置Spring Boot Admin

application.propertiesapplication.yml中配置Spring Boot Admin的端口和上下文路径:

server:port: 8081spring:boot:admin:context-path: /admin
3.3 启动Spring Boot Admin Server
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableAdminServer
@SpringBootApplication
public class AdminApplication {public static void main(String[] args) {SpringApplication.run(AdminApplication.class, args);}
}

启动应用后,访问http://localhost:8081/admin即可查看Spring Boot Admin的监控界面。

通过以上步骤,你将能够配置Spring Boot Actuator进行监控,利用监控数据进行性能分析,了解性能优化的基本策略,以及引入Spring Boot Admin实现更直观的应用监控和管理。这将有助于提高系统的性能和稳定性。

七. 部署与运维

1. 打包与部署Spring Boot应用

1.1 使用Maven或Gradle进行项目打包

通过Maven或Gradle等构建工具,可以方便地对Spring Boot应用进行打包。在项目根目录下执行以下命令:

使用Maven:

mvn clean package

使用Gradle:

./gradlew clean build
1.2 部署应用到不同的环境

部署Spring Boot应用时,通常会涉及到不同的环境,如开发环境、测试环境和生产环境。使用不同的配置文件或环境变量,确保应用在不同环境中的配置灵活性。

2. Docker容器化

2.1 Docker化Spring Boot应用

Docker是一种轻量级的容器技术,可以实现跨平台部署。通过创建Docker镜像,可以将应用与其依赖打包在一起,实现一次构建,随处运行。

创建Dockerfile:

FROM openjdk:11-jre-slim
COPY target/my-spring-boot-app.jar /app.jar
CMD ["java", "-jar", "/app.jar"]

构建Docker镜像:

docker build -t my-spring-boot-app .
2.2 使用Docker Compose管理多容器应用

Docker Compose是用于定义和运行多容器Docker应用的工具。通过编写docker-compose.yml文件,可以定义应用的各个组件,实现一键启动。

version: '3'
services:my-spring-boot-app:image: my-spring-boot-appports:- "8080:8080"environment:- SPRING_PROFILES_ACTIVE=productiondatabase:image: mysql:latestenvironment:- MYSQL_ROOT_PASSWORD=root- MYSQL_DATABASE=mydb

运行Docker Compose:

docker-compose up

3. 使用Heroku进行云端部署

3.1 介绍Heroku云平台

Heroku是一种云平台服务,支持多种编程语言,提供简单而高效的云端部署。通过Heroku,可以轻松地将应用部署到云上,无需关心基础设施。

3.2 利用Heroku提供的服务

Heroku提供了多种服务,如数据库、缓存、日志等。通过添加相应的插件,可以扩展应用的功能。

在项目根目录创建Procfile文件,指定启动命令:

web: java -jar target/my-spring-boot-app.jar

部署到Heroku:

heroku create
git push heroku master

通过以上步骤,你将能够使用Maven或Gradle进行项目打包,部署应用到不同的环境,将Spring Boot应用Docker化,使用Docker Compose管理多容器应用,以及通过Heroku进行简单而高效的云端部署。这将有助于实现应用的灵活部署和运维。

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

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

相关文章

Ubuntu20.0.4下设置frpc开机自启动

目录 一、下载frp 二、解压 三、服务端部署 1.配置 2.运行 三、客户端部署 1、配置 2、后台运行 四、开机启动 1、拷贝frpc.service 2、修改配置 3、启用服务 五、ubuntu20.04使用 rc-local.service设置开机启动 1、建立开机服务添加 [Install] 段 2、授权rc-local.service 3、…

Anaconda常用命令、操作、镜像源

Anaconda常用操作 命令例子作用conda create -n 环境名 需要的库conda create -n pythonenv python3.8创建环境conda info --envsconda info --envs查看全部环境activate 环境名activate pythonenv激活环境conda deactivateconda deactivate退出环境conda remove -n 环境名 --a…

pytorch学习笔记(十一)

优化器学习 把搭建好的模型拿来训练&#xff0c;得到最优的参数。 import torch.optim import torchvision from torch import nn from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import DataLoaderdataset torchvision.datas…

uniapp安卓android离线打包本地打包整理

离线打包准备 下载Android studio 1.准备资源hbuilder 2.准备离线SDK 最新android平台SDK下载最新android平台SDK下载 3.离线打包key申请 4.直接导入HBuilder-Integrate-AS工程,直接运行simpleDemo项目即可 5.安装java 1.8 jdk-8u151-windows-x64 6.遇到这个报错报错Caus…

在游戏里开公司!基于ERNIE SDK的多智能体游戏应用

在虚拟世界有一座神奇的办公室&#xff0c;当你输入你的创业方向&#xff0c;办公室的智慧打工人们将团结合作&#xff0c;为你的项目勤劳奔走&#xff0c;并在过程中&#xff0c;把日报周报都写好&#xff0c;让你随时掌握项目进度和最终成果&#xff01;该项目基于ERNIE SDK开…

工厂方法模式-C#实现

该实例基于WPF实现&#xff0c;直接上代码&#xff0c;下面为三层架构的代码。 一 Model using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 设计模式练习.Model.工厂方法模式 {internal class…

MSG3D论文解读

论文在stgcn与sta-lstm基础上做的。下面讲一下里面的方法&#xff1a; 1.准备工作 符号。这里是对符号进行解释。 一个人体骨骼图被记为G(v,E) 图卷积&#xff1a; 图卷积定义 考虑一种常用于处理图像的标准卷积神经网络 (CNN)。输入是像素网格。每个像素都有一个数据值向…

趣学贝叶斯统计:量化

概率理论不仅仅是一个数学概念&#xff0c;更是一种对随机性和不确定性的理解方式。通过量化我们对事件发生的信念&#xff0c;我们能够更准确地预测和解释各种现象。在本章中&#xff0c;我们将探讨事件概率与信念概率&#xff0c;为我们的理论和分析工具箱增添新的维度。 事…

Angular封装HttpClient文件下载

Angular HttpClient 文件下载 前言HttpRequest.tsdemo后端接口koa2示例功能优化实现下载进度监控 前言 使用Angular框架开发工作中&#xff0c;实现文件下载业务时&#xff0c;我们可以使用Angular自带的HttpClient。下面我们就封装一下HttpClient实现文件下载&#xff0c;当接…

前端网络请求之JavaScript XHR、Fetch、Axios

一、JavaScript XHR、Fetch AJAX&#xff1a;一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。在后台与服务器进行少量数据交换&#xff0c;Ajax 可以使网页实现异步更新。在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新 Fetch&…

主流电商平台:item_get-通过商品ID取商品详情,主图,sku

随着全球化的加速和互联网技术的不断发展&#xff0c;跨境电商已经成为了全球商业的重要组成部分。在这个环境下&#xff0c;如何有效地获取商品详情成为了关键的问题。本文将探讨一种基于商品ID获取商品详情的跨境电商创新方式&#xff0c;即item_get接口&#xff0c;以及其潜…

Vue3-在HTML标签、组件标签上使用v-model

本篇为Vue3学习中遇到的v-model相关的记录&#xff0c;如有问题欢迎指正 一、在标签上使用v-model v-model通常在input、select等标签上来实现数据双向绑定 <input type"text" v-model"username"> 原理&#xff1a;v-model通过给标签value赋值来实…

Windows10上使Git Bash支持rsync命令操作步骤

rsync命令是linux上常用的工具之一&#xff0c;用于远程以及本地系统中拷贝/同步文件和文件夹。 Windows Git Bash默认并不支持rsync&#xff0c;如下图所示&#xff1a; 使Git Bash支持rsync命令操作步骤&#xff1a; 1.从https://repo.msys2.org/msys/x86_64/ 下…

一、MongoDB、express的安装和基本使用

数据库【Sqlite3、MongoDB、Mysql】简介&小记 Sqlite3&#xff1a; SQLite3是一个轻量级的数据库系统&#xff0c;它被设计成嵌入式数据库。这意味着它是一个包含在应用程序中的数据库&#xff0c;而不是独立运行的系统服务。适用场景&#xff1a;如小型工具、游戏、本地…

算力总规模位列全球第二!中创:助推数据中心建设

近日&#xff0c;国新办举办新闻发布会&#xff0c;介绍2023年工业和信息化发展情况。算力、数据中心、云计算等与数字化转型、能源利用息息相关&#xff0c;被多次提及。 工业和信息化部新闻发言人、运行监测协调局局长陶青表示&#xff1a; 数字基础设施支撑有力&#xff0c;…

力扣算法-Day18

18.四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1…

关于数据库被勒索如何解决?

今天发现数据库被删&#xff0c;原因是勒索病毒&#xff0c;这期文章来说明下: **使用binlog日志恢复**&#xff1a; - **确认binlog状态**&#xff1a;检查MySQL服务器是否开启了binlog日志功能。如果服务器启用了binlog&#xff0c;那么在数据被篡改之前的操作都有可能被记…

golang 根据URL获取文件名

只有一个文件地址&#xff0c;但是没有文件名称&#xff0c;文件地址&#xff1a;http://XXXXXXX/getfile.aspx?fileid999 但是系统需要把文件名称也写入到数据库 可以根据 resp.Header["Content-Disposition"] 获取文件名 resp.Header["Content-Disposition&q…

继承和原型链

基于原型链的继承示例 // 继承方法 const parent { value: 2, method() { console.log(this); return this.value 1 } } console.log(parent.method());//3 不难理解 const child { __proto__: parent, } console.log(child.method());//3 this 指向child 但是属性中没有v…

亚马逊鲲鹏系统:批量注册买家号的新利器

近年来&#xff0c;随着电商市场的迅速发展&#xff0c;亚马逊作为全球最大的在线零售平台之一&#xff0c;其买家号的需求也日益增长。而亚马逊鲲鹏系统是一个能够批量全自动注册亚马逊买家号的系统。而对于全自动批量注册&#xff0c;账号资料方面&#xff0c;也有一定的要求…