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

C++密码管理器

先问一句

最近有几个关注我的原力等级为0或-1,文章全是转载,转载时间基本都在2021年,而且关注了很多人,这些是僵尸粉吗?

文末有投票,麻烦参与一下谢谢


实现功能列表

暂时还没做加密功能 打算用openssl/aes.h 实现 源码在最后面

1. 添加第三方账号密码

  • 输入数据
    • ID:唯一标识账号的编号。
    • 平台:第三方平台的名称(如Facebook、Twitter等)。
    • 账号:用于登录的用户名或电子邮件。
    • 密码:用于登录的密码。
  • 功能
    • 检查ID是否唯一,避免重复添加。
    • 检查密码的安全性(包括强度等级和破解时间估算)。
    • 将账号信息保存到数据文件 data.txt

2. 删除第三方账号密码

  • 输入数据
    • ID:要删除的账号的唯一编号。
  • 功能
    • 根据ID从数据中删除相应的账号信息。
    • 更新 data.txt 文件,删除对应的记录。

3. 查找第三方账号密码

  • 输入数据
    • 平台名称:要查找的第三方平台的名称。
  • 功能
    • 根据平台名称查找所有相关的账号记录。
    • 显示匹配的账号信息(包括ID、平台、账号和密码)。

4. 修改第三方账号密码

  • 输入数据
    • ID:要修改的账号的唯一编号。
  • 功能
    • 根据ID找到并修改对应的账号信息(平台、账号和密码)。
    • 更新 data.txt 文件,保存修改后的记录。

5. 修改管理器密码

  • 输入数据
    • 当前密码:需要验证的旧管理器密码。
    • 新密码:设置的新管理器密码。
  • 功能
    • 验证当前密码是否正确。
    • 更新管理器密码,并保存到文件 password.dat

6. 显示所有弱密码

  • 功能
    • 检查所有账号密码的安全性。
    • 显示所有被标记为“弱”的密码(即不符合安全标准的密码)。

7. 显示重复密码

  • 功能
    • 查找并显示在相同平台上使用的重复密码。
    • 列出所有平台及其对应的重复密码信息。

8. 退出程序

  • 功能
    • 退出密码管理器程序。

部分实现方法

1.密码安全性检测

1.1 检查密码字符类型

