从实例出发,深入探索Java SE中数组的易错点

news2024/12/27 12:48:28

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java中,数组是非常常见的数据类型,它可以用来存储一组相同类型的数据。然而,由于数组的特殊性质,我们在使用它的时候也可能会遇到一些易错点,这些问题可能涉及到数组的初始化、遍历、越界等方面。在本文中,我们将通过一些实例来深入探讨Java SE中数组的易错点,希望能够帮助Java开发者更好地理解和使用数组。

摘要

  本文主要围绕Java SE中的数组展开讨论,从实例出发,深入探索数组的易错点。涉及的主要内容包括数组的初始化、遍历、越界等方面,我们将通过一些具体的代码实例来说明这些问题,并提供一些优缺点分析和应用场景案例。最后,我们还将提供一些类代码方法介绍和测试用例,帮助读者更好地理解和使用这些知识点。

正文

简介

  数组是一种非常重要的数据类型,它可以用来存储一组相同类型的数据。在Java中,数组也是常用的数据类型之一,Java中的数组可以是一维的、二维的、多维的等类型。同时,由于Java数组的特殊性质,我们在使用它的时候也可能会遇到一些易错点,这些问题可能涉及到数组的初始化、遍历、越界等方面。因此,了解Java SE中的数组易错点是非常重要的。

源代码解析

  在本节中,我们将通过一些具体的代码实例来说明Java SE中数组的易错点,主要包括数组的初始化、遍历、越界等方面。

数组的初始化

  在Java中,数组可以通过两种方式进行初始化,一种是静态初始化,一种是动态初始化。

// 静态初始化
int[] arr1 = {1, 2, 3, 4, 5};

// 动态初始化
int[] arr2 = new int[5];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
arr2[3] = 4;
arr2[4] = 5;

  在静态初始化中,我们在定义数组的同时就可以初始化它的元素。而在动态初始化中,我们需要先定义一个数组,然后再依次为每个元素赋值。需要注意的是,静态初始化和动态初始化不能同时使用。

代码分析:

  这段代码是关于Java数组的初始化的示例。其中,数组可以通过静态初始化和动态初始化两种方式进行。

静态初始化是指在创建数组对象的同时,为其元素赋值的方式。比如 int[] arr1 = {1, 2, 3, 4, 5}; 创建了一个包含5个元素的int类型数组arr1,并给其元素赋值为1、2、3、4和5。

动态初始化则是指在创建数组对象之后,通过索引为其元素赋值的方式。比如 int[] arr2 = new int[5]; 通过关键字new创建了一个包含5个元素的int类型数组arr2,而每个元素默认初始化为0。接着,对arr2数组的每个元素进行赋值,arr2[0] = 1; 表示把第一个元素赋值为1,arr2[1] = 2; 表示把第二个元素赋值为2,以此类推。

总之,数组的初始化方式取决于业务需求,可以根据不同的场景选择合适的方式来初始化数组。

数组的遍历

  在Java中,我们可以通过循环语句来遍历数组。

int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

  这段代码中,我们使用了for循环来遍历了数组arr的所有元素,输出了它们的值。需要注意的是,在使用for循环遍历数组时,我们需要使用数组的length属性来获取数组的长度。

代码分析:

  上述代码是一个 Java 程序片段,它创建了一个整型数组 arr,包含了 1 到 5 五个元素。然后使用 for 循环遍历了该数组,将每个元素打印出来。

  具体来说,for 循环的初始化语句 i = 0 将变量 i 初始化为 0。循环条件 i < arr.length 表示只要 i 小于数组长度,就执行循环体。循环体里使用了 System.out.println() 方法将数组元素按顺序打印出来。在每次循环迭代时,i 将自增 1,直到 i 等于数组长度,for 循环结束。

  因此,上述代码的输出结果将是:

1
2
3
4
5

数组的越界

  在Java中,数组越界是一个非常容易出现的问题。当我们访问数组的时候,如果超出了数组的范围,就会抛出ArrayIndexOutOfBoundsException异常。

int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr[5]); // 抛出ArrayIndexOutOfBoundsException异常

  在上面的代码中,由于数组arr的长度只有5,而我们却访问了它的第6个元素,就导致了数组越界的问题。因此,在使用数组的时候,我们需要非常注意数组的边界条件,避免出现越界问题。

代码分析:

  这段代码定义了一个名为arr的整型数组,其中包含了1到5这五个数。然后尝试打印数组中索引为5的元素,但是实际上数组的索引是从0开始的,因此arr[5]的访问超出了数组的范围,会抛出ArrayIndexOutOfBoundsException异常。

