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

数据结构—(java)反射,枚举,lambda表达式

文章目录

  • 反射
    • 反射的定义:
    • 反射相关的类:
    • 反射相关的方法:
    • 反射示例:
      • 获取Class类对象
      • 创建指定类的对象
      • 反射私有属性:
      • 反射私有方法:
      • 反射私有的构造方法
  • 枚举
    • 枚举的意义
    • 枚举类的实现
    • 枚举类的使用:
    • Enum类中常用的四个方法:
    • 枚举与反射:
  • lambda表达式
    • 函数式接口:
    • lambda表达式的语法:
    • lambda表达式的使用:
    • 关于lambda表达式语法精简的问题:
    • java集合类与lambda表达式的使用问题:
  • 变量捕获:


反射

反射的定义:

java的反射机制是指,在程序的运行状态中,对于任意一个类,可以获取这个类的全部信息(包括,类加载器(后面会学到),构造方法,成员属性,成员方法等。)对于任意一个对象,我们也能够调用其属性与方法进行修改信息,这种动态地获取信息与动态地调用对象的机制,我们称为反射机制。

反射相关的类:

在这里插入图片描述

反射相关的方法:

在Class类中即包含了获取类加载器,创建指定类对象,获取构造方法,属性,成员方法的方法,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

反射示例:

获取Class类对象

此处的Class并不是指表示类名的关键字,而是指Class这个具体的类,
因为Class类的构造方法是私有方法,所以不能够直接实例化对象。
我们需要获取Class类对象有三种方式:
第一种:调用对象的getClass方法

        Student student = new Student();//getClass方法也是用c/c++代码实现的Class<Student> c1 = (Class<Student>) student.getClass();

第二种:直接调用类名的class属性

 但是我们并没有在Student中定义class属性//这说明每一个方法都有一个默认的class属性
   Class c2 = Student.class;

第三种:通过class对象的ForName方法来获取

   Class c3 = null ;c3 = Class.forName("reflectDemo.Student");

判断这三个class对象是不是同一个对象。

        System.out.println(c1 ==c2);System.out.println(c1==c3);System.out.println(c2==c3);

在这里插入图片描述
结果表明,我们通过三种方式创建的三个Class对象实际上是一个,

实际上是因为任何一个类在JVM中只会被加载一次,所以其所对应的Class对象也
只会被创建一次。如果通过两个不同的类来创建Class对象,则这两个Class对象不一样。
    Class c2 = Dog.class;

结果为:此时c2与c1,c3均不相同。
在这里插入图片描述

创建指定类的对象

使用的Student类

public class Student {//私有属性nameprivate String name = "bit"; //公有属性agepublic int age = 18;//不带参数的构造方法public Student(){System.out.println("Student()");}private Student(String name,int age) {this.name = name;this.age = age;System.out.println("Student(String,name)");}private void eat(){System.out.println("i am eat");}public void sleep(){System.out.println("i am pig");}private void function(String str) {System.out.println(str);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +
'}';}}

