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

来喽!!炒鸡详细的“数据在内存中的存储”真的来喽!

目录​​​​​​​

1. 整数在内存中的存储

1.1 ⼆进制介绍

1.1.1 2进制转10进制

1.1.2 10进制转2进制

1.1.3  2进制转8进制

1.1.4 2进制转16进制

1.2 原码、反码、补码

2. ⼤⼩端字节序和字节序判断

2.1 什么是⼤⼩端?

2.2 为什么有⼤⼩端?

2.3 练习

2.3.1 练习1

2.3.1.1 题目

2.3.1.2 思路

2.3.1.3 方法1

2.3.1.4 方法2(函数实现)

2.3.2 练习2

2.3.2.1 题目

2.3.2.2 思路

2.3.2.3 代码验证

2.3.3 练习3

2.3.3.1 题目

2.3.3.2 思路

2.3.3.3 代码验证

2.3.4 练习4

2.3.4.1 题目

2.3.4.2 思路

2.3.4.3 代码验证

2.3.5 练习5

2.3.5.1 题目

2.3.5.2 思路

2.3.5.3 代码验证

2.3.6 练习6

2.3.6.1 题目

2.3.6.2 思路

2.3.6.3 代码验证

2.3.6.4 为什么x86环境下,结果不同?

3. 浮点数在内存中的存储

3.1 练习

3.2 浮点数的存储

3.2.1 浮点数存的过程

3.2.2 浮点数取的过程

3.3 题⽬解析


1. 整数在内存中的存储

在了解整数在内存中的存储方式之前,我们先要了解二进制。

1.1 ⼆进制介绍

其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进制、10进制、16进制是数值的不同表⽰形式⽽已。

我们重点介绍⼀下⼆进制:

⾸先我们还是得从10进制讲起,其实10进制是我们⽣活中经常使⽤的,我们已经形成了很多尝试:

• 10进制中满10进1

• 10进制的数字每⼀位都是0~9的数字组成

其实⼆进制也是⼀样的

• 2进制中满2进1

• 2进制的数字每⼀位都是0~1的数字组成

例如 1101 就是⼆进制的数字。

1.1.1 2进制转10进制

其实10进制的123表⽰的值是⼀百⼆⼗三,为什么是这个值呢?其实10进制的每⼀位是有权重的,10进制的数字从右向左是个位、⼗位、百位....,分别每⼀位的权重是 10^0 , 10^1 , 10^2 ... 

如下图:

2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是: 2^0 , 2^1 , 2^2 ... 

如果是2进制的1101,该怎么理解呢?

1.1.2 10进制转2进制

1.1.3  2进制转8进制

• 8进制中满8进1

• 8进制的数字每⼀位都是0~7的数字组成

•在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀

个8进制位剩余不够3个2进制位的直接换算

如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制

1.1.4 2进制转16进制

  ↵  

• 16进制中满16进1

• 16进制的数字前10位都是0~9的数字组成,后6位由a~f的字母代替数字组成

• 在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位剩余不够4个⼆进制位的直接换算

如:2进制的01101011,换成16进制:0x6b,16进制表⽰的时候前⾯加0x

到这里,二进制就介绍完了

下面,我们来介绍整数的2进制表⽰⽅法

1.2 原码、反码、补码

整数的2进制表⽰⽅法有三种,即原码、反码和补码

三种表⽰⽅法均有符号位数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位。

正整数的原、反、补码都相同。

无符号的整数(>=0),没有符号位;32位都是数值位

负整数的三种表⽰⽅法各不相同。

原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

补码:反码+1就得到补码。

对于整形来说:数据存放内存中其实存放的是补码

为什么呢?

在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路

计算的时候按照补码来计算和操作,打印出来的是原码,所以需要补码先取反再+1


2. ⼤⼩端字节序和字节序判断

当我们了解了整数在内存中存储后,我们调试看⼀个细节:

#include <stdio.h>
int main()
{int a = 0x11223344;return 0;
}

我们发现,这个数字是按照字节为单位,倒着存储的。这是为什么呢?

2.1 什么是⼤⼩端?

