第十三章 常用类

一、包装类

1. 包装类的分类

(1)针对八种基本数据类型相应的引用类型—包装类

(2)有了类的特点,就可以调用类中的方法。

在这里插入图片描述

2. 包装类和基本数据的转换

  1. jdk5 前的手动装箱和拆箱方式,装箱:基本类型转包装类型,拆箱:包装类型转基本类型
  2. jdk5以后(含idk5)的自动装箱和拆箱方式
  3. 自动装箱底层调用的是 valueOf 方法
  4. 其它包装类的用法类似,不一一举例

3. 包装类型和 String 类型的相互转换

public class Demo {
    public static void main(String[] args) {

        Integer i = 100;
        String str1 = i +"";
        String str2 = i.toString();
        String str3 = String.valueOf(i);

        Integer i1 = Integer.parseInt(str1);
        Integer i2 = new Integer(str2);
        
    }

}

4. 包装类的常用方法

public class Demo {
    public static void main(String[] args) {

        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);

        System.out.println(Character.isDigit('a')); // 判断是不是数字
        System.out.println(Character.isLetter('a')); // 判断是不是字母
        System.out.println(Character.isUpperCase('a')); // 判断是不是大写
        System.out.println(Character.isLowerCase('a')); // 判断是不是小写

        System.out.println(Character.isWhitespace('a')); // 判断是不是空格
        System.out.println(Character.toUpperCase('a')); // 转成大写
        System.out.println(Character.toLowerCase('a')); // 转成小写

    }

}

5. Integer 类面试题

public class Demo {
    public static void main(String[] args) {

        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j); // false

        Integer m = 1;
        Integer n = 1;
        System.out.println(m == n); // true

        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y); // false

        /*
            public static Integer valueOf(int i) {
                if (i >= IntegerCache.low && i <= IntegerCache.high)
                    return IntegerCache.cache[i + (-IntegerCache.low)];
                return new Integer(i);
            }
            -128 to 127
        * */
    }

}

二、String 类

1. String 类的理解和创建对象

  1. String 对象用于保存字符串,也就是一组字符序列
  2. 字符串常量对象是用双引号括起的字符序列。例如:“你好”、"12.97”、“boy”
  3. 字符串的字符使用 Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。

2. 创建 String 对象的两种方式

  1. 方式一:直接赋值 String str1 = "hsp";
  2. 方式二:调用构造器 String str2 = new String("hsp");
  • 方式一:先从常量池查看是否有 “hsp”数据空间。如果有,直接指向;如果没有则重新创建,然后指向。最终指向的是 常量池 的空间地址。
  • 方式二:先在堆中创建空间,里面维护了value属性,指向常量池的“hsp”空间。如果常量池没有,重新创建,如果有,直接通过value指向。最终指向的是 中的空间地址
    在这里插入图片描述
public class Demo {
    public static void main(String[] args) {

        String a = "abc";
        String b = "abc";
        System.out.println(a.equals(b)); // true
        System.out.println(a == b); // true

        String c = new String("abc");
        String d = new String("abc");
        System.out.println(c.equals(d)); // true
        System.out.println(c == d); // false

        String e = "hsp";
        String f = new String("hsp");
        System.out.println(e.equals(f)); // true
        System.out.println(e == f); // false
        System.out.println(e == f.intern()); // true
        System.out.println(f == f.intern()); // false
        // intern() 方法最终返回的是常量池的地址(对象)
    }

}

3. String 类的常见方法

String 类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此 Java设计者还提供了 StringBuilderStringBuffer 来增强 String 的功能,并提高效率。