应用场景案例

  在本节中,我们将根据实际应用场景,提供一些数组的应用案例,以便读者更好地理解和应用数组。

案例1

  在Java中,我们可以使用数组来存储一组数据,并进行排序。下面的代码是一个使用数组进行排序的例子。

int[] arr = {5, 3, 1, 2, 4};
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length - 1 - i; j++) {
        if (arr[j] > arr[j + 1]) {
            int tmp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = tmp;
        }
    }
}
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

  在这个例子中,我们使用了冒泡排序算法对数组进行了排序。该算法的基本思想是,从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的值。通过多次比较和交换,最终可以将数组排序。

代码分析:

  这段代码是一个冒泡排序算法的实现。它通过比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们的位置。这样每一趟比较都会将当前最大的元素交换到最后的位置。经过多次比较和交换,最终得到一个按照从小到大排列的数组。

具体解释如下:

  1. 定义一个数组arr,包含五个元素{5, 3, 1, 2, 4}。

  2. 第一个for循环:循环变量i从0开始,到arr数组的长度为止。每次循环,都会执行一次第二个for循环。

  3. 第二个for循环:循环变量j从0开始,到arr数组的长度-1-i为止。每次循环,都会比较两个相邻的元素的大小,如果前一个元素大于后一个元素,则交换它们的位置。

  4. 第二个for循环的循环次数随着i的增大而减小,因为每经过一次循环,数组的最后一个元素已经是当前最大的元素,不需要再对它进行比较。

  5. 第二个for循环的结束后,数组中最大的元素已经被交换到了最后的位置。

  6. 第一个for循环的结束后,整个数组按照从小到大的顺序排列好了。

  7. 最后一个for循环:循环变量i从0开始,到arr数组的长度为止。每次循环,都会输出数组中的元素。

案例2

  在Java中,我们可以使用数组来统计一些数据的出现次数。下面的代码是一个使用数组统计数据出现次数的例子。

int[] arr = {1, 2, 3, 4, 5, 2, 3, 4, 1, 2};
int[] count = new int[6];
for (int i = 0; i < arr.length; i++) {
    count[arr[i]]++;
}
for (int i = 1; i < count.length; i++) {
    System.out.println("数字" + i + "出现了" + count[i] + "次");
}

  在这个例子中,我们定义了一个长度为6的数组count,用来记录数字1到5的出现次数。通过遍历原始数组arr,我们可以依次将每个数字出现的次数记录在count数组中。最后,我们再遍历count数组,输出每个数字出现的次数。

代码分析:

  该段代码目的是统计一个给定整数数组中每个数字出现的次数。首先定义了一个给定整数数组 arr,然后创建了一个长度为 6(因为最大的数字是 5)的整型数组 count,然后使用 for 循环遍历整数数组 arr,对于每个数字,将count 数组中对应的数字位置加 1。最后再使用 for 循环遍历 count 数组,输出每个数字出现的次数。

  例如,对于给定整数数组 {1, 2, 3, 4, 5, 2, 3, 4, 1, 2},count 数组在遍历后的值为 {0, 2, 3, 2, 2, 1},表示数字 1 出现了 2 次,数字 2 出现了 3 次,数字 3 出现了 2 次,数字 4 出现了 2 次,数字 5 出现了 1 次。最后程序输出:

数字1出现了2次
数字2出现了3次
数字3出现了2次
数字4出现了2次
数字5出现了1次

优缺点分析

  在本节中,我们将对Java SE中数组的优缺点进行分析,以便读者更好地理解和应用数组。

优点

  • 数组可以用来存储一组相同类型的数据,方便读写。
  • 数组可以通过下标来访问元素,访问效率较高。
  • 数组支持动态扩容和缩容。

缺点

  • 数组的长度是固定的,无法动态改变数组的大小。
  • 数组中的元素必须是同一类型的,不支持不同类型的元素混合存储。
  • 数组的越界问题容易出现,需要特别注意。

类代码方法介绍

  在本节中,我们将提供一些Java SE中数组相关的类代码方法介绍,以便读者更好地理解和使用数组。

Arrays类

  Arrays类是Java SE中提供的用于操作数组的工具类,它包含了一些静态方法,可以方便地进行数组的操作。

// 将数组转换为字符串
public static String toString(int[] a)

// 对数组进行排序
public static void sort(int[] a)