我们存储数据有3种方法:


由于我们存进去的,我们就会怎么拿出来,所以乱序存储方法不合适

我们就采用前面2种。

数字是倒置存储的,数据在内存中存储的方式是二进制,但是在vs的内存窗口上展示的是16进制

其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:

⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处

⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处

2.2 为什么有⼤⼩端?

为什么会有⼤⼩端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8 bit 位,但是在C语⾔中除了8 bit 的 char 之外,还有16 bit 的short 型,32 bit 的 long 型(要看具体的编译器),另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度⼤于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题。因此就导致了⼤端存储模式和⼩端存储模式。

例如:⼀个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那0x11 为⾼字节, 0x22 为低字节。对于⼤端模式,就将 0x11 放在低地址中,即 0x0010 中0x22 放在⾼地址中,即 0x0011 中。⼩端模式,刚好相反。我们常⽤的 X86 结构是⼩端模式⽽KEIL C51 则为⼤端模式。很多的ARM,DSP都为⼩端模式。有些ARM处理器还可以由硬件来选择是⼤端模式还是⼩端模式。

2.3 练习

2.3.1 练习1

2.3.1.1 题目

请简述⼤端字节序和⼩端字节序的概念,设计⼀个⼩程序来判断当前机器的字节序。

2.3.1.2 思路

我们以1举例,判断编译器的存储方式(博主的是VS2020),我们只需要知道第一个字节是不是0就可以判断使大端还是小段了。


2.3.1.3 方法1

#include <stdio.h>
int main()
{int a = 1;if ((*(char*)&a) == 1){printf("小端\n");}elseprintf("大端\n");return 0;
}

2.3.1.4 方法2(函数实现)

