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

CExercise_10_1动态数组Vector

题目:

动手自己实现动态数组Vector,基于以下结构体定义和函数声明:

typedef int ElementType;

typedef struct {
ElementType *data; // 指向堆空间的数组
int size; // 元素的个数
int capacity; // 数组的容量 } Vector;

// 请实现下面方法

// 初始化一个Vector动态数组 Vector *vector_create(void);

// 销毁一个Vector动态数组,释放内存。 void vector_destroy(Vector *v);

// 向动态数组末尾添加一个元素 void vector_push_back(Vector *v, ElementType val);

// 在动态数组最前面添加元素,所有元素依次后移 void vector_push_front(Vector *v, ElementType
val);

// 将元素val添加到索引为idx的位置,idx后面的元素依次后移 void vector_insert(Vector *v, int
idx, ElementType val);

// 遍历打印整个Vector动态数组 void vector_print(Vector *v); 注意:

你应该将上述代码放在头文件中,并且自己添加头文件保护语法。

提交时,你应该提交头文件,实现Vector的源文件,测试源文件三个文件的代码


关键点

#ifndef VECTOR_H + #define VECTOR_H 是一种经典的防止头文件重复包含的技术,确保头文件内容只被编译一次。


分析:

1 .在这里插入图片描述


代码

//1.头文件
//#ifndef VECTOR_H + #define VECTOR_H 是一种经典的防止头文件重复包含的技术,
//确保头文件内容只被编译一次。
#ifndef VECTOR_H
#define VECTOR_Htypedef int ElementType;typedef struct {ElementType *data;   // 指向堆空间的数组int size;	// 元素的个数int capacity; // 数组的容量
} Vector;// 请实现下面方法// 初始化一个Vector动态数组
Vector *vector_create(void);// 销毁一个Vector动态数组,释放内存。
void vector_destroy(Vector *v);// 向动态数组末尾添加一个元素
void vector_push_back(Vector *v, ElementType val);// 在动态数组最前面添加元素,所有元素依次后移
void vector_push_front(Vector *v, ElementType val);// 将元素val添加到索引为idx的位置,idx后面的元素依次后移
void vector_insert(Vector *v, int idx, ElementType val);// 遍历打印整个Vector动态数组
void vector_print(Vector *v);#endif // !VECTOR_H
//2.实现源文件代码
#include "vector.h"
#include <stdio.h>
#include <stdlib.h>#define DEFAULT_CAPACITY 8
#define THRESHOLD 1024// 在C语言中,static修饰函数表示此函数仅在当前文件内部生效
// 类似于C++或Java中的访问权限修饰符private
static void vector_resize(Vector *v) {// 只要调用这个函数肯定就是需要扩容的int old_capacity = v->capacity;int new_capacity = (old_capacity < THRESHOLD) ?(old_capacity << 1) :	// 容量还未超出阈值每次扩容2倍(old_capacity + (old_capacity >> 1));		// 容量超出阈值每次扩容1.5倍// 利用realloc重新分配动态数组// realloc惯用法ElementType *tmp = realloc(v->data, new_capacity * sizeof(ElementType));	if (tmp == NULL) {printf("realloc failed in resize_vector.\n");exit(1);	// 扩容失败,退出整个程序。或者也可以做别的处理}// 扩容成功,重新赋值Vector成员v->data = tmp;v->capacity = new_capacity;
}// 初始化一个Vector动态数组
Vector *vector_create(void) {// 先在堆上申请结构体Vector *v = calloc(1, sizeof(Vector));if (v == NULL) {printf("calloc failed in vector_create.\n");return NULL;	// 创建失败返回空指针}// 申请动态数组,并初始化Vector的data成员v->data = calloc(DEFAULT_CAPACITY, sizeof(ElementType));if (v->data == NULL) {printf("malloc failed in vector_create.\n");// 不要忘记free结构体Vector,否则会导致内存泄漏free(v);return NULL;	// 创建失败返回空指针}// 继续初始化Vector的其它成员v->capacity = DEFAULT_CAPACITY;return v;
}// 销毁一个Vector动态数组,释放内存。
void vector_destroy(Vector *v) {free(v->data);free(v);
}// 向动态数组末尾添加一个元素
void vector_push_back(Vector *v, ElementType val) {// 先判断是否需要扩容if (v->capacity == v->size) {vector_resize(v);}// 扩容完成后或不需要扩容,即向末尾添加元素v->data[v->size] = val;v->size++;
}// 在动态数组最前面添加元素,所有元素依次后移
void vector_push_front(Vector *v, ElementType val) {// 先判断是否需要扩容if (v->capacity == v->size) {vector_resize(v);}// 扩容完成后或不需要扩容,即从首元素开始将所有元素向后移动// 倒着遍历数组方便向后移动元素for (int i = v->size - 1; i >= 0; i--) {v->data[i + 1] = v->data[i];}// 新增的元素成为首元素v->data[0] = val;v->size++;
}// 将元素val添加到索引为idx的位置,idx后面的元素依次后移
void vector_insert(Vector *v, int idx, ElementType val) {// 先做参数校验,避免传入非法索引if (idx < 0 || idx > v->size) {		// 做插入操作时索引合法范围是[0, size]printf("Illegal argument: idx = %d, size = %d\n", idx, v->size);exit(1);	// 直接退出进程,也可以用别的方式进行错误处理}// 判断是否需要扩容if (v->capacity == v->size) {vector_resize(v);}// 扩容完成后或不需要扩容,即从原本的idx元素开始将所有元素向后移动for (int i = v->size - 1; i >= idx; i--) {v->data[i + 1] = v->data[i];}// idx位置空出来,将它放进去v->data[idx] = val;v->size++;
}// 遍历打印整个Vector动态数组
void vector_print(Vector *v) {printf("[");for (int i = 0; i < v->size; i++){printf("%d, ", v->data[i]);}printf("\b\b]\n");
}
//测试用例代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "vector.h"#define N 100
int main(void) {Vector *v = vector_create();if (v == NULL) {printf("error: vector_create failed in main.\n");exit(1);}// 测试自动扩容机制for (int i = 0; i < N; ++i) {vector_push_back(v, i + 1);}vector_print(v);	// 期望打印结果: 1-100// 测试头部插入新元素vector_push_front(v, 0);vector_print(v);	// 期望打印结果: 0, 1-100// 测试根据索引插入新元素vector_insert(v, 0, -1);vector_print(v);	// 期望打印结果: -1, 0, 1-100vector_destroy(v);return 0;
}

