Linux---架构概览
一、Linux 架构分层的深度解析
1. 用户空间(User Space)
用户空间是应用程序运行的环境,与内核空间隔离,确保系统稳定性。
-
应用程序层:
- 用户程序:如
edge
、vim
,通过调用标准库(如glibc
)间接使用系统调用。 - 动态链接:程序依赖共享库(
.so
文件),由动态链接器(ld-linux.so
)加载。 - 执行权限:通过
execve()
系统调用启动程序,结合文件权限(如rwx
)控制执行。
- 用户程序:如
-
系统工具链:
- GNU Coreutils:提供基础命令(
ls
、cp
),通过 Shell 脚本组合实现复杂功能。 - Shell 工作原理:
- 解析命令为
argv
参数,调用fork()
创建子进程,再通过exec()
执行命令。 - 管道(
|
)通过匿名管道(pipe()
)实现进程间通信。
- 解析命令为
- 图形界面:
- X11/Wayland 协议负责窗口管理,GNOME/KDE 等桌面环境运行在显示服务器之上。
- GNU Coreutils:提供基础命令(
2. 内核空间(Kernel Space)
内核直接管理硬件,提供系统服务,代码运行在特权模式(Ring 0)。
-
系统调用接口(SCI):
- 系统调用表:每个系统调用对应唯一编号(如
__NR_read
),通过syscall
指令触发软中断(如int 0x80
)。 - 参数传递:通过寄存器(x86)或堆栈传递参数,返回值存入
eax
寄存器。 - 示例:
open("/file", O_RDWR)
触发sys_open()
,返回文件描述符(fd)。
- 系统调用表:每个系统调用对应唯一编号(如
-
内核子系统协作:
- 进程调度:当进程通过
sched_yield()
主动让出 CPU,或时间片耗尽时触发调度。 - 中断处理:硬件中断(如键盘输入)触发中断服务程序(ISR),通过
irq_handler
处理。
- 进程调度:当进程通过
二、核心子系统深度剖析
1. 进程管理
-
进程与线程的实现:
- 进程描述符(task_struct):内核用此结构体管理进程的所有信息(PID、内存映射、打开文件等)。
- 线程实现:线程共享进程的地址空间,通过
clone()
系统调用创建,标志位指定共享资源(如CLONE_VM
共享内存)。 - 轻量级进程(LWP):Linux 线程本质是 LWP,由内核调度,与 POSIX 线程库(pthread)配合使用。
-
调度器(CFS):
- 红黑树与 vruntime:所有可运行进程按
vruntime
(虚拟运行时间)排序,CFS 选择最小vruntime
的进程执行。 - 时间片计算:
vruntime
增长速率与进程优先级成反比(高优先级进程vruntime
增长更慢)。 - 实时调度类:
SCHED_FIFO
:进程一直运行直到主动让出或更高优先级进程就绪。SCHED_RR
:相同优先级进程按时间片轮转。
- 红黑树与 vruntime:所有可运行进程按
-
进程间通信(IPC):
- 共享内存:通过
shmget()
创建共享内存段,shmat()
映射到进程地址空间。 - 信号量(Semaphore):控制对共享资源的访问,通过
semop()
实现 P/V 操作。 - 消息队列:
msgget()
创建队列,msgsnd()
和msgrcv()
发送/接收消息。
- 共享内存:通过
2. 内存管理
-
虚拟内存机制:
- 页表与多级分页:x86_64 使用 4 级页表(PGD、PUD、PMD、PTE),MMU 将虚拟地址转换为物理地址。
- 缺页异常:访问未映射的页时触发缺页中断,内核可能从磁盘加载数据(如交换区或文件映射)。
-
内存分配器:
- Buddy 算法:
- 将物理内存划分为 2^n 大小的块,分配时拆分,释放时合并相邻空闲块。
- 解决外部碎片问题,但可能产生内部碎片。
- Slab 分配器:
- 针对小对象(如
inode
、task_struct
),预分配内存池,减少内存分配开销。 - 每个 Slab 包含多个对象,通过缓存(
kmem_cache
)管理。
- 针对小对象(如
- Buddy 算法:
-
Swap 管理:
- 页面换出:当物理内存不足时,
kswapd
内核线程将不活跃页写入交换分区。 - 交换优先级:通过页面标志(如
PG_active
、PG_referenced
)判断页面活跃度。
- 页面换出:当物理内存不足时,
3. 文件系统
-
虚拟文件系统(VFS):
- 抽象接口:
file_operations
结构体定义文件操作(如read()
、write()
)。dentry
缓存目录项,加速路径查找。
- 挂载点:通过
mount()
系统调用将文件系统挂载到目录树。
- 抽象接口:
-
Ext4 文件系统:
- 日志(Journal):
- 写操作先写入日志,再提交到磁盘,确保崩溃后可通过日志恢复一致性。
- 日志模式:
journal
(记录元数据和数据)、ordered
(仅记录元数据,数据先写)。
- 延迟分配(Delayed Allocation):文件写入时先缓存数据,分配物理块推迟到刷新时,减少碎片。
- 日志(Journal):
-
设备文件:
- 字符设备:如
/dev/tty
,通过read()
/write()
逐字节访问。 - 块设备:如
/dev/sda
,数据以块为单位读写,由 I/O 调度器合并请求。
- 字符设备:如
4. 网络子系统
-
TCP/IP 协议栈:
- 数据包处理流程:
- 链路层:网卡驱动接收帧,解析 MAC 地址。
- 网络层:IP 协议处理路由(通过路由表
fib_table
),分片与重组。 - 传输层:TCP 协议维护连接状态(
struct sock
),处理重传与拥塞控制(如 CUBIC 算法)。
- 套接字(Socket):
- 通过
socket()
创建,类型包括SOCK_STREAM
(TCP)、SOCK_DGRAM
(UDP)。 - 绑定端口后通过
listen()
等待连接,accept()
接受新连接。
- 通过
- 数据包处理流程:
-
Netfilter 框架:
- 五个钩子点:
NF_IP_PRE_ROUTING
、NF_IP_LOCAL_IN
、NF_IP_FORWARD
、NF_IP_LOCAL_OUT
、NF_IP_POST_ROUTING
。 - iptables 规则示例:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH 连接
- 五个钩子点:
5. 设备驱动
-
驱动模型:
- 设备树(Device Tree):描述硬件资源配置(如 ARM 平台),替代传统的硬编码配置。
- sysfs 文件系统:通过
/sys
目录暴露设备信息(如/sys/class/net/eth0
)。
-
模块加载:
- 编译与加载:驱动代码编译为
.ko
文件,通过insmod
加载,rmmod
卸载。 - 依赖管理:
modprobe
自动处理模块依赖关系。
- 编译与加载:驱动代码编译为
三、Linux 启动流程的详细步骤
-
BIOS/UEFI 阶段:
- 硬件自检(POST):检测 CPU、内存、外设。
- 引导设备选择:按 BIOS 设置顺序(如硬盘、USB)寻找引导扇区。
-
Bootloader(GRUB):
- 引导菜单:加载
grub.cfg
,显示可启动内核列表。 - 加载内核:读取
vmlinuz
和initramfs
到内存,移交控制权。
- 引导菜单:加载
-
内核初始化:
- 解压与启动:解压内核镜像,初始化核心子系统(内存管理、进程调度)。
- 挂载根文件系统:
initramfs
提供临时根文件系统,加载真实根文件系统驱动(如 Ext4)。
-
用户空间初始化:
- init 进程:
- Systemd:并行启动服务单元(
.service
文件),管理依赖关系。 - 运行级别:
systemctl isolate multi-user.target
切换运行模式。
- Systemd:并行启动服务单元(
- init 进程:
四、Linux 设计哲学的实践体现
-
一切皆文件:
- /proc 文件系统:通过
/proc/<pid>/status
查看进程状态,/proc/cpuinfo
获取 CPU 信息。 - 伪终端(PTY):通过
/dev/pts/0
实现终端会话,SSH 连接依赖此机制。
- /proc 文件系统:通过
-
模块化设计:
- 热插拔支持:插入 USB 设备时,内核自动加载
usb-storage.ko
驱动。 - 自定义内核:通过
make menuconfig
裁剪不需要的模块,编译专属内核。
- 热插拔支持:插入 USB 设备时,内核自动加载
-
KISS 原则的典型应用:
- 文本处理流水线:
grep "error" log.txt | awk '{print $1}' | sort | uniq -c
组合多个工具完成任务。
- 文本处理流水线:
五、安全机制的实现细节
-
Capabilities 机制:
- 细分特权:传统 root 权限被拆分为数十种能力(如
CAP_NET_BIND_SERVICE
允许绑定低端口)。 - 设置能力:通过
setcap cap_net_bind_service=+ep /usr/bin/myapp
赋予程序特定权限。
- 细分特权:传统 root 权限被拆分为数十种能力(如
-
LSM 框架:
- SELinux:
- 强制访问控制(MAC),基于安全上下文(如
user_u:role_r:type_t
)限制进程访问资源。 - 策略规则示例:
allow httpd_t var_log_t:file { read write };
。
- 强制访问控制(MAC),基于安全上下文(如
- SELinux:
-
命名空间(Namespaces):
- PID 命名空间:容器内进程 PID 从 1 开始,与宿主机隔离。
- 网络命名空间:每个容器拥有独立网络栈,通过 veth pair 连接宿主机。
六、性能优化技术详解
-
I/O 调度器选择:
- Deadline 调度器:为每个请求设置截止时间,防止饿死(适合数据库负载)。
- Kyber:针对 NVMe SSD 设计,基于队列深度动态调整。
-
内存优化:
- 透明大页(THP):自动合并 2MB 大页,减少 TLB 未命中次数(需内核配置
CONFIG_TRANSPARENT_HUGEPAGE
)。 - 内存压缩(zswap):将不活跃页压缩后存入内存,而非写入交换区。
- 透明大页(THP):自动合并 2MB 大页,减少 TLB 未命中次数(需内核配置
-
eBPF 的高级应用:
- 动态追踪:通过
bpftrace
脚本监控内核函数调用。 - 网络加速:XDP(eXpress Data Path)在网卡驱动层处理数据包,实现 DDoS 防护。
- 动态追踪:通过
总结与学习建议
Linux 的复杂性源于其广泛的应用场景和高度优化的设计。要深入理解:
-
实践方法:
- 使用
strace
跟踪系统调用:strace -f -o log.txt gcc hello.c
。 - 通过
/proc
和/sys
实时查看内核状态:cat /proc/meminfo
。
- 使用
-
源码学习:
- 阅读内核源码(如进程调度代码在
kernel/sched/
目录)。 - 使用 QEMU + GDB 调试内核启动流程。
- 阅读内核源码(如进程调度代码在
-
性能分析工具:
perf
:分析 CPU 热点(perf record -g ./program
)。ftrace
:跟踪内核函数调用链。
通过结合理论、代码和工具,可以逐步掌握 Linux 的核心机制,为系统级开发和运维打下坚实基础。
人的精神思想方面的优势越大,给无聊留下的空间就越小。 —叔本华
相关文章:
Linux---架构概览
一、Linux 架构分层的深度解析 1. 用户空间(User Space) 用户空间是应用程序运行的环境,与内核空间隔离,确保系统稳定性。 应用程序层: 用户程序:如 edge、vim,通过调用标准库(如 …...
dnf妖气追踪找门方案
第一种 跟之前一样还是确定boss的 位置,但是妖气追踪有几个boss位置重复的思路就是分两大类第一类就是boss位置不一样的,第二类在boss位置一样的大类 下面再分一一个小类, 这个小类就是boss位置重复的下面判断 第一个门蓝色人的位置 来确定后面门的路线还有一种情况就是在选择…...
【C语言练习题】整数和实数在计算机中的二进制表示
1. 请写出下列十进制整数在计算机中的二进制存储形式(假设为16位整数): 32767: -1: 32768: -2: 答案: 0111111111111111 1111111111111111 1000000000000000 1111111111111110 解…...
OSCP:Windows 服务提权详解
在Windows操作系统中,服务是一种特殊的后台进程,它们通常以较高的权限(如 SYSTEM 或 Administrator)运行。攻击者可以通过控制服务的创建、配置或运行过程实现权限提升(提权)。本文将详细分析Windows服务提…...
寻找两个正序数组的中位数:分治法与二分查找的结合
寻找两个正序数组的中位数:分治法与二分查找的结合 在算法领域,“寻找两个正序数组的中位数” 是一道经典的高频面试题(LeetCode 第 4 题)。它不仅考察基本的数组操作,还涉及二分查找与分治思想的结合。今天ÿ…...
Python-基于PyQt5,json和playsound的通用闹钟
前言:刚刚结束2024年秋季学期的学习,接下来我们继续来学习PyQt5。由于之前我们已经学习了PyQt5以及PyUIC,Pyrcc和QtDesigner的安装,配置。所以接下来我们一起深入PyQt5,学习如何利用PyQt5进行实际开发-基于PyQt5,json和…...
51单片机开发:定时器中断
目标:利用定时器中断,每隔1s开启/熄灭LED1灯。 外部中断结构图如下图所示,要使用定时器中断T0,须开启TE0、ET0。: 系统中断号如下图所示:定时器0的中断号为1。 定时器0的工作方式1原理图如下图所示&#x…...
循序渐进kubernetes-RBAC(Role-Based Access Control)
文章目录 概要Kubernetes API了解 Kubernetes 中的 RBACRoles and Role Bindings:ClusterRoles and ClusterRoleBindings检查访问权限:外部用户结论 概要 Kubernetes 是容器化应用的强大引擎,但仅仅关注部署和扩展远远不够,集群的安全同样至…...
在Scene里面绘制编辑工具
功能要求 策划要在scene模式下编辑棋子摆放。用handle.GUI绘制来解决了。 问题 在scene模式下编辑产生的数据,进入游戏模式后就全不见了。改为executeAlways也没用。我的解决办法是把编辑数据序列化保存到本地。在OnEnable的时候再读取。但是我忽然想到ÿ…...
深入探索 Vue 3 Markdown 编辑器:高级功能与实现
目录 1. 为什么选择 Markdown 编辑器?2. 选择合适的 Markdown 编辑器3. 安装与基本配置安装 配置 Markdown 编辑器代码说明 4. 高级功能实现4.1 实时预览与双向绑定4.2 插入图片和图像上传安装图像上传插件配置图像上传插件 4.3 数学公式支持安装 KaTeX配置 KaTeX 插…...
动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践
利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…...
具身智能研究报告
参考: (1)GTC大会&Figure:“具身智能”奇点已至 (2)2024中国具身智能创投报告 (3)2024年具身智能产业发展研究报告 (4)具身智能行业深度:发展…...
LabVIEW春节快乐
尊敬的LabVIEW开发者与用户朋友们: 灵蛇舞动辞旧岁,春风送暖贺新年!值此癸巳蛇年新春佳节来临之际,向每一位深耕LabVIEW开发领域的伙伴致以最诚挚的祝福:愿您与家人在新的一年里平安顺遂、阖家幸福,事业如…...
MybatisX插件快速创建项目
一、安装插件 二、创建一个数据表测试 三、IDEA连接Mysql数据库 四、选择MybatiX构造器 五、配置参数 六、项目结构...
技术周总结 01.13~01.19 周日(Spring Visual Studio git)
文章目录 一、01.14 周二1.1)问题01:Spring的org.springframework.statemachine.StateMachine 是什么,怎么使用?:如何使用StateMachine: 1.2)问题02:Spring StateMachine 提供了一系列高级特性 …...
【C++】List的模拟实现
文章目录 1.ListNode 结构体2.List成员变量与typedef3.迭代器iterator4.begin()、end()、size()、empty()、构造函数5. insert()、erase()6.push_back()、pop_back()、push_front()、pop_front()7.拷贝构造、赋值、析构8.总代码 以后有时间会更新其它成员函数 1.ListNode 结构…...
剑指 Offer II 002. 二进制加法
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20002.%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%8A%A0%E6%B3%95/README.md 剑指 Offer II 002. 二进制加法 题目描述 给定两个 01 字符串 a 和 b ,请计算…...
(15)基于状态方程的单相自耦变压器建模仿真
1. 引言 2. 单相降压自耦变压器的状态方程 3. 单相降压自耦变压器的simulink仿真模型 4. 实例仿真 5. 总结 1. 引言 自耦变压器的原边和副边之间存在直接的电气连接,所以功率是通过感应和传导从原边转移到副边的,这与双绕组变压器不同,后者的原边和副边是电气隔离的。从…...
03.01、三合一
03.01、[简单] 三合一 1、题目描述 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数…...
.git/hooks/post-merge 文件的作用
.git/hooks/post-merge 文件是 Git 版本控制系统中的一个钩子(hook)脚本,其作用是在合并(merge)操作完成后自动执行一些特定的操作。以下是关于 .git/hooks/post-merge 文件作用的详细解释: 作用 自动化任…...
SpringBoot项目创建
一、创建新的工程 二、配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…...
评估训练模型所需的算力
1.模型规模(核心因素) 1.1 参数量决定算力下限: 10亿参数模型:需约1-10 PetaFLOP/s-days(等效1万亿次浮点运算持续1天) 千亿参数(如GPT-3):约3,000-5,000 PetaFLOP/s-days 万亿参数模型:超过50,000 PetaFLOP/s-days 1.2 显存需求公式: 显存(GB) ≈ (参数量 20 by…...
Tez 0.10.1安装
个人博客地址:Tez 0.10.1安装 | 一张假钞的真实世界 具体安装步骤参照官网安装手册即可。此处只对官网手册进行补充。 从官网下载apache-tez-0.10.1-bin.tar.gz进行安装未成功,出现下面的异常。最终按照官网源代码编译的方式安装测试成功。 环境 Had…...
代码随想录算法训练营第三十八天-动态规划-完全背包-139.单词拆分
类似于回溯算法中的拆分回文串题目是要求拆分字符串,问这些字符串是否出现在字典里。但这道题可以反着来考虑,从字典中的单词能不能组成所给定的字符串 如果这样考虑, 这个字符串就背包,容器字典中的单词就是一个一个物品问题就转…...
selenium clear()方法清除文本框内容
在使用Selenium进行Web自动化测试时,清除文本框内容是一个常见的需求。这可以通过多种方式实现,取决于你使用的是哪种编程语言(如Python、Java等)以及你的具体需求。以下是一些常见的方法: 1. 使用clear()方法 clear…...
新增文章功能
总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 之前又偷懒几天。回老家没事干,玩也玩不好,一玩老是被家里人说。写代码吧还是,他们都看不懂&a…...
【设计测试用例自动化测试性能测试 实战篇】
🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 设计测试用例…...
【算法与数据结构】动态规划
目录 基本概念 最长递增子序列(中等) 最大子数组和(中等) 基本概念 重叠子问题 一个问题可以被分解为多个子问题,并且这些子问题在求解过程中会被多次重复计算。例如,在计算斐波那契数列时,…...
扣子平台音频功能:让声音也能“智能”起来。扣子免费系列教程(14)
在数字化时代,音频内容的重要性不言而喻。无论是在线课程、有声读物,还是各种多媒体应用,音频都是传递信息、增强体验的关键元素。扣子平台的音频功能,为开发者和内容创作者提供了一个强大而灵活的工具,让音频的使用和…...
【CS61A 2024秋】Python入门课,全过程记录P4(Week7 Generators开始,更新于2025/1/29)
文章目录 关于基本介绍👋新的问题更好的解决方案Week7Mon Generators阅读材料Lab 05: Iterators, MutabilityQ1: WWPD: List-MutationQ2: Insert Items 关于 个人博客,里面偶尔更新,最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&…...
JUC--ConcurrentHashMap底层原理
ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同?ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…...
【Linux网络编程】网络层说明
目录 前言: 1,网络层介绍 2,IP协议 3,IP协议的格式 4,网段划分 5,特殊的IP地址 6,私有IP地址和公网IP地址 前言: 网络层对于程序员来说不太重要,这方面知识大致了…...
002-基于Halcon的图像几何变换
本节将简要介绍Halcon中有关图像几何变换的基本算子及其应用,主要涉及五种常见的二维几何变换形式:平移、镜像、旋转、错切和放缩。这几种变换可归结为一类更高级更抽象的空间变换类型,即仿射变换(Affine transformationÿ…...
unity学习22:Application类其他功能
目录 1 是否允许后台运行 1.1 Application.runInBackground,显示是否允许后台运行 1.2 设置的地方 2 打开URL 2.1 Application.OpenURL("") 打开超链接 3 退出游戏 3.1 Application.Quit() 退出游戏 4 场景相关 5 返回游戏状态 6 控制游戏的行…...
配置cursor进行Java springboot项目开发
本文用于记录如何配置cursor进行Java SpringBoot项目开发,因为项目团队同事基本都是在使用idea开发工具,所以在尝试cursor新ide的时候发现还是有一些小坑要处理一下的。 首先为了后续在多个不同的java项目之间进行切换的时候不想翻来覆去的总配置指定jdk…...
ChirpIoT技术的优势以及局限性
ChirpIoT是一种由上海磐启微电子开发的国产无线射频通讯技术,ChirpIoT技术基于磐启多年对雷达等线性扩频信号的深入研究,并在此基础上对线性扩频信号的变化进行了改进,实现了远距离传输的一种无线通信技术。相关产品型号有E29-400T22D、E290-…...
ODP(OBProxy)路由初探
OBProxy路由策略 Primary Zone 路由 官方声明默认情况,会将租户请求发送到租户的 primary zone 所在的机器上,通过 Primary Zone 路由可以尽量发往主副本,方便快速寻找 Leader 副本。另外,设置primary zone 也会在一定成都上减少…...
【25考研】人大计算机考研复试该怎么准备?有哪些注意事项?
人大毕竟是老牌985,复试难度不会太低!建议同学认真复习!没有机试还是轻松一些的! 一、复试内容 由公告可见,复试包含笔试及面试,没有机试! 二、参考书目 官方无给出参考书目,可参照…...
阿里云域名备案
一、下载阿里云App 手机应用商店搜索"阿里云",点击安装。 二、登录阿里云账号 三、打开"ICP备案" 点击"运维"页面的"ICP备案"。 四、点击"新增网站/App" 若无备案信息,则先新增备案信息。 五、开始备案...
实现基础的shell程序
1. 实现一个基础的 shell 程序,主要完成两个命令的功能 cp 和 ls 1.1.1. cp 命令主要实现: ⽂件复制⽬录复制 1.1.2. ls 命令主要实现: ls -l 命令的功能 1.1. 在框架设计上,采⽤模块化设计思想,并具备⼀定的可扩…...
yolov5错误更改与相关参数详解(train.py)
1.错误更改 main中相关参数 if __name__ __main__:parser argparse.ArgumentParser()parser.add_argument(--weights, typestr, default, helpinitial weights path)parser.add_argument(--cfg, typestr, defaultmodels/yolov5s.yaml, helpmodel.yaml path)parser.add_arg…...
(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源
文章目录 Springboot 整合多动态数据源 这里有mysql(分为master 和 slave) 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码,不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql(分为maste…...
20.Word:小谢-病毒知识的科普文章❗【38】
目录 题目 NO1.2.3文档格式 NO4.5 NO6.7目录/图表目录/书目 NO8.9.10 NO11索引 NO12.13.14 每一步操作完,确定之后记得保存最后所有操作完记得再次删除空行 题目 NO1.2.3文档格式 样式的应用 选中应用段落段落→开始→选择→→检查→应用一个一个应用ctr…...
arkui-x跨平台与android java联合开发
华为鸿蒙系统采用的是arkts,支持跨平台crossplatform 即前端为arkts,arkui-x框架,后端为其他的语言框架。 本篇示例后端采用的是java,android studio工程。 主要方式是前端鸿蒙完成界面元素、布局等效果,后面androi…...
G. Rudolf and CodeVid-23
题目链接:Problem - G - Codeforces 题目大意: 一种病有 n≤10 种症状。 一种病情可以用一个长度为 n 的01 串表示,其中第 i 个字符表示是否出现该种症状。 现有 m(∑m≤103) 种药,每种药用两个无交集的 01 串表示。第一个 01…...
基于STM32的智能宠物喂食器设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 定时喂食模块远程控制与视频监控模块食物存量检测与报警模块语音互动与用户交互模块数据记录与智能分析模块 控制算法 定时与手动投喂算法食物存量检测与低存量提醒算法数据记录与远程反馈算法 代码实现 喂食控制代码存量检测…...
css中的animation
css的animation animation是一个综合属性,是animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, animation-play-state, and animation-timeline这些属性的简写 不过在…...
[内网安全] 内网渗透 - 学习手册
这是一篇专栏的目录文档,方便读者系统性的学习,笔者后续会持续更新文档内容。 如果没有特殊情况的话,大概是一天两篇的速度。(实验多或者节假日,可能会放缓) 笔者也是一边学习一边记录笔记,如果…...
VMware 中Ubuntu无网络连接/无网络标识解决方法【已解决】
参考文档 Ubuntu无网络连接/无网络标识解决方法_ubuntu没网-CSDN博客 再我们正常使用VMware时,就以Ubuntu举例可能有时候出现无网络连接,甚至出现无网络标识的情况,那么废话不多说直接上教程 环境:无网络 解决方案&#…...
区块链在能源行业的创新
技术创新 1. 智能合约与自动化交易 智能合约是区块链技术的核心组件之一,它允许在没有中介的情况下自动执行合同条款。在能源行业,这可以用于自动化电力交易、支付流程以及管理复杂的供应链。例如,当太阳能板产生的电量达到预设值时&#x…...