AI算法实现解析-C++实例

基于C++实现的AI

以下是基于C++实现的AI/机器学习相关示例,涵盖基础算法、计算机视觉、自然语言处理等领域,适合不同阶段的学习者参考:

基础机器学习算法

  1. 线性回归
    使用梯度下降法预测连续值,核心公式:
    $y = wx + b$
    损失函数:
    $L = \frac{1}{2m}\sum_{i=1}^{m}(h(x^{(i)}) - y^{(i)})^2$

  2. 逻辑回归
    二分类问题实现,Sigmoid函数:
    $\sigma(z) = \frac{1}{1+e^{-z}}$

  3. K-Means聚类
    基于欧式距离的无监督聚类算法。

  4. 朴素贝叶斯分类器
    文本分类示例,计算条件概率:
    $P(y|x_1, x_2) = \frac{P(x_1|y)P(x_2|y)P(y)}{P(x_1, x_2)}$

  5. 决策树ID3算法
    通过信息增益选择特征分支。

基于C++实现全连接神经网络(MLP)
 

以下是基于C++实现全连接神经网络(MLP)的示例场景和代码片段,涵盖基础实现、优化技巧和实际应用案例。所有示例均遵循现代C++标准(C++17/20),并使用Eigen库进行矩阵运算加速。

基础MLP实现

#include <Eigen/Dense>
#include <vector>
#include <cmath>// 激活函数
inline double sigmoid(double x) {return 1.0 / (1.0 + exp(-x));
}// 网络结构定义
class MLP {
private:std::vector<Eigen::MatrixXd> weights;std::vector<Eigen::VectorXd> biases;
public:MLP(const std::vector<int>& layers) {for (size_t i = 1; i < layers.size(); ++i) {weights.emplace_back(Eigen::MatrixXd::Random(layers[i], layers[i-1]));biases.emplace_back(Eigen::VectorXd::Zero(layers[i]));}}Eigen::VectorXd forward(const Eigen::VectorXd& input) {Eigen::VectorXd output = input;for (size_t i = 0; i < weights.size(); ++i) {output = (weights[i] * output + biases[i]).unaryExpr(&sigmoid);}return output;}
};

反向传播实现

void MLP::backprop(const Eigen::VectorXd& input, const Eigen::VectorXd& target,double learning_rate) {// 前向传播缓存std::vector<Eigen::VectorXd> activations;activations.push_back(input);Eigen::VectorXd output = input;for (const auto& w : weights) {output = (w * output).unaryExpr(&sigmoid);activations.push_back(output);}// 计算输出层误差Eigen::VectorXd error = (activations.back() - target).cwiseProduct(activations.back().cwiseProduct(Eigen::VectorXd::Ones(output.size()) - activations.back()));// 反向传播for (int i = weights.size() - 1; i >= 0; --i) {Eigen::MatrixXd delta = error * activations[i].transpose();weights[i] -= learning_rate * delta;biases[i] -= learning_rate * error;if (i > 0) {error = (weights[i].transpose() * error).cwiseProduct(activations[i].cwiseProduct(Eigen::VectorXd::Ones(activations[i].size()) - activations[i]));}}
}

应用场景示例

数字识别
MLP mnist_model({784, 128, 64, 10});  // MNIST输入为28x28=784
房价预测
MLP housing_model({13, 32, 16, 1});  // Boston Housing数据集

XOR问题
MLP xor_model({2, 4, 1});  // 经典非线性问题

时间序列预测
MLP lstm_alternative({10, 64, 32, 1});  // 替代LSTM的简化方案

其他应用
// 5. 手写公式识别
// 6. 股票价格预测  
// 7. 语音特征分类
// 8. 医疗诊断系统
// 9. 自动驾驶感知层
// 10. 推荐系统
// ... (其他20个场景)


性能优化技巧

批量处理
Eigen::MatrixXd batch_forward(const Eigen::MatrixXd& inputs) {Eigen::MatrixXd outputs = inputs;for (const auto& w : weights) {outputs = (w * outputs).colwise() + biases[&w - &weights[0]];outputs = outputs.unaryExpr(&sigmoid);}return outputs;
}

GPU加速(使用CUDA)
// 需配合cuBLAS或自定义kernel实现矩阵运算

完整训练流程示例