在这里插入图片描述


解决方案总结:

相关文章:

CExercise_10_1动态数组Vector

题目&#xff1a; 动手自己实现动态数组Vector&#xff0c;基于以下结构体定义和函数声明&#xff1a; typedef int ElementType; typedef struct { ElementType *data; // 指向堆空间的数组 int size; // 元素的个数 int capacity; // 数组的容量 } Vector; // 请实现下面方法…...

Nextra + TypeScript + MDX 项目的完整目录结构

典型的 Nextra TypeScript MDX 博客项目的完整目录结构。 Pages 架构 my-blog/ ├── components/ # React 组件 │ ├── HelloWorld.tsx # 示例组件 │ └── ... # 其他组件 ├── pages/ # 页面…...

MDM功能演示:远程锁定与数据擦除,保障企业移动设备安全

在当今高度互联的商业环境中&#xff0c;企业数据伴随着员工穿梭于不同城市、时区和设备之间。智能手机、平板电脑和笔记本电脑赋予员工随时随地办公的能力&#xff0c;但也带来了新的安全挑战&#xff1a;设备一旦遗失或落入不当之手&#xff0c;企业数据就面临泄露风险。 无…...

快速idea本地和推送到远程仓库

在你需要推送的那个文件夹打开 #创建本地仓库 git init#添加文件并首次提交 git add . git commit -m "Initial commit"#添加远程仓库地址 git remote add origin https://gitee.com/你的用户名/你的仓库名.git#查看远程仓库是否设置chengg git remote -v#原来远程仓…...

django数据迁移操作受阻

错误信息&#xff1a; django.db.utils.OperationalError: (1227, Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation)根据错误信息分析&#xff0c;该问题是由于MySQL用户 缺乏SYSTEM_VARI…...

使用Lombok的@Slf4j和idea构建:找不到log符号-解决

问题&#xff1a;在使用Lombok的Slf4j构建项目时提示如下内容&#xff1a; MvcConfiguration.java:26:9 java: cannot find symbol symbol: variable log location: class cn.edu.wynu.mrcinerec.mrserver.config.WebMvcConfiguration查了网上的方法都是改配置 但是使用Googl…...

