基于Angular+BootStrap+SpringBoot简单的购物网站
目录
一、项目结构图
二、目录结构解析
后端 (Spring Boot)
前端 (Angular)
三、技术栈
四、具体功能实现
五、数据库设计
六、后端实现
1. 设置Spring Boot项目
2. 数据库实体类
3. 创建Repository
4. 创建Service层
5. 创建Controller层
七、前端实现(Angular)
1、创建 Angular 服务层
2、创建 Angular 路由配置
3、配置文件
4、用户登录与注册
5、商品浏览与添加购物车
6、订单管理与收货地址
7、后台管理系统
八、部署与测试
一、项目结构图
/shopping-website
├── /backend (Spring Boot 项目)
│ ├── /src
│ │ ├── /main
│ │ │ ├── /java
│ │ │ │ ├── /com
│ │ │ │ │ ├── /example
│ │ │ │ │ │ ├── /shopping
│ │ │ │ │ │ │ ├── /config # 配置文件,如Spring Security等
│ │ │ │ │ │ │ ├── /controller # 控制器,处理API请求
│ │ │ │ │ │ │ ├── /entity # 实体类,映射数据库表
│ │ │ │ │ │ │ ├── /exception # 异常处理类
│ │ │ │ │ │ │ ├── /repository # 数据访问层(JPA)
│ │ │ │ │ │ │ ├── /security # 安全配置,Spring Security配置
│ │ │ │ │ │ │ ├── /service # 业务逻辑层
│ │ │ │ │ │ │ └── /util # 工具类
│ │ │ │ │ │ ├── /resources
│ │ │ │ │ │ │ └── application.yml # 配置文件,数据库连接等
│ │ │ │ │ │ └── /static
│ │ └── /test
│ ├── /pom.xml # Maven 配置文件,包含所有依赖
│
├── /frontend (Angular 项目)
│ ├── /src
│ │ ├── /app
│ │ │ ├── /components # 公共组件
│ │ │ │ ├── /login
│ │ │ │ ├── /register
│ │ │ │ ├── /product-list
│ │ │ │ ├── /cart
│ │ │ │ └── /order
│ │ │ ├── /services # 服务层,处理API请求
│ │ │ │ ├── /auth.service.ts
│ │ │ │ ├── /product.service.ts
│ │ │ │ ├── /cart.service.ts
│ │ │ │ ├── /order.service.ts
│ │ │ ├── /guards # 路由守卫
│ │ │ │ └── /auth.guard.ts
│ │ │ ├── /models # 数据模型类
│ │ │ │ ├── /user.ts
│ │ │ │ ├── /product.ts
│ │ │ │ ├── /order.ts
│ │ │ └── /app.module.ts # Angular 主模块
│ │ ├── /assets # 静态资源(图片、字体等)
│ │ └── /environments # 环境配置文件
│ ├── /angular.json # Angular 配置文件
│ ├── /package.json # Node.js 配置文件
│ └── /tsconfig.json # TypeScript 配置文件
│
└── README.md # 项目说明文件
二、目录结构解析
后端 (Spring Boot)
-
/src/main/java/com/example/shopping/config
- SecurityConfig.java:Spring Security 配置类,设置权限控制。
- PaymentConfig.java:支付接口配置类(集成支付宝、微信支付等)。
-
/controller
处理HTTP请求的Controller类,通常负责接收前端请求、调用服务层逻辑并返回数据。例如:- UserController.java:处理用户注册、登录请求。
- ProductController.java:处理商品展示、商品查询等请求。
- OrderController.java:处理订单相关请求,订单创建、查询、状态更新等。
-
/entity
- User.java:用户实体类。
- Product.java:商品实体类。
- Order.java:订单实体类,包含订单的各个字段,如商品、用户、支付状态等。
-
/repository
- UserRepository.java:操作用户数据的JPA接口。
- ProductRepository.java:操作商品数据的JPA接口。
- OrderRepository.java:操作订单数据的JPA接口。
-
/security
- UserDetailsServiceImpl.java:用户认证服务,实现
UserDetailsService
接口,加载用户信息。
- UserDetailsServiceImpl.java:用户认证服务,实现
-
/service
- UserService.java:处理用户逻辑,包含注册、登录等业务逻辑。
- ProductService.java:商品逻辑处理,处理商品的添加、修改、查询等。
- OrderService.java:订单管理,处理订单的创建、支付、发货等业务。
- PaymentService.java:支付相关的服务,集成支付宝、微信支付等接口。
-
/util
- PaymentUtil.java:支付工具类,封装与第三方支付平台交互的工具方法。
- OrderUtil.java:订单处理工具类,包含生成订单号、处理订单状态等功能。
前端 (Angular)
-
/components
- login/:登录组件,提供用户登录界面和逻辑。
- register/:注册组件,提供用户注册界面和逻辑。
- product-list/:商品列表组件,展示商品信息。
- cart/:购物车组件,展示购物车中的商品,支持修改商品数量和删除商品。
- order/:订单组件,展示订单信息和订单管理功能。
-
/services
- auth.service.ts:认证服务,处理用户的登录、注册、权限检查等操作。
- product.service.ts:商品服务,提供与商品相关的API调用。
- cart.service.ts:购物车服务,提供购物车操作功能。
- order.service.ts:订单服务,提供订单创建、查询、支付等功能。
-
/guards
- auth.guard.ts:路由守卫,用于保护用户路由,确保未登录用户无法访问需要登录的页面。
-
/models
- user.ts:用户模型类,定义用户的数据结构。
- product.ts:商品模型类,定义商品的数据结构。
- order.ts:订单模型类,定义订单的数据结构。
-
/app.module.ts:主模块,包含Angular应用的模块配置,声明所有组件、服务和路由。
三、技术栈
- 前端:Angular + Bootstrap
- 后端:Spring Boot + Spring Security + JPA + MySQL
- 数据库:MySQL
四、具体功能实现
-
用户管理(登录、注册、权限控制)
- 前端:使用 Angular 路由守卫和服务实现登录、注册和角色管理。
- 后端:通过 Spring Security 配置用户权限,确保不同角色用户的不同访问权限。
-
支付功能(支付宝、微信支付等)
- 后端:集成支付宝和微信支付接口,处理支付请求、支付回调等。
- 前端:在订单确认页面显示支付二维码(支付宝、微信支付),并处理支付回调。
-
商品管理和购物车
- 后端:提供商品的增删改查接口,支持用户浏览商品,添加到购物车。
- 前端:购物车组件提供购物车的管理功能,支持增加、删除商品和修改商品数量。
-
订单管理(创建、支付、发货)
- 后端:管理订单的创建、支付、发货等流程,处理订单状态的更新。
- 前端:用户可以查看自己的订单,并进行支付和查看订单详情。管理员可以查看所有订单并发货。
-
后台管理
- 后端:管理员角色可以访问商品管理、订单管理、用户管理等功能。
- 前端:管理界面提供商品、订单、用户管理的后台页面。
五、数据库设计
- 用户表:用于存储用户信息。
- 角色表:用于存储用户角色(如管理员、普通用户等)。
- 商品表:用于存储商品信息。
- 订单表:用于存储订单信息。
- 订单项表:用于存储每个订单中的商品项。
- 购物车表:用于存储用户的购物车商品。
- 支付表:用于记录支付信息(与支付宝、微信等支付集成相关)。
-
User (用户表)
CREATE TABLE `user` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',`username` VARCHAR(100) NOT NULL UNIQUE COMMENT '用户名',`password` VARCHAR(255) NOT NULL COMMENT '用户密码',`email` VARCHAR(255) DEFAULT NULL COMMENT '邮箱',`phone` VARCHAR(15) DEFAULT NULL COMMENT '手机号',`address` TEXT DEFAULT NULL COMMENT '收货地址',`status` TINYINT(1) DEFAULT 1 COMMENT '状态 1-启用 0-禁用',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-
Role(角色表)
CREATE TABLE `role` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '角色ID',`role_name` VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称',`description` VARCHAR(255) DEFAULT NULL COMMENT '角色描述',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
-
user_role(用户角色关联表)
CREATE TABLE `user_role` (`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',`role_id` BIGINT(20) NOT NULL COMMENT '角色ID',PRIMARY KEY (`user_id`, `role_id`),CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,CONSTRAINT `fk_role` FOREIGN KEY (`role_id`) REFERENCES `role`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
-
product(商品表)
CREATE TABLE `product` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID',`name` VARCHAR(255) NOT NULL COMMENT '商品名称',`description` TEXT DEFAULT NULL COMMENT '商品描述',`price` DECIMAL(10, 2) NOT NULL COMMENT '商品价格',`stock` INT(11) NOT NULL DEFAULT 0 COMMENT '商品库存',`category_id` BIGINT(20) DEFAULT NULL COMMENT '商品类别ID',`image_url` VARCHAR(255) DEFAULT NULL COMMENT '商品图片URL',`status` TINYINT(1) DEFAULT 1 COMMENT '商品状态 1-上架 0-下架',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
-
order(订单表)
CREATE TABLE `order` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',`total_price` DECIMAL(10, 2) NOT NULL COMMENT '订单总价',`status` ENUM('PENDING', 'PAID', 'SHIPPED', 'DELIVERED', 'CANCELLED') NOT NULL DEFAULT 'PENDING' COMMENT '订单状态',`shipping_address` TEXT NOT NULL COMMENT '收货地址',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`payment_method` VARCHAR(50) DEFAULT NULL COMMENT '支付方式',`payment_status` ENUM('PENDING', 'SUCCESS', 'FAILED') NOT NULL DEFAULT 'PENDING' COMMENT '支付状态',CONSTRAINT `fk_user_order` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
- order_item(订单项表)
CREATE TABLE `order_item` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '订单项ID',`order_id` BIGINT(20) NOT NULL COMMENT '订单ID',`product_id` BIGINT(20) NOT NULL COMMENT '商品ID',`quantity` INT(11) NOT NULL DEFAULT 1 COMMENT '商品数量',`unit_price` DECIMAL(10, 2) NOT NULL COMMENT '商品单价',CONSTRAINT `fk_order` FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE,CONSTRAINT `fk_product` FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';
- cart(购物车表)
CREATE TABLE `cart` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '购物车ID',`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',`product_id` BIGINT(20) NOT NULL COMMENT '商品ID',`quantity` INT(11) NOT NULL DEFAULT 1 COMMENT '商品数量',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',CONSTRAINT `fk_user_cart` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,CONSTRAINT `fk_product_cart` FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车表';
- payment(支付表)
CREATE TABLE `payment` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '支付ID',`order_id` BIGINT(20) NOT NULL COMMENT '订单ID',`payment_method` ENUM('ALIPAY', 'WECHAT', 'CREDIT_CARD') NOT NULL COMMENT '支付方式',`payment_status` ENUM('PENDING', 'SUCCESS', 'FAILED') NOT NULL DEFAULT 'PENDING' COMMENT '支付状态',`payment_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '支付时间',`transaction_id` VARCHAR(255) DEFAULT NULL COMMENT '交易流水号',`amount` DECIMAL(10, 2) NOT NULL COMMENT '支付金额',CONSTRAINT `fk_order_payment` FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付表';
-
商品类别表
category
(可选)CREATE TABLE `category` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '类别ID',`name` VARCHAR(255) NOT NULL COMMENT '类别名称',`description` TEXT DEFAULT NULL COMMENT '类别描述',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品类别表';
-
触发器(可选)
在某些情况下,你可能需要一些触发器来自动更新库存或记录日志。
DELIMITER $$CREATE TRIGGER update_stock_after_order_insert AFTER INSERT ON `order_item` FOR EACH ROW BEGINUPDATE `product`SET `stock` = `stock` - NEW.quantityWHERE `id` = NEW.product_id; END$$DELIMITER ;
六、后端实现
1. 设置Spring Boot项目
首先,创建一个Spring Boot项目,集成Spring Web, Spring Data JPA, Spring Security。
<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- Spring Security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Thymeleaf for templates --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
</dependencies>
2. 数据库实体类
- User.java
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;private String email;private String role; // ROLE_USER, ROLE_ADMIN// getters and setters
}
- Product.java
@Entity
public class Product {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String description;private double price;private int stock;// getters and setters
}
- Cart.java
@Entity public class Cart {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToOneprivate User user;@ManyToOneprivate Product product;private int quantity;// getters and setters }
- Order.java
@Entity public class Order {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToOneprivate User user;private double totalPrice;private String status; // PENDING, COMPLETEDprivate String address;private LocalDateTime createTime;@OneToMany(mappedBy = "order")private List<OrderItem> orderItems;// getters and setters }
- OrderItem.java
@Entity public class OrderItem {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToOneprivate Order order;@ManyToOneprivate Product product;private int quantity;private double price;// getters and setters }
3. 创建Repository
@Repository
public interface UserRepository extends JpaRepository<User, Long> {Optional<User> findByUsername(String username);
}@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}@Repository
public interface CartRepository extends JpaRepository<Cart, Long> {List<Cart> findByUser(User user);
}@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {List<Order> findByUser(User user);
}
4. 创建Service层
- UserService.java
@Service public class UserService {@Autowiredprivate UserRepository userRepository;public User register(User user) {// 处理密码加密return userRepository.save(user);}public User login(String username, String password) {// 密码验证逻辑return userRepository.findByUsername(username).orElse(null);} }
- ProductService.java
@Service public class ProductService {@Autowiredprivate ProductRepository productRepository;public List<Product> getAllProducts() {return productRepository.findAll();}public Product getProduct(Long id) {return productRepository.findById(id).orElse(null);}public Product addProduct(Product product) {return productRepository.save(product);} }
5. 创建Controller层
- UserController.java
@RestController @RequestMapping("/api/user") public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")public ResponseEntity<User> register(@RequestBody User user) {return ResponseEntity.ok(userService.register(user));}@PostMapping("/login")public ResponseEntity<User> login(@RequestParam String username, @RequestParam String password) {User user = userService.login(username, password);if (user == null) {return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);}return ResponseEntity.ok(user);} }
- ProductController.java
@RestController @RequestMapping("/api/products") public class ProductController {@Autowiredprivate ProductService productService;@GetMappingpublic List<Product> getAllProducts() {return productService.getAllProducts();}@GetMapping("/{id}")public Product getProduct(@PathVariable Long id) {return productService.getProduct(id);} }
- CartController.java
@RestController @RequestMapping("/api/cart") public class CartController {@Autowiredprivate CartRepository cartRepository;@PostMapping("/add")public ResponseEntity<Cart> addToCart(@RequestBody Cart cart) {return ResponseEntity.ok(cartRepository.save(cart));}@GetMapping("/list")public List<Cart> getCartItems(@RequestParam Long userId) {return cartRepository.findByUser(new User(userId));} }
七、前端实现(Angular)
1、创建 Angular 服务层
auth.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../environments/environment';@Injectable({providedIn: 'root'
})
export class AuthService {private baseUrl = `${environment.apiBaseUrl}/api/user`;constructor(private http: HttpClient) {}register(user: any): Observable<any> {return this.http.post(`${this.baseUrl}/register`, user);}getUserByUsername(username: string): Observable<any> {return this.http.get(`${this.baseUrl}/${username}`);}
}
2、创建 Angular 路由配置
在 app-routing.module.ts
中配置路由,指向用户注册和商品展示页面。
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { RegisterComponent } from './register/register.component';
import { ProductListComponent } from './product-list/product-list.component';const routes: Routes = [{ path: 'register', component: RegisterComponent },{ path: 'products', component: ProductListComponent },{ path: '', redirectTo: '/register', pathMatch: 'full' }
];@NgModule({imports: [RouterModule.forRoot(routes)],exports: [RouterModule]
})
export class AppRoutingModule {}
3、配置文件
确保在前端项目中配置了 API 基本路径和其他环境配置。比如,在 environments/environment.ts
中配置:
export const environment = {production: false,apiBaseUrl: 'http://localhost:8080'
};
4、用户登录与注册
- 使用Angular表单来处理用户输入。
register.component.tsimport { Component } from '@angular/core'; import { AuthService } from '../services/auth.service';@Component({selector: 'app-register',templateUrl: './register.component.html',styleUrls: ['./register.component.css'] }) export class RegisterComponent {user = {username: '',password: '',email: '',phone: '',address: ''};constructor(private authService: AuthService) {}register() {this.authService.register(this.user).subscribe(response => {console.log('User registered successfully!', response);}, error => {console.error('Error registering user', error);});} }
- 与后端的
/api/user/register
和/api/user/login
接口交互。
5、商品浏览与添加购物车
- 显示商品列表(调用
/api/products
接口)。product.service.tsimport { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { environment } from '../environments/environment';@Injectable({providedIn: 'root' }) export class ProductService {private baseUrl = `${environment.apiBaseUrl}/api/products`;constructor(private http: HttpClient) {}addProduct(product: any): Observable<any> {return this.http.post(`${this.baseUrl}/add`, product);}getProduct(id: number): Observable<any> {return this.http.get(`${this.baseUrl}/${id}`);} }
product-list.component.ts
import { Component, OnInit } from '@angular/core'; import { ProductService } from '../services/product.service';@Component({selector: 'app-product-list',templateUrl: './product-list.component.html',styleUrls: ['./product-list.component.css'] }) export class ProductListComponent implements OnInit {products: any[] = [];constructor(private productService: ProductService) {}ngOnInit(): void {this.productService.getProduct(1).subscribe(data => {this.products = [data];});} }
- 添加商品到购物车(调用
/api/cart/add
接口)。
6、订单管理与收货地址
- 用户下单,提交购物车中的商品到订单接口。
- 用户管理自己的订单和收货地址。
7、后台管理系统
- 管理员可以增、删、改商品,查看所有用户和订单。
八、部署与测试
- 配置Spring Boot与数据库连接。
- 在MySQL中创建数据库并运行Spring Boot应用。
- 使用Angular构建前端并与后端API交互。
相关文章:
基于Angular+BootStrap+SpringBoot简单的购物网站
目录 一、项目结构图 二、目录结构解析 后端 (Spring Boot) 前端 (Angular) 三、技术栈 四、具体功能实现 五、数据库设计 六、后端实现 1. 设置Spring Boot项目 2. 数据库实体类 3. 创建Repository 4. 创建Service层 5. 创建Controller层 七、前端实现࿰…...
微软Ignite 2024:建立一个Agentic世界!
在今年的Microsoft Ignite 2024上,AI Agent无疑成为本次大会的重点,已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布:企业可以在智能体中,使用Azure目录中1800个LLM中的任何一个模型了! 建立一个Agent…...
AIGC实践-使用Amazon Bedrock的SDXL模型进行文生图
一、Bedrock 简介 Amazon Bedrock 是 Amazon Web Services (AWS) 提供的一种生成式 AI 服务。通过 Bedrock,用户可以方便地使用多种基础模型(Foundation Models),包括 OpenAI 的 GPT、Anthropic 的 Claude 等。这些模型可以用于各…...
Android12 mtk设置插充电器自动开机
Android12 mtk平台通常关机后,插上充电器是进入关机充电流程,显示关机充电动画。 那么根据用户需求,如果需要设置关机之后,实现插上充电器后,自动开机。 正常流程:机器关机 --> 插上充电器 --> 显示…...
Linux高阶——1117—TCP客户端服务端
目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…...
Linux 命令和 vi/vim 命令
Linux 命令概览 1. 文件和目录操作 列出目录内容 ls:列出当前目录内容ls -l:以长格式列出ls -a:显示隐藏文件ls -lh:以长格式和人类可读方式显示大小ls -R:递归列出子目录ls -d */:仅列出目录ls -t&#x…...
鸿蒙征文|鸿蒙心路旅程:始于杭研所集训营,升华于横店
始于杭研所 在2024年7月,我踏上了一段全新的旅程,前往风景如画的杭州,参加华为杭研所举办的鲲鹏&昇腾集训营。这是一个专门为开发者设计的培训项目,中途深入学习HarmonyOS相关技术。对于我这样一个对技术充满热情的学生来说&…...
【docker】docker commit 命令 将当前容器的状态保存为一个新的镜像
在Docker容器中安装了许多软件,并希望将当前容器的状态保存为一个新的镜像,可以使用docker commit命令来创建一个新的镜像。以下是如何操作的步骤: 找到容器ID或名称: 首先,需要找到想要保存的容器的ID或名称。可以使用…...
Java基础1.0
1.Java有哪些数据结构 Java语言是强类型语言,对于每一种数据都定义了明确的具体数据结构,在内存中分配了不同大小的内存空间。 基本数据结构 整数类型:byte,short,long,int。 字符类型:doub…...
完全二叉树的基本操作(顺序存储)
#include<iostream> #include<math.h> using namespace std;#define MaxSize 100 struct TreeNode {int value;bool isEmpty;//判断该节点是否为空 }t[MaxSize];/** *定义一个长度位MaxSize的数组,按照从上到下, *从左到右的方式依次存储完全…...
Vue Form表单的使用,rules格式校验网络校验,键盘按键监听
Form表单 rules格式校验 可以在validator中进行网络请求,实现网络校验 const formRules {userName: [{required: true, message: "用户名不能为空", trigger: blur}, {min: 5,max: 10,message: "长度必须5-10位",trigger: blur}],passWord: …...
PyTorch2
Tensor的常见操作: 获取元素值: 注意: 和Tensor的维度没有关系,都可以取出来! 如果有多个元素则报错; import torch def test002():data torch.tensor([18])print(data.item())pass if __name__ &qu…...
蓝牙 AVRCP 协议详解
前言 随着无线音频设备的普及,蓝牙已经成为智能设备间通信的主流方式之一。除了传输音频流的 A2DP 协议外,AVRCP(Audio/Video Remote Control Profile,音频/视频远程控制协议)为用户提供了对蓝牙音频设备的控制能力&am…...
深入解析下oracle char和varchar2底层存储方式
oracle数据库中,char和varchar2数据类型用来存储字符数据。char类型一旦定义多大,那么它就分配多少字节空间;varchar2类型定义多大,代表它可以扩展的最大大小为多大,一开始空间根据使用来决定。字符数据存储在oracle表…...
2024年底-Arch linux或转为0BSD许可证!
原文:https://archlinux.org/news/providing-a-license-for-package-sources/ 解读:Arch Linux社区通过RFC 40达成共识,决定将所有软件包源代码更改为0BSD许可证。 0BSD许可证是什么?:这是一个非常自由的开源许可证&a…...
YOLOv10改进,YOLOv10添加SE注意力机制,二次C2f结构
摘要 理论介绍 SE 注意力机制是一种提升卷积神经网络(CNN)性能的模块,SE更关注重要的特征图,增强了网络的表现,同时仅增加了较少的参数。SE 机制包含两个主要步骤: Squeeze (压缩):对所有特征图进行全局平均池化,生成一个通道描述符。Excitation (激励):将通道描述符…...
探索运维新视界,CMDB的3D机房功能深度解析
在数字化转型的浪潮中,数据中心作为企业信息架构的核心,其高效、智能的管理成为了企业竞争力的关键因素之一。3D机房作为这一趋势下的创新产物,正逐步改变着传统机房运维的面貌。本文将结合乐维CMDB,深入探讨3D机房的功能细节、应…...
[QDS]从零开始,写第一个Qt Design Studio到程序调用的项目
前言 最近在使用Qt Design Studio进行开发,但是简中网上要不就是只搜得到Qt Designer(Qt Creator内部库),要不就只搜得到一点营销号不知道从哪里搬来的账号,鉴于Qt Design Studio是一个这么强大的软件,自然是需要来进行一下小小的…...
万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统
万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统 哈喽小伙伴们还,我是Stark-C~ 最近苹果Mac mini 2024款在政府补贴的加持下,仅需3500块钱左右就能到手确实挺香的。我看很多评论区的小伙伴跃跃欲试,但是也有不少之前从未体…...
视频监控实现画面缩放功能
文章目录 概要一、功能说明二、核心实现代码三、技术细节 概要 在视频监控系统中,经常需要查看视频画面中的细节。通过实现区域放大、滚轮缩放和拖拽平移等功能,可以让用户更方便地观察视频细节。本文介绍如何在 Windows 系统下实现这些交互功能。 一、…...
通信综合—8.通信网络安全
一、信息系统安全概述 1.信息系统的构成和分类 信息系统是将用于收集、处理、存储和传播信息的部件组织在一起而成的相关联的整体,般是由计算机硬件、网络和通信设备、计算机软件、信息资源和信息用户组成。它是以处理信息流为目的的人机一体化系统。信息系统主要…...
keepalived双机热备方案实现Nginx高可用
问题描述 只用一台Nginx做反向代理,如果这台Nginx出现故障(比如宕机),则服务不可用。 以下给出keepalived双机热备方案实现Nginx高可用的方法。先介绍几个概念: 高可用 高可用(High Availability)是指系统或服务能…...
数据结构——排序算法第一幕(插入排序:直接插入排序、希尔排序 选择排序:直接选择排序,堆排序)超详细!!!!
文章目录 前言一、排序1.1 概念1.2 常见的排序算法 二、插入排序2.1 直接插入排序2.2 希尔排序希尔排序的时间复杂度 三、选择排序3.1 直接选择排序3.2 堆排序 总结 前言 时间很快,转眼间已经到数据结构的排序算法部分啦 今天我们来学习排序算法当中的 插入排序 和 …...
【JavaEE初阶】枫叶经霜艳,梅花透雪香-计算机是如何运行的?
本篇博客给大家带来的是与计算机相关的知识点, 包括:计算机的组成, 指令, 进程(重点). 文章专栏: JavaEE初阶 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 计算机的组成 1.1 计算机的发展史 计算…...
MySQL数据类型与存储结构
补充知识,事务隔离的等级: READ UNCOMMITTED(读未提交) :这是最低的隔离级别,允许事务读取其他事务未提交的数据,可能导致脏读、不可重复读和幻读问题。 READ COMMITTED(读已提交࿰…...
CSRF保护--laravel进阶篇
laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…...
服务器数据恢复—raid5阵列+LVM+VXFS数据恢复案例
服务器存储数据恢复环境: 某品牌MSA2000FC存储中有一组由7块盘组建的RAID5阵列,另外还有1块硬盘作为热备盘使用。 基于RAID5阵列划分的几个LUN分配给小机使用,存储空间通过LVM管理,重要数据为Oracle数据库及OA服务端。 服务器存储…...
游卡,科锐国际,蓝禾,汤臣倍健,三七互娱,顺丰,快手,途游游戏25秋招内推
游卡,科锐国际,蓝禾,汤臣倍健,三七互娱,顺丰,快手,途游游戏25秋招内推 ①科锐国际25届秋招补录 人力资源类岗位,补录城市:苏州、宁波、武汉、东莞;全日制公办…...
内存不足引发C++程序闪退崩溃问题的分析与总结
目录 1、内存不足一般出现在32位程序中 2、内存不足时会导致malloc或new申请内存失败 2.1、malloc申请内存失败,返回NULL 2.2、new申请内存失败,抛出异常 3、内存不足项目实战案例中相关细节与要点说明 3.1、内存不足导致malloc申请内存失败&#…...
C++ 多态作业练习
作业1、 编写一个英雄类 class Hero{ int atk; int def; int spd; int hp; public: 所有的get set 方法 void equipWeapon(Weapon*) 根据传入的武器不同,英雄获得不同的属性加成 } #include <iostream> #include <cstring&g…...
(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统
摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在大学生在线计算机类专业考研学习网站管理的要求下,开发一…...
层次聚类(Hierarchical Clustering)详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Cannal实现MySQL主从同步环境搭建
大家好,我是袁庭新。 在多数情况下,客户端往往会优先获取缓存中的数据。然而,当缓存数据与数据库中的实际数据存在显著不一致时,可能会导致严重的后果。因此,确保数据库与缓存数据之间的一致性变得至关重要,…...
Js-函数-03
函数定义 在java中我们为了提高代码的复用性,可以使用方法。同样,在JavaScript中可以使用函数来完成相同的事情。JavaScript中的函数被设计为执行特定任务的代码块,通过关键字function来定义。 <!DOCTYPE html> <html lang"en…...
9.机器学习--SVM支持向量机
支持向量机(Support Vector Machine,SVM)是一种二分类监督学习模型。支持向量机最早在 1964 年被提出,1995年前后理论成熟并开始被大量应用与人像识别、文本分类等问题中。它的基本模型是定义在特征空间上的间隔最大的线性分类器&…...
探索Python的HTTP之旅:揭秘Requests库的神秘面纱
文章目录 **探索Python的HTTP之旅:揭秘Requests库的神秘面纱**第一部分:背景介绍第二部分:Requests库是什么?第三部分:如何安装Requests库?第四部分:Requests库的五个简单函数使用方法第五部分&…...
vue3项目使用动态表单formcreate
使用两个插件: 支持可视化设计的低代码表单组件 | FormCreate 好用的低代码可视化表单设计器 | FcDesigner 一、安装 1.使用 Node.js 引入 npm install form-create/element-ui npm install form-create/designer^3 npm install element-plus 2. main.js引入…...
指针的奥秘:深入探索内存的秘密
前言 在计算机编程的广阔天地中,指针作为一种独特的数据类型,它不仅是C语言的核心,也是理解计算机内存管理的基石。指针的概念虽然强大,但对于初学者来说,它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…...
车载摄像camera基础知识和评估
一、车载摄像头应用 以下是根据图片内容重新制作的表格: | 序号 | 产品用途 |------|---------------- | 1 | AVM/环视360摄像头 | 2 | DMS摄像头 | 3 | IMS/OMS摄像头 | 4 | RVC摄像头 | 5 | 红外夜视摄像头 | 6 | 底盘透明摄像头 | 7 …...
OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解
摘要:本文详细介绍了 OpenCV 中用于查找图像轮廓的 cv2.findContours() 函数以及绘制轮廓的 cv2.drawContours() 函数的使用方法。涵盖 cv2.findContours() 各参数(如 mode 不同取值对应不同轮廓检索模式)及返回值的详细解析,搭配…...
微信小程序WXSS全局样式与局部样式的使用教程
微信小程序WXSS全局样式与局部样式的使用教程 引言 在微信小程序的开发中,样式的设计与实现是提升用户体验的关键部分。WXSS(WeiXin Style Sheets)作为微信小程序的样式表语言,不仅支持丰富的样式功能,还能通过全局样式与局部样式的灵活运用,帮助开发者构建美观且易于维…...
Leetcode142. 环形链表 II(HOT100)
链接 我的错误代码: class Solution { public:ListNode *detectCycle(ListNode *head) {if(!head||!head->next)return nullptr;ListNode* f head->next,*s head;while(f){f f->next,s s->next;if(!f)return nullptr;f f->next;if(fs){ListNo…...
Java程序基础⑤Java数组的定义和使用+引用的概念
目录 1. Java数组的基本概念 1.1 数组的定义 1.2 数组存在的意义 1.3 数组的使用 1.4 二维数组 2. 引用类型JVM的内存分布 2.1 JVM的内存分布 2.2 基本数据类型和引用型数据类型的区别 2.3 引用注意事项 2.4 传值传递 3. 数组总结和应用场景 3.1 一维数组和二维数组…...
丁真杯理塘大赛题解
前言:部分代码思路可能与题解思路不同,请勿强行带入 真蛰虫 原题链接 1.一道非常基础的数学题。 2.主要就是在考察分解质因数。首先看真蛰虫的质因数是不是包含了容器的所有质因数,如果没有,那么就不能放入容器中。如果全部包…...
FPGA经验谈系列文章——8、复位的设计
前言 剑法往往有着固定的招式套路,而写代码似乎也存在类似的情况。不知从何时起,众多 FPGA 工程师们在编写代码时开启了一种关于 always 语句块的流行写法,那就是: always @(posedge i_clk or negedge i_rstn) 就笔者所经历的诸多项目以及所接触到的不少工程师而言,大家在…...
Android studio与JS交互
文章目录 前言一、html二、使用步骤1.2.AS 总结 前言 最近在使用Android Studio的WebView,有些功能要AS与JS交互。 一、html html文件 <!DOCTYPE html> <html> <!--javascript--> <head><meta charset"utf-8"><title>Carson…...
健身房小程序服务渠道开展
健身不单单是锻炼身体、保持身材,也是一种社交方式,城市里门店不少,每家都有一定流量和老客,但仅靠传统线下拉客/自然流量前往和线上朋友圈、短视频发硬广等方式还不够。 商家需要找到更多潜在目标客户,而消费者也对门…...
大宗商品行业区块链应用
应用场景 区块链技术具有透明性、去中心化、不可篡改等特点,因此可以在大宗商品定价方面得到应用。通过区块链技术,相关交易的各方可以在无需依赖中心化第三方的情况下,实时、准确地获取定价信息。这种技术的应用能够提高效率、降低成本、提…...
软考教材重点内容 信息安全工程师 第 5 章 物理与环境安全技术
5.1.1 物理安全概念 传统上的物理安全也称为实体安全,是指包括环境、设备和记录介质在内的所有支持网络信息系统运行的硬件的总体安全,是网络信息系统安全、可靠、不间断运行的基本保证,并且确保在信息进行加工处理、服务、决策支持的过程中&…...
蓝桥杯每日真题 - 第21天
题目:(空间) 题目描述(12届 C&C B组A题) 解题思路: 转换单位: 内存总大小为 256MB,换算为字节: 25610241024268,435,456字节 计算每个整数占用空间: 每个 32 位整数占用…...