public class Demo {
    public static void main(String[] args) {

        String str1 = "Hello";
        String str2 = "hello";

        // equals:区分大小写,判断内容是否相等
        System.out.println(str1.equals(str2)); // false
        // equalsIgnoreCase:忽略大小写,判断内容是否相等
        System.out.println(str1.equalsIgnoreCase(str2)); //true
        // length:获取字符串的长度
        System.out.println(str1.length()); // 5
        // indexOf:获取字符在字符串中第一次出现的索引
        System.out.println(str1.indexOf('e')); // 1
        System.out.println(str1.indexOf('E')); // -1
        System.out.println(str1.indexOf("ll")); // 2
        //lastIndexOf:取字符在字符串中最后一次出现的索引
        System.out.println(str1.lastIndexOf('e')); // 1
        // substring(a):从索引a开始截取后面所有的内容
        System.out.println(str1.substring(2)); //llo
        // substring(a,b):从索引a开始截取,截取到索引b-1位置
        System.out.println(str1.substring(2, 4)); // ll

        //toUpperCase:转大写
        System.out.println(str2.toUpperCase()); //HELLO
        //toLowerCase:转小写
        System.out.println(str2.toLowerCase()); // hello
        //concat:拼接字符串
        System.out.println(str1.concat(str1).concat(str2)); // HelloHellohello

        //replace:替换字符串中的字符
        String str3 = "宝玉,薛宝钗,薛宝钗,薛宝钗";
        System.out.println(str3.replace("薛宝钗", "林黛玉")); // 宝玉,林黛玉,林黛玉,林黛玉

        // split:分割字符串,对于某些分割字符,需要转义
        String[] split1 = str3.split(",");
        System.out.println(Arrays.toString(split1)); // [宝玉, 薛宝钗, 薛宝钗, 薛宝钗]

        String str4 = "E:\\aaa\\bb";
        String[] split2 = str4.split("\\\\");
        System.out.println(Arrays.toString(split2)); // [E:, aaa, bb]

        char[] charArray = str1.toCharArray();
        System.out.println(Arrays.toString(charArray)); // [H, e, l, l, o]        
    }
}

4. StringBuffer 类

java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删。

很多方法与String相同,但StringBuffer是 可变长度 的。

StringBuffer是一个容器。

String VS StringBuffer

  1. String 保存的是字符串 常量,里面的值不能更改,每次 String 类的更新实际上就是更改地址,效率较低
  2. StringBuffer 保存的是字符串 变量,里面的值可以更改,每次 StringBuffer 的更新实际上可以更新内容,不用每次更新地址,效率较高
public class Demo {
    public static void main(String[] args) {
        String str = "hello";
        
        StringBuffer stringBuffer1 = new StringBuffer(str);

        StringBuffer stringBuffer2 = new StringBuffer();
        stringBuffer2.append(str);

        String str1 = stringBuffer1.toString();

        String str2 = new String(stringBuffer1);
    }
}
public class Demo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("hello");

        // 增
        sb.append(',');
        sb.append("张三丰");
        sb.append(',');
        sb.append("赵敏");
        System.out.println(sb); // hello,张三丰,赵敏

        // 删
        // 删除索引 [5,9) 的字符
        sb.delete(5, 9);
        System.out.println(sb); // hello,赵敏

        // 改
        // 替换 [6,8)的字符
        sb.replace(6, 8, "周芷若");
        System.out.println(sb);// hello,赵敏

        // 查
        // 查找指定的子串在字符串第一次出现的索引
        System.out.println(sb.indexOf("张三丰")); // -1
        System.out.println(sb.indexOf("周芷若")); // 6

        // 插
        // 在索引位置插入子串
        sb.insert(6, "赵敏");
        System.out.println(sb); // hello,赵敏周芷若

        // 长度
        System.out.println(sb.length()); // 11
    }
}

5. StringBuilder 类

StringBuilder 是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步(StringBuilder 不是线程安全)。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。

6. String、StringBuffer 和 StringBuilder 的比较

  1. String:不可变字符序列,效率低,但是复用率高
  2. StringBuffer:可变字符序列、效率较高(增删)、线程安全
  3. StringBuilder:可变字符序列、效率最高、线程不安全

7. String、StringBuffer 和 StringBuilder 的选择

  1. 如果字符串存在大量的修改操作,并在单线程的情况,使用 StringBuilder
  2. 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
  3. 如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等

三、Math 类(P481)

Math 类包含,用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

(1)abs:绝对值
(2)pow:求幂
(3)ceil:向上取整【返回 >= 该参数的最小整数】
(4)floor:向下取整【返回 <= 该参数的最大整数】
(5)round:四舍五入
(6)sqrt:求开方
(7)random:求随机数【返回的是 0 <= x < 1 之间的随机小数】
(8)max:求两个数的最大值
(9)min:求两个数的最小值

public class Demo {

    public static void main(String[] args) {

        // 求幂
        double pow = Math.pow(2, 4); // 2的4次方
        System.out.println(pow); // 16.0

        // ceil 向上取整,返回 >= 该参数的最小整数
        double ceil1 = Math.ceil(-3.2);
        double ceil2 = Math.ceil(3.2);
        System.out.println(ceil1); // -3.0
        System.out.println(ceil2); // 4.0

        // sqrt:求开方
        double sqrt = Math.sqrt(9.0);
        System.out.println(sqrt); // 3.0

        // random:求随机数【返回的是 0 <= x < 1 之间的随机小数】
        double random1 = Math.random();
        // 请写出获取a-b之间的一个随机整数a,b均为整数?2 <= x <= 7
        double random2 = 2 + Math.random() * 6;
    }
}

