【商城实战(10)】解锁商品信息录入与展示的技术密码
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想深入钻研技术细节,还是探寻商城运营之道,本专栏都能提供从 0 到 1 的系统讲解,助力你打造独具竞争力的电商平台,开启电商实战之旅。
目录
- 一、搭建商品录入前端页面
- 1.1 移动前端(uniapp 实现)
- 1.2 PC 前端(Element Plus 实现)
- 二、编写后端商品信息添加接口
- 2.1 商品数据入库
- 2.2 图片存储
- 三、开发商品详情展示页面
- 3.1 前端展示效果优化
- 3.2 调用后端接口获取商品信息
一、搭建商品录入前端页面
1.1 移动前端(uniapp 实现)
在使用 uniapp 搭建移动前端商品录入页面时,为实现多图上传功能,可借助uni.chooseImage API 。此 API 能方便地从本地相册选择图片或使用相机拍照获取图片,代码如下:
<template><view class="container"><view class="form-item"><label>商品图片:</label><view class="image-upload"><view v-for="(image, index) in images" :key="index" class="image-preview"><image :src="image" mode="aspectFill"></image><view class="delete-icon" @click="deleteImage(index)">删除</view></view><view class="upload-button" @click="chooseImages">上传图片</view></view></view><view class="form-item"><label>商品描述:</label><editor v-model="description" :config="editorConfig"></editor></view><button @click="submitForm">提交</button></view>
</template><script>
export default {data() {return {images: [],description: '',editorConfig: {// 富文本编辑器配置项toolbar: ['bold', 'italic', 'underline', 'link', 'image'],// 更多配置...}};},methods: {chooseImages() {uni.chooseImage({count: 9, // 最多选择9张图片sizeType: ['compressed'], // 图片尺寸类型,这里选择压缩图sourceType: ['album', 'camera'], // 图片来源,相册和相机success: res => {this.images = this.images.concat(res.tempFilePaths);}});},deleteImage(index) {this.images.splice(index, 1);},submitForm() {// 提交表单逻辑,将images和description等数据发送到后端console.log('提交表单,商品图片:', this.images);console.log('提交表单,商品描述:', this.description);}}
};
</script><style scoped>
.container {padding: 20px;
}
.form-item {margin-bottom: 20px;
}
.form-item label {display: block;margin-bottom: 5px;
}
.image-upload {display: flex;flex-wrap: wrap;
}
.image-preview {position: relative;margin-right: 10px;margin-bottom: 10px;
}
.image-preview image {width: 100px;height: 100px;
}
.delete-icon {position: absolute;top: 5px;right: 5px;color: red;cursor: pointer;
}
.upload-button {width: 100px;height: 100px;border: 1px dashed #ccc;display: flex;justify-content: center;align-items: center;cursor: pointer;
}
</style>
上述代码中,chooseImages 方法调用 uni.chooseImage 实现图片选择,并将选择的图片路径添加到 images 数组中。deleteImage 方法用于删除已选择的图片。对于富文本描述,使用了 editor 组件(这里假设项目中已引入合适的富文本编辑器组件),通过 v-model 绑定 description 实现数据双向绑定,用户在编辑器中输入的内容会实时更新到 description 变量中。
1.2 PC 前端(Element Plus 实现)
基于 Element Plus 搭建 PC 端商品录入页面,对于多图上传,可使用el-upload 组件。它提供了丰富的属性和事件,方便实现各种上传需求 ,示例代码如下:
<template><el-form ref="form" :model="form" label-width="120px"><el-form-item label="商品图片:"><el-uploadclass="upload-demo"action="#":multiple="true":on-success="handleUploadSuccess":on-remove="handleRemove":file-list="form.images"><el-button slot="trigger" size="small" type="primary">选择图片</el-button><el-button size="small" type="success" @click="submitUpload">上传到服务器</el-button><div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过5MB</div></el-upload></el-form-item><el-form-item label="商品描述:"><el-input type="textarea" v-model="form.description" :rows="5"></el-input></el-form-item><el-form-item><el-button type="primary" @click="submitForm">提交</el-button></el-form-item></el-form>
</template><script setup>
import { ref } from 'vue';const form = ref({images: [],description: ''
});const handleUploadSuccess = (response, file, fileList) => {// 上传成功后的处理,这里假设response包含图片的urlform.value.images.push(response.url);
};const handleRemove = (file, fileList) => {// 删除图片时的处理const index = form.value.images.indexOf(file.response.url);if (index > -1) {form.value.images.splice(index, 1);}
};const submitUpload = () => {// 实际项目中,这里应发送图片到服务器,并更新form.images为服务器返回的图片urlconsole.log('上传图片到服务器,当前图片列表:', form.value.images);
};const submitForm = () => {// 提交表单逻辑,将form.images和form.description等数据发送到后端console.log('提交表单,商品图片:', form.value.images);console.log('提交表单,商品描述:', form.value.description);
};
</script><style scoped>
.upload-demo {width: 100%;
}
</style>
在这段代码中,el-upload 组件的 action 属性指定上传的地址(这里暂时设置为 # ,实际项目中应替换为真实的上传接口),multiple 属性允许上传多张图片。handleUploadSuccess 方法在图片上传成功时被调用,将服务器返回的图片 url 添加到 form.images 数组中;handleRemove 方法在用户删除图片时被调用,从 form.images 数组中移除对应的图片。对于商品描述,使用 el-input 组件并设置 type 为 textarea 来实现多行文本输入。PC 端和移动前端在布局和交互上存在差异,PC 端屏幕较大,可展示更多信息和操作按钮,布局上更倾向于使用栅格系统等进行规整排版;而移动前端更注重简洁性和触摸交互,在组件选择和样式上会更适配小屏幕设备。
二、编写后端商品信息添加接口
2.1 商品数据入库
使用 Spring Boot 进行后端开发时,首先要设计商品数据存储的数据库表结构 。以 MySQL 数据库为例,假设商品表名为product,其字段定义如下:
CREATE TABLE product (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,description TEXT,price DECIMAL(10, 2) NOT NULL,stock INT NOT NULL DEFAULT 0
);
上述表结构中,id作为商品的唯一标识,自动递增;name字段用于存储商品名称,为必填项;description字段使用TEXT类型,可存储较长的商品描述信息;price字段使用DECIMAL类型,精确表示商品价格,保留两位小数;stock字段记录商品库存,默认值为 0 。
在 Spring Boot 项目中,使用 MyBatis-Plus 框架来操作数据库会更加便捷。首先在pom.xml文件中添加 MyBatis-Plus 和 MySQL 驱动依赖:
<dependencies><!-- MyBatis-Plus依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本号</version></dependency><!-- MySQL驱动依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>
接着定义商品实体类Product,与数据库表结构对应:
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("product")
public class Product {private Integer id;private String name;private String description;private java.math.BigDecimal price;private Integer stock;
}
然后创建商品数据访问层接口ProductMapper:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.example.demo.entity.Product;@Mapper
public interface ProductMapper extends BaseMapper<Product> {
}
最后在服务层实现商品数据入库方法:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import com.example.demo.entity.Product;
import com.example.demo.mapper.ProductMapper;@Service
public class ProductService extends ServiceImpl<ProductMapper, Product> {public boolean addProduct(Product product) {return save(product);}
}
在上述代码中,ProductService继承自ServiceImpl,通过调用save方法即可将商品数据插入到数据库中。如果插入成功,save方法返回true,否则返回false。
2.2 图片存储
图片存储有多种方案,常见的有存储至文件系统和云存储。
- 文件系统存储:即将图片直接存储在服务器的本地磁盘中。优点是实现简单,成本低,不需要额外的网络请求和第三方服务依赖。例如在 Linux 服务器上,可以将图片存储在/data/images目录下 。缺点是可扩展性差,当图片数量增多,存储容量不足时,扩展存储较为麻烦;同时,文件系统的可靠性相对较低,一旦服务器磁盘损坏,可能导致图片数据丢失 。适用于小型项目或对图片存储性能和可靠性要求不高的场景,如个人博客的图片存储。在 Java 中实现文件系统存储图片的代码示例如下:
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;public class FileSystemImageStorage {private static final String UPLOAD_DIR = "/data/images/";public String saveImage(MultipartFile file) {String originalFileName = file.getOriginalFilename();assert originalFileName != null;String fileExtension = originalFileName.substring(originalFileName.lastIndexOf("."));String newFileName = UUID.randomUUID().toString() + fileExtension;File targetFile = new File(UPLOAD_DIR + newFileName);try {file.transferTo(targetFile);} catch (IOException e) {e.printStackTrace();return null;}return newFileName;}
}
上述代码中,saveImage方法接收一个MultipartFile类型的文件,生成一个唯一的文件名,将文件保存到指定的目录,并返回保存后的文件名。
- 云存储:如使用阿里云 OSS、腾讯云 COS 等云存储服务。优点是具有高可靠性、高可用性和良好的扩展性,云服务提供商负责维护存储系统的稳定性和安全性;同时,通常提供 CDN 加速功能,能显著提高图片加载速度,提升用户体验 。缺点是需要支付一定的费用,费用根据存储容量、流量等因素计算;并且依赖于网络,若网络不稳定,可能影响图片的上传和下载 。适用于中大型电商项目,对图片存储的可靠性、扩展性和加载速度有较高要求的场景。以阿里云 OSS 为例,使用 Java SDK 实现图片存储的代码如下:
首先在pom.xml文件中添加阿里云 OSS 依赖:
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>最新版本号</version>
</dependency>
然后编写存储方法:
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;public class AliyunOSSImageStorage {private static final String ENDPOINT = "oss-cn-hangzhou.aliyuncs.com";private static final String ACCESS_KEY_ID = "yourAccessKeyId";private static final String ACCESS_KEY_SECRET = "yourAccessKeySecret";private static final String BUCKET_NAME = "yourBucketName";public String saveImage(MultipartFile file) {OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);String originalFileName = file.getOriginalFilename();assert originalFileName != null;String fileExtension = originalFileName.substring(originalFileName.lastIndexOf("."));String newFileName = UUID.randomUUID().toString() + fileExtension;try (InputStream inputStream = file.getInputStream()) {ossClient.putObject(BUCKET_NAME, newFileName, inputStream);} catch (IOException e) {e.printStackTrace();ossClient.shutdown();return null;}ossClient.shutdown();return newFileName;}
}
在上述代码中,saveImage方法通过阿里云 OSS 的 Java SDK,将图片上传到指定的存储空间,并返回上传后的文件名。
三、开发商品详情展示页面
3.1 前端展示效果优化
商品详情展示页面的前端效果优化对于提升用户体验和促进购买转化至关重要。在页面布局方面,采用简洁明了的结构,将重要信息置于显眼位置。例如,商品图片通常占据页面上方较大区域,以吸引用户眼球。使用栅格系统进行布局,确保在不同屏幕尺寸下,页面元素都能合理排列。以 PC 端为例,借助 Element Plus 的el-row和el-col组件实现栅格布局:
<template><el-row><el-col :span="12"><!-- 商品图片区域 --><el-image :src="product.imageUrl" :preview-src-list="[product.imageUrl]" fit="contain"></el-image></el-col><el-col :span="12"><!-- 商品信息区域 --><h1>{{ product.name }}</h1><p>价格:{{ product.price }}</p><p>库存:{{ product.stock }}</p><p v-html="product.description"></p></el-col></el-row>
</template><script setup>
import { ref } from 'vue';// 模拟从后端获取的商品数据
const product = ref({name: '示例商品',imageUrl: 'https://example.com/image.jpg',price: 199.99,stock: 100,description: '<p>这是一款示例商品,具有多种特性...</p>'
});
</script>
在上述代码中,通过el-row创建行容器,el-col划分列,使商品图片和商品信息分占两列,布局清晰。对于图片展示,使用el-image组件,fit="contain"属性确保图片在保持原有比例的情况下完整显示在容器内,并且preview-src-list属性提供了图片预览功能,用户点击图片可查看大图。
在交互设计上,增加一些交互效果可以提升用户参与度。比如,当用户鼠标悬停在商品图片上时,添加一个简单的放大动画,吸引用户关注图片细节。利用 CSS 的transform属性实现该效果:
.el-image {transition: transform 0.3s ease;
}
.el-image:hover {transform: scale(1.1);
}
对于移动前端(uniapp 实现),考虑到触摸交互,页面布局更加注重简洁和操作便捷性。商品图片占据屏幕宽度的大部分,下方依次排列商品名称、价格、描述等信息。同时,使用uni-swipe-action组件实现滑动删除操作(假设在商品列表页面进入详情前有删除商品的需求场景):
<template><view class="product-detail"><image :src="product.imageUrl" mode="aspectFill" class="product-image"></image><view class="product-info"><text class="product-name">{{ product.name }}</text><text class="product-price">价格:{{ product.price }}</text><text class="product-stock">库存:{{ product.stock }}</text><view v-html="product.description" class="product-desc"></view></view><!-- 假设在商品列表页面进入详情前有删除商品的需求场景 --><uni-swipe-action :left-options="leftOptions" :right-options="rightOptions"><view class="swipe-content"><!-- 商品详情内容 --></view></uni-swipe-action></view>
</template><script>
export default {data() {return {product: {name: '示例商品',imageUrl: 'https://example.com/image.jpg',price: 199.99,stock: 100,description: '<p>这是一款示例商品,具有多种特性...</p>'},leftOptions: [{text: '删除',style: { backgroundColor: 'red' },click: () => {// 删除商品逻辑}}],rightOptions: []};}
};
</script><style scoped>
.product-detail {padding: 20px;
}
.product-image {width: 100%;height: 300px;
}
.product-info {margin-top: 20px;
}
.product-name {font-size: 20px;font-weight: bold;
}
.product-price,
.product-stock {font-size: 16px;margin-top: 10px;
}
.product-desc {margin-top: 20px;
}
.swipe-content {/* 滑动操作内容的样式 */
}
</style>
优化后的商品详情展示页面在 PC 端和移动端都能为用户提供良好的视觉体验和交互感受,清晰地展示商品信息,引导用户进行购买决策。
3.2 调用后端接口获取商品信息
前端调用后端接口获取商品详细信息,以 Vue(Element Plus)为例,使用axios库来发送 HTTP 请求。首先,在项目中安装axios:
npm install axios
然后在组件中引入并使用:
<template><el-row><el-col :span="12"><el-image :src="product.imageUrl" :preview-src-list="[product.imageUrl]" fit="contain"></el-image></el-col><el-col :span="12"><h1>{{ product.name }}</h1><p>价格:{{ product.price }}</p><p>库存:{{ product.stock }}</p><p v-html="product.description"></p></el-col></el-row>
</template><script setup>
import axios from 'axios';
import { ref } from 'vue';const product = ref({});
const productId = 1; // 假设商品ID为1,实际应用中应从路由参数或其他方式获取axios.get(`/api/products/${productId}`).then(response => {product.value = response.data;}).catch(error => {console.error('获取商品信息失败', error);});
</script>
在上述代码中,通过axios.get方法向/api/products/${productId}发送 GET 请求,其中productId为商品的唯一标识。后端接收到请求后,根据productId从数据库中查询对应的商品信息并返回。前端在then回调函数中接收响应数据,并将其赋值给product变量,从而在页面上展示商品的详细信息。如果请求过程中出现错误,在catch回调函数中进行错误处理,将错误信息打印到控制台。
对于 uniapp 项目,同样可以使用axios或 uniapp 内置的uni.request方法来调用后端接口。以uni.request为例:
<template><view class="product-detail"><image :src="product.imageUrl" mode="aspectFill" class="product-image"></image><view class="product-info"><text class="product-name">{{ product.name }}</text><text class="product-price">价格:{{ product.price }}</text><text class="product-stock">库存:{{ product.stock }}</text><view v-html="product.description" class="product-desc"></view></view></view>
</template><script>
export default {data() {return {product: {}};},onLoad(options) {const productId = options.productId; // 从页面跳转参数中获取商品IDuni.request({url: `/api/products/${productId}`,method: 'GET',success: res => {this.product = res.data;},fail: err => {console.error('获取商品信息失败', err);}});}
};
</script><style scoped>
.product-detail {padding: 20px;
}
.product-image {width: 100%;height: 300px;
}
.product-info {margin-top: 20px;
}
.product-name {font-size: 20px;font-weight: bold;
}
.product-price,
.product-stock {font-size: 16px;margin-top: 10px;
}
.product-desc {margin-top: 20px;
}
</style>
在 uniapp 项目中,通过uni.request方法发送请求,success回调函数处理成功响应,fail回调函数处理请求失败情况。通过这种方式,前端能够顺利调用后端接口获取商品详细信息,并展示在商品详情页面上。
相关文章:

【商城实战(10)】解锁商品信息录入与展示的技术密码
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...

2025年主流原型工具测评:墨刀、Axure、Figma、Sketch
2025年主流原型工具测评:墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具,当然是墨刀、Axure、Figma和Sketch了,但是很多刚入行的产品经理不了解自己适合哪些工具,本文将从核心优势、局限短板、协作能…...

MDM 如何彻底改变医疗设备的远程管理
在现代医疗行业迅速发展的格局中,医院和诊所越来越依赖诸如医疗平板和移动工作站等移动设备。这些设备在提高工作效率和提供卓越的患者护理方面发挥着关键作用。然而,随着它们的广泛使用,也带来了一系列挑战,例如在不同地点确保数…...

OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数,旨在平滑图像中的纹理区域,同时保留边缘信息。该技术特别适…...

用DeepSeek学Android开发:Android初学者遇到的常见问题有哪些?如何解决?
答案来自 DeepSeek Q: Android初学者遇到的常见问题有哪些?如何解决? A: Android初学者在学习过程中常会遇到以下问题及对应的解决方法,按类别整理如下: 一、开发环境问题 Android Studio安装或配置问题 问题:安装失…...

springboot 集成 MongoDB 基础篇
demo架构: Book Controller: package com.zy.controller;import com.zy.entity.Book; import com.zy.service.MongoDbService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.Get…...

大白话html语义化标签优势与应用场景
大白话html语义化标签优势与应用场景 大白话解释 语义化标签就是那些名字能让人一看就大概知道它是用来做什么的标签。以前我们经常用<div>来做各种布局,但是<div>本身没有什么实际的含义,就像一个没有名字的盒子。而语义化标签就像是有名…...

恶劣天候三维目标检测论文列表整理
恶劣天候三维目标检测论文列表 图摘自Kradar 🏠 介绍 Hi,这是有关恶劣天气下三维目标检测的论文列表。主要是来源于近3年研究过程中认为有意义的文章。希望能为新入门的研究者提供一些帮助。 可能比较简陋,存在一定的遗漏,欢迎…...

conda的环境起的jupyter用不了已经安装的包如何解决
当你在使用Conda环境中的Jupyter Notebook时遇到无法读取某些库或模块的问题,通常是由以下几个原因引起的: 环境未激活:确保你已经在正确的Conda环境中激活了Jupyter Notebook。 库未安装:可能你需要的库没有在当前的Conda环境中…...

蓝桥杯题型
蓝桥杯题型分类 二分 123 传送门 1. 小区间的构成 假设数列的构成是如下形式: 第 1 个区间包含 1 个元素(1)。第 2 个区间包含 2 个元素(1 2)。第 3 个区间包含 3 个元素(1 2 3)。第 4 个区…...

STM32-I2C通信协议
一:I2C通信协议 就是在串口通信上满足四个要求 要求1:删掉一根通信线,防止资源浪费,只能在同一根线上进行发送和接收要求2:需要一个应答机制,没发送一个字节都有一次应答要求3:一根线上能同时…...

taosd 写入与查询场景下压缩解压及加密解密的 CPU 占用分析
在当今大数据时代,时序数据库的应用越来越广泛,尤其是在物联网、工业监控、金融分析等领域。TDengine 作为一款高性能的时序数据库,凭借独特的存储架构和高效的压缩算法,在存储和查询效率上表现出色。然而,随着数据规模…...

uniapp微信小程序vue3自定义tabbar
在App.vue隐藏原生tabbar,也可以在pages.json中配置 二选一就好了 创建 CustomTabBar 公共组件 <template><view class"custom-tab-bar" :style"{paddingBottom: safeAreaHeight px}"><view class"tab-bar-item" :…...

BUUCTF——[GYCTF2020]FlaskApp1 SSTI模板注入/PIN学习
目录 一、网页功能探索 二、SSTI注入 三、方法一 四、方法二 使用PIN码 (1)服务器运行flask登录所需的用户名 (2)modename (3)flask库下app.py的绝对路径 (4)当前网络的mac地…...

如何用Kimi生成PPT?秒出PPT更高效!
做PPT是不是总是让你头疼?😩 快速制作出专业的PPT,今天我们要推荐两款超级好用的AI工具——Kimi 和 秒出PPT!我们来看看哪一款更适合你吧!🚀 🥇 Kimi:让PPT制作更轻松 Kimi的生成效…...

数据结构(回顾)
数据结构(回顾) 回顾 不同点顺序表链表存储空间上物理上一定连续逻辑上连续,物理上不一定连续随机访问支持,时间复杂度O(1)不支持,时间复杂度O(N)任意位置插入或者删除元素可能需要挪动元素,效率低&#…...

全国产!瑞芯微3562Mini(2GHz四核A53 NPU)工业开发板规格书
评估板简介 创龙科技 TL3562-MiniEVM 是一款基于瑞芯微 RK3562J/RK3562 处理器设计的四核 AR M Cortex-A53 单核 ARM Cortex-M0 国产工业评估板,主频高达 2.0GHz。评估板由核心板和评估底板组成,核心板 CPU、ROM、RAM、电源、晶振等所有元器件均采用国…...

鸿蒙HarmonyOS评论功能小demo
评论页面小demo 效果展示 1.拆解组件,分层搭建 我们将整个评论页面拆解为三个组件,分别是头部导航,评论项,回复三个部分,然后统一在index界面导入 2.头部导航界面搭建 Preview Component struct HmNavBar {// 属性&a…...

异常(6)
今天我们继续来讲异常的内容,关于异常的捕获和声明,也是在处理异常的的重要方式,话不多说,来看. 异常的捕获 异常的捕获,也就是异常,的具体处理方式,主要有两种,主要有两种:异常声明throws以及try-catch捕获处理. 3.1异常声明throws. 处在方法声明时参数列表之后…...

精选一百道备赛蓝桥杯——2.K倍区间
解题思路 任何两个前缀区间的和对k取模的值相等,则由大的前缀区间减掉小的前缀区间所形成的区间的必定是K倍区间。因此我们可以对具有区间和%k值相等任何两个区间进行组合,再将这些值加起来就得到结果!证明: 假设一个数列为a1,a2…...

编译Telegram Desktop
目录 一、前言 二、环境准备 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 三、编译 四、总结和学习 一、前言 Telegram 是一款全球广泛使用的即时通讯软件,以其强大的隐私保护、跨平台同步和丰富的功能而闻名。它支持一对一聊天、群组(最多20万成员&am…...

玩转python: 掌握Python数据结构之链表
链表是计算机科学中最基础的数据结构之一,也是许多高级数据结构和算法的基础。本文将带你从零开始,逐步掌握链表的概念、实现和应用。通过丰富的案例和通俗易懂的解释,你将能够轻松理解并应用链表。 什么是链表? 链表是一种线性…...

upload-labs详解(1-12)文件上传分析
目录 uploa-labs-main upload-labs-main第一关 前端防御 绕过前端防御 禁用js Burpsuite抓包改包 upload-labs-main第二关 上传测试 错误类型 upload-labs-env upload-labs-env第三关 上传测试 查看源码 解决方法 重命名,上传 upload-labs-env第四关…...

RAG系统(检索增强生成)的优化策略
RAG(检索增强生成)系统的优化可以从多个方面入手,主要包括数据、查询、检索、生成、框架和评估等几个重要环节。本文将详细介绍这些优化策略,并为每个环节提供具体的操作方法。 一、数据优化 1. 数据清洗和增强 数据质量直接影响检索和生成的效果,因此需要进行细致的数据…...

写毕业论文用哪个AI好?这6款AIGC论文工具给你答案
撰写毕业论文是一项艰巨的任务,AIGC 论文工具的出现为同学们提供了有力支持。以下 6 款工具在功能、适用场景等方面各有优势,助你高效完成毕业论文。 文赋 AI 论文 文赋 AI 论文堪称毕业论文写作的得力助手。它的生成速度令人惊叹,短短 5 分…...

loadingcache优化
问题分析 通过当前现场的火焰图进行分析 原本的loadingcache public LoadingCache<Integer, Student> map Caffeine.newBuilder().refreshAfterWrite(CONTRACT_CACHE_HOURS, TimeUnit.HOURS).maximumSize(CONTRACT_CONFIG_CACHE_SIZE).recordStats().build(key -> …...

【Vue3 Element UI - Plus + Tyscript 实现Tags标签输入及回显】
Vue3 Element Plus TypeScript 实现 Tags 标签输入及回显 在开发后台管理系统或表单页面时,动态标签(Tags) 是一个常见的功能需求。用户可以通过输入框添加标签,并通过关闭按钮删除标签,同时还需要支持标签数据的提…...

STM32 子设备通过CAN发送数据到主设备
采集ADC、GPS经纬坐标、温湿度数据、大气压数据通过CAN方式发送给主设备端,帧ID按照如下定义: 我尼玛一个标准帧ID位数据是11位,扩展帧才是111829位,它说最开头的是四位是真类型,并给我如下解释: 它把帧的定…...

Python可视化——地理空间型图表(自用)
地图信息可视化的实现就是将不可展开的曲面上的地理坐标信息转化为二维平面进行显示,这个过程也叫地图投影(空间三维投影到平面二维) 地图投影的要求:等面积、等角度、等距离。总的来说就是映射到二维平面中的任何点通过比例尺放大…...

WordPress报502错误问题解决-php-fpm-84.service loaded failed failed LSB: starts php-fpm
文章目录 问题描述问题排查问题解决 问题描述 服务器环境: php:8.4MySQL:8.0Nginx:1.26.2 在访问站点时,一直报502,而两天前还能正常访问。 问题排查 导致502的问题很多,比如站点访问量太大…...