当前位置: 首页 > news >正文

用 Vue.js 构建基础购物车:从 0 到 1 的实战解析

在当今数字化购物的浪潮中,购物车功能已成为电商平台不可或缺的一部分。它不仅承担着记录用户所选商品的重任,还需提供流畅的交互体验和精准的计算逻辑。本文将深入探讨如何利用 Vue.js 这一强大的 JavaScript 框架,逐步搭建一个基础但功能完备的购物车系统。

一、项目初始化与 HTML 结构搭建

我们从一个标准的 HTML5 文档开始,在<head>标签中设置好字符编码为 UTF - 8,以确保支持各种语言字符的正确显示。同时,通过<meta name="viewport" content="width=device-width, initial-scale=1.0">这一设置,让页面能够自适应不同设备的屏幕尺寸,无论是在电脑、平板还是手机上,用户都能获得一致的浏览体验。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>基础购物车</title>
</head>

接着构建购物车的主体结构,所有内容都包裹在一个具有id="app"<div>元素内,这是 Vue.js 实例挂载的目标容器。购物车主要由一个表格<table>来展示商品信息,表格的<thead>部分定义了表头,清晰地标注出 “商品名称”“商品价格”“商品数量” 和 “操作” 这几个关键信息栏。 

<div id="app"><table cellspacing="0"><thead><tr><td>商品名称</td><td>商品价格</td><td>商品数量</td><td>操作</td></tr></thead>

 在<tbody>部分,我们使用 Vue.js 的v - for指令来循环渲染商品列表。v - for指令遍历goodsList数组,为每个商品项生成对应的表格行。同时,通过:key绑定唯一的键值,帮助 Vue.js 高效地更新和管理 DOM 元素。

<tbody><template v - for="(item, index) in goodsList" :key="index"><tr :class="item.num > 0? 'active' : ''"><td>{{item.name}}</td><td>¥{{item.price.toFixed(2)}}</td><td><button @click="reduce_num(index)" v - if="item.num > 0? true : false">-</button>{{item.num}}<button @click="add_num(index)">+</button></td><td><button @click="editGoods(index)">编辑</button><button @click="removeGoods(index)">删除</button></td></tr></template>
</tbody>

表格下方,有一个<div class="summary">用于显示购物车的总价和总数量,方便用户随时了解购物车的整体情况。再往下,是添加商品的按钮和用于添加或编辑商品信息的输入框区域,该区域通过v - show指令根据showEdit变量的值来控制显示与隐藏。 

<div class="summary">总价:¥{{totalPrice.toFixed(2)}} 总数量:{{total}}
</div><div><button @click="addGoods()">添加</button><div class="edit_content" v - show="showEdit"><input v - model="newGoods.name" placeholder="商品名称" class="input"><input v - model="newGoods.price" @input="NumberInput($event)" type="text" placeholder="商品价格" class="input"><input v - model="newGoods.num" @input="NumberInput($event)" type="text" placeholder="商品数量" class="input"><div><button @click="sure_edit()">确定</button><button @click="close_edit()">取消</button></div></div>
</div>

二、CSS 样式美化

为了让购物车页面看起来更美观、易读,我们使用了一些基本的 CSS 样式。首先,通过* { margin: 0; padding: 0; }来重置浏览器的默认内外边距,确保所有元素的布局起点一致。

 

* {margin: 0;padding: 0;
}

对于表格,设置了border: 1px black solid;,为表格添加黑色的 1 像素边框,使其结构更加清晰。表格的行<tr>和单元格<td>都设置了固定宽度width: 100px;,并通过text - align: center;使内容居中显示,同时也添加了边框,让表格的每一个部分都一目了然。 

table {border: 1px black solid;
}tr,
td {width: 100px;text - align: center;border: 1px black solid;
}

为了突出显示有库存(商品数量大于 0)的商品行,定义了.active类。当商品数量满足条件时,通过:class指令动态应用该类,改变行的背景颜色为红色,文字颜色为白色,增强视觉上的区分度,方便用户快速识别可购买的商品。 

.active {background - color: red;color: white;
}

对于输入框,设置outline: none; border: 1px solid #ccc;样式。outline: none;去除输入框获得焦点时默认的外边框效果,使其看起来更加简洁;border: 1px solid #ccc;则为输入框添加了浅灰色的 1 像素边框,与整体页面风格保持协调。 