// 对数组进行二分查找
public static int binarySearch(int[] a, int key)

代码分析:

  这三个方法都是Java中Arrays类提供的静态方法,用于操作int类型的数组:

  1. toString方法将int数组转换为字符串,并返回该字符串。例如:
int[] arr = {1, 2, 3, 4, 5};
String str = Arrays.toString(arr); // str = "[1, 2, 3, 4, 5]"
  1. sort方法对int数组进行排序。它使用的是快速排序算法,时间复杂度为O(nlogn)。例如:
int[] arr = {5, 3, 1, 2, 4};
Arrays.sort(arr); // arr = {1, 2, 3, 4, 5}
  1. binarySearch方法对已排序的int数组进行二分查找,如果找到指定key值,则返回其下标;否则返回负数。例如:
int[] arr = {1, 2, 3, 4, 5};
int result = Arrays.binarySearch(arr, 3); // result = 2
result = Arrays.binarySearch(arr, 6); // result = -6(负数表示没找到)

需要注意的是,该方法要求传入的数组必须先进行排序才能进行二分查找。

System类

  System类是Java SE中提供的一个用于与系统进行交互的工具类,它包含了一些静态方法,可以在控制台输出信息。

// 将数组打印到控制台
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

代码分析:

  该代码中的arraycopy方法是Java中的数组复制方法,其参数含义如下:

  • src:源数组
  • srcPos:源数组的起始位置
  • dest:目标数组
  • destPos:目标数组的起始位置
  • length:要复制的数组元素的数量

  该方法的作用是将源数组从指定位置开始的length个元素复制到目标数组的指定位置开始的length个位置上。如果目标数组比源数组小,则只会复制部分元素;如果目标数组比源数组大,则会先将目标数组中的元素全部清空,然后再复制源数组的元素。

  该方法在控制台上并不会直接打印数组,而是用于将一个数组中的元素复制到另一个数组中。如果需要打印数组到控制台,可以使用Java中的Arrays类的toString()方法。

测试用例

在本节中,我们提供一些测试用例,以便读者更好地理解和运用本文中所述测试用例:

package com.example.javase.se.array;

import java.util.Arrays;

/**
 * @Author ms
 * @Date 2023-11-14 21:11
 */
public class ArrayTest10 {

    public static void main(String[] args) {
        // 静态初始化数组
        int[] arr1 = {3, 2, 1};
        System.out.println(Arrays.toString(arr1));

        // 动态初始化数组
        int[] arr2 = new int[5];
        for (int i = 0; i < arr2.length; i++) {
            arr2[i] = i + 1;
        }
        System.out.println(Arrays.toString(arr2));

        // 遍历数组
        int[] arr3 = {1, 2, 3, 4, 5};
        for (int i = 0; i < arr3.length; i++) {
            System.out.println(arr3[i]);
        }

        // 数组排序
        int[] arr4 = {5, 3, 1, 2, 4};
        Arrays.sort(arr4);
        System.out.println(Arrays.toString(arr4));

        // 数组的越界
        int[] arr5 = {1, 2, 3, 4, 5};
        try {
            System.out.println(arr5[5]); // 访问越界元素
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界");
        }

        // 统计数组中数字出现次数
        int[] arr6 = {1, 2, 3, 4, 5, 2, 3, 4, 1, 2};
        int[] count = new int[6];
        for (int i = 0; i < arr6.length; i++) {
            count[arr6[i]]++;
        }
        for (int i = 1; i < count.length; i++) {
            System.out.println("数字" + i + "出现了" + count[i] + "次");
        }
    }
}

预期输出结果如下:

[3, 2, 1]
[1, 2, 3, 4, 5]
1
2
3
4
5
[1, 2, 3, 4, 5]
数组越界
数字1出现了2次
数字2出现了3次
数字3出现了2次
数字4出现了2次
数字5出现了1次

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。
  该代码演示了Java中数组的基本操作,分别包括静态初始化数组、动态初始化数组、遍历数组、数组排序、数组越界和统计数组中数字出现次数。

  1. 静态初始化数组
    定义了一个数组arr1,并通过静态初始化的方式在声明时直接为其赋值,值为{3, 2, 1}。

  2. 动态初始化数组
    定义了一个数组arr2,并通过动态初始化的方式在声明时指定数组长度为5,然后通过循环为数组arr2中每个元素赋值。

  3. 遍历数组
    定义了一个数组arr3,并通过for循环遍历数组,打印出数组中每个元素的值。

  4. 数组排序
    定义了一个数组arr4,并通过Arrays.sort()对数组进行排序,然后通过Arrays.toString()方法将数组转换成字符串进行输出。

  5. 数组的越界
    定义了一个数组arr5,并尝试访问数组中越界的元素arr5[5],由于数组长度为5,访问的下标为5,超过了数组的长度范围,抛出了ArrayIndexOutOfBoundsException异常。

  6. 统计数组中数字出现次数
    定义了一个数组arr6,并定义了一个长度为6的count数组,用于保存数字出现的次数。通过for循环将arr6中每个数字出现的次数记录在count数组中,最后再次通过for循环遍历count数组,输出每个数字出现的次数。

