当前位置: 首页 > news >正文

Linux共享内存深度解析:从内核机制到云原生应用

引言:超越进程边界的内存魔术

在Linux系统的进程间通信(IPC)领域,共享内存(Shared Memory)如同魔法镜子般的存在——不同进程透过它看到相同的内存镜像。这种机制摒弃了数据拷贝,直击性能瓶颈,成为高频交易系统、实时数据库等场景的核心技术。本文将深入剖析其实现原理,揭秘生产环境中的最佳实践,并探讨其在云原生时代的演进。


一、共享内存的双重面孔
1.1 System V vs POSIX
# System V共享内存
$ ipcs -m  # 查看共享内存段
key        shmid      owner      perms      bytes      nattch    
0x0000a123 65536      appuser    600        1048576    3         # POSIX共享内存
$ ls -l /dev/shm/
-rw-r----- 1 appuser appgroup 1048576 Jun 1 10:00 posix_shm

核心差异

  • 标识方式:System V使用key_t标识,POSIX使用文件名

  • 生命周期:System V需显式删除,POSIX随文件系统持久化

  • API设计:System V较陈旧,POSIX更符合现代编程习惯

1.2 内核实现机制
// 内核数据结构(简化)
struct shmid_kernel {struct kern_ipc_perm shm_perm; // 权限信息unsigned long shm_segsz;       // 段大小struct file *shm_file;         // 关联的tmpfs文件atomic_t shm_refcnt;           // 引用计数
};
  • 内存映射:通过tmpfs文件系统实现

  • 页表同步:各进程页表项指向相同物理页

  • 写时复制(COW):仅在修改时创建副本


二、核心操作全流程
2.1 System V共享内存实战
// 创建共享内存
int shm_id = shmget(IPC_PRIVATE, 1024, IPC_CREAT | 0666);// 附加到进程空间
char *shm_ptr = shmat(shm_id, NULL, 0);// 写入数据
strcpy(shm_ptr, "Shared Data");// 分离内存
shmdt(shm_ptr);// 删除内存段
shmctl(shm_id, IPC_RMID, NULL);
2.2 POSIX共享内存进阶
// 创建/打开共享内存对象
int fd = shm_open("/posix_shm", O_CREAT | O_RDWR, 0666);
ftruncate(fd, 1024);  // 设置大小// 内存映射
char *ptr = mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);// 原子操作示例
__atomic_store_n(ptr, 42, __ATOMIC_SEQ_CST);  // 无锁写入
三、同步机制:共享内存的守护者
3.1 同步方案对比
机制延迟 (ns)适用场景示例API
信号量120简单计数器同步sem_wait/sem_post
互斥锁80临界区保护pthread_mutex_lock
自旋锁35极短临界区atomic_flag
RCU(读-拷贝)10高频读、低频写rcu_read_lock
3.2 无锁编程实践
// 使用CAS(Compare-and-Swap)实现无锁队列
struct Node {int data;struct Node *next;
};void push(struct Node **head, int data) {struct Node *new_node = malloc(sizeof(struct Node));new_node->data = data;do {new_node->next = *head;} while (!__atomic_compare_exchange_n(head, &new_node->next, new_node, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST));
}
四、性能调优秘籍
4.1 大页内存(Hugepage)配置
# 查看大页信息
$ grep Huge /proc/meminfo
AnonHugePages:    2048 kB
HugePages_Total:    1024
HugePages_Free:     1024# 挂载大页文件系统
mount -t hugetlbfs nodev /dev/hugepages# C代码使用大页
shm_id = shmget(key, 2*1024*1024, IPC_CREAT | SHM_HUGETLB | 0666);
4.2 NUMA架构优化
// 绑定内存到NUMA节点
mbind(ptr, size, MPOL_BIND, numa_nodes_ptr, numa_nodes_num, 0);
4.3 性能基准数据
配置吞吐量 (GB/s)延迟 (ns)
普通页(4KB)12.485
大页(2MB)15.8 (+27%)62
NUMA绑定17.2 (+39%)58

