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

Qt 6.8版本 自制windows下运行软件<一>——串口调试助手

自制串口调试助手 哔哩哔哩效果展示

在这里插入图片描述

一、 说明

本人在读学生,跟随哔哩哔哩网站北京迅为公司的教学视频,进行学习qt,由于视频中的实现过程是利用ui界面的实现,本人在学习过程中,通过完全敲代码的形式,实现同样的功能,并利用网络上其他资源,添加进行去自己所需要的功能。比如本串口调试助手中的编码格式的选择,是我自己加进去的,在此记录一下学习过程。望有缘人发现错误的时候,指点一下,我将更正,我也将十分感激。

二、 准备工具

windows下安装Qt6.8 的版本(当然其他版本也能实现,可能会有一些不兼容)

三、新建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完成以后,对工程内的ui部分进行删除

四、删除工程中的多余部分

在这里插入图片描述
在这里插入图片描述
删除完成以后如下所示:
在这里插入图片描述
用 ctrl+s,然后ctrl+r 如果弹出以下窗口,则新建成功
在这里插入图片描述

    this->setFixedSize(1200,750);this->setWindowTitle(QString::fromLocal8Bit("自制串口助手-Lihoujun"));

通过上面两行代码实现窗口大小的实现,以及名称的设置。效果如下:
在这里插入图片描述

五、 代码实现

我在写代码之前,把名字修改了一下。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mainwindow.cpp代码

