使用mysql保存密码

news2024/11/15 8:24:41

登录MySQL

这行命令告诉MySQL客户端程序用户root准备登录,-p表示告诉 MySQL 客户端程序提示输入密码。

mysql -u root -p

在这里插入图片描述

创建数据库

create database wifi;
use wifi;

在这里插入图片描述

create table password(user_password CHAR(8),primary key(user_password));

在这里插入图片描述

源码

代码编译

g++ wificreate.cpp -o wificreate -lmysqlclient

在这里插入图片描述

源码

#include <iostream>
#include <cstring>
#include <random>
#include <ctime>
#include <algorithm>
#include <mysql/mysql.h>

std::string generatePassword() {
    const char* const numbers = "0123456789";
    const char* const upperchar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    const char* const lowechar = "abcdefghijklmnopqrstuvwxyz";
    const char* const specials = "!@#$%^&*()-_=+[]{}|;:,.<>?";
    const int numChars = 8; // 密码长度

    std::string password;
    std::random_device rd;
    std::mt19937 generator(rd());
    std::uniform_int_distribution<> dis;

    // 初始化密码,确保包含至少一个数字、一个大写字母、一个小写字母和一个特殊字符
    password += numbers[dis(generator) % 10];
    password += upperchar[dis(generator) % 26];
    password += lowechar[dis(generator) % 26];
    password += specials[dis(generator) % 32];

    // 填充剩余的字符
    for (int i = 4; i < numChars; ++i) {
        std::string allChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+[]{}|;:,.<>?";
        dis = std::uniform_int_distribution<>(0, allChars.size() - 1);
        password += allChars[dis(generator)];
    }

    // 打乱密码中的字符顺序,以确保随机性
    std::shuffle(password.begin(), password.end(), generator);

    return password;
}

bool isPasswordValid(const std::string& password) {
    if (password.length() != 8) {
        return false;
    }

    bool hasDigit = false;
    bool hasUpper = false;
    bool hasLower = false;
    bool hasSpecial = false;

    const std::string specials = "!@#$%^&*()-_=+[]{}|;:,.<>?";

    for (char ch : password) {
        if (isdigit(ch)) {
            hasDigit = true;
        } else if (isupper(ch)) {
            hasUpper = true;
        } else if (islower(ch)) {
            hasLower = true;
        } else if (specials.find(ch) != std::string::npos) {
            hasSpecial = true;
        }

        if (hasDigit && hasUpper && hasLower && hasSpecial) {
            return true;
        }
    }

    return hasDigit && hasUpper && hasLower && hasSpecial;
}

