由浅到深认识Java语言(31):阶段性练习

该文章Github地址:https://github.com/AntonyCheng/java-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(30):集合

41.阶段性练习

练习一:

  • 创建一个动物类,定义种类,性别和属性;
  • 从键盘录入数据,通过构造方法存入对象中,并调用对象的方法打印;
import java.util.Scanner;

public class Demo {
	public static void main(String[] args) {
		Scanner sc =  new Scanner(System.in);
		System.out.println("请输入物种名字:");
		String species = sc.next();
		System.out.println("请输入物种性别:");
		char sex = sc.next().charAt(0);
		Animal a = new Animal(species, sex);
		a.printObject();
	}
}

class Animal{
	String species;
	char sex;
	public Animal(String species,char sex) {
		this.species = species;
		this.sex = sex;
	}
	public void printObject() {
		System.out.println("物种:"+species+" 性别:"+sex);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习二:

  • 描述猫类,有属性 name、color、sex,通过构造方法给猫的属性赋值(一个是波斯猫,一个是土猫,其他属性自定);
  • 为猫类添加吃饭,抓老鼠方法,创建两只猫的对象;
  • 分别调用猫的吃饭,抓老鼠方法;
public class Demo {
	public static void main(String[] args) {
		Cat bosi = new Cat("波斯猫", "红色", '雄');
		Cat tumao = new Cat("土猫", "绿色", '雌');
		bosi.eat(bosi.name);
		tumao.catchMouse(tumao.name);
	}
}

class Cat {
	String name;
	String color;
	char sex;

	public Cat() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Cat(String name, String color, char sex) {
		super();
		this.name = name;
		this.color = color;
		this.sex = sex;
	}

	public void eat(String name) {
		System.out.println(name+"吃饭!");
	}

	public void catchMouse(String name) {
		System.out.println(name+"抓老鼠!");
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习三:

  • 创建一个工具类,定义方法用来将基本数据类型转换成字符串;
public class Demo {
	public static void main(String[] args) {
		Tools t = new Tools();
		byte b = 123;
		String s1 = t.getStringFromByte(b);
		short s = 1234;
		String s2 = t.getStringFromShort(s);
		char c = '1';
		String s3 = t.getStringFromBChar(c);
		int i = 12345;
		String s4 = t.getStringFromInt(i);
		float f = 12345.6f;
		String s5 = t.getStringFromFloat(f);
		double d = 1234567.8;
		String s6 = t.getStringFromDouble(d);
		long l = 12345678;
		String s7 = t.getStringFromLong(l);
		boolean bool = false;
		String s8 = t.getStringFromBoolean(bool);
		System.out.printf("%s %s %s %s %s %s %s %s",s1,s2,s3,s4,s5,s6,s7,s8);
	}
}

class Tools {
	public String getStringFromByte(byte num) {
		return num+"";
	}
	public String getStringFromShort(short num) {
		return num+"";
	}
	public String getStringFromBChar(char num) {
		return num+"";
	}
	public String getStringFromInt(int num) {
		return num+"";
	}
	public String getStringFromFloat(float num) {
		return num+"";
	}
	public String getStringFromDouble(double num) {
		return num+"";
	}
	public String getStringFromLong(long num) {
		return num+"";
	}
	public String getStringFromBoolean(boolean num) {
		return num+"";
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习四:

  • 一档选秀节目,设计了一个平台共参与者展示才艺,不同的参与者有不同的才艺,使用多态编程模拟;
public class Demo {
	public static void main(String[] args) {
		People coder = new Coder("程序员",21);
		People singer = new Singer("歌手",22);
		People dancer = new Dancer("舞者",21);
		System.out.println("请各位选手自我介绍一下:");
		System.out.println("我叫"+coder.name+",今年"+coder.age+"岁;");
		coder.haveRest();
		Coder c = (Coder)coder;
		c.playComputer();
		System.out.println("我叫"+singer.name+",今年"+singer.age+"岁;");
		singer.haveRest();
		Singer s = (Singer)singer;
		s.sing();
		System.out.println("我叫"+dancer.name+",今年"+dancer.age+"岁;");
		dancer.haveRest();
		Dancer d = (Dancer)dancer;
		d.dance();
	}
}

class People{
	String name;
	int age;
	
	public People(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public People() {
		super();
		// TODO Auto-generated constructor stub
	}

	public void haveRest() {
		System.out.println("我会休息!");
	}
}

class Coder extends People{
	public Coder(String name, int age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	public void playComputer() {
		System.out.println("我会玩电脑!");
	}
}

class Singer extends People{
	public Singer(String name, int age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	public void sing() {
		System.out.println("我会唱歌!");
	}
}

class Dancer extends People {
	public Dancer(String name, int age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	public void dance() {
		System.out.println("我会跳舞!");
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习五:

  • 学生都有学习和做作业的能力,但是学习的方式不同,使用抽象类的方法模拟编程;
public class Demo {
	public static void main(String[] args) {
		Student good = new Good();
		Student poor = new Poor();
		good.name = "xiaochen";
		good.age = 20;
		System.out.println("我是"+good.name+" 年龄"+good.age);
		good.studyMethod();
		poor.name = "xiaowu";
		poor.age = 20;
		System.out.println("我是"+poor.name+" 年龄"+poor.age);
		poor.studyMethod();
	}
}

abstract class Student{
	String name;
	int age;
	abstract void studyMethod();
}

class Good extends Student{

	@Override
	void studyMethod() {
		// TODO Auto-generated method stub
		System.out.println("卷!");
	}
	
}

class Poor extends Student{

	@Override
	void studyMethod() {
		// TODO Auto-generated method stub
		System.out.println("摆!");
	}
	
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习六:

  • 创建一个乐器接口,定义演奏方法 play ,定义两个实现类(钢琴 Piano,小提琴 Violin),分别实现乐器接口并做出不同的演奏;
public class Demo {
	public static void main(String[] args) {
		Tools piano = new Piano();
		Tools violin = new Violin();
		piano.play();
		violin.play();
	}
}

interface Tools {
	void play();
}

class Piano implements Tools {
	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("演奏钢琴曲!");
	}
}

class Violin implements Tools{
	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("演奏小提琴曲!");
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习七:

  • 国家规定,汽车必须能点火,能开动,国家将文件发送到汽车厂商的手里,厂商生产的汽车必须符合要求,可以有特性功能,编程模拟;
public class Demo {
	public static void main(String[] args) {
		CarShop1 c1 = new CarShop1(1,0);
		CarShop2 c2 = new CarShop2(1,1);
		c1.getLisence(c1.getName());
		c2.getLisence(c2.getName());
	}
}

class CarShop {
	int canLaunch;
	int canMove;

	public CarShop() {
		super();
		// TODO Auto-generated constructor stub
	}

	public CarShop(int canLaunch, int canMove) {
		super();
		this.canLaunch = canLaunch;
		this.canMove = canMove;
	}

	public void getLisence(String name) {
		if (this.canLaunch != 0 && this.canMove != 0) {
			System.out.println(name+"能够得到国家许可");
		} else {
			System.out.println(name+"不能得到国家许可");
		}
	}
}

class CarShop1 extends CarShop {
	private String name = "CarShop1";
	public String getName() {
		return this.name;
	}
	public void Character() {
		System.out.println("时速300km/h");
	}

	public CarShop1() {
		super();
		// TODO Auto-generated constructor stub
	}

	public CarShop1(int canLaunch, int canMove) {
		super(canLaunch, canMove);
		// TODO Auto-generated constructor stub
	}

}

class CarShop2 extends CarShop {
	private String name = "CarShop2";
	public String getName() {
		return this.name;
	}
	public void Character() {
		System.out.println("时速320km/h");
	}

	public CarShop2() {
		super();
		// TODO Auto-generated constructor stub
	}

	public CarShop2(int canLaunch, int canMove) {
		super(canLaunch, canMove);
		// TODO Auto-generated constructor stub
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习八:

  • 定义一个动物类,自定义属性;
  • 定义吃饭和睡觉两个方法;
  • 创建两个对象(小猫和小狗),分别调用吃饭和睡觉方法;
  • 打印结果是:小猫吃小鱼干,甜甜地睡着了,小狗吃骨头,憨憨地睡着了;
class Demo {
	public static void main(String[] args) {
		Animal Cat = new Animal("小猫",2);
		Animal Dog = new Animal("小狗",1);
		System.out.println(Cat.name+Cat.eat("小鱼干")+","+Cat.sleep("甜甜")
		+","+Dog.name+Dog.eat("骨头")+","+Dog.sleep("憨憨"));
	}
}

class Animal {
	String name;
	int age;

	public Animal() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Animal(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String sleep(String description) {
		return description + "地睡着了";
	}

	public String eat(String thing) {
		return "吃" + thing;
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习九:

  • 统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数;
  • ABCDEabcd123456!@#$%^

方法一:

import java.util.Scanner;

class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要计数的字符串:");
		String str = sc.next();
		sc.close();
		char ch[] = str.toCharArray();
		int matchNum = 0;
		int matchBig = 0;
		int matchSmall = 0;
		int matchOther = 0;
		for (int i = 0;i<ch.length;i++) {
			if(ch[i]>='a'&&ch[i]<='z') {
				matchSmall++;
			}
			else if(ch[i]>='A'&&ch[i]<='Z') {
				matchBig++;
			}
			else if(ch[i]>='1'&&ch[i]<='9') {
				matchNum++;
			}
			else {
				matchOther++;
			}
		}
		System.out.println("数字:"+matchNum);
		System.out.println("大写字母:"+matchBig);
		System.out.println("小写字母:"+matchSmall);
		System.out.println("其他字符:"+matchOther);
	}
}

方法二:

import java.util.Scanner;

class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入需要计数的字符串:");
		String str = sc.next();
		sc.close();
		char ch[] = str.toCharArray();
		int matchNum = 0;
		int matchBig = 0;
		int matchSmall = 0;
		int matchOther = 0;
		for (int i = 0;i<ch.length;i++) {
			String s = Character.toString(ch[i]);
			if(s.matches("[1-9]")) {
				matchNum++;
			}else if(s.matches("[a-z]")) {
				matchSmall++;
			}else if(s.matches("[A-Z]")) {
				matchBig++;
			}else {
				matchOther++;
			}
		}
		System.out.println("数字:"+matchNum);
		System.out.println("大写字母:"+matchBig);
		System.out.println("小写字母:"+matchSmall);
		System.out.println("其他字符:"+matchOther);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习十:

  • 把数组中的数据按照指定格式拼接成一个字符串

    • 举例

      int[] arr = {1,2,3};

    • 输出结果 “[1,2,3]”

import java.util.Scanner;

class Demo {
	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		System.out.println("你要输入的数据长度:");
		int n = sc.nextInt();
		int[] arr = new int[n];
		System.out.println("请输入你要格式化的数字:");
		for (int i = 0; i < arr.length; i++) {
			arr[i] = sc.nextInt();
		}
		sc.close();
		System.out.println("格式化后输出为:");
		System.out.print("[");
		for (int i = 0; i < arr.length-1; i++) {
			System.out.print(arr[i]+",");
		}
		System.out.print(arr[n-1]+"]");
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习十一:

  • 把字符串反转
    • “abc” ==> “cba”
import java.util.Scanner;

class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要反转的字符串:");
		String str = sc.next();
		sc.close();
		char[] ch = str.toCharArray();
		int n = ch.length / 2;
		for (int i = 0; i < ch.length; i++) {
			if(i>=n) {
				break;
			}
			char temp = ch[i];
			ch[i] = ch[ch.length-1-i];
			ch[ch.length-1-i] = temp;
		}
		System.out.println("反转后得:");
		System.out.println(ch);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习十二:

  • 统计大串中小串出现的次数

    • 大串:Adcddkiqooqkdddleef
    • 小串:dd

    方法一:

class Demo {
	public static void main(String[] args) {
		String str = "Adcddkiqooqkdddleef";
		String mstr = "dd";
		char[] cs = str.toCharArray();
		char[] mcs = mstr.toCharArray();
		int count = 0;
		int b1 = 0;
		
		int condition = mcs.length;
		int b2 = 0;
		for (int i = 0; i < cs.length; i++) {
			if (i + mcs.length > cs.length - 1) {
				break;
			}
			b1 = 0;
			for (int j = 0; j < mcs.length; j++) {
				if (cs[i + j] == mcs[j]) {
					b1++;
				}
			}
			if (b1 == mcs.length) {
				count++;
			}
		}
		while(condition>0) {
			if(cs[cs.length-1]==mcs[condition-1]) {
				b2++;
			}
			if(b2==mcs.length) {
				count++;
			}
			condition--;
		}
		System.out.println("检测重复到" + count + "次");
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 方法二:

package top.sharehome.BigJava;

import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        String str0 = sc.next();
        int count = 0;
        int index = 0;
        while ((index = str.indexOf(str0)) != -1) {
            count++;
            str = str.substring(index+1,str.length());
        }
        System.out.println(count);
    }
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

练习十三:

  • 除去一个字符串中相邻重复的字符
    • abbddAffeeEddcccwceaa ==> abdAfeEdcwcea
import java.util.Scanner;

class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入需要去重的字符串:");
		String str = sc.next();
		sc.close();
		StringBuffer sb = new StringBuffer();
		char[] charArray = str.toCharArray();
		for (int i = 0; i < charArray.length; i++) {
			if (i + 1 != charArray.length) {
				if (charArray[i] != charArray[i + 1]) {
					sb.append(charArray[i]);
				}
			}else {
				sb.append(charArray[i]);
			}
		}
		System.out.println("去除重复后:");
		System.out.println(sb);
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识Java语言(32):多线程

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

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

相关文章

腾讯云服务器多少钱一年?最新价格整理轻量和CVM报价

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

leetcode热题100.寻找两个正序数组中的中位数

Problem: 4. 寻找两个正序数组的中位数 文章目录 题目思路复杂度Code 题目 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1&#xff1a; …

探索网络分析:图论算法介绍及其如何用于地理空间分析

网络分析简介 出售真空吸尘器的挨家挨户的推销员列出了一个潜在客户,分布在邻近他的几个城市中。他想离开家,参观每个潜在客户,然后返回家园。他可以采取的最短、最有效的路线是什么? 这种情况被称为旅行推销员问题,它可能是优化中研究最深入的问题(旅行推销员问题,2023…

java特殊文件——properties属性文件概述

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!! properties properties是一个Map集合&#xff08;键值对合集&#xff09;&#xff0c;但是一般不当作合集。而是用来代表属性文件&#xff0c;通过Properties读写属性文件里的内容 Properties调用方…

【spring】@Component注解学习

Component介绍 Component 是 Spring 框架中的一个注解&#xff0c;用于将一个类标记为 Spring 上下文中的一个组件。当一个类被标记为 Component 时&#xff0c;Spring 容器会在启动时自动扫描并实例化这个类&#xff0c;并将其注册到 Spring 上下文中。 Component 注解可以用…

玩转云计算:教你在Akamai Linode上构建IT架构–定义项目

时至今日&#xff0c;选择以云计算方式来运维业务&#xff0c;已经成为大部分情况下的最优选。那么如果要从零开始开发一个新应用&#xff0c;并依托云平台来设计、开发、部害和远维&#xff0c;具体该从何处下手&#xff1f;这一系列文章将介绍如何基于Akamai Linode平台实现这…

Matlab基础入门

基础操作&#xff1a; matlab命令行操作&#xff1a; matlab可以使用命令行执行程序&#xff0c;例如下图运行后在右边工作区会产生响应的变量&#xff0c;如不写分号&#xff0c;则会直接运行。 clear命令&#xff1a;clear用于清除变量。clc命令&#xff1a;clc用于清屏。 m…

全球首位AI程序员诞生,技术革新还是职业威胁?

目录 导语&#xff1a; 一、2024年的第一丝凉意 二、AI在编程领域的应用现状 三、关于Devin的现状 四.未来展望 五.面对未来挑战&#xff0c;我们应该 结语&#xff1a; 导语&#xff1a; 时间回调到两周前的3月13号&#xff0c;世界上第一位AI程序员Devin诞生&#xff…

数据分析之POWER Piovt透视表分析与KPI设置

将几个数据表之间进行关联 生成数据透视表 超级透视表这里的字段包含子字段 这三个月份在前面的解决办法 1.选中这三个月份&#xff0c;鼠标可移动的时候移动到后面 2.在原数据进行修改 添加列获取月份&#xff0c;借助month的函数双击日期 选择月份这列----按列排序-----选择月…

C++类模板详解

在学习类模板之前可以了解一下函数模板&#xff0c;可以参考我的另一篇文章C函数模板详解&#xff08;结合代码&#xff09;-CSDN博客 讲解的比较详细&#xff0c;有助于理解类模板。 目录 1、什么是类模板&#xff1f; 2、类模板与函数模板区别 3、类模板对象做函数参数 …

STM32的SPI通信介绍

SPI简介 SPI:串行外设接口,与IIC一样都是通用数据总线。四根通信线&#xff1a;SCK&#xff0c;MOSI&#xff08;DO&#xff09;&#xff0c;MISO&#xff08;DI&#xff09;&#xff0c;SS。同步&#xff08;共用一根时钟线&#xff09;&#xff0c;全双工&#xff08;数据发…

怎么卸载Mybatis?(仅需三步)

解决办法如下&#xff1a; 第一步&#xff1a;选择文件→设置 第二步&#xff1a;找到插件→输入Mybatis找到这个标志 第三步&#xff1a;把这个勾勾取消掉&#xff0c;点击确定&#xff0c;就可以轻松卸载了

对AOP的理解

目录 一、为何需要AOP&#xff1f;1、从实际需求出发2、现有的技术能解决吗&#xff1f;3、AOP可以解决 二、如何实现AOP&#xff1f;1、基本使用2、更推荐的做法2.1 “基本使用”存在的隐患2.2 最佳实践2.2.1 参考Transactional&#xff08;通过AOP实现事务管理&#xff09;2.…

glibc内存管理ptmalloc - 实时打印bin链的变化

前言 在《glibc内存管理ptmalloc - largebin》中我们详细解释了 largebins共63个&#xff0c;并用表格点出了每个bin的size的范围largebin在free一些内存后的状态 特别是第2点&#xff0c;我其实不太满意&#xff0c;因为只有全部free后的一个结果&#xff0c;并没有中间状态…

LeetCode刷题---查询近30天活跃用户数

1.给出满足的条件&#xff0c;截止至2019-07-27的近30天 activity_date BETWEEN DATE_ADD(2019-07-27,INTERVAL -29 day) and 2019-07-27这里使用了Between and 函数和 Date_add函数 2.按照日期分组&#xff0c;统计活跃用户个数 select activity_date day,count(distinct(us…

《Attention Is All You Need》

参考&#xff1a; Attention Is All You Need 论文解读:Attention is All you need Transformer模型中的attention结构作用是什么&#xff1f; 如何最简单、通俗地理解Transformer&#xff1f; Transformer 新型神经网络&#xff0c;基于注意力机制 的 编码器-解码器 的序列处…

Windows服务器性能监控

Windows服务器操作系统设计用于运行在客户端-服务器架构内的服务器上&#xff0c;这些服务器通常设计用于处理繁重的工作负载&#xff0c;并作为企业中涉及的大多数软件操作的骨干。因此&#xff0c;为了防止由于性能问题而导致的任何服务损失并保持操作的无缝流&#xff0c;Wi…

STM32使用HAL库SPI驱动W25Q16 使用FATFS文件系统+USB虚拟U盘

概述 使用stm32F407驱动W25Q16&#xff0c;使用FATFS文件系统&#xff0c;USB虚拟优盘功能&#xff0c;W25Q16一共512个扇区&#xff0c;其中128作为flash存取相关数据&#xff0c;其他的384个扇区用作虚拟U盘使用 CubeMax配置过程 代码 W25Q16.c /***********************…

idea使用git笔记

1.创建分支和切换分支 创建分支 切换分支 2.把新创建的分支提交到远程服务器上&#xff08;注&#xff1a;如果没有提交的&#xff0c;随便找个文件修改再提交&#xff09; (1)切换到要提交的分支&#xff0c;add (2)commit (3)push 3.在自己分支修改代码及提交到自己的远…

What‘s new in PikiwiDB (Pika) v3.5.3 (正式版)

随着 Redis 宣布采用双协议以维护其商业利益&#xff0c;PikiwiDB (Pika) 社区非常荣幸地宣布之际&#xff0c;我们的最新 v3.5.3 正式生产可用版本现已发布。 v3.5.3 版本不仅修复了长期存在的 Bug&#xff0c;还引入了一系列新特性。这些新特性包括 Pika 对 ACL 的支持、移除…