四、Arrays 类(P482)

Arrays 里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)。

(1)tostring:返回数组的字符串形式
(2)sort :排序(自然排序和定制排序)
(3)binarySearch:通过二分搜索法进行查找,要求必须排好序的数组
(4)copyOf:数组元素的复制
(5)fill:数组元素的填充
(6)equals:比较两个数组元素内容是否完全一致
(7)asList:将一组值,转换成ist

public class Demo {

    public static void main(String[] args) {

        // tostring:返回数组的字符串形式
        Integer[] arr1 = {1, 20, 30};
        System.out.println(Arrays.toString(arr1)); // [1, 20, 30]

        // sort排序:(自然排序和定制排序)
        // 自然排序
        Integer[] arr2 = {1, -1, 7, 50};
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2)); // [-1, 1, 7, 50]

        // 定制排序
        Integer[] arr3 = {1, -1, 7, 50};
        // o1 - o2 :升序
        // o2 - o1 :降序
        Arrays.sort(arr3, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println(Arrays.toString(arr3)); // [50, 7, 1, -1]

        // binarySearch:通过二分搜索法进行查找,要求必须排好序的数组
        Integer[] arr4 = {-1, 1, 7, 50};
        int index1 = Arrays.binarySearch(arr4, 1);
        System.out.println(index1); // index1 = 1
        // 如果数组中不存在该元素,就返回 -(low +1)
        // low 为,如果存在的索引位置
        int index2 = Arrays.binarySearch(arr4, 5); // low:2
        System.out.println(index2); // index1 = -3

        // copyOf:数组元素的复制4
        Integer[] arr5 = {-1, 1, 7, 50};
        int len1 = arr5.length - 1;
        Integer[] newArr1 = Arrays.copyOf(arr5, len1); // [-1, 1, 7]
        System.out.println(Arrays.toString(newArr1));
        // 如果拷贝长度 > 原数组长度,后面添加 null
        int len2 = arr5.length + 1;
        Integer[] newArr2 = Arrays.copyOf(arr5, len2); // [-1, 1, 7, 50, null]
        System.out.println(Arrays.toString(newArr2));
        // 如果拷贝长度 < 0,抛出异常
        int len3 = -1;
        Integer[] newArr3 = Arrays.copyOf(arr5, len3); 
        System.out.println(Arrays.toString(newArr3));

        // fill:数组元素的填充
        Integer[] arr6 = {-1, 1, 7, 50};
        // 用 99 替换原数组所有元素
        Arrays.fill(arr6,99);
        System.out.println(Arrays.toString(arr6)); // [99, 99, 99, 99]

        // equals:比较两个数组元素内容是否完全一致
        Integer[] arr7 = {-1, 1, 7, 50};
        Integer[] arr8 = {-1, 1, 7, 50};
        System.out.println(Arrays.equals(arr7,arr8)); // true

        // asList:将一组值,转换成ist
        Integer[] arr9 = {-1, 1, 7, 50};
        List<Integer> aslist = Arrays.asList(arr9);
        /*
            aslist 运行类型 class java.util.Arrays$ArrayList
            是 Arrays类的 静态内部类
            private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable
         */
        System.out.println(aslist.getClass());
    }
}

五、System类(P486)

(1)exit:退出当前程序
(2)arraycopy:复制数组元素,比较适合底层调用。一般使用 Arrays.copyOf() 完成复制数组
(3)currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
(4)gc:运行垃圾回收机制 System.gc();

public class Demo {

    public static void main(String[] args) {
        Integer[] arr = {-1, 1, 7, 50};
        Integer[] destArr = new Integer[4]; // {0,0,0,0};
 
        /*
            五个参数:
            参数一:src【源数组】
            参数二:srcPos【源数组开始拷贝的索引位置】
            参数三:dest【目标数组】
            参数四:destPos【目标数组开始拷贝的索引位置】
            参数五:length【源数组拷贝的数据长度】
         */
        System.arraycopy(arr, 0, destArr, 0, arr.length);
    }
}

六、Biglnteger 和 BigDecimal 类(P487)

(1)Biglnteger 适合保存比较大的整型
(2)BigDecimal 适合保存精度更高的浮点型(小数)

public class Demo {

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("10000");
        BigDecimal bigDecimal = new BigDecimal("20.88");
    }
}

(1)add加
(2)subtract减
(3)multiply乘
(4)divide除【divide 可以指定精度:BigDecimal.ROUND_CEILING等等】