五、安全与容器化实践
5.1 安全加固方案
# 设置访问权限
shmctl(shm_id, IPC_SET, { .uid=1000, .gid=1000, .mode=0660 });# SELinux策略
allow app_t shm_t:file { read write };# 加密共享内存
cryptsetup open --type plain /dev/shm/secure shm_crypt --key-file key.bin
5.2 Docker容器集成
# 设置共享内存大小
docker run --shm-size="2g" myapp# Kubernetes配置
apiVersion: v1
kind: Pod
spec:containers:- name: appvolumeMounts:- name: dshmmountPath: /dev/shmvolumes:- name: dshmemptyDir:medium: MemorysizeLimit: 2Gi
六、故障排查工具箱
6.1 常用命令
# 查看System V共享内存
ipcs -m# 监控/dev/shm使用
df -h /dev/shm# 追踪共享内存访问
strace -e trace=shmat,shmdt,mmap ./app# 检测内存泄漏
valgrind --tool=memcheck --leak-check=full ./app
6.2 常见问题处理
  • 幽灵内存段

    # 查找未释放的共享内存
    ipcs -m | grep '<user>'# 强制删除
    ipcrm -m <shmid>

    内存踩踏
    使用AddressSanitizer检测:

    gcc -fsanitize=address -o app app.c

七、现代应用场景
7.1 实时数据库引擎
// 使用共享内存实现内存表
struct Table {atomic_int row_count;Row rows[MAX_ROWS];
};// 多进程并发访问
void insert_row(struct Table *t, Row row) {int idx = atomic_fetch_add(&t->row_count, 1);t->rows[idx] = row;
}

 7.2 AI推理加速

# Python通过ctypes访问共享内存
import ctypes
lib = ctypes.CDLL('./shmlib.so')
lib.init_shared_memory()# PyTorch直接使用共享内存张量
shm_tensor = torch.UntypedStorage.from_file("/dev/shm/tensor_data", size=1024)
7.3 云原生服务网格
// Go语言共享内存通信
func main() {ptr, _ := syscall.Mmap(0, 0, 4096, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED|syscall.MAP_ANON)copy(ptr, "Cloud Native!")
}
结语:共享内存的未来之舞

从1972年Unix V2首次引入共享内存概念,到如今支撑着每秒百万级交易的金融系统,这项技术始终焕发着生机。在eBPF、持久化内存(PMEM)等新技术加持下,共享内存正演进出更强大的形态——跨机器的分布式共享内存硬件加速的原子操作。理解其核心原理并掌握现代实践方法,将帮助开发者在性能至上的时代占据先机。

相关文章:

Linux共享内存深度解析:从内核机制到云原生应用

引言&#xff1a;超越进程边界的内存魔术 在Linux系统的进程间通信&#xff08;IPC&#xff09;领域&#xff0c;共享内存&#xff08;Shared Memory&#xff09;如同魔法镜子般的存在——不同进程透过它看到相同的内存镜像。这种机制摒弃了数据拷贝&#xff0c;直击性能瓶颈&…...

Vue Router全局拦截

Vue Router全局拦截全攻略 一、为什么需要全局拦截&#xff1f; 最近在开发后台管理系统时&#xff0c;突然发现所有页面都需要登录才能访问。如果每个页面都手动检查登录状态&#xff0c;那代码简直要写成意大利面条了。这时候&#xff0c;Vue Router的全局拦截功能就像个贴…...

从0开始学linux韦东山教程第三章问题小结(3)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。说实在的越看视频越感觉他讲的有点乱后续将以他的新版PDF手册为中心&#xff0c;视频作为辅助理解的工具。参考手册为嵌入式Linux应用开发…...

【前端】【css】【总复习】三万字详解CSS 知识体系

🌈 CSS 知识体系目录大纲 一、基础知识入门 1. CSS 简介与作用 CSS(Cascading Style Sheets,层叠样式表)是一种用于给 HTML 页面添加样式的语言,作用是让网页更美观、结构更清晰、布局更灵活。 核心作用: 控制网页元素的 颜色、字体、间距、边框、背景布局网页元素位置…...

Linux 进程等待

1、进程等待 僵尸进程 是一个比较麻烦的问题&#xff0c;如果不对其做出处理&#xff0c;僵尸进程 就会越来越多&#xff0c;导致 内存泄漏 和 标识符 占用问题 进程一旦变成僵尸状态&#xff0c;那就刀枪不入&#xff0c;“杀人不眨眼”的kill -9 也无能为力&#xff0c;因为…...

轻量服务器与宝塔

因为访问宝塔面板是需要在安全组设置一下开放端口&#xff0c;比如这里是42450 但是我们用的轻量服务器是把安全组这种功能削减了的&#xff0c;所以我就去尝试修改了一下防火墙设置 然后就可以访问了...

深入理解AMBA总线(六)AHB-lite Slave响应和其它控制信号

