C++.二分法教程
二分法
- 1. 问题引入
- 1.1 猜数字游戏
- 2.1 二分法核心思想
- 为什么需要二分法?
- 二分法的基本步骤
- 示例代码
- 代码解析
- 2.2 二分法适用场景
- 有序数组
- 查找效率要求高
- 示例场景
- 示例代码
- 代码解析
- 3.1 初始化左右边界
- 示例代码
- 代码解析
- 3.2 计算中间值
- 示例代码
- 代码解析
- 3.3 判断与更新区间
- 示例代码
- 代码解析
- 4.1 简单二分查找代码
- 4.2 代码逻辑解析
- 4.2.1 函数定义与参数
- 4.2.2 循环条件
- 4.2.3 中间值计算
- 4.2.4 比较与范围调整
- 4.2.5 返回值
- 4.2.6 主函数
- 4.2.7 示例运行
- 5. 二分法的广泛应用
- 5.1 查字典
- 5.2 静态区间最值问题
- 5.3 特殊的一元三次方程
- 5.4 [模板] 快速幂
1. 问题引入
1.1 猜数字游戏
在日常生活中,我们经常会遇到需要快速查找目标值的情况。例如,猜数字游戏就是一个典型的场景。假设你和朋友玩一个游戏,朋友心中想了一个1到100之间的数字,你需要通过最少的猜测次数来猜出这个数字。每次猜测后,朋友会告诉你猜的数字是大了、小了还是正好。这种场景非常适合使用二分法来解决。
二分法的核心思想是通过不断地将查找范围缩小一半,从而快速定位目标值。在猜数字游戏中,你可以先猜50,如果朋友说数字大了,那么目标值一定在51到100之间;如果朋友说数字小了,那么目标值一定在1到49之间。通过这种方式,每次猜测都能将查找范围缩小一半,从而快速找到目标值。
为了更好地理解二分法的逻辑,我们可以用思维导图来梳理整个过程:
猜数字游戏
├── 初始范围:1到100
├── 猜测过程
│ ├── 计算中间值:(low + high) / 2
│ ├── 比较中间值与目标值
│ │ ├── 如果中间值等于目标值:结束
│ │ ├── 如果中间值大于目标值:调整范围为low到mid-1
│ │ └── 如果中间值小于目标值:调整范围为mid+1到high
│ └── 重复猜测过程
└── 结束条件:找到目标值或范围为空
接下来,我们通过一个具体的示例代码来实现这个猜数字游戏,从而更好地理解二分法的实现过程。# 2. 二分法思维导图
2.1 二分法核心思想
二分法是一种高效的查找算法,其核心思想是通过不断地将查找范围缩小一半,从而快速定位目标值。这种方法在有序数据中查找目标值时特别有效。以下是二分法核心思想的详细分析:
为什么需要二分法?
在实际应用中,我们经常需要在大量数据中查找某个特定值。如果使用线性查找(逐个比较),时间复杂度为O(n),当数据量较大时,查找效率会非常低。而二分法通过每次将查找范围缩小一半,时间复杂度仅为O(log n),大大提高了查找效率。
二分法的基本步骤
- 确定查找范围:假设有一个有序数组,查找范围的初始值为数组的起始位置
low
和结束位置high
。 - 计算中间值:通过
(low + high) / 2
计算中间位置mid
,并获取中间值。 - 比较中间值与目标值:
- 如果中间值等于目标值,查找成功,返回中间位置
mid
。 - 如果中间值大于目标值,说明目标值在左半部分,调整查找范围为
low
到mid - 1
。 - 如果中间值小于目标值,说明目标值在右半部分,调整查找范围为
mid + 1
到high
。
- 如果中间值等于目标值,查找成功,返回中间位置
- 重复步骤2和3:直到找到目标值或查找范围为空(
low > high
)。
示例代码
以下是一个简单的二分查找函数实现,用于在有序数组中查找目标值:
#include <iostream>
using namespace std;// 二分查找函数
int binarySearch(int arr[], int low, int high, int target) {while (low <= high) {int mid = low + (high - low) / 2; // 防止溢出if (arr[mid] == target) {return mid; // 找到目标值,返回索引} else if (arr[mid] < target) {low = mid + 1; // 调整查找范围到右半部分} else {high = mid - 1; // 调整查找范围到左半部分}}return -1; // 未找到目标值,返回-1
}int main() {int arr[] = {1, 3, 5, 7, 9, 11, 13, 15}; // 有序数组int target = 7; // 目标值int result = binarySearch(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1, target);if (result != -1) {cout << "目标值 " << target << " 在数组中的索引为 " << result << endl;} else {cout << "目标值 " << target << " 不在数组中" << endl;}return 0;
}
代码解析
- 函数参数:
arr
是有序数组,low
和high
分别是查找范围的起始和结束位置,target
是目标值。 - 循环条件:
while (low <= high)
,确保查找范围有效。 - 中间值计算:
int mid = low + (high - low) / 2;
,这种方法可以防止low + high
溢出。 - 比较与范围调整:根据中间值与目标值的比较结果,调整查找范围。
- 返回值:如果找到目标值,返回其索引;否则返回
-1
。
2.2 二分法适用场景
二分法适用于以下场景:
有序数组
二分法的核心是依赖于数组的有序性。只有在数组有序的情况下,二分法才能有效工作。例如,查找一个有序数组中的某个元素,或者确定某个元素在有序数组中的插入位置。
查找效率要求高
当数据量较大且需要快速查找目标值时,二分法的时间复杂度O(log n)相比线性查找的O(n)具有显著优势。例如,在大型数据库中查找记录,或者在实时系统中快速定位数据。
示例场景
假设有一个包含1000000个元素的有序数组,需要查找某个特定值。使用线性查找可能需要最多1000000次比较,而使用二分查找最多只需要20次比较(log2(1000000) ≈ 20),效率提升非常明显。
示例代码
以下是一个二分查找函数,用于在有序数组中查找目标值的插入位置:
#include <iostream>
using namespace std;// 二分查找插入位置函数
int binarySearchInsertPosition(int arr[], int low, int high, int target) {while (low <= high) {int mid = low + (high - low) / 2;if (arr[mid] == target) {return mid; // 找到目标值,返回索引} else if (arr[mid] < target) {low = mid + 1; // 调整查找范围到右半部分} else {high = mid - 1; // 调整查找范围到左半部分}}return low; // 返回插入位置
}int main() {int arr[] = {1, 3, 5, 7, 9, 11, 13, 15}; // 有序数组int target = 6; // 目标值int result = binarySearchInsertPosition(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1, target);cout << "目标值 " << target << " 的插入位置为 " << result << endl;return 0;
}
代码解析
- 函数参数:与二分查找函数类似,但目标是找到目标值的插入位置。
- 循环条件:
while (low <= high)
,确保查找范围有效。 - 中间值计算:
int mid = low + (high - low) / 2;
,防止溢出。 - 比较与范围调整:根据中间值与目标值的比较结果,调整查找范围。
- 返回值:如果找到目标值,返回其索引;否则返回目标值应插入的位置。
通过以上分析和示例代码,我们可以更好地理解二分法的核心思想和适用场景。# 3. 二分法函数详解
3.1 初始化左右边界
在二分查找中,初始化左右边界是查找过程的起点,它定义了查找的初始范围。对于一个长度为n
的有序数组,左边界low
通常初始化为0
,表示数组的第一个元素的索引;右边界high
初始化为n - 1
,表示数组的最后一个元素的索引。正确的初始化能够确保查找范围覆盖整个数组,避免遗漏目标值。
示例代码
int low = 0; // 初始化左边界
int high = n - 1; // 初始化右边界,n为数组长度
代码解析
- 左边界
low
:表示查找范围的起始位置,初始化为0
,确保从数组的第一个元素开始查找。 - 右边界
high
:表示查找范围的结束位置,初始化为n - 1
,确保查找范围覆盖到数组的最后一个元素。
3.2 计算中间值
计算中间值是二分查找的关键步骤,通过将查找范围分成两部分,从而缩小查找范围。中间值的计算公式为mid = low + (high - low) / 2
,这种计算方式可以有效防止因low + high
过大导致的整数溢出问题。在每次循环中,根据中间值与目标值的比较结果,更新查找范围。
示例代码
int mid = low + (high - low) / 2; // 计算中间值
代码解析
- 防止溢出:直接使用
(low + high) / 2
可能会导致low + high
超出整数范围,而low + (high - low) / 2
可以有效避免这种情况。 - 中间值的作用:中间值将查找范围分成两部分,通过与目标值的比较,确定目标值所在的子区间。
3.3 判断与更新区间
在二分查找中,根据中间值与目标值的比较结果,更新查找范围是实现查找的关键。如果中间值等于目标值,查找成功;如果中间值大于目标值,则目标值在左半部分,更新右边界为mid - 1
;如果中间值小于目标值,则目标值在右半部分,更新左边界为mid + 1
。通过不断更新查找范围,逐步缩小目标值的可能位置,直到找到目标值或查找范围为空。
示例代码
if (arr[mid] == target) {return mid; // 找到目标值,返回索引
} else if (arr[mid] < target) {low = mid + 1; // 目标值在右半部分,更新左边界
} else {high = mid - 1; // 目标值在左半部分,更新右边界
}
代码解析
- 相等时返回索引:如果
arr[mid] == target
,说明找到了目标值,直接返回中间值的索引mid
。 - 目标值在右半部分:如果
arr[mid] < target
,说明目标值在中间值的右侧,更新左边界为mid + 1
。 - 目标值在左半部分:如果
arr[mid] > target
,说明目标值在中间值的左侧,更新右边界为mid - 1
。
通过以上步骤,二分查找能够在有序数组中高效地查找目标值,其时间复杂度为O(log n),相比线性查找的O(n)具有显著的效率优势。# 4. 示例代码分析
4.1 简单二分查找代码
以下是一个简单的二分查找代码示例,用于在有序数组中查找目标值:
#include <iostream>
using namespace std;// 二分查找函数
int binarySearch(int arr[], int low, int high, int target) {while (low <= high) {int mid = low + (high - low) / 2; // 防止溢出if (arr[mid] == target) {return mid; // 找到目标值,返回索引} else if (arr[mid] < target) {low = mid + 1; // 调整查找范围到右半部分} else {high = mid - 1; // 调整查找范围到左半部分}}return -1; // 未找到目标值,返回-1
}int main() {int arr[] = {1, 3, 5, 7, 9, 11, 13, 15}; // 有序数组int target = 7; // 目标值int result = binarySearch(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1, target);if (result != -1) {cout << "目标值 " << target << " 在数组中的索引为 " << result << endl;} else {cout << "目标值 " << target << " 不在数组中" << endl;}return 0;
}
4.2 代码逻辑解析
4.2.1 函数定义与参数
- 函数定义:
int binarySearch(int arr[], int low, int high, int target)
arr[]
:有序数组,这是二分查找的基础,必须保证数组是有序的。low
:查找范围的起始索引,初始值为0
。high
:查找范围的结束索引,初始值为数组的最后一个元素的索引。target
:需要查找的目标值。
4.2.2 循环条件
- 循环条件:
while (low <= high)
- 这个条件确保了查找范围是有效的。只要
low
小于等于high
,就说明查找范围仍然有效,查找过程可以继续。 - 如果
low > high
,说明查找范围为空,目标值不存在于数组中,循环结束。
- 这个条件确保了查找范围是有效的。只要
4.2.3 中间值计算
- 中间值计算:
int mid = low + (high - low) / 2;
- 这是二分查找的核心步骤,通过计算中间值将查找范围分成两部分。
- 使用
low + (high - low) / 2
而不是(low + high) / 2
的原因是防止整数溢出。当low
和high
都很大时,low + high
可能会超出整数范围,导致错误结果。 mid
是当前查找范围的中间索引,用于与目标值进行比较。
4.2.4 比较与范围调整
- 比较中间值与目标值:
if (arr[mid] == target)
:如果中间值等于目标值,说明找到了目标值,直接返回中间索引mid
。else if (arr[mid] < target)
:如果中间值小于目标值,说明目标值在中间值的右侧,更新左边界low = mid + 1
。else
:如果中间值大于目标值,说明目标值在中间值的左侧,更新右边界high = mid - 1
。
4.2.5 返回值
- 返回值:
- 如果找到目标值,返回目标值的索引
mid
。 - 如果未找到目标值,返回
-1
,表示目标值不在数组中。
- 如果找到目标值,返回目标值的索引
4.2.6 主函数
- 主函数:
- 定义一个有序数组
arr
,并指定目标值target
。 - 调用
binarySearch
函数,传入数组、目标值以及查找范围的起始和结束索引。 - 根据返回值判断目标值是否在数组中,并输出相应的结果。
- 定义一个有序数组
4.2.7 示例运行
假设数组arr
为{1, 3, 5, 7, 9, 11, 13, 15}
,目标值target
为7
:
- 初始范围:
low = 0
,high = 7
。 - 第一次循环:
- 计算
mid = 0 + (7 - 0) / 2 = 3
,arr[3] = 7
。 arr[3] == target
,返回mid = 3
。
- 计算
- 输出结果:
目标值 7 在数组中的索引为 3
。
如果目标值target
为6
:
- 初始范围:
low = 0
,high = 7
。 - 第一次循环:
- 计算
mid = 0 + (7 - 0) / 2 = 3
,arr[3] = 7
。 arr[3] > target
,更新high = mid - 1 = 2
。
- 计算
- 第二次循环:
- 计算
mid = 0 + (2 - 0) / 2 = 1
,arr[1] = 3
。 arr[1] < target
,更新low = mid + 1 = 2
。
- 计算
- 第三次循环:
- 计算
mid = 2 + (2 - 2) / 2 = 2
,arr[2] = 5
。 arr[2] < target
,更新low = mid + 1 = 3
。
- 计算
- 第四次循环:
low = 3
,high = 2
,low > high
,循环结束。
- 返回
-1
,输出结果:目标值 6 不在数组中
。
通过以上分析,我们可以清晰地理解二分查找的逻辑和实现过程。
5. 二分法的广泛应用
5.1 查字典
- 问题描述:在一本字典中查找一个单词的定义。
- 二分法应用:字典中的单词是按字母顺序排列的,可以将字典的页码范围作为查找区间。通过二分法,每次打开中间页码,比较中间页码的单词与目标单词的大小关系,从而缩小查找范围,快速定位到目标单词所在的页码。
- 优势:相比逐页查找,二分法可以显著减少查找时间,提高查找效率。
5.2 静态区间最值问题
- 问题描述:给定一个静态数组,多次查询某个区间内的最大值或最小值。
- 二分法应用:可以使用二分法结合前缀和或后缀和数组来快速求解区间最值。例如,对于求区间最小值,可以先计算每个位置的前缀最小值和后缀最小值,然后通过二分法快速定位到区间内的最小值。
- 优势:在多次查询的情况下,二分法可以快速响应,避免每次都遍历整个区间,提高查询效率。
5.3 特殊的一元三次方程
- 问题描述:求解形如 ( ax^3 + bx^2 + cx + d = 0 ) 的一元三次方程的实数根。
- 二分法应用:在一元三次方程中,可以通过二分法找到方程的实数根。首先确定一个包含实数根的区间,然后通过不断二分区间,计算中间值处的函数值,根据函数值的符号变化来缩小区间,直到找到满足精度要求的实数根。
- 优势:二分法可以高效地求解实数根,尤其适用于方程的实数根在某个已知区间内的情况。
5.4 [模板] 快速幂
- 问题描述:计算 ( a^b ) 的值,其中 ( a ) 和 ( b ) 是整数,且 ( b ) 可能非常大。
- 二分法应用:快速幂算法本质上是利用二分的思想来减少乘法运算的次数。通过将指数 ( b ) 分解为二进制表示,每次只计算 ( a ) 的平方,然后根据二进制位的值决定是否将当前结果乘到最终结果中,从而将时间复杂度从 ( O(b) ) 降低到 ( O(\log b) )。
- 优势:快速幂算法在处理大指数幂运算时效率极高,尤其适用于编程竞赛和实际应用中的大数幂运算。
相关文章:
C++.二分法教程
二分法 1. 问题引入1.1 猜数字游戏2.1 二分法核心思想为什么需要二分法?二分法的基本步骤示例代码代码解析 2.2 二分法适用场景有序数组查找效率要求高示例场景示例代码代码解析 3.1 初始化左右边界示例代码代码解析 3.2 计算中间值示例代码代码解析 3.3 判断与更新…...

如何通过数据分析优化项目决策
通过数据分析优化项目决策需从明确数据分析目标、选择适当的数据分析工具、确保数据质量、建立数据驱动文化等方面入手,其中,明确数据分析目标是优化决策过程的基础,只有清晰明确的数据分析目标才能指导有效的数据采集与分析,避免…...

2024年数维杯国际大学生数学建模挑战赛B题空间变量协同估计方法研究解题全过程论文及程序
2024年数维杯国际大学生数学建模挑战赛 B题 空间变量协同估计方法研究 原题再现: 在数理统计学中,简单采样通常假设来自相同总体的采样点彼此独立。与数理统计相反,空间统计假设空间变量的采样点是相依的,并在其值中表现出某些趋…...

leetcode hot100刷题日记——34.将有序数组转换为二叉搜索树
First Blood:什么是平衡二叉搜索树? 二叉搜索树(BST)的性质 左小右大:每个节点的左子树中所有节点的值都小于该节点的值,右子树中所有节点的值都大于该节点的值。 子树也是BST:左子树和右子树也…...
thinkphp 5.1 部分知识记录<一>
1、配置基础 惯例配置->应用配置->模块配置->动态配置 惯例配置:核心框架内置的配置文件,无需更改。应用配置:每个应用的全局配置文件(框架安装后会生成初始的应用配置文件),有部分配置参数仅能在应用配置文件中设置。模块配置:每个模块的配置文件(相同的配置…...
RAG:面向知识密集型自然语言处理任务的检索增强生成
摘要 大型预训练语言模型已被证明能够在其参数中存储事实性知识,并在下游自然语言处理(NLP)任务的微调中取得了最先进的结果。然而,它们访问和精准操作知识的能力仍然有限,因此在知识密集型任务中,其表现落后于针对特定任务设计的架构。此外,如何为它们的决策提供出处(…...
MVVM、MVC的区别、什么是MVVM
一、什么是MVVM (一)定义 MVVM是Model - View - ViewModel的缩写,它是一种软件架构设计模式,主要用于构建用户界面。这种模式将应用程序分为三个主要部分: Model(模型层) 它是应用程序中负责…...

网页自动化部署(webhook方法)
实现步骤: 宝塔安装宝塔WebHook 2.5插件。 github 上配置网页仓库(或可在服务器的网页根目录clone)。 配置宝塔WebHook 2.5 添加hook脚本; 编辑添加syncJC脚本; #!/bin/bash # 定义网站根目录 WEBROOT"/www…...
线性代数入门:轻松理解二阶与三阶行列式的定义与理解
前言 行列式是线性代数中一个非常基础但又极其重要的概念。它不仅是解线性方程组的利器,还在矩阵理论、向量空间、特征值等问题中扮演着关键角色。今天,我将用最通俗易懂的方式,向高中生朋友们介绍二阶和三阶行列式的基本概念和计算方法。让…...

AU6825集成音频DSP的2x32W数字型ClaSSD音频功率放大器(替代TAS5825)
1.特性 ● 输出配置 - 立体声 2.0: 2 x 32W (8Ω,24V,THD N 10%) - 立体声 2.0: 2 x 26W (8Ω,21V,THD N 1%) ● 供电电压范围 - PVDD:4.5V -26.4V - DVDD: 1.8V 或者 3.3V ● 静态功耗 - 37mA at PVDD12V ● 音频性能指标 - THDN ≤ 0.02% at 1W,1kHz - SNR ≥ 107dB (A-wei…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1商用服务体验全流程
华为云 Flexus 与 DeepSeek-V3/R1 的深度整合,构建了一套 “弹性算力 智能引擎” 的协同体系。 Flexus 系列云服务器基于柔性计算技术,通过动态资源调度(如 Flexus X 实例)实现 CPU / 内存的实时弹性分配,尤其适合大模…...
Go语言的原子操作
当我们想要对某个变量并发安全的修改,除了使用官方提供的mutex,还可以使用sync/atomic包的原子操作,它能够保证对变量的读取或修改期间不被其他的协程所影响。 Golang提供的原子操作都是非侵入式的,由标准库sync/atmoic包提供&am…...
Visual Studio 2022 插件推荐
Visual Studio 2022 插件推荐 Visual Studio 2022 (简称 VS2022) 是一款强大的 IDE,适合各类系统组件、框架和应用的开发。插件是接入 VS2022 最重要的扩展方式之一,它们可以大幅提升开发效率、优化代码质量,并提供强大的调试和分析功能。 …...
【深度学习-pytorch篇】3. 优化器实现:momentum,NAG,AdaGrad,RMSProp,Adam
Optimization Algorithms Explained 1. Beale Function 与导数函数讲解 Beale 函数是一个著名的用于测试优化算法性能的函数,其具有多个局部极值点,适合评估不同优化器的表现: def beale(x1, x2):"""Beale 函数定义&#x…...

C# NX二次开发-查找连续倒圆角面
在QQ群里有人问怎么通过一个选择一个倒圆角面来自动选中一组倒圆角面。 可以通过ufun函数 UF_MODL_ask_face_type 和 UF_MODL_ask_face_props 可判断处理选择相应的一组圆角面。 代码: Tag[] 查找连续倒圆角面(Tag faceTag) {theUf.Modl.AskFaceType(faceTag, out int typ…...

今天遇到的bug
先呈现一下BUG现象。 这主要是一个传参问题,参数一直传不过去。后来我才发现,问题所在。 我们这里用的RquestBody接收参数,所有请求的参数需要用在body体中接收,但是我们用postman,用的是字符串查询方式传参&#x…...
Go语言字符串类型详解
1. 定义字符串类型 package mainimport ("fmt");func main() {var str1 string "你好 GoLang 1"var str2 "你好 GoLang 2"str3 : "你好 GoLang 3"fmt.Printf("%v--%T\n", str1, str1)// 你好 GoLang 1--stringfmt.Printf…...

长安链智能合约命令解析(全集)
创建命令解析 ./cmc client contract user create \ --contract-namefact \ --runtime-typeWASMER \ --byte-code-path./testdata/claim-wasm-demo/rust-fact-2.0.0.wasm \ --version1.0 \ --sdk-conf-path./testdata/sdk_config.yml \ --admin-key-file-paths./testdata/cryp…...

一、OpenCV的基本操作
目录 1、OpenCV的模块 2、OpenCV的基础操作 2.1图像的IO操作 2.2绘制几何图形 2.3获取并修改图像中的像素点 2.4 获取图像的属性 2.5图像通道的拆分与合并 2.6色彩空间的改变 3、OpenCV的算数操作 3.1图像的加法 3.2图像的混合 3.3总结 1、OpenCV的模块 2、OpenCV的基…...

裂缝仪在线监测装置:工程安全领域的“实时守卫者”
在基础设施运维领域,裂缝扩展是威胁建筑结构安全的核心隐患之一。传统人工巡检方式存在效率低、时效性差、数据主观性强等局限,而裂缝仪在线监测装置通过技术迭代,实现了对结构裂缝的自动化、持续性追踪,为工程安全评估提供科学依…...

【论文精读】2024 ECCV--MGLD-VSR现实世界视频超分辨率(RealWorld VSR)
文章目录 一、摘要二、问题三、Method3.1 Latent Diffusion Model3.2 Motion-guided Diffusion Sampling3.3 Temporal-aware Decoder Fine-tuning 四、实验设置4.1 训练阶段4.2 训练数据 贡献总结 论文全称: Motion-Guided Latent Diffusion for Temporally Consis…...

SpringBoot简单体验
1 Helloworld 打开:https://start.spring.io/ 选择maven配置。增加SpringWeb的依赖。 Generate之后解压,代码大致如下: hpDESKTOP-430500P:~/springboot2/demo$ tree ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── s…...
【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2025年上半年 试题3)解题思路论文素材参考1、静态负载均衡策略2、动态负载均衡策略3、基于场景的负载均衡真题题目(2025年上半年 试题3) 请围绕 “论系统负载均衡设计方法” 论题,依次从以下三个方面…...

2025年通用 Linux 服务器操作系统该如何选择?
2025年通用 Linux 服务器操作系统该如何选择? 服务器操作系统的选择对一个企业IT和云服务影响很大,主推的操作系统在后期更换的成本很高,而且也有很大的迁移风险,所以企业在选择服务器操作系统时要尤为重视。 之前最流行的服务器…...

Azure devops 系统之五-部署ASP.NET web app
今天介绍如何通过vscode 来创建一个asp.net web app,并部署到azure 上。 创建 ASP.NET Web 应用 在您的计算机上打开一个终端窗口并进入工作目录。使用 dotnet new webapp 命令创建一个新的 .NET Web 应用,然后将目录切换到新创建的应用。 dotnet new webapp -n MyFirstAzu…...
Hadoop是什么
注:本人不懂Hadoop是什么,问的大模型,让它用生动浅显的语言向我解释。为了防止忘记,我把它说的记录下来。接下来的解释都是大模型生成的,如果有错误的地方欢迎指正 。 Hadoop 是什么?(一句…...

学习路之PHP--easyswoole_panel安装使用
学习路之PHP--easyswoole_panel安装使用 一、新建文件夹二、安装三、改配置地址四、访问 IP:Port 自动进入index.html页面 一、新建文件夹 /www/wwwroot/easyswoole_panel 及配置ftp 解压easyswoole_panel源码 https://github.com/easyswoole-panel/easyswoole_panel 二、安…...
结合 AI 编程,让前端开发更简单:趋势、方法与实践
在 AI 迅猛发展的浪潮中,前端开发正在迎来范式转变。本文将深入探讨如何将 AI 编程能力嵌入前端工程体系中,重塑前端生产力工具链与开发方式。 一、前端开发的核心痛点 尽管前端框架(如 Vue、React)已经大大简化了 UI 构建&#…...

【拓扑排序】P6560 [SBCOI2020] 时光的流逝|普及+
本文涉及知识点 C图论 拓扑排序 P6560 [SBCOI2020] 时光的流逝 题目背景 时间一分一秒的过着,伴随着雪一同消融在了这个冬天, 或许,要是时光能停留在这一刻,该有多好啊。 … “这是…我在这个小镇的最后一个冬天了吧。” “嗯…...

SSRF 接收器
接收请求 IP.php <?php // 定义日志文件路径 $logFile hackip.txt;// 处理删除请求 if (isset($_POST[delete])) {$ipToDelete $_POST[ip];$lines file($logFile, FILE_IGNORE_NEW_LINES);$newLines array();foreach ($lines as $line) {$parts explode( | , $line);…...