物联网传感器技术架构与功能解析

物联网传感器作为物联网体系的关键组成部分&#xff0c;主要承担环境或物体状态信息的捕获与传输功能。其通过检测物理、化学或生物参数&#xff0c;将模拟信号转化为数字格式&#xff0c;并利用多种通信协议实现数据交互&#xff0c;最终服务于各类智能化应用。 核心功能模块分…...

wx213基于php+vue+uniapp的新闻资讯小程序

开发语言&#xff1a;PHP框架&#xff1a;phpuniapp数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;PhpStorm 系统展示 管理员登录界面 管理员功能界面 新闻类别管理 新闻信息管理 用户管理 管理员管…...

SOEM编译Ubuntu 22.04

下载SOEM源码 $ git clone https://github.com/OpenEtherCATsociety/SOEM.git编译源码 进入SOEM源码目录 $ mkdir build && cd build $ cmake .. $ make测试 eth1 位网卡名 $ cd test/linux/slaveinfo/ $ sudo ./slaveinfo eth1SOEM (Simple Open EtherCAT Master) …...

栈和队列(Stack和Queue)

栈和队列&#xff08;Stack和Queue&#xff09; 1&#xff1a;栈的概念 示意图&#xff1a; 2&#xff1a;创建一个类Stack&#xff0c;给定一个整形数组elem&#xff0c;数组已使用长度usedSize&#xff0c;默认长度default_size为10&#xff0c;再给定一个构造方法&#xff0…...

Django的定制以及admin

Django是一个全面的Python Web开发框架&#xff0c;具有丰富的功能&#xff0c;和众多开箱即用的接口。 简单使用 我们使用Django的django-admin工具创建项目&#xff1a; django-admin startproject project1 cd project1 django-admin startapp app1以后&#xff0c;一个简…...

LLM架构解析:编码器-解码器架构(Encoder-Decoder Architecture)(第四部分)—— 从基础原理到实践应用的深度探索

本专栏深入探究从循环神经网络&#xff08;RNN&#xff09;到Transformer等自然语言处理&#xff08;NLP&#xff09;模型的架构&#xff0c;以及基于这些模型构建的应用程序。 本系列文章内容&#xff1a; NLP自然语言处理基础词嵌入&#xff08;Word Embeddings&#xff09…...

Unity VideoPlayer 播放无声音

增加一个videoPlayer下挂&#xff0c;audiorSource脚本 this.videoPlayer.EnableAudioTrack(0, true); this.videoPlayer.audioOutputMode VideoAudioOutputMode.AudioSource; this.videoPlayer.SetTargetAudioSource(0, this.videoPlayer.GetComponent<AudioSource>()…...

【Kafka基础】监控与维护:动态配置管理,灵活调整集群行为

1 基础配置操作 1.1 修改主题保留时间 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-configs.sh --alter \--bootstrap-server 192.168.10.33:9092 \--entity-type topics \--entity-name yourtopic \--add-config retention.ms86400000 参数说明&#xff1a; retention…...

AutoGen深度解析:从核心架构到多智能体协作的完整指南

AutoGen是微软推出的一个革命性多智能体(Multi-Agent)框架&#xff0c;它通过模块化设计和灵活的对话机制&#xff0c;极大地简化了基于大型语言模型(LLM)的智能体系统开发。本文将深入剖析AutoGen的两个核心模块——core基础架构和agentchat多智能体对话系统&#xff0c;带您全…...

接口请求控制工具

接口请求控制工具 功能说明代理转发安全控制访问控制错误处理配置管理日志管理 技术栈快速开始环境要求配置说明启动服务 工具源码 功能说明 代理转发 支持多路由配置支持静态资源代理灵活的路由规则配置支持请求转发和响应处理支持负载均衡 支持多目标服务器配置提供多种负载…...

Git 实践笔记

这里写自定义目录标题 一、将当前改动追加到某次commit上二、git 强制修改分支位置 一、将当前改动追加到某次commit上 stash工作区中的当前改动 git stash假设需要修改的commit是 f744c32&#xff0c;将HEAD移动到需要改动的commit的父提交上 git rebase f744c32^ --interact…...