七、日期类(P488)

1. 第一代日期类 Date

(1)Date:精确到毫秒,代表特定的瞬间
(2)SimpleDateFormat:格式和解析日期的类
在这里插入图片描述

public class Demo {

    public static void main(String[] args) throws ParseException {
        Date date = new Date(); // 获取当前系统时间
        System.out.println(date); // Mon Jul 25 20:42:17 CST 2022

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
        String format = sdf.format(date);
        System.out.println(format); // 2022年07月25日 08:42:17 星期一

        Date parse = sdf.parse(format);
        System.out.println(parse); // Mon Jul 25 08:42:17 CST 2022
    }
}

2. 第二代日期类 Calendar (日历)

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {

(1)Calendar类 是一个抽象类,并且构造器是 protected。只能通过 getInstance() 来获取实例

(2)它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法

public class Demo {

    public static void main(String[] args) throws ParseException {
        Calendar instance = Calendar.getInstance();
        // 获取日历对象的某个日历字段
        System.out.println("年:"+instance.get(Calendar.YEAR));
        System.out.println("月:"+(instance.get(Calendar.MONTH)+1));
        System.out.println("日:"+instance.get(Calendar.DAY_OF_MONTH));
        System.out.println("小时(12):"+instance.get(Calendar.HOUR));
        System.out.println("小时(24):"+instance.get(Calendar.HOUR_OF_DAY));
        System.out.println("分钟:"+instance.get(Calendar.MINUTE));
        System.out.println("秒:"+instance.get(Calendar.SECOND));
    }
}

3. 第三代日期类

3.1 前面两代日期类的不足分析

JDK1.0中包含了一个 java.util.Date 类,但是它的大多数方法已经在 JDK1.1 引入 Calendar 类之后被弃用了。

而 Calendar 也存在问题是:
(1)可变性:像日期和时间这样的类应该是不可变的
(2)偏移性:Date中的年份是从1900开始的,而月份都从0开始
(3)格式化:格式化只对Date有用,Calendar则不行
(4)此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)。

3.2 第三代日期类常见方法

LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期时间/年月日时分秒)JDK8加入

LocalDate只包含日期,可以获取日期字段
LocalTime只包含时间,可以获取时间字段
LocalDateTime包含日期+时间,可以获取日期和时间字段

public class Demo {
    public static void main(String[] args) throws ParseException {
        LocalDateTime now = LocalDateTime.now();
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        
        System.out.println(now); // 2022-07-26T00:04:00.395

        System.out.println(now.getYear()); // 2022
        System.out.println(now.getMonth()); // JULY
        System.out.println(now.getMonthValue()); // 7
        System.out.println(now.getDayOfMonth()); // 26
        System.out.println(now.getHour()); // 0
        System.out.println(now.getMinute()); // 4
        System.out.println(now.getSecond()); // 0
    }
}

3.3 DateTimeFormatter格式日期类

类似于 SimpleDateFormat

public class Demo {

    public static void main(String[] args) throws ParseException {
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now); // 2022-07-26T00:38:30.801

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String format = dtf.format(now);
        System.out.println(format); // 2022-07-26 00:38:30
    }
}

3.4 Instant 时间戳

类似于 Date

public class Demo {

    public static void main(String[] args) throws ParseException {
        Instant now = Instant.now();
        System.out.println(now); // 2022-07-25T16:43:09.732Z

        Date date = Date.from(now);
        Instant instant = date.toInstant();
    }
}

3.5 第三代日期类更多方法

提供 plusminus 方法可以对当前时间进行加或者减

public class Demo {

    public static void main(String[] args) throws ParseException {
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now); // 2022-07-26T00:50:49.265

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(dtf.format(now)); // 2022-07-26 00:50:49

        // 890 天后
        LocalDateTime ldt1 = now.plusDays(890);
        System.out.println(dtf.format(ldt1)); // 2025-01-01 00:50:49