bool insertOrUpdatePassword(MYSQL* conn, const std::string& password) {
    const char* insert_sql = "INSERT INTO password (user_password) VALUES (?) ON DUPLICATE KEY UPDATE user_password=VALUES(user_password)";
    MYSQL_STMT* stmt = mysql_stmt_init(conn);
    if (!stmt) {
        std::cerr << "stmt init failed" << std::endl;
        return false;
    }
    if (mysql_stmt_prepare(stmt, insert_sql, strlen(insert_sql))) {
        std::cerr << "prepare failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }

    MYSQL_BIND bind[1];
    memset(bind, 0, sizeof(bind));

    bind[0].buffer_type = MYSQL_TYPE_STRING;
    bind[0].buffer = (char*)password.c_str();
    bind[0].buffer_length = password.length();

    if (mysql_stmt_bind_param(stmt, bind)) {
        std::cerr << "bind failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }
    if (mysql_stmt_execute(stmt)) {
        std::cerr << "execute failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }
    mysql_stmt_close(stmt);
    return true;
}
bool clearTable(MYSQL* conn, const char* table_name) {
    // 创建一个足够长的缓冲区来存储完整的 SQL 语句
    char clear_sql[256];
    snprintf(clear_sql, sizeof(clear_sql), "DELETE FROM %s", table_name);

    MYSQL_STMT* stmt = mysql_stmt_init(conn);
    if (!stmt) {
        std::cerr << "stmt init failed" << std::endl;
        return false;
    }
    if (mysql_stmt_prepare(stmt, clear_sql, strlen(clear_sql))) {
        std::cerr << "prepare failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }

    if (mysql_stmt_execute(stmt)) {
        std::cerr << "execute failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }
    mysql_stmt_close(stmt);
    return true;
}

int main(int argc,char* argv[]) {
    
    MYSQL connect;
    if (mysql_init(&connect) == NULL) {
        std::cerr << "mysql init err" << std::endl;
        exit(1);
    }
    if (!mysql_real_connect(&connect, "localhost", "root", "1", "wifi", 3306, NULL, 0)) {
        std::cerr << mysql_error(&connect) << std::endl;
        mysql_close(&connect);
        return 1;
    }

    std::string userPassWord = "";
    std::string rootPassWord = generatePassword();
    std::string initialPassword1 = rootPassWord;
    if (argc > 1) {
    if (strcmp(argv[1], "reset") == 0) {
        std::string initialPassword2 = initialPassword1;  // 假设这是初始密码
        if (!clearTable(&connect, "password")) {
            std::cerr << "Failed to clear the password table." << std::endl;
            mysql_close(&connect);
            return 1;
        }
        if (!insertOrUpdatePassword(&connect, initialPassword2)) {
            std::cerr << "Failed to reset password." << std::endl;
            mysql_close(&connect);
            return 1;
        } else {
            std::cout << "Password has been reset to: " << initialPassword2 << std::endl;
        }
        mysql_close(&connect);
        return 0;
    }
}

    if (!insertOrUpdatePassword(&connect, rootPassWord)) {
        std::cerr << "Failed to insert or update password in database." << std::endl;
        mysql_close(&connect);
        return 1;
    }
    std::cout << "insert success" << std::endl;
    std::cout << "Generated Password :" << rootPassWord << std::endl;
    for (;;) {
        std::cout << "Please enter user password: ";
        std::cin >> userPassWord;
        if (isPasswordValid(userPassWord)) {
            if (!clearTable(&connect, "password")) {
                std::cerr << "Failed to clear table." << std::endl;
            } else {
                std::cout << "Table cleared successfully!" << std::endl;
                if (!insertOrUpdatePassword(&connect, userPassWord)) {
                    std::cerr << "Failed to insert new password into database." << std::endl;
                } else {
                    std::cout << "New password inserted successfully!" << std::endl;
                    std::cout << "New rootPassword :" << userPassWord << std::endl;
                }
            }
            break;
        } else {
            std::cout << "Invalid password!!!" << std::endl;
        }
    }

    mysql_close(&connect);
    return 0;
}

清除函数

bool clearTable(MYSQL* conn, const char* table_name) {
    // 创建一个足够长的缓冲区来存储完整的 SQL 语句
    char clear_sql[256];
    snprintf(clear_sql, sizeof(clear_sql), "DELETE FROM %s", table_name);

    MYSQL_STMT* stmt = mysql_stmt_init(conn);
    if (!stmt) {
        std::cerr << "stmt init failed" << std::endl;
        return false;
    }
    if (mysql_stmt_prepare(stmt, clear_sql, strlen(clear_sql))) {
        std::cerr << "prepare failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }

    if (mysql_stmt_execute(stmt)) {
        std::cerr << "execute failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }
    mysql_stmt_close(stmt);
    return true;
}

snprintf()

函数原型

int snprintf(char *str, size_t size, const char *format, ...);

snprintf 是一个标准 C 库函数,用于将格式化的数据写入字符串中。它比 sprintf 更安全,因为它可以指定目标缓冲区的最大大小,从而避免缓冲区溢出的问题。

 snprintf(clear_sql, sizeof(clear_sql), "DELETE FROM %s", table_name);

函数参数

char *str

clear_sql:这是目标缓冲区,snprintf 将把格式化后的字符串写入这个变量。它应该是一个字符数组,足够大以存储最终的 SQL 语句。

size_t size

sizeof(clear_sql):这是目标缓冲区的大小。sizeof 运算符用于确定
clear_sql 数组的大小,以确保写入的数据不会超出数组的界限。

const char *format

“DELETE FROM %s”:这是格式化字符串,它包含了要构造的 SQL 语句的模板。%s 是一个占位符,用于插入一个字符串参数。

table_name:这是一个字符串变量,包含了要删除记录的表名。它将替换格式化字符串中的 %s 占位符。

函数功能

行代码的功能是生成一个 DELETE 语句,用于删除指定表 table_name 中的所有记录。例如,如果 table_name 是 “users”,那么生成的 SQL 语句将是 “DELETE FROM users”。

注意事项:

需要确保 table_name 是一个有效的表名,且不包含任何 SQL 注入攻击的风险。在实际应用中,如果 table_name 来自于用户输入,应该进行严格的验证和清理,以防止潜在的安全问题。
snprintf 会在字符串的末尾确保添加空字符(‘\0’),以形成一个正确的 C 字符串。
如果格式化后的字符串长度超过了 clear_sql 缓冲区的大小,snprintf 会根据缓冲区的大小截断字符串,以防止溢出。

MYSQL_STMT结构体

MYSQL_STMT* stmt = mysql_stmt_init(conn);

这行代码是在使用 MySQL C API 时,初始化一个语句对象的步骤。下面是详细解释:

MYSQL_STMT* stmt:

这是一个指向 MYSQL_STMT 结构的指针,MYSQL_STMT 是 MySQL C API 中用于表示预编译 SQL 语句的结构体。

mysql_stmt_init(conn):

mysql_stmt_init 函数用于初始化一个 MYSQL_STMT 结构体,为后续的预编译 SQL 语句做准备。
conn 参数是一个指向 M YSQL 结构的指针,它代表了一个与 MySQL 数据库的连接。这个连接必须在此之前已经成功建立。

功能:

当你调用 mysql_stmt_init(conn) 时,它会为指定的数据库连接 conn 创建一个新的语句对象。
如果初始化成功,函数会返回一个指向新初始化的 MYSQL_STMT 结构的指针,你可以使用这个指针来执行后续的 SQL 语句预编译、参数绑定、执行等操作。
如果初始化失败,函数会返回 NULL。

mysql_stmt_close

在使用完 MYSQL_STMT 对象后,应该调用 mysql_stmt_close 函数来释放与之相关的资源。
在调用 mysql_stmt_init 之前,必须确保 conn 指向的 MYSQL 结构已经通过 mysql_real_connect 或类似的函数成功连接到数据库。
mysql_stmt_init 只是初始化了一个语句对象,你需要使用 mysql_stmt_prepare 函数来准备(预编译)一个 SQL 语句,然后才能执行它。

mysql_stmt_prepare

mysql_stmt_prepare(stmt, clear_sql, strlen(clear_sql))

这行代码是在使用 MySQL C API 时,准备(预编译)一个 SQL 语句的步骤。下面是详细解释:

mysql_stmt_prepare 函数用于预编译一个 SQL 语句,这样可以提高性能,并且可以防止 SQL 注入攻击。

参数解释:

这个函数需要三个参数:一个 MYSQL_STMT 指针,指向要准备的 SQL 语句的字符串,以及 SQL 语句字符串的长度。

stmt

这是一个指向 MYSQL_STMT 结构的指针,它是一个语句对象,之前已经通过 mysql_stmt_init 函数初始化。

clear_sql

这是一个包含要预编译的 SQL 语句的字符串。

strlen(clear_sql)

这是 clear_sql 字符串的长度。使用 strlen 函数来获取长度是为了确保在预编译过程中,MySQL 知道字符串的确切结束位置。

功能:

当你调用 mysql_stmt_prepare(stmt, clear_sql, strlen(clear_sql)) 时,MySQL 会检查 clear_sql 字符串中的 SQL 语句,并准备执行它。
预编译的语句可以包含参数占位符(如 ?),这些占位符在后续的 mysql_stmt_bind_param 调用中会被具体的参数值替换。

返回值:

如果预编译成功,mysql_stmt_prepare 函数返回 0。
如果预编译失败,函数返回非零值,你可以通过 mysql_stmt_error 函数获取错误信息。

注意事项:

在调用 mysql_stmt_prepare 之前,必须确保 stmt 已经通过 mysql_stmt_init 函数初始化。
如果预编译失败,应该检查错误信息,并根据错误信息进行相应的处理。
预编译的语句在使用完成后应该通过 mysql_stmt_close 函数关闭,以释放资源。
预编译语句是数据库操作中的一个重要步骤,它可以提高数据库操作的安全性和效率。通过预编译,数据库服务器可以重用编译后的语句,而不需要每次都解析和编译 SQL 语句。

mysql_stmt_close(stmt)

mysql_stmt_close(stmt) 是 MySQL C API 中用来关闭语句对象的函数调用。下面是对这个函数调用的详细解释:

函数定义:

mysql_stmt_close 是一个函数,用于关闭之前通过 mysql_stmt_init 创建的 MYSQL_STMT 语句对象。

参数:

stmt

这是一个指向 MYSQL_STMT 结构的指针,代表要关闭的语句对象。

功能:

当你完成一个语句对象的所有数据库操作后(例如,预编译 SQL 语句、绑定参数、执行语句等),你应该调用 mysql_stmt_close 来释放与该语句对象关联的所有资源。
这个函数会关闭语句对象,并且释放内存和其他系统资源,确保不会有内存泄漏。

返回值:

mysql_stmt_close 函数没有返回值(它的返回类型是 void)。

注意事项:

在关闭语句对象之前,确保已经完成了所有需要的数据库操作。
如果 stmt 是 NULL,mysql_stmt_close 函数不会有任何效果,因为没有任何资源需要关闭。
在关闭语句对象后,不应该再使用该对象进行任何操作,因为它已经不再有效。
关闭语句对象是一个良好的编程实践,它有助于维护资源的有效管理,并确保应用程序的稳定性和性能。在编写使用 MySQL C API 的应用程序时,应该在不再需要语句对象时及时关闭它们。

mysql_stmt_execute(stmt)

mysql_stmt_execute(stmt) 是 MySQL C API 中用于执行预编译 SQL 语句的函数。下面是对这个函数调用的详细解释:

函数定义:

mysql_stmt_execute 函数用于执行一个已经通过 mysql_stmt_prepare 预编译的 MYSQL_STMT 语句对象。

参数:

stmt:这是一个指向 MYSQL_STMT 结构的指针,代表要执行的预编译语句对象。

功能:

当你调用 mysql_stmt_execute(stmt) 时,MySQL 会执行与 stmt 相关联的预编译 SQL 语句。
这个函数可以执行 SELECT、INSERT、UPDATE、DELETE 等类型的 SQL 语句,具体取决于预编译时提供的 SQL 语句。

返回值:

如果执行成功,mysql_stmt_execute 函数返回 0。
如果执行失败,函数返回非零值,你可以通过 mysql_error 函数获取错误信息,通过 mysql_stmt_errno 函数获取错误代码。

注意事项:

在调用 mysql_stmt_execute 之前,必须确保 stmt 已经通过 mysql_stmt_prepare 预编译。
如果预编译的 SQL 语句包含参数占位符(如 ?),则需要先通过 mysql_stmt_bind_param 函数绑定实际的参数值。
对于 SELECT 语句,执行后可能需要调用 mysql_stmt_store_result 来存储结果集,然后通过 mysql_stmt_fetch 函数来检索结果集中的行。
对于 INSERT、UPDATE 或 DELETE 等不返回结果集的语句,通常不需要存储结果集,但可以通过 mysql_stmt_affected_rows 函数获取受影响的行数。

插入函数

bool insertOrUpdatePassword(MYSQL* conn, const std::string& password) {
    const char* insert_sql = "INSERT INTO password (user_password) VALUES (?) ON DUPLICATE KEY UPDATE user_password=VALUES(user_password)";
    MYSQL_STMT* stmt = mysql_stmt_init(conn);
    if (!stmt) {
        std::cerr << "stmt init failed" << std::endl;
        return false;
    }
    if (mysql_stmt_prepare(stmt, insert_sql, strlen(insert_sql))) {
        std::cerr << "prepare failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }

    MYSQL_BIND bind[1];
    memset(bind, 0, sizeof(bind));

    bind[0].buffer_type = MYSQL_TYPE_STRING;
    bind[0].buffer = (char*)password.c_str();
    bind[0].buffer_length = password.length();

    if (mysql_stmt_bind_param(stmt, bind)) {
        std::cerr << "bind failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }
    if (mysql_stmt_execute(stmt)) {
        std::cerr << "execute failed: " << mysql_error(conn) << std::endl;
        mysql_stmt_close(stmt);
        return false;
    }
    mysql_stmt_close(stmt);
    return true;
}

mysql_stmt_bind_param(stmt, bind)

mysql_stmt_bind_param(stmt, bind) 是 MySQL C API 中用于将应用程序变量绑定到预编译 SQL 语句的参数占位符的函数。下面是对这个函数调用的详细解释:

函数定义:

mysql_stmt_bind_param 函数用于在执行预编译的 SQL 语句之前,将应用程序中的数据绑定到 SQL 语句中的参数位置上。

参数:

stmt

这是一个指向 MYSQL_STMT 结构的指针,代表已经预编译的 SQL 语句对象。

bind

这是一个指向 MYSQL_BIND 结构数组的指针,每个 MYSQL_BIND 结构定义了一个参数的绑定信息,包括参数的数据类型、指向数据的指针、长度等。

功能:

当你的 SQL 语句中包含参数占位符(如 ?),你可以使用 mysql_stmt_bind_param 来指定这些占位符应该被哪些实际的值替换。
这个函数允许你将 C 语言中的变量或数据结构绑定到 SQL 语句中的参数上,这样当 SQL 语句执行时,MySQL 服务器会使用这些绑定的值。

返回值:

如果绑定成功,mysql_stmt_bind_param 函数返回 0。
如果绑定失败,函数返回非零值,你可以通过 mysql_error 函数获取错误信息,通过 mysql_stmt_errno 函数获取错误代码。

注意事项:

在调用 mysql_stmt_bind_param 之前,必须确保 stmt 已经通过 mysql_stmt_prepare 预编译,并且 SQL 语句中包含了参数占位符。
bind 数组中的每个 MYSQL_BIND 结构必须正确初始化,包括设置 buffer_type、buffer、buffer_length 等字段。
对于输入参数和输出参数(例如,用于存储 SELECT 语句返回值的参数),需要分别设置 MYSQL_BIND 结构的相应字段。

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

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

相关文章

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(2)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层&#xff08;1&#xff09; 7.1 数据链路层的组成结构 数据链路层使用ACK/NAK协议发送和接收TLP&#xff0c;由发送部件和接收部件组成。其中&#xff0c;发送部件由…

Ubuntu 20.04 上使用 Prometheus 和 Grafana 监控 PHP 8.0

本文方案监听php状态信息是采用php-php-exporter直接通过sock监控php-fpm信息。还可以通过nginx查询php状态信息从而监控&#xff0c;中间需要加上nginx配置。详见本文末尾 查找最新的 php-fpm_exporter 版本 访问 php-fpm_exporter 的 GitHub releases 页面 来查找最新版本。…

Nginx简单的安全性配置

文章目录 引言I Nginx简单的安全性配置禁止特定的HTTP方法限制URL长度禁止某些用户代理限制请求速率连接限制禁止访问某些文件类型II 常见的安全规则防御CC攻击User-Agent过滤GET-URL过滤GET-参数过滤POST过滤(sql注入、xss攻击 )引言 Nginx本身并不具备复杂的防火墙规则定制…

【电力电子】单相并网逆变器

摘要 单相并网逆变器是一种将直流电转换为单相交流电&#xff0c;并与电网同步输出的装置。它广泛应用于小型可再生能源系统&#xff0c;如光伏发电&#xff0c;确保产生的电能能够高效、安全地并入电网。本文探讨了单相并网逆变器的设计理论、控制策略以及其在不同负载条件下…

PAT--1002 写出这个数

题目描述 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10 100 。 输出格式&#xff1a; 在一行内输出 n 的各位数字…

深入探索C语言中的各种Sleep方法

引言 在程序设计中&#xff0c;有时需要让进程或线程暂停执行一段时间&#xff0c;这种需求可以通过使用 sleep 函数来实现。本文将详细介绍在 C 语言环境下可用的不同类型的 sleep 函数&#xff0c;包括它们的用途、参数以及注意事项&#xff0c;并提供一些示例代码。 目录 …

HTB-Responder(文件包含和哈希破解)

前言 各位师傅大家好&#xff0c;我是qmx_07,今天给大家讲解Responder靶场 渗透过程 信息搜集 服务器开放了80,5985端口尝试访问网站5985端口是一种远程管理协议 绑定域名 我们发现访问ip&#xff0c;进行了重定向跳转&#xff0c;需要绑定一下域名 echo "10.129.160…

麦穗检测计数-目标检测数据集(包括VOC格式、YOLO格式)

麦穗检测计数-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1N9tGbcssxvSM1W71q2YbNA?pwd3nb3 提取码&#xff1a;3nb3 数据集信息介绍&#xff1a; 共有 3373张图像和一一对应的标注文件 标…

Python内存管理详解

Python是一种动态类型的语言&#xff0c;它提供了自动内存管理机制。这意味着开发者不需要手动管理内存的分配和释放&#xff0c;Python会自动处理这些细节。本文将深入探讨Python中的内存管理机制&#xff0c;包括对象的创建、垃圾回收以及一些最佳实践。 Python内存管理概述…

定制开发 AI 智能名片拓客微信小程序在内容营销中的应用与价值

摘要&#xff1a;本文探讨了不同类型的内容营销及其目标&#xff0c;分析了传统媒体与以社交媒体为主要发布平台的内容营销在效果衡量上的差异。引入定制开发 AI 智能名片拓客微信小程序&#xff0c;阐述其在内容营销中的作用&#xff0c;强调应以多维度视角衡量内容营销效果&a…

Python打发无聊时光:15.Python打开黑神话-八戒3D模型

一、装vtk库并下载3D模型 首先装vtk库&#xff0c;直接在终端中输入命令&#xff1a; pip install vtk 接着将下面网盘链接中的vtk模型下载下来&#xff1a; 链接: https://pan.baidu.com/s/11pEPr3URQ5oR2kkn7dBEsg?pwdfa6s 提取码: fa6s --来自百度网盘超级会员v5的分享…

zsh: command not found: ohpm - mac安装ohpm工具 - 鸿蒙开发

OHPM简介&#xff1a; OHPM CLI 是鸿蒙生态三方库的包管理工具&#xff0c;支持OpenHarmony共享包的发布、安装和依赖管理。安装开发工具DevEco Studio--自带了ohpm&#xff0c;所以无需单独下载ohpm ohpm使用指导官网地址&#xff1a; 文档中心 注意&#xff1a; ohpm命令…

初等数学几百年重大错误:N各元n的对应n+1的全体是N的真子集N+——百年病态集论的症结

黄小宁 数学图可是“离散”的点组成的点集N&#xff5b;0&#xff0c;1&#xff0c;2&#xff0c;…&#xff0c;n&#xff0c;…0&#xff5d;&#xff08;各数是点的坐标&#xff09;。设本文所说集合往往是元不少于两个的集。定义&#xff1a;若数&#xff08;点&#xff09…

微服务框架三

微服务 微服务技术栈 服务发现概念 服务发现两种方式 客户端发现 服务端服务发现 服务发现技术对比 Nacos架构图 基于dubbo nacos服务调用 Nacos核心源码解析 registery 具体实现在nacosServiceRegistery setbeat 返回clientBeatInterval

网络准入控制系统

当我们谈论网络准入控制系统时&#xff0c;我们谈论的并不是网络准入控制系统&#xff0c;而是安全&#xff0c;我们不能只囿于它表面的浮华而忘掉它的本质&#xff0c;记住&#xff0c;不管讨论什么&#xff0c;我们必须要有直达本质的能力。网络的本质就是安全。 网络准入控制…

在大语言模型中,生成文本的退出机制,受max_generate_tokens限制,并不是所有的问答都完整的跑完整个transformer模型

目录 在大语言模型中,生成文本的退出机制,受max_generate_tokens限制,并不是所有的问答都完整的跑完整个transformer模型 1. max_generate_tokens的作用 2. 退出机制与Transformer模型 3. 实际应用中的影响 4. 结论 在大语言模型中,生成文本的退出机制,受max_genera…

网站建设完成后, 做seo必须知道的专业知识之--权重

SEO的权重是指搜索引擎对网站的综合评估和信任程度&#xff0c;这直接影响到网站在搜索结果中的排名和流量。 权重越高&#xff0c;说明搜索引擎对网站的认可度越高&#xff0c;从而有助于提高网站的关键词排名和流量。虽然“百度权重”并非百度官方提出的指标&#xff0c;但这…

开学日,LabVIEW 助你踏上编程之路

九月一日&#xff0c;伴随着凉爽的秋风和崭新的课本&#xff0c;新学期正式拉开帷幕。对于许多工科学生而言&#xff0c;这不仅意味着新课程的开始&#xff0c;更是开启实验室研究和工程项目的大门。而在工程软件开发的世界里&#xff0c;LabVIEW 是一个不可忽视的存在&#xf…

微服务CI/CD实践(二)服务器先决软件安装

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;服务器先决软件安装 微服务CI/CD实践&#xff08;三&#xff09;gitlab部署 微服务CI/CD实践&#xff08;四&#xff09;nexus3部…

每天五分钟计算机视觉:人脸识别网络FaceNet

本文重点 在前面的课程中,为了解决人脸识别的问题,我们学习了Siamese神经网络。本文我们学习另外一种人脸识别网络模型FaceNet。 论文 FaceNet: A Unified Embedding for Face Recognition and Clustering FaceNet概述 FaceNet是谷歌在CVPR 2015上提出的一种深度学习模型,…