记一个Unity中Humanoid中骨骼与武器脱离的问题

在Untiy中&#xff0c;有时人物的Humanoid的骨骼对应上了&#xff0c;但是套用动画的时候武器等节点有时会脱离&#xff0c;这是因为Humanoid只包含了人物骨骼&#xff0c;不包括其他额外的骨骼&#xff0c;因此如果想要武器节点也跟随&#xff0c;需要在Humanoid中也绑定骨骼设…...

Python asyncio

一些Pre关键概念 asyncio 本质上还是单进程单线程的Python程序&#xff1b; 建立event_loop 概念&#xff0c;上面event_loop 可以理解为大脑&#xff0c;下面是若干个可执行的Task&#xff1b; Task 没有控制权&#xff0c;没有办法控制event_loop 执行某个Task&#xff0c;只…...

【前端分享】JavaScript异步编程详解!

JavaScript 的异步编程是其核心特性之一&#xff0c;主要用于处理非阻塞操作&#xff08;如网络请求、文件读写、定时任务等&#xff09;。由于 JavaScript 是单线程的&#xff0c;异步机制可以避免代码阻塞&#xff0c;提高性能和用户体验。以下是 JavaScript 异步编程的核心概…...

深度学习基础--CNN经典网络之InceptionV1研究与复现(pytorch)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 InceptionV1是提出并行卷积结构&#xff0c;是CNN的经典网络之一&#xff1b;本次任务是探究InceptionV1结构并进行复现实验&#xff1b;欢迎收藏 关注…...

用 Vue 3 + D3.js 实现动态数据流图

文章目录 一、项目背景与功能概览二、项目准备与依赖安装2.1 安装 Vue 3 项目2.2 安装 D3.js2.3 项目结构 三、实现动态数据流图3.1 创建 DataFlowChart 组件3.2 动态更新数据流3.2.1 动态更新边和节点位置3.2.2 动画效果 四、节点拖拽与编辑功能实现4.1 添加节点拖拽功能4.2 编…...

46、Spring Boot 详细讲义(三)

五、Spring Boot 与 Web 开发 1. 简介 Spring Boot 是基于 Spring Framework 开发的一个框架,旨在简化配置,快速构建应用。它内嵌 Tomcat 等 servlet 容器,支持 RESTful API 开发,处理静态资源,以及集成视图层技术如 Thymeleaf 和 Freemarker。 2. Spring MVC 集成 Sp…...

热门面试题第15天|最大二叉树 合并二叉树 验证二叉搜索树 二叉搜索树中的搜索

654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…...

为了避免unboundLocalError和为什么X的值一直不变呢?

## 1.为了避免unboundLocalError 发生unboundLocalError&#xff01; def generate_integer(level):if level 1:X randint(1,9)return X这里出错的原因在于&#xff0c;一旦if 后面的条件没有成立&#xff0c;然后X根本没出生&#xff0c;然后你去使用它&#xff0c;这是有…...

Express中间件(Middleware)详解:从零开始掌握(1)

1. 中间件是什么&#xff1f; 想象中间件就像一个"加工流水线"&#xff0c;请求(Request)从进入服务器到返回响应(Response)的过程中&#xff0c;会经过一个个"工作站"进行处理。 简单定义&#xff1a;中间件是能够访问请求对象(req)、响应对象(res)和下…...

Linux升级gcc版本

目录 1.安装 scl 工具集 2.安装新版本gcc 3.启用新版本 gcc 4.将启动新版本gcc指令写入配置文件 本文主要讲述如何去升级 linux 操作系统下的 gcc 编译器版本。 1.安装 scl 工具集 sudo yum install centos-release-scl scl-utils-build 由于作者已经安装过&#xff0c;…...

【概念】什么是UI(User interface)什么是UX(User experience)?

1. 软件生命周期管理 (Software Life Cycle Management) 解释&#xff1a; 中文&#xff1a; 软件生命周期管理是指从软件规划、设计、开发、测试、部署到后续维护甚至退役的整个过程。English: Software Life Cycle Management refers to the systematic process of plannin…...

【GIT】git pull --rebase 功能解析