        // 180 分钟前
        LocalDateTime ldt2 = now.minusMinutes(180);
        System.out.println(dtf.format(ldt2)); // 2022-07-25 21:50:49
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】信号和槽机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

操作系统之《PV操作》【知识点+详细解题过程】

1、并发进程 &#xff1a; 并发的实质是一个处理器在几个进程之间的多路复用&#xff0c;并发是对有限的物理资源强制行使多用户共享&#xff0c;消除计算机部件之间的互等现象&#xff0c;以提高系统资源利用率。 &#xff08;1&#xff09;并发进程——互斥性&#xff1a; 进…

使用Jetpack Compose实现具有多选功能的图片网格

使用Jetpack Compose实现具有多选功能的图片网格 在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。在本文中,我们将展示如何使用Jetpack Compose实现类似的多选行为,最终效果如下: 主要步骤 实现…

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;。AOF文件是一个只追加的文件&…

Redis 高级数据结构业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 hyperloglog 、GEO、bitmap、布隆过滤器的介绍和业务实践 1、HyperLogLog 1.1、功能 基数统计&#xff08;去重&#xff09; 1.2、redis api 命令作用案例PFADD key element [element ...]添加元素到keyPF…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX&#xff0c;安装后&#xff0c;运行 &#xff0c;默认用户是admin 密码是admin&#xff0c;然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机&#xff0c;添加了10001、10002、9999 三个分机&#xff0c…

深度学习实验第T2周:彩色图片分类

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 目标 二、我的环境&#…

【Linux进程通信】进程间通信介绍、匿名管道原理分析

目录 进程通信是什么&#xff1f; 进程通信的目的 进程通信的本质 匿名管道&#xff1a;基于文件级别的通信方式 站在文件描述符角度-深度理解管道原理 进程通信是什么&#xff1f; 进程通信就是两个或多个进程之间进行数据层面的交互。 进程通信的目的 1.数据传输&#x…

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!!

已解决java.security.acl.LastOwnerException&#xff1a;无法移除最后一个所有者的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查当前所有者数量 2. 添加新的所有者 3. 维…

mac Canon打印机连接教程

官网下载安装驱动&#xff1a; 选择打印机类型和mac系统型号下载即可 Mac PS 打印机驱动程序 双击安装 系统偏好设置 点击“”添加&#xff1a; OK可打印玩耍&#xff01;&#xff01; 备注&#xff1a; 若需扫描&#xff0c;下载扫描程序&#xff1a; 备注&#xff1a;…

设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性

# 适用于Windows系统 # 时间 : 2024-06-28 # 作者 : 三巧(https://blog.csdn.net/qq_39124701) # 文件名 : 设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性.ps1 # 使用方法: 打开记事本&#xff0c;将所有代码复制到记事本中&#xff0c;保存文件时候修改文件后…

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer&#xff0c;ZeRO)算法实现&#xff0c;一个来自DeepSpeed&#xff0c;另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来&#xff0c;以供最终用户在训练/微调模型时自主选择其中之…

zabbix-server的搭建

zabbix-server的搭建 部署 zabbix 服务端(192.168.99.180) rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm cd /etc/yum.repos.d sed -i s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix# zabbix.r…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4

关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 4 语言 &#xff1a;Verilg HDL 、VHDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…

Arduino - LED 矩阵

Arduino - LED 矩阵 Arduino - LED Matrix LED matrix display, also known as LED display, or dot matrix display, are wide-used. In this tutorial, we are going to learn: LED矩阵显示器&#xff0c;也称为LED显示器&#xff0c;或点阵显示器&#xff0c;应用广泛。在…

“Hello, World!“ 历史由来

布莱恩W.克尼汉&#xff08;Brian W. Kernighan&#xff09;—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多&#xff0c;他在普林斯顿大学取得了电气工程的博士学位&#xff0c;2000 年之后取得普林斯顿大学计算机科学的教授教职。 1973 年&#…

C++ | Leetcode C++题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(1)嵌入式计算机系统概述

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺嵌入式系统设计师系列总目录https://blog.csdn.net/qianshang52013/article/details/139975720?spm1001.2014.3001.5501 根据IEEE&#xff08;国际电气电子工程师协会&#xff09;的定义&#xff0c;嵌入式系统是&q…

Linux高并发服务器开发(六)线程

文章目录 1. 前言2 线程相关操作3 线程的创建4 进程数据段共享和回收5 线程分离6 线程退出和取消7 线程属性&#xff08;了解&#xff09;8 资源竞争9 互斥锁9.1 同步与互斥9.2 互斥锁 10 死锁11 读写锁12 条件变量13 生产者消费者模型14 信号量15 哲学家就餐 1. 前言 进程是C…

哪吒汽车,正在等待“太乙真人”的拯救

文丨刘俊宏 在360创始人、哪吒汽车股东周鸿祎近日连续且着急的“督战”中&#xff0c;哪吒汽车&#xff08;下简称哪吒&#xff09;终究还是顶不住了。 6月26日&#xff0c;哪吒通过母公司合众新能源在港交所提交了IPO文件&#xff0c;急迫地希望成为第五家登陆港股的造车新势力…