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
英文地址,請注明出處:http://en.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;。這些值在內存中如何…