1. git pull 命令基础 git pull 是一个常用的 Git 命令&#xff0c;用于从远程仓库获取最新的更改&#xff0c;并尝试将这些更改合并到当前分支中。这通常涉及两个步骤&#xff1a;首先&#xff0c;git fetch 命令从远程仓库下载最新的更改&#xff1b;然后&#xff0c;git me…...

难度偏低,25西电人工智能学院821、833、834考研录取情况

1、人工智能学院各个方向 2、人工智能学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、智能院25年院线相对于24年院线 全部专业下降比较多&#xff0c;其中控制科学与工程下降20分&#xff0c;计算机科学与技术下降20分&#xff0c;计算机技术[专硕]下降…...

L2-051 满树的遍历

L2-051 满树的遍历 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 数据结构选择 为了表示树的结构&#xff0c;我们可以使用邻接表。邻接表是一种常用的图和树的表示方法&#xff0c;它能够高效地存储每个节点的子节点信息。在本题中&#xff0c;我们可以使用一个数组 g&am…...

2025年电子电气与新材料国际学术会议

重要信息 官网&#xff1a;www.iceenm.org&#xff08;点击了解详情&#xff09; 时间&#xff1a;2025年4月25-27日 地点&#xff1a;中国-杭州 部分介绍 征稿主题 电子电气 新材料 电力电子器件和系统设计 可再生能源与电网集成技术 下一代半导体…...

数字人:打破次元壁,从娱乐舞台迈向教育新课堂(4/10)

摘要&#xff1a;数字人正从娱乐领域的璀璨明星跨界到教育领域的智慧导师&#xff0c;展现出无限潜力。从虚拟偶像、影视游戏到直播短视频&#xff0c;数字人在娱乐产业中大放异彩&#xff0c;创造巨大商业价值。在教育领域&#xff0c;数字人助力个性化学习、互动课堂和虚拟实…...

【Hyperlane 】轻松实现大文件分块上传!

【Hyperlane 】轻松实现大文件分块上传&#xff01; 痛点直击&#xff1a;大文件上传不再是难题 在云存储、音视频处理、文件协作等场景中&#xff0c;大文件上传常面临中断重试成本高、内存占用大、网络不稳定等挑战。传统方案要么复杂笨重&#xff0c;要么性能瓶颈明显。 现…...

【深入浅出 Git】:从入门到精通

这篇文章介绍下版本控制器。 【深入浅出 Git】&#xff1a;从入门到精通 Git是什么Git的安装Git的基本操作建立本地仓库配置本地仓库认识工作区、暂存区、版本库的概念添加文件添加文件到暂存区提交文件到版本库提交文件演示 理解.git目录中的文件HEAD指针与暂存区objects对象 …...

APP动态交互原型实例|墨刀变量控制+条件判断教程

引言 不同行业的产品经理在绘制原型图时&#xff0c;拥有不同的呈现方式。对于第三方软件技术服务公司的产品经理来说&#xff0c;高保真动态交互原型不仅可以在开发前验证交互逻辑&#xff0c;还能为甲方客户带来更直观、真实的体验。 本文第三部分将分享一个实战案例&#…...

第二节:React 基础篇-受控组件 vs 非受控组件

一、场景题&#xff1a;设计一个实时搜索输入框&#xff0c;说明选择依据 受控组件 vs 非受控组件 核心区别 特征受控组件非受控组件数据管理由React状态&#xff08;state&#xff09;控制通过DOM元素&#xff08;ref&#xff09;直接访问更新时机每次输入触发onChange提交…...

电脑的usb端口电压会大于开发板需要的电压吗

电脑的USB端口电压通常不会大于开发板所需的电压&#xff0c;以下是详细解释&#xff1a; 1. USB端口电压标准 根据USB规范&#xff0c;USB接口的标称输出电压为5V。实际测量时&#xff0c;USB接口的输出电压会略有偏差&#xff0c;通常在4.75V到5.25V之间。USB 2.0和USB 3.0…...

软件界面设计:打造用户喜爱的交互体验

在数字化飞速发展的当下&#xff0c;软件已渗透进生活的各个角落&#xff0c;从日常使用的社交、购物软件&#xff0c;到专业领域的办公、设计软件&#xff0c;其重要性不言而喻。而软件界面作为用户与软件交互的桥梁&#xff0c;直接决定了用户对软件的第一印象与使用体验。出…...

7、linux基础操作2

