web课程设计--酷鲨商城-springboot和vue
文章目录
- 页面截图
- 技术分析
- 数据库
- 代码地址
页面截图
登陆页面:
分类列表
添加分类
轮播图列表
添加轮播图
商品列表
添加商品信息
技术分析
前端使用 html页面的 vue.js(vue2)和element-ui绘制前端界面
后台使用Springboot+mybatis来实现crud。还有一个文件上传功能,保存在本地文件夹上面
数据库
数据库比较简单,一共只有四张表
一张轮播图表、一个分类表、一个产品表、一张用户表
```plain
-- MySQL dump 10.13 Distrib 8.0.29, for Win64 (x86_64)
--
-- Host: 127.0.0.1 Database: cs
-- ------------------------------------------------------
-- Server version 8.0.29/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `banner`
--DROP TABLE IF EXISTS `banner`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `banner` (`id` int NOT NULL AUTO_INCREMENT,`url` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `banner`
--LOCK TABLES `banner` WRITE;
/*!40000 ALTER TABLE `banner` DISABLE KEYS */;
INSERT INTO `banner` VALUES (1,'/imgs/b1.jpg'),(2,'/imgs/b2.jpg'),(3,'/imgs/b3.jpg'),(4,'/imgs/b4.jpg'),(5,'5b10df54-31f6-4931-b559-0dc69b819cb2.png');
/*!40000 ALTER TABLE `banner` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `category`
--DROP TABLE IF EXISTS `category`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `category` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `category`
--LOCK TABLES `category` WRITE;
/*!40000 ALTER TABLE `category` DISABLE KEYS */;
INSERT INTO `category` VALUES (1,'精彩活动'),(2,'当季女装'),(3,'品牌男装'),(4,'医药健康'),(5,'美妆彩妆'),(6,'儿童用品');
/*!40000 ALTER TABLE `category` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `product`
--DROP TABLE IF EXISTS `product`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `product` (`id` int NOT NULL AUTO_INCREMENT,`title` varchar(100) DEFAULT NULL,`url` varchar(200) DEFAULT NULL,`price` double(10,2) DEFAULT NULL,`old_price` double(10,2) DEFAULT NULL,`sale_count` int DEFAULT NULL,`num` int DEFAULT NULL,`view_count` int DEFAULT NULL,`created` timestamp NULL DEFAULT NULL,`category_id` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `product`
--LOCK TABLES `product` WRITE;
/*!40000 ALTER TABLE `product` DISABLE KEYS */;
INSERT INTO `product` VALUES (1,'苹果','c296223d-6904-4d47-9890-e7fe4f5a328b.png',12.00,12.00,12,12,1,'2024-12-26 13:59:21',1);
/*!40000 ALTER TABLE `product` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `user`
--DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`password` varchar(50) DEFAULT NULL,`nick` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `user`
--LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (1,'admin','123456','管理员');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2024-12-26 22:45:20
<h3 id="c43eE">代码分析</h3>
登录页面代码,一个表单 输入用户名和密码。点击登录后向后端发送login请求,发送post请求携带表单参数。```plain
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><link rel="stylesheet" href="css/index.css"><style>body {margin: 0;background-image: url("imgs/bg.jpg");background-size: cover;text-align: center;}h1 {font-size: 72px;color: rgb(0,150,220);margin-bottom: 0;}img { width: 100px; }h2 {font-size: 32px;color: rgb(0,150,220);margin: 0;}</style>
</head>
<body>
<div id="app"><h1>欢迎来到酷鲨商城</h1><img src="imgs/shark.png" alt=""><h2>CoolSharkMall</h2><el-card style="width: 600px;height: 300px;margin: 0 auto;background-color: rgba(255,255,255,0.3)"><el-form style="width: 400px;margin: 30px auto" label-width="60px"><el-form-item label="用户名"><el-input type="text" placeholder="请输入用户名" v-model="user.username"></el-input></el-form-item><el-form-item label="密码"><el-input type="password" placeholder="请输入密码" v-model="user.password"></el-input></el-form-item><el-form-item><el-button style="position: relative;right: 30px" type="primary" @click="login()">登录</el-button></el-form-item></el-form></el-card>
</div><!-- 引入 Vue -->
<script src="js/vue.min.js"></script><!-- 引入 Axios -->
<script src="js/axios.js"></script><!-- 引入 Element UI 样式和 JavaScript -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.15.9/lib/theme-chalk/index.css">
<script src="https://cdn.jsdelivr.net/npm/element-ui@2.15.9/lib/index.js"></script><script>let v = new Vue({el: '#app',data: function() {return {user: {username: "",password: ""}}},methods: {login() {axios.post("/login", this.user).then((response) => {if (response.data == 1) {location.href = "/admin.html";} else if (response.data == 2) {this.$message.error("用户名不存在!");} else {this.$message.error("密码错误!");}}).catch((error) => {console.error("登录请求失败:", error);this.$message.error("登录请求失败,请稍后再试。");});}}});
</script></body>
</html>
后端进行参数的接收
@RequestMapping("/login")
public int login(@RequestBody User user, HttpSession session) {User u = mapper.selectByUsername(user.getUsername());if (u != null) {if (user.getPassword().equals(u.getPassword())) {session.setAttribute("user", u);return 1;}return 3;}return 2;
}
管理台的页面
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><!-- import CSS --><link rel="stylesheet" href="css/index.css">
</head>
<body>
<div id="app"><el-container><el-header style="background-color: #0095d7"><h1 style="color: white;font-size: 22px">CoolShark商城后台管理系统<span style="float: right;font-size: 15px">欢迎{{user.nick}}回来!<a href="javascript:void(0)" @click="logout()">退出登录</a></span></h1></el-header><el-container><el-aside width="200px"><!--侧边栏开始--><el-menu class="el-menu-vertical-demo"@select="handleSelect"><el-submenu index="1"><template slot="title"><i class="el-icon-s-flag">分类管理</i></template><el-menu-item index="1-1">分类列表</el-menu-item><el-menu-item index="1-2">添加分类</el-menu-item></el-submenu><el-submenu index="2"><template slot="title"><i class="el-icon-picture">轮播图管理</i></template><el-menu-item index="2-1">轮播图列表</el-menu-item><el-menu-item index="2-2">添加轮播图</el-menu-item></el-submenu><el-submenu index="3"><template slot="title"><i class="el-icon-shopping-cart-2">商品管理</i></template><el-menu-item index="3-1">商品列表</el-menu-item><el-menu-item index="3-2">添加商品</el-menu-item></el-submenu></el-menu><!--侧边栏结束--></el-aside><el-main><!--分类表格开始--><el-table v-if="selectedIndex=='1-1'" :data="categoryArr" style="width: 100%"><!--type="index" 设置当前列展示编号信息--><el-table-column type="index" label="编号" width="180"></el-table-column><el-table-column prop="name" label="分类名称" width="180"></el-table-column><el-table-column label="操作"><!--scope代表的是当前行所包含的数据,里面有当前行对应的位置和对象--><template slot-scope="scope"><el-popconfirm title="你确定删除吗?"@confirm="categoryDelete(scope.$index, scope.row)"><el-button slot="reference" size="mini" type="danger">删除</el-button></el-popconfirm></template></el-table-column></el-table><!--分类表格结束--><!--轮播图表格开始--><el-table v-if="selectedIndex=='2-1'" :data="bannerArr" style="width: 100%"><!--type="index" 设置当前列展示编号信息--><el-table-column type="index" label="编号" width="180"></el-table-column><el-table-column label="轮播图" width="180"><template slot-scope="scope"><img :src="scope.row.url" width="150" alt=""></template></el-table-column><el-table-column label="操作"><!--scope代表的是当前行所包含的数据,里面有当前行对应的位置和对象(scope.row)--><template slot-scope="scope"><el-popconfirm title="你确定删除吗?"@confirm="bannerDelete(scope.$index, scope.row)"><el-button slot="reference" size="mini" type="danger">删除</el-button></el-popconfirm></template></el-table-column></el-table><!--轮播图表格结束--><!--商品表格开始--><el-table v-if="selectedIndex=='3-1'" :data="productArr" style="width: 100%"><!--type="index" 设置当前列展示编号信息--><el-table-column type="index" label="编号" width="180"></el-table-column><el-table-column prop="title" label="商品标题" width="150"></el-table-column><el-table-column prop="price" label="价格" width="100"></el-table-column><el-table-column prop="saleCount" label="销量" width="100"></el-table-column><el-table-column label="商品图片" width="180"><template slot-scope="scope"><img :src="scope.row.url" width="150" alt=""></template></el-table-column><el-table-column label="操作"><!--scope代表的是当前行所包含的数据,里面有当前行对应的位置和对象(scope.row)--><template slot-scope="scope"><el-popconfirm title="你确定删除吗?"@confirm="productDelete(scope.$index, scope.row)"><el-button slot="reference" size="mini" type="danger">删除</el-button></el-popconfirm></template></el-table-column></el-table><!--商品表格结束--></el-main></el-container></el-container>
</div>
</body>
<!-- import Vue before Element -->
<!--引入Vue框架-->
<script src="js/vue.min.js"></script>
<!-- import JavaScript -->
<script src="js/index.js"></script>
<script src="js/axios.js"></script><script>let v = new Vue({el: '#app',data: function () {return {selectedIndex: "1-1",categoryArr: [],bannerArr: [],productArr: [],user: {}}},methods: {logout() {axios.get("/logout").then(function () {location.href = "/";})},handleSelect(index) {console.log(index);if (index == "1-2") {console.log("添加分类");v.$prompt('请输入分类名称', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',}).then(({value}) => {console.log("分类名:" + value)let name = value;if (name == null) {v.$message.error("分类名称不能为空!");return;}//发请求添加分类axios.get("/category/insert?name=" + name).then(function () {location.reload();//刷新页面})}).catch(() => {});} else if (index == "2-2") {console.log("添加轮播图");location.href = "/insertBanner.html"} else if (index == "3-2") {console.log("添加商品");location.href = "/insertProduct.html";} else {v.selectedIndex = index;}},categoryDelete(index, category) {//发出删除分类的请求axios.get("/category/delete?id=" + category.id).then(function () {//删除成功后 删除数据里面的对象 从而让页面跟着改变//splice(a,b)数组的删除元素方法, a代表下标 b代表数量v.categoryArr.splice(index, 1);})},productDelete(index, product) {//发出删除作品的请求axios.get("/product/delete?id=" + product.id).then(function () {//删除成功后 删除数组中的内容让页面跟着改变v.productArr.splice(index, 1);})},bannerDelete(index, banner) {//发出删除轮播图的请求axios.get("/banner/delete?id=" + banner.id).then(function () {//删除成功后 删除数组中的内容让页面跟着改变v.bannerArr.splice(index, 1);})}},created: function () {//发请求获取当前登录的用户信息axios.get("/currentUser").then(function (response) {v.user = response.data;if (response.data == "") {//如果没有登录则显示登录页面location.href = "/login.html";}})//发请求获取分类数据axios.get("/category/select").then(function (response) {v.categoryArr = response.data;})//发请求获取轮播图数据axios.get("/banner/select").then(function (response) {v.bannerArr = response.data;})//发请求获取商品数据axios.get("/product/select").then(function (response) {v.productArr = response.data;})}})
</script>
</html>
后端文件上传功能:
package org.wanho.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;@RestController
public class UploadController {//读取application.properties文件中的内容 并赋值给变量@Value("${dirPath}")private String dirPath;@RequestMapping("/upload")public String upload(MultipartFile picFile) throws IOException {System.out.println("picFile = " + picFile);//得到文件的原始文件名String fileName = picFile.getOriginalFilename();//得到文件名的后缀部分 abc.jpg .jpgString suffix = fileName.substring(fileName.lastIndexOf("."));//得到唯一的文件夹 UUID.randomUUID()得到唯一标识符 是一个字符串fileName = UUID.randomUUID()+suffix;System.out.println("新文件名="+fileName);//保存文件的文件夹File dirFile = new File(dirPath);//如果不存在则创建if (!dirFile.exists()){dirFile.mkdirs();}//得到文件的完整路径 F:/files/xxxxx.jpgString filePath = dirPath+"/"+fileName;//把文件保存到filePath这个路径 异常抛出picFile.transferTo(new File(filePath));//把新的文件名响应出去, 因为删除图片时需要用到return fileName;}@RequestMapping("/remove")public void remove(String fileName){System.out.println("删除的文件名 = " + fileName);String filePath = dirPath+"/"+fileName;//删除文件new File(filePath).delete();System.out.println(filePath);}}
代码地址
https://gitee.com/z-zhou-xin/shark-mall.git
相关文章:
web课程设计--酷鲨商城-springboot和vue
文章目录 页面截图技术分析数据库代码地址 页面截图 登陆页面: 分类列表 添加分类 轮播图列表 添加轮播图 商品列表 添加商品信息 技术分析 前端使用 html页面的 vue.js(vue2)和element-ui绘制前端界面 后台使用Springbootmybatis来实现crud。还有一…...
解决virtualbox克隆ubuntu虚拟机之后IP重复的问题
找遍了国内论坛,没一个能解决该问题的,所以我自己写个文章吧,真讨厌那些只会搬运的,污染国内论坛环境,搜一个问题,千篇一律。 问题 操作系统版本为"Ubuntu 24.04 LTS" lennytest1:~$ cat /etc…...
活动预告 |【Part1】Microsoft Azure 在线技术公开课:使用 Azure DevOps 和 GitHub 加速开发
课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure DevOps 和 GitHub 加速开发”活动,了解迁移到 DevOps 所需的合适工具和…...
SpiderFlow平台v0.5.0之数据库连接
一、寻找lib目录安装方式 在 SpiderFlow 平台中,连接数据库时需要指定数据库的 DriverClassName,并确保正确配置数据库驱动。通常,驱动文件(JAR 文件)需要放置在指定的文件夹中,以便 SpiderFlow 可以找到并…...
springboot集成阿里云短信服务
springboot集成阿里云短信服务 一.阿里云账号准备 流程:注册阿里云账号>短信服务>新增资质>新建签名>新建模版>申请秘钥>用代码测试 1.注册阿里云账号 2、登录成功后, ① 在首页搜索短信服务 ② 打开第一个搜索结果 ③ 免费开通 ④ 可以根据…...
Redis 实战篇 ——《黑马点评》(上)
《引言》 在进行了前面关于 Redis 基础篇及其客户端的学习之后,开始着手进行实战篇的学习。因内容很多,所以将会分为【 上 中 下 】三篇记录学习的内容与在学习的过程中解决问题的方法。Redis 实战篇的内容我写的很详细,为了能写的更好也付出…...
Redis的生态系统和社区支持
Redis的生态系统和社区支持 1. Redis 生态系统 1.1 Redis核心 Redis 是一个高性能的内存存储系统,支持丰富的数据结构(如字符串、列表、集合、哈希和有序集合)。它的核心提供了: 高性能数据存储:单线程模型支持每秒数百万级别的操作。多种数据结构:适用于多样化场景,如…...
基于C语言从0开始手撸MQTT协议代码连接标准的MQTT服务器,完成数据上传和命令下发响应(华为云IOT服务器)
文章目录 一、前言二、搭建开发环境三、网络编程基础概念科普3.1 什么是网络编程3.2 TCP 和 UDP协议介绍3.3 TCP通信的实现过程 四、Windows下的网络编程相关API介绍4.1 常用的函数介绍4.2 函数参数介绍4.3 编写代码体验网络编程 五、访问华为云IOT服务器创建一个产品和设备5.2…...
什么是 GPT?Transformer 工作原理的动画展示
大家读完觉得有意义记得关注和点赞!!! 目录 1 图解 “Generative Pre-trained Transformer”(GPT) 1.1 Generative:生成式 1.1.1 可视化 1.1.2 生成式 vs. 判别式(译注) 1.2 Pr…...
IDEA 编辑器自动识别 Dockerfile 类型高亮和语法提示
在 IDEA 中,如果项目里面的只有一个 Dockerfile文件时,那么此时使用打开这个文件都是 ok 的,支持语法高亮和关键词提示。 如果我们有多个 Dockerfile 时, 比如 A_Dockerfile , B_Dockerfile , C_Dockerfile, 这个时候你会发现 IDE…...
AI知识库与用户行为分析:优化用户体验的深度洞察
在当今数字化时代,用户体验(UX)已成为衡量产品成功与否的关键指标之一。AI知识库作为智能客服系统的重要组成部分,不仅为用户提供快速、准确的信息检索服务,还通过用户行为分析,为产品优化提供了深度洞察。…...
什么是Redis哨兵机制?
大家好,我是锋哥。今天分享关于【什么是Redis哨兵机制?】面试题。希望对大家有帮助; 什么是Redis哨兵机制? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 哨兵(Sentinel)机制是 Redis 提…...
JavaScript中如何创建对象
在JavaScript中,创建对象有多种方法。以下是几种常见的方式: 1. 对象字面量 这是最直接和常用的创建对象的方法。使用花括号 {} 包围一组键值对来定义一个对象。 let person {name: "John",age: 30,greet: function() {console.log("…...
2025:OpenAI的“七十二变”?
朋友们,准备好迎接AI的狂欢了吗?🚀 是不是跟我一样,每天醒来的第一件事就是看看AI领域又有什么新动向? 尤其是那个名字如雷贯耳的 OpenAI,简直就是AI界的弄潮儿,一举一动都牵动着我们这些“AI发…...
Mysql(MGR)和ProxySQL搭建部署-Kubernetes版本
一、Mysql(MGR) 1.1 statefulSet.yaml apiVersion: apps/v1 kind: StatefulSet metadata:labels:app: mysqlname: mysqlnamespace: yihuazt spec:replicas: 3serviceName: mysql-headlessselector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:affinity:p…...
uni-app 多平台分享实现指南
uni-app 多平台分享实现指南 在移动应用开发中,分享功能是一个非常常见的需求,尤其是在社交媒体、营销活动等场景中。使用 uni-app 进行多平台开发时,可以通过一套代码实现跨平台的分享功能,涵盖微信小程序、H5、App 等多个平台。…...
Windows系统下载、部署Node.js与npm环境的方法
本文介绍在Windows电脑中,下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm(Node Package Manager)则…...
Typora 最新版本下载安装教程(附详细图文)
文章简介 在当今快节奏的信息化时代,简洁高效的写作工具成为了每位内容创作者的必需品。而Typora,这款备受推崇的 Markdown 编辑器,正是为此而生。它采用无缝设计,去除了模式切换、预览窗口等干扰,带来真正的实时预览…...
将一个变量声明为全局变量比如:flag1=false;然后通过jQuery使用js一个方法,将它设置为不可修改
方法 1:使用 Object.defineProperty 通过 Object.defineProperty 将全局变量设置为只读属性。 // 声明全局变量 var flag1 false;// 使用 Object.defineProperty 将其设置为不可修改 Object.defineProperty(window, flag1, {configurable: false, // 不允许删除属…...
找不到qt5core.dll无法运用软件的解决办法
在运行某些软件或游戏时,部分用户会遇到电脑显示由于找不到qt5core.dll,无法继续执行代码的问题,下面就给大家分享几种简单的解决方法,轻松恢复软件正常运行。 导致qt5core.dll缺失的原因 qt5core.dll是 Qt 应用程序框架的一部分…...
集线器,交换机,路由器,mac地址和ip地址知识记录总结
一篇很不错的视频简介 基本功能 从使用方面来说,都是为了网络传输的标识,和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器,下面是区别: 集线器 集线器:一个简单的物理扩展接口数量的物理硬件。…...
Javascript算法——回溯算法(组合问题)
相关资料来自《代码随想录》,版权归原作者所有,只是学习记录 回溯 回溯模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点…...
【人工智能机器学习基础篇】——深入详解无监督学习之聚类,理解K-Means、层次聚类、数据分组和分类
深入详解无监督学习之聚类:如K-Means、层次聚类,理解数据分组和分类 无监督学习是机器学习中的一个重要分支,旨在从未标注的数据中发现潜在的结构和模式。聚类(Clustering)作为无监督学习的核心任务之一,广…...
从0到机器视觉工程师(二):封装调用静态库和动态库
目录 静态库 编写静态库 使用静态库 方案一 方案二 动态库 编写动态库 使用动态库 方案一 方案二 方案三 总结 静态库 静态库是在编译时将库的代码合并到最终可执行程序中的库。静态库的优势是在编译时将所有代码包含在程序中,可以使程序独立运行&…...
Mybatis的set标签,动态SQL
set标签常用于update语句中,搭配if标签使用 set标签的作用 1、会动态加上前置set关键字 2、可以删除无关的逗号 示例代码: <update id"update">update employee<set><if test"name ! null">name #{name},<…...
机器学习-感知机-神经网络-激活函数-正反向传播-梯度消失-dropout
文章目录 感知机工作流程 神经网络区别各种各样的神经网络 激活函数激活函数类型Sigmoid 函数ReLU函数Leaky ReLU 函数Tanh 函数 正向传播反向传播梯度消失(gradient vanish)如何解决 Dropout使用 PyTorch实战神经网络算法(手写MNIST数字识别)viewsoftmax和log-softmaxcross-en…...
HTML5 时间选择器详解
HTML5 的时间选择器(Time Picker)允许用户通过图形界面选择时间。它通过设置 <input> 元素的 type 属性为 time 来实现。以下是关于 HTML5 时间选择器的详细讲解。 HTML5 时间选择器详解 1. 基本用法 要创建一个时间选择器,只需使用…...
SSM-Spring-AOP
目录 1 AOP实现步骤(以前打印当前系统的时间为例) 2 AOP工作流程 3 AOP核心概念 4 AOP配置管理 4-1 AOP切入点表达式 4-1-1 语法格式 4-1-2 通配符 4-2 AOP通知类型 五种通知类型 AOP通知获取数据 获取参数 获取返回值 获取异常 总结 5 …...
小红书笔记详情API分析及读取深度探讨
一、引言 随着社交电商的蓬勃发展,小红书凭借其独特的社区氛围和强大的内容生产能力,吸引了大量用户和开发者。对于开发者而言,小红书提供的API接口是获取其丰富内容的重要途径。本文将对小红书笔记详情API进行深入分析,并详细阐…...
【Yarn】通过JMX采集yarn相关指标的Flink任务核心逻辑
通过JMX采集yarn相关指标的Flink任务核心逻辑 文章目录 通过JMX采集yarn相关指标的Flink任务核心逻辑通过jmx接口查询Yarn队列指标请求JMX配置项核心处理流程输出到kafka格式通过jmx接口查询ResourceManager核心指标请求JMX读取配置yaml配置文件核心处理逻辑输出Kafka格式彩蛋 …...
【网络安全】PostMessage:分析JS实现XSS
前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口(例如,来自同一域名下的不同页面或者不同域名下的跨域页面)进行通信,而无需通过服务器。通常情况下,它用于实现跨文档消息传递&…...
基于springboot的码头船只货柜管理系统 P10078
项目说明 本号所发布的项目均由我部署运行验证,可保证项目系统正常运行,以及提供完整源码。 如需要远程部署/定制/讲解系统,可以联系我。定制项目未经同意不会上传! 项目源码获取方式放在文章末尾处 注:项目仅供学…...
SpringMVC(二)原理
目录 一、配置Maven(为了提升速度) 二、流程&&原理 SpringMVC中心控制器 完整流程: 一、配置Maven(为了提升速度) 在SpringMVC(一)配置-CSDN博客的配置中,导入Maven会非…...
计算机网络:网络层知识点及习题(一)
网课资源: 湖科大教书匠 1、概述 网络层实现主机到主机的传输,主要有分组转发和路由选择两大功能 路由选择处理机得出路由表,路由表再生成转发表,从而实现分组从不同的端口转发 网络层向上层提供的两种服务:面向连接…...
题解:A. Noldbach Problem
问题描述 Nick 对素数非常感兴趣。他阅读了有关 Goldbach Problem 的内容,了解到每个大于 2 的偶数都可以表示为两个素数的和。于是他决定创造一个新问题,称为 Noldbach Problem。 Noldbach 问题的定义如下: 如果一个素数 $p$ 满足&#x…...
ESP32S3 + IDF 5.2.2 扫描WiFi
ESP32S3 IDF 5.2.2 扫描WiFi 目录 1 资料 2 通过Wi-Fi库扫描附近的网络 2.1 通过idf命令创建工程 2.2 编写测试用例 2.3 优化测试用例 3 小结 1 资料 在ESP平台基于IDF开发WiFi相关功能,主要就是基于IDF的Wi-Fi库进行二次开发。可供参考的官方资料ÿ…...
鸿蒙开发汇总
写在前面 汇总贴,整理在开发过程中遇到的有趣的、不太好解决的问题,记录一下思考的过程及自己的解决方案。 只做为技术分享,转载请标明出处。 ArkTs-this指向问题 ArkTs-Text组件长度计算不对的问题...
PDF阅读和编辑工具——xodo
本文给大家推荐一款好用的PDF阅读和编辑工具——xodo,一款免费的跨平台PDF阅读、编辑、批注工具。 注意xodo PDF Reader是免费的,xodo PDF Studio是收费的,但是xodo PDF Studio功能多很多。...
QT-------------自定义插件和库
以下是一个使用 Qt 实现图表交互操作的示例,涵盖了自定义图表视图类、不同类型的柱状图和饼图等内容。 实现思路 自定义图表视图类:创建一个从 QChartView 派生的自定义类,用于处理图表的交互操作。主窗口设计初始化:在主窗口中…...
《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具
在本节课程中,我们来了解一下K8s集群的安全配置,通过对CIS安全基准和kube-bench工具的介绍,可以快速发现K8s集群中不符合最佳实践的配置项,及时进行修复,从而来提高集群的安全性。 在这个课程中,我们将学习…...
PCA降维算法详细推导
关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…...
C++ 基础思维导图(一)
目录 1、C基础 IO流 namespace 引用、const inline、函数参数 重载 2、类和对象 类举例 3、 内存管理 new/delete 对象内存分布 内存泄漏 4、继承 继承权限 继承中的构造与析构 菱形继承 1、C基础 IO流 #include <iostream> #include <iomanip> //…...
Excel文件恢复教程:快速找回丢失数据!
Excel文件恢复位置在哪里? Excel是微软开发的电子表格软件,它为处理数据和组织工作提供了便捷。虽然数据丢失的问题在数字时代已经司空见惯,但对于某些用户来说,恢复未保存/删除/丢失的Excel文件可能会很困难,更不用说…...
人脑处理信息的速度与效率:超越计算机的直观判断能力
人脑处理信息的速度与效率:超越计算机的直观判断能力 关键词: #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…...
Spring Boot 中的 classpath详解
Spring Boot 中的 classpath 详解 在开发 Spring Boot 应用时,理解 classpath 的概念对于配置、资源管理以及构建项目非常重要。特别是当我们使用 Maven 打包工具时,项目的资源文件在不同的阶段会被放置到不同的目录。本文将深入探讨 Spring Boot 中的 …...
标准库以及HAL库——按键控制LED灯代码
按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯:是直接控制输出引脚,GPIO初始化推挽输出即可 按键控制LED:是按键输入信号从而控制输出引脚,GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…...
Spring Cloud (四、服务熔断降级-HyStrix)
spring cloud 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的…...
【C语言】如何插入并播放音频文件
在 C 语言中处理音频文件可以是一个有趣且挑战性的任务,尤其是在嵌入式开发或多媒体程序开发中。尽管 C 语言本身并不直接支持音频处理,但可以通过集成第三方库来处理音频文件的解码和播放。本篇博客将介绍如何在 C 语言中插入并播放音频文件,…...
图书项目:整合SSM
步骤: pom文件:导包,写入静态资源导出配置,连接数据库 建包:controller dao/mapper pojo service 配置文件:mybatis-config.xml applicationContext.xml(Spring的配置文件) datab…...
C#OPC(下)
安装 OPC UA SDK 通过 NuGet 包管理器,在 Visual Studio 中右键单击项目名称,选择 “管理 NuGet 程序包”,在搜索框中输入 “OPCFoundation.NetStandard.Opc.Ua”,找到对应的 OPC UA SDK 包后点击 “安装”,将其集成到…...