容器,网络基础
小结:
1、利用网桥和虚拟网卡
2、利用Veth Pair虚拟设备,一个网卡可以直接出现在另外一个网卡中
一个Linux容器能看见的“网络栈”,实际上是被隔离在它自己的Network Namespace当中的
“网络栈”,就包括了:网卡(Network Interface)、回环设备(Loopback Device)、路由表(Routing Table)和iptables规则。
在Linux中,能够起到虚拟交换机作用的网络设备,是网桥(Bridge)。它是一个工作在数据链路层
(Data Link)的设备,主要功能是根据MAC地址学习来将数据包转发到网桥的不同端口(Port)上。
Docker项目会默认在宿主机上创建一个名叫docker0的网桥,凡是连接在docker0网桥上的容器,就可以通过它来进行通信。
Veth Pair的虚拟设备了。
Veth Pair设备的特点是:它被创建出来后,总是以两张虚拟网卡(Veth Peer)
的形式成对出现的。并且,从其中一个“网卡”发出的数据包,可以直接出现在与它对应的另一张“网卡”上,哪怕这两个“网卡”在不同的Network Namespace里。
一张网卡是在容器中,另外一张网卡是在宿主机内。\
通过ifconfig命令的输出,你可以看到,nginx-1容器对应的Veth Pair设备,在宿主机上是一张虚拟网卡。它的名字叫作veth9c02e56。并且,通过brctl show的输出,你可以看到这张网卡被“插”在了docker0上。
被限制在Network Namespace里的容器进程,实际上是通过Veth Pair设备+宿主机网桥的方式,实现了跟同其他容器的数据交换
当你遇到容器连不通“外网”的时候,你都应该先试试docker0网桥能不能ping通,然后查看一下跟docker0和Veth Pair设备相关的iptables规则是不是有异常,往往就能够找到问题的答案了
网卡
学习网卡(网络接口卡,NIC,Network Interface Card)的知识可以帮助理解计算机网络的底层通信机制。以下是网卡学习的核心内容:
1. 什么是网卡
- 定义: 网卡是计算机与网络之间的接口硬件,用于实现网络通信。网卡负责接收和发送数据,并处理数据的传输协议。
- 硬件层面:
- 现代计算机的网卡可能是独立的硬件(PCIe 插卡式网卡)或集成在主板上。
- 有线网卡使用 Ethernet(以太网)接口,无线网卡使用 Wi-Fi 模块。
2. 网卡的关键功能
-
数据封装与解封装:
- 将主机发送的数据封装成网络帧(Ethernet Frame),包括目标地址、源地址和数据。
- 接收来自网络的数据帧,并将其解封装给上层协议(如 IP 层)。
-
MAC 地址管理:
- 每块网卡都有一个全球唯一的 MAC 地址(Media Access Control Address),用于标识设备。
- MAC 地址由厂商分配,通常是不可修改的(部分设备支持伪装)。
-
数据传输:
- 处理以太网协议(Ethernet Protocol),发送和接收数据帧。
- 负责传输速率控制(如 10Mbps、100Mbps、1Gbps、10Gbps 等)。
-
硬件中断:
- 当有数据帧到达时,网卡通过硬件中断通知操作系统,提高响应速度。
-
支持多协议:
- 支持不同的网络协议,如 IPv4、IPv6、TCP、UDP 等。
3. 网卡的组成
-
控制器:
- 网卡的大脑,用于管理数据传输、封装协议和通信。
-
PHY(物理层芯片):
- 负责物理信号的收发和编码/解码,连接物理介质(如电缆)。
-
内存和缓冲区:
- 用于缓存网络数据,避免数据丢失。
-
接口:
- 常见的有以太网接口(RJ45),无线网卡通过天线实现无线信号传输。
-
传输介质:
- 有线网卡使用网线(如双绞线、光纤),无线网卡通过无线信号(Wi-Fi)。
4. 网卡的分类
-
按连接方式分类:
- 有线网卡:通过网线连接(Ethernet)。
- 无线网卡:通过 Wi-Fi 或其他无线技术连接。
-
按速度分类:
- 百兆网卡(10/100 Mbps)。
- 千兆网卡(1Gbps)。
- 万兆网卡(10Gbps 及以上)。
-
按接口类型分类:
- PCIe 网卡:插入主板上的 PCIe 插槽。
- USB 网卡:通过 USB 接口扩展网络功能。
- 内嵌网卡:集成在主板上的网卡模块。
5. 网卡驱动
-
驱动的作用:
- 网卡的硬件功能需要操作系统的驱动程序支持,驱动负责与操作系统和网卡硬件通信。
-
驱动安装:
- 大多数现代操作系统自带主流网卡的驱动。
- 对于特殊网卡(如高性能或定制网卡),可能需要手动安装厂商提供的驱动程序。
6. 网卡的高级功能
-
VLAN(虚拟局域网)支持:
- 通过 802.1Q 协议实现虚拟网络隔离。
-
硬件卸载:
- 例如 TCP/IP 卸载引擎(TOE),将部分数据处理任务从 CPU 转移到网卡,提高性能。
-
多队列支持:
- 高端网卡支持多队列,用于多核 CPU 并行处理网络数据。
-
Wake-on-LAN(WOL):
- 允许通过网络唤醒计算机。
-
QoS(服务质量):
- 实现网络带宽的优先级管理,保证关键流量的优先传输。
-
SR-IOV(单根 I/O 虚拟化):
- 用于虚拟化环境,为多个虚拟机分配独立的网卡虚拟功能。
7. 网卡性能优化
-
选择合适的网卡:
- 根据网络需求选择千兆或万兆网卡。
- 在高性能场景下使用支持硬件卸载的网卡。
-
更新驱动程序:
- 确保网卡驱动程序是最新版本,以获得最佳性能和兼容性。
-
调整 MTU(最大传输单元):
- 在支持的情况下,调整 MTU 大小以优化网络吞吐量。
-
启用多队列和中断平衡:
- 在多核 CPU 系统上,合理配置中断和队列,提高网络性能。
8. 常用学习工具和命令
-
命令行工具:
- Linux:
ifconfig
:查看和配置网卡。ip addr
:查询网卡 IP 和状态。ethtool
:查询和修改网卡设置。
- Windows:
ipconfig
:查看网络配置。netsh
:配置网络适配器。
- Linux:
-
测试工具:
- ping: 测试网络连通性。
- iperf: 测试网络带宽。
- tcpdump: 抓包工具,查看网卡发送和接收的数据包。
9. 学习方向
- 基础知识: 理解网卡的原理、组成和工作机制。
- 操作系统集成: 学习如何配置和管理网卡(如 Linux、Windows 系统)。
- 网络协议: 深入学习网卡支持的网络协议(如以太网、IP、TCP/UDP)。
- 硬件性能优化: 学习网卡性能优化技巧,包括硬件卸载、多队列等。
- 网络抓包和分析: 通过抓包工具(如 Wireshark)分析网卡的数据传输行为。
10. 学习资源
-
书籍:
- 《计算机网络:自顶向下方法》—— 深入理解网络原理和通信协议。
- 《Linux 网络编程》—— 学习 Linux 下的网卡和网络开发。
-
在线课程:
- Coursera 或 Udemy 上的计算机网络课程。
-
实践项目:
- 使用 Raspberry Pi 配置网卡和网络。
- 通过抓包分析网卡数据流量。
通过学习网卡相关知识,可以更好地理解计算机网络的底层运作,同时提升对网络调试和优化的能力。
网桥
它是一个工作在数据链路层(Data Link)的设备,主要功能是根据MAC地址学习来将数据包转发到网桥的不同端口(Port)上。
网桥(Bridge)学习指南
网桥(Bridge)是一种重要的网络设备或功能,用于连接多个网络段,实现局域网(LAN)的扩展和数据转发。理解网桥的工作原理和应用场景,有助于深入了解局域网的组网和通信机制。
1. 什么是网桥
- 定义: 网桥是工作在数据链路层(OSI 第 2 层)的网络设备或功能,负责将两个或多个网络段连接起来,并根据 MAC 地址转发数据帧。
- 作用:
- 在同一个广播域内扩展网络规模。
- 隔离冲突域,减少冲突,提高网络性能。
- 设备形式:
- 硬件设备: 独立的网桥设备(传统)。
- 软件网桥: 现代操作系统(如 Linux)中实现的虚拟网桥功能。
2. 网桥的关键功能
-
数据帧转发:
- 根据目标 MAC 地址,将数据帧转发到正确的网段,避免广播到所有网段。
-
学习 MAC 地址:
- 网桥通过监听数据帧中的源 MAC 地址,动态学习每个设备的 MAC 地址和其所在网段的对应关系(建立 MAC 地址表)。
-
隔离冲突域:
- 不同网段的冲突域通过网桥隔离,减少网络中数据碰撞的概率。
-
广播转发:
- 网桥会转发广播和组播数据帧到所有连接的网段。
3. 网桥的工作原理
网桥的核心工作流程如下:
- 初始化: 网桥启动后,其 MAC 地址表是空的。
- 数据帧到达:
- 数据帧到达网桥时,网桥记录数据帧的源 MAC 地址和对应的端口。
- 查看目标 MAC 地址:
- 如果目标地址在 MAC 地址表中:将数据帧转发到对应端口。
- 如果目标地址不在表中:将数据帧广播到所有端口(未知单播)。
- 学习和更新:
- 随着网络通信的进行,网桥不断学习新的 MAC 地址,并动态更新 MAC 地址表。
- 数据帧转发:
- 网桥根据 MAC 地址表高效转发数据帧。
4. 网桥与交换机的关系
- 网桥是最早期的二层设备,功能简单,通常只有少量端口。
- 交换机(Switch) 是网桥的升级版本:
- 更高的端口密度。
- 更高的数据转发速度。
- 支持 VLAN 等高级功能。
尽管交换机功能更强大,但两者在二层转发的原理上是一致的,交换机也被称为多端口网桥。
5. 网桥的分类
-
本地网桥:
- 连接同一局域网中的不同网段。
-
远程网桥:
- 通过广域网(WAN)连接远程局域网。
-
虚拟网桥:
- 软件定义的网桥,常用于虚拟化环境(如 Linux 的
bridge-utils
或 Open vSwitch)。 - 用于连接虚拟机、容器和物理网络。
- 软件定义的网桥,常用于虚拟化环境(如 Linux 的
6. 网桥的应用场景
-
局域网扩展:
- 将多个网段连接起来,扩大网络规模。
-
虚拟化环境:
- 在虚拟机或容器环境中,虚拟网桥用于将虚拟机/容器连接到物理网络。
- 例如:Linux 中的
brctl
工具或 Docker 网络驱动中的桥接模式。
-
工业控制网络:
- 在分布式工业控制网络中,网桥用于连接不同的工业设备网段。
-
无线接入点(AP)桥接模式:
- 无线路由器或 AP 可以工作在桥接模式,将无线网络与有线网络桥接起来。
7. Linux 中的网桥
Linux 提供了强大的虚拟网桥功能,主要用于虚拟化、容器化场景:
-
创建网桥:
- 使用
bridge-utils
工具:sudo apt install bridge-utils sudo brctl addbr br0
- 将网卡加入网桥:
sudo brctl addif br0 eth0
- 使用
-
查看网桥状态:
brctl show
-
网络配置文件:
- 配置网桥网络的
/etc/network/interfaces
(基于 Debian/Ubuntu 系统):auto br0 iface br0 inet staticaddress 192.168.1.2netmask 255.255.255.0gateway 192.168.1.1bridge_ports eth0
- 配置网桥网络的
-
常用工具:
brctl
: 创建和管理网桥。ip link
: 管理网桥和接口状态。
8. 网桥的优势与限制
优势:
- 简单有效:
- 无需 IP 地址即可实现二层网络的扩展。
- 隔离冲突域:
- 减少冲突,提高网络性能。
- 动态学习:
- 自动维护 MAC 地址表,无需手动配置。
限制:
- 广播流量问题:
- 网桥不能隔离广播流量,可能导致大型网络中的广播风暴。
- 无路由功能:
- 仅工作在二层,不支持三层路由。
- 性能瓶颈:
- 在大型网络中,网桥的性能可能不足,通常需要升级为交换机或路由器。
9. 学习与实践资源
-
推荐书籍:
- 《计算机网络:自顶向下方法》—— 了解局域网的基本原理和网桥的工作机制。
- 《TCP/IP详解:卷1》—— 深入学习网桥如何处理二层协议。
-
实验建议:
- 使用虚拟机(如 VMware、VirtualBox)搭建虚拟网桥实验。
- 使用 Linux 环境配置和测试虚拟网桥,搭建容器网络。
-
在线资源:
- Linux Documentation: Networking Bridge
- 网桥工具
brctl
的官方文档和社区教程。
10. 总结
网桥是计算机网络的基本构建块之一,尽管它在现代网络设备(如交换机)中被广泛取代,但它的原理依然是二层网络通信的基础。在虚拟化和容器化环境中,网桥技术仍然被广泛应用,是网络学习的重要一环。通过理论学习和实践操作(如配置虚拟网桥),可以更好地掌握网桥的原理和应用。
相关文章:
容器,网络基础
小结: 1、利用网桥和虚拟网卡 2、利用Veth Pair虚拟设备,一个网卡可以直接出现在另外一个网卡中 一个Linux容器能看见的“网络栈”,实际上是被隔离在它自己的Network Namespace当中的 “网络栈”,就包括了:网卡&#…...
Treap树堆【东北大学oj数据结构8-4】C++
题面 二叉搜索树会因为插入的数据的值可能变得不平衡,搜索/插入/删除操作的效率变得低效。例如,如果依次插入 n 个升序的数据,则树将看起来像一个列表,其高度将为 n,并且查询时间变得很长。一个解决策略是随意打乱要插…...
基于STM32的智电表系统课题设计思路:python友好界面、ADC、UART串口、数据分析
1. 项目选题与需求分析 1.1 选题背景和动机 随着社会的快速发展,电力的消耗不断增加,如何高效管理和监测用电成为了一个重要的课题。传统的电表只能提供简单的用电计量,无法满足现代家庭和工业对用电数据实时监控、远程控制及数据分析的需求…...
博弈论1:拿走游戏(take-away game)
假设你和小红打赌,玩“拿走游戏”,输的人请对方吃饭.... 你们面前有21个筹码,放成一堆;每轮你或者小红可以从筹码堆中拿走1个/2个/3个;第一轮你先拿,第二轮小红拿,你们两个人交替进行;拿走筹码堆…...
【人工智能解读】神经网络(CNN)的特点及其应用场景器学习(Machine Learning, ML)的基本概念
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...
Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点
Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点 一、引言 在当今的分布式系统开发领域,Spring Cloud和Spring Cloud Alibaba都是极为重要的框架。它们为构建大规模、高可用、分布式的应用系统提供了丰富的工具和组件。本文将深入探讨Spring C…...
Java 泛型
1. 泛型 (1) 泛型:定义类、接口、方法时,同事声明了一个或多个类型变量(如<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。可以在编译阶段约束要操作的数据类型 public static void main(String[] args) {//没加泛型 可以放任何…...
CentOS7 搭建 MQTT(mosquitto)环境并收发数据
零:说在前面 最近在研究物联网相关内容,需要接收 Modbus 协议的数据。上游数据源提出由对方整合数据后使用 MQTT 协议将数据发送过来,因此需要了解一下什么是 MQTT。 首先,它是一个类似 kafka 的“发布/订阅”模式的消息框架&…...
操作系统课后习题2.2节
操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度,这个是由CPU的设计和它的硬件来决定的,具体的调度算法是不能提高CPU的效率的; 第3题 互斥性: 指的是进程之间的同步互斥关系,进程是一个动态的过程&#…...
Mac Goland dlv 升级
Mac Goland dlv 升级 问题表现 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.1 (maximum supported version 1.21)查看当前Goland dlv 版本 ☁ ~ /Applications/GoLand.app/Contents/plugins/go-plugin/lib/dlv/mac/dlv version Delve…...
vue使用pdfh5.js插件,显示pdf文件白屏
pdfh5,展示文件白屏,无报错 实现效果图解决方法(降版本)排查问题过程发现问题查找问题根源1、代码写错了?2、预览文件流的问题?3、pdfh5插件更新了,我的依赖包没更新?4、真相大白 彩蛋 实现效果图 解决方法…...
【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )
文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…...
[Unity Shader] 【游戏开发】【图形渲染】Unity Shader的种类2-顶点/片元着色器与固定函数着色器的选择与应用
Unity 提供了不同种类的 Shader,每种 Shader 有其独特的优势和适用场景。在所有类型的 Shader 中,顶点/片元着色器(Vertex/Fragment Shader)与固定函数着色器(Fixed Function Shader)是两种重要的着色器类型。尽管它们具有不同的编写方式和用途,理解其差异与应用场景,对…...
Unity 动画曲线研究(Dotween插件)
动画的曲线的介绍 动画曲线(Animation Curve)是一种用于描述动画属性值随时间变化的图形工具。 我们可以通过给自己的动画片段设定不同的动画曲线,使动画效果具有不同表现力。 常见的动画曲线设定有: 线性(Linear&…...
适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)
目录 一、前期准备所需环境配置 1.1. 虚拟环境创建 1.2 下载yolov8源码,在pycharm中进行配置 1.2.1 下载源码 1.2.2 在pycharm终端中配置conda 1.3 在pycharm的terminal中激活虚拟环境 1.4 安装requirements.txt中的相关包 1.5 pip安装其他包 1.6 预训练…...
Linux中输入和输出基本过程
1.文件内核级缓冲区 前面在如何理解Linux一切皆文件的特点中提到为了保证在Linux中所有进程访问文件时的方式趋近相 同,在f ile 结构体中存在一个 files_operations 结构体指针,对应的结构体保存所有文件操作的函 数指针(这个结构体也被称为…...
二、FIFO缓存
FIFO缓存 1.FIFO缓存介绍2.FIFO缓存实现3.FIFO缓存总结 1.FIFO缓存介绍 FIFO(First-In-First-Out)缓存 是一种简单的缓存淘汰策略,它基于先进先出的原则来管理数据。当缓存达到容量限制并需要淘汰元素时,最先进入缓存的元素会被移…...
Linux_挂载nas
1、安装挂载nas必要的服务 yum -y install nfs-utils rpcbind 2、挂载nas sudo mount -t nfs -o vers3,nolock,prototcp,noresvport <NAS-IP>:/path/to/shared /yourNasPath mount 命令详解: -t :文件系统类型 ,这里指定的挂载类…...
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
**提要:**近段时间我们收到多个康复机构用户,咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来,插件是可以应用到AI康复锻炼中的,今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…...
现代密码学总结(上篇)
现代密码学总结 (v.1.0.0版本)之后会更新内容 基本说明: ∙ \bullet ∙如果 A A A是随机算法, y ← A ( x ) y\leftarrow A(x) y←A(x)表示输入为 x x x ,通过均匀选择 的随机带运行 A A A,并且将输出赋给 y y y。 ∙ \bullet …...
按照字幕拆解视频实战
1. 基本实现思路 字幕文件处理: 提取字幕内容和时间戳(如 SRT 文件格式)。解析字幕中的开始时间和结束时间。 视频切割: 使用字幕的时间戳,剪辑对应时间段的视频。每段字幕对应一个子视频。 输出子视频: …...
2.11.静态链表
一.静态链表的基本概念: 1.上图说明:索引为0处是头结点,头结点不存储数据,但存储下一个结点的数组下标,本例中头结点里存储的下一个结点的数组下标为2,即索引为2的结点为头结点后的第一个结点,以…...
分页查询在数据库中的好处
分页查询在数据库中的好处主要体现在以下几个方面: 提高性能: 减少数据传输:分页查询只返回请求的页面数据,而不是整个数据集,这减少了网络传输的数据量,降低了网络延迟和带宽消耗。减少内存使用࿱…...
电子应用设计方案-54:智能AI人工智能机器人系统方案设计
智能 AI 人工智能机器人系统方案设计 一、引言 随着人工智能技术的快速发展,智能 AI 机器人在各个领域的应用越来越广泛。本方案旨在设计一个功能强大、智能高效、交互友好的人工智能机器人系统,以满足不同场景下的用户需求。 二、系统概述 1. 系统目标…...
μC/OS-Ⅱ源码学习(6)---事件标志组
快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) μC/OS-Ⅱ源码学习(3)---事件模型 μC/OS-Ⅱ源码学习(4)---信号量 μC/OS-Ⅱ源码学习(5)---消息队列 本文进一步解析事件模型中,事件标志…...
ASP.NET|日常开发中读写TXT文本详解
ASP.NET|日常开发中读写TXT文本详解 前言一、读取 TXT 文本1.1 使用StreamReader类 二、写入 TXT 文本2.1 使用StreamWriter类 三、文件编码问题3.1 常见编码格式 四、错误处理和性能考虑4.1 错误处理4.2 性能考虑 结束语优质源码分享 ASP.NET|日常开发中…...
《C 语言向量运算:点亮人工智能几何计算之路》
在人工智能蓬勃发展的时代,数学运算作为其坚实的基石发挥着不可替代的作用。而向量的点积与叉积运算,更是在人工智能的几何计算领域有着独特且关键的地位。今天,就让我们一同深入探讨如何在 C 语言中实现向量的点积、叉积运算,并领…...
HarmonyOS 获取进程相关的信息process 常用的几个方法
获取进程相关的信息,提供进程管理的相关功能。 process 1. EventListener 2. isIsolatedProcess 3. is64Bit 4. getStartRealtime 5. getPastCpuTime 导入模块 import { process } from kit.ArkTS; 属性 名称类型可读可写说明uidnumber是否进程的用户标识。…...
Linux 权限管理实践:精确控制用户对 systemctl 和 journalctl 命令的使用
前言 在 Linux 系统管理中,精确控制用户对特定命令的访问权限是一项关键的安全实践。使用 systemctl 和 journalctl 命令时,不当的权限设置可能会导致不必要的风险。本篇博客将详细讨论如何通过 sudoers 文件和 Polkit 策略为不同用户配置 systemctl 和…...
图像处理之滤波
中值滤波、均值滤波、高斯滤波和双边滤波是常见的图像处理技术,主要用于去噪和图像平滑。低通滤波和高通滤波用于处理图像中的频率成分。它们的主要区别在于它们所允许通过的频率范围。滤波、卷积、去噪、模糊、提取特征是一个意思。 卷积就是两个矩阵的乘法&#…...
html基础-认识html
1.什么是html html是浏览器可以识别的的标记语言,我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…...
金智塔科技联合浙大人工智能研究所发布全新“智信”可信行业数据空间,共促数字金融创新发展!
由中国计算机学会(CCF)主办,CCF数字金融分会、同济大学、上海立信会计金融学院联合承办,金智塔科技作为金牌合作单位的数字金融领域年度巅峰盛会——首届CCF中国数字金融大会于2024年12月7日在上海成功举办。中国工程院院士蒋昌俊任大会主席,…...
基于单片机的语音识别自动避障小车(论文+源码)
1.系统设计 此次基于单片机的语音识别自动避障小车,以STC89C52单片机作为系统的主控制器,利用超声波模块来实现小车与障碍物距离的测量并通过LCD液晶显示,当距离低于阈值时会通过WT588语音模块进行报警提示,并且小车会后退来躲避…...
使用layui的table提示Could not parse as expression(踩坑记录)
踩坑记录 报错图如下 原因: 原来代码是下图这样 上下俩中括号都是连在一起的,可能导致解析问题 改成如下图这样 重新启动项目,运行正常!...
EF Code 多对多表关系建设和Linq 知识点
自引用组织结构树,比如部门、组织 除了根节点,其他节点都有一个父节点,也包含多个子节点,那么在定义表结构时,既要申明父表的关系,也要申明子表的关系 EF Code 多对多 builder.ToTable("T_Student&…...
Maven 的下载
目录 1、Maven 官方地址2、下载3、解压4、配置本地仓库 1、Maven 官方地址 https://maven.apache.org/ 2、下载 3、解压 将下载的压缩包解压到任意位置 4、配置本地仓库 在 Maven 的安装目录下新建文件夹,用来当作 Maven 的本地仓库 进入 conf 目录下ÿ…...
VPN模式
拓扑结构 实验图: 路由器router 配置 DHCP配置 需要右键激活 路由器项配置网关 dns项配置ip DNS服务配置 正向区域 选择不允许动态更新 反向区域 创建主机 正向 验证是否创建成功 反向查找区域 输入网段 使用默认名称---不允许动态更新 KALI机的验证 web服务…...
LeetCode 热题 100-两数之和(简单)
1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。…...
【C语言】拆解C语言的编译过程
前言 学习C语言的过程中,涉及到各种各样的关键词,在我们点击编译的时候,都会做什么呢?让我们来拆解一下 C语言的编译过程 C语言的编译过程包括预处理、编译、汇编和链接四个主要步骤。每个步骤都有其特定的任务和输出文件类型&am…...
RabbitMQ中的Work Queues模式
在现代分布式系统中,消息队列(Message Queue)是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件,支持多种消息传递模式。其中,Work Queues(工作队列)模式是一…...
OpenCV圆形标定板检测算法findGrid原理详解
OpenCV的findGrid函数检测圆形标定板的流程如下: class CirclesGridClusterFinder {CirclesGridClusterFinder(const CirclesGridClusterFinder&); public:CirclesGridClusterFinder...
快速理解类的加载过程
当程序主动使用某个类时,如果该类还未加载到内存中,则系统会通过如下三个步骤来对该类进行初始化: 1.加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个…...
monorepo代码管理框架
1. 新建 vue3-component 文件夹 2. 运行pnpm init 3. pnpm i vue typescript 4. 新建.npmrc shamefully-hoisttrue link-workspace-packagestrue 5. ts文件配置 pnpm tsc --init 默认.bin路径下的tsc 6. 新建pnpm-workspace.yaml packages:- packages/** # all packages- p…...
LabVIEW实现蓝牙通信
目录 1、蓝牙通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...
R环境配置 以及Debug方法 (VSCode, conda, 远程R)
生物信息学中的R环境配置 以及Debug方法 开始设置1、建议使用VSCode conda 远程R2、 VSCode配置安装插件安装好插件后,远程设置链接成功后,设置项目 3、 linux conda 和 远程R配置4、VScode 远程访问R环境下面配置远程R 5、开始Debug新建个R文件&#…...
ComfyUI 与 Stable Diffusion WebUI 的优缺点比较
ComfyUI与Stable Diffusion WebUI都是AI绘画领域比较知名两款产品,两者存在诸多差异,本篇就带你熟悉二者的优劣,方便自己做出决策。 界面与操作 ComfyUI:界面简洁直观,通过节点和连线的方式构建工作流,用…...
Ubuntu 系统下安装 Nginx
一、Nginx是什么 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少&…...
【Qt】drawText字体大小问题探究
背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...
视频汇聚平台:Liveweb视频流媒体平台视频监控系统解决方案
数字化技术在安防领域的广泛应用已经成为公安等重要执法部门的重要趋势,主要得益于无线网络通信技术和计算机技术的快速进步。传统的视频监控系统存在诸多局限,例如只能进行现场监视,报警信息传输简单,无法远距离传输视频信号&…...
Android开发中有关MediaPlayer 播放.mp3文件使用之一
我们在项目中,经常会添加一个简单的语音提示:我们通常会选择MediaPlayer播放SD文件中的.MP3文件或者存到assets下的.mp3文件。正常使用流程如下: 一、播放assets下的.mp3文件 根据assets获取需要播放的文件名 getApplicationContext().getAs…...