#include<stdio.h>
int check_sys()
{int a = 1;
return (*(char*)&a);
}
int main()
{int a = 1;if (check_sys() == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}

2.3.2 练习2

2.3.2.1 题目

#include <stdio.h>
int main()
{char a= -1;signed char b=-1;unsigned char c=-1;printf("a=%d,b=%d,c=%d",a,b,c);return 0;
}

输出结果是什么?

2.3.2.2 思路

#include <stdio.h>
int main()
{char a= -1;//char类型8个比特位
//10000000 00000000 00000000 00000001---原码
//11111111 11111111 11111111 11111110---反码
//11111111 11111111 11111111 11111111---补码
//截断--->11111111---a
//整型提升---以符号位为依据进行提升,无符号数,高位补0
//11111111 11111111 11111111 11111111---补码
//10000000 00000000 00000000 00000000---反码
//10000000 00000000 00000000 00000001---原码
//-1---asigned char b=-1;//有符号整型
//10000000 00000000 00000000 00000001---原码
//11111111 11111111 11111111 11111110---反码
//11111111 11111111 11111111 11111111---补码
//截断--->11111111---b
//11111111 11111111 11111111 11111111---补码
//10000000 00000000 00000000 00000000---反码
//10000000 00000000 00000000 00000001---原码
//-1---bunsigned char c=-1;
//10000000 00000000 00000000 00000001---原码
//11111111 11111111 11111111 11111110---反码
//11111111 11111111 11111111 11111111---补码
//截断--->11111111---c
//00000000 00000000 00000000 11111111---补码/反码/原码(>0)
//255---cprintf("a=%d,b=%d,c=%d",a,b,c);//%d--打印10进制的有符号整型return 0;
}

2.3.2.3 代码验证

2.3.3 练习3

2.3.3.1 题目

#include <stdio.h>
int main()
{char a = -128;printf("%u\n",a);return 0;
}
#include <stdio.h>
int main()
{char a = 128;printf("%u\n",a);return 0;
}

输出分别是什么?

2.3.3.2 思路

#include <stdio.h>
int main()
{char a = -128;//有符号的char类型,高位是符号位
//10000000 00000000 00000000 10000000---原码
//11111111 11111111 11111111 01111111---反码
//11111111 11111111 11111111 10000000---补码
//截断--->10000000---a
//整型提升
//11111111 11111111 11111111 10000000---原码/反码/补码
//打印无符号整型---> >=0printf("%u\n",a);//%u打印无符号整型return 0;
}
#include <stdio.h>
int main()
{char a = 128;//有符号的char类型,高位是符号位
//00000000 00000000 00000000 10000000---原码
//01111111 11111111 11111111 01111111---反码
//01111111 11111111 11111111 10000000---补码
//截断--->10000000---a
//整型提升
//11111111 11111111 11111111 10000000---原码/反码/补码
//打印无符号整型---> >=0printf("%u\n",a);return 0;
}

2.3.3.3 代码验证

2.3.4 练习4

2.3.4.1 题目

#include <stdio.h>
int main()
{char a[1000];int i;for(i=0; i<1000; i++){a[i] = -1-i;}printf("%d",strlen(a));return 0;
}

输出结果是什么?

2.3.4.2 思路

求字符串长度,统计的是\0之前出现的字符个数,\0的ASCLL码值是0,所以只要找到0就好

我们来看看char类型的取值范围:

#include <stdio.h>
int main()
{char a[1000];int i;for(i=0; i<1000; i++){a[i] = -1-i;
//-1,-2,-3......-128,127,126......0
//反着转圈}printf("%d",strlen(a));//255return 0;
}

2.3.4.3 代码验证

2.3.5 练习5

2.3.5.1 题目

#include <stdio.h>
unsigned char i = 0;
int main()
{for(i = 0;i<=255;i++){printf("hello world\n");}return 0;
}
#include <stdio.h>
int main()
{unsigned int i;for(i = 9; i >= 0;i++)
{printf("%u\n",i);
}
return 0;
}

2.3.5.2 思路

#include <stdio.h>
unsigned char i = 0;//无符号char:0~255
int main()
{for(i = 0;i<=255;i++){printf("hello world\n");//死循环}return 0;
}
#include <stdio.h>
int main()
{unsigned int I;//无符号char:0~255;>=0恒成立for(i = 9; i >= 0;i++)
{printf("%u\n",i);
}
return 0;
}

2.3.5.3 代码验证

2.3.6 练习6

2.3.6.1 题目

#include <stdio.h>
int main()
{int a[4] = { 1, 2, 3, 4 };int *ptr1 = (int *)(&a + 1);int *ptr2 = (int *)((int)a + 1);printf("%x,%x", ptr1[-1], *ptr2);return 0;
}

输出结果是什么?

2.3.6.2 思路


2.3.6.3 代码验证

                  添加#,打印16进制  


2.3.6.4 为什么x86环境下,结果不同?


3. 浮点数在内存中的存储

常⻅的浮点数:3.14159、1E10等,浮点数家族包括: float、double、long double 类型。

3.1 练习

浮点型和整型数据在内存中的存储形式和取出方式都不同

我们可以通过练习来看看:

#include <stdio.h>
int main()
{int n = 9;float *pFloat = (float *)&n;printf("n的值为:%d\n",n);printf("*pFloat的值为:%f\n",*pFloat);*pFloat = 9.0;printf("num的值为:%d\n",n);printf("*pFloat的值为:%f\n",*pFloat);
return 0;
}

3.2 浮点数的存储

上⾯的代码中, num 和 *pFloat 在内存中明明是同⼀个数,为什么浮点数和整数的解读结果会差别这么⼤?

根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:

V   =  (−1) ^S ∗ M ∗ 2^E

• (−1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数

• M 表⽰有效数字,M是⼤于等于1,⼩于2的

• 2^E 表⽰指数位


IEEE 754规定:

对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M

对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M

3.2.1 浮点数存的过程

前⾯说过, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中xxxxxx表⽰⼩数部分。在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的xxxxxx部分。


E为⼀个⽆符号整数(unsigned int)

这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围0~2047

科学计数法中的E是可以出现负数的,所以IEEE 754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。


​​​​​​​

3.2.2 浮点数取的过程

指数E从内存中取出还可以再分成三种情况:

E不全为0或不全为1

这时,浮点数就采⽤下⾯的规则表⽰,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第⼀位的1

E全为0

这时,浮点数的指数E等于1-127(或者1-1023)即为真实值(E+127(1023)之后为0,有效数字M不再加上第⼀位的1,⽽是还原为0.xxxxxx的⼩数。这样做是为了表⽰±0,以及接近于0的很⼩的数字。

E全为1

这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s)

3.3 题⽬解析

#include <stdio.h>
int main()
{int n = 9;//整型存储方式,补码
//00000000 00000000 00000000 00001001---原码/反码/补码float *pFloat = (float *)&n;printf("n的值为:%d\n",n);//9printf("*pFloat的值为:%f\n",*pFloat);
//0 00000000 00000000000000000001001
//E为全0
//(-1)^0 * 0.000000000000000001001 * 2^ -126
//接近0
//%f只打印前6位
//0.000000*pFloat = 9.0;
//1001.0
//(-1)^0 * 1.001 * 2^ 3
//S=0
//M=1.001
//E=3---->3+127=130
//01000001000100000000000000000000printf("num的值为:%d\n",n);printf("*pFloat的值为:%f\n",*pFloat);//9.0
return 0;
}

本次的分享到这里就结束了!!!

PS:小江目前只是个新手小白。欢迎大家在评论区讨论哦!有问题也可以讨论的!

如果对你有帮助的话,记得点赞👍+收藏⭐️+关注➕

相关文章:

来喽!!炒鸡详细的“数据在内存中的存储”真的来喽!

目录​​​​​​​ 1. 整数在内存中的存储 1.1 ⼆进制介绍 1.1.1 2进制转10进制 1.1.2 10进制转2进制 1.1.3 2进制转8进制 1.1.4 2进制转16进制 1.2 原码、反码、补码 2. ⼤⼩端字节序和字节序判断 2.1 什么是⼤⼩端&#xff1f; 2.2 为什么有⼤⼩端? 2.3 练习 …...

【面试经典150 | 双指针】验证回文串

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;筛选判断方法二&#xff1a;原地判断 知识回顾回文串双指针字符串操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分…...

sql存储引擎

-- 查询建表语句 --可以查看引擎 show create table account; -- 可以看到默认引擎 InnoDB ENGINEInnoDB -- 查看当前数据库支持得存储引擎 show engines ; # InnoDB 默认 存储引擎 # MyISAM sql早期默认 存储引擎 # MEMORY 存储在内存中 用来做临时表和缓存 存储引擎 …...

Visual Studio 2022安装SVN插件教程

1. 第一步&#xff1a;避免踩坑&#xff0c;超级重要&#xff01;&#xff01;&#xff01;关闭Visual Studio 2022应用程序&#xff1b;&#xff08;不然插件装不上&#xff0c;一直转圈&#xff01;&#xff09; 2.第二步&#xff1a;下载Visual Studio 2022版本对应的SVN插件…...

【PyCharm Community Edition】:串口开发

串口开发 安装模块&#xff1a;pyserial端口检查&#xff1a;uartDevice自定义文件&#xff1a;SerialMonitor.py导入自定义文件&#xff1a;SerialMonitor.py延伸阅读 安装模块&#xff1a;pyserial Pyserial 是 Python 中使用串口通信的一个第三方库&#xff0c;使用它可以方…...

亲测可用!!!Centos7安装chrome+chromedriver以便实现selenium自动化详细教程

网上很多教程都是在线安装chrome&#xff0c;这样安装了最新稳定的chrome&#xff0c;可惜我遇到chromdriver的版本跟上 chrome&#xff0c;为了早日实现在centos服务selenium自动化&#xff0c;不可能去等待 chromdriver 更新&#xff0c;只能 chrome进行降版本来离线安装。花…...

spring cloud、gradle、父子项目、微服务框架搭建---cloud gateway(十)

总目录 https://preparedata.blog.csdn.net/article/details/120062997 文章目录 总目录一、简介二、order、pay服务 配置context-path三、新建gateway网关服务&#xff08;1&#xff09; 启动类添加 SpringCloudApplication 即可&#xff08;2&#xff09; application.yml 配…...

AD22使用笔记+积累库

一、前言 使用AD9习惯了&#xff0c;但是需求逐渐上来了就不够用了&#xff0c;好多快捷的新功能要新版本软件才能用&#xff0c;所以升级使用AD22 目录 1.添加层之后中间层无法布线 2.新增快捷方式CtrlW布线&#xff0c;不用点图标了 二、环境 AD22 三、正文 1.添加层之…...

20230912在ubuntu18.04下使用pigz来提高tar命令压缩解压缩的速度

20230912在ubuntu18.04下使用pigz来提高tar命令压缩解压缩的速度 2023/9/15 22:19 https://blog.csdn.net/wb4916/article/details/128447298 20221226编译Toybrick的TB-RK3588X开发板的Android12系统2-SDK预处理 4、单线程压缩。 建议使用&#xff1a;pigz多线程压缩&#xf…...

python-xpath语法-爬取彼岸图4k高清动漫壁纸

安装 pip install lxml导入 from lxml import etreexpath使用路径表达式提取html文档中的元素或元素集&#xff0c;然后元素通过沿路径path或步steps来选取数据 XPath常用语法格式 表达式描述div选取div元素的所有子元素/div选取根元素divul//li选取ul元素下的所有li子元素…...

韩信点兵:求韩信一共有多少兵

任务描述 本关任务&#xff1a;求韩信一共有多少兵。 韩信有一队兵&#xff0c;他想知道有多少人&#xff0c;便让士兵排队报数。 按从 1 至5报数&#xff0c;最末一个士兵报的数为 1&#xff1b; 按从 1 至 6 报数&#xff0c;最末一个士兵报的数为 5&#xff1b; 按从 1 …...

10个简单但超级有用的Python装饰器

装饰器&#xff08;Decorators&#xff09;是Python中一种强大而灵活的功能&#xff0c;用于修改或增强函数或类的行为。装饰器本质上是一个函数&#xff0c;它接受另一个函数或类作为参数&#xff0c;并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的…...

DataGrip 2023 年下载、安装教程、亲测可用

文章目录 前言1. 下载2. 安装3、DataGrip 常用操作4 推荐阅读 前言 DataGrip 是 JetBrains 发布的多引擎数据库环境&#xff0c;支持 MySQL 和 PostgreSQL&#xff0c;Microsoft SQL Server 和 Oracle&#xff0c;Sybase&#xff0c;DB2&#xff0c;SQLite&#xff0c;还有 Hy…...

6.SpringEL与List,Map

SpringEL与List,Map 文章目录 SpringEL与List,Map介绍Spring EL以注解的形式Spring EL以XML的形式 介绍 使用SpEL与 Map 和 List 的工作方式与Java是完全一样的 //get map whete key MapA Value("#{testBean.map[MapA]}") private String mapA;//get first value …...

【Oracle】使用 SQL Developer 连接 Oracle 数据库

文章目录 前言一、准备工作1、安装 SQL Developer2、安装 Oracle 数据库 二、连接 Oracle 数据库1、打开 SQL Developer2、连接数据库3、访问数据库 三、SQL 开发功能1、SQL Worksheet2、对象浏览器3、数据库管理 四、总结 前言 SQL Developer 是 Oracle 官方推出的一款免费的…...

PostgreSQL 事务并发锁

文章目录 PostgreSQL 事务大家都知道的 ACID事务的基本使用保存点 PostgreSQL 并发并发问题MVCC PostgreSQL 锁机制表锁行锁 总结 PostgreSQL 事务 大家都知道的 ACID 在日常操作中&#xff0c;对于一组相关操作&#xff0c;通常要求要么都成功&#xff0c;要么都失败。在关系…...

CANoe-Model Editor无法修改ARXML文件的问题、E2E在SOME/IP通信中的使用问题

1、Model Editor无法修改ARXML文件的问题 在CANoe 15软件版本中,Communication Setup导入arxml文件后,可以在model editor中打开arxml并修改配置。关闭model editor后再打开,可以看到修改的配置被保存了。 但是,当我把arxml文件从Communication Setup中移除后,再导入。此…...

Conan安装第三方依赖库时SSL验证失败解决办法

背景 c跨平台项目使用conan进行三方库依赖管理是比较通用的方案&#xff0c;更换开发环境后突然发现conan无法安装三方库了&#xff0c;报错如下&#xff1a; zlib/1.2.12: Not found in local cache, looking in remotes... zlib/1.2.12: Trying with conan-center... ERROR…...

基于springboot+vue的大学生智能消费记账系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

Java——》synchronized的使用

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...

vue+element使用阿里的图标库保存图标

阿里图标网站iconfont-阿里巴巴矢量图标库 我想使用保存图标&#xff0c;但是element的图标库没有找到可用的&#xff0c;首先在阿里的图标网站搜索保存 发现这个还不错 点击添加入库 点击购物车 点击添加至项目 点击下载到本地 把下载的压缩包里面的文件拖到自己项目里面 在m…...

Day 01 web前端基础知识

首先我们要了解什么事前端&#xff1f; 先简单用文字介绍一下&#xff1a; 一、入门知识 Web前端是指网站或应用程序的用户界面部分。它包括HTML、CSS、JavaScript等语言和技术&#xff0c;用于创建用户可浏览和交互的网页。Web前端的特点在于其交互性和动态性&#xff0c;可…...

Redis 高可用之持久化

目录 Redis 高可用 Redis 持久化 RDB 持久化 触发条件 执行流程 启动时加载 修改配置文件 AOF 持久化 配置 执行流程 命令追加(append) 文件写入(write)和文件同步(sync) 文件重写(rewrite) 文件重写的流程 RDB和AOF的优缺点 Redis 高可用 在web服务器中&…...

生成元 rust解法

如果x加上x的各个数字之和得到y&#xff0c;就说x是y的生成元。给出n&#xff08;1≤n≤100000&#xff09;&#xff0c;求n的最小生成元。无解输出0。例如&#xff0c;n216&#xff0c;121&#xff0c;2005时的解分别为198&#xff0c;0&#xff0c;1979。 【分析】 本题看起来…...

某ERP系统存在RCE漏洞

文章目录 前言声明一、产品简介二、影响资产三、资产发现四、漏洞测试五、修复方案前言 企望制造纸箱行业ERP系统存在RCE漏洞,攻击者可通过特定Payload注入获取敏感信息。 声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直…...

ElasticSearch 因为索引字段改变,平滑迁移索引

问题&#xff1a; 某个索引创建时&#xff0c;没有按照想要的mapping,进行创建。 有个字段是text&#xff0c;不是想要的keyWord 此时需要重新按照mapping创建新索引&#xff0c;并迁移数据&#xff0c; 一、不使用别名的方式迁移 1. 创建新索引&#xff1a; 使用 Elastics…...

invalid use of incomplete type ‘class Ui::xxx‘

MainWindow 引用自定义窗口报错&#xff1a;invalid use of incomplete type class Ui::xxx mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "form.h" form.cpp #include "form.h" #include "…...

变压器寿命预测(python代码,Logistic Regression模型预测效果一般,可以做对比实验)

1.数据来源官网&#xff1a;Data for: Root cause analysis improved with machine learning for failure analysis in power transformers - Mendeley Data 点Download All 10kb即可下载数据 2.下载下来后是这样 每一列的介绍&#xff1a; Hydrogen 氢气&#xff1b; Oxyge…...

微信小程序-增加隐私协议弹窗

真的加了非常之久&#xff0c;非常简单的一个功能&#xff0c;但是因为之前没弄过&#xff0c;加上系统有点bug,软件也有点抽风...... 在微信后台配置-更新用户隐私协议信息增加 "__usePrivacyCheck__" : true, 9月15号之后不加也行&#xff0c;好象今天刚刚好9月15…...

分布式事务解决方案之可靠消息最终一致性

分布式事务解决方案之可靠消息最终一致性 什么是可靠消息最终一致性事务 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息&#xff0c;事务参与方(消息消费者)一定能 够接收消息并处理事务成功&#xff0c;此方案强调的是只要消息发给事务参与方最终…...