void train(MLP& model, const std::vector<Eigen::VectorXd>& inputs,const std::vector<Eigen::VectorXd>& targets,int epochs) {for (int epoch = 0; epoch < epochs; ++epoch) {double total_loss = 0;for (size_t i = 0; i < inputs.size(); ++i) {model.backprop(inputs[i], targets[i], 0.01);total_loss += (model.forward(inputs[i]) - targets[i]).squaredNorm();}std::cout << "Epoch " << epoch << " Loss: " << total_loss << std::endl;}
}

卷积神经网络(CNN)

以下是一些关于卷积神经网络(CNN)的C++实现示例及其相关资源,涵盖从基础到进阶的应用场景。这些例子可以帮助理解CNN的核心概念和实际编码实现。

基础CNN实现示例

  1. 简单卷积层实现
    使用C++实现基础的二维卷积操作,包含输入矩阵和卷积核的乘法与累加运算。

    void conv2d(float* input, float* kernel, float* output, int in_h, int in_w, int k_h, int k_w) {for (int i = 0; i <= in_h - k_h; ++i) {for (int j = 0; j <= in_w - k_w; ++j) {float sum = 0.0f;for (int m = 0; m < k_h; ++m) {for (int n = 0; n < k_w; ++n) {sum += input[(i + m) * in_w + (j + n)] * kernel[m * k_w + n];}}output[i * (in_w - k_w + 1) + j] = sum;}}
    }
    
  2. ReLU激活函数
    实现逐元素的ReLU非线性激活函数。

    void relu(float* data, int size) {for (int i = 0; i < size; ++i) {data[i] = std::max(0.0f, data[i]);}
    }
    
  3. 最大池化层
    对输入特征图进行下采样,提取主要特征。

    void max_pooling(float* input, float* output, int in_h, int in_w, int pool_size) {int out_h = in_h / pool_size;int out_w = in_w / pool_size;for (int i = 0; i < out_h; ++i) {for (int j = 0; j < out_w; ++j) {float max_val = -FLT_MAX;for (int m = 0; m < pool_size; ++m) {for (int n = 0; n < pool_size; ++n) {max_val = std::max(max_val, input[(i * pool_size + m) * in_w + (j * pool_size + n)]);}}output[i * out_w + j] = max_val;}}
    }
    

进阶CNN库与框架示例

  1. 使用OpenCV的DNN模块
    加载预训练的CNN模型(如Caffe或TensorFlow格式)进行图像分类。

    #include <opencv2/dnn.hpp>
    cv::dnn::Net net = cv::dnn::readNetFromCaffe("model.prototxt", "weights.caffemodel");
    cv::Mat blob = cv::dnn::blobFromImage(image, 1.0, cv::Size(224, 224), cv::Scalar(104, 117, 123));
    net.setInput(blob);
    cv::Mat prob = net.forward();
    
  2. TensorFlow C++ API
    构建一个简单的CNN模型并训练MNIST数据集。

    #include <tensorflow/cc/client/client_session.h>
    tensorflow::Scope root = tensorflow::Scope::NewRootScope();
    auto input = tensorflow::ops::Placeholder(root, tensorflow::DT_FLOAT);
    auto conv = tensorflow::ops::Conv2D(root, input, kernel, {1, 1, 1, 1}, "SAME");
    
  3. Armadillo线性代数库
    实现卷积运算的高效矩阵乘法。

    #include <armadillo>
    arma::mat input = arma::randu(28, 28);
    arma::mat kernel = arma::randu(3, 3);
    arma::mat output = arma::conv2(input, kernel, "same");
    

手写数字识别(MNIST) 

C++手写数字识别(MNIST)实现步骤

数据预处理

MNIST数据集包含60,000个训练样本和10,000个测试样本,每个样本是28x28的灰度图像。需要将数据加载为C++可处理的格式,通常转换为一维数组或二维向量。

// 示例:读取MNIST二进制文件
void load_mnist_images(const std::string& path, std::vector<std::vector<float>>& images) {std::ifstream file(path, std::ios::binary);if (file.is_open()) {int magic_number, num_images, rows, cols;file.read((char*)&magic_number, sizeof(magic_number));file.read((char*)&num_images, sizeof(num_images));file.read((char*)&rows, sizeof(rows));file.read((char*)&cols, sizeof(cols));magic_number = ntohl(magic_number);num_images = ntohl(num_images);rows = ntohl(rows);cols = ntohl(cols);for (int i = 0; i < num_images; ++i) {std::vector<float> image(rows * cols);for (int j = 0; j < rows * cols; ++j) {unsigned char pixel;file.read((char*)&pixel, sizeof(pixel));image[j] = static_cast<float>(pixel) / 255.0f;}images.push_back(image);}}
}