.input {outline: none;border: 1px solid #ccc;
}

三、Vue.js 核心逻辑实现

(一)响应式数据定义

在 Vue 3 的setup()函数中,我们定义了两个关键的响应式数据。newGoods是一个响应式对象,用于收集用户输入的新商品信息,包括商品名称name、价格price和初始数量num。Vue.js 的响应式系统会自动追踪对这个对象属性的任何修改,并实时更新到页面上。

// 响应式对象用于新商品输入
const newGoods = reactive({name: '',price: 0,num: 1
});

goodsList是一个响应式数组,存储了购物车中的所有商品项。初始时,数组中包含一个示例商品,方便我们在开发和测试过程中查看购物车的基本展示效果。随着用户添加、编辑或删除商品,这个数组会动态变化,页面也会相应地更新显示。 

 

// 响应式数组用于商品列表
const goodsList = reactive([{name: '商品1',price: 10,num: 1
}]);

(二)商品操作功能实现

  1. 删除商品removeGoods(index)函数负责从goodsList数组中删除指定下标的商品项。它使用 JavaScript 数组的splice()方法,该方法会改变原数组。当用户点击商品操作栏中的 “删除” 按钮时,对应的商品下标会作为参数传递给这个函数,从而实现商品的删除操作,并且页面会自动刷新以反映这一变化。
// 删除商品
function removeGoods(index) {goodsList.splice(index, 1);
}
  1. 增加和减少商品数量add_num(index)函数用于将指定商品的数量num加 1。当用户点击商品数量旁边的 “+” 按钮时,该函数被触发,商品数量增加,同时总价和总数量也会根据新的数量自动重新计算并更新显示。
// 增加数量
function add_num(index) {goodsList[index].num++;
}

reduce_num(index)函数则在商品数量大于 0 的前提下将其减 1。当商品数量大于 0 时,用户点击 “-” 按钮,该函数执行,商品数量减少。通过这种方式,用户可以方便地调整购物车中商品的数量。 

// 减少数量
function reduce_num(index) {if (goodsList[index].num > 0) {goodsList[index].num--;}
}

(三)计算属性:总价与总数量的自动计算

Vue.js 的computed计算属性为我们提供了一种高效的方式来处理依赖数据变化的计算。totalPrice计算属性通过reduce()方法遍历goodsList数组。在遍历过程中,它将每个商品的价格price乘以数量num,并将所有结果累加起来,得到购物车的总价。最后,使用toFixed(2)方法将总价保留两位小数,确保价格显示的准确性。

// 计算总价
const totalPrice = computed(() => {return goodsList.reduce((sum, item) => sum + (item.price * item.num), 0);
});

total计算属性同样使用reduce()方法,它遍历goodsList数组,将每个商品的数量num累加起来,得到购物车中商品的总数量。计算属性具有缓存机制,只有当依赖的数据(即goodsList中的商品信息)发生变化时,才会重新计算,大大提高了性能。 

// 计算总数量
const total = computed(() => {return goodsList.reduce((sum, item) => sum + item.num, 0);
});

(四)商品添加与编辑功能

  1. 添加商品流程:当用户点击 “添加” 按钮时,addGoods()函数被调用。该函数首先将showEdit变量设置为true,这会通过v - show指令使添加商品的输入框区域显示在页面上。同时,将editingIndex设为-1,表示当前处于添加新商品的模式。然后,清空newGoods对象的属性值,以便用户输入新商品的信息。
// 点击显示添加商品的输入框
function addGoods() {showEdit.value = true;editingIndex.value = -1;newGoods.name = '';newGoods.price = '';newGoods.num = '';
}

当用户在输入框中填写完商品名称、价格和数量后,点击 “确定” 按钮,sure_edit()函数开始执行。该函数首先验证用户是否填写了所有必要的信息(即newGoods.namenewGoods.pricenewGoods.num都有值)。如果处于添加模式(editingIndex.value < 0),则将newGoods对象作为一个新的商品项添加到goodsList数组中,然后将showEdit设为false,隐藏输入框区域,完成新商品的添加过程。 