上一篇文章给大家介绍了AHB-lite的一些控制信号&#xff0c;重点是通过这些控制信号去理解AHB-lite为什么这么设计&#xff0c;采用这些控制信号有什么好处。这节课给大家带来剩余的一些控制信号介绍。 ** 1、Slave Response Signaling ** 1.1、Slave Transfer Responses …...

app加固

1、什么是加固? 我们之前讲的逆向,大多数都是用加密算法去加密一些明文字符串,然后把得到的结果用 Base64、Hex等进行编码后提交。加固其实也一样&#xff0c;只不过他通常加密的是 dex文件而已。但是 dex 文件加密以后&#xff0c;安卓系统是没法直接运行的。所以加固的核心&…...

Linux架构篇、第三章_2_Linux服务器监控与NGINX优化

Linux_架构篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a; 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.11 适用环境: Centos7 文档说明 本文围绕 Linux 服务器监控与 NGINX 优化展开。介绍了 sysst…...

第26节:卷积神经网络(CNN)-数据增强技术(PyTorch)

1. 引言 在深度学习领域,数据增强(Data Augmentation)是提升卷积神经网络(CNN)性能的关键技术之一。通过人为地扩展训练数据集,数据增强能够有效提高模型的泛化能力,防止过拟合,特别是在训练数据有限的情况下。本文将全面介绍PyTorch框架下的数据增强技术,包括基本原理、…...

架构思维:通用架构模式_怀疑下游的设计思路与最佳实践

文章目录 1. 引言2. 为什么要“怀疑下游”3. 三大类下游依赖及应对方案3.1 对其他微服务的依赖3.1.1 分布式事务简易补偿方案3.2 对数据库的依赖3.3 对消息中间件的依赖 4. 分布式事务实战案例5. 小结 1. 引言 在 架构思维&#xff1a;通用架构模式_从设计到代码构建稳如磐石的…...

[Java实战]Spring Boot 中Starter机制与自定义Starter实战(九)

[Java实战]Spring Boot 中Starter机制与自定义Starter实战&#xff08;九&#xff09; 引言 Spring Boot 的 Starter 是其“约定优于配置”理念的核心体现&#xff0c;通过简化依赖管理和自动配置&#xff0c;极大提升了开发效率。本文将深入剖析 Starter 的设计思想、实现原…...

C++23 views::repeat (P2474R2) 深入解析

文章目录 引言C20 Ranges库回顾什么是Rangesstd::views的作用 views::repeat概述基本概念原型定义工作原理应用场景初始化容器模拟测试数据 总结 引言 在C的发展历程中&#xff0c;每一个新版本都会带来一系列令人期待的新特性&#xff0c;这些特性不仅提升了语言的性能和表达…...

【第三十五周】Janus-pro 技术报告阅读笔记

Janus-Pro 摘要Abstract文章信息引言方法Janus 架构Janus 训练Janus-Pro 的改进 实验结果总结 摘要 本篇博客介绍了Janus-Pro&#xff0c;这是一个突破性的多模态理解与生成统一模型&#xff0c;其核心思想是通过解耦双路径视觉编码架构解决传统方法中语义理解与像素生成的任务…...

基于Qt的app开发第七天

写在前面 笔者是大一下计科生&#xff0c;标题这个项目是笔者这个学期的课设&#xff0c;与学长共创&#xff0c;我负责客户端部分&#xff0c;现在已经实现了待办板块的新建、修改。 这个项目目前已经走上正轨了&#xff0c;博主也实现了主要功能的从无到有&#xff…...

第二十二节:图像金字塔-拉普拉斯金字塔

在数字图像处理的奇幻世界中,存在着一种能够连接不同视觉维度的神秘阶梯——图像金字塔。这种独特的结构让计算机视觉算法能够在不同尺度下观察和理解图像特征,而其中的拉普拉斯金字塔更是隐藏着图像细节重构的终极奥秘。 一、金字塔的数学基础:从高斯到拉普拉斯 1.1 高斯金…...

Flutter基础()

导航栏 appBar: AppBar() title: const Text(搜索) //标题 backgroundColor: Colors.blue //背景颜色 centerTitle: true //标题居中leading 属性 作用&#xff1a; 放置在应用栏左侧的控件&#xff0c;通常是一个图标按钮&#xff0c;用于导航或打开菜单。 AppBar(le…...

ES面试题系列「一」

