uniapp-商城-52-后台 商家信息(商家信息数据,云对象使用)
1、概述
已经通过好几个篇幅来说明商家信息,包括logo、商家名称,地址,电话以及商家简介。通过表单组件和标签,以及我们的文件上传标签,都做了说明。(logo上传,用的文件上传组件是上传到公共的数据库,并没有整合上传到项目定义或需要的数据库)
下面就是关键的步骤,如何将数据上传到我们自己的数据库。前面的分类我们直接在页面中进行的数据上传和使用。但一般不这样使用,一般是采用云对象的方式来处理数据的交互,页面上主要做业务逻辑的实现,以此来实现前后对分离。
2、创建云对象
云对象是把云函数实现的方法集中放在一起,然后通过一个接口进行调用,比如所有逻辑层的增删改查一起实现,管理和使用都较为方便。
2.1 到项目中的云数据库中,cloudfunction--->创建云对象
2.2 创建一个云对象 green-mall-brand
2.3 基本样式
创建一个云对象 green-mall-brand,包含不同的数据库操作。
生成重要的文件index.obj.js 这个就是云对象,在该文件中,需要引入数据库,对数据库进行增删改查等。
3、调试和使用
3.1 green-mall-brand下进行调试
在这里进行调试就会生成green-mall-brand.parm.js的调试文件,可以在这里进行调用相应的方法,比如这里的add get update等等,但是一般用的比较少。
3.2 将该云对象调用到业务逻辑页面
一般用本地调试的较少,大多数都是用到逻辑页面进行使用,使用前需要将该云对象定义到业务逻辑页面,这里将green-mall-brand 引入了brand的页面。
const brandCloudObj = uniCloud.importObject("green-mall-brand")
3.3 使用云对象提供的方法
green-mall-brand中的index.obj.js 提供add get update几种方法,我们可以在这里编写方法进行调用。
3.3.1 get
3.3.2 add和update
3.4 传递页面逻辑的值给云对象中的接口
3.4.1 在云对象中处理
预处理定义一个参数变量
this.params = this.getParams()[0]
如下:
_before: async function () { // 通用预处理器this.userInfo =await utils.getUserInfo(this);this.params = this.getParams()[0]},
3.4.2 在不同接口中进行参数值的调用
在接口中使用定义的参数params
async get(){ return await db.collection("green-mall-brand").get()},async add(){//需要登录if(!this.userInfo.uid) return {msg:"没有权限",code:-1};//需要管理权限if(!this.userInfo.role.includes('manage')) return {msg:"没有权限",code:-1}; return await db.collection("green-mall-brand").add(this.params)},async update(){if(!this.userInfo.uid) return {msg:"没有权限",code:-1};if(!this.userInfo.role.includes('manage')) return {msg:"没有权限",code:-1}; let params = {...this.params};delete params._idreturn await db.collection("green-mall-brand").doc(this.params._id).update(params)}
3.4.3 云对象整体的参数使用代码
这里我们可以看到,当云对象执行了其中的接口,也会进行结果的返回
3.4.4 页面逻辑对参数的值的传递
3.4.4.1 页面逻辑在定义表单组件就进行了双向绑定,这样就把数据传给这里的参数变量 brandFromData,都用了v-model
3.4.4.2 logo数据的处理 在提交时 onsubmit 进行了抽取,减少了很多不需要的属性值,通过执行addAndUpdate 判断是否有id值来判断该操作添加还是刷新。
3.4.5 进入页面应该是先获取数据 get 和onload
3.4.5.1 页面逻辑 onload
获取到数据就显示res.data[0]的值,没有就直接返回。
3.4.5.2 数据库获取数据 云对象中实现get 记得return
return 页面才能获取到数据。
3.5 数据库的创建
藏这里,你找到了吗?
说了很多了,但是一直没有说数据库创建,前面我们都有用schema进行表结构定义
这里没有进行表结构定义,直接就是云对象需要使用时,页面逻辑来调用云对象会自己自动创建green-mall-brand这个数据库。
4、完整的代码
4.1 云对象代码
其中package.json 为自动生成
green-mall-brand.parm.js 本地调试
下面只是云对象的代码(indexobj.js)
// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129//第一步:链接数据库
const db = uniCloud.database();const utils = require("self-utils")
module.exports = {_before: async function () { // 通用预处理器this.userInfo =await utils.getUserInfo(this);this.params = this.getParams()[0]},async get(){ return await db.collection("green-mall-brand").get()},async add(){//需要登录if(!this.userInfo.uid) return {msg:"没有权限",code:-1};//需要管理权限if(!this.userInfo.role.includes('manage')) return {msg:"没有权限",code:-1}; return await db.collection("green-mall-brand").add(this.params)},async update(){if(!this.userInfo.uid) return {msg:"没有权限",code:-1};if(!this.userInfo.role.includes('manage')) return {msg:"没有权限",code:-1}; let params = {...this.params};delete params._idreturn await db.collection("green-mall-brand").doc(this.params._id).update(params)}
}/*** method1方法描述* @param {string} param1 参数1描述* @returns {object} 返回值描述*//* method1(param1) {// 参数校验,如无参数则不需要if (!param1) {return {errCode: 'PARAM_IS_NULL',errMsg: '参数不能为空'}}// 业务逻辑// 返回结果return {param1 //请根据实际需要返回值}}*/
}
4.2、页面逻辑
<template><view class="brand"><!-- <uni-forms ref="brandRef" :model="brandFormData" :rules="brandRules" :label-width="100" label-align="right"> --><uni-forms ref="brandRef" :model="brandFormData" :label-width="100" label-align="right"><!--https://uniapp.dcloud.net.cn/component/uniui/uni-forms.htmlref 就是定义这个表单的标识 model:数据rules:校验规则label-width 加冒号绑定就数字,不加冒号就要写成100px,不能rpxlabel-align 对齐方式--><uni-forms-item label="品牌招牌" required name="thumb"><uni-file-picker v-model="brandFormData.thumb" fileMediatype="image" mode="grid" :limit="1" /><!-- v-model="brandFormData.thumb" 双向绑定 所里略图 这里默认是一个数组 下面定义data 就一个数组fileMediatype 文件类型是图像mode 文件呈现的样式 要不是list 列表 要不是九宫格的grid 上面是三个基本的属性limit 限制传几个文件 一般logo就一张。--></uni-forms-item><uni-forms-item label="品牌名称" name="name" required><!-- name 是标签名字 后面借来标识是哪一个被验证 required 是强制输入项目 必填--><uni-easyinput type="text" v-model="brandFormData.name" placeholder="请输入品牌名称" /></uni-forms-item><uni-forms-item label="商户电话" name="mobile" required><uni-easyinput type="text" v-model="brandFormData.mobile" placeholder="请输入商户电话" /></uni-forms-item><uni-forms-item label="商户地址" name="address" required><uni-easyinput v-model="brandFormData.address" placeholder="请输入商户地址" /></uni-forms-item><uni-forms-item label="商家介绍" name="about"><uni-easyinput v-model="brandFormData.about" placeholder="请输入商家介绍" type="textarea" /></uni-forms-item><button type="primary" @click="onSubmit">提交信息</button><!-- type 按钮样式选择 --></uni-forms></view>
</template><script>import {mapMutations} from "vuex"const brandCloudObj = uniCloud.importObject("green-mall-brand")export default {data() {return {brandFormData: {thumb: [], //数组name: "", //品牌名称mobile: "",address: "",about: ""},brandRules: {thumb: {rules: [{required: true,errorMessage: "品牌招聘需要上传"}]},name: {rules: [{required: true,errorMessage: "请输入正确的品牌名称"}, {minLength: 3,maxLength: 20,errorMessage: '长度在{minLength}到{maxLength}的字符'}]},mobile: {rules: [{required: true,errorMessage: "请输入正确的手机号码"}, {validateFunction: function(rule, value, data, callback) {let res = /^1[3-9]\d{9}$/.test(value);if (!res) {callback("手机格式不正确")}return;}}]},address: {rules: [{required: true,errorMessage: "请输入正确的商户地址"}, {minLength: 6,maxLength: 100,errorMessage: '长度在{minLength}到{maxLength}的字符'}]}}};},onLoad() {this.isManage();this.getBrand();},//这是日狗了,它大爷的onReady() {this.$nextTick(() => {this.$refs.brandRef.setRules(this.brandRules);});},methods: {...mapMutations(["SET_BRAND"]),//获取数据库中的品牌信息getBrand() {brandCloudObj.get().then(res => {if (!res.data.length) return;this.brandFormData = res.data[0]})},//点击提交按钮onSubmit() {this.$refs.brandRef.validate().then(res => {let arr = this.brandFormData.thumb.map(item => {return {extname: item.extname,url: item.url,name: item.name,size: item.size}})this.brandFormData.thumb = arr;this.addAndUpdate();}).catch(err => {// console.log(err);})},//新增或者修改品牌啊信息async addAndUpdate() {let title;if (this.brandFormData._id) {let res = await brandCloudObj.update(this.brandFormData)title = "修改成功"} else {//新增await brandCloudObj.add(this.brandFormData)title = "新增成功"}uni.showToast({title,mask: true})setTimeout(() => {uni.navigateBack();}, 1500)this.SET_BRAND(this.brandFormData);}}}
</script><style lang="scss" scoped>.brand {padding: 30rpx;//间距是30rpx, 每一个标签之 标签内部 需要label-width 来调整}
</style>
相关文章:
uniapp-商城-52-后台 商家信息(商家信息数据,云对象使用)
1、概述 已经通过好几个篇幅来说明商家信息,包括logo、商家名称,地址,电话以及商家简介。通过表单组件和标签,以及我们的文件上传标签,都做了说明。(logo上传,用的文件上传组件是上传到公共的数…...
【我的创作纪念日】512
机缘 还记得 2023 年 12 月 15 日,我撰写了第 1 篇技术博客:《oracle 跟踪文件--审计日志》。从此,这平凡的一天,赋予了我不平凡的意义。在那一刻,我已在创作这趟旅程中出发,并立志将工作中的经验总结&…...
共享内存与信号量结合
在Linux系统中,进程间通信(IPC)和原子性是并发编程中的核心问题。以下是对这些概念的详细分步解释: 一、进程间通信(IPC)方法 1. 管道(Pipe) 匿名管道:用于父子进程等有…...
西门子PLC s7-1200工艺对象“轴”的应用(1)
1. 工艺对象 “ 轴 ” 的概念 在西门子 S7-1200 PLC 中,术语 “ 轴 ” 特指用 “ 轴 ” 工艺对象表示的驱动器工艺映像。 “ 轴 ” 工艺对象是用 户程序与驱动器之间的接口,用于接收用户程序中的运动控制命令、执行这些命令并监视其运行情况。 运动控制…...
ubuntu22.04在 Docker容器中安装 ROS2-Humble
22.04 安装 docker 容器并实现rviz功能 1 docker pull命令拉取包含ROS-Humble的镜像: docker pull osrf/ros:humble-desktop-full-jammy docker images验证该镜像是否拉取成功。 使用镜像osrf/ros:humble-desktop-full-jammy创建并运行容器 sudo docker run -it…...
【LwIP源码学习6】UDP部分源码分析
前言 本文对lwip协议栈里UDP部分的源码进行分析。将源码中最关键部分提取出来,梳理UDP部分的设计框架。 应用层例子 首先举一个应用层使用UDP的简单例子,如下: //第一步:申请套接字 sock socket(AF_INET, SOCK_DGRAM, 0); //…...
Python Cookbook-7.10 在 MySQL 数据库中储存 BLOB
任务 想把一个二进制的大对象(BLOB)存入MySQL数据库 解决方案 MySQLdb 模块并不支持完整的占位符,不过可以使用模块的escape_string 函数来解决: import MySQLdb,cPickle #连接到数据库,用你的本机来测试数据库,并获得游标 connection = MySQLdb.connect(db = "tes…...
LWIP的ICMP协议
ICMP协议简介 ICMP协议是一个网络层协议 背景:如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。因此我们需要ICMP协议来完成这样的功能 为什么需要ICMP协议 1,IP 协议本身不提供差错报告和差错控制机制来保证数据报递交的有效…...
Spring Web MVC响应
返回静态页面 第一步 创建html时,要注意创建的路径,要在static下面 第二步 把需要写的内容写到body内 第三步 直接访问路径就可以 返回数据ResponseBody RestController Controller ResponseBody Controller:返回视图 ResponseBody&…...
STM32智能窗帘系统:从零到一的开发实战
简介 智能窗帘控制系统是智能家居领域的经典应用,随着物联网技术的不断发展,其功能从简单的远程控制演变为具备环境感知、多设备联动和跨平台兼容的智能系统。本篇文章将全面解析基于STM32的智能窗帘系统开发方案,从硬件设计到软件实现,再到企业级扩展功能,提供完整的代码…...
第三方评测机构如何凭借专业公正提供高可靠性软件检测服务?
第三方评测机构与软件开发及使用单位保持独立,凭借其专业技能和公正立场,为企业提供多样化的软件检测服务。这些检测结果的可靠性极高,不仅有助于企业减轻负担,节省人力和物力资源,而且赢得了业界的普遍认可。下面&…...
相或为K(位运算)蓝桥杯(JAVA)
这个题是相或为k,考察相或的性质,用俩个数举例子,011001和011101后面的数不管和哪个数相或都不可能变成前面的数,所以利用这个性质我们可以用相与运算来把和k对应位置的1都积累起来,看最后能不能拼起来k如果能拼起来k那…...
X.509证书详解
文章目录 1. X.509证书基础1.1 什么是X.509证书1.2 X.509证书结构1.3 证书编码格式2. Java中的X509Certificate2.1 类层次结构2.2 核心方法3. 获取X509Certificate对象3.1 从文件加载证书3.2 从KeyStore获取证书3.3 从HTTPS连接获取证书4. 创建自签名证书5. 证书验证5.1 基本验…...
深入浅出:Spring Boot 中 RestTemplate 的完整使用指南
在分布式系统开发中,服务间通信是常见需求。作为 Spring 框架的重要组件,RestTemplate 为开发者提供了简洁优雅的 HTTP 客户端解决方案。本文将从零开始讲解 RestTemplate 的核心用法,并附赠真实地图 API 对接案例。 一、环境准备 在 Spring…...
C++23 views::repeat (P2474R2) 写一篇博客
文章目录 std::views::enumerate 简介使用示例性能和灵活性与其他视图的结合使用总结 C23 标准引入了众多令人期待的新特性,其中 std::views::enumerate 便是一个备受瞩目的新增视图。这个新特性通过为迭代器提供索引和元素的组合,极大地简化了对集合中…...
微软向现实低头:悄悄延长Windows 10的Microsoft 365支持
快科技5月11日消息,Windows 10将在今年10月14日正式结束支持,此前微软曾明确表示,Microsoft 365(M365)应用,如Outlook、Teams、OneDrive、Word、Excel等,也将随之停止支持。 不过无法升级至Win…...
数字化转型-4A架构之技术架构
4A架构系列文章 数字化转型-4A架构(业务架构、应用架构、数据架构、技术架构) 数字化转型-4A架构之业务架构 数字化转型-4A架构之应用架构 数字化转型-4A架构之数据架构 数字化转型-4A架构之技术架构 一、 技术架构 Technology Architecture 1. 技…...
生产级 Flink CDC 应用开发与部署:MySQL 到 Kafka 同步示例
生产级 Flink CDC 应用开发与部署:MySQL 到 Kafka 同步示例 为了帮助你更好地理解如何将 Flink 作业部署为独立服务,下面我将提供一个完整的工程代码示例。这个例子基于之前的 MySQL 到 Kafka 的数据同步需求,但这次我们将 Flink 作业作为一个独立的服务进行打包和部署。 …...
【计算机视觉】OpenCV实战项目:Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 图像预处理流水线2.2 表格结构检测算法2.3 OCR优化策略 3. 实战部署指南3.1 环境配置3.2 核心代码解析3.3 执行流程示例 4. 常见问题与解决方案4.…...
TSN网络与DIOS融合:破解煤矿井下电力系统越级跳闸难题
一、引言 1.1 研究背景与意义 在现代煤矿生产中,井下电力系统作为整个煤矿生产的动力核心,其重要性不言而喻。煤矿井下的各类机械设备,如采煤机、刮板输送机、通风机、排水泵等,都依赖稳定的电力供应才能正常运行。电力系统的稳定…...
ALLinSSL:一站式SSL证书管理解决方案
引言 在当今互联网安全日益重要的背景下,SSL证书已成为保护网站安全的必备工具。然而,管理多个SSL证书常常是一项繁琐且容易出错的任务。ALLinSSL应运而生,它提供了一个一站式的SSL证书管理解决方案,大大简化了证书的申请、安装和更新过程。本文将深入介绍ALLinSSL的特性、…...
jsAPI
环境准备 1 安装nvm nvm 即 (node version manager),好处是方便切换 node.js 版本 安装注意事项 要卸载掉现有的 nodejs提示选择 nvm 和 nodejs 目录时,一定要避免目录中出现空格选用【以管理员身份运行】cmd 程序来执行 nvm 命令首次运行前设置好国…...
三、c语言练习四题
在这个系列中,我将以每次五题的形式加强对C语言的理解 1、 矩阵转置 要求 输入: 2 3 1 2 3 4 5 6输出: 1 4 2 5 3 6 //矩阵转置(复习) int main() {int i 0;int j 0;int arr[10][10];/*提前定义好一个大容量数…...
MySql(进阶)
一.数据库约束 约束类型 NOT NULL - 指示某列不能存储 NULL 值。 (not null不能为NILL) UNIQUE - 保证某列的每行必须有唯一的值。 (unique唯一值) DEFAULT - 规定没有给列赋值时的默认值。 (default为空给定默认值) PRIMARY…...
数据结构练习:顺序表题目
今天我们来进行顺序表后面习题的练习 目录 移除数组 思路1:查找后进行删除 思路2:新数组交换: 思路3:双指针法: 删除重复项 合并两个有序数组 移除数组 它的示例如下: 思路1:查找后进行删除…...
Ubuntu 22虚拟机【网络故障】快速解决指南
Ubuntu22虚拟机突然无法连接网络了,以下是故障排除步骤记录。 Ubuntu 22虚拟机网络故障快速解决指南 当在虚拟机中安装的 Ubuntu 22 系统出现 ping: connect: 网络不可达 和 ping: www.baidu.com: 域名解析出现暂时性错误的报错时,通常意味着虚拟机无法…...
SwaggerLogger.java
package further.config;import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils;/*** swagger启动ap…...
基于SpringBoot的在线教育管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
企业内训|智能调控系统算法与优化——某汽车厂商
5月9日,东北某市,TsingtaoAI团队为某汽车厂商的智能驾驶业务和研发团队交付“智能调控系统算法与优化”课程。 本课程系统化解析智能调控系统的核心算法原理与前沿优化技术,深度融合经典控制、现代控制及模型预测控制(MPC&#x…...
Web 实时通信技术:WebSocket 与 Server-Sent Events (SSE) 深入解析
一、WebSocket: (一)WebSocket 是什么? WebSocket 是一种网络通信协议,它提供了一种在单个 TCP 连接上进行全双工通信的方式。与传统的 HTTP 请求 - 响应模型不同,WebSocket 允许服务器和客户端在连接建立…...
一个网球新手的学习心得
一个网球新手的学习心得 握拍正手反手发球 网球新手学习的几个重要点就是握拍、正手、反手,还有发球。 握拍 不管是发球还是拉球,首先要注意握拍的方式。 正手的话,一般是右手握住球拍柄,掌心对着球拍柄宽的一面,食…...
12、电子电路设计与PCB布局组件 (概念) - /设计与仿真组件/pcb-layout-tool
76个工业组件库示例汇总 电子电路设计与 PCB 布局组件 (概念演示) 概述 这是一个交互式的 Web 组件,用于演示电子电路原理图设计和 PCB 布局的基本概念。用户可以从元件库中选择元件,在原理图和 PCB 画布上放置、移动,进行原理图连线&…...
[特殊字符] 免税商品优选购物商城系统 | Java + SpringBoot + Vue | 前后端分离实战项目分享
一、项目简介 本项目为一款功能完备的 免税商品优选购物商城系统,采用 Java 后端 Vue 前端的主流前后端分离架构,支持用户、商家、管理员三类角色,满足商品浏览、下单、商家管理、后台运营等多项功能,适用于实际部署或作为毕业设…...
小土堆pytorch--torchvision中的数据集的使用dataloader的使用
torchvision中的数据集的使用&dataloader的使用 一级目录二级目录三级目录 1 torchvision 中的数据集的使用1.1 对与CIFAR - 10数据集的介绍1.2 数据集加载代码1.3 使用transform加载代码 2 DataLoader的使用2.1 DataLoader的作用1. 数据读取2. 数据预处理3. 批量处理4. 并…...
【RabbitMQ】 RabbitMQ高级特性(一)
文章目录 一、消息确认1.1、消息确认机制1.2、手动确认方法1.2.1、AcknowledgeMode.NONE1.2.2、AcknowledgeMode.AUTO1.3.3、AcknowledgeMode.MANUAL 二、持久性2.1、 交换机持久化2.2、队列持久化2.3、消息持久化 三、发送方确认3.1、confirm确认模式3.2、return退回模式3.3、…...
优化理赔数据同步机制:从4小时延迟降至15分钟
优化理赔数据同步机制:从4小时延迟降至15分钟 1. 分析当前同步瓶颈 首先诊断当前同步延迟原因: -- 检查主从复制状态(在主库执行) SHOW MASTER STATUS; SHOW SLAVE HOSTS;-- 在从库执行检查复制延迟 SHOW SLAVE STATUS\G -- 关…...
lampiao靶场渗透
lampiao https://www.vulnhub.com/entry/lampiao-1,249/ 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.245 3,对靶机进行端…...
云计算中的虚拟化:成本节省、可扩展性与灾难恢复的完美结合
云计算中虚拟化的 4 大优势 1. 成本效益 从本质上讲,虚拟化最大限度地减少了硬件蔓延。团队可以将多个虚拟机整合到单个物理主机上,而不是为每个工作负载部署单独的服务器。这大大减少了前期硬件投资和持续维护。 结果如何?更低的功耗、更低…...
jenkins built-in节点如何删除
1 概述 在 Jenkins 中,默认的 “Built-In” 节点(即主节点/master)无法直接删除,因为它是 Jenkins 的核心组件。它的存在,有时会造成困扰,因为部分作业调度到其上,由于 “Built-In” 节点的环境…...
QSS样式表的选择器
一个最简单的样式设置格式如下 QWidget {background-color: black; }将样式应用到对应的控件 QWidget* w new QWidget; w->setStyleSheet("QWidget {background-color: black;}");样式表中控件的设置有多种方式 通用选择器 /*匹配所有控件*/ *{}类型选择器 …...
Python多环境管理指南
Python/UV 多环境管理指南 在Python开发中,管理多个项目环境是一个常见需求。以下是使用Python内置工具和UV(一种新兴的Python包管理器)进行多环境管理的方法。 1. 使用Python内置venv管理多环境 创建虚拟环境 python -m venv /path/to/y…...
Java从入门到精通 - 数组
数组 此笔记参考黑马教程,仅学习使用,如有侵权,联系必删 文章目录 数组1. 认识数组2. 数组的定义和访问2.1 静态初始化数组2.1.1 数组的访问2.1.1 定义代码实现总结 2.1.2 数组的遍历2.1.2.1 定义代码演示总结 案例代码实现 2.2 动态初始化…...
《Vuejs 设计与实现》第 4 章(响应式系统)( 下 )
目录 4.6 避免无限递归循环 4.7 调度执行 4.8 计算属性 computed 与 lazy 4.9 watch 的实现原理 4.10 立即执行的 watch 与回调执行时机 4.11 过期副作用与竞态问题 总结 4.6 避免无限递归循环 在实现完善响应式系统时,需要注意避免无限递归循环。以以下代码…...
在 Windows 上为 Intel UHD Graphics 编译 OpenCL 程序
如果您使用的是 Intel UHD Graphics 集成显卡,以下是完整的 OpenCL 开发环境配置指南: 1. 准备工作 确认硬件支持 首先确认您的 Intel UHD Graphics 支持 OpenCL: 大多数第6代及以后的 Intel Core 处理器(Skylake 及更新架构)都支持 OpenCL 2.1+ 运行 clinfo 工具可以查…...
C++自学笔记 makefile
本博客参考南科大于仕琪教授的讲解视频和这位同学的学习笔记: 参考博客 感谢两位的分享。 makefile 的作用 用于组织大型项目的编译,是一个一键编译项目的脚本文件。 本博客通过四个版本的makefile逐步说明makefile的使用 使用说明 四个演示文件 …...
【PDF】使用Adobe Acrobat dc添加水印和加密
【PDF】使用Adobe Acrobat dc添加水印和加密 文章目录 [TOC](文章目录) 前言一、添加保护加密口令二、添加水印三、实验四、参考文章总结 实验工具: 1.Adobe Acrobat dc 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、添加保护加…...
客服系统重构详细计划
# 客服系统重构详细计划 ## 第一阶段:系统分析与准备工作 ### 1. 代码审查和分析 (1-2周) - 全面分析现有代码结构 - 识别代码中的问题和瓶颈 - 理解当前系统的业务逻辑 - 确定可重用的组件 - 制作系统功能清单 ### 2. 技术栈升级准备 (1周) - 升级PHP版本到7…...
基于VSCode + PlatformIO平台的ESP8266的DS1302实时时钟
基于ESP8266的DS1302实时时钟系统开发 一、项目概述 本实验通过ESP8266开发板实现: DS1302实时时钟模块的驱动系统时间同步与维护串口实时时间显示RTC模块状态监控 硬件组成: NodeMCU ESP8266开发板DS1302实时时钟模块CR2032纽扣电池(备…...
Flink 系列之十四 - Data Stream API的自定义数据类型
之前做过数据平台,对于实时数据采集,使用了Flink。现在想想,在数据开发平台中,Flink的身影几乎无处不在,由于之前是边用边学,总体有点混乱,借此空隙,整理一下Flink的内容,…...
【数据结构】线性表
目录 1.1 线性表的概念 1.1.1 线性表的抽象数据类型 1.1.2 线性表的存储结构 1.1.3 线性表运算分类 1.2 顺序表 1.2.1 顺序表的类定义 1.2.2 顺序表的运算实现 1. 顺序表的检索 2. 顺序表的插入 3. 顺序表的删除 1.3 链表 1.3.1 单链表 1. 链表的检索 2. 链表的插…...