12 - 常用类

那就别跟他们比,先跟自己比,争取今天比昨天强一些,明天比今天强一些。

1.包装类

针对八种基本数据类型封装的相应的引用类型。

有了类的特点,就可以调用类中的方法。(为什么要封装)

基本数据类型包装类
booleanBoolean
char        Character
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

1.1 装箱与拆箱

装箱:基本类型 ——> 包装类型

拆箱:包装类型 ——> 基本类型

JDK5之后,都是自动拆箱与自动装箱,不用手动控制。

自动装箱底层调用的是valueOf方法,如 Integer.valueOf()。

    /*** Parses the string argument as a signed integer in the radix* specified by the second argument. The characters in the string* must all be digits of the specified radix (as determined by* whether {@link java.lang.Character#digit(char, int)} returns a* nonnegative value), except that the first character may be an* ASCII minus sign {@code '-'} ({@code '\u005Cu002D'}) to* indicate a negative value or an ASCII plus sign {@code '+'}* ({@code '\u005Cu002B'}) to indicate a positive value. The* resulting integer value is returned.** <p>An exception of type {@code NumberFormatException} is* thrown if any of the following situations occurs:* <ul>* <li>The first argument is {@code null} or is a string of* length zero.** <li>The radix is either smaller than* {@link java.lang.Character#MIN_RADIX} or* larger than {@link java.lang.Character#MAX_RADIX}.** <li>Any character of the string is not a digit of the specified* radix, except that the first character may be a minus sign* {@code '-'} ({@code '\u005Cu002D'}) or plus sign* {@code '+'} ({@code '\u005Cu002B'}) provided that the* string is longer than length 1.** <li>The value represented by the string is not a value of type* {@code int}.* </ul>** <p>Examples:* <blockquote><pre>* parseInt("0", 10) returns 0* parseInt("473", 10) returns 473* parseInt("+42", 10) returns 42* parseInt("-0", 10) returns 0* parseInt("-FF", 16) returns -255* parseInt("1100110", 2) returns 102* parseInt("2147483647", 10) returns 2147483647* parseInt("-2147483648", 10) returns -2147483648* parseInt("2147483648", 10) throws a NumberFormatException* parseInt("99", 8) throws a NumberFormatException* parseInt("Kona", 10) throws a NumberFormatException* parseInt("Kona", 27) returns 411787* </pre></blockquote>** @param      s   the {@code String} containing the integer*                  representation to be parsed* @param      radix   the radix to be used while parsing {@code s}.* @return     the integer represented by the string argument in the*             specified radix.* @exception  NumberFormatException if the {@code String}*             does not contain a parsable {@code int}.*/public static int parseInt(String s, int radix)throws NumberFormatException{/** WARNING: This method may be invoked early during VM initialization* before IntegerCache is initialized. Care must be taken to not use* the valueOf method.*/if (s == null) {throw new NumberFormatException("null");}if (radix < Character.MIN_RADIX) {throw new NumberFormatException("radix " + radix +" less than Character.MIN_RADIX");}if (radix > Character.MAX_RADIX) {throw new NumberFormatException("radix " + radix +" greater than Character.MAX_RADIX");}int result = 0;boolean negative = false;int i = 0, len = s.length();int limit = -Integer.MAX_VALUE;int multmin;int digit;if (len > 0) {char firstChar = s.charAt(0);if (firstChar < '0') { // Possible leading "+" or "-"if (firstChar == '-') {negative = true;limit = Integer.MIN_VALUE;} else if (firstChar != '+')throw NumberFormatException.forInputString(s);if (len == 1) // Cannot have lone "+" or "-"throw NumberFormatException.forInputString(s);i++;}multmin = limit / radix;while (i < len) {// Accumulating negatively avoids surprises near MAX_VALUEdigit = Character.digit(s.charAt(i++),radix);if (digit < 0) {throw NumberFormatException.forInputString(s);}if (result < multmin) {throw NumberFormatException.forInputString(s);}result *= radix;if (result < limit + digit) {throw NumberFormatException.forInputString(s);}result -= digit;}} else {throw NumberFormatException.forInputString(s);}return negative ? result : -result;}

 代码示例:

public static void main(String[] args) {// 手动装箱 int->Integerint n1 = 100;Integer integer = new Integer(n1);Integer integer1 = Integer.valueOf(n1);// 手动拆箱 Integer -> intint i = integer.intValue();int n2 = 200;// 自动装箱 int->IntegerInteger integer2 = n2; //底层使用的是 Integer.valueOf(n2)// 自动拆箱 Integer->intint n3 = integer2; //底层仍然使用的是 intValue()方法
}

2.String类

保存的是一组字符序列。字符串的字符使用的是 Unicode 字符编码,一个字符(不区分字母还是汉字)占两个字节。

创建 String 对象的两种方式

// 直接赋值
String s = "路明非";// 调用构造器
String s1 = new String("路明非");

两者有什么不同(通过构造器创建的对象,在堆空间中会创建空间

  • 直接赋值

先从常量池查看是否有 "路明非" 数据空间,如果有,直接指向;

如果没有这重新创建,然后指向,s最终指向的是常量池的空间地址。

  • 构造器赋值

先在堆中创建空间,里面维护了value属性,指向常量池的 "路明非" 数据空间。

如果常量池没有 "路明非",创新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。

内存分布图

注意:

String 是一个 final 类,代表不可变的字符序列。改变赋值,相当于就是再创建了一个对象。

jdk 源码

String类的常见方法

equals        // 区分大小写,判断内容是否相等
equalsIgnoreCase      // 忽略大小写的判断内容是否相等
length      // 获取字符的个数,字符串的长度
indexOf    // 获取字符在字符串中第一次出现的索引,索引从0开始,如果找不到,返回-1
lastIndexOf      // 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1
substring      // 截取指定范围的子串
trim      // 去除空格
charAt      // 获取某索引处的字符

3.StringBuffer类

String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。

StringBuffer 保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高。(char[] value 这个放在堆中)

代码示例

public static void main(String[] args) {// 1. StringBuffer 的直接父类 是 AbstractStringBuilder// 2. StringBuffer 实现了 Serializable, 即 StringBuffer 的对象可以串行化// 3. 在父类中 AbstractStringBuilder 有属性 char[] value,不是 final// 该 value 数组存放 字符串内容,引出存放在堆中的// 4. StringBuffer 是一个 final 类,不能被继承// 5. 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)// 不用每次都更换地址(即不是每次创建新对象), 所以效率高于 StringStringBuffer stringBuffer = new StringBuffer("Hello");
}

String 和 StringBuffer 相互转换

public static void main(String[] args) {// String —> StringBufferString str = "Hello world";// 方式 1 使用构造器StringBuffer stringBuffer = new StringBuffer(str);// 方式 2 使用的是 append 方法StringBuffer stringBuffer1 = new StringBuffer();stringBuffer1 = stringBuffer1.append(str);// StringBuffer -> StringStringBuffer stringBuffer3 = new StringBuffer("路明非");// 方式 1 使用 StringBuffer 提供的 toString 方法String s = stringBuffer3.toString();// 方式 2: 使用构造器来搞定String s1 = new String(stringBuffer3);
}

4.StringBuilder类

一个可变的字符序列。相比于StringBuffer,StringBuilder不是线程安全的,但是速度要比StringBuffer要快。

代码示例

public static void main(String[] args) {// 1. StringBuilder 继承 AbstractStringBuilder 类// 2. 实现了 Serializable ,说明 StringBuilder 对象是可以串行化(对象可以网络传输,可以保存到文件)// 3. StringBuilder 是 final 类, 不能被继承// 4. StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder 的 char[] value;// 因此,字符序列是堆中// 5. StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用StringBuilder stringBuilder = new StringBuilder();
}

String、StringBuffer、StringBuilder的比较

  • String:不可变字符序列,效率低,但是复用率高。
  • StringBuffer:可变字符序列,效率较高,线程安全。
  • StringBuilder:可变字符序列,效率最高,线程不安全。

效率测试代码示例

    public static void main(String[] args) {long startTime;long endTime;StringBuffer buffer = new StringBuffer("");startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {buffer.append(i);}endTime = System.currentTimeMillis();System.out.println("StringBuffer 的执行时间:" + (endTime - startTime));StringBuilder builder = new StringBuilder("");startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {builder.append(i);}endTime = System.currentTimeMillis();System.out.println("StringBuilder 的执行时间:" + (endTime - startTime));String text = "";startTime = System.currentTimeMillis();for (int i = 0; i < 80000; i++) {text = text + i;}endTime = System.currentTimeMillis();System.out.println("String 的执行时间:" + (endTime - startTime));}

运行结果

如何选择

  • 如果字符串存在大量修改操作,一般使用 Stringbuilder 或 StringBuffer
  • 如果字符串存在大量修改操作,并在单线程的情况,使用 StringBuilder
  • 如果字符串存在大量修改操作,并在多线程的情况,使用 StringBuffer
  • 如果字符串很少修改,被多个对象引用,使用 String ,比如配置信息等

5.Math类

Math类包含用于执行基本数学运算的方法。

代码示例

public static void main(String[] args) {// 1.abs 绝对值int abs = Math.abs(-9);System.out.println(abs); //9// 2.pow 求幂double pow = Math.pow(2, 4); //2 的 4 次方System.out.println(pow); //16// 3.ceil 向上取整,返回>=该参数的最小整数(转成 double);double ceil = Math.ceil(3.9);System.out.println(ceil); //4.0// 4.floor 向下取整,返回<=该参数的最大整数(转成 double)double floor = Math.floor(4.001);System.out.println(floor); //4.0// 5.round 四舍五入 Math.floor(该参数+0.5)long round = Math.round(5.51);System.out.println(round); //6// 6.sqrt 求开方double sqrt = Math.sqrt(9.0);System.out.println(sqrt); //3.0// 7.random 求随机数 random 返回的是 0 <= x < 1 之间的一个随机小数// Math.random()*6 返回的是 0 <= x < 6 小数// 思考:请写出获取 a-b 之间的一个随机整数,a,b 均为整数 ,比如 a = 2, b=7// 公式就是 (int)(a + Math.random() * (b - a + 1) )for(int i = 0; i < 100; i++) {System.out.println((int)(2 + Math.random() * (7 - 2 + 1)));}// max , min 返回最大值和最小值int min = Math.min(1, 9);int max = Math.max(45, 90);System.out.println("min=" + min);System.out.println("max=" + max);
}

6.Arrays类

Arrays里面包含了一系列静态方法,用于管理和操作数组

常用方法

toString:返回数组的字符串形式
sort:排序
binarySearch:二分查找、要求是有序列表
copyOf:数组元素的复制
fill:数组元素的填充
equals:比较两个数组元素内容是否完全一致
asList:将一组值,转换成list 

7.System类 

常用方法

exit:退出当前程序
currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
gc:运行垃圾回收机制

8.BigInteger类 和 BigDecimal类

应用场景

  • BigInteger:保存比较大的整形。
  • BigDecimal:保存精度更高的浮点数。

常用方法

  • add:加
  • subtract:减
  • multiply:乘
  • divide:除

代码示例

public static void main(String[] args) {// 需要处理很大的整数,long 不够用,可以使用 BigInteger 的类BigInteger bigInteger = new BigInteger("23788888899999999999999999999");BigInteger bigInteger2 = new BigInteger("10099999999999999999999999999999999999999999999999999999999999999999999999999999999");System.out.println(bigInteger);// 在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行+ - * /BigInteger add = bigInteger.add(bigInteger2);System.out.println(add); //加BigInteger subtract = bigInteger.subtract(bigInteger2);System.out.println(subtract); //减BigInteger multiply = bigInteger.multiply(bigInteger2);System.out.println(multiply); //乘BigInteger divide = bigInteger.divide(bigInteger2);System.out.println(divide); //除
}public static void main(String[] args) {// 需要保存一个精度很高的数时,double 不够用,用BigDecimalBigDecimal bigDecimal = new BigDecimal("1999.11");BigDecimal bigDecimal2 = new BigDecimal("3");System.out.println(bigDecimal);// 如果对 BigDecimal 进行运算,比如加减乘除,需要使用对应的方法System.out.println(bigDecimal.add(bigDecimal2));System.out.println(bigDecimal.subtract(bigDecimal2));System.out.println(bigDecimal.multiply(bigDecimal2));//System.out.println(bigDecimal.divide(bigDecimal2));//可能抛出异常 ArithmeticException// 在调用 divide 方法时,指定精度即可. BigDecimal.ROUND_CEILING// 如果有无限循环小数,就会保留 分子 的精度System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));
}

输出结果

9.日期类

9.1 第一代日期类Date

  • Date:精确到毫秒,代表特定的瞬间
  • SimpleDateFormat:格式化日期。(日期 -> 文本、文本 -> 日期)

代码示例

public static void main(String[] args) throws ParseException {// Date 类是在 java.util 包// 默认输出的日期格式是国外的方式, 因此通常需要对格式进行转换Date d1 = new Date(); System.out.println("当前日期=" + d1);// 创建 SimpleDateFormat 对象,可以指定相应的格式// 这里的格式使用的字母是规定好,不能乱写SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");String format = sdf.format(d1); System.out.println("当前日期=" + format);// 把 String -> Date , 使用的 sdf 格式需要和你给的 String 的格式一样,否则会抛出转换异常            String s = "1996 年 01 月 01 日 10:20:30 星期一";Date parse = sdf.parse(s);System.out.println("parse=" + sdf.format(parse));
}

输出结果

9.2 第二代日期类Calendar

Calendar类是一个抽象类,它为特定瞬间与一组诸如YERA、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。

 代码示例

public static void main(String[] args) {// Calendar 是一个抽象类, 并且构造器是 private,通过 getInstance() 来获取实例// Calendar 没有提供对应的格式化的类,因此需要程序员自己组合来输出(灵活)// 如果需要按照 24 小时进制来获取时间, Calendar.HOUR ==改成=> Calendar.HOUR_OF_DAYCalendar c = Calendar.getInstance(); System.out.println("c=" + c);// 获取日历对象的某个日历字段System.out.println("年:" + c.get(Calendar.YEAR));// 这里为什么要 + 1, 因为 Calendar 返回月时候,是按照 0 开始编号System.out.println("月:" + (c.get(Calendar.MONTH) + 1));System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));System.out.println("小时:" + c.get(Calendar.HOUR));System.out.println("分钟:" + c.get(Calendar.MINUTE));System.out.println("秒:" + c.get(Calendar.SECOND));// Calender 没有专门的格式化方法,所以需要程序员自己来组合显示System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +c.get(Calendar.DAY_OF_MONTH) +
" " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND) );
}

输出结果

9.3 第三代日期类

JDK8新加入的

  • LocalDate:获取日期(年月日)
  • LocalTime:获取时间(时分秒)
  • LocalDateTime:获取日期 + 时间

代码示例

public static void main(String[] args) {// 1.使用 now() 返回表示当前日期时间的对象LocalDateTime ldt = LocalDateTime.now();System.out.println(ldt);// 2.使用 DateTimeFormatter 对象来进行格式化DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String format = dateTimeFormatter.format(ldt);System.out.println("格式化的日期=" + format);System.out.println("年=" + ldt.getYear());System.out.println("月=" + ldt.getMonth());System.out.println("月=" + ldt.getMonthValue());System.out.println("日=" + ldt.getDayOfMonth());System.out.println("时=" + ldt.getHour());System.out.println("分=" + ldt.getMinute());System.out.println("秒=" + ldt.getSecond());LocalDate now = LocalDate.now();System.out.println("当前年月日" + now);LocalTime now2 = LocalTime.now();System.out.println("当前时分秒" + now2);// 提供 plus 和 minus 方法可以对当前时间进行加或者减// 看看 10 天后,是什么时候 把 年月日-时分秒LocalDateTime localDateTime = ldt.plusDays(10);System.out.println("10 天后=" + dateTimeFormatter.format(localDateTime));// 看看在 60 分钟前是什么时候,把 年月日-时分秒输出LocalDateTime localDateTime2 = ldt.minusMinutes(60);System.out.println("60 分钟前 日期=" + dateTimeFormatter.format(localDateTime2));
}

输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE——学习总结

一、初识Java 运行Java程序 Java是一门半编译型、半解释型语言 先通过javac编译程序把源文件进行编译&#xff0c;编译后生成的.class文件是由字节码组成的&#xff0c;和平台无关、面向JVM的文件&#xff0c;最后启动java虚拟机来运行.class文件&#xff0c;此时JVM会将字节…

目标检测数据集 - 城市道路行驶车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

​​​数据集介绍&#xff1a;城市道路行驶车辆检测数据集&#xff0c;真实监控场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道路快速行驶车辆、城市道路慢速行驶车辆、城市道路密集行驶车辆、城市道路夜间低光行驶车辆数据等。数据集标注标签划分为 "…

python-字符替换

[题目描述] 给出一个字符串 s 和 q 次操作&#xff0c;每次操作将 s 中的某一个字符a全部替换成字符b&#xff0c;输出 q 次操作后的字符串输入 输入共 q2 行 第一行一个字符串 s 第二行一个正整数 q&#xff0c;表示操作次数 之后 q 行每行“a b”表示把 s 中所有的a替换成b输…

使用kubespray部署k8s生产环境

使用kubespray部署k8s生产环境 系统环境 OS: Static hostname: test Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 83bb7e5dbf27453c94ff9f1fe88d5f02 Virtualization: vmware Operating System: Ubuntu 22.04.4 LTS Kernel: L…

mac M1下安装PySide2

在M1下装不了PySide2, 是因为PySide2没有arm架构的包 1 先在M1上装qt5 安装qt主要是为了能用里面的Desinger, uic, rcc brew install qt5 我装完的路径在/opt/homebrew/opt/qt5 其中Designer就是用来设计界面的 rcc用resource compiler, 编绎rc资源文件的, 生成对应的py文件…

echarts legend. icon的展示

默认展示 icon展示circle圆形rect矩形roundRect圆角矩形triangle三角形diamond菱形pin水滴arrow箭头none不显示

Redis位图

简介 在我们平时开发过程中&#xff0c;会有一些bool型数据需要存取&#xff0c;比如用户一年的签到记录&#xff0c;签了是1&#xff0c;没签是0&#xff0c;要记录365天。如果使用普通的key/value&#xff0c;每个用户要记录365个&#xff0c;当用户上亿的时候&#xff0c;需…

数据中心综合解决方案

安科瑞电气股份有限公司 祁洁 acrelqj 一、方案介绍 安科瑞电气紧跟数据中心发展形式&#xff0c;推出数据中心综合解决方案&#xff0c;集成了变配电监测、电源备自投、电气接点测温、智能照明控制、电能质量监测及治理、蓄电池在线监测、精密配电监控、智能母线监控以及消…

重要经济数据对行情的影响有多大?

金融市场上的消息非常多&#xff0c;可以来自不同国家、不同大型企业&#xff0c;也可以由不同机构统计公布&#xff0c;甚至是各国政府或中央银行的发表。在宏观经济层面上&#xff0c;所有政经消息都属于金融市场的风险事件&#xff0c;大多能引起市场波动&#xff0c;因此投…

android 开机动画执行流程

android深入了解开机动画 开机动画的种类 1&#xff1a;View绘制 2&#xff1a;逐帧动画&#xff1a;比较主流的方式&#xff0c;一般动画的文件打包成 bootanimation.zip 存储到 /system/media/ 下。一般.zip文件 > 5M 就会有明显的卡顿&#xff0c;所以一般开机动画只有…

正大国际期货:期货交易需要根除的几点习惯

1、交易过多品种。对于期货交易而言&#xff0c;最不靠谱的就是同时操作多个品种。我认为的较合适的品种上限在3-4个&#xff0c;甚至更少为好。我们经常看到的截图&#xff0c;动辄十个甚至数十个品种&#xff0c;而且都盈利&#xff0c;这种截图看看就罢&#xff0c;不必认真…

Python处理时间和日期库之pytime使用详解

概要 在Python编程中,时间和日期处理是一个常见的需求。虽然Python标准库提供了强大的时间和日期处理模块,但对于一些常见的任务,例如自然语言解析时间、简单的日期计算等,标准库的使用相对复杂。pytime库提供了一种简单而直观的方法来处理时间和日期,使得这些任务变得更…

240.搜索二维矩阵

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…

宏基因组分箱(binning)|1.Metabat实战了解binning

Introduction 宏基因组学是直接从环境样本&#xff08;如土壤、水、肠道内容物等&#xff09;中回收遗传物质并进行研究的学科&#xff0c;无需对个体生物进行分离或培养。这一领域的研究为我们提供了对微生物群落多样性及其功能的深入理解。可以查看我之前写的宏基因组分析流…

汇总 |国内外医疗器械网络安全法规与标准

国内外关于医疗器械网络安全的法规和标准日益完善&#xff0c;旨在确保医疗器械在全生命周期内的网络安全&#xff0c;保障患者信息的安全和隐私&#xff0c;以及医疗器械的正常运行。不同国家和地区的法规和标准各有侧重&#xff0c;但都强调了医疗器械制造商、开发者、经营者…

Python - 深度学习系列38 重塑实体识别5-预测并行化改造

说明 在重塑实体识别4中梳理了数据流&#xff0c;然后我发现pipeline的串行效率太低了&#xff0c;所以做了并行化改造。里面还是有不少坑的&#xff0c;记录一下。 内容 1 pipeline 官方的pipeline看起来的确是比较好用的&#xff0c;主要是实现了比较好的数据预处理。因为…

Solidwokrs钣金拆图之移动面命令使用技巧

Solidwokrs钣金拆图之移动面命令使用技巧 Chapter1 Solidwokrs钣金拆图之移动面命令使用技巧Chapter2 solidworks如何删除外部参考 Chapter1 Solidwokrs钣金拆图之移动面命令使用技巧 原文链接&#xff1a;https://www.sohu.com/a/441562400_728492 今天给大家介绍一个SolidW…

IO进程线程(六)进程

文章目录 一、进程状态&#xff08;二&#xff09;进程状态切换实例1. 实例1 二、进程的创建&#xff08;一&#xff09;原理&#xff08;二&#xff09;fork函数--创建进程1. 定义2. 不关注返回值3. 关注返回值 &#xff08;三&#xff09; 父子进程的执行顺序&#xff08;四&…

【Redis数据库百万字详解】数据持久化

文章目录 一、持久化1.1、什么是持久化1.2、持久化方式1.3、RDB优缺点1.4、AOF优缺点 二、RDB持久化触发机制2.1、手动触发2.2、自动触发 三、RDB持久化配置3.1、配置文件3.2、配置查询/设置3.3、禁用持久化3.4、RDB文件恢复 四、RDB持久化案例4.1、手动持久化4.2、自动持久化案…

2024第26届大湾区国际电机博览会暨发展论坛

2024第二十六届大湾区国际电机博览会 暨发展论坛 2024第26届大湾区国际电机博览会暨发展论坛 The 26th Greater Bay Area International Motor Expo and Development Forum 时间&#xff1a;2024年12月4-6日 地址&#xff1a;深圳国际会展中心&#xff08;宝安新馆&#x…