// 点击确定按钮添加商品
function sure_edit() {if (newGoods.name && newGoods.price && newGoods.num) {if (editingIndex.value >= 0) {// 编辑模式 - 更新现有商品goodsList[editingIndex.value] = { ...newGoods };} else {// 添加模式 - 添加新商品goodsList.push({ ...newGoods });}showEdit.value = false;}
}
  1. 编辑商品流程:当用户点击商品操作栏中的 “编辑” 按钮时,editGoods(index)函数被触发。该函数将showEdit设为true,显示输入框区域,并将editingIndex设为当前商品的下标,表明进入编辑模式。同时,将当前商品的名称、价格和数量信息从goodsList中提取出来,填充到newGoods对象中,这样用户在输入框中看到的就是当前商品的现有信息,可以直接进行修改。
// 通过下标只编辑对应的商品
function editGoods(index) {showEdit.value = true;editingIndex.value = index;newGoods.name = goodsList[index].name;newGoods.price = goodsList[index].price;newGoods.num = goodsList[index].num;
}

用户修改完信息后点击 “确定” 按钮,sure_edit()函数再次发挥作用。由于此时editingIndex.value >= 0,处于编辑模式,函数会用newGoods对象的新值替换goodsList中对应下标的商品项,实现商品信息的编辑更新,然后隐藏输入框区域。 

(五)输入验证

为了确保用户输入的商品价格和数量是有效的数字,我们编写了NumberInput(event)函数。该函数获取输入框的当前值event.target.value,然后使用正则表达式/[^0 - 9.]/g匹配输入值中除数字和小数点以外的字符,并将这些字符替换为空字符串。这样,无论用户输入什么内容,最终输入框中只会保留有效的数字和小数点,避免了因用户误输入导致的计算错误或程序异常,提高了系统的稳定性和用户体验。

// 验证输入是否为数字和小数点
function NumberInput(event) {const value = event.target.value;event.target.value = value.replace(/[^0 - 9.]/g, '');
}

最后,通过return语句将所有需要在模板中使用的数据和函数暴露出去,以便 Vue.js 能够在页面上正确地渲染和响应用户操作。 

return {goodsList,newGoods,totalPrice,total,removeGoods,add_num,reduce_num,addGoods,showEdit,close_edit,editGoods,sure_edit,NumberInput
}

通过以上详细的步骤,我们成功地利用 Vue.js 构建了一个基础购物车系统。从项目的初始化、HTML 结构搭建、CSS 样式美化到 Vue.js 核心逻辑的实现,每个环节都紧密配合,展示了 Vue.js 在前端开发中的强大功能和便捷性。希望这篇文章能为你的前端开发学习和实践提供有价值的参考,帮助你在开发电商相关项目时更加得心应手。 

相关文章:

用 Vue.js 构建基础购物车:从 0 到 1 的实战解析

在当今数字化购物的浪潮中&#xff0c;购物车功能已成为电商平台不可或缺的一部分。它不仅承担着记录用户所选商品的重任&#xff0c;还需提供流畅的交互体验和精准的计算逻辑。本文将深入探讨如何利用 Vue.js 这一强大的 JavaScript 框架&#xff0c;逐步搭建一个基础但功能完…...

MapSet常用的集合类(二叉搜索树,哈希表)

Set集合 Set的核心特点&#xff1a; Set继承了Collection。 保存的元素不会重复。 保存的元素不能修改。 保存的元素无序&#xff0c;和List不同&#xff0c;如果有两个&#xff1a;List {1&#xff0c;2&#xff0c;3}&#xff0c;List {2&#xff0c;1&#xff0c;3}&…...

五种IO模型

1、通信的本质&#xff1a; 通过网络通信的学习&#xff0c;我们能够理解网络通信的本质是进程间通信&#xff0c;而进程间通信的本质就是IO。 IO也就是input和output。当读取条件不满足的时候&#xff0c;recv会阻塞。write写入数据时&#xff0c;会将数据拷贝到缓冲区中&am…...

路由器开启QOS和UPNP的作用

QOS 的作用 保障关键业务带宽&#xff1a;可根据网络应用的重要性分配带宽。比如在家庭网络中&#xff0c;当多人同时使用网络时&#xff0c;将视频会议等实时性要求高的关键业务设置为高优先级&#xff0c;确保其能获得足够带宽&#xff0c;避免卡顿&#xff0c;而文件下载等…...

学习MySQL的第九天

纸上得来终觉浅 绝知此事要躬行 数据处理的增删查改 一、添加数据 添加数据有两种方式&#xff0c;一种是一条一条的添加数据&#xff0c;另一种是通过对其他表的查询&#xff0c;将查询的结果插入到表中&#xff1b;第一种方式又可以分为三种方式&#xff1a…...

怎么免费下载GLTF/GLB格式模型文件,还可以在线编辑修改

​ 现在非常流行glb格式模型&#xff0c;和gltf格式文件&#xff0c;可是之类模型网站非常非常少 1&#xff0c;咱们先直接打开http://glbxz.com 官方glb下载网站 glbxz.com 2 可以搜索&#xff0c;自己想要的模型关键词 3&#xff0c;到自己想下载素材页面 4&#xff0c;…...

高效数据拷贝方法总结

1.系统/语言层面的高效拷贝 内存拷贝优化 使用memcpy(C/C)或类似函数进行大块内存拷贝 利用SIMD指令(如AVX/SSE)进行向量化拷贝 2.零拷贝技术 文件映射(mmap) - 将文件映射到内存空间 发送文件描述符而非数据本身(Unix域套接字) 使用sendfile系统调用(文件到套接字直接传…...

C 语言 第八章 文件操作

目录 文件操作 文件和流的介绍 C 输入 & 输出 C 文件的读写 创建/打开文件 写入文件 fputc 函数 fputs 函数 fprintf 函数 实例&#xff1a; 读取文件 fgets函数 实例&#xff1a; 关闭文件 文件操作 文件和流的介绍 变量、数组、结构体等数据在运行时存储于内存…...

开发一款游戏需要哪些岗位角色参与?

常见分类 1. 游戏策划&#xff08;Game Designer&#xff09; 核心职责&#xff1a;设计游戏的玩法、规则、内容和整体体验。 具体工作&#xff1a; 系统设计&#xff1a;设计游戏的战斗、经济、成长、社交等核心系统。 数值设计&#xff1a;平衡角色属性、装备数值、经济系…...

大模型面经 | 手撕多头注意力机制(Multi-Head Attention)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

二叉树的初步学习

前言 对于二叉树的学习不想其他数据结构一样&#xff0c;直接学习他的结构的构建。单纯的一个二叉树在实际中没什么作用&#xff0c;除非是加了限制条件的&#xff0c;比如大名鼎鼎的红黑树。但是对于初学者而言&#xff0c;刚开始就学习红黑树&#xff0c;会让你刚接触就想放…...

Tkinter菜单和工具栏的设计

在这一章中,我们将深入探讨如何在Tkinter应用程序中设计菜单和工具栏。菜单和工具栏是桌面应用程序中常见的界面元素,它们为用户提供了便捷的操作方式。通过这一章的学习,您将能够在您的Tkinter应用中添加菜单栏和工具栏,提升用户体验。 6.1 菜单栏的设计 菜单栏是应用程…...

windows中搭建Ubuntu子系统

windows中搭建虚拟环境 1.配置2.windows中搭建Ubuntu子系统2.1windows配置2.1.1 确认启用私有化2.1.2 将wsl2设置为默认版本2.1.3 确认开启相关配置2.1.4重启windows以加载更改配置 2.2 搭建Ubuntu子系统2.2.1 下载Ubuntu2.2.2 迁移位置 3.Ubuntu子系统搭建docker环境3.1安装do…...

Docker 部署 Kafka 完整指南

Docker 部署 Kafka 完整指南 本指南将详细介绍如何使用 Docker 部署 Kafka 消息队列系统&#xff0c;包括单节点和集群模式的部署方式。 1. 单节点部署 (Zookeeper Kafka) 1.1 创建 docker-compose.yml 文件 version: 3.8services:zookeeper:image: bitnami/zookeeper:3.8…...

java学习总结(if switch for)

一.基本结构 1.单分支if int num 10; if (num > 5) {System.out.println("num 大于 5"); } 2.双分支if-else int score 60; if (score > 60) {System.out.println("及格"); } else {System.out.println("不及格"); } 3.多分支 int…...

解释:指数加权移动平均(EWMA)

指数加权移动平均&#xff08;EWMA, Exponential Weighted Moving Average&#xff09; 是一种常用于时间序列平滑、异常检测、过程控制等领域的统计方法。相比普通移动平均&#xff0c;它对最近的数据赋予更高权重&#xff0c;对旧数据逐渐“淡化”。 ✅ 一、通俗理解 想象你…...

open harmony多模组子系统分析

multimodalinput是open harmony的核心输入子系统&#xff0c;负责统一管理触摸屏&#xff0c;键盘&#xff0c;鼠标&#xff0c;手势&#xff0c;传感器等多种 输入源&#xff0c;提供标准化事件分发机制。其核心 目标是通过统一的事件处理框架&#xff0c;实现跨设备&#xff…...

Hello Java!

1. Java发展史 1.1 计算机编程语言分类 机器语言&#xff1a;电子机器能够直接识别的语言&#xff0c;无需经过翻译&#xff0c;计算机内部就有相应的电路来完成它&#xff1b;从使用的角度来看&#xff0c;机器语言是最低级的语言。 机器语言。指令以二进制代码形式存在。 汇…...

vue 入门:生命周期

文章目录 vue组件的生命周期创建阶段更新阶段销毁阶段生命周期钩子函数 vue组件的生命周期 创建阶段、销毁阶段&#xff1a;只会执行一次更新阶段&#xff1a;会执行多次 创建阶段 beforeCreate 在实例初始化之后&#xff0c;数据观测&#xff08;data observer&#xff09;…...

C#容器源码分析 --- Dictionary<TKey,TValue>

Dictionary<TKey, TValue> 是 System.Collections.Generic 命名空间下的高性能键值对集合&#xff0c;其核心实现基于​​哈希表​​和​​链地址法&#xff08;Separate Chaining&#xff09;。 .Net4.8 Dictionary<TKey,TValue>源码地址&#xff1a; dictionary…...

yum的基本操作和vim指令

在我们的手机端或者Windows上下载软件&#xff0c;可以在相应的应用商店或者官网进行下载&#xff0c;这样对于用户来说十分的方便和便捷。而在Linux上&#xff0c;也有类似的安装方式&#xff0c;我们来一一了解一下。 Linux安装软件的3种方法 源代码安装 在Linux下安装软件…...

MCU刷写——HEX与S19文件互转详解及Python实现

工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊Hex与S19这这两种文件互相转化,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走…...

深入探讨避免MQ消息重复消费的策略与实现

引言 随着微服务架构的流行&#xff0c;消息队列&#xff08;Message Queue, MQ&#xff09;作为系统间异步通信的重要手段&#xff0c;被广泛应用于各种场景。然而&#xff0c;在使用MQ的过程中&#xff0c;一个不容忽视的问题是消息可能被重复消费。这不仅可能导致数据不一致…...

定制一款国密浏览器(8):SM3 摘要算法

上一章我们讲到了铜锁和 BoringSSL,本章从最简单的国密算法 SM3 摘要算法入手,说明一下 SM3 算法的移植要点。 SM3 算法本身并不复杂,详细算法说明参考《GB∕T 32905-2016信息安全技术 SM3密码杂凑算法》这份文档。因为铜锁开源项目有实现代码,直接照搬过来。 将 crypto/…...

【Docker基础】Compose 使用手册:场景、文件与命令详解

文章目录 一、什么是 Docker Compose二、为什么需要 Docker Compose三、Docker Compose 使用步骤 / 核心功能步骤核心功能&#xff1a; 四、Docker Compose 的使用场景五、Docker Compose 文件&#xff08;docker-compose.yml&#xff09;文件语法版本文件基本结构及常见指令常…...

RT-2论文深度解读:视觉-语言-动作统一模型的机器人泛化革命

1. 核心问题与挑战 传统机器人学习存在两大瓶颈&#xff1a; 数据效率低下&#xff1a;依赖特定场景的机器人操作数据&#xff08;如抓取、推压&#xff09;&#xff0c;收集成本高泛化能力局限&#xff1a;模型仅能完成训练中出现过的任务&#xff0c;无法应对长尾场景 RT-…...

git 提交标签

Git 提交标签 提交消息格式&#xff1a; <type>: <description> &#xff08;示例&#xff1a;git commit -m "feat: add user login API"&#xff09; 标签适用场景feat新增功能&#xff08;Feature&#xff09;。fix修复 Bug&#xff08;Bug fix&…...

学习率(Learning Rate)

学习率&#xff08;Learning Rate&#xff09;是深度学习中最关键的超参数之一&#xff0c;它控制模型在每次参数更新时的“步长大小”。简单来说&#xff1a;它决定了模型从错误中学习的“速度”。 直观比喻 想象你在山顶蒙眼下山&#xff08;找最低点&#xff09;&#xff1…...

李宏毅NLP-3-语音识别part2-LAS

语音识别part2——LAS Listen Listen主要功能是提取内容信息&#xff0c;去除说话人差异和噪声 。编码器&#xff08;Encoder&#xff09;结构&#xff0c;输入是声学特征&#xff0c;经过 Encoder 处理后&#xff0c;输出为高级表示&#xff0c;这些高级表示可用于后续语音识别…...

游戏引擎学习第222天

回顾昨天的过场动画工作 我们正在制作一个游戏&#xff0c;目标是通过直播的方式完成整个游戏的开发。在昨天的工作中&#xff0c;我享受了制作过场动画的过程&#xff0c;所以今天我决定继续制作多个层次的过场动画。 昨天我们已经开始了多层次过场动画的基本制作&#xff0…...

双系统win11 + ubuntu,如何完全卸载ubuntu系统?

双系统win11 ubuntu&#xff0c;如何完全卸载ubuntu? 注意事项 操作前确保有 Windows 安装介质&#xff08;USB&#xff09;&#xff0c;以防需要修复对 EFI 分区的操作要格外小心如果使用 BitLocker&#xff0c;可能需要先暂停保护如果遇到问题&#xff0c;可以使用 Windows…...

【T2I】Region-Aware Text-to-Image Generation via Hard Binding and Soft Refinement

code&#xff1a; https://github.com/NJU-PCALab/RAG-Diffusion Abstract 区域提示&#xff0c;或组成生成&#xff0c;能够实现细粒度的空间控制&#xff0c;在实际应用中越来越受到关注。然而&#xff0c;以前的方法要么引入了额外的可训练模块&#xff0c;因此只适用于特定…...

HarmonyOS:Map Kit简介

一、概述 Map Kit&#xff08;地图服务&#xff09; 为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化显示地图、位置搜索和路径规划等功能&#xff0c;轻松完成地图构建工作。您可以轻松地在HarmonyOS应用/元服务中集成地图相关的功能&#xff0c;全方位…...

【从零实现高并发内存池】- 项目介绍、原理 及 内存池详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

CSS margin(外边距)学习笔记

CSS 中的 margin 属性用于定义元素周围的空白区域&#xff0c;它是一个非常重要的布局工具&#xff0c;可以帮助我们控制元素之间的间距&#xff0c;从而实现更美观和易用的页面布局。以下是对 margin 属性的详细学习笔记。 一、margin 的基本概念 margin 是元素周围的透明区…...

【数据集】中国各省低空经济及无人机相关数据集(1996-2025年2月)

低空经济泛指3000米高空以下的飞行经济活动&#xff0c;以民用客运飞行器和无人驾驶航空器为主。低空经济产业是先进飞行器出行&#xff08;AAM&#xff09;在城市低空运行的一种变革性和颠覆性的复合新产业&#xff0c;主要以垂直起降型飞机&#xff08;VTOL&#xff09;与无人…...

C++动态分配内存知识点!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家好呀&#xff0c;又是分享干货的时间&#xff0c;今天我们来学习一下动态分配内存。 文章目录 1.动态分配内存的思想 2.动态分配内存的概念 2.1内存分配函数 2.2动态内存的申请和释放 2.3内存碎片问…...

哈喽打车 小程序 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 这一次遇到这种风控感觉挺有…...

泛型的二三事

泛型&#xff08;Generics&#xff09;是Java语言的一个重要特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff08;Type Parameters&#xff09;&#xff0c;从而实现类型安全的代码重用。泛型在Java 5中被引入&#xff0c;极大地增强了代码的灵活性和安全性。…...

云计算:数字浪潮中的第三次文明跃迁——从虚拟化到智能协同的范式革命

一、浪潮的序曲&#xff1a;从机械革命到数字原子的觉醒 20世纪中叶&#xff0c;当晶体管的发明点燃信息革命的火种时&#xff0c;人类社会的第三次浪潮已悄然萌芽。托夫勒预言的“信息将成为新的权力核心”&#xff0c;在21世纪初以云计算的形态具象化。这场浪潮的起点&#…...

redis哨兵机制 和集群有什么区别:

主从&#xff1a; 包括一个master节点 和多个slave节点&#xff1a; master节点负责数据的读写&#xff0c;slave节点负责数据的读取&#xff0c;master节点收到数据变更&#xff0c;会同步到slave节点 去实现数据的同步。通过这样一个架构可以去实现redis的一个读写分离。提升…...

java基础2

构造器&#xff1a; 构造器与类同名&#xff1b; 每个类可以有一个以上的构造器&#xff1b; 构造器可以有0个&#xff0c;1个或多个参数&#xff1b; 构造器没有返回值&#xff1b; 构造器总是伴着new一起调用 方法重载&#xff1a; 方法名字一样&#xff0c;参数不一样…...

《算法笔记》3.6小节——入门模拟->字符串处理

1009 说反话 #include <cstdio>int main() {char sen[80][80];int num0;while(scanf("%s",sen[num])!EOF){num;}for (int i num-1; i > 0; --i) {printf("%s ",sen[i]);}printf("%s\n",sen[0]);return 0; }字符串连接 #include <io…...

JavaScript:BOM编程

今天我要介绍的是JS中有关于BOM编程的知识点内容&#xff1a;BOM编程&#xff1b; 介绍&#xff1a;BOM全名&#xff08;Browser Object Model&#xff08;浏览器对象模型&#xff09;&#xff09;。 是浏览器提供的与浏览器窗口交互的接口&#xff0c;其核心对象是 window。与…...

用户自定义函数(UDF)开发与应用(二)

五、UDF 在不同平台的应用 5.1 数据库中的 UDF 应用&#xff08;如 MySQL、PostgreSQL&#xff09; 在数据库领域&#xff0c;UDF 为开发者提供了强大的扩展能力&#xff0c;使得数据库可以完成一些原本内置函数无法实现的复杂操作。 以 MySQL 为例&#xff0c;假设我们有一…...

C++——继承、权限对继承的影响

目录 继承基本概念 编程示例 1.基类&#xff08;父类&#xff09;Person 代码特点说明 权限对类的影响 ​编辑 编程示例 1. 公有继承 (public inheritance) 2. 保护继承 (protected inheritance) 3. 私有继承 (private inheritance) 重要规则 实际应用 继承基本概…...

Tkinter样式与主题定制

在创建图形用户界面&#xff08;GUI&#xff09;应用时&#xff0c;除了功能的实现外&#xff0c;界面的外观和用户体验也非常重要。Tkinter提供了多种方式来定制控件的样式&#xff0c;使应用程序界面更加美观和易用。在这一章中&#xff0c;我们将介绍如何使用Tkinter的样式和…...

CSS 背景属性学习笔记

CSS 背景属性用于定义 HTML 元素的背景效果&#xff0c;包括背景颜色、背景图像、图像平铺方式、图像定位以及图像是否固定等。以下是关于 CSS 背景属性的详细学习笔记。 一、背景颜色&#xff08;background-color&#xff09; background-color 属性用于定义元素的背景颜色…...

信息安全管理与评估2023广东省样题答案截图视频

2023年广东省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 一、 赛项时间 9:00-13:30&#xff0c;共计4小时30分&#xff0c;含赛题发放、收卷时间。 二、 赛项内容 本次大赛&#xff0c;各位选手需要完成三个阶段的任务&#xff0c;其中第一个阶段需要…...

ubuntu学习day1

linux常用命令 1. 用户相关 1.1 切换用户 su root #切换到root用户 su user #切换到普通用户sudo能赋予普通用户管理者权限&#xff0c;一般不要直接使用root用户进行操作。 1.2 添加用户 useradd 用户名 useradd user1 #添加了用户名为user1的用户但在ubuntu中想要创建普…...