1、Elasticsearch 是什么&#xff1f;它与传统数据库有什么区别&#xff1f; 答案&#xff1a;Elasticsearch 是一个基于 Lucene 的分布式、开源的搜索和分析引擎&#xff0c;主要用于处理大量的文本数据&#xff0c;提供快速的搜索和分析功能。与传统数据库相比&#xff0c;E…...

Oracle 通过 ROWID 批量更新表

Oracle 通过 ROWID 批量更新表 在 Oracle 数据库中&#xff0c;使用 ROWID 进行批量更新是一种高效的更新方法&#xff0c;因为它直接定位到物理行位置&#xff0c;避免了通过索引查找的开销。 ROWID 基本概念 ROWID 是 Oracle 数据库中每一行的唯一物理地址标识符&#xff…...

罗技无线鼠标的配对方法

罗技鼠标的配对方法&#xff1a; 重新连接鼠标 请按照以下步骤将鼠标与 USB 接收器重新配对。 1.将USB接收器插入计算机。 2.将鼠标关闭电源。 3.按住并持续按住向右按钮&#xff0c;直到操作结束。 4.切换鼠标电源。 5. 单击一次左侧按钮。 6. 单击一次中间按钮。 7.全部松开&…...

移动应用开发的六大设计原则

在移动应用开发中&#xff0c;遵循设计原则能大幅提升代码的可维护性和扩展性。本文以一个简单的学生管理系统为例&#xff0c;解析六大核心设计原则的实践方法。 1. 单一职责原则 优点&#xff1a; 提高可维护性&#xff1a;一个类只负责一项职责&#xff0c;代码的功能会更…...

LLM初识

从零到一&#xff1a;用 Python 和 LLM 构建你的专属本地知识库问答机器人 摘要&#xff1a; 随着大型语言模型&#xff08;LLM&#xff09;的兴起&#xff0c;构建智能问答系统变得前所未有的简单。本文将详细介绍如何使用 Python&#xff0c;结合开源的 LLM 和向量数据库技…...

【CTF】Linux Shell RCE绕过(bypass)技术总结

在Linux环境下&#xff0c;远程代码执行&#xff08;RCE&#xff0c;Remote Code Execution&#xff09;是一种常见的攻击手段。然而&#xff0c;许多系统会对命令注入进行过滤或限制&#xff0c;例如禁止特定关键字&#xff08;如system&#xff09;、斜杠&#xff08;/&#…...

深入理解 Linux 权限控制机制

引言 在 Linux 系统中&#xff0c;权限控制是保障系统安全的核心机制。通过限制用户对文件和资源的访问&#xff0c;它能有效防止未授权操作&#xff0c;保护数据不被篡改或泄露。合理设置权限不仅有助于实现用户隔离和最小权限原则&#xff0c;还能降低系统被滥用或攻击的风险…...

技术书籍推荐(002)

20. 利用Python进行数据分析 免费 电子书 PDF 下载 书籍简介&#xff1a; 本书聚焦于使用Python进行数据处理和分析。详细介绍了Python中用于数据分析的重要库&#xff0c;如NumPy&#xff08;提供高效的数值计算功能&#xff0c;包括数组操作、数学函数等&#xff09;、panda…...

[SAP] SAP ERP用户参数设置