通过反射实例化对象的方法:

  public static void reflectNewInstance() throws   ClassNotFoundException, InstantiationException, IllegalAccessException {Class c3 = null ;c3 =     Class.forName("reflectDemo.Student");//要通过c3对象来调用实例化对象的方法Student student1 = (Student) c3.newInstance();System.out.println(student1);}

调用此方法。

 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {//通过class对象创建一个学生对象reflectNewInstance();}

在这里插入图片描述

反射私有属性:

//简写了
public class Student {//私有属性nameprivate String name = "bit"; //公有属性agepublic int age = 18;

反射私有属性的方法:

public static void reflectPrivateField(){Class c3 = null ;try {c3 =   Class.forName("reflectDemo.Student");Field field =  c3.getDeclaredField("name");//我们可以修改这个私有属性的值field.setAccessible(true);//还需要有一个Student对象,Student student3 = (Student)c3.newInstance();field.set(student3,"张三");System.out.println(student3);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}
}
  public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {reflectPrivateField();}

在这里插入图片描述

反射私有方法:

public class Student {
private void eat(String s){System.out.println(s);}}
public static void reflectPrivateMethod(){Class  c4 = null;try {c4 = Class.forName("reflectDemo.Student");//在有参数时一定要加上参数类型的classMethod method = c4.getDeclaredMethod("eat",String.class);Student student4 = (Student) c4.newInstance();method.setAccessible(true);method.invoke(student4, "i am eat");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}
}
 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {reflectPrivateMethod();}

在这里插入图片描述

反射私有的构造方法

public class Student {private Student(String name,int age) {this.name = name;this.age = age;System.out.println("Student(String,name)");}
}
 public static void reflectPrivateConstructor(){Class c3 = null ;try {c3 =     Class.forName("reflectDemo.Student");//调用getConstructor方法,参数为Constructor<Student> constructor =  c3.getDeclaredConstructor(String.class,int.class);//在获取了构造方法之后呢?constructor.setAccessible(true);//直接调用此构造方法,为对象赋值Student student2 =    constructor.newInstance("张三",15);System.out.println(student2);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}
  public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {reflectPrivateConstructor();}

在这里插入图片描述

枚举

枚举的意义

枚举是将一组常量组织起来,即将这一组常量赋予特殊的意义,用特殊的类型表示它们。
所用的场景为:错误状态码,消息类型,颜色的划分,状态机等等…

枚举类的实现

枚举类有自己特定的关键字即enum,
在这里插入图片描述
所有我们自己定义的枚举类均继承于java提供的Enum类。

枚举类的使用:

在类中定义枚举成员:

public enum Myenum {//在自定义的枚举类中定义一些成员Red,Yellow,Blue,Green;
}

获取枚举成员:

public enum Myenum {//在自定义的枚举类中定义一些成员Red,Yellow,Blue,Green;public static void main(String[] args) {
//我们可以通过枚举类名,来直接获取枚举成员,而不需要创建枚举类的对象。System.out.println(Myenum.Blue);}
}

关于枚举类的构造方法:
在这里插入图片描述
:因为枚举类型的构造方法是私有的,所以不能够在其他类中进行
创建对象,但是在枚举类中也不能够创建枚举类对象,
在这里插入图片描述
枚举类的使用意义并不在于它的对象,而在于它的枚举成员,其枚举成员可以直接通过类名调用。

Enum类中常用的四个方法:

在这里插入图片描述
因为我们定义的枚举类继承于Enum类,所以Enum类中的所有方法均可使用

public static void main(String[] args) {//关于枚举类中方法的使用//1. values方法,用于获取枚举类中所有的枚举成员。//问题:在Enum类中并没有values方法,那么这个方法是从哪里来的?Myenum[] myenums = Myenum.values();for (Myenum myenum2: myenums) {//在获取了每个枚举成员后,开始进行每个枚举成员的索引位// 2. 调用ordinal方法System.out.println(  myenum2  +" "+myenum2.ordinal());}// 3.  valueof方法,将普通的字符串转换成枚举实例?//    System.out.println(Myenum.valueOf("GREEN"));//意思为:如果在枚举类中有此枚举成员,则会返回对应的枚举成员,如果没有则报异常System.out.println("Red");// 4. 第四个方法:compareTo方法//在Enum类中实现了comparable接口,实现了compareTo方法,用于比较两个//枚举成员的索引位置。System.out.println(Red.compareTo(Blue));}

在这里插入图片描述

枚举与反射:

我们不能够通过枚举的构造方法来实例化枚举类对象,那么能否通过反射机制来创建枚举类对象呢?
实际上是不行的。
Enum类中的构造方法:
在这里插入图片描述

public static void main(String[] args)  {//尝试通过反射进行实例化enum对象Class<?> c1 = null;try {//要注意当父类的构造方法未调用时,子类的构造方法是不能被调用的c1 = Class.forName("enumdemo.Myenum");//枚举类不能够通过反射类进行创建。//在指定的类的具有父类时,也应该加上父类形参类型的.class属性Constructor  constructor=   c1.getDeclaredConstructor(String.class,int.class,int.class,String.class);//获取了相应的构造方法后constructor.setAccessible(true);Myenum myenum = (Myenum) constructor.newInstance(2,"hong");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}

运行结果:
在这里插入图片描述

lambda表达式

函数式接口:

如果一个接口中只有一个抽象方法,则此接口称为函数式接口。
lambda表达式可代替函数式接口的实现,直接将lambda表达式赋给接口类型的变量。

lambda表达式的语法:

如 : (parameters) -> expression 或 (parameters) ->{ statements; }
. paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明
也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
2. ->:可理解为“被用于”的意思
3. 方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反
回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不返回。

lambda表达式的使用:

interface NoParameterNoReturn{//无参且无返回值void test();
}
interface OneParameterNoReturn{//有一个参数无返回值void test(int a);
}
interface MultipleParameterNoReturn{//有多个参数无返回值void test(int a,int b);
}
interface NoParameterReturn{//无参且有返回值int test();
}
interface OneParameterReturn{//有一个参数有返回值int  test(int a);
}
interface MultipleParameterReturn{//有多个参数有返回值int  test(int a,int b);
}public static void main(String[] args) {//Lambda表达式可用于实现只有一个抽象方法的接口。//先实现无返回值无参数的接口NoParameterNoReturn noParameterNoReturn1 = new NoParameterNoReturn() {@Overridepublic void test() {System.out.println("调用无返回值无参数方法");}};//直接调用方法noParameterNoReturn1.test();//我们采用lambda表达式,直接赋给noParameterNoReturns变量NoParameterNoReturn noParameterNoReturn2 = ()->{ System.out.println("调用无返回值无参数方法");};noParameterNoReturn2.test();}

在这里插入图片描述
此两种方式效果相同。

 public static void main(String[] args) {//调用一个无参有返回值的方法NoParameterReturn noParameterReturn = ()->10;  //可以不写return 关键字,直接写数值或语句System.out.println(noParameterReturn.test());}

在这里插入图片描述

关于lambda表达式语法精简的问题:

  1. 参数类型可以省略,如果需要省略,每个参数的类型都要省略。
  2. 参数的小括号里面只有一个参数,那么小括号可以省略
  3. 如果方法体当中只有一句代码,那么大括号可以省略
  4. 如果方法体中只有一条语句,且是return语句,那么大括号可以省略,且去掉return关键字。

java集合类与lambda表达式的使用问题:

在这里插入图片描述
在这里插入图片描述

public static void main(String[] args) {//举例:ArrayList中的forEach语句ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(10);arrayList.add(20);arrayList.add(15);//遍历数组可以用迭代器,foreach语句等,也可以采用arrayList本身的方法//accept是接口中的抽象方法,将其重写//方法1:直接创建匿名内部类调用。arrayList.forEach(new Consumer<Integer>() {@Overridepublic void accept(Integer integer) {System.out.println(integer);}});// 方法2:通过lambda表达式//当我们这样编写时,代码很简洁,但是可读性比较差。arrayList.forEach((a)->{System.out.println(a);});}
 public static void main(String[] args) {//举例: List中的sort方法ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(10);arrayList.add(20);arrayList.add(15);/* arrayList.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}});*/// System.out.println(arrayList);arrayList.sort(((o1, o2) -> {return o1.compareTo(o2);}));System.out.println(arrayList);}

变量捕获:

    //变量捕获是指在匿名内部类,或lambda表达式中,所使用的变量在此之前与之后不能被修改,或者此变量被final修饰

在这里插入图片描述
在这里插入图片描述

相关文章:

数据结构—(java)反射,枚举,lambda表达式

文章目录 反射反射的定义&#xff1a;反射相关的类&#xff1a;反射相关的方法&#xff1a;反射示例&#xff1a;获取Class类对象创建指定类的对象反射私有属性&#xff1a;反射私有方法&#xff1a;反射私有的构造方法 枚举枚举的意义枚举类的实现枚举类的使用&#xff1a;Enu…...

机器学习(西瓜书)第 14 章 概率图模型

14.1 隐马尔可夫模型 机器学习最重要的任务&#xff0c;是根据一些已观察到的证据&#xff08;例如训练样本&#xff09;来对感兴趣的未知变量&#xff08;例如类别标记&#xff09;进行估计和推测。概率模型&#xff08;probabilistic model&#xff09;提供了一种描述框架&a…...

Python异步编程-asyncio详解

目录 asyncio简介示例什么是 asyncio?适用场景API asyncio的使用可等待对象什么是可等待对象&#xff1f;协程对象任务对象Future对象 协程什么是协程&#xff1f;基本使用运行协程 Task什么是 Task&#xff1f;创建 Task取消 TaskTask 异常获取Task 回调 TaskGroup什么是 Tas…...

UniApp如何打包成客户端应用程序

像flutter是支持PC宽屏、桌面平台&#xff08;Windows/macOS/Linux&#xff09;&#xff0c;我一直在期望UniApp什么时候也支持PC&#xff0c;桌面平台&#xff0c;终于盼到了。 1、支持PC宽屏 从uni-app 2.9起&#xff0c;支持PC宽屏的适配。 uni-app提供的屏幕适配方案&am…...

你应该掌握的12条饭局规矩!

在职场的舞台上&#xff0c;饭局不仅仅是一场简单的聚餐&#xff0c;它是一场精心编排的社交盛宴&#xff0c;是展示个人魅力、构建人脉网络的重要平台。精通饭局的艺术&#xff0c;能让你在职场的交际中更加自如。以下是酱酒亮哥整理的12条饭局指南&#xff0c;希望你在职场的…...

【541. 反转字符串 II 简单】

题目&#xff1a; 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0c;…...

基于PHP的丽江旅游管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的丽江旅游管理系统 一 介绍 此丽江旅游系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…...

vue3+Element-plus el-input 输入框组件二次封装(支持金额、整数、电话、小数、身份证、小数点位数控制,金额显示中文提示等功能)

一、效果图 二、组件集成了以下功能 1、输入金额--支持千分号显示、可设置decimalLimit来调整小数点位数 2、金额鼠标移入提示中文--标签添加isTip开启中文提示则不允许开启千分号显示showThousands 3、输入手机号--设置inputTypephone 4、输入整数---设置inputTypeinteger 5、…...

jQuery 简介 ③ ready()事件函数、jQuery 二个原则及容错机制

文章目录 jQuery 简介 ③五、ready() 准备就绪时执行代码六、jQuery 核心1、Get and Set in One 原则2、Get first Set all 原则3、容错机制:jQuery 简介 ③ 五、ready() 准备就绪时执行代码 如果我们在中引入jQuery库文件,并编写相应的jQuery代码来操作DOM元素。这很可能导…...

选择Alluxio来解决AI模型训练场景数据访问的五大理由

在AI模型训练尤其是大模型领域&#xff0c;存储系统的性能和稳定性直接决定了模型训练、推理、部署任务的效率和成本。随着全球AI行业的爆发带来的数据规模的快速增长&#xff0c;如何高效管理和利用这些数据成为AI模型训练中的一大挑战。 AI模型训练场景面临的五大难题 1. 数…...

POS共识机制简介

权益证明&#xff08;Proof of Stake, PoS&#xff09;共识机制基础 1. 引言 权益证明&#xff08;Proof of Stake, PoS&#xff09;是一种用于区块链网络的共识机制&#xff0c;旨在解决工作量证明&#xff08;Proof of Work, PoW&#xff09;机制中存在的能源消耗高、中心化…...

Spring为什么要用三级缓存解决循环依赖?

Spring为什么要用三级缓存解决循环依赖&#xff1f; 1. Spring是如何创建一个bean对象2. Spring三级缓存2.1 一级缓存&#xff1a;单例池&#xff0c;经历过完整bean生命&#xff0c;单例Bean对象2.2 二级缓存&#xff1a;提前暴露的Bean2.3 三级缓存&#xff1a;打破循环 3. S…...

【Redis入门到精通三】Redis核心数据类型(List,Set)详解

目录 Redis数据类型 ​编辑 1.List类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 2.Set类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 Redis数据类型 查阅Redis官方文档可知&#xff0c;Redis提供给用户的核…...

本科生如何学习机器学习

一、入门阶段 1. 数学与统计学基础 高等数学&#xff1a;学习微积分、极限、级数等基本概念。线性代数&#xff1a;掌握矩阵运算、特征值和特征向量、线性方程组等。概率论与统计学&#xff1a;理解概率分布、假设检验、贝叶斯定理等统计知识。 2. 编程语言学习 Python&…...

海康威视摄像机和录像机的监控与回放

文章目录 海康威视摄像机和录像机的监控与回放1、海康威视监控设备简介1.1、摄像机二次开发1.1.1&#xff1a;协议选择 1.2&#xff1a;web集成1.2&#xff1a;标准协议对接1.2.1&#xff1a;ffmpeg软件转流1.2.2&#xff1a;开源监控软件shinobi1.2.2.1 安装使用1.2.2.2 shino…...

校医务室健康服务系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;医生管理&#xff0c;医患交流管理&#xff0c;预约医生管理&#xff0c;健康打卡管理&#xff0c;运动打卡管理&#xff0c;饮食打卡管理 微信端账号功能包括&#xff1a;系统首…...

MySQL 中的 UTF-8 与 UTF8MB4:差异解析

在 MySQL 数据库中&#xff0c;字符集的选择对于数据的存储和处理至关重要。其中&#xff0c;UTF-8 和 UTF8MB4 是两个常见的字符集选项。那么&#xff0c;它们之间到底有什么区别呢&#xff1f; 一、字符集简介 UTF-8 UTF-8&#xff08;8-bit Unicode Transformation Format&…...

nvm无法下载npm的问题

1、问题 执行 nvm install 14.21.3 命令&#xff0c;node可以正常下载成功&#xff0c;npm下载失败 2、nvm配置信息 …/nvm/settings.txt root: D:\soft\nvm path: D:\soft\nodejs node_mirror: npmmirror.com/mirrors/node/ npm_mirror: registry.npmmirror.com/mirrors/…...

数据结构与算法——Java实现 6.递归

要学会试着安静下来 —— 24.9.17 一、递归的定义 计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集 说明: ① 自己调用自己&#xff0c;如果说每个函数对应着一种解决方案&#xff0c;自己调用自己意味着解决方案是…...

.Net Core 生成管理员权限的应用程序

创建一个ASP.NET Core Web API项目 给解决方案设置一个名称 选择一个目标框架&#xff0c;这里选择的是 .NET 8.0框架 在Porperties文件夹中添加一个app.manifest文件 设置app.manifest文件属性&#xff0c;生成操作设置为嵌入的资源 双击解决方案名称&#xff0c;编辑WebAppli…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

Linux系统:进程间通信-匿名与命名管道

本节重点 匿名管道的概念与原理匿名管道的创建命名管道的概念与原理命名管道的创建两者的差异与联系命名管道实现EchoServer 一、管道 管道&#xff08;Pipe&#xff09;是一种进程间通信&#xff08;IPC, Inter-Process Communication&#xff09;机制&#xff0c;用于在不…...