密码的强度通常取决于包含的字符类型。我们可以检查以下几种字符类型:

  • 大写字母(A-Z)
  • 小写字母(a-z)
  • 数字(0-9)
  • 特殊字符(如 !@#$%^&*() 等)
1.2 计算密码强度等级

根据字符类型的组合来评估密码的强度:

  • :密码只包含一种类型的字符(例如,只有小写字母)。
  • :密码包含两种类型的字符(例如,小写字母和数字)。
  • :密码包含三种或四种类型的字符(例如,大写字母、小写字母、数字和特殊字符)。
1.3 实现细节
  • 遍历密码中的每一个字符,并检查其类型。
  • 使用布尔变量记录每种字符类型是否存在。
  • 根据这些布尔变量来确定密码的强度等级。

2. 代码实现

以下是一个详细的实现代码示例,演示如何检测密码的安全性:

#include <iostream>
#include <string>
#include <cctype>using namespace std;// 检查密码的强度
string checkPasswordStrength(const string& password) {bool hasUpper = false;   // 是否包含大写字母bool hasLower = false;   // 是否包含小写字母bool hasDigit = false;   // 是否包含数字bool hasSpecial = false; // 是否包含特殊字符// 遍历密码中的每一个字符for (char ch : password) {if (isupper(ch)) {hasUpper = true;    // 发现大写字母} else if (islower(ch)) {hasLower = true;    // 发现小写字母} else if (isdigit(ch)) {hasDigit = true;    // 发现数字} else {hasSpecial = true;  // 发现特殊字符}}// 计算字符类型的总数int score = (hasUpper ? 1 : 0) + (hasLower ? 1 : 0) + (hasDigit ? 1 : 0) + (hasSpecial ? 1 : 0);// 根据字符类型数返回强度等级if (score < 2) return "弱";if (score == 2) return "中";return "强";
}int main() {string password;cout << "请输入密码: ";cin >> password;string strength = checkPasswordStrength(password);cout << "密码强度: " << strength << endl;return 0;
}

3. 代码原理

  1. 布尔变量

    • hasUpper, hasLower, hasDigit, hasSpecial 用于记录密码中是否包含大写字母、小写字母、数字和特殊字符。
  2. 字符检查

    • 使用 isupper(ch), islower(ch), isdigit(ch) 来检查字符是否属于某种类型。
    • 如果字符不属于上述任何一种类型,则认为是特殊字符。
  3. 强度等级

    • 根据布尔变量的状态来计算总的字符类型数。
    • 如果字符类型数少于 2,密码强度为“弱”。
    • 如果字符类型数等于 2,密码强度为“中”。
    • 如果字符类型数大于或等于 3,密码强度为“强”。

2.密码破解时间预估

目标

估算破解密码所需的时间,以评估密码的安全性。通常,这是通过计算密码的可能组合数来完成的。

方法
  1. 计算密码的可能性

    • 字符集:确定密码中可能的字符集。常见字符集包括:
      • 62 个字符:大写字母 (26) + 小写字母 (26) + 数字 (10)
      • 95 个字符:大写字母 + 小写字母 + 数字 + 特殊字符(如 !@#$%^&*()
    • 可能组合数:计算所有可能的密码组合数,这取决于密码长度和字符集大小。
  2. 计算破解时间

    • 假设每秒可以尝试 N 个密码(例如 4,000,000,000 个密码/秒),可以通过以下公式计算估算的破解时间:

预估破解时间的计算

  1. 计算密码的可能组合数

    计算所有可能的密码组合数是预估破解时间的关键。假设密码的长度为 L,并且密码字符集的大小为 C(例如,大写字母、小写字母、数字和特殊字符),那么密码的可能组合数可以通过以下公式计算:

插图的原因是CSDN的markdown编辑器读取不了这几个公式 但我的MARKDOWN编辑器可以读取

[\text{可能组合数} = C^L]

其中,( C ) 是字符集的大小,( L ) 是密码的长度。

  1. 计算破解时间

    假设每秒能够尝试 N 个密码(例如,4,000,000,000 次尝试),可以通过以下公式计算估算的破解时间:

    [\text{破解时间(秒)} = \frac{\text{可能组合数}}{N}]

    其中,( N ) 是每秒尝试的密码数量。

示例

假设密码长度为 8 个字符,字符集包含 62 个字符(大写字母、小写字母和数字),每秒可以尝试 4,000,000,000 个密码。
3. 示例
假设密码长度为 8,字符集大小为 62(包含大写字母、小写字母和数字),每秒尝试次数为 4,000,000,000,则:

在这里插入图片描述

  1. 转换单位
    将破解时间从秒转换为其他更易理解的单位,如分钟、小时、天、年等,可以使用以下公式:
    在这里插入图片描述
代码实现
#include <cmath>double calculateCrackTime(const string& password) {double possibilities = 1;// 假设字符集中包含 62 个字符(大写字母 + 小写字母 + 数字)// 或 95 个字符(包括特殊字符)const double base = 62;  // 可以根据实际字符集调整for (char ch : password) {if (isdigit(ch) || isalpha(ch)) possibilities *= base;else possibilities *= 95;  // 特殊字符包含在 95 个字符集中}// 每秒 4,000,000,000 次尝试const double attemptsPerSecond = 4000000000.0;double timeInSeconds = possibilities / attemptsPerSecond;return timeInSeconds;
}

密码安全性检测主要是为了评估密码的强度,确保其不容易被破解。具体来说,我们可以通过检查密码的字符组成来评估其强度。以下是详细的步骤和代码示例,以及背后的原理。

总结

  • 密码安全性检测:通过检查密码的字符类型和组合来评估密码的强度。
  • 预估破解时间:通过计算密码的可能组合数和每秒破解速度来估算破解密码所需的时间。

效果图

在这里插入图片描述

源代码

注意

如果无法编译请在连接时加入以下参数

-std=c++11

代码

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iomanip>
#include <cctype>
#include <algorithm>
#include <map>using namespace std;// 数据结构
struct Account {int id;string platform;string username;string password;
};// 密码管理器
class PasswordManager {
private:string masterPassword;vector<Account> accounts;const string dataFileName = "data.txt";const string passwordFileName = "password.dat";const int maxAttempts = 3;// 密码安全性检查string checkPasswordStrength(const string& password) {bool hasUpper = false, hasLower = false, hasDigit = false, hasSpecial = false;for (char ch : password) {if (isupper(ch)) hasUpper = true;else if (islower(ch)) hasLower = true;else if (isdigit(ch)) hasDigit = true;else hasSpecial = true;}int score = (hasUpper ? 1 : 0) + (hasLower ? 1 : 0) + (hasDigit ? 1 : 0) + (hasSpecial ? 1 : 0);if (score < 2) return "弱";if (score == 2) return "中";return "强";}// 计算密码破解时间double calculateCrackTime(const string& password) {// 假设每秒破解4000000000个密码double possibilities = 1;for (char ch : password) {if (isdigit(ch) || isalpha(ch)) possibilities *= 62;  // 数字 + 大小写字母else possibilities *= 95;  // 包含特殊符号}return possibilities / 4000000000.0;}// 保存管理器密码到文件void saveMasterPassword() {ofstream file(passwordFileName);if (file.is_open()) {file << masterPassword << endl;file.close();}}// 从文件加载管理器密码void loadMasterPassword() {ifstream file(passwordFileName);if (file.is_open()) {getline(file, masterPassword);file.close();}}// 检查密码是否匹配bool verifyPassword(const string& password) {return password == masterPassword;}// 保存数据到文件void saveData() {ofstream file(dataFileName);if (file.is_open()) {for (const auto& acc : accounts) {file << acc.id << " " << acc.platform << " " << acc.username << " " << acc.password << endl;}file.close();}}// 显示所有弱密码void displayWeakPasswords() {for (const auto& acc : accounts) {if (checkPasswordStrength(acc.password) == "弱") {cout << "ID: " << acc.id << ", 平台: " << acc.platform<< ", 账号: " << acc.username << ", 密码: " << acc.password << " (弱)" << endl;}}}// 显示重复的密码void displayDuplicatePasswords() {map<string, vector<Account>> platformAccounts;for (const auto& acc : accounts) {platformAccounts[acc.platform].push_back(acc);}for (const auto& pair : platformAccounts) {const auto& accList = pair.second;if (accList.size() > 1) {cout << "平台: " << pair.first << endl;for (const auto& acc : accList) {cout << "ID: " << acc.id << ", 账号: " << acc.username << ", 密码: " << acc.password << endl;}cout << "-----------------------------" << endl;}}}public:PasswordManager() {// 检查是否需要创建管理器密码loadMasterPassword();if (masterPassword.empty()) {cout << "首次启动,请设置管理器密码: ";cin >> masterPassword;saveMasterPassword();}else {// 校验管理器密码int attempts = 0;string password;while (attempts < maxAttempts) {cout << "输入管理器密码: ";cin >> password;if (verifyPassword(password)) {break;} else {cout << "密码错误!" << endl;attempts++;}}if (attempts == maxAttempts) {cout << "尝试次数过多,程序退出。" << endl;exit(1);}}// 从文件加载数据ifstream file(dataFileName);if (file.is_open()) {string line;while (getline(file, line)) {Account acc;istringstream iss(line);iss >> acc.id >> acc.platform >> acc.username >> acc.password;accounts.push_back(acc);}file.close();}}// 添加第三方账号密码数据void addAccount() {Account acc;cout << "输入ID: ";cin >> acc.id;// 检查ID是否重复for (const auto& a : accounts) {if (a.id == acc.id) {cout << "ID " << acc.id << " 已经存在,请使用其他ID。" << endl;return;}}cout << "输入平台: ";cin >> acc.platform;cout << "输入账号: ";cin >> acc.username;cout << "输入密码: ";cin >> acc.password;string strength = checkPasswordStrength(acc.password);double crackTime = calculateCrackTime(acc.password);cout << "密码强度: " << strength << endl;cout << "估计破解时间: " << fixed << setprecision(2) << crackTime << " 秒" << endl;accounts.push_back(acc);saveData();}// 删除第三方账号密码数据void deleteAccount() {int id;cout << "输入要删除的账号ID: ";cin >> id;auto it = remove_if(accounts.begin(), accounts.end(), [id](const Account& acc) {return acc.id == id;});accounts.erase(it, accounts.end());saveData();}// 查找第三方账号密码数据void findAccount() {string platform;cout << "输入平台名称: ";cin >> platform;for (const auto& acc : accounts) {if (acc.platform.find(platform) != string::npos) {cout << "ID: " << acc.id << ", 平台: " << acc.platform<< ", 账号: " << acc.username << ", 密码: " << acc.password << endl;}}}// 修改第三方账号密码数据void modifyAccount() {int id;cout << "输入要修改的账号ID: ";cin >> id;for (auto& acc : accounts) {if (acc.id == id) {cout << "输入新的平台: ";cin >> acc.platform;cout << "输入新的账号: ";cin >> acc.username;cout << "输入新的密码: ";cin >> acc.password;saveData();return;}}cout << "未找到ID为" << id << "的账号。" << endl;}// 修改管理器密码void changeMasterPassword() {string oldPassword, newPassword;cout << "输入当前密码: ";cin >> oldPassword;if (oldPassword != masterPassword) {cout << "密码错误。" << endl;return;}cout << "输入新密码: ";cin >> newPassword;masterPassword = newPassword;saveMasterPassword();}// 显示所有弱密码void showWeakPasswords() {displayWeakPasswords();}// 显示重复的密码void showDuplicatePasswords() {displayDuplicatePasswords();}
};int main() {PasswordManager pm;int choice;while (true) {cout << "1. 添加第三方账号密码\n";cout << "2. 删除第三方账号密码\n";cout << "3. 查找第三方账号密码\n";cout << "4. 修改第三方账号密码\n";cout << "5. 修改管理器密码\n";cout << "6. 显示所有弱密码\n";cout << "7. 显示重复密码\n";cout << "8. 退出\n";cout << "请选择: ";cin >> choice;switch (choice) {case 1: pm.addAccount(); break;case 2: pm.deleteAccount(); break;case 3: pm.findAccount(); break;case 4: pm.modifyAccount(); break;case 5: pm.changeMasterPassword(); break;case 6: pm.showWeakPasswords(); break;case 7: pm.showDuplicatePasswords(); break;case 8: return 0;default: cout << "无效选项。" << endl; break;}}
}

送一首

逻辑严密思无瑕,论证精辟显才华。
条理分明层次清,剖析深入浅出嘉。
例证丰富启思遐,见解独到惠众夸。
文章传世惠千家,启迪智慧泽八涯。

相关文章:

C++密码管理器

先问一句 最近有几个关注我的原力等级为0或-1&#xff0c;文章全是转载&#xff0c;转载时间基本都在2021年&#xff0c;而且关注了很多人&#xff0c;这些是僵尸粉吗&#xff1f; 文末有投票&#xff0c;麻烦参与一下谢谢 实现功能列表 暂时还没做加密功能 打算用openssl/a…...

算法【Java】 —— 滑动窗口

滑动窗口 在上一篇文章中&#xff0c;我们了解到了双指针算法&#xff0c;在双指针算法中我们知道了前后指针法&#xff0c;这篇文章就要提到前后指针法的一个经典的使用 —— 滑动窗口&#xff0c;在前后指针法中&#xff0c;我们知道一个指针在前&#xff0c;一个指针在后&a…...

Spring Aware接口执行时机

一. 介绍 Spring Aware 接口的执行时机有两处&#xff0c;都在 getBean() 中的 initializeBean() 中&#xff1b; 下面我们分析这两处时机&#xff1b; // ----------------------- AbstractAutowireCapableBeanFactory --------------------- protected Object initializeB…...

android FD_SET_chk问题定位

android FD_SET_chk问题定位 一、FD报错二、问题定位2.1 APM定位2.2 adb定位2.3. 代码获取FD数 三、FD优化 一、FD报错 App在运行中记录报错如下&#xff0c;FD_SET&#xff0c;这个问题大概是文件描述符&#xff08;File Descriptor&#xff0c;简称FD&#xff09;超过了最大…...

Chapter 39 Python多线程编程

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、并行执行二、threading模块 前言 现代操作系统如 macOS、UNIX、Linux 和 Windows 等&#xff0c;均支持多任务处理。本篇文章详细讲解了并行执行的概念以及如何在 …...

STM32(二):GPIO

GPIO(General Purpose Input Output)通用输入输出口 1.可配置为8种输入输出模式&#xff0c;引脚电平:0V~3.3V&#xff0c;部分引脚可容忍5V&#xff0c;输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等&#xff0c;输入模式下…...

一文入门mysql 数据库

一、对数据库的操作 1.展示所有的数据库 show databases; 2.创建数据库 create database 数据库名 charset utf8; 3.删除数据库 drop database 数据库名; 4.查看当前使用的数据库 select database(); 5.使用数据库 use 数据库名; 二、对数据表的操作 1.展示所有表…...

通义千问( 四 ) Function Call 函数调用

4.2.function call 函数调用 大模型在面对实时性问题、私域知识型问题或数学计算等问题时可能效果不佳。 您可以使用function call功能&#xff0c;通过调用外部工具来提升模型的输出效果。您可以在调用大模型时&#xff0c;通过tools参数传入工具的名称、描述、入参等信息。…...

设置idea中放缩字体大小

由于idea没默认支持ctrl滚轴对字体调节大小&#xff0c;下面一起设置一下吧&#xff01; 点击 文件 -> 设置 按键映射 -> 编辑器操作 -> 搜索栏输入f 点击减小字体大小 -> 选择增加鼠标快捷键 按着ctrl键&#xff0c;鼠标向下滚动后&#xff0c;点击确定即可 然后…...

frameworks 之getEvent指令

frameworks 之getEvent指令 指令解析源码追溯源码解析1.解析参数2.初始化ufds数组3.添加到poll 并做对应处理 通过 getEvent 可以识别按键基本命令和里面的关键信息 涉及到的类如下 system/core/toolbox/toolbox.csystem/core/toolbox/tools.hsystem/core/toolbox/getevent.c …...

tensorboard显示一片空白解决方案

OK艾瑞巴蒂 不知道看这个视频几个小土堆过来的&#xff0c;今天已经发了一篇博文探讨快速下载tensorboard了 下面用的时候叒出现问题了 from torch.utils.tensorboard import SummaryWriter writer SummaryWriter("logs")# writer.add_image() # Yx for i in range…...

C#编程中,如何实现一个高效的数据排序算法?

在C#编程中&#xff0c;可以使用内置的排序方法来实现高效的数据排序。最常用的方法是使用Array.Sort()和List<T>.Sort()。这些方法内部使用了快速排序算法&#xff08;Quick Sort&#xff09;&#xff0c;它是一种非常高效的排序算法&#xff0c;平均时间复杂度为O(n lo…...

LookupError: Resource averaged_perceptron_tagger not found.解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Leetcode JAVA刷刷站(39)组合总和

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用回溯算法来找到所有可能的组合&#xff0c;使得组合中的数字之和等于目标数 target。因为数组中的元素可以无限制地重复选择&#xff0c;所以在回溯过程中&#xff0c;我们不需要跳过已经选择的元素&#x…...

Spring中AbstractAutowireCapableBeanFactory

AbstractAutowireCapableBeanFactory 是 Spring 框架中的一个抽象类&#xff0c;位于 org.springframework.beans.factory.support 包中。它实现了 AutowireCapableBeanFactory 接口&#xff0c;提供了一些通用的方法和逻辑&#xff0c;以支持 Spring 中的自动装配功能。 主要…...

PostgreSQL的walwriter和archiver进程区别

PostgreSQL的walwriter和archiver进程区别 在PostgreSQL中&#xff0c;walwriter和archiver进程是两个重要的后台进程&#xff0c;它们负责管理WAL&#xff08;Write-Ahead Logging&#xff0c;预写日志&#xff09;文件&#xff0c;但它们的职责和功能有所区别。理解这两个进…...

前端字体没有授权,字体版权检测(是否为方正字体)

1.截图系统中的首页和登录页面&#xff0c;主要是有字体的地方 2.在线字体版权检测地址&#xff1a;字体版权自动检测-求字体网 3.上传照片&#xff0c;开始对图片进行检测&#xff0c;每个账号有三次免费次数 4.检测完&#xff0c;直接查看检测报告即可&#xff0c; 报告中…...

在 SOCKS 和 HTTP 代理之间如何选择?

在 SOCKS 和 HTTP 代理之间进行选择需要彻底了解每种代理的工作原理以及它们传达的配置。只有这样&#xff0c;您才能轻松地在不同类型的代理之间进行选择。 本文概述了 HTTP 和 SOCKS 代理是什么、它们如何运作以及它们各自带来的好处。此外&#xff0c;我们将比较这两种代理类…...

C++适配windows和linux下网络编程TCP简单案例

C网络编程 网络协议是计算机网络中通信双方必须遵循的一套规则和约定&#xff0c;用于实现数据的传输、处理和控制。这些规则包括了数据格式、数据交换顺序、数据处理方式、错误检测和纠正等。网络协议是使不同类型的计算机和网络设备能够相互通信的基础&#xff0c;是网络通信…...

OpenDDS的GUID是如何构造的?

1、GUID、RepoID、GUID_t概念和关系 GUID(Global Unique IDentifiers)是RTPS规范约定的DDS对象的唯一性ID;RepoId(Repository IDentifiers)是Repo服务约定的DDS对象的唯一性ID;GUID和RepoId,都是基于GUID_t结构体定义,名称不同,但实质上是一样的。题外话: 无论是GUID还…...

初识MySQL(安装与配置环境)

嗨&#xff01;今天我们进入一个新的领域---数据库。 首先来个小小铺垫。 我们平时存储东西的时候&#xff0c;一般用到文件。为什么有文件了&#xff0c;还继续要这个数据库呢&#xff1f; 很明显&#xff0c;文件有一些不好的地方&#xff0c;需要数据库来进行补充。 文件…...

druid+logback打印sql执行日志

druid 的LogFilter 为我们准备了四种logger类型&#xff0c;对应打印 datasource相关、connection相关、statement相关、resultset相关的日志。 druid.sql.Datasource&#xff1a;打印数据源相关的字段。 druid.sql.Connection&#xff1a;打印应用程序获得数据库连接的过程。…...

C++编程:无锁环形队列 (LockFreeRingQueue)的简单实现、测试和分析

文章目录 0. 概述1. 无锁环形队列概述1.1 无锁环形队列的特点1.2 无锁环形队列的优势与局限 2. LockFreeRingQueue 实现2.1 Enqueue 操作流程图2.2 Dequeue 操作流程图 3. 核心实现细节3.1 环形队列的大小调整3.2 索引计算3.3 原子操作与CAS3.4 线程让步 4. 测试示例程序4.1 实…...

植物生长时为什么会扭动?科学家解开令查尔斯·达尔文困惑的千古之谜

在一项新的研究中&#xff0c;来自美国和以色列的物理学家可能已经弄清了植物生长过程中的一种古怪行为–也是查尔斯-达尔文本人在其生命的最后几十年里所好奇的一个谜&#xff1a;对于许多人类来说&#xff0c;植物可能看起来静止不动&#xff0c;甚至有点无趣。但实际上&…...

SAP LE学习笔记02 - WM和库存管理(IM)之间的关系,保管Lot(Quant)

上一章学习了LE的基础知识。 1&#xff0c;LE的概述&#xff0c;LE里面包含下面3个大的模块 - LE-WM 仓库管理 / - LE-SHP 发货/ - LE-TRA 运输 2&#xff0c;仓库的结构 - 仓库番号 / -保管域Type(存储区域)/ - 保管区画(存储区)/ - 棚番&#xff08;Storage Bin 仓位&…...

Span<T> 是 C# 7.2 引入的重要类型

Span<T> 是 C# 7.2 引入的一个非常重要的类型&#xff0c;它提供了一种低开销、类型安全的方式来操作连续的内存区域。Span<T> 本质上是一个结构体&#xff0c;它封装了一个内存段的引用&#xff08;通过指针&#xff09;以及该内存段的长度。由于它直接操作内存&a…...

Python办公自动化:初识 `openpyxl`

1.1 什么是 openpyxl&#xff1f; openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它允许我们通过 Python 脚本自动化处理 Excel 文件&#xff0c;包括创建新的工作簿、修改现有的工作簿、格式化单元格、处理公式和图表等功能。这对于办公自动化、…...

Pocketbase实战体验:内置数据库与实时功能如何超越传统MySQL

Pocketbase 是一个开源的实时后端服务器&#xff0c;内置了数据库、实时订阅、用户认证、RESTful API 等功能&#xff0c;而 MySQL 是一个广泛使用的关系数据库管理系统。以下是 Pocketbase 相对于 MySQL 的一些潜在优点&#xff1a; 完整的后端解决方案 一体化&#xff1a;P…...

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT&#xff1f; ChatGPT是由 OpenAI 开发的先进人工智能语言模型&#xff0c;能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议&#xff0c;甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本&#xff0c;它们都拥有强大的语言处理能力&…...

【Java学习】Stream流详解

所属专栏&#xff1a;Java学习 Stream流是JDK 8引入的一个概念&#xff0c;它提供了一种高效且表达力强的方式来处理数据集合&#xff08;如List、Set等&#xff09;或数组。Stream API可以以声明性方式&#xff08;指定做什么&#xff09;来处理数据序列。流操作可以被分为两大…...

Oracle(69)什么是表压缩(Table Compression)?

表压缩&#xff08;Table Compression&#xff09;是一种数据库优化技术&#xff0c;用于减少表数据的存储空间和提高I/O性能。通过压缩表数据&#xff0c;可以显著减少存储需求&#xff0c;并在某些情况下提高查询性能&#xff0c;特别是对于只读或主要是读取操作的表。表压缩…...

java JUC编程

Java并发工具包&#xff08;JUC&#xff09;&#xff0c;全称Java Util Concurrent&#xff0c;是Java提供的一个用于构建多线程应用程序的工具包&#xff0c;位于java.util.concurrent包及其子包中。 并发编程主要解决以下三个经典问题&#xff1a; 1. **原子性问题&#xf…...

vue3+element-plus表格分页选中加默认回显选中

1.需求 某个表单需要选择多条数据&#xff0c;点击选择按钮&#xff0c;弹框出来一个分页列表&#xff0c;选择多条数据&#xff0c;外面表单中显示选中的数据&#xff0c;可以删除数据&#xff0c;再次点击按钮&#xff0c;回显当前选中的数据。 2.解决办法 1.el-table加ro…...

Erupt 项目搭建

创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10&#xff0c;erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配&#xff0c;3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…...

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…...

比特位的计算

给你一个整数 n &#xff0c;对于 0 < i < n 中的每个 i &#xff0c;计算其二进制表示中 1 的个数 &#xff0c;返回一个长度为 n 1 的数组 ans 作为答案。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;[0,1,1] 解释&#xff1a; 0 --> 0 1 --> …...

SQLAlchemy 学习笔记

通信类型&#xff1a;AF_INET 协议家族一般是表示TCP通信的SOC_STREAM和UDP通信的SOCK_DGRAM。对于TCP通信&#xff0c;建立socket连接&#xff0c;&#xff1a; s socket.socket(socket.AF_INET, socket.SOCK_STREAM)连接socket&#xff0c; s.connect((host,port))socket通信…...

Linux内核分析(调度类和调度实体)

文章目录 前言一、调度类1. stop_sched_class2. dl_sched_class3. rt_sched_class4. fair_sched_class5. idle_sched_class总结 二、调度类中的操作函数三、调度实体 前言 调度是操作系统内核的一个关键职责&#xff0c;它涉及到如何合理分配CPU时间给不同的进程或线程。在Lin…...

用输入输出流(I/O)流,递归复制和删除多级文件

一、&#xff08;I/O&#xff09;流递归复制一个文件 第一种&#xff1a; else if语句过多&#xff0c;看起来冗余&#xff0c;优点&#xff1a;多级文件一次性复制完整 import java.io.*;//数据源&#xff1a;src/main/java/day15_8_13/haha //目标;src/main/java/LaJi pub…...

kafka监控工具EFAK

kafka监控工具&#xff08;EFAK&#xff09; 1、下载2、解压3、配置3.1、安装数据库&#xff0c;需要mysql是&#xff0c;并创建ke数据库3.2、修改配置文件 4、启动4.1、启动zookeeper4.2、启动kafka4.3、启动EFAK 5、访问http://ip:8048 github地址&#xff1a;https://github…...

Page与自定义Components生命周期

自定义组件 自定义组件一般可以用component,装饰&#xff0c;在结构体里面用build方法定义UI,或者用builder装饰一个方法&#xff0c;来作为自定义组件的构造方法 而页面page一般用Entry,和component结合起来使用 页面生命周期方法: onPageShow:页面每次显示时触发 onPageHid…...

Chain of Thought (CoT) 系列论文:大模型思维链,提升 LLM 的推理能力

文章目录 1. COT&#xff1a;Chain of Thought1. 研究背景2. CoT的原理3. CoT Prompt 1. COT&#xff1a;Chain of Thought COT 是 2022.01 由 google 提出的针对提升 LLM 的推理能力的 Prompt Engineering 方法。 paper&#xff1a; Chain-of-Thought Prompting Elicits Re…...

已解决:java.net.BindException: 地址已在使用

1. 问题描述 java.net.BindException: 地址已在使用 是一种常见的网络异常&#xff0c;通常在服务器程序尝试绑定到一个已经被占用的端口或地址时出现。具体的异常信息可能如下&#xff1a; java.net.BindException: Address already in use: JVM_Bind或 java.net.BindExcep…...

看书标记【数据科学:R语言实战 8】

看书标记——R语言 Chapter 8 数据可视化——绘图8.1 功能包8.2 散点图8.2.1 回归线8.2.2 lowess线条8.2.3 scatterplot函数8.2.4 Scatterplot矩阵1.splom——展示矩阵数据2.cpairs——绘图矩阵图 8.2.5 密度散点图 8.3 直方图和条形图8.3.1 条形图8.3.2 直方图 8.3.3 ggplot28…...

STM32标准库学习笔记-1.基础知识

STM32介绍&#xff1a; STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。 ARM的含义&#xff1a; 公司名称&#xff1a;ARM公司成立于1990年&#xff0c;全称是Advanced RISC Machines&#xff08;RISC:Reduced Instruction Set Computer 精简指令集计算机 相对应有C…...

Nginx:高效HTTP服务器与反向代理

Nginx&#xff1a;高效HTTP服务器与反向代理 1、核心特点2、应用场景 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Nginx&#xff0c;一个开源的HTTP服务器与反向代理工具&#xff0c;因其高性能、低资源消耗而备受推崇。以下是Nginx的几…...

vue3二次封装element-puls

将表单的通用信息给设置出来 如: label 的提示信息 , type 的类型 // 定义表单的配置项 const formConfig{ formItems:[ { type:"input", label:"用户ID", placeholder:"请输入用户ID" } ] } 页面配置如 <template v-for"(it…...

在CentOS 7上安装Apache Tomcat 8的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Apache Tomcat 是一个用于提供 Java 应用程序的 Web 服务器和 Servlet 容器。Tomcat 是由 Apache 软件基金会发布的 Java Servlet…...

深入理解分布式事务中的三阶段提交(3PC),什么是3PC,3PC原理是怎样?3PC的优化?

在上一篇文章中&#xff0c;我们详细介绍了分布式事务中的两阶段提交&#xff0c;以及知道了两阶段提交存在一定的问题 深入理解分布式事务中的两阶段提交&#xff08;2PC&#xff09;&#xff0c;什么是2PC&#xff0c;2PC原理是怎样&#xff1f;2PC有没有什么问题&#xff1…...

这款新的 AI 工具会消灭 ChatGPT 吗?

随着大型语言模型 (LLM) 的出现&#xff0c;ChatGPT迅速成为全球计算机用户的家喻户晓的名字。这款由 OpenAI 设计的深度学习聊天机器人以知识宝库而闻名——一部互联网百科全书。 继ChatGPT的脚步之后&#xff0c;许多其他生成式AI工具也纷纷涌现。 2023 年 3 月&#xff0c;一…...