模型构建

实现一个简单的全连接神经网络或卷积神经网络(CNN)。以下是一个全连接网络的示例:

class NeuralNetwork {
private:std::vector<std::vector<float>> weights;std::vector<float> biases;int input_size, hidden_size, output_size;public:NeuralNetwork(int input, int hidden, int output) : input_size(input), hidden_size(hidden), output_size(output) {// 初始化权重和偏置weights.resize(2);weights[0].resize(input_size * hidden_size);weights[1].resize(hidden_size * output_size);biases.resize(hidden_size + output_size);// 随机初始化std::random_device rd;std::mt19937 gen(rd());std::normal_distribution<float> dist(0.0f, 0.1f);for (auto& w : weights[0]) w = dist(gen);for (auto& w : weights[1]) w = dist(gen);for (auto& b : biases) b = dist(gen);}std::vector<float> forward(const std::vector<float>& input) {std::vector<float> hidden(hidden_size);for (int i = 0; i < hidden_size; ++i) {hidden[i] = biases[i];for (int j = 0; j < input_size; ++j) {hidden[i] += input[j] * weights[0][j * hidden_size + i];}hidden[i] = std::max(0.0f, hidden[i]); // ReLU}std::vector<float> output(output_size);for (int i = 0; i < output_size; ++i) {output[i] = biases[hidden_size + i];for (int j = 0; j < hidden_size; ++j) {output[i] += hidden[j] * weights[1][j * output_size + i];}output[i] = std::exp(output[i]); // Softmax (需归一化)}float sum = std::accumulate(output.begin(), output.end(), 0.0f);for (auto& val : output) val /= sum;return output;}
};

训练与评估

使用反向传播算法和随机梯度下降(SGD)训练模型:

void train(NeuralNetwork& nn, const std::vector<std::vector<float>>& images, const std::vector<int>& labels, int epochs, float lr) {for (int epoch = 0; epoch < epochs; ++epoch) {float loss = 0.0f;for (size_t i = 0; i < images.size(); ++i) {auto output = nn.forward(images[i]);// 计算交叉熵损失loss += -std::log(output[labels[i]]);// 反向传播(简化版)// 此处省略具体实现}std::cout << "Epoch " << epoch << ", Loss: " << loss / images.size() << std::endl;}
}
示例代码库推荐
  1. tiny-dnn:轻量级C++深度学习库,支持MNIST训练。

    #include <tiny_dnn/tiny_dnn.h>
    using namespace tiny_dnn;
    void train_mnist() {network<sequential> net;net << fully_connected_layer(28*28, 100) << activation::relu()<< fully_connected_layer(100, 10) << activation::softmax();adagrad optimizer;std::vector<vec_t> images;std::vector<label_t> labels;// 加载数据后训练net.train<mse>(optimizer, images, labels, 10, 1);
    }
    
  2. Armadillo + MLPACK:数值计算库结合机器学习库。

    #include <mlpack/methods/ann/ffn.hpp>
    using namespace mlpack::ann;
    FFN<NegativeLogLikelihood, RandomInitialization> model;
    model.Add<Linear>(100);
    model.Add<ReLU>();
    model.Add<Linear>(10);
    model.Add<LogSoftMax>();
    
性能优化
  • 使用多线程(OpenMP)加速矩阵运算。
  • 启用SIMD指令(如AVX)优化计算。
  • 利用GPU加速(如CUDA或OpenCL)。

通过以上步骤,可以构建一个基础的C++手写数字识别系统。实际应用中,建议使用成熟的深度学习框架(如TensorFlow C++ API或LibTorch)以提升开发效率。

图像风格迁移

以下是关于C++实现图像风格迁移的30个实例概述及核心方法,涵盖经典算法和现代框架的应用案例。每个例子均提供关键代码片段或技术要点,供参考实现。


基于OpenCV的简单风格迁移

使用OpenCV的滤波器和图像混合实现基础风格迁移效果:

#include <opencv2/opencv.hpp>
void styleTransfer(cv::Mat& src, cv::Mat& style, cv::Mat& dst) {cv::Mat src_gray, style_gray;cv::cvtColor(src, src_gray, cv::COLOR_BGR2GRAY);cv::cvtColor(style, style_gray, cv::COLOR_BGR2GRAY);cv::addWeighted(src, 0.7, style, 0.3, 0, dst);
}


基于神经网络的方法(C++接口)

使用LibTorch(PyTorch C++ API)实现快速风格迁移:

#include <torch/script.h>
torch::Tensor transfer(torch::Tensor input, torch::jit::script::Module& model) {std::vector<torch::jit::IValue> inputs = {input};return model.forward(inputs).toTensor();
}


OpenCV DNN模块加载预训练模型

加载TensorFlow或PyTorch导出的风格迁移模型:

cv::dnn::Net net = cv::dnn::readNetFromTensorflow("model.pb");
net.setInput(cv::dnn::blobFromImage(inputImg));
cv::Mat output = net.forward();

基于Gram矩阵的风格损失计算

实现风格特征提取的核心数学计算:

cv::Mat gramMatrix(cv::Mat features) {cv::Mat gram;cv::mulTransposed(features, gram, false);return gram / (features.total());
}

实时视频风格迁移

结合OpenCV视频捕获和轻量级模型:

cv::VideoCapture cap(0);
while (true) {cap >> frame;cv::Mat styled = transferFrame(frame);cv::imshow("Live Style Transfer", styled);
}

30个实例分类概览

类型 技术栈 典型应用场景
1-5: 传统方法 OpenCV滤波/混合 实时低功耗设备
6-15: 神经网络 LibTorch/ONNX Runtime 高质量艺术生成
16-20: 视频处理 OpenCV+DNN 实时视频滤镜
21-25: 移动端优化 ARM NEON/TFLite 手机APP集成
26-30: 三维扩展 OpenGL/Vulkan互操作 游戏/VR场景

完整项目参考

  1. FastPhotoStyle:基于C++/CUDA的快速迁移实现
  2. OpenCV contrib samples:dnn_style_transfer示例
  3. TorchScript范例:PyTorch官方C++导出教程

(注:实际开发需根据具体需求选择框架,建议优先测试ONNX格式模型的跨平台部署能力)

目标检测(YOLO Tiny)

C++ YOLO Tiny 目标检测实例

YOLO Tiny 是 YOLO (You Only Look Once) 的轻量级版本,适用于资源受限设备。以下是 C++ 实现 YOLO Tiny 目标检测的 30 个实例,涵盖不同应用场景。

基础实例
  1. 加载 YOLO Tiny 模型

    • 使用 OpenCV 的 DNN 模块加载预训练模型。
    cv::dnn::Net net = cv::dnn::readNet("yolov3-tiny.weights", "yolov3-tiny.cfg");
    

  2. 设置计算后端

    • 使用 CUDA 或 OpenCL 加速推理。
    net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
    net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
    

  3. 图像预处理

    • 将输入图像转换为 Blob 格式。
    cv::Mat blob = cv::dnn::blobFromImage(image, 1/255.0, cv::Size(416, 416), cv::Scalar(0,0,0), true, false);
    

  4. 执行前向传播

    • 将 Blob 输入网络并获取输出。
    net.setInput(blob);
    std::vector<cv::Mat> outputs;
    net.forward(outputs, net.getUnconnectedOutLayersNames());
    

  5. 后处理输出

    • 解析检测结果并绘制边界框。
    for (auto& output : outputs) {float* data = (float*)output.data;for (int i = 0; i < output.rows; ++i) {cv::Mat scores = output.row(i).colRange(5, output.cols);cv::Point classIdPoint;double confidence;cv::minMaxLoc(scores, 0, &confidence, 0, &classIdPoint);if (confidence > confidenceThreshold) {// 绘制边界框}}
    }
    

进阶实例
  1. 实时视频检测

    • 从摄像头捕获视频流并实时检测。
    cv::VideoCapture cap(0);
    while (true) {cv::Mat frame;cap >> frame;// 检测逻辑cv::imshow("Detection", frame);if (cv::waitKey(1) == 27) break;
    }
    

  2. 多线程处理

    • 使用多线程加速视频处理。
    void processFrame(cv::Mat frame) {// 检测逻辑
    }std::thread t(processFrame, frame.clone());
    t.detach();
    

  3. 自定义对象检测

    • 训练自定义数据集并加载模型。
    cv::dnn::Net net = cv::dnn::readNet("custom-yolov3-tiny.weights", "custom-yolov3-tiny.cfg");
    

  4. 非极大值抑制 (NMS)

    • 过滤重叠的检测框。
    cv::dnn::NMSBoxes(boxes, confidences, confidenceThreshold, nmsThreshold, indices);
    

  5. 性能优化

    • 调整输入尺寸以提高速度。
    cv::Mat blob = cv::dnn::blobFromImage(image, 1/255.0, cv::Size(320, 320), cv::Scalar(0,0,0), true, false);
    

应用场景实例
  1. 人脸检测

    • 使用 YOLO Tiny 检测人脸。
    std::vector<std::string> classes = {"face"};
    

  2. 车辆检测

    • 检测道路上的车辆。
    std::vector<std::string> classes = {"car", "truck", "bus"};
    

  3. 行人检测

    • 监控场景中的行人。
    std::vector<std::string> classes = {"person"};
    

  4. <

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916687.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊云科技实战架构:构建可扩展、高效率、无服务器应用

对于今天的开发者、架构师和技术爱好者而言&#xff0c;云计算早已超越了简单的“虚拟机租赁”或“服务器托管”阶段。它已经演化为一套丰富、强大且精密的工具集&#xff0c;能够以前所未有的方式设计、部署和扩展应用程序。真正的云原生思维&#xff0c;是掌握并运用多种架构…

论文阅读:《无约束多目标优化的遗传算法,群体和进化计算》

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

嵌入式单片机中位带操作控制与实现

STM32 单片机的SRAM有两个区支持位带(bit-band)操作。 那么,什么是位带,位带操作的原理是怎样的呢? 今天来梳理一下这个知识点。 在介绍位带操作之前,先看一看 ARM Crotext-M3 的存储器映射。 CM3 的地址空间是 4GB, 程序可以在代码区,内部 SRAM 区以及外部 RAM 区中执…

考研初试专业分146!上岸新疆大学!信号与系统考研经验,通信考研小马哥。

信号与系统专业课分数146&#xff0c;希望以下的经验能够帮助到正在努力学习的学弟学妹们更好的学习专业课。本人是从四月份开始学习专业课&#xff0c;当时我觉得专业课应该要尽早开始越拖到后期学习压力越大&#xff0c;所以在周边同学还在只学习公共课的时候我就开始了专业课…

负载均衡算法中的加权随机算法

import org.apache.commons.lang3.tuple.Pair;import java.util.Arrays; import java.util.List; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors;/*** 加权随机,nacos*/ public class RouterWeightRandom {/**** param list [{"a&q…

AI时代SEO关键词优化策略

内容概要 在人工智能&#xff08;AI&#xff09;技术深度融入数字营销的背景下&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;的关键词优化策略正经历一场智能变革&#xff0c;这不仅重塑了传统研究方式&#xff0c;还为企业带来了全新的竞争机遇。本文将从AI时代SEO的变…

复矩阵与共轭转置矩阵乘积及其平方根矩阵

设 是一个 的复数矩阵&#xff0c;其共轭转置矩阵&#xff08;Hermitian 共轭&#xff09;记为 &#xff08;即 &#xff09;&#xff0c;则矩阵 &#xff08; &#xff09;和 &#xff08; &#xff09;的性质如下文所述。1. Hermitian 性&#xff08;自共轭性&#x…

Vue 框架 学习笔记

作为初学者对于Vue框架的学习笔记 总结了Vue框架的核心知识点&#xff0c;包括&#xff1a;1. 基础概念&#xff1a;渐进式框架、两种使用方式、Vue实例创建流程、模板语法和响应式特性。2. 常用指令&#xff1a;详细介绍了v-html、v-show/v-if、v-for、v-on、v-bind、v-model等…

飞牛系统安装DataEase自定义Docker包

飞牛系统安装DataEase自定义Docker包背景构造DataEase Docker包1.在Linux 系统中&#xff08;比如我这里选麒麟V10&#xff09;安装Docker2.准备打包文件3.执行打包4.验证打好的包上传DataEase Docker包1.把本地docker 容器导出1.1查看镜像列表命令&#xff1a;docker images1.…

可配置的PWM外设模块

&#x1f527; 可配置的PWM外设模块 基于FPGA的PWM信号发生器&#xff0c;支持 动态周期与占空比配置&#xff0c;无需外部控制信号&#xff0c;适用于 LED 呼吸灯、舵机控制、电机驱动等场景。 仿真波形 参数修改后会晚一个pwm周期才生效&#x1f4cc; 模块功能 &#x1f9ee;…

从零到一:我是如何用深度学习打造高性能书籍推荐系统的

作者&#xff1a;笙囧同学 | 发布时间&#xff1a;2025年7月28日 | 阅读时长&#xff1a;15分钟 &#x1f3af; 前言&#xff1a;为什么要做这个项目&#xff1f; 大家好&#xff0c;我是笙囧同学&#xff01;最近在学习《机器学习基础》课程时&#xff0c;被推荐系统的魅力深…

OpenRLHF:面向超大语言模型的高性能RLHF训练框架

“四模型协同调度破资源壁垒&#xff0c;让70B模型RLHF训练触手可及” OpenRLHF 是由 OpenLLMAI 团队于2024年推出的开源强化学习人类反馈&#xff08;RLHF&#xff09;框架&#xff0c;旨在解决大语言模型&#xff08;LLM&#xff09;对齐训练中的多模型协调瓶颈与超大规模扩展…

DMETL安装流程及简单使用

目录 安装调度器 安装执行器 安装管理器 启动服务 进入web管理端 创建数据源 ​编辑 添加表 添加影子表增量 节点监控 DMETL工程流搭建实践 创建表/视图 添加sql脚本 添加数据清洗与转换模块 添加排序模块 创建输出表 连接各模块并启动 查看验证结果 监控管理 …

如何通过代码操作文件?

1. 为什么使用文件不使用文件&#xff0c;我们所写的程序存在电脑内存中&#xff0c;程序结束&#xff0c;内存回收&#xff0c;数据就丢失了。再次运行程序也是看不到上次运行时的数据的&#xff0c;如果想要将数据进行持久化保存&#xff0c;就需要使用文件。2. 文件分类&…

unbuntn 22.04 coreutils文件系统故障

文章目录核心思路具体操作步骤&#xff08;需借助 Ubuntu Live USB&#xff09;1. 准备 Ubuntu Live USB2. 从 Live USB 启动并挂载系统分区3. 从安装包中提取完好的 /bin/dir 文件并替换4. 重启系统并验证总结前提说明具体操作步骤&#xff08;分阶段执行&#xff09;阶段1&am…

若依【(前后端分离版)SpringBoot+Vue3】

文章目录什么是若依使用若依验证码的前端实现&#x1f4cc; 前后端验证码流程说明文档1、前端初始化验证码2、前端界面显示3、后端生成验证码接口&#xff08;GET /captchaImage&#xff09;4、用户提交登录信息5、后端验证验证码逻辑&#xff08;POST /login&#xff09;6、登…

Ubuntu24安装MariaDB/MySQL后不知道root密码如何解决

Ubuntu 24.04 安装 MariaDB 后 root 密码未知&#xff1f;解决方案在此在 Ubuntu 24.04 上新安装 MariaDB 后&#xff0c;许多用户会发现自己不知道 root 用户的密码&#xff0c;甚至在安装过程中也没有提示设置密码。这是因为在较新的 MariaDB 版本中&#xff0c;默认情况下 r…

Cloudflare CDN 中设置地域限制并返回特定界面

文章目录 什么是CDN 什么是Cloudflare 注册Cloudflare 账号,添加域名、修改DNS并激活邮箱 阻止或允许特定国家或地区访问 常见规则表达式 WAF自定义规则 + 自定义错误页面 使用Workers脚本 什么是CDN CDN 是一种优化网站请求处理的机制。它是在用户访问网站 (服务器) 时用户与…

Ubuntu高频实用命令大全

Ubuntu系统中高频实用命令 以下为Ubuntu系统中高频实用命令的分类整理,涵盖系统管理、文件操作、网络配置等场景,每个命令附带简要说明: 系统信息与管理 uname -a 显示系统内核版本、主机名等详细信息。 lsb_release -a 查看Ubuntu发行版版本信息。 uptime 显示系统运行时…

关于C#的编程基础:数据类型与变量全解析

一.基本的数据类型 1.什么是数据类型 在编程语言中&#xff0c;数据类型&#xff08;Data Type&#xff09; 是对变量存储的 “数据的种类” 的定义&#xff0c;它决定了&#xff1a; 变量可以存储哪些值&#xff08;例如整数、文本、布尔值&#xff09;。这些值在内存中如何…