LabVIEW实现UDP通信
目录
1、UDP通信原理
2、硬件环境部署
3、云端环境部署
4、UDP通信函数
5、程序架构
6、前面板设计
7、程序框图设计
8、测试验证
本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。
结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系统的快速开发与原型设计,助你从基础到实战,全面掌握物联网开发技能。
开源免费LabVIEW学习专栏分享:
LabVIEW仪器控制专栏:https://blog.csdn.net/m0_38106923/category_11798471.html?spm=1001.2014.3001.5482
LabVIEW开发技巧专栏:https://blog.csdn.net/m0_38106923/category_11616435.html?spm=1001.2014.3001.5482
LabVIEW和单片机(Arduino)专栏:https://blog.csdn.net/m0_38106923/category_11828609.html?spm=1001.2014.3001.5482
LabVIEW工业图像处理与机器视觉实战专栏:https://blog.csdn.net/m0_38106923/category_10963783.html?spm=1001.2014.3001.5482
LabVIEW物联网开发实战专栏:https://blog.csdn.net/m0_38106923/category_12839370.html?spm=1001.2014.3001.5482
本章节将简要阐述UDP通信的基本原理,以工业物联网平台TLINK中云端设备的数据发布设计为对象,阐明互联网环境下UDP客户端应用程序设计的基本方法,以及工业物联网平台TLINK中UDP设备的创建、通信数据帧的构造和测试。
在UDP客户端应用程序设计框架的基础上,将提供数据采集计算机与物联网云端设备之间通信程序实现的完整步骤以及程序运行结果的测试。
项目资源下载:https://download.csdn.net/download/m0_38106923/87404748
1、UDP通信原理
UDP(用户数据报协议)是个简单的数据报传输层协议,用来处理网络中的数据包,它是一个无连接的协议。UDP不保证传输的可靠性,只是把数据报从应用程序传到IP层,但不能保证它们一定能到达目的地。因为UDP在传输数据报前不需要建立连接,也没有超时重发等机制,所以传输速度较快。
UDP通信有以下特点:
- 每个分组都有完整的目的地址;
- 发送数据前不需要建立连接;
- 不检查数据包的顺序,不能保证分组的先后顺序;
- 不进行分组出错的恢复和重传;
- 不保证数据传输的可靠性。
在网络质量差的环境下,UDP数据包丢失会比较严重。但由于UDP的特性(非连接型协议,资源消耗小、处理速度快),在传输音频、视频和普通数据时常用UDP,即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
使用UDP网络发送数据时要注意:必须在同一个局域网中,且要在一个网段,跨网不能直接通信;互相ping通后才能通信。进行UDP通信时,要明确发送端(有时也叫客户端)和接收端(有时也叫服务器)。基于UDP编写通信软件时,程序设计的基本流程如下图所示。
UDP通信有单播、广播、组播三种模式:
- 单播用于两个主机之间的端对端通信,即一对一;
- 广播用于一个主机与整个局域网上所有主机的通信,即一对所有。广播在Internet宽带网上传输是被禁止的,否则容易引发广播风暴。主机发送广播消息时,需要指定目的IP地址(255.255.255.255)和接收者的端口号;
- 组播(多播)用于一组特定主机的通信,而不是整个局域网上的所有主机,即一对一组。在多播系统中,有一个源点、一组终点,这是一对多的关系。在这种通信中,源地址是一个单播地址,而目的地址是一个组地址。
在IPv4中,组地址是一个D类IP地址,范围从224.0.0.0到239.255.255.255,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址三类。
单播和广播是两个极端,要么实现一个主机的通信,要么实现整个局域网上的主机的通信。
实际情况下,经常需要实现一组特定主机的通信,而不是整个局域网上的所有主机的通信,这就是组播的用途。
2、硬件环境部署
基于UDP的通信程序设计,得保证电脑能连上网(不管是有线还是无线,方式不限)。因为路由器的限制,普通的UDP通信程序只能在局域网里的电脑之间传数据。
但物联网经常要跨大范围、多平台地通信。这可以通过物联网平台来实现——数据采集系统把数据上传到物联网平台,然后其他设备从平台那儿获取数据,这样就能实现物联网,达到数据交换和共享的目的。
只要电脑能上网,还能ping通远程物联网服务器,就可以写基于UDP的数据通信程序了。下图展示的是用路由器连上互联网,实现电脑和TLINK物联网云平台的连接。
这种组网方式靠物联网云平台,能让不同网段的设备之间传数据。在这个例子中,电脑通过家用或办公室的路由器连上互联网,就能访问TLINK物联网平台了。
3、云端环境部署
UDP通信得让客户端和服务器两部分程序都做好,不过为了让系统开发简单点,这里用物联网开发平台来搞UDP服务器的事儿,应用系统开发就可以主要关注UDP客户端啦,这样就能实现一种基于系统集成思想的物联网应用快速、高效开发。在这个例子里面,我们用工业物联网平台TLINK来创建一个UDP的虚拟设备,相关信息看下面的图哦。
这时候,TLINK物联网开发平台就像是个功能齐全的服务器。通常,开发物联网应用的时候,你只需要关注怎么从客户端收集数据,然后连接到TLINK物联网平台,把数据发布上去就行了。
下面是这个向TLINK物联网云平台上传测量数据的UDP通信程序具体能干点啥:
- 用随机数生成的办法,模拟定时采集两路数据。
- 能把采集到的数据打包成TLINK自定义数据协议对应的包。
- 在本地,能用多路信号波形图表展示采集到的数据。
- 能分别显示系统当前时间、数据采集时间,还有最新采集的两路数据值。
- 还能用UDP通信技术把数据传到TLINK物联网平台,实现给指定设备更新相关数据。
4、UDP通信函数
在LabVIEW里,你要找UDP串行通信的节点,就在“函数→数据通信→协议→UDP”里头,看下图就知道啦。
UDP通信的主要函数节点和VI以及它们的功能都在下表里。
LabVIEW里设计UDP通信程序挺简单的,拿数据发送来说,最少用“打开UDP”“写入UDP数据”“关闭UDP”这3个函数节点,再加上While循环结构,就能连续发送了,看下图。
在实际应用里,你可以在轮询设计模式、事件响应设计模式、状态机设计模式等等里面灵活用这3个节点,实现UDP数据发送。接收UDP数据也差不多,最少也是用那3个节点和While循环,不过大多数情况下,UDP通信的发送和接收数据是并行工作的。
一个典型的UDP并行收发程序框图如下图所示。
5、程序架构
程序将模拟人工控制的数据采集,并把数据上传到云端。当用户点击“开始数据采集”按钮时,程序会按照用户设定的时间间隔不断采集和上传数据。
用户再次点击按钮,程序就会暂停采集和上传,然后再次循环。为了简化程序设计,我们采用了轮询设计模式——在While循环结构中,程序使用条件结构检测前面板上的布尔类控件操作状态和“已用时间”节点状态,并根据检测结果进行处理。
主要检测和处理的状态有:
- 数据采集按钮操作状态检测:按钮在“开始数据采集”和“暂停数据采集”之间切换。当按钮状态为“真”时,采集数据并上传云端;否则不处理。
- “已用时间”节点状态检测:检查指定目标时间是否已到。如果已到,开始依次进行数据采集和云端上传。
- “停止”按钮操作状态检测:检测点击按钮是否导致其值发生改变。如果满足条件,则退出程序。
为了让程序的人机交互效果更好,我们在循环事件处理结构的基础上,添加了顺序结构,将程序分为两个顺序帧。
- 第一个帧是程序初始化帧,用于完成程序运行前各类控件的初始化;
- 第二个帧是主程序帧,即前面创建的循环事件处理程序结构,用于实时检测程序中的各类状态,并根据检测结果进行处理。
6、前面板设计
按照以下步骤来完成前面板的控件设置:
步骤1:要设置TLINK平台中UDP服务器的IP地址,就得添加一个字符串类控件,叫“字符串控件”(控件→新式→字符串与路径→字符串控件),然后把标签设为“服务器”。
步骤2:要设置TLINK平台中UDP服务器对应的端口,就得添加一个数值类控件,叫“数值输入控件”(控件→新式→数值→数值输入控件),然后把标签设为“远程端口”,数据类型设为U16。
步骤3:要设置TLINK平台中本机对应的端口,就得添加一个数值类控件,叫“数值输入控件”(控件→新式→数值→数值输入控件),然后把标签设为“本地端口”,数据类型设为U16。
步骤4:要触发数据采集事件,就得添加一个布尔类控件,叫“确定按钮”(控件→新式→布尔→确定按钮),然后把标签设为“采集按钮”,按钮显示文本设为“启动数据采集”。
步骤5:要确定用户结束程序操作,就得添加一个布尔类控件,叫“停止按钮”(控件→新式→布尔→停止按钮),按钮标签和显示文本保持默认值。
步骤6:要显示2路数据采集波形,就得添加一个图形类控件,叫“波形图表”(控件→新式→图形→波形图表)。
步骤7:要显示系统当前时间,就得添加一个字符串类控件,叫“字符串显示控件”(控件→新式→字符串与路径→字符串显示控件),然后把标签设为“系统时间”。
步骤8:要显示每一次数据采集时间,就得添加一个字符串类控件,叫“字符串显示控件”(控件→新式→字符串与路径→字符串显示控件),然后把标签设为“采集时间”。
步骤9:要显示当前采集的2路数据取值,就得添加一个字符串类控件,叫“字符串显示控件”(控件→新式→字符串与路径→字符串显示控件),然后把标签设为“当前数据”。
接下来,要调整各个控件的大小和位置,让操作界面看起来更和谐、友好。最后完成的程序前面板设计结果如下图所示。
7、程序框图设计
步骤1:程序的整体结构分为两帧,第一帧是初始化设置,第二帧是实现主要功能。
创建一个两帧的顺序结构,将第一帧的“子程序框图标签”设为“初始化”,在第一帧中调用“打开UDP”(函数→数据通信→协议→UDP→打开UDP)节点,设置连接参数,实现本地UDP端口的创建和打开;通过局部变量赋值、属性节点调用等方式,实现程序运行初始状态下相关控件的初始化赋值。最后,完成的初始化帧程序子框图设计结果如下图所示。
第二步:在顺序结构里,把第二帧的“子程序框图标签”改成“主程序”,这样能让程序框图更好读懂。
主程序就是“While循环结构+条件结构+移位寄存器”的轮询方式,用来检查程序界面里“数据采集”按钮的动作状态,参照下图。
步骤3:在While循环里,把“采集按钮”控件与条件结构连起来,以便在程序轮询状态下判断是否开始采集数据。
调用“获取日期/时间字符串”节点(函数→编程→定时→获取日期/时间字符串),把“需要秒?”端口设为真,然后调用“连接字符串”节点,把“获取日期/时间字符串”节点的日期和时间字符串用空格连接起来,形成完整的字符串。最后,把结果放到“系统时间”控件上,这样就能实时更新显示了,如下图所示。
步骤4:在“采集按钮”连接的条件结构里,当满足“真”(点击按钮,开始采集)时,用属性节点把“采集按钮”的显示文本改成“停止数据采集”,让一个按钮具备两种功能的操作提示。
为了让程序每隔3秒采集一次数据(采样速率小于1Hz,物联网开发平台会禁用访问设备),我们添加一个“已用时间”节点(函数→编程→定时→已用时间),设置“目标时间”为3秒,并勾选“超过目标时间后自动重置”。
它的输出端口“结束”连接条件结构(函数→编程→结构→条件结构),用来判断目标时间是否到达,从而实现用户点击“启动数据采集”按钮后,程序定时执行后续工作的结构,如下图所示。
步骤5:当“已用时间”节点满足条件结构为“真”(3秒间隔时间到,开始一次数据采集)时,在分支子框图中,我们通过生成随机数来模拟数据采集。
将采集到的两组数据打包成符合TLINK物联网平台创建UDP设备用户协议的数据帧。首先,根据TLINK平台的要求,我们调用“打开UDP”节点(函数→数据通信→协议→UDP→打开UDP),然后按照TLINK定义的数据帧格式,以设备序列号作为前缀,将采集的数值类型转换为字符串类型,接着调用“连接字符串”节点(函数→编程→字符串→连接字符串),构建发送数据帧。
最后,调用“写入UDP数据”节点(函数→数据通信→协议→UDP→写入UDP数据),实现本地采集数据上传物联网平台的功能。
同时,我们还需要调用“捆绑”节点(函数→编程→簇、类与变体→捆绑),将采集的数据封装为簇数据类型,并通过波形图表进行显示。相应的程序子框图如下所示。
步骤6:在“采集按钮”控件连接的假条件结构分支里,创建一个“采集按钮”控件属性节点,将其设置为写入模式,并赋值为“启动数据采集”(这样就可以再次点击按钮开始采集了)。
然后,直接连接左右两边的UDP资源引用和错误信息传递,相关的程序子框图如下所示。
步骤7:为了实现应用程序能比较“优雅”地退出,While循环结构之外,还需完成以下操作。
调用节点“关闭UDP”(函数→数据通信→协议→UDP→关闭UDP),实现UDP通信中资源引用的释放。
调用节点“清除错误”(函数→编程→对话框与用户界面→清除错误),采取简单、直接的方式清除程序执行过程中出现的错误。
至此,完整的基于UDP通信技术的物联网平台采集数据上传程序全部完成,对应的完整程序框图如下图所示。
8、测试验证
点击工具栏上的“运行”按钮,测试程序功能。
点击“启动数据采集”按钮,你会发现每3秒钟就会采集一次数据,波形图表中会显示两路数据的波形。系统时间、采集时间、当前数据都能正确显示,结构如下图所示。
此时,进入TLINK物联网平台用户账号对应的监控中心,你会发现本地采集的数据已经按预期上传到云端,如下图所示。
物联网平台创建UDP设备实时数据显示结果与本地采集数据完全一致,这说明在物联网应用中,传统的互联网通信技术中的UDP通信仍然有其地位。使用LabVIEW可以非常轻松地建立与物联网云平台的UDP连接,实现本地采集数据的物联网云平台上传。
项目资源下载:https://download.csdn.net/download/m0_38106923/87404748
相关文章:
LabVIEW实现UDP通信
目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合…...
hive的存储格式
1) 四种存储格式 hive的存储格式分为两大类:一类纯文本文件,一类是二进制文件存储。 Hive支持的存储数据的格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET 第一类:纯文本文件存储 textfile: 纯文本文件存储格式…...
设置Mysql5.6允许外网访问
设置mysql用户支持外网访问步骤: 需要使用root权限登录mysql,更新mysql.user表,设置指定用户的Host字段为%,默认一般为127.0.0.1或者localhost。 1.登录数据库 1 mysql -u root -p 输入密码 1 mysql> use mysql; 2.查询hos…...
【智能制造-44】装配仿真
装配仿真包含以下功能模块: 零件建模与导入模块 功能描述: 能够创建简单的几何零件,如立方体、圆柱体、球体等基本形状。这对于一些标准件或者形状规则的零件来说,可以直接在装配仿真软件中生成,方便快捷。 支持多种…...
如何借助AI生成PPT,让创作轻松又高效
PPT是现代职场中不可或缺的表达工具,但同时也可能是令人抓狂的时间杀手。几页幻灯片的制作,常常需要花费数小时调整字体、配色与排版。AI的飞速发展为我们带来了革新——AI生成PPT的技术不仅让制作流程大大简化,还重新定义了效率与创意的关系…...
【工具变量】城市供应链创新试点数据(2007-2023年)
一、测算方式:参考C刊《经济管理》沈坤荣和乔刚老师(2024)的做法,使用“供应链创新与应用试点”的政策虚拟变量(TreatPost)表征。若样本城市为试点城市,则赋值为 1,否则为 0…...
线程的生命周期
计时等待(Timed Waiting)状态:这是等待状态的一种特殊情况,当线程调用带有超时参数的等待方法(如Thread.sleep(long millis)、Object.wait(long timeout)等)时会进入计时等待状态。例如,Thread.…...
Python入门(18)--实战项目
机器学习实战项目指南 🤖 项目概览 🌐 本项目是一个综合性的机器学习入门实战指南,通过实际案例展示机器学习项目的完整生命周期,包括数据处理、模型训练、评估和部署等关键环节。 1. 系统架构 🏗️ 1.1 核心组件 …...
DRM(数字权限管理技术)防截屏录屏----视频转hls流加密、web解密播放
提示:视频转hls流加密、web解密播放 需求:研究视频截屏时,播放器变黑,所以先研究的视频转hls流加密 文章目录 [TOC](文章目录) 前言一、工具ffmpeg、openssl二、后端nodeexpress三、web播放四、文档总结 前言 HLS流媒体协议&a…...
在linux上部署Tomcat方法
上传jdk,配置运行环境 解压jdk安装包 将jdk文件夹移动到/usr/local/jdk目录下 配置java环境变量vim /etc/profile 使环境变量生效,并且查看是否配置成功 安装tomcat,上传tomcat软件包 解压tomcat软件包 将tomcat解压文件移动到/usr/local/tomcat/下 启动…...
Git 使用问题与解决方案
Git 使用问题与解决方案 目录 常见错误及原因分析检查当前使用 HTTPS 或 SSH如何切换远程仓库到 SSHSSH 密钥的配置与验证错误解决步骤总结与参考 1. 常见错误及原因分析 错误提示 fatal: unable to access https://github.com/username/repository.git/: Failed to connect…...
LeetCode 热题 100_最大子数组和(13_53)(贪心算法 ||动态规划)
LeetCode 热题 100_最大子数组和(13_53) 题目描述:输入输出样例:题解:解题思路:代码实现(思路二(贪心算法 ||动态规划)): 题目描述: …...
Z2400023基于Java+Servlet+jsp+mysql的酒店管理系统的设计与实现 源码 调试 文档
酒店管理系统的设计与实现 1.摘要2.主要功能3. 项目技术栈运行环境 4.系统界面截图5.源码获取 1.摘要 本文介绍了一个基于Java的酒店管理系统,该系统采用Servlet、JSP、JDBC以及c3p0等技术构建,为酒店提供了一个全面的管理平台。该系统不仅适合酒店进行…...
T3 TensorFlow入门实战——天气识别
🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同学啊 | 接輔導、項目定制 一、前期准备 1. 导入数据 # Import the required libraries import numpy as np import os,PIL,pathlib import matplotlib.pyplot as …...
vue3 多种方式接受props,定义ref,reactive
定义props 1 第一种 interface AddType { dialogStudyVisible: boolean; } const props defineProps<AddType>(); 第二种 // const props defineProps({ // dialogStudyVisible:{ // type:Boolean, // default:false // } // }) 第三种 // const …...
15:00面试,15:06就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到9月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
vue3 数字滚动插件vue3-count-to
安装 npm i vue3-count-to -S 引入 import { CountTo } from vue3-count-to 使用 <countTo :startVal"0" :endVal"57.63" :decimals"0" :duration"3000"></countTo> 所有配置...
Android 手写签名板
文章目录 Android 手写签名板概述效果代码实现源码下载 Android 手写签名板 概述 手写签名板功能,支持图片保存、支持去除空白区域。 效果 生成图片效果: 代码实现 定义属性: <declare-styleable name"SignatureView">&…...
Java基础夯实——2.9 多线程如何共享数据
在 Java 多线程编程中,共享数据通过以下几种方式实现: 1. 使用共享对象 多个线程可以通过引用同一个对象来实现数据共享。例如: class SharedData {private int count;public synchronized void increment() {count;}public synchronized …...
京准电钟:NTP网络校时服务器从入门到精准
京准电钟:NTP网络校时服务器从入门到精准 京准电钟:NTP网络校时服务器从入门到精准 1.前言 由计算机网络系统组成的分布式系统,若想协调一致进行:IT行业的“整点开拍”、“秒杀”、“Leader选举”,通信行业的“同步…...
【C++习题】15.滑动窗口_串联所有单词的子串
文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: 30. 串联所有单词的子串 题目描述: 解法 滑动窗口哈希表 这题和第14题不同的是: 哈希表不同:hash<string,int>left与right指…...
【好玩的经典游戏】Docker环境下部署贪吃蛇网页小游戏(二)
【好玩的经典游戏】Docker环境下部署贪吃蛇网页小游戏(二) 一、贪吃蛇小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、下载容器镜像五、部…...
《Python Web 抓取实战:豆瓣电影 Top 250 数据抓取与分析》
引言 在信息爆炸的时代,掌握数据获取的能力显得尤为重要。通过数据抓取,我们可以从互联网上获取大量有价值的信息,并进行深入分析。本文将介绍如何使用 Python 进行 Web 抓取,以豆瓣电影 Top 250 为例,展示数据抓取的…...
Qt-系统相关(2)多线程网络
Qt多线程 在 Qt 中,多线程的处理⼀般是通过 QThread类 来实现。 QThread 代表⼀个在应⽤程序中可以独⽴控制的线程,也可以和进程中的其他线程共享数据。 QThread 对象管理程序中的⼀个控制线程。 QThread 常⽤ API: 使用线程 关于创建线程…...
代码随想录算法训练营第五十九天|Day59 图论
Bellman_ford 算法精讲 https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I.html 思路 #include <stdio.h> #include <stdlib.h> #include <limits.h>#define MAXM 10000 // 假设最大边数为1…...
SpringBoot集成ESAPI
官网地址:https://github.com/ESAPI/esapi-java-legacy 一、POM依赖 <dependency><groupId>org.owasp.esapi</groupId><artifactId>esapi</artifactId><version>2.6.0.0</version> <!-- Preferably the latest ver…...
Git 进程占用报错-解决方案
背景 大仓库,由于开发者分支较多,我们在使用 git pull 或 git push 等命令时(与远端仓库交互的命令),不知之前配置了什么,我的电脑会必现以下报错(有非常长一大串报错-不同分支的git进程占用报…...
python怎么设置静态变量
众所周知,Python语言并不支持静态变量,比如下面这样一个应用场景: void foo() {static int count 0;count ; } 在Python中无法自然实现这个功能。换个角度来看这个问题,函数中的静态变量其实可以看做是函数的一个内部变量&#x…...
【H2O2|全栈】Node.js(1)
目录 前言 开篇语 准备工作 ES6导入导出 导入 有名导出 匿名导出 Node概念 Node导入导出 导入 有名导出 匿名导出 Node常用模块 path模块 和路径有关的全局变量 常见方法 导入方法 fs模块 常见方法 导入方法 结束语 前言 开篇语 本系列博客主要分享Java…...
SJYP 24冬季系列 FROZEN CHARISMA发布
近日,女装品牌SJYP 2024年冬季系列——FROZEN CHARISMA已正式发布,展现了更加干练的法式风格。此次新品发布不仅延续了SJYP一贯的强烈设计风格和个性时尚,更融入了法式风情的干练元素,为消费者带来了一场视觉与穿着的双重盛宴。 …...
嵌入式硬件实战基础篇(四)多路直流稳压电源
设计一个多路直流稳压电源 要求设计制作一个多路输出直流稳压电源,可将220 V / 5 0HZ交流电转换为5路直流稳压输出。具体要求: 输出直流电压 12V, 5V;和一路输出3- 15V连续可调直流稳压电源: 输出电流Iom500mA; 稳压系数 Sr≤0.05;...
力扣_876. 链表的中间结点
力扣_876. 链表的中间结点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为…...
shell脚本命令(一)
shell脚本命令(一) 一、Shell 基础知识 Shell的基本概念 定义: Shell 是操作系统中的命令解释器,位于用户与操作系统内核之间。它接收并解释用户输入的命令,将任务传递给操作系统内核执行,然后将执行结果…...
一文理解多模态大语言模型——上
作者:Sebastian Raschka 博士, 翻译:张晶,Linux Fundation APAC Open Source Evangelist 编者按:本文并不是逐字逐句翻译,而是以更有利于中文读者理解的目标,做了删减、重构和意译,…...
[代码随想录Day24打卡] 93.复原IP地址 78.子集 90.子集II
93.复原IP地址 一个合法的IP地址是什么样的: 有3个’.分割得到4个数,每个数第一个数不能是0,不能含有非法字符,不能大于255。 这个是否属于合法IP相当于一个分割问题,把一串字符串分割成4部分,分别判断每…...
去哪儿大数据面试题及参考答案
Hadoop 工作原理是什么? Hadoop 是一个开源的分布式计算框架,主要由 HDFS(Hadoop 分布式文件系统)和 MapReduce 计算模型两部分组成 。 HDFS 工作原理 HDFS 采用主从架构,有一个 NameNode 和多个 DataNode。NameNode 负责管理文件系统的命名空间,维护文件和目录的元数据信…...
controller中的参数注解@Param @RequestParam和@RequestBody的不同
现在controller中有个方法:(LoginUserRequest是一个用户类对象) PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…...
排序算法思维导图
冒泡排序 def bubble_sort(alist):j 0while j < len(alist):i 0while i < len(alist) - 1:if alist[i] > alist[i1]:alist[i], alist[i1] alist[i1], alist[i]i 1j 1li [34,556,235,7,56,45,63,35,23,4,875] bubble_sort(li) print(li) 选择排序 def select_s…...
ZYNQ试用于哪些场景
ZYNQ系列SoC(System on Chip)由于其独特的处理器与FPGA(可编程逻辑)集成设计,非常适合应用于多种需要高性能、灵活性和低功耗的场景。 以下是一些ZYNQ特别适用的场景: 嵌入式系统:ZYNQ的ARM处理…...
【03】Selenium+Python 八种定位元素方法
操作元素,需要先查找定位到对应的元素。 查找单个元素:driver.find_element() 返回是一个web element 对象 查找多个元素:driver.find_elements() 返回是一个list对象 By 是 Selenium 中一个非常重要的类,用于定位网页元素。 使…...
Java 自动资源管理(Auto Resource Management)详解
Java 自动资源管理(Auto Resource Management)详解 在Java编程中,资源的正确管理是开发过程中一个非常重要的环节。如果资源(如文件、数据库连接、网络连接等)未被正确释放,可能会导致资源泄漏,…...
IT运维专家给年轻人一些职业上的建议
运维工作在现代企业中是非常重要的一环,保证系统的稳定性、可用性以及安全性对企业的正常运营至关重要。以下是我给年轻人的一些职业发展建议,希望能够帮助你们在运维领域找到方向并取得成功。 1. 夯实基础,扎实技术功底 精通操作系统与网络:运维工作需要深入理解操作系统…...
视图查询中投影裁剪规则的原理和解析 | OceanBase 查询优化
背景 在SQL查询中使用视图查询时,执行中可能会产生的较多的中间结果集。为了优化这类查询的执行,OceanBase 引入了投影裁剪规则。能够识别出父查询中未实际使用的列,并将这些列从视图查询的select列表中剔除,进而提升整体查询的性…...
利用Nginx在服务器上部署你的第一个静态页面
文章目录 序言Nginx常用功能1. 反向代理2.负载均衡轮询加权轮询IP_Hash Nginx配置文件结构安装并部署你的静态网页1. 安装(懒人直接看3)2.查看配置文件3.编写或放入自己的静态页面文件 序言 首先我们先来认识一下什么是Nginx源码 官网 Nginx (engine x) 是一个高性能的HTTP和…...
【拥抱AI】RAG如何通过分析反馈、识别问题来提高命中率
分析用户反馈并识别问题是持续优化RAG系统的重要步骤。这不仅可以帮助你了解系统的当前表现,还可以指导未来的改进方向。直接进入正题, 1. 收集用户反馈 方法 问卷调查:设计问卷,让用户填写他们对系统输出的满意度、易用性等方…...
内核模块签名验证
安装内核模块报错 今天在调试地平线 J6 板子时,安装自己编译的内核模块报错 roothobot:/tmp# insmod hobot_eth_j6.ko insmod: ERROR: could not insert module hobot_eth_j6.ko: Key was rejected by service前两天刚在 x86 电脑上解决过这个问题,参…...
C++模板(入门)
文章目录 泛型编程函数模板函数模板的概念函数模板格式函数模板的原理函数模板的实例化隐式实例化显示实例化模板参数的匹配 类模板为什么有类模板类模板的定义格式类模板的实例化Stack模板类的简单实现(不涉及深拷贝) 模板的注意问题模板不支持分离编译…...
如何在Python中进行数学建模?
数学建模是数据科学中使用的强大工具,通过数学方程和算法来表示真实世界的系统和现象。Python拥有丰富的库生态系统,为开发和实现数学模型提供了一个很好的平台。本文将指导您完成Python中的数学建模过程,重点关注数据科学中的应用。 数学建…...
C++优质学习资源汇总
1 学懂C语言-C核心编程精讲 学懂C语言-C核心编程精讲 该课程基本把面试所需要的C常用的网络等教程均进行讲解,满足基本需求...
心情追忆:构建支付模块的五个基本接口设计
之前,我独自一人开发了一个名为“心情追忆”的小程序,旨在帮助用户记录日常的心情变化及重要时刻。我从项目的构思、设计、前端(小程序)开发、后端搭建到最终部署。经过一个月的努力,通过群聊分享等方式,用…...