小结

  本文针对Java SE中数组的易错点进行了深入探讨,并提供了一些实例、应用场景案例、优缺点分析、类代码方法介绍和测试用例,希望能够帮助Java开发者更好地理解和使用数组。在本文中,我们从静态初始化、动态初始化、遍历、越界等多个方面阐述了Java数组的易错点,并提供了一些优缺点分析和应用场景案例。此外,我们还介绍了一些Java SE中数组相关的类代码方法,并提供了一些测试用例来帮助读者更好地理解和运用本文所述内容。总之,通过本文的学习,希望读者能够掌握Java中的数组相关知识,并能够在实际开发中运用自如,达到事半功倍的效果。

总结

  本文主要介绍了Java SE中数组的易错点,主要包括数组的初始化、遍历、越界等方面。通过具体的代码实例,深入探讨了数组的特殊性质和注意点,并提供了一些优缺点分析和应用场景案例。此外,还介绍了一些Java SE中数组相关的类代码方法和测试用例,帮助读者更好地理解和运用本文中所述的内容。

  总的来说,Java SE中的数组是非常常见和重要的数据类型,但也存在一些易错点,需要特别注意。通过本文的学习,读者可以更好地理解和使用Java SE中的数组。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

ICMR 2024在普吉岛闭幕,学者与泰国舞者共舞,燃爆全场

惊艳&#xff01;ICMR 2024在普吉岛闭幕&#xff0c;学者与泰国舞者共舞&#xff0c;燃爆全场&#xff01; 会议之眼 快讯 ICMR&#xff08;International Conference on Multimedia Retrieval&#xff09;即国际多媒体检索会议&#xff0c;是一个专注于多媒体检索领域的顶级…

【SkiaSharp绘图05】SKPaint详解(三)之ImageFilter(颜色、组合、膨胀、移位、光照、反射、阴影、腐蚀、变换)

文章目录 ImageFilterCreateColorFilter 颜色滤镜CreateCompose 滤镜组合CreateDilate 膨胀滤镜CreateDisplacementMapEffect 移位映射CreateDistantLitDiffuse 光照CreateDistantLitSpecular 反射光照CreateDropShadow阴影效果CreateDropShadowOnly 只阴影效果CreateErode腐蚀…

大模型基础知识:探索人工智能的巨轮

人工智能大模型&#xff0c;这个在近年来频繁出现在科技新闻和学术论坛的热门词汇&#xff0c;已经成为了推动人工智能技术发展的关键力量。这些大模型&#xff0c;如OpenAI的GPT-3、谷歌的BERT、百度的ERNIE等&#xff0c;以其强大的性能和广泛的应用范围&#xff0c;引起了广…

【STM32】GPIO简介

1.GPIO简介 GPIO是通用输入输出端口的简称&#xff0c;简单来说就是STM32可控制的引脚&#xff0c;STM32芯片的GPIO引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的功能。 STM32芯片的GPIO被分成很多组&#xff0c;每组有16个引脚。 最基本的输出…

Flutter 小技巧之面试题里有意思的异步问题

很久没更新小技巧系列了&#xff0c;本次简单介绍一下 Flutter 面试里我认为比较有意思的异步基础知识点。 首先我们简单看一段代码&#xff0c;如下代码所示&#xff0c;是一个循环定时器任务&#xff0c;这段代码里&#xff1a; testFunc 循环每 1 秒执行一次 asyncWorkasy…

缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)

目录 文章目录 目录缓存简介工作原理缓存分类1.按照技术层次分类2.按照应用场景分类3.按照缓存策略分类 应用场景1.硬件缓存2.软件缓存数据库缓存Web开发应用层缓存 3.分布式缓存4.微服务架构5.移动端应用6.大数据处理7.游戏开发 缓存优点缓存带来的问题 常见常用Java缓存技术1…

