redis持久化原理相关面试题剖析
一、Redis 持久化的机制是什么?
Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次
Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置
既然redis的数据可以保存在磁盘上,那么这个流程是什么样的呢?
- (1)客户端向服务端发送写操作(数据在客户端的内存中)。
- (2)数据库服务端接收到写请求的数据(数据在服务端的内存中)。
- (3)服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。
- (4)操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。
- (5)磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。
前三步是由redis完成的,后两步是由OS完成的
这5个过程是在理想条件下一个正常的保存流程,但是在大多数情况下,我们的机器等等都会有各种各样的故障,这里划分了两种情况
(1)Redis数据库发生故障,只要在上面的第三步执行完毕,那么就可以持久化保存,剩下的两步由操作系统替我们完成。
(2)操作系统发生故障,必须上面5步都完成才可以。
为应对以上5步操作,redis提供了两种不同的持久化方式:RDB(Redis DataBase)和AOF(Append Only File)
RDB和AOF都可以在redis.conf进行相关配置
RDB是什么
在指定的时间间隔能对你的数据进行快照存储。是将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),保存的文件后缀是rdb;当Redis重新启动时,可以读取快照文件恢复数据。
AOF是什么
AOF通过记录每次对服务器写的操作(命令),当服务器重启的时候会重新执行这些命令来恢复原始的数据。
特点:
- 1. 以日志的形式来记录用户请求的写操作,读操作不会记录,因为写操作才会存储
- 2. 文件以追加的形式而不是修改的形式
- 3. redis的aof恢复其实就是通过一个伪客户端把追加的文件从开始到结尾读取 执行 写操作
二、redis持久化的RDB机制了解吗,rdb bgsave的时候存储的数据是拷贝给子进程的吗?
主要有两个命令,save命令和bgsave命令都可以生成RDB文件
在接收到save命令后,redis服务器的主进程就会读取内存和生成RDB文件,这两件事合为RDB操作,由主进程实现,所以主进程干这个事去了,就无法处理新的redis客户端的请求了,就会阻塞住。
bgsave:bgsave 通过fork一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配,fork子进程负责持久化过程,阻塞只会发生在fork子进程的时候。
bgsave在进行生成快照时,肯定要访问当前redis内存中存储的数据,那既然是快照,是否会复制当前这一时刻内存中所有的数据呢?
答案是:不会直接拷贝数据(内存使用率超过50%,直接拷贝不就gg了!!)
进行fork操作后,会利用操作系统的“写时复制”(Copy-On-Write,COW)机制:
(1)、执行bgsave命令的时候,会通过fork()创建子进程,此时子进程和父进程是共享同一片内存数据的,因为创建子进程的时候,会复制父进程的页表,但是页表指向的物理内存还是同一个
这时候,共享同一片物理内存,然后直接读取,生成临时rdb文件,生成完毕,再覆盖之前的rdb文件,就结束bgsave的流程。但是你会有一个疑问, 都是共享一片内存,那父进程这时候收到别的redis客户端请求需要写数据,那么不同样会操作同一片内存空间吗,就会造成错误。
(2)、这时就有了写时复制,只有在修改内存数据的情况时,物理内存才会被复制一份。然后各个进程各自读各自的内存,互不影响
写时复制COW
fork一个子进程,只有在父进程发生写操作修改内存数据时,才会真正去分配内存空间,并复制内存数据,而且也只是复制被修改的内存页中的数据,并不是全部内存数据
fork采用操作系统提供的写实复制(Copy On Write)机制,就是为了避 免一次性拷贝大量内存数据给子进程造成的长时间阻塞问题,但fork子进程 需要拷贝进程必要的数据结构,其中有一项就是拷贝内存页表(虚拟内存 和物理内存的映射索引表),这个拷贝过程会消耗大量CPU资源,拷贝完 成之前整个进程是会阻塞的,阻塞时间取决于整个实例的内存大小,实例 越大,内存页表越大,fork阻塞时间越久。拷贝内存页表完成后,子进程与 父进程指向相同的内存地址空间,也就是说此时虽然产生了子进程,但是 并没有申请与父进程相同的内存大小。那什么时候父子进程才会真正内存 分离呢?“写时复制”顾名思义,就是在写发生时,才真正拷贝内存真正的数据
三、聊聊redis持久化的AOF机制,AOF文件很大怎么办?
AOF 日志是写后日志,“写后”的意思是 Redis 是先执行命令,把数据写入内存,然后才记录日志,这种方式,就是先让系统执行命令,只有命令能执行成功,才会被记录到日志中,否则,系统就会直接向客户端报错。
所以,Redis使用写后日志这一方式的一大好处是,可以避免出现记录错误命令的情况;另外还有个好处是:不会阻塞当前的写操作(但可能阻塞下一个操作)。
我们看到,当命令产生的时候,我们先将命令写到AOF缓冲区,这是一块BUFFER,速度很快,而最终由操作系统以一定频率将缓冲区同步落盘到最后的AOF文件
AOF 机制给我们提供了三个选择,也就是 AOF 配置项 appendfsync的三个可选值。
- Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘;
- Everysec,每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;
- No,操作系统控制的写回:每个写命令执行完,只是先把日志写到AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。
AOF文件过大怎么办
我们知道,AOF文件存储了所有命令,这个文件很短时间就会增加到很大,随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。
AOF 重写机制就是在重写时,Redis 根据数据库的现状创建一个新的AOF 文件,也就是说,读取数据库中的所有键值对,然后对每一个键值对用一条命令记录它的写入。比如说,当读取了键值对“testkey”: “testvalue”之后,重写机制会记录 set testkey testvalue 这条命令。这样,当需要恢复时,可以重新执行该命令,实现“testkey”: “testvalue”的写入
AOF 文件是以追加的方式,逐一记录接收到的写命令的。当一个键值对被多条写命令反复修改时,AOF 文件会记录相应的多条命令。但是,在重写的时候,是根据这个键值对当前的最新状态,为它生成对应的写入命令。这样一来,一个键值对在重写日志中只用一条命令就行了,而且,在日志恢复时,只用执行这条命令,就可以直接完成这个键值对的写入了。
重写原理:
AOF 文件重写并不需要对现有的 AOF 文件进行任何读取、分析或者写 入操作,而是通过读取服务器当前的数据库状态来实现的。首先从数据库 中读取键现在的值,然后用一条命令去记录键值对,代替之前记录这个键 值对的多条命令,这就是 AOF 重写功能的实现原理。
AOF工作流程
四、请你谈谈Redis两种持久化机制的缺点,最佳实践是什么?
RDB
- 数据丢失风险:RDB 是周期性持久化,假设时间间隔为5s,第1s进行更新,第4s发送宕机,本来该第5s发送下一次快照更新,但是由于宕机,第1s和第4s之间的更新操作就丢失了,也就是说在上次快照和故障之间的数据会丢失。对于高可用需求的场景,AOF可能更合适。
- 资源开销大:由于RDB是进行全量更新,所以时间间隔不能设置太短,否则导致频繁生成快照执行fork命令等等,RDB 持久化使用 fork 生成子进程,并且占用大量内存。对于大型数据集,频繁的 RDB 持久化可能对性能产生负面影响。
- 执行时间较长:RDB 的生成需要将整个内存快照写入磁盘,对于大量数据会消耗较长时间。
AOF
-
文件体积增长较快:
- 日志膨胀:AOF 记录的是每一个写命令,随着时间推移,AOF 文件会变得非常大。即使启用了重写功能(
auto-aof-rewrite
),仍然可能遇到文件体积迅速增长的问题。 - 重写开销:虽然 Redis 提供了 AOF 重写功能来压缩日志文件,但重写过程本身也是一个耗时的操作,并且需要额外的磁盘空间。
- 日志膨胀:AOF 记录的是每一个写命令,随着时间推移,AOF 文件会变得非常大。即使启用了重写功能(
-
恢复速度较慢:
- 启动时间长:由于 AOF 文件记录了大量的命令,Redis 在重启时需要重新执行这些命令来恢复数据,这比直接加载 RDB 文件要慢得多,特别是在 AOF 文件非常大的情况下。
- 顺序执行:AOF 文件中的命令是按顺序执行的,因此恢复过程中任何一条命令的错误都可能导致整个恢复过程失败。
-
性能影响:
- 同步延迟:AOF 有三种同步策略:
no
、everysec
和always
。其中everysec
是最常见的选择,但它仍然可能引入一定的延迟,特别是在高并发写入场景下。 - 写操作开销:每次写操作都需要追加到 AOF 文件中,这对写密集型应用来说会带来额外的 I/O 开销。
- 同步延迟:AOF 有三种同步策略:
最佳实践
Redis 4.0 中提出了一个混合使用 AOF 日志和内存快照的方法。简单来说,内存快照以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。这样一来,快照不用很频繁地执行,这就避免了频繁 fork 对主线程的影响。而且,AOF 日志也只用记录两次快照间的操作,也就是说,不需要记录所有操作了,因此,就不会出现文件过大的情况了,也可以避免重写开销。
相关文章:
redis持久化原理相关面试题剖析
一、Redis 持久化的机制是什么? Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次 Redis重启时,利用…...
动态规划LeetCode-1049.最后一块石头的重量Ⅱ
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x < y。那么粉碎的可能结果如下: 如果 x y&…...
Linux Media 子系统 V4l2
一 创建 V4l2 的 entity 在Linux内核的Media Controller框架中,V4L2设备作为实体(entity)的注册过程涉及以下步骤: 1. 初始化Media Controller结构 驱动首先创建一个media_device实例,并与V4L2设备(如v4…...
民兵装备管理系统DW-S300|支持国产化、自主研发
民兵装备器材管理系统(智装备DW-S301)是一套成熟系统,依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 装备接收与登记 民兵装备抵达仓库时&#…...
Pro Git --(Windows)总结
Pro Git --Windows 文章目录 Pro Git --Windows知识来源Git入门与进阶 知识来源 廖雪峰的官方网站 Git教程 Git入门与进阶 # 初步学习Git #个人建议先大致过一遍,对Git有个大致的理解,然后在实操项目# 创建一个空目录 $ mkdir learngit $ cd learngit …...
加油口,电梯门的对称性对 TCP/IP 传输协议的启示
春节期间河南穷游屡次加油站排队加油之启示。 不考虑有意的设计因素,汽车加油口概率性分布在车身的左边或者右边,这个偶然的小细节让加油机同时为两辆车加油而无需额外的加油管。 如果所有车辆加油口都在同一侧,加油站的加油机就只能给一边的…...
【进阶】JVM篇
为什么学习jvm 1、面试的需要 学过java的程序员对jvm应该不陌生,程序员为什么要学习jvm呢?其实不懂jvm也可以照样写出优质的代码,但是不懂jvm会被大厂的面试官虐的体无完肤。 2、高级程序员需要了解 jvm作用 jvm负责把编译后的字节码转换…...
【安全靶场】信息收集靶场
靶场:https://app.hackinghub.io/hubs/prison-hack 信息收集 子域名收集 1.subfinder files.jabprisons.com staging.jabprisons.com cobrowse.jabprisons.com a1.top.jabprisons.com cf1.jabprisons.com va.cobrowse.jabprisons.com vs.jabprisons.com c…...
新数据结构(4)——Java继承
基本概念 继承的本质:重复使用已经定义好的方法和域,实现代码的重复利用。 使用继承之后,创建的子类可以方便地调用父类中已经定义的方法。 一个继承的例子: 重载和重写 重载 重载:发生在同一个类里,指…...
大数据学习之SparkStreaming、PB级百战出行网约车项目一
一.SparkStreaming 163.SparkStreaming概述 Spark Streaming is an extension of the core Spark API that enables scalable, high-throughput, fault-tolerant stream processing of live data streams. Spark Streaming 是核心 Spark API 的扩展,支持实时数据…...
介绍两个个电池充电管理芯片(TP4057、ME4069)
第一个是TP4057。 输入电压是4~6.5V TP4056,它们之间最大的区别就是TP4056最高是1A的充电电流,而TP4057是500ma,适用于更小一点的电池。 TP4057停机模式的静态电流也更小(上图列的是待机模式,但查看后面的表格发现实际…...
Debezium日常分享系列之:解码逻辑解码消息内容
Debezium日常分享系列之:解码逻辑解码消息内容 示例配置选项 DecodeLogicalDecodingMessageContent SMT将PostgreSQL逻辑解码消息的二进制内容转换为结构化形式。当Debezium PostgreSQL连接器捕获逻辑解码消息时,它会将消息事件记录发送到Kafka。默认情况…...
【Linux】smp_mb__after_atomic
文章目录 背景知识smp_mb__after_atomic 的作用具体应用场景为什么需要 smp_mb__after_atomic相关宏总结 背景知识 在现代多核处理器和并发编程中,编译器优化和CPU乱序执行可能导致程序指令的实际执行顺序与源代码中的顺序不一致。这种现象可能会破坏多线程或进程间…...
关于conda换镜像源,pip换源
目录 1. 查看当前下载源2. 添加镜像源2.1清华大学开源软件镜像站2.2上海交通大学开源镜像站2.3中国科学技术大学 3.删除镜像源4.删除所有镜像源,恢复默认5.什么是conda-forge6.pip换源 1. 查看当前下载源 conda config --show channels 如果发现多个 可以只保留1个…...
【JavaEE进阶】依赖注入 DI详解
目录 🌴什么是依赖注入 🎄依赖注入的三种方法 🚩属性注⼊(Field Injection) 🚩Setter注入 🚩构造方法注入 🚩三种注⼊的优缺点 🌳Autowired存在的问题 🌲解决Autowired存在的…...
鸿蒙HarmonyOS NEXT开发:横竖屏切换开发实践
文章目录 一、概述二、窗口旋转说明1、配置module.json5的orientation字段2、调用窗口的setPreferredOrientation方法 四、性能优化1、使用自定义组件冻结2、对图片使用autoResize3、排查一些耗时操作 四、常见场景示例1、视频类应用横竖屏开发2、游戏类应用横屏开发 五、其他常…...
自己部署 DeepSeek 助力 Vue 开发:打造丝滑的折叠面板(Accordion)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 自己…...
程序员升级进阶之路
熟悉业务、项目代码、工作流程,积极吸取技术资料接需求,画流程图,(伪代码),详细设计明确职业发展方向【很重要】求精:写代码前的技术方案设计 写代码并不难,关键是要明确为什么要写…...
C/C++后端开发面经
字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程: 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…...
【C++】策略模式
使用场景 主要目的是定义一系列可互换的算法或行为,并使它们在运行时可以根据不同的情况动态地替换。它侧重于算法的封装和替换,让客户端可以灵活地选择不同的策略来完成特定的任务。 例如,在一个游戏角色的行为系统中,角色的攻击…...
Baklib剖析企业内容管理与内容中台的主要区别解析
内容概要 在当今数字化转型的浪潮中,企业内容管理和内容中台这两种系统日益受到关注。两者虽均旨在提升企业的内容管理效率与协同能力,但却存在明显差异。企业内容管理(ECM)主要聚焦于文档的创建、存储、检索和管理,旨…...
深入了解 MySQL:从基础到高级特性
引言 在当今数字化时代,数据的存储和管理至关重要。MySQL 作为一款广泛使用的开源关系型数据库管理系统(RDBMS),凭借其高性能、可靠性和易用性,成为众多开发者和企业的首选。本文将详细介绍 MySQL 的基础概念、安装启…...
从零到一:基于Rook构建云原生Ceph存储的全面指南(上)
文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件1)Rook Operator2)Rook Discover3)Rook Agent 2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.3 获取…...
嵌入式经常用到串口,如何判断串口数据接收完成?
说起通信,首先想到的肯定是串口,日常中232和485的使用比比皆是,数据的发送、接收是串口通信最基础的内容。这篇文章主要讨论串口接收数据的断帧操作。 空闲中断断帧 一些mcu(如:stm32f103)在出厂时就已经在…...
OpenGL-基础知识(更新中)
本文基于The Cherno在Youtube上的OpenGL系列视频总结出的笔记,等这个系列视频学习完后,将更加系统详细的学习《计算机图形学编程(使用OpenGL和C 第二版)》这本书。个人认为看cherno的视频上手速度更快,而且他对基本概念…...
【多模态大模型】系列2:Transformer Encoder-Decoder——BLIP、CoCa、BEITv3
目录 1 BLIP2 CoCa3 BEITv3 1 BLIP BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation BLIP是 ALBEF 原班人马做的,基本可以看做吸收了 VLMo 思想的 ALBEF。训练的 loss 和技巧都与 ALBEF一致ÿ…...
基于CanMV IDE 开发软件对K210图像识别模块的开发
简介 CanMV IDE 是一款专为 K210 芯片设计的图形识别 Python 软件,它提供了强大的功能,帮助开发者轻松实现基于 K210 芯片的图形识别应用。无论你是初学者还是经验丰富的开发者,CanMV IDE 都能为你提供便捷的开发环境和丰富的资源。 硬件资…...
如何准备软考高级系统分析师考试
以下是针对软考高级系统分析师考试的详细备考方案,结合学习周期、阶段任务、习题选择和通过概率分析,帮助考生高效备考。 一、备考周期建议(4-6个月) 建议分为 基础阶段(2个月)→ 强化阶段(2个…...
解析RK3588无线边缘盒子为工业自动化边缘推理带来的 AI 突破
在工业自动化领域,边缘推理的高效性和准确性对于提升生产效率和质量至关重要。RK3588 凭借强大的 AI 算力,为工业自动化边缘推理带来了显著的赋能效果。 RK3588 拥有出色的多核架构和高性能的 GPU ,能够快速处理大量的数据。在工业生产线上&…...
初一说明文:我的护眼灯
本文转自:AI范文助手网 原文链接:https://www.aazhushou.com/czzw/5023.html 自爱迪生发明了灯以来,各种各样的灯相继问世了,给人一种新景象,其中护眼灯也问世了。 我有一盏台灯叫麦迪格护眼灯。那天我和母亲去商场&…...
归并排序(C# C++)
目录 1 归并排序的基本概念 2 算法步骤 2-1 分解阶段 2-2 合并阶段 3 代码实现 3-1 C#代码示例(该代码在unity环境下) 3-2 C代码示例 1 归并排序的基本概念 归并排序(Merge Sort)是一种经典的分治算法,由约翰…...
【Linux】Ubuntu Linux 系统 ——PHP开发环境
ℹ️大家好,我是练小杰,元宵节到了,在此祝大家元宵节快乐😆 新的一年里,愿你步步高升,事事如意,心想事成!! 本文是关于Linux 操作系统中部署PHP开发环境这部分基础内容,后…...
TDengine 性能测试工具 taosBenchmark
简介工具获取运行 无参数模式命令行模式配置文件模式 命令行参数配置文件参数 通用配置参数写入配置参数 数据库相关超级表相关标签列与数据列写入行为相关 查询配置参数 执行指定查询语句查询超级表 订阅配置参数数据类型对照表 配置文件示例 写入 JSON 示例查询 JSON 示例订阅…...
校园网绕过认证上网很简单
校园网绕过认证就是不用通过校园WiFi的WEB页面登录,这个WEB登录页面就是认证页面. 所谓绕过认证,就是不通过校园WiFi WEB登录页面直接上网,校园WiFi没有密码,直接就能连接上,我们连上这个WiFi的时候,它会给…...
C++ Primer 迭代语句
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
World of Warcraft [CLASSIC][Grandel] FOR THE HORDE
《World of Warcraft [CLASSIC][80猎人][Grandel]维克尼拉斯大型纪录片2025年元宵节击杀联盟主城4BOSS[为了部落!]》 World of Warcraft [CLASSIC][80猎人][Grandel]维克尼拉斯大型纪录片2025年元宵节击杀联盟主城4BOSS[为了部落!]_魔兽...
【ESP32指向鼠标】——icm20948与esp32通信
【ESP32指向鼠标】——icm20948与esp32通信 ICM-20948介绍 ICM-20948 是一款由 InvenSense(现为 TDK 的一部分)生产的 9 轴传感器集成电路。它结合了 陀螺仪、加速度计和磁力计。 内置了 DMP(Digital Motion Processor)即负责执…...
随手记:小程序setData 数据传输长度为 XXXKB,存在有性能问题!小程序长列表性能优化,uni.createIntersectionObserver
在一些小程序列表的页面,总是会看到小程序控制台的黄色警告: 这是由于data 数据过大,导致的问题 方法: 1.避免setData的数据过大,小于1024kb。 2.避免调用频繁,保证数据实时性。 3.避免未绑定在WXML的…...
双ESP8266-01S通讯UDP配置
第一台ESP8266(发送命令需要勾---发送新行) ATCWMODE3 ATCWSAP_DEF"CAR_wifi_Master","12345678",5,3 //设置本地wifi名称以及密码 ATCIPSTA_DEF"192.168.4.1" //设置本地IP ATCIFSR …...
记忆模块概述
文章目录 记忆模块概述记忆组件的定义记忆组件、链组件和Agent组件的关系设置第一个记忆组件内置记忆组件自定义记忆组件 本文将LangChain框架内所有与记忆功能有关的组件统一称为“记忆模块”。简而言之,记忆模块是一个集合体,由多个不同的记忆组件构成…...
计算机网络结课设计:通过思科Cisco进行中小型校园网搭建
上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网,当时花了几天时间查阅相关博客总算是做出来了,在验收后一直没管,在寒假想起来了简单分享一下,希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…...
算法之 数论
文章目录 质数判断质数3115.质数的最大距离 质数筛选204.计数质数2761.和等于目标值的质数对 2521.数组乘积中的不同质因数数目 质数 质数的定义:除了本身和1,不能被其他小于它的数整除,最小的质数是 2 求解质数的几种方法 法1,根…...
【论文阅读】Revisiting the Assumption of Latent Separability for Backdoor Defenses
https://github.com/Unispac/Circumventing-Backdoor-Defenses 摘要和介绍 在各种后门毒化攻击中,来自目标类别的毒化样本和干净样本通常在潜在空间中形成两个分离的簇。 这种潜在的分离性非常普遍,甚至在防御研究中成为了一种默认假设,我…...
【深入探讨 ResNet:解决深度神经网络训练问题的革命性架构】
深入探讨 ResNet:解决深度神经网络训练问题的革命性架构 随着深度学习的快速发展,卷积神经网络(CNN)已经成为图像识别、目标检测等计算机视觉任务的主力军。然而,随着网络层数的增加,训练深层网络变得愈加…...
【C】链表算法题7 -- 环形链表||
leetcode链接https://leetcode.cn/problems/linked-list-cycle-ii/description/ 问题描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到…...
设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能
在科技飞速发展的当下,我们的生活正被各类智能设备悄然改变,它们如同一位位无声的助手,渗透到我们生活的每一个角落,让生活变得更加便捷和丰富多彩。 智能插座、智能照明和简单家电设备在家居领域的应用,为我们的生活…...
【嵌入式Linux应用开发基础】read函数与write函数
目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…...
从 X86 到 ARM :工控机迁移中的核心问题剖析
在工业控制领域,技术的不断演进促使着工控机从 X86 架构向 ARM 架构迁移。然而,这一过程并非一帆风顺,面临着诸多关键挑战。 首先,软件兼容性是一个重要问题。许多基于 X86 架构开发的工业控制软件可能无法直接在 ARM 架构上运行…...
【数据结构】(7) 栈和队列
一、栈 Stack 1、什么是栈 栈是一种特殊的线性表,它只能在固定的一端(栈顶)进行出栈、压栈操作,具有后进先出的特点。 2、栈概念的例题 答案为 C,以C为例进行讲解: 第一个出栈的是3,那么 1、…...
android设置添加设备QR码信息
摘要:客户衍生需求,通过扫QR码快速获取设备基础信息,并且基于POS SDK进行打印。 1. 定位至device info的xml添加相关perference Index: vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/my_device_info.xml--- vendor/medi…...