浅谈网络 | 容器网络之Cilium
目录
- Cilium介绍
- Cilium是什么
- Cilium 主要功能特性
- 为什么用Cilium?
- 功能概述
- 组件概况
- BPF 与 XDP
- eBPF (Extended Berkeley Packet Filter)
- XDP (eXpress Data Path)
Cilium介绍
Cilium是什么
Cilium 是一个开源网络和安全项目,专为 Kubernetes、Docker 和 Mesos 等容器管理平台设计,旨在为容器化环境中的应用程序提供透明的网络连接和安全保护。它基于 Linux 内核中的 eBPF 技术,能够在内核层面上动态插入安全、可见性和网络控制逻辑,支持传统网络安全(如防火墙和访问控制)以及更精细的 API 和进程级安全,确保容器间通信不受威胁。
作为 Kubernetes 网络生态中的一款基于 eBPF 实现的网络插件,Cilium 不仅支持 Pod 间的基本通信,还能够进行 L4 和 L7 层的负载均衡,并取代了传统的 kube-proxy。它还内建服务网格、DNS 代理和流量追踪等高级功能,使其成为一个全面的解决方案,提升容器化应用的网络性能、安全性和可见性,简化网络架构,增强服务治理和监控能力。
Cilium 主要功能特性
Cilium 主要功能特性包括:
- 安全性:支持 L3/L4/L7 级别的安全策略,这些策略可按应用方式分为:
- 基于身份的安全策略(Security Identity):为每个工作负载分配唯一的安全身份,并基于此身份实施访问控制,而非依赖传统的 IP 地址。
- 基于 CIDR 的安全策略:支持基于 IP 地址范围(CIDR)的访问控制规则,以兼容现有的网络安全策略。
- 基于标签的安全策略:利用 Kubernetes 标签进行策略匹配,实现细粒度的安全控制。
- 网络功能:支持三层平面网络(Flat Layer 3 Network),包括:
- 覆盖网络(Overlay):支持 VXLAN 和 Geneve 等隧道技术,为多主机通信提供透明的虚拟网络。
- Linux 原生路由:包括基于 Linux 内核的路由机制,以及云服务商提供的高级网络路由,确保高效的流量转发。
- 负载均衡:基于 eBPF 实现高性能的 L4/L7 负载均衡,无需依赖 iptables 或 kube-proxy,提高网络吞吐量并降低延迟。
- 可观测性与故障排查:提供丰富的监控和故障排除工具,包括流量可视化、DNS 解析监控、延迟分析以及事件追踪,帮助用户高效定位和解决网络问题。
为什么用Cilium?
Cilium 的使用基于现代数据中心应用程序向微服务架构的转变,特别是当容器化和动态微服务环境中的应用程序通过轻量级协议(如 HTTP)进行通信时,传统的网络安全方法面临许多挑战。传统的 Linux 网络安全工具(如 iptables)依赖 IP 地址和端口进行访问控制,但在高度动态的容器环境中,IP 地址和端口经常发生变化,这使得传统方法难以应对容器生命周期的不稳定性和大规模的网络规则更新需求。此外,微服务的快速扩展和滚动更新使得基于 IP 地址的识别变得不可靠,且仅依赖协议端口(如 TCP 端口 80)来区分应用流量也不再适用。
Cilium 通过利用 Linux 内核中的 eBPF 技术,解决了这一问题。它不再依赖传统的 IP 地址,而是通过容器、Pod 和服务的标识来执行网络安全和访问控制。这使得 Cilium 能够在高度动态的环境中高效地实施安全策略,并能在应用层(如 HTTP)进行更精细的安全隔离和流量过滤。与传统的基于 IP 的安全策略不同,Cilium 将安全性与寻址解耦,可以更好地适应微服务架构中频繁变化的网络拓扑。
通过 eBPF,Cilium 实现了高度可扩展的网络安全和可视性,即使在大规模环境中也能稳定运行。这种方法使得 Cilium 成为处理现代微服务架构中安全性、可见性和网络控制的理想解决方案。
功能概述
透明保护和加密 API
Cilium 能够透明地保护和加密现代应用程序协议,如 REST/HTTP、gRPC 和 Kafka。传统防火墙通常仅在第3层和第4层运行,协议端口要么完全受信任,要么完全被阻止,而 Cilium 提供了更精细的应用层协议请求过滤。例如:
- 允许所有使用 GET 方法且路径为 /public/.* 的 HTTP 请求,拒绝所有其他请求。
- 允许 service1 在 Kafka 主题 topic1 上生成消息,并允许 service2 消费 topic1 上的消息,拒绝其他 Kafka 消息。
- 强制所有 REST 调用中 HTTP 标头 X-Token 必须包含数字(如 [0-9]+)。
基于身份的服务间安全通信
随着现代分布式应用程序依赖容器化技术(如 Kubernetes)进行按需扩展和敏捷部署,Cilium 为共享相同安全策略的容器组分配唯一的安全标识。该标识与容器发出的网络数据包关联,确保容器之间的安全通信。Cilium 使用键值存储管理安全身份,通过对网络数据包进行验证,避免了传统防火墙的 IP 地址限制,使得容器环境更具可扩展性。
安全访问外部服务
Cilium 支持基于标签的安全性,作为集群内部的首选访问控制方式。对于外部服务的访问,Cilium 还支持传统的基于 CIDR 的安全策略。通过这些策略,Cilium 可以限制对外部服务的访问,仅允许特定 IP 范围内的容器访问,从而增加安全性。
简单网络
Cilium 提供简化的三层平面网络,能够跨多个集群连接所有应用程序容器。网络通过主机范围分配器简化 IP 地址的分配,避免了复杂的协调工作。Cilium 支持两种多节点网络模型:
- Overlay:基于封装的虚拟网络,支持 VXLAN 和 Geneve 等封装格式。适用于主机之间已有 IP 连接的环境,具有最小的基础设施要求。
- Native Routing:使用 Linux 主机的常规路由表,适用于需要更多底层网络控制的用户,支持原生 IPv6 网络和云服务商的路由器集成。
负载均衡
Cilium 提供基于 eBPF 的高效负载均衡,支持应用程序容器之间以及容器与外部服务之间的流量分布。通过高效的哈希表,Cilium 可以扩展到大规模环境,并支持直接服务器返回(DSR)模式,无需在源主机上执行负载均衡操作。
监控和故障排除
Cilium 提供强大的监控和故障排查能力,是分布式系统运维的基础。除了传统的工具(如 tcpdump 和 ping),Cilium 提供了以下增强功能:
- 元数据监控:报告丢包时,不仅提供源 IP 和目标 IP,还提供完整的发送方和接收方标签信息,帮助更精确地定位问题。
- 策略决策跟踪:追踪丢包或拒绝请求的原因,帮助理解策略决策过程,并支持基于标签的策略追踪。
- Prometheus 指标导出:集成 Prometheus,导出关键指标,方便与现有监控系统和仪表板集成。
集成
Cilium 支持广泛的集成选项,确保其可以与不同的容器和云原生平台兼容:
- 网络插件集成:支持 CNI(容器网络接口)和 libnetwork。
- 容器运行时事件:与 containerd 兼容。
- Kubernetes:支持 Kubernetes 的 NetworkPolicy、Labels、Ingress、Service 等功能。
- 日志:支持 syslog 和 fluentd 集成,帮助管理日志流和事件监控。
组件概况
Cilium的关键组件
- Cilium Agent (cilium-agent)
Cilium 代理在每个 Linux 容器主机上运行,负责以下功能:
- 提供 API 供运维/安全团队配置网络安全策略。
- 监听容器事件,收集元数据并生成高效的 BPF 程序。
- 管理 IP 地址分配(IPAM),与容器平台网络插件交互。
- 使用 clang/LLVM 编译 BPF 程序,传递给 Linux 内核处理数据包转发和安全行为。
- Cilium CLI Client (cilium)
Cilium CLI 是一个命令行工具,用于与 Cilium Agent API 交互:
- 查询容器的 Cilium 状态。
- 配置和查看网络安全策略。
- 配置网络监控行为。
- eBPF (Extended Berkeley Packet Filter)
Cilium 使用 eBPF 技术执行高效的网络数据路径操作:
- 在 Linux 内核中运行 BPF 程序,进行数据包过滤、转发和监控。
- 需要 Linux 内核 4.9 或更高版本,自动适应内核功能更新。
- 提供高效、低开销的流量处理能力,避免频繁上下文切换。
- Hubble
Hubble 提供流量监控、可视化和日志记录功能:
- 显示服务间流量和网络拓扑。
- 提供实时监控和流量追踪,帮助诊断和优化网络性能。
- Cilium Operator
Cilium Operator 管理集群中的配置和状态同步:
- 通过 Kubernetes CRD 自动应用网络策略。
- 确保集群中每个节点的 Cilium 状态一致性。
BPF 与 XDP
eBPF (Extended Berkeley Packet Filter)
eBPF 是对传统 BPF(cBPF)的扩展,最早用于网络数据包过滤。其核心思想是在 Linux 内核中提供一个虚拟机,允许用户在内核中动态加载和执行自定义程序,进而过滤和处理数据包。eBPF 通过以下特点提升了 BPF 的能力:
- 指令集扩展:比 cBPF 更强大,支持更丰富的操作,如数据包修改、流量分析等。
- 内核虚拟机:允许在内核空间运行用户定义的指令,无需修改内核源代码。
- 性能优化:使用 JIT 编译技术,将程序编译为与 CPU 架构匹配的本地指令,提高执行效率。
自 Linux 3.15 版本引入 eBPF 后,它被广泛应用于网络、监控、安全等领域。用户可以通过 eBPF 编写定制化的网络策略、流量监控工具等,极大地增强了 Linux 网络的可编程性和灵活性。
XDP (eXpress Data Path)
XDP 是 eBPF 的一种应用,专门用于提升 Linux 网络栈的性能。它允许网络数据包在进入网络协议栈之前进行处理,直接在网卡驱动程序层处理数据,从而显著降低延迟并提高吞吐量。与 DPDK 类似,XDP 提供了极高的网络性能,但它有一些额外的优势:
- 无需外部库:不像 DPDK 需要第三方库,XDP 是内核原生支持的,免去外部依赖。
- 灵活的网络模式支持:同时支持轮询和中断模式,不限制硬件配置。
- 不需要大页内存:避免了 DPDK 对大页内存的需求,简化了配置。
- 无需专用 CPU 资源:XDP 可以在普通 CPU 上运行,而不需要专门为网络处理分配 CPU 核心。
尽管 XDP 提供了显著的性能提升,但也有一些权衡: - 丢包风险:当 TX(发送)设备的处理速度跟不上 RX(接收)设备时,XDP 会直接丢弃包,不支持缓存队列(如 qdisc)。
- 专用程序:XDP 程序是专门为某个应用设计的,缺乏网络协议栈的通用性,可能无法处理所有类型的网络流量。
eBPF 和 XDP 之间的关系
- XDP 是 eBPF 在高性能网络处理中的应用,专注于数据包在进入 Linux 网络协议栈之前的高速处理。
- eBPF 提供了基础的可编程能力,而 XDP 则利用这一能力优化数据路径,提供低延迟和高吞吐量的网络处理。
- XDP 在处理速度上优于传统网络栈,但也牺牲了部分通用性和公平性。
总结来说,eBPF 是一种强大的内核级编程模型,XDP 是其在网络数据处理中的具体实现,二者相辅相成,使得 Linux 网络栈具备了更高效的可编程性和灵活性。
BPF 和 XDP 参考官网指南
相关文章:
浅谈网络 | 容器网络之Cilium
目录 Cilium介绍Cilium是什么Cilium 主要功能特性为什么用Cilium? 功能概述组件概况BPF 与 XDPeBPF (Extended Berkeley Packet Filter)XDP (eXpress Data Path) Cilium介绍 Cilium是什么 Cilium 是一个开源网络和安全项目,专为 Kubernetes、Docker 和…...
armv7l
在 **ARMv7l** 中,最后的字符是字母 **“l”**(小写字母 “L”),而不是数字 **“1”**。 --- ### 1. **ARMv7l 的含义** - **ARMv7**:指的是 **ARM 架构的第 7 代版本**,是一种广泛应用于嵌入式系统&…...
从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)
最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…...
期权帮|股指期货交割日为啥会大跌?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 股指期货交割日为啥会大跌? 股指期货交割日股市可能会大跌,主要原因有以下几点: 1.交割日时多空双方需要平仓或转仓,若多头急于平仓…...
B树和B+树
1. B树 1.1 定义 B树是一种多路平衡查找树,具有以下性质: 每个节点最多包含 m 个子节点(m 阶 B树)。 根节点至少有两个子节点(除非它是叶子节点)。 每个内部节点(非根和非叶子节点ÿ…...
分布式事务核心理论:CAP与BASE
一、引言:分布式系统的挑战 在互联网应用中,随着业务规模的扩大,单机数据库已无法满足高并发和海量数据存储需求。分布式系统将数据拆分到不同节点,但随之带来了数据一致性的难题。CAP与BASE理论为分布式事务提供了重要的设计指导…...
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
本文内容为重写上一节课中的单链表,将其重构成更易于用户使用的链表,实现多种操作链表的方法。 1. 重构单链表SLList 在上一节课中编写的 IntList 类是裸露递归的形式,在 Java 中一般不会这么定义,因为这样用户可能需要非常了解…...
记录一个ES分词器不生效的解决过程
问题背景 商城项目,其中商品查询检索使用的是ES, 但存在某些商品查询不到的问题 例如:某商品名包含AA_BBB这样的关键词,但是搜索"AA"不能查询到该商品,但是将商品名修改为AA BBB后就能查询到了. 怀疑是分词的问题,但看代码,在创建ES索引时在对应字段上也定义了分词器…...
Jeecg+vue3去掉JInput组件默认模糊查询的配置方式
遇见的问题:input查询带**号 情况1、使用schemas配置的表单项 添加type""属性,默认type为like,去掉模糊则配置为空 文档链接 jeecg文档说明JInput 2、直接调用组件则在属性上直接添加type""属性...
Could not initialize class io.netty.util.internal.Platfor...
异常信息: Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.PlatformDependent0 Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.reflect.InaccessibleObjec…...
什么是业务流程分类框架
业务流程分类框架是一个用于组织和系统化地分类业务流程的结构化方法。它旨在帮助企业理解、管理、分析和改进其运营流程。 可以把它想象成一个图书馆的图书分类系统,帮助快速找到和理解不同类型的书籍。对于业务流程来说,分类框架帮助快速了解不同类型的…...
向量的点乘的几何意义
源自AI 向量的点乘(Dot Product)在几何和图形学中有重要的意义。它不仅是数学运算,还可以用来描述向量之间的关系。以下是点乘的几何意义及其应用: 1. 点乘的定义 对于两个向量 a 和 b,它们的点乘定义为:…...
达梦数据库应用开发_JDBC接口介绍_yxy
达梦数据库应用开发_JDBC接口介绍 1 JDBC是什么?2 JDBC主要类或接口介绍2.1 建立与 DM 数据库的连接2.2 转接发送 SQL 语句到数据库2.3 处理并返回语句执行结果 3 JDBC基本使用3.1 前期准备3.2 增删改查代码示例3.3 绑定变量操作示例3.4 大字段操作示例 1 JDBC是什么…...
在ubuntu上用Python的openpyxl模块操作Excel的案例
文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前,需…...
RabbitMQ介绍以及基本使用
文章目录 一、什么是消息队列? 二、消息队列的作用(优点) 1、解耦 2、流量削峰 3、异步 4、顺序性 三、RabbitMQ基本结构 四、RabbitMQ队列模式 1、简单队列模式 2、工作队列模式 3、发布/订阅模式 4、路由模式 5、主题模式 6、…...
搭建 Hadoop 3.3.6 伪分布式
搭建 Hadoop 3.3.6 伪分布式 IP 192.168.157.132 初始化操作 更改yum源 # 1_1.安装Wget yum install wget# 1_2.备份CentOS-Base.repo文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak# 2.下载阿里yum源配置 wget -O /etc/yum.repos.d/Cen…...
进程控制(靠原语实现)
什么是进程控制? 进程控制的主要功能是:对系统中的所有进程实施有效管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简化理解:进程控制就是要实现进程状态转换。 知识一览: 如何实现进程控制&#…...
linux5-多任务--进程fork()
一.多任务:让系统具备同时处理多个任务的能力 1.如何实现多任务 1.1进程:操作系统上正在运行的程序,需要消耗内存和CPU 1.1.1 进程的生存周期:创建、调度、消亡 1.1.1.1进程的创建:每个进程被创建时,操作…...
【蓝桥】二分法
1、简介 1.1 定义: 通过将问题的搜索范围一分为二,迭代地缩小搜索范围,直到找到目标或确定目标不存在 1.2 适用: 有序数据集合,且每次迭代可以将搜索范围缩小一半 1.3 本质: 枚举:利用数据结构…...
linux查看程序占用的本地端口
ss是Socket Statistics的缩写,用来替代旧的netstat工具,功能更强大,执行更快。它用于查看系统的网络连接情况,包括TCP、UDP等协议的信息。 一. 命令解析: sudo ss -tulwnpss (Socket Statistics):替代 ne…...
统计函数运行时间的python脚本
这是一个统计函数运行时间的实用脚本,其中用到了函数的嵌套、链式传输参数,以及修饰器。 import time# 定义一个装饰器timer,用于计算被装饰函数的运行时间 def timer(func):print("执行了timer")def wrapper(*args, **kwargs):st…...
百度搜索和文心智能体接入DeepSeek满血版——AI搜索的新纪元
在当今数字化时代,搜索引擎作为互联网信息获取的核心工具,正经历着前所未有的变革。据悉,2025年2月16日,百度搜索和文心智能体平台宣布全面接入DeepSeek和文心大模型的最新深度搜索功能,搜索用户可免费使用DeepSeek和文…...
快速入门Springboot+vue——MybatisPlus快速上手
学习自哔哩哔哩上的“刘老师教编程”,具体学习的网站为:6.MybatisPlus快速上手_哔哩哔哩_bilibili,以下是看课后做的笔记,仅供参考。 第一节 ORM介绍 ORM对象关系映射,为了解决面向对象与关系数据库存在的互补匹配现象…...
在C#中动态访问对象属性时,用表达式树可以获得高效性能
在C#中如何用表达式树动态访问对象属性的问题。用户可能已经知道反射的基本用法,但想用表达式树来提高性能,因为表达式树编译后的委托执行速度比反射快。 首先,表达式树的基本概念。表达式树允许在运行时构建代码,并编译成可执行的…...
性能:React 实战优化技巧 之 函数闭包
子组件使用了 React.memo ,为什么 “prop 值未发生改变”,子组件依然被重新渲染了? 🚧 示例:点击子组件中按钮,获取 input 数据进行提交(常见于表单) index.tsx import Author f…...
蓝桥杯学习大纲
(致酷德与热爱算法、编程的小伙伴们) 在查阅了相当多的资料后,发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以,干脆自己整理一篇,欢迎大家补充! 一、蓝桥必备高频考点 我们以此为重点学习…...
Windows11切换回Windows10风格右键菜单
参考文章:Win11新版右键菜单用不惯?一键切换回Win10经典版!-CSDN博客 以管理员权限运行命令行cmd 切换为经典旧版右键菜单,执行 reg.exe add “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServe…...
Python 爬虫selenium
1.selenium自动化 selenium可以操作浏览器,在浏览器页面上实现:点击、输入、滑动 等操作。 不同于selenium自动化,逆向本质是: 分析请求,例如:请求方法、请求参数、加密方式等。用代码模拟请求去实现同等…...
Linux常用操作
软件安装 CentOS系统使用: yum [install remove search] [-y] 软件名称 install 安装 remove 卸载 search 搜索 -y,自动确认 Ubuntu系统使用 apt [install remove search] [-y] 软件名称 install 安装 remove 卸载 search 搜索 -y,自动确认 yum 和 apt 均需要root权限 syste…...
Note25022001_Excel表格如何在文字的中间或者后边插入当前日期
Excel表格如何在文字的中间或者后边插入当前日期 关键字: EXCEL;当前日期;文字中间 如图所示: 其中一种实现方法如下: 打开表格,在某一个表格中输入: "项目计划管理表(厂内&…...
Django5 实用指南(四)URL路由与视图函数
4.1 Django5的URL路由系统 Django 的 URL 路由系统是其核心组件之一,它负责将用户的 HTTP 请求(即 URL)映射到相应的视图函数上。每当用户在浏览器中访问某个 URL 时,Django 会根据项目的 URL 配置文件(urls.py&#…...
Unity3D 基于 GPU 动画和 Compute Shader 的大批量动画渲染详解
引言 在现代游戏开发中,渲染大量动画角色是一个常见的需求,尤其是在大规模战斗场景、开放世界游戏或 VR/AR 应用中。传统的 CPU 动画计算和渲染方式在面对大批量角色时,往往会遇到性能瓶颈。为了优化性能,开发者可以利用 GPU 的强…...
遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)
我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…...
什么是DeFi (去中心化金融)
DeFi (去中心化金融) 概述 💰 1. DeFi 基础概念 1.1 什么是 DeFi? DeFi 是建立在区块链上的金融服务生态系统,它: 无需中心化中介开放且透明无需许可即可参与代码即法律 1.2 DeFi 的优势 开放性:任何人都可以参与…...
深入解析 sudo -l 命令的输出内容
在 Linux 系统中,sudo 命令允许普通用户以超级用户(root)权限执行命令。sudo -l 命令用于查看当前用户在 sudoers 配置文件中的权限,以及与 sudo 相关的安全策略。本文将详细解析 sudo -l 输出的各个部分,包括 用户权限…...
DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
linux学习【7】Sourc Insight 4.0设置+操作
目录 1.Source Insight是什么?2.需要哪些配置?3.怎么新建项目4.一些问题的解决1.中文乱码问题 按照这个设置就可以了,下面的设置会标明设置理由。 1.Source Insight是什么? 阅读源码,编辑源码,不能编译&am…...
OpenCV形态学操作
1.1. 形态学操作介绍 初识: 形态学操作是一种基于图像形状的处理方法,主要用于分析和处理图像中的几何结构。其核心是通过结构元素(卷积核)对图像进行扫描和操作,从而改变图像的形状和特征。例如: 腐蚀&…...
使用Python中的`gensim`库构建LDA(Latent Dirichlet Allocation)模型来分析收集到的评论
下面为你详细介绍如何使用Python中的gensim库构建LDA(Latent Dirichlet Allocation)模型来分析收集到的评论。LDA是一种主题模型,它可以将文档集合中的文本按照主题进行分类。 步骤概述 数据预处理:对收集到的评论进行清洗、分词…...
【STM32】外部时钟|红外反射光电开关
1.外部时钟 单片机如何对外部触发进行计数?先看一下内部时钟,内部时钟是接在APB1和APB2时钟线上的,APB1,APB2来自stm32单片机内部的脉冲信号,也叫内部时钟。我们用来定时。同样我们可以把外部的信号接入单片机,来对其…...
Visual Studio Code 集成 Baidu Comate
文章目录 安装Baidu Comate插件 安装Baidu Comate插件 从左主侧栏中 点击 【扩展】这个图标,然后在上方输入栏中输入 baidu comate —>选中列出的Bai Comate —>点击 【安装】按钮,等待安装完毕…...
数据结构者
数据(data):可被计算机接受处理的符号总称 数据元素(data element):数据的基本单位,常作为一个整体进行考虑和处理 一个数据元素可以由若干个数据项(data item)组成 数…...
论文阅读 DOES END-TO-END AUTONOMOUS DRIVING REALLY NEED PERCEPTION TASKS?
端到端的强势来袭,好久了~~~ 简单翻译:端到端真的需要感知任务嘛? code https://github.com/PeidongLi/SSR. https://arxiv.org/pdf/2409.18341 1. 摘要 端到端自动驾驶(E2EAD)方法通常依赖于监督式感知任务来提取显…...
总结UML类图几种关系画法
最近在公司需要画类图,有些遗忘,于是重新学习并并总结了一下: 继承:实线空心三角箭头。A继承B,A指向B。A是一种B。实现:虚线空心三角箭头。A实现B,A指向B。A实现B接口。关联:实线普…...
python-leetcode 40.二叉树的层序遍历
题目: 给定二叉树的根节点root,返回其节点值得层序遍历(即逐层从左到右访问所有节点) 方法:广度优先搜索 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNon…...
安利:外文文献翻译插件
沉浸式翻译 好用吹爆!!!!!!!! 任务 2.谷歌学术 复制外文的标题搜索 3.进入文献所在,登录对应机构 4.可以看到都翻译好了 5.然后复制到文档,改改格式巴…...
Python——生成AIGC图像
文章目录 一、背景介绍 二、效果图展示 三、完整代码 四、分步解释 五、实用建议 1)提示词技巧 2)性能优化 3)常见问题处理 4)扩展功能建议 六、注意事项 1. 硬件要求 2. 法律合规 3. 模型安全 一、背景介绍 AIGC&a…...
OpenGL(2)基于Qt做OpenGL开发
文章目录 一、基于Qt做OpenGL开发1、环境准备2、创建OpenGL窗口3、绘制基本图形 一、基于Qt做OpenGL开发 1、环境准备 确保你已经安装了 Qt 开发环境(包含 Qt Creator),并且支持 OpenGL 开发。在创建 Qt 项目时,选择 “Qt Widget…...
【Windows软件 - HeidiSQL】导出数据库
HeidSQL导出数据库 软件信息 具体操作 示例文件 选项分析 选项(1) 结果(1) -- -------------------------------------------------------- -- 主机: 127.0.0.1 -- 服务器版本: …...
用deepseek学大模型04-模型可视化与数据可视化
deepseek.com: pytorch可视化工具 生成神经网络图 在 PyTorch 中,可视化神经网络结构的常用工具和方法有以下几种,以下将详细介绍它们的用法: 1. TensorBoard (PyTorch 官方集成) PyTorch 通过 torch.utils.tensorboard 支持 TensorBoard&a…...