npm install cnpm -g 报错4048

npm install cnpm -g 报错4048 设置淘宝镜像&#xff1a; 报错如下&#xff1a; 其他博主提供的方法都尝试了&#xff0c;比如管理员权限打开终端&#xff0c;删除.npmrc文件&#xff0c;清除缓存npm cache clean -f等都试了无效&#xff0c;最后怀疑是npm和cnpm版本不对应&…

环境搭建---单机k8s

配置基础环境 关闭防火墙 [rootVM-20-14-centos ~]# systemctl stop firewalld && systemctl disable firewalld关闭selinux [rootVM-20-14-centos ~]# setenforce 0 && sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config禁止s…

JVM性能优化工具及问题排查

jvm性能优化工具 jdk提供给我们了很实用的工具来分析JVM的状态&#xff0c;线程以及配置&#xff0c;这些工具包含于jdk中&#xff0c;并且以java实现&#xff0c;是JVM性能优化必不可少的工具集&#xff0c;这些工具都在$JAVA_HOME/bin下 jps、jinfo、jstack、jmap、jstat基本…

Java 开发实例:Spring Boot+AOP+注解+Redis防重复提交(防抖)

文章目录 1. 环境准备2. 引入依赖3. 配置Redis4. 创建防重复提交注解5. 实现AOP切面6. 创建示例Controller7. 测试8. 进一步优化8.1 自定义异常处理8.2 提升Redis的健壮性 9. 总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨…

AI从云端到边缘:人员入侵检测算法的技术原理和视频监控方案应用

在当今数字化、智能化的时代&#xff0c;安全已成为社会发展的重要基石。特别是在一些关键领域&#xff0c;如公共安全、智能化监管以及智慧园区/社区管理等&#xff0c;确保安全无虞至关重要。而人员入侵检测AI算法作为一种先进的安全技术&#xff0c;正逐渐在这些领域发挥着不…

怎样打印微信文档文件?

在日常生活和工作中&#xff0c;我们经常需要打印微信中的文档文件&#xff0c;无论是工作资料、学习笔记还是其他重要信息。随着科技的发展&#xff0c;我们不再需要前往打印店进行繁琐的操作&#xff0c;而是可以通过一些便捷的在线打印平台轻松实现。今天&#xff0c;我们就…

git 快速将当前目录添加仓储

一、进入目录 git init git add . git commit -m "init" git remote add origin http://192.168.31.104/root/AutoBuildDemo.git 二、登录gitlab&#xff0c;创建项目AutoBuildDemo 最后执行&#xff1a; git push -u origin master

【C语言】--- 常见调试信息预处理器宏

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【C语言】--- 常见调试信息预处理器宏 开…

如何用Java SE数组实现高速的数字转换功能

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

技术分析:开源大模型的兴起与热门项目推荐

技术分析&#xff1a;开源大模型的兴起与热门项目推荐 引言 随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;开源大模型成为了许多程序员和研究人员关注的焦点。开源项目不仅促进了技术的快速迭代和普及&#xff0c;还为更多的人提供了学习和实践的机会。…

推荐常用的三款源代码防泄密软件

三款源代码防泄密软件——安秉源代码加密、Virbox Protector 和 MapoLicensor——确实各自在源代码保护的不同方面有其专长。这些软件可以满足企业对于源代码保护的三大需求&#xff1a;防止泄露、防止反编译和防止破解。 安秉源代码加密&#xff1a; 专注于源代码文件的加密&…

惊艳视觉!7个让你大开眼界的数据可视化案例

数据可视化是指通过视觉呈现信息的一种方式&#xff0c;它仍处于不断演变的过程中。许多企业、政府和其他组织都使用数据可视化分析来寻求保持竞争优势。在界面设计中&#xff0c;数据可视化也呈现出越来越流行的趋势&#xff0c;学习数据可视化也是设计师保持竞争优势的一种方…

进程间通信以及线程的同步互斥机制

1.进程间通信机制 常用的六种通信机制&#xff1a; 管道、消息队列、共享内存、信号灯集、信号、Socket 管道&#xff08;Pipe&#xff09;和无名管道&#xff08;匿名管道&#xff09;&#xff1a; 管道是一种半双工的通信方式&#xff0c;数据只能单向流动&#xff0c;通常…

AI在医学中神奇应用

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年11月7日&#xff0c;OpenAI首届开发者大会被称为“科技界的春晚”&#xff0c;吸引了全球广大…