#include "mainwindow.h"QByteArray SerialPortAssistant::utf8ToGbk(const QString &utf8Str)   // UTF-8 转 GBK
{QByteArray utf8Data = utf8Str.toUtf8();QTextCodec *codec = QTextCodec::codecForName("GBK");if (codec) {return codec->fromUnicode(utf8Str);}return QByteArray();
}QString SerialPortAssistant::gbkToUtf8(const QByteArray &gbkData)   // GBK 转 UTF-8
{QTextCodec *codec = QTextCodec::codecForName("GBK");if (codec) {QString utf16Str = codec->toUnicode(gbkData); // 转换为 QStringreturn utf16Str;}return QString();
}void SerialPortAssistant::ReceAreaInit(void)
{ReceArea = new QPlainTextEdit(this);ReceArea->setFixedSize(860,400);ReceArea->move(320,20);ReceArea->setReadOnly(true);QPushButton* ReceAreaClear = new QPushButton(QString::fromLocal8Bit("清除接收区"),this);ReceAreaClear->setFixedSize(150,30);ReceAreaClear->move(1030,450);connect(ReceAreaClear,&QPushButton::clicked,[&](){ReceArea->clear();});}void SerialPortAssistant::SendAreaInit(void)
{SendArea = new QPlainTextEdit(this);SendArea->setFixedSize(860,100);SendArea->move(320,500);QPushButton* SendAreaClear = new QPushButton(QString::fromLocal8Bit("清除发送区"),this);SendAreaClear->setFixedSize(150,30);SendAreaClear->move(1030,630);connect(SendAreaClear,&QPushButton::clicked,[&](){SendArea->clear();});
}void SerialPortAssistant::ParameterPositonConfig(void)
{this->COM = new QComboBox(this);this->bound = new QComboBox(this);this->databits = new QComboBox(this);this->stopbits = new QComboBox(this);this->paritybits = new QComboBox(this);this->ReceType = new QComboBox(this);this->SendType = new QComboBox(this);this->ReceCode = new QComboBox(this);this->SendCode = new QComboBox(this);this->NewLine = new QComboBox(this);this->bound->addItem("115200");this->bound->addItem("9600");this->bound->addItem("4800");this->databits->addItem("8");this->stopbits->addItem("1");this->paritybits->addItem("None");this->paritybits->addItem("1");this->paritybits->addItem("0");this->ReceType->addItem(QString::fromLocal8Bit("文本模式"));this->ReceType->addItem("hex");this->SendType->addItem(QString::fromLocal8Bit("文本模式"));this->SendType->addItem("hex");this->ReceCode->addItem("utf-8");this->ReceCode->addItem("gbk");this->SendCode->addItem("utf-8");this->SendCode->addItem("gbk");this->NewLine->addItem("yes");this->NewLine->addItem("no");QLabel* COMLabel = new QLabel(QString::fromLocal8Bit("串口号:"),this);QLabel* boundLable = new QLabel(QString::fromLocal8Bit("波特率:"),this);QLabel* stopbitsLable = new QLabel(QString::fromLocal8Bit("停止位:"),this);QLabel* databitsLable = new QLabel(QString::fromLocal8Bit("数据位:"),this);QLabel* paritybitsLable = new QLabel(QString::fromLocal8Bit("校验位:"),this);QLabel* recetypeLable = new QLabel(QString::fromLocal8Bit("接收格式:"),this);QLabel* sendtypeLable = new QLabel(QString::fromLocal8Bit("发送格式:"),this);QLabel* ReceCodeLable = new QLabel(QString::fromLocal8Bit("接收编码:"),this);QLabel* SendCodeLable = new QLabel(QString::fromLocal8Bit("发送编码:"),this);QLabel* SendNewLineLable = new QLabel(QString::fromLocal8Bit("发送新行:"),this);QLabel* pic1Lable = new QLabel(this);QLabel* pic2Lable = new QLabel(this);pic1Lable->setPixmap(QPixmap("E:/Qt/Serial/LHJ.png"));pic2Lable->setPixmap(QPixmap("E:/Qt/Serial/GLUT.jpg"));pic1Lable->setScaledContents(true);pic2Lable->setScaledContents(true);pic1Lable->resize(250,100);pic2Lable->resize(130,130);pic1Lable->move(520,620);pic2Lable->move(90,560);QVector<QComboBox*>setups;setups.push_back(COM);setups.push_back(bound);setups.push_back(databits);setups.push_back(stopbits);setups.push_back(paritybits);setups.push_back(ReceType);setups.push_back(SendType);setups.push_back(ReceCode);setups.push_back(SendCode);setups.push_back(NewLine);QVector<QLabel*>labels;labels.push_back(COMLabel);labels.push_back(boundLable);labels.push_back(databitsLable);labels.push_back(stopbitsLable);labels.push_back(paritybitsLable);labels.push_back(recetypeLable);labels.push_back(sendtypeLable);labels.push_back(ReceCodeLable);labels.push_back(SendCodeLable);labels.push_back(SendNewLineLable);for(int i=0;i<setups.size();i++){setups[i]->setFixedSize(200,30);setups[i]->move(100,20+i*50);labels[i]->move(30,20+i*50);}
}void SerialPortAssistant::ConnectSerial(void)
{QSerialPort::BaudRate Bound;QSerialPort::DataBits dataBits;QSerialPort::StopBits stopBits;QSerialPort::Parity parityBits;QString port = COM->currentText();QString baud = bound->currentText();QString data = databits->currentText();QString stop = stopbits->currentText();QString parity = paritybits->currentText();QString RxCode = ReceCode->currentText();QString TxCode = SendCode->currentText();if(baud == "115200") Bound = QSerialPort::Baud115200;else if(baud == "9600") Bound = QSerialPort::Baud9600;else if(baud == "4800") Bound = QSerialPort::Baud4800;if(data == "8") dataBits = QSerialPort::Data8;if(stop == "1") stopBits = QSerialPort::OneStop;if(parity == "None") parityBits = QSerialPort::NoParity;else if(parity == "0") parityBits = QSerialPort::EvenParity;else if(parity == "1") parityBits = QSerialPort::OddParity;SerialPort = new QSerialPort(this);SerialPort->setBaudRate(Bound);SerialPort->setDataBits(dataBits);SerialPort->setStopBits(stopBits);SerialPort->setParity(parityBits);SerialPort->setPortName(port);if(SerialPort->open(QIODevice::ReadWrite) == true){QMessageBox::information(this,"COM","串口打开成功");connect(SerialPort,&QSerialPort::readyRead,[&](){auto data = SerialPort->readAll();if(ReceType->currentText() == "hex"){QString Hex = data.toHex(' ');ReceArea->appendPlainText(Hex);}else{QString str;if (ReceCode->currentText() == "gbk"){str = gbkToUtf8(data); // 将 GBK 数据转换为 UTF-8}else{str = QString::fromUtf8(data); // 直接使用 UTF-8}ReceArea->appendPlainText(str);}});}else{QMessageBox::critical(this,"COM","串口打开失败");}
}void SerialPortAssistant::timerEvent(QTimerEvent* e)
{QVector<QString>temp;for(const QSerialPortInfo& info : QSerialPortInfo::availablePorts()){temp.push_back(info.portName());}std::sort(temp.begin(),temp.end());if(temp != ports){this->COM->clear();this->ports = temp;for(auto& a:ports) this->COM->addItem(a);}updateTime(); // 每秒更新时间显示
}void SerialPortAssistant::TranslationControl(void)
{SendButton = new QPushButton(QString::fromLocal8Bit("发送"),this);OpenButton = new QPushButton(QString::fromLocal8Bit("打开串口"),this);CloseButton = new QPushButton(QString::fromLocal8Bit("关闭串口"),this);SendButton->setFixedSize(150,30);OpenButton->setFixedSize(100,30);CloseButton->setFixedSize(100,30);SendButton->move(860,630);OpenButton->move(30,520);CloseButton->move(180,520);CloseButton->setDisabled(true);SendButton->setDisabled(true);connect(SendButton,&QPushButton::clicked,[&](){QString data = SendArea->toPlainText();//qDebug() << data;if(SendType->currentText() == "hex"){QByteArray Arr;for(int i=0;i<data.size();++i){if(data[i] == ' ') continue;int num = data.mid(i, 2).toUInt(nullptr,16);++i;Arr.append(num);}if(NewLine->currentText() == "yes"){Arr.append("\r\n");}SerialPort->write(Arr);}else{QByteArray sendData = data.toLocal8Bit();if (SendCode->currentText() == "gbk"){sendData = utf8ToGbk(data); // 将 UTF-8 数据转换为 GBK}else{sendData = data.toUtf8(); // 直接使用 UTF-8}if(NewLine->currentText() == "yes"){sendData.append("\r\n");}SerialPort->write(sendData);}});connect(CloseButton,&QPushButton::clicked,[&](){SendButton->setDisabled(true);OpenButton->setDisabled(false);CloseButton->setDisabled(true);SerialPort->close();});connect(OpenButton,&QPushButton::clicked,[&](){//打开串口,进行连接if(COM->currentText() != ""){OpenButton->setDisabled(true);SendButton->setDisabled(false);CloseButton->setDisabled(false);ConnectSerial();}else{QMessageBox::critical(this,"COM","串口打开失败");}});
}void SerialPortAssistant::updateTime(void)
{QDateTime currentTime = QDateTime::currentDateTime();QString timeStr = currentTime.toString("yyyy-MM-dd hh:mm:ss");timeLabel->setText(timeStr);
}void SerialPortAssistant::GetSysTime(void)
{timeLabel = new QLabel(this);timeLabel->setFixedSize(300, 30);timeLabel->move(100, 700);updateTime(); // 初始化显示当前时间
}SerialPortAssistant::SerialPortAssistant(QWidget *parent) : QMainWindow(parent)
{this->setFixedSize(1200,750);this->setWindowTitle(QString::fromLocal8Bit("自制串口助手-Lihoujun"));ReceAreaInit();SendAreaInit();ParameterPositonConfig();TranslationControl();GetSysTime();this->startTimer(1000);  //1s的定时器
}SerialPortAssistant::~SerialPortAssistant()
{}

mainwindow.h代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QComboBox>
#include <QLabel>
#include <QDebug>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QMessageBox>
#include <QDateTime>
#include <QTimer>
//编码格式转换所需头文件
#include <QCoreApplication>
#include <QString>
#include <QByteArray>
#include <QTextCodec>class SerialPortAssistant:public QMainWindow{Q_OBJECT
public:SerialPortAssistant(QWidget *parent = nullptr);~SerialPortAssistant();void ReceAreaInit(void);void SendAreaInit(void);void ParameterPositonConfig(void);void TranslationControl(void);void ConnectSerial(void);void timerEvent(QTimerEvent* e);void GetSysTime(void);void updateTime(void);QByteArray utf8ToGbk(const QString &utf8Str);QString gbkToUtf8(const QByteArray &gbkData);
private:QPlainTextEdit* SendArea;QPlainTextEdit* ReceArea;QPushButton* SendButton;QPushButton* OpenButton;  //打开串口QPushButton* CloseButton; //关闭串口//QPushButton* SendAreaClear;//QPushButton* ReceAreaClear;QComboBox* COM;QComboBox* bound;QComboBox* databits;QComboBox* stopbits;QComboBox* paritybits;QComboBox* SendType;QComboBox* ReceType;QComboBox* ReceCode;  //接收编码QComboBox* SendCode;  //发送编码QComboBox* NewLine;  //发送编码QSerialPort* SerialPort;QVector<QString>ports;QLabel* CurrentTimeLabel;QLabel *timeLabel; // 用于显示当前时间的标签
};
#endif // MAINWINDOW_H

六、 效果展示

自制串口调试助手 哔哩哔哩效果展示

自制串口调试助手

相关文章:

Qt 6.8版本 自制windows下运行软件<一>——串口调试助手

自制串口调试助手 哔哩哔哩效果展示 一、 说明 本人在读学生&#xff0c;跟随哔哩哔哩网站北京迅为公司的教学视频&#xff0c;进行学习qt&#xff0c;由于视频中的实现过程是利用ui界面的实现&#xff0c;本人在学习过程中&#xff0c;通过完全敲代码的形式&#xff0c;实现同…...

Qt——静态函数中发送信号方法总结(不需要通过类内部信号与槽实现,关键是清楚你发送的信号源自哪个对象)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...

深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析

修改内容时间2.4.1处理请求的流程&#xff0c;引用更好的流程图2025.02.11首发2025.02.08 深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;一&#xff09;原理与解析 深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;二&#xff09;…...

关于视频去水印的一点尝试

一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法&#xff0c;用水印周围的像素填充水印的位置。 示例&#xff1a; ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…...

前端常见面试题-2025

vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升开发者的体验和性能。以下是一些关键的更新和新特性&#xff1a; Composition API 重构&#xff1a;Vue 3 引入了 Composition API 作为…...

JavaEE-SpringBoot快速入门

文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…...

盛铂科技 SMF106 低相位噪声贴片式频率综合器模块

在现代通信和电子设备领域&#xff0c;频率综合器作为关键组件&#xff0c;其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器&#xff0c;以其卓越的性能和独特设计&#xff0c;成为众多高性能系统的选择。 一、频率覆盖范围广&#xff0c;步进…...

前端【技术方案】重构项目

1. 明确重构目标 优化性能 减少页面加载时间降低资源占用 提升代码可维护性 更规范的代码风格更清晰的代码结构更明确的模块设计 扩展功能 为项目添加新功能改进现有功能 2. 评估项目现状 审查代码 全面检查现有代码&#xff0c;找出代码中的问题&#xff0c;如代码冗余、耦合…...

第十六天 HarmonyOS WebView开发实战:从加载网页到与JavaScript交互

HarmonyOS WebView开发实战&#xff1a;从加载网页到与JavaScript交互 一、WebView基础与HarmonyOS特性解析 在移动应用开发中&#xff0c;WebView作为内嵌浏览器组件&#xff0c;在HarmonyOS&#xff08;鸿蒙系统&#xff09;中扮演着重要角色。它不仅能够加载本地和远程网页…...

Unity学习part2

为bilibili教程【【Unity教程】零基础带你从小白到超神】 https://www.bilibili.com/video/BV1gQ4y1e7SS/?p50&share_sourcecopy_web&vd_source6e7a3cbb802eb986578ad26fae1eeaab的笔记 1、灯光的使用 定向光模拟太阳&#xff0c;是平行光。旋转定向光&#xff0c;光…...

贪吃蛇游戏

贪吃蛇 一、html <div class"container" id"app"></div><script src"./js/index.js"></script>二、css * {margin: 0;top: 0;} .set {margin: 15px auto;width: 600px; } .container {width: 600px;height: 600px;bac…...

docker修改镜像默认存储路径(基于 WSL2 的迁移方法)

打开powershell窗口 任意地方shift右键 1、停止 WSL wsl --shutdown2、导出数据 wsl --export docker-desktop-data E:\docker\DockerDesktopdata\docker-desktop-data.tar wsl --export docker-desktop E:\docker\DockerDesktop\docker-desktop.tar3、取消注册 wsl --un…...

C#+SqlSugar实现主从库读写分离

在使用 **SqlSugar** 进行分库操作时&#xff0c;可以通过配置多个数据库连接&#xff0c;并根据业务逻辑动态切换数据库。以下是一个完整的分库示例&#xff0c;展示如何实现分库功能。 --- ### **1. 安装 NuGet 包** 安装 SqlSugarCore&#xff1a; bash dotnet add packag…...

从无序到有序:上北智信通过深度数据分析改善会议室资源配置

当前企业普遍面临会议室资源管理难题&#xff0c;预约机制不完善和临时会议多导致资源调度不合理&#xff0c;既有空置又有过度拥挤现象。 针对上述问题&#xff0c;上北智信采用了专业数据分析手段&#xff0c;巧妙融合楼层平面图、环形图、折线图和柱形图等多种可视化工具&a…...

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层&#xff1f;传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…...

CentOS 8 配置bond

CentOS 8 网络配置的详细步骤和对应的配置文件内容。 1. 配置聚合网卡(Bonding) 配置intranet聚合网卡 在/etc/sysconfig/network-scripts/目录下创建ifcfg-intranet文件,内容如下: TYPE=Bond NAME=intranet DEVICE=intranet ONBOOT=yes BOOTPROTO=none IPADDR=10.2.1.22…...

C语言基础16:二维数组、字符数组

二维数组 定义 二维数组本质上是一个行列式的组合&#xff0c;也就是说二维数组由行和列两部分组成。属于多维数组&#xff0c;二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组&#xff0c;相当于二维数组又是一个一维数组&#xff0c;只不过它的元素…...

Java 同步锁性能的最佳实践:从理论到实践的完整指南

目录 一、同步锁性能分析 &#xff08;一&#xff09;性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 &#xff08;二&#xff09;案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …...

思科、华为、H3C常用命令对照表

取消/关闭 思科no华为undo华三undo 查看 思科show华为display华三display 退出 思科exit华为quit华三quit 设备命名 思科hostname华为sysname华三sysname 进入全局模式 思科enable、config terminal华为system-view华三system-view 删除文件 思科delete华为delete华…...

[qt5学习笔记]Application Example示例程序源码解析

开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图&#xff0c; 设置designer独立运行。估计是嵌入运行存在些许bug。 同理&#xff0c;ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常&#xff0c;但分离式更稳定可靠。 qt creator编译失败 原…...

华为交换机堆叠技术简介配置

目录 一、华为堆叠技术简介&#xff08;一&#xff09;提高可靠性&#xff08;二&#xff09;扩展端口数量&#xff08;三&#xff09;增大带宽&#xff08;四&#xff09;简化组网&#xff08;五&#xff09;长距离堆叠 二、华为交换机堆叠技术的案例及命令配置&#xff08;一…...

腿足机器人之四- 卡尔曼滤波

腿足机器人之四卡尔曼滤波 概率学基础贝叶斯准则熵 卡尔曼滤波扩展卡尔曼滤波信息滤波器 在机器人&#xff08;四足、人形&#xff09;领域&#xff0c;感知和行动的不确定性可能由多种因素引起&#xff0c;如传感器噪声、外部环境的变化、非精确控制以及实时性算力限制等。 和…...

nginx 部署前端vue项目

&#x1f468;‍⚕ 主页&#xff1a; gis分享者 &#x1f468;‍⚕ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕ 收录于专栏&#xff1a;前端工程师 文章目录 一、&#x1f353;什么是nginx&#xff1f;二、&#x1f353;nginx 部署…...

【第1章:深度学习概览——1.6 深度学习框架简介与选择建议】

嘿,各位老铁们,今天咱们来一场深度学习框架的深度探索之旅。在这个充满无限可能的深度学习时代,深度学习框架就像是连接理论与实践的桥梁,帮助我们从算法设计走向实际应用。随着技术的飞速发展,深度学习框架的选择变得越来越多样化,每一种框架都有其独特的优势和适用场景…...

NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

作者&#xff1a;来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型&#xff0c;以及其与 LLM&#xff08;Large Language Model&#xff09;的异同和协同关系。接着…...

C#的委托delegate与事件event

在C#中&#xff0c;delegate&#xff08;委托&#xff09;和 event&#xff08;事件&#xff09;是两个非常重要的概念&#xff0c;它们主要用于实现回调机制和事件驱动编程。下面详细介绍它们的原理和使用场景。 1. Delegate&#xff08;委托&#xff09; 1.1 委托的原理 委托…...

Spring Boot 集成MyBatis-Plus

文章目录 一、背景说明二、集成过程 2.1 引入 maven 依赖2.2 增加属性配置2.3 自动配置类 三、验证集成 3.1 控制器3.2 服务类3.3 Mapper接口类3.4 实体类3.4 不要忘记XML文件3.5 发起请求 四、技巧拓展 4.1 如何打印sql语句&#xff1f;4.2 如何对参数增加非空验证&#xff1f…...

javacv将视频切分为m3u8视频并播放

学习链接 ffmpeg-demo 当前对应的 gitee代码 Spring boot视频播放(解决MP4大文件无法播放)&#xff0c;整合ffmpeg,用m3u8切片播放。 springboot 通过javaCV 实现mp4转m3u8 上传oss 如何保护会员或付费视频&#xff1f;优酷是怎么做的&#xff1f; - HLS 流媒体加密 ffmpe…...

Docker 入门与实战:从安装到容器管理的完整指南

&#x1f680; Docker 入门与实战&#xff1a;从安装到容器管理的完整指南 &#x1f31f; &#x1f4d6; 简介 在现代软件开发中&#xff0c;容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊&#xff0c;以其轻量级、高效和跨平台的特性&#xff0c;深…...

计算机视觉:卷积神经网络(CNN)基本概念(二)

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络 接上一篇《计算机视觉&am…...

SQL SERVER的PARTITION BY应用场景

SQL SERVER的PARTITION BY关键字说明介绍 PARTITION BY关键字介绍具体使用场景排名计算累计求和分组求最值分组内百分比计算分组内移动平均计算分组内数据分布统计分组内数据偏移计算 总结 PARTITION BY关键字介绍 在SQL SERVER中&#xff0c;关键字PARTITION BY主要用于窗口函…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十二节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析&#xff08;TesterPresent_0x3E服务&#xff09; 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月14日 关键词&#xff1a;UDS协议、0x3E服务、会话保持、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x3E服…...

gsoap实现webservice服务

gsoap实现webservice服务 在实现Web服务时&#xff0c;使用gSOAP是一个很好的选择&#xff0c;因为它提供了强大的工具和库来创建SOAP和RESTful服务。gSOAP是一个C和C语言开发的库&#xff0c;它支持SOAP协议的各种版本&#xff0c;包括SOAP 1.1和SOAP 1.2。下面是如何使用gSO…...

达梦:dmserver占用io高排查

目录标题 1. 使用达梦数据库的性能视图查询当前活动会话查询执行时间较长的 SQL 2. 使用 DM 性能监视工具3. 使用操作系统工具监控 I/Oiostat 工具dstat 工具 4. 优化查询和索引审查 SQL 执行计划优化索引 5. 调整数据库参数6. 分析数据库日志7. 硬件和存储检查总结 针对达梦数…...

MoE架构中的专家选择门控机制:稀疏激活如何实现百倍效率突破?

技术原理&#xff08;数学公式与核心逻辑&#xff09; 核心公式 门控网络输出&#xff1a; G ( x ) Softmax ( W g ⋅ x b g ) G(x) \text{Softmax}(W_g \cdot x b_g) G(x)Softmax(Wg​⋅xbg​) 最终输出&#xff1a; y ∑ i 1 n G i ( x ) ⋅ E i ( x ) (仅保留Top-…...

用python写一个聊天室程序

下面是一个简单的基于Socket的Python聊天室程序示例&#xff0c;包括服务器端和客户端&#xff1a; 服务器端代码&#xff1a; import socket import threadingdef handle_client(client, address):print(f"New connection from {address}")while True:msg client…...

七星棋牌全开源修复版源码解析:6端兼容,200种玩法全面支持

本篇文章将详细讲解 七星棋牌修复版源码 的 技术架构、功能实现、二次开发思路、搭建教程 等内容&#xff0c;助您快速掌握该棋牌系统的开发技巧。 1. 七星棋牌源码概述 七星棋牌修复版源码是一款高度自由的 开源棋牌项目&#xff0c;该版本修复了原版中的多个 系统漏洞&#…...

Vulhub靶机 ActiveMQ任意 文件写入(CVE-2016-3088)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 漏洞版本&#xff1a;ActiveMQ在5.14.0之前的版本&#xff08;不包括5.14.0&#xff09; 二、访问靶机IP 8161端口 默认账户密码都是admin 1、利用bp抓包&#xff0c;修改为PUT方法并在fileserver…...

Cloud: aws:network: limit 含有pps这种限制

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshooting-ena.html#statistics-ena 这个是调查网络问题的一个网页; 在里面,竟然含有pps这种限制:ethtool -S;其实是比较苛刻的安全相关的策略? [ec2-user ~]$ ethtool -S ethN NIC statistics:tx_timeout: …...

28、深度学习-自学之路-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示

import sys,random,math from collections import Counter import numpy as npnp.random.seed(1) random.seed(1) f open(reviews.txt) raw_reviews f.readlines() f.close()tokens list(map(lambda x:(x.split(" ")),raw_reviews))#wordcnt Counter() 这行代码的…...

观察者模式说明(C语言版本)

观察者模式主要是为了实现一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己。下面使用C语言实现了一个具体的应用示例&#xff0c;有需要的可以参考…...

LC-搜索二维矩阵II、相交链表、反转链表、回文链表、环形链表、环形链表ll

搜索二维矩阵II 方法&#xff1a;从右上角开始搜索 我们可以从矩阵的右上角开始进行搜索。如果当前元素 matrix[i][j] 等于 target&#xff0c;我们直接返回 true。如果 matrix[i][j] 大于 target&#xff0c;说明 target 只能出现在左边的列&#xff0c;所以我们将列指针向左…...

如何查看 Linux 服务器的 MAC 地址:深入解析与实践指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

国产FPGA开发板选择

FPGA开发板是学习和开发FPGA的重要工具&#xff0c;选择合适的开发板对学习效果和开发效率至关重要。随着国产FPGA的发展&#xff0c;淘宝上的许多FPGA开发板店铺也开始进行国产FPGA的设计和销售&#xff0c;本文将对国产FPGA和相关店铺做个简单梳理&#xff0c;帮助有需要使用…...

iOS 获取设备占用内存

获取应用占用内存 获取应用进程占用内存 - (NSUInteger)memoryUsage {task_vm_info_data_t vmInfo;mach_msg_type_number_t count TASK_VM_INFO_COUNT;kern_return_t result task_info(mach_task_self(), TASK_VM_INFO, (task_info_t)&vmInfo, &count);if (result …...

用自己的数据训练yolov11目标检测

文章目录 概要理论知识整体架构流程架构优化多任务支持多参数体量 操作实操环境配置数据准备数据标注数据放置路径 训练预测 概要 官网&#xff1a;https://github.com/ultralytics/ultralytics?tabreadme-ov-file 提示&#xff1a;以 停车场空位检测 公开数据集示例&#x…...

golang如何将结构体和函数进行绑定?

在Go语言中&#xff0c;结构体和函数的绑定通常通过方法&#xff08;method&#xff09;来实现。方法是一种特殊的函数&#xff0c;它与某个类型关联&#xff0c;特别是结构体类型。下面是如何将结构体和函数进行绑定的具体步骤&#xff1a; 定义结构体&#xff1a;首先需要定义…...

【苍穹外卖】学习

软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程&#xff0c; 以及软件开发过程中涉及到的岗位角色&#xff0c;角色的分工、职责&#xff0c; 并了解软件开发中涉及到的三种软件环境。那么这一小节&#xff0c;我们将从 软件开发流程、角色…...

架构——LVS负载均衡主要模式及其原理、服务水平、优缺点

LVS&#xff08;Linux Virtual Server&#xff09;是一款高性能的开源负载均衡软件&#xff0c;支持多种负载均衡模式。以下是其主要模式及其原理、服务水平、优缺点&#xff1a; 1. NAT 模式&#xff08;Network Address Translation&#xff09; 原理&#xff1a; 请求流程…...

DFS算法篇:理解递归,熟悉递归,成为递归

1.DFS原理 那么dfs就是大家熟知的一个深度优先搜索&#xff0c;那么听起来很高大尚的一个名字&#xff0c;但是实际上dfs的本质就是一个递归&#xff0c;而且是一个带路径的递归&#xff0c;那么递归大家一定很熟悉了&#xff0c;大学c语言课程里面就介绍过递归&#xff0c;我…...