菜单路径 个人默认值的设置(数值&#xff0c;日期&#xff0c;时间) 个人参数值的设置 在给参数设置参数值后&#xff0c;当用户登录到对应功能页面时&#xff0c;这些参数值就会自动带出来 例如&#xff0c;我们分别对上述AAT&#xff0c;VKO以及VTW这3个参数设置了参数值&am…...

Python中,async和with结合使用,有什么好处?

在Python的异步编程中&#xff0c;async和with的结合使用&#xff08;即async with&#xff09;为开发者提供了一种优雅且高效的资源管理模式。这种组合不仅简化了异步代码的编写&#xff0c;还显著提升了程序的健壮性和可维护性。以下是其核心优势及典型应用场景的分析&#x…...

【信息系统项目管理师】第3章:信息系统治理 - 29个经典题目及详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

python实战项目69:基于Python爬虫的链家二手房数据采集方法研究

python实战项目69:链家二手房数据采集 一、项目需求1.1 房地产数据价值1.2 传统数据获取局限性1.3 技术可行性二、数据采集流程2.1 需求分析2.2 网页结构分析2.3 请求发送与反爬策略2.4 数据解析2.5 数据存储三、结论与展望四、完整代码一、项目需求 本文针对房地产数据分析需…...

PowerShell 脚本中文乱码处理

问题描述 脚本带中文&#xff0c;执行时命令行窗口会显示出乱码 示例 Write-Host "测试成功&#xff01;"解决方法 问了DeepSeek&#xff0c;让确认是不是 UTF8 无 BOM 格式 事实证明方向对了 但是确认信息有偏差 改成 UTF8 with BOM 使用任意支持修改编码的文本…...

SpEL(Spring Expression Language)使用详解

SpEL&#xff08;Spring Expression Language&#xff09;是 Spring 框架中一种强大的表达式语言&#xff0c;支持在运行时动态查询和操作对象图。它与 Spring 生态深度集成&#xff0c;广泛应用于依赖注入、数据绑定、AOP、安全规则等场景。以下是其核心语法、应用场景及使用示…...

论文阅读与写作:《从探索到突破:解密科研和论文写作的思维密码》

文章目录 一、如何做科研1.科研的步骤2.课题选择3.快速入门一个新领域&#xff1a;读论文&#xff0c;先读综述(1)自己看论文的时候&#xff0c;每篇论文花3-5分钟记录一下自己的idea和一些瞬间的想法(2)高质量文献&#xff1a;顶会顶刊(3)如何检索 4.注重团队协作与学术交流5.…...

免费公共DNS服务器推荐

当自动获取的DNS或本地运营商的DNS出现问题&#xff0c;可能导致软件无法连接服务器。此时&#xff0c;手动修改电脑的DNS设置或许能解决问题。许多用户觉得电脑上网速度慢、游戏卡顿&#xff0c;归咎于DNS问题。确实&#xff0c;我们可以自行设置一个DNS来改善网络体验。不少用…...

CK-S650-PA60S半导体专用读写器|读写头与绿联RS232串口转接头联机测试说明

CK-S650-PA60S半导体专用读写器|读写头是一款国产替代欧姆龙V640系列&#xff0c;支持德州仪器公司(TI)制造的RI-TRP-DR2B、RI-TRP-WR2B-40低频玻璃管标签|射频标签读写&#xff0c;广泛应用半导体硅片盒、晶圆盒、花篮等RFID插件识别与产品追溯领域。 CK-S650-PA60S半导体专用…...

Babel 基础使用指南:从安装到编译的完整流程

Babel 是当今前端开发中不可或缺的工具&#xff0c;它允许开发者使用最新的 JavaScript 特性&#xff0c;同时确保代码能在各种浏览器和环境中运行。本文将带你从零开始学习 Babel 的基础使用&#xff0c;涵盖安装、配置到实际编译的全过程。 1. 安装 Babel 和插件 首先&…...

uniapp-商城-52-后台 商家信息(商家信息数据,云对象使用)

1、概述 已经通过好几个篇幅来说明商家信息&#xff0c;包括logo、商家名称&#xff0c;地址&#xff0c;电话以及商家简介。通过表单组件和标签&#xff0c;以及我们的文件上传标签&#xff0c;都做了说明。&#xff08;logo上传&#xff0c;用的文件上传组件是上传到公共的数…...

【我的创作纪念日】512

机缘 还记得 2023 年 12 月 15 日&#xff0c;我撰写了第 1 篇技术博客&#xff1a;《oracle 跟踪文件--审计日志》。从此&#xff0c;这平凡的一天&#xff0c;赋予了我不平凡的意义。在那一刻&#xff0c;我已在创作这趟旅程中出发&#xff0c;并立志将工作中的经验总结&…...

共享内存与信号量结合

在Linux系统中&#xff0c;进程间通信&#xff08;IPC&#xff09;和原子性是并发编程中的核心问题。以下是对这些概念的详细分步解释&#xff1a; 一、进程间通信&#xff08;IPC&#xff09;方法 1. 管道&#xff08;Pipe&#xff09; 匿名管道&#xff1a;用于父子进程等有…...

西门子PLC s7-1200工艺对象“轴”的应用(1)

1. 工艺对象 “ 轴 ” 的概念 在西门子 S7-1200 PLC 中&#xff0c;术语 “ 轴 ” 特指用 “ 轴 ” 工艺对象表示的驱动器工艺映像。 “ 轴 ” 工艺对象是用 户程序与驱动器之间的接口&#xff0c;用于接收用户程序中的运动控制命令、执行这些命令并监视其运行情况。 运动控制…...

ubuntu22.04在 Docker容器中安装 ROS2-Humble

22.04 安装 docker 容器并实现rviz功能 1 docker pull命令拉取包含ROS-Humble的镜像&#xff1a; docker pull osrf/ros:humble-desktop-full-jammy docker images验证该镜像是否拉取成功。 使用镜像osrf/ros:humble-desktop-full-jammy创建并运行容器 sudo docker run -it…...

【LwIP源码学习6】UDP部分源码分析

前言 本文对lwip协议栈里UDP部分的源码进行分析。将源码中最关键部分提取出来&#xff0c;梳理UDP部分的设计框架。 应用层例子 首先举一个应用层使用UDP的简单例子&#xff0c;如下&#xff1a; //第一步&#xff1a;申请套接字 sock socket(AF_INET, SOCK_DGRAM, 0); //…...

Python Cookbook-7.10 在 MySQL 数据库中储存 BLOB

任务 想把一个二进制的大对象(BLOB)存入MySQL数据库 解决方案 MySQLdb 模块并不支持完整的占位符,不过可以使用模块的escape_string 函数来解决: import MySQLdb,cPickle #连接到数据库,用你的本机来测试数据库,并获得游标 connection = MySQLdb.connect(db = "tes…...

LWIP的ICMP协议

ICMP协议简介 ICMP协议是一个网络层协议 背景&#xff1a;如果丢包了&#xff0c;IP协议并不能通知传输层是否丢包以及丢包的原因。因此我们需要ICMP协议来完成这样的功能 为什么需要ICMP协议 1&#xff0c;IP 协议本身不提供差错报告和差错控制机制来保证数据报递交的有效…...

Spring Web MVC响应

返回静态页面 第一步 创建html时&#xff0c;要注意创建的路径&#xff0c;要在static下面 第二步 把需要写的内容写到body内 第三步 直接访问路径就可以 返回数据ResponseBody RestController Controller ResponseBody Controller&#xff1a;返回视图 ResponseBody&…...

STM32智能窗帘系统:从零到一的开发实战

简介 智能窗帘控制系统是智能家居领域的经典应用,随着物联网技术的不断发展,其功能从简单的远程控制演变为具备环境感知、多设备联动和跨平台兼容的智能系统。本篇文章将全面解析基于STM32的智能窗帘系统开发方案,从硬件设计到软件实现,再到企业级扩展功能,提供完整的代码…...

第三方评测机构如何凭借专业公正提供高可靠性软件检测服务?

第三方评测机构与软件开发及使用单位保持独立&#xff0c;凭借其专业技能和公正立场&#xff0c;为企业提供多样化的软件检测服务。这些检测结果的可靠性极高&#xff0c;不仅有助于企业减轻负担&#xff0c;节省人力和物力资源&#xff0c;而且赢得了业界的普遍认可。下面&…...

相或为K(位运算)蓝桥杯(JAVA)

这个题是相或为k&#xff0c;考察相或的性质&#xff0c;用俩个数举例子&#xff0c;011001和011101后面的数不管和哪个数相或都不可能变成前面的数&#xff0c;所以利用这个性质我们可以用相与运算来把和k对应位置的1都积累起来&#xff0c;看最后能不能拼起来k如果能拼起来k那…...

X.509证书详解

文章目录 1. X.509证书基础1.1 什么是X.509证书1.2 X.509证书结构1.3 证书编码格式2. Java中的X509Certificate2.1 类层次结构2.2 核心方法3. 获取X509Certificate对象3.1 从文件加载证书3.2 从KeyStore获取证书3.3 从HTTPS连接获取证书4. 创建自签名证书5. 证书验证5.1 基本验…...

深入浅出:Spring Boot 中 RestTemplate 的完整使用指南

在分布式系统开发中&#xff0c;服务间通信是常见需求。作为 Spring 框架的重要组件&#xff0c;RestTemplate 为开发者提供了简洁优雅的 HTTP 客户端解决方案。本文将从零开始讲解 RestTemplate 的核心用法&#xff0c;并附赠真实地图 API 对接案例。 一、环境准备 在 Spring…...

C++23 views::repeat (P2474R2) 写一篇博客

文章目录 std::views::enumerate 简介使用示例性能和灵活性与其他视图的结合使用总结 C23 标准引入了众多令人期待的新特性&#xff0c;其中 std::views::enumerate 便是一个备受瞩目的新增视图。这个新特性通过为迭代器提供索引和元素的组合&#xff0c;极大地简化了对集合中…...