C++/Qt 模拟sensornetwork的工作
C++/Qt 可视化模拟sensornetwork的工作
C++/Qt 模拟sensornetwork的工作
- C++/Qt 可视化模拟sensornetwork的工作
- 内容简介
- (一) 需求和规格说明
- (1)问题描述
- (2)设计目的
- (3)基本要求
- (4)实现提示
- (二) 设计
- (1)框架设计
- DataCollector(数据收集类):
- Graph(图类):
- SensorNode(传感器节点):
- SensorNetwork(网络管理):
- Widget(图形界面):
- (2)界面设计
- (3)类与属性说明
- (4)重点函数说明:
- 4.1 最优路径规划—迪杰斯特拉算法实现
- 4.2 最短路径查找
- (三) 用户手册
- 初始化设置
- 参数配置
- 查找节点
- 节点信息
- 信息总览
- 阻塞比例调整
- 节点定位
- (四) 调试及测试
- (五) 运行实例:
- (六)进一步改进
内容简介
Sensornetwork是一种新型的网络,其基本结构如下图所示:该网络由两部分组成,Sensornode集和DataCollector。Sensornode(可简称为Sensor)能够完成感知环境数据并将其发往DataCollector的功能。DataCollector完成Sensor采集数据的收集,它就是一台带有无线接收功能的计算机。
本课程设计以Qt为框架实现了对sensornetwork的工作模拟,包括传感器节点的随机生成,传感器的数据模拟产生,节点网络的构建与图形化展示,节点最短路径的查找等,采用迪杰斯特拉算法作为路由算法,基本完整模拟了sensornetwork的工作流程,拥有良好的交互界面,包括查找定位,数据修改,规则制定等。
(一) 需求和规格说明
(1)问题描述
Sensornetwork是一种新型的网络,其基本结构如下图所示:该网络由两部分组成,Sensornode集和DataCollector。Sensornode(可简称为Sensor)能够完成感知环境数据并将其发往DataCollector的功能。DataCollector完成Sensor采集数据的收集,它就是一台带有无线接收功能的计算机。
Sensornetwork可应用到很多实际领域中,如在战争中将Sensor散播在防线的前沿,可以收集敌人的一些情报(如大规模的部队转移等)。Sensor散播的地方称为Interestedarea,Sensor在这个区域内采集各自所在位置的数据,然后将采集到的数据传送到DataCollector。各个Sensor之间通过无线广播通讯,由于Sensor广播能力的限制,它只能和位于自身的一定广播半径内的Sensor进行通讯,所以有些Sensor就需通过其它Sensor,经过多次路由后才能到达DataCollector(如上图)。如何路由由Sensor内保存的简单路由表来决定。DataCollector的位置就在InterstedArea的边缘,且固定不动。
(2)设计目的
应用数据结构知识模拟一个新型网络系统。
(3)基本要求
①应用数据结构在单机上模拟Sensornetwork的工作。
②用VC++(C也可以)实现模拟系统,N个Sensor和1个DataCollector,其具体位置随机确定,InterestArea就是屏幕。N可配置,缺省为100。
③Sensor进行周期性采集,其采集周期可配置。
④Sensor的广播半径固定,也是可配置的参数。
⑤路由算法自行选择或设计。
(4)实现提示
Sensor集可组织成数组,它采集及收到的数据包用队列存储。具体细节也可参阅有关资料。
(二) 设计
(1)框架设计
由上述需求可知,我们需要设计的是一个模拟传感器的网络系统,这个网路系统的主题由图构成,因此应该使用图形界面将图显示,直观的描绘出传感器节点(SensorNode),边(Edge),数据收集器(DataCollector)之间的相互关系,可以用图形化的界面表达出算法的运行。故选用Qt这种跨平台应用程序开发框架作为主体框架,在Qt框架的基础上进行进一步的设计。
DataCollector(数据收集类):
- 作为传感器网络的核心节点,负责收集和处理传感器节点的数据。
- 实现与传感器节点之间的通信和数据交换。
- 具备管理传感器节点的功能,如初始化、数据请求等。
Graph(图类):
- 负责存储传感器网络的拓扑结构,包括节点和边。
- 支持基本的图操作,如添加节点、添加边、删除节点、删除边等。
- 实现图算法,如Dijkstra算法,用于计算从DataCollector到各个传感器节点的最短路径。
SensorNode(传感器节点):
- 表示传感器网络中的单个传感器节点。
- 具备基本属性,如位置(x, y坐标)、ID、数据等。
- 支持与DataCollector和其他传感器节点的通信。
SensorNetwork(网络管理):
- 负责管理整个传感器网络,包括传感器节点和数据收集器。
- 维护传感器网络的整体状态,并提供对外接口用于操作网络。
- 包含数据收集周期、广播半径等可配置参数。
Widget(图形界面):
- 使用Qt进行界面设计,负责绘制传感器网络的图形表示。
- 显示传感器节点、数据收集器和边的图形元素。
- 提供用户交互功能,如添加节点、删除节点、执行算法并显示结果等。
(2)界面设计
(3)类与属性说明
类名 | 属性 | 类型/返回值 | 名称 |
---|---|---|---|
DataCollector | 变量 | ||
x | double | ||
y | double | ||
model | QStandardItemModel * | ||
方法 | |||
addItem(TData data) | void | ||
removeItem(TData data) | void | ||
Edge | 变量 | ||
to | int | ||
weight | double | ||
type | int | ||
desister | double | ||
方法 | |||
Set(int a) | void | ||
Graph | 变量 | ||
adjList | unordered_map<int, std::vector> | ||
方法 | |||
addEdge(int from, int to, double weight) | void | ||
findEdge(int from, int to) | Edge | ||
Data | 变量 | ||
final | bool | ||
dist | double | ||
path | int | ||
方法 | |||
Set(bool f, double d, int p) | void | ||
SensorNetwork | 变量 | ||
sensors | QList<SensorNode*> | ||
dataCollector | DataCollector * | ||
sensorCount | int | ||
broadcastRadius | double | ||
T | int | ||
graph | Graph | ||
multiple | int | ||
PathMap | unordered_map<int, Data> | ||
方法 | |||
getShortestPath(int targetNode) | QPair<double, QList> | ||
printPathMap() | void | ||
initializeNetwork() | void | ||
Dijkstra() | void | ||
initEdgeType() | void | ||
StartT() | void | ||
GetNew() | void | ||
GetNewD() | void | ||
TData | 变量 | ||
fromNode | int | ||
data | int | ||
type | QString | ||
currentDateTime | QDateTime | ||
方法 | |||
toString() | QString | ||
SensorNode | 变量 | ||
a | int | ||
x | double | ||
y | double | ||
type | int | ||
broadcastRadius | double | ||
dataQueue | QQueue | ||
model | QStandardItemModel * | ||
方法 | |||
receiveData(const TData &data) | void | ||
collectData() | void | ||
SetType(int a) | void | ||
Widget | 变量 | ||
sensorNetwork | SensorNetwork* | ||
timer | QTimer* | ||
sensorCount | int | ||
broadcastRadius | double | ||
T | int | ||
T2 | int | ||
Judge | bool | ||
timer1 | QTimer * | ||
timer2 | QTimer * | ||
lastClickedSensorIndex | int | ||
nowNode | int | ||
方法 | |||
paintEvent(QPaintEvent *event) | void | ||
collect() | void | ||
Send() | void | ||
mousePressEvent(QMouseEvent *event) | void | ||
on_pushButton_clicked() | void | ||
on_pushButton_2_clicked() | void |
(4)重点函数说明:
4.1 最优路径规划—迪杰斯特拉算法实现
void SensorNetwork::Dijkstra() {// 初始化路径表for (int i = 0; i <= sensorCount; i++) {PathMap[i].Set(false, std::numeric_limits<double>::infinity(), -1); // 将距离设为无穷大}// 放入第一个节点PathMap[sensorCount].Set(true, 0, -1);// 初始化第一个节点的邻接节点的距离for (const Edge& edge : graph.adjList.at(sensorCount)) {PathMap[edge.to].Set(false, edge.weight, sensorCount);}for (int i = 0; i < sensorCount; i++) {// 找到未处理节点中距离最短的节点int minNode = -1;double minDist = std::numeric_limits<double>::infinity();for (const auto& entry : PathMap) {if (!entry.second.final && entry.second.dist < minDist) {minDist = entry.second.dist;minNode = entry.first;}}//if (minNode == -1) {// break; // 所有节点已处理完毕//}PathMap[minNode].final = true; // 将该节点标记为已处理// 更新该节点邻接节点的距离for (const Edge& edge : graph.adjList[minNode]) {if (!PathMap[edge.to].final && PathMap[minNode].dist + edge.weight < PathMap[edge.to].dist) {PathMap[edge.to].Set(false, PathMap[minNode].dist + edge.weight, minNode);}}}
}
初始化路径表:
- 为每个节点创建一个记录,包含三个部分:是否已处理 (final)、距离 (dist)、和前驱节点 (prev)。
- 使用一个特殊的值(无穷大)初始化所有节点的距离,表示这些节点当前还不可达。
- 对数据收集器节点(假设为 sensorCount)初始化距离为0,前驱节点为-1,标记为已处理。
- 初始化第一个节点的邻接节点:
- 遍历数据收集器节点的邻接节点,并初始化这些节点的距离。
- 将这些邻接节点的前驱节点设置为数据收集器节点。
- 主循环(处理所有节点):
- 找到未处理节点中距离最短的节点 minNode。这是Dijkstra算法的核心部分,确保每次选择的节点是当前已知最短路径的节点。
- 将该节点标记为已处理。
- 遍历该节点的所有邻接节点,更新这些邻接节点的距离(如果通过当前节点找到的路径更短)。
- 更新操作:如果通过 minNode 达到某个邻接节点的距离小于之前记录的距离,则更新该邻接节点的距离,并将其前驱节点更新为 minNode。
4.2 最短路径查找
QPair<double, QList<int>> SensorNetwork::getShortestPath(int targetNode) {QList<int> path;double totalDistance = PathMap[targetNode].dist;// 检查目标节点是否可达if (totalDistance == std::numeric_limits<double>::infinity()) {return qMakePair(totalDistance, path); // 返回空路径和无穷距离}// 使用堆栈逆序构建路径QStack<int> stack;int currentNode = targetNode;while (currentNode != -1) {stack.push(currentNode);currentNode = PathMap[currentNode].path;}// 将堆栈中的路径顺序放入 QList 中while (!stack.isEmpty()) {path.append(stack.pop());}return qMakePair(totalDistance, path);
}
初始化:
- 创建一个 QList 来存储路径节点。
- 获取目标节点的总距离 totalDistance。
- 检查目标节点可达性:
- 如果目标节点的总距离为无穷大,表示目标节点不可达。此时,返回总距离为无穷大和空路径。
- 逆序构建路径:
- 使用 QStack 堆栈存储路径节点,方便之后顺序输出路径。
- 从目标节点开始,逐步追踪其前驱节点 path,将节点压入堆栈,直到到达数据收集器节点(即 path 为 -1)。
- 构建有序路径:
- 从堆栈中弹出所有节点,并按顺序放入 QList 中,形成正确顺序的路径。
- 返回结果:
- 返回一个 QPair<double, QList>,包含总距离和节点路径。
(三) 用户手册
开始运行时会按照设定的默认值初始化传感器节点数字为100,广播半径为150,采集周期为5,发送间隔为2。可以在自己设置这些参数后点击配置按钮,及可按照输入的配置信息配置图像,在查找前的输入框中输入查找内容,可以查找到节点并在图形展示区将节点该节点变为红色并显示该节点到收集站的路径,将路径展示为红色,在节点信息栏显示节点的信息并实时更新,显示出当前节点上储存的信息与节点距离与信息多少。在最左边为信息总览,包含所有节点传输到收集站的信息,并可以修改。最左边的滑轮可以设置阻塞比例,调整距离与阻塞对边权重的影响。可以直接点击图中的节点,及定位到此节点。
初始化设置
启动程序时,系统会根据以下默认值进行初始化:
- 传感器节点数量:100
- 广播半径:150
- 采集周期:5
- 发送间隔:2
参数配置
用户可以在设置这些参数后点击“配置”按钮,系统将根据输入的配置信息重新配置图像。
查找节点
在查找前的输入框中输入节点信息,可以查找到对应节点,并在图形展示区将该节点标记为红色。系统还会显示该节点到数据收集站的路径,路径以红色展示。
节点信息
在节点信息栏中显示节点的详细信息并实时更新,包括:
- 当前节点上存储的信息
- 节点与数据收集站的距离
- 信息的数量
信息总览
界面最左侧显示信息总览,包含所有节点传输到数据收集站的信息。用户可以在此修改信息。
阻塞比例调整
界面左侧的滑轮可以设置阻塞比例,调整距离与阻塞对边权重的影响。
节点定位
用户可以直接点击图中的节点,系统将自动定位到该节点。
(四) 调试及测试
(五) 运行实例:
初始化后,将节点数改为150,采集周期改为10,发送间隔改为1
手动配置:
输入节点106,查找节点位置与最短路径。
查找节点:
修改总数据中的条数据信息。
数据修改:
点击图中节点,自动定位节点与路径。
点击选择节点:
(六)进一步改进
现在的实现有一个问题,当随机产生的节点有节点无法加入网络时,在遍历寻找时会报错导致程序奔溃,在后期优化要将不能加入网络的节点异常处理。
现在的界面有些单调,确实点美感,在后期需要对显示中的图点与边进行优化。
当前缺少直接在总数据中查找数据的功能,对收集到的数据没有处理,在后期可以加入对收集到的数据进行数据分析的功能。
目前实现只是用了迪杰斯特拉算法一种,比较单调,可以尝试是用多种算法实现这个功能。
相关文章:
C++/Qt 模拟sensornetwork的工作
C/Qt 可视化模拟sensornetwork的工作 C/Qt 模拟sensornetwork的工作 C/Qt 可视化模拟sensornetwork的工作内容简介(一) 需求和规格说明(1)问题描述(2)设计目的(3)基本要求࿰…...
无状态版的DHCPv6是不是SLAAC? 笔记250405
无状态版的DHCPv6是不是SLAAC? 笔记250405 无状态版 DHCPv6 不是 SLAAC,但二者在 IPv6 网络中可协同工作。以下是核心区别与协作关系: 本质区别 特性SLAAC无状态 DHCPv6主要功能生成 IPv6 地址(基于路由器通告的前缀)分发 DNS、…...
前端判断值相等的方法和区别
1. (宽松相等) 在比较之前会进行类型转换 可能导致一些意外的结果 0 // true 0 0 // true false 0 // true null undefined // true [1,2,3]1,2,3 // true2. (严格相等) 不进行类型转换 类型和值都必须相同 0 // false 0 0 // false false 0 /…...
AWS全球化低延迟架构实战:助力APP快速上架欧美、加拿大、澳大利亚
作者:AWS解决方案架构师 关键词:AWS全球架构、低延迟优化、多区域部署、Serverless、GDPR合规 一、客户需求分析 客户计划将APP上架至欧美(欧盟)、加拿大、澳大利亚等地区,并要求: 全球用户低延迟访问&…...
Maven使用
配置 Maven repository 教学视频 windows环境 idea配置 Maven项目结构 src:主项目文件 main:项目文件,其中java存放java文件,resource存放其他文件如图片文件等;test存放测试文件,如果需要也可以自己创建一个resources文件 target:主要存放我运行后的jar包等,以及一些…...
笔试强训题(7)
目录 1. Day371.1 旋转字符串(字符串)1.2 合并k个已排序的链表(链表)1.3 滑雪(记忆化搜索) 2. Day382.1 天使果冻(递推 DP)2.2 dd爱旋转(模拟)2.3 小红取数&…...
2023-2024总结记录
概括经历 这一年算是一个人生节点,2023年花了一整年的时间在准备考研,基本上等于一个人奋战,我不怎么去图书馆,只呆在无人的实验室,还好有对象陪我,不然可能要抑郁了。作息上还是很随意,什么时…...
类初始化、类加载、垃圾回收---JVM
创建对象过程 类加载 一个类从被加载到虚拟机内存中开始,到从内存中卸载,整个生命周期需要经过七个阶段:加载 、验证、准备、解析、初始化、使用和卸载。 类加载过程分为三个主要步骤:加载、链接、初始化 加载:通过…...
交换机与ARP
交换机与 ARP(Address Resolution Protocol,地址解析协议) 的关系主要体现在 局域网(LAN)内设备通信的地址解析与数据帧转发 过程中。以下是二者的核心关联: 1. 基本角色 交换机:工作在 数据链…...
元宇宙概念下,UI 设计如何打造沉浸式体验?
一、元宇宙时代UI设计的核心趋势 在元宇宙概念下,UI设计的核心目标是打造沉浸式体验,让用户在虚拟世界中感受到身临其境的交互效果。以下是元宇宙时代UI设计的几个核心趋势: 沉浸式体验设计 元宇宙的核心是提供沉浸式体验,UI设计…...
pycharm 有智能提示,但是没法自动导包,也就是alt+enter无效果
找到file->settings->editor->inspections 把python勾选上,原来不能用是因为只勾选了一部分。...
神经网络与深度学习:案例与实践——第三章(3)
神经网络与深度学习:案例与实践——第三章(3)——基于Softmax回归完成鸢尾花分类任务 实践流程主要包括以下7个步骤:数据处理、模型构建、损失函数定义、优化器构建、模型训练、模型评价和模型预测等, ①数据处理&am…...
LeetCode 249 解法揭秘:如何把“abc”和“bcd”分到一组?
文章目录 摘要描述痛点分析 & 实际应用场景Swift 题解答案可运行 Demo 代码题解代码分析差值是怎么来的?为什么加 26 再 %26? 示例测试及结果时间复杂度分析空间复杂度分析总结 摘要 你有没有遇到过这种情况:有一堆字符串,看…...
【Kafka基础】topic命令行工具kafka-topics.sh:基础操作命令解析
Kafka作为分布式流处理平台的核心组件,其主题管理是每个开发者必须掌握的关键技能。本文将详细解析kafka-topics.sh工具的使用技巧,从基础操作操作开始,助您轻松驾驭Kafka主题管理。 1 创建主题 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/…...
C++ 排序(1)
以下是一些插入排序的代码 1.插入排序 1.直接插入排序 // 升序 // 最坏:O(N^2) 逆序 // 最好:O(N) 顺序有序 void InsertSort(vector<int>& a, int n) {for (int i 1; i < n; i){int end i - 1;int tmp a[i];// 将tmp插入到[0,en…...
Business English Certificates (BEC) 高频词汇学习
Business English Certificates {BEC} 高频词汇 References Cambridge English: Business Certificates, also known as Business English Certificates (BEC), are a suite of three English language qualifications for international business. abandon /əˈbndən/ vt. …...
信息系统项目管理中各个知识领域的概要描述及其管理流程
1. 立项管理 涵义:评估项目可行性,决定是否启动。 流程: 需求分析:识别业务需求或问题。 可行性研究:技术、经济、法律等可行性分析。 项目建议书:提交初步方案。 立项评审:高层审批。 项目…...
OpenAI推出PaperBench
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
基于LSTM的文本分类2——文本数据处理
前言 由于计算机无法认识到文字内容,因此在训练模型时需要将文字映射到计算机能够识别的编码内容。 映射的流程如下: 首先将文字内容按照词表映射到成唯一的数字ID。比如“我爱中国”,将“中”映射为1,将“国”映射到2。再将文…...
神经网络与深度学习:案例与实践——第三章(2)
神经网络与深度学习:案例与实践——第三章(2) 基于Softmax回归的多分类任务 Logistic回归可以有效地解决二分类问题,但在分类任务中,还有一类多分类问题,即类别数 C大于2 的分类问题。Softmax回归就是Log…...
Maven/Gradle的讲解
一、为什么需要构建工具? 在理解 Maven/Gradle 之前,先明确它们解决的问题: 依赖管理:项目中可能需要引入第三方库(如 Spring、JUnit 等),手动下载和管理这些库的版本非常麻烦。标…...
常见的HR面问题汇总
⚠️注意:以下仅是个人对问题的参考,具体情况视个人情况而定~ 1. 你觉得你有哪些优点和缺点? 优点:学习能力强,遇到问题会主动思考和查找解决方案;有责任心,对待工作认真负责&#…...
把握数据治理关键,释放企业数据潜能
数据治理是对数据资产管理行使权力和控制的活动集合,以下是关于它的详细介绍: 一、定义 数据治理是指从使用零散数据变为使用统一主数据、从具有很少或没有组织和流程治理到企业范围内的综合数据治理、从尝试处理主数据混乱状况到主数据井井有条的一个…...
优化 Web 性能:处理非合成动画(Non-Composited Animations)
在 Web 开发中,动画能够增强用户体验,但低效的动画实现可能导致性能问题。Google 的 Lighthouse 工具在性能审计中特别关注“非合成动画”(Non-Composited Animations),指出这些动画可能增加主线程负担,影响…...
房地产之后:探寻可持续扩张的产业与 GDP 新思
在经济发展的长河中,房地产长期占据着支柱产业的重要地位。其之所以能担当此重任,根源在于它深度嵌入了人们的生活与经济体系。住房,作为人类最基本的需求之一,具有不可替代的刚性。与其他现买按需生产的产业不同,房地产有着独特的消费逻辑。人们为了拥有一个稳定的居住之…...
Chapter02_数字图像处理基础
文章目录 图像的表示⭐模拟图像→数字图像均匀采样和量化均匀采样均匀量化 非均匀采样和量化 数字图像的表示二值图像灰度图像彩色图像 ⭐空间分辨率和灰度分辨率空间分辨率灰度分辨率 ⭐图像视觉效果影响因素采样数变化对图像视觉效果的影响空间分辨率变化对图像视觉效果的影响…...
【Android】UI开发:XML布局与Jetpack Compose的全面对比指南
随着Google推出Jetpack Compose这一现代化工具,我们面临一个关键选择:继续使用传统的XML布局,还是转向Compose? 一、语法对比:两种不同的构建方式 1. XML布局:基于标签的静态结构 XML通过嵌套标签定义UI元…...
浙大:LLM具身推理引擎Embodied-Reasoner
📖标题:Embodied-Reasoner: Synergizing Visual Search, Reasoning, and Action for Embodied Interactive Tasks 🌐来源:arXiv, 2503.21696 🌟摘要 🔸深度思维模型的最新进展已经证明了数学和编码任务的…...
form+ffmpeg+opus录音压缩音频
说明: formffmpegopus录音压缩音频 效果图: step1:opus格式录音 C:\Users\wangrusheng\RiderProjects\WinFormsApp11\WinFormsApp11\Form1.cs using System; using System.Diagnostics; using System.IO; using System.Windows.Forms;namespace WinFo…...
win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录
win10 笔记本电脑安装 pytorchcudagpu 大模型开发环境过程记录 文章部分内容参考 deepseek。 以下使用命令行工具 mingw64。 安装 Anaconda 安装位置: /c/DEVPACK/Anaconda3 然后安装 Python 3.10.16 (略) $ conda create -n pytorch_…...
LeetCode 2442:统计反转后的不同整数数量
目录 核心思想:数字的“拆分”与“重组” 分步拆解(以输入 123 为例) 关键操作详解 为什么能处理中间或末尾的0? 数学本质 总结 题目描述 解题思路 代码实现 代码解析 复杂度分析 示例演示 总结 核心思想:…...
获取inode的完整路径包含挂载的路径
一、背景 在之前的博客 缺页异常导致的iowait打印出相关文件的绝对路径-CSDN博客 里的 2.2.3 一节和 关于inode,dentry结合软链接及硬链接的实验-CSDN博客 里,我们讲到了在内核里通过inode获取inode对应的绝对路径的方法。对于根目录下的文件而言&#…...
解决上传PDF、视频、音频等格式文件到FTP站点时报错“将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上”问题
一、问题描述 可以将文本文件(.txt格式),图像文件(.jpg、.png等格式)上传到我们的FTP服务器上;但是上传一些PDF文件、视频等文件时就会报错“ 将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上。 详细信息: 200 Type set to l. 227 Entering Pas…...
git push
在 git push 命令中,分支名称的顺序和含义非常重要。其基本格式如下: git push <remote> <local_branch>:<remote_branch>各部分解释 <remote>:远程仓库的名称(如 origin)。<local_branc…...
Java中的四大引用类型详解
Java中的四大引用类型详解:强引用、软引用、弱引用、虚引用 1. 引用类型概览 Java提供了四种不同强度的引用类型,用于控制对象的生命周期和垃圾回收行为: 引用类型回收时机典型应用场景是否影响GC强引用永不回收(除非断开引用&…...
MySQL慢查询日志通俗指南
🍀 前言 如果你发现自己新写或者重写的接口查询速度变慢,你怎么定位原因呢?可以用explain分析我们的SQL原生代码,又或者可以考虑使用MySQL慢查询日志。这篇文章主要讲述什么是慢查询日志以及开发中可能用到的场景。 但是&#x…...
Kafka 如何保证消息可靠性?
Kafka 保证消息可靠性主要通过以下几个机制来实现,从生产者到消费者的整个链路上都设计了相应的保障措施: 1. 生产者(Producer)端的可靠性 ✅ a. acks 参数(确认机制) acks0:生产者不等待任何…...
【嵌入式系统设计师】知识点:第2章 嵌入式系统硬件基础知识
提示:“软考通关秘籍” 专栏围绕软考展开,全面涵盖了如嵌入式系统设计师、数据库系统工程师、信息系统管理工程师等多个软考方向的知识点。从计算机体系结构、存储系统等基础知识,到程序语言概述、算法、数据库技术(包括关系数据库、非关系型数据库、SQL 语言、数据仓库等)…...
C++重载运算符的本质
C 中运算符重载的本质就是函数调用,编译器会将运算符表达式转换为对特定函数的直接调用。以下是具体原理和实现细节: 1. 运算符重载的底层实现 当重载一个运算符(如 、、<<)时,实际上是在定义一个特殊名称的函数…...
Python解决“数字插入”问题
Python解决“数字插入”问题 问题描述测试样例解题思路代码 问题描述 小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数,而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。 你…...
深入讲解:智能合约中的读写方法
前言 在探秘区块链开发:智能合约在 DApp 中的地位及与传统开发差异一文中我提到对于智能合约中所有的写入其实都算是交易。而在一个完整的智能合约代码中最大的两个组成部分就是读取和写入。 本文将为你深入探讨该两者方法之间的区别。 写方法 写方法其实就是对区块链这一…...
Java进阶之旅-day05:网络编程
引言 在当今数字化的时代,网络编程在软件开发中扮演着至关重要的角色。Java 作为一门广泛应用的编程语言,提供了强大的网络编程能力。今天,我们深入学习了 Java 网络编程的基础知识,包括基本的通信架构、网络编程三要素、IP 地址、…...
Eliet Chat开发日志:信令服务器注册与通信过程
目录 1. 架构设计:信令服务器与客户端 2. 选择技术栈 3. 实现信令服务器 4. 客户端实现 5. 测试 6. 下一步计划 日期:2025年4月5日 今天的工作重点是实现两个设备通过信令服务器注册并请求对方公网地址信息,以便能够进行点对点通信。我…...
如何设计一个本地缓存
想获取更多高质量的Java技术文章?欢迎访问Java技术小馆官网,持续更新优质内容,助力技术成长 Java技术小馆官网https://www.yuque.com/jtostring 如何设计一个本地缓存 随着系统的复杂性和数据量的增加,如何快速响应用户请求、减…...
2024版idea使用Lombok时报找不到符号
今天在springboot项目中使用Lombok的Builder注解,启动时居然报了找不到符号的错,如下图 于是开始了漫长的寻找之路,首先去settings->Plugins中看自己的Lombok插件是否启动,发现确实是如此,然后看网上的教程去加上这…...
[Android安卓移动计算]:新建项目和配置环境步骤
文章目录 一:AndroidStudio 创建项目1. New Project2. 选择:Empty Activity 二:配置和下载SDK点击SDK 配置按钮选择API32和Android 9.0(Pie)再点击Apply点击接受条款声明进行安装 安装完后点击NEXT和OK出现:…...
$R^n$平面约束下的向量列
原向量: x → \overset{\rightarrow}{x} x→ 与 x → \overset{\rightarrow}{x} x→法向相同的法向量(与 x → \overset{\rightarrow}{x} x→同向) ( x → ⋅ n → ∣ n → ∣ 2 ) n → (\frac{\overset{\rightarrow}x\cdot\overset{\righta…...
混合编程的架构
在混合使用QML和Qt Widgets的环境中,是否必须严格遵循分层架构需要根据项目规模和复杂度来决定。以下是具体的决策指南和实施建议: 一、分层架构的适用性分析 #mermaid-svg-61Mlp9MrpFOoZPAO {font-family:"trebuchet ms",verdana,arial,sans…...
联网汽车陷入网络安全危机
有人能够入侵并控制汽车这一事实本身就令人恐惧,电影中的场景变成了现实。再加上汽车中的软件会处理和存储我们的个人数据,这种恐惧达到了一个新的高度。 一旦发生安全漏洞,我们的驾驶数据、联系人、通话记录、消息甚至位置信息等信息都可能…...
基于Spark的招聘数据预测分析推荐系统
【Spark】基于Spark的招聘数据预测分析推荐系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够高效处理海量招聘数据,利用Spark的强大计算能力实现快速分析和预测。该系…...