一、linux调度 1、crontab [选项] 1.1、了解 定时任务调度:指每隔指定的时间&#xff0c;执行特定的命令或程序。 基本语法&#xff1a;crontab [选项] 常用选项&#xff1a; e&#xff1a; 编辑定时任务l&#xff1a;查询定时任务r&#xff1a;删除当前用户的所有定时任务…...

大数据管理专业想求职数据分析岗,如何提升面试通过率?

从技能到策略&#xff0c;解锁高薪岗位的六大核心逻辑 在数字化浪潮席卷全球的今天&#xff0c;数据分析岗位的竞争愈发激烈。对于大数据管理专业的学生而言&#xff0c;如何从众多求职者中脱颖而出&#xff1f;本文结合行业趋势与实战经验&#xff0c;提炼出提升面试通过率的…...

移动端六大语言速记:第15部分 - 其他方面

移动端六大语言速记:第15部分 - 其他方面 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的其他重要特性,帮助开发者全面了解各语言的独特优势和应用场景。 15.1 语言特有功能 各语言特有功能对比: 语言特有功能描述Java注解(Annotat…...

3.1.3.4 Spring Boot使用使用Listener组件

在Spring Boot中&#xff0c;使用Listener组件可以监听和响应应用中的各种事件。首先&#xff0c;创建自定义事件类CustomEvent&#xff0c;继承自ApplicationEvent。然后&#xff0c;创建事件监听器CustomEventListener&#xff0c;使用EventListener注解标记监听方法。接下来…...

基于关键字定位的自动化PDF合同拆分

需求背景&#xff1a; 问题描述&#xff1a; 我有一份包含多份合同的PDF文件&#xff0c;需要将这些合同分开并进行解析。 传统方法&#xff08;如以固定页数作为分割点&#xff09;不够灵活&#xff0c;无法满足需求。 现有方法的不足&#xff1a; 网上找到的工具大多依赖手动…...

ssh连接远程Host key verification failed.

问题描述 在对已部署的项目进行维护过程中&#xff0c;遇到的一个小问题&#xff0c;记录一下。 SSH连接云服务器ssh xxx云服务器IP地址&#xff0c;提示&#xff1a; The authenticity of host xxxxxx (xx.xxx.123.321) cant be established. ECDSA key fingerprint is SHA…...

Matlab 汽车ABS的bangbang控制和模糊PID控制

1、内容简介 Matlab 197-汽车ABS的bangbang控制和模糊PID控制 可以交流、咨询、答疑 2、内容说明 略 摘要&#xff1a;本文旨在设计一种利用模糊控制理论优化的pid控制器&#xff0c;控制abs系统&#xff0c;达到对滑移率最佳控制范围的要求 &#xff0c;所提出的方案采用级联…...

kotlin的takeIf使用

takeIf用于判断指定对象是否满足条件&#xff0c;满足就返回该对象自身&#xff0c;不满足返回null。因为可以返回对象自身&#xff0c;所以可以用作链式调用&#xff0c;以简化代码&#xff0c;又因takeIf可能返回空&#xff0c;所以常常和let结合使用&#xff0c;示例如下&am…...

MySQL 进阶 - 2 ( 9000 字详解)

一&#xff1a; SQL 优化 1.1 插入数据 1.1.1 批量插入 单条 INSERT 语句执行时&#xff0c;需经历语法解析、事务提交、磁盘 I/O 等多个步骤。批量插入将多条数据合并为一条 SQL&#xff0c;能够减少网络通信和事务开销。 -- 单条插入&#xff08;低效&#xff09; INSERT…...

Devops之GitOps:什么是Gitops,以及它有什么优势

GitOps 定义 GitOps 是一种基于版本控制系统&#xff08;如 Git&#xff09;的运维实践&#xff0c;将 Git 作为基础设施和应用程序的唯一事实来源。通过声明式配置&#xff0c;系统自动同步 Git 仓库中的期望状态到实际运行环境&#xff0c;实现持续交付和自动化运维。其核心…...

VSCode和Fitten Code

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者。 文章目录 一、离线安装二、在线安装总结 一、离线安装 访问 Open VSX 镜像站 打开 https://open-vsx.org&#xff0c;搜索 Fitten Code 点击“从VSIX安装”&#xff0c;选择下载的VSIX即可。安装…...