JavaSE【抽象类和接口】(抽象类、接口、实现多个接口、接口的继承)

news2024/11/17 13:40:17

一、抽象类

Java 中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用 给出具体的实现体。

1.语法

// 抽象类:被 abstract 修饰的类
public abstract class Shape {
// 抽象方法:被 abstract 修饰的方法,没有方法体
        abstract public void draw ();
        abstract void calcArea ();
// 抽象类也是类,也可以增加普通方法和属性
        public double getArea (){
               return area ;
        }
        protected double area ; // 面积
}
写完之后,编译器可以看到抽象类 和 抽象方法 的图标

 

 

2.抽象类的特性 

1. 抽象类不能直接实例化自身对象,只能创建该抽象类的子类
2. 抽象方法不能是 private
3. 抽象方法不能被 fifinal static 修饰,因为抽象方法要被子类重写

4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰
5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
7.如果普通类A继承了抽象类,但不想重写该抽象类Shape的方法,这个普通类A前面就要用abstract修饰,但如果又有一个普通类B继承了这个A,那么B既要重写A的抽象方法,也要重写Shape的抽象方法

例子: 特性都在里面标注了


//抽象类,被abstract修饰的方法
abstract class Shape{
    //抽象类当中,可以和普通类一样,定义成员变量 和 成员方法
    //抽象类,被abstract修饰的方法
   public abstract void draw();
   //被final、private、static修饰的抽象方法是不可以的
}
//抽象类就是为了被继承
//当一个普通的类,继承了这个抽象类,那么需要重写这个抽象类中的所有抽象方法!!!
class Cycle extends Shape{
    @Override
    public void draw() {
        System.out.println("圆形");
    }
}
class Rect extends Shape{
    @Override
    public void draw() {
        System.out.println("矩形");
    }
}
//如果普通类A继承了抽象类,但不想重写该抽象类Shape的方法,这个普通类A前面就要用abstract修饰
//但如果又有一个普通类B继承了这个A,那么B既要重写A的抽象方法,也要重写Shape的抽象方法
abstract class A extends Shape{
    public abstract void test();
}
class B extends A{
    //重写Shape里的所有抽象方法
    @Override
    public void draw() {

    }
    //重写A里的所有抽象方法
    @Override
    public void test() {

    }
}
public class Test {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        //抽象类本身不能实例化对象
        //Shape shape = new Shape();

        //抽象类只能创建该抽象类的子类
        Shape shape = new Rect();
        Shape shape2 = new Cycle();
        drawMap(shape);
        drawMap(shape2);
    }
}

二、接口

Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

1.语法

接口的定义格式与定义类的格式基本相同,将 class 关键字换成 interface 关键字,就定义了一个接口。
public interface 接口名称 {
// 抽象方法
        public abstract void method1 (); // public abstract 是固定搭配,可以不写
        public void method2 ();
        abstract void method3 ();
        void method4 ();
// 注意:在接口中上述写法都是抽象方法,跟推荐方式 4 ,代码更简洁
}

2.接口的使用

接口不能直接使用,必须要有一个 " 实现类 " " 实现 " 该接口,实现接口中的所有抽象方法。
public class 类名称 implements 接口名称 {
// ...
}
子类和父类之间是 extends 继承关系,类与接口之间是 implements 实现关系。

 4.接口特性

1. 接口类型是一种引用类型,但是不能直接 new 接口的对象
2. 接口里只能有抽象方法; dk8中:接口中还可以包含default、static方法。
3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现,或者使用 static、default修饰的方法 (其中由接口实现的类,必须被重写,因为接口里的方法默认都是 public abstract 所修饰的!!!)(default修饰的可以重写也可以不重写)(static不能重写,可以直接通过类名调用)
4.  重写接口中方法时,不能使用默认的访问权限,只能是public
(因为子类的访问权限要大于父类)
5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static fifinal 变量
(相当于常量)
6.   接口中不能有代码块和构造方法
7. 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是 .class
8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类

//接口
interface IShape{
    //接口里的方法默认都是 public abstract 所修饰的!!!
    //全称 :public abstract void draw();
    void draw();//默认抽象方法

    //接口里只能有抽象方法,还有static、default修饰的方法(jdk8引入的)
    default public void test(){}
    static public void test2(){};

    //接口当中的成员变量 默认都是 public static final 修饰的!!!
    //实际上就是一个常量,常量一般大写字母表示
    int A = 1;
    public static int B = 2;
    public static final int C = 3;

}
//类实现接口,使用implement
class Rect_i implements IShape{
    //需要重写接口的抽象方法
    @Override
    public void draw() {
        System.out.println("矩形");
    }
}
class Flower_i implements IShape{
    @Override
    public void draw() {
        System.out.println("花花");
    }
}
public class Test2 {
    public static void drawMap(IShape iShape){
        iShape.draw();
    }
    public static void main(String[] args) {
        //接口不能实例化自身
        //IShape iShape = new IShape();

        //接口只能创建该抽象类的子类
        IShape iShape1 = new Flower_i();
        IShape iShape2 = new Rect_i();
        drawMap(iShape1);
        drawMap(iShape2);

        System.out.println("================");

        IShape[] iShapes ={new Flower_i(),new Rect_i()};
        for (IShape x:iShapes) {
            drawMap(x);
        }
    }

}

 

4.实现笔记本电脑使用USB鼠标、USB键盘的例子

1. USB 接口:包含打开设备、关闭设备功能
2. 笔记本类:包含开机功能、关机功能、使用 USB 设备功能
3. 鼠标类:实现 USB 接口,并具备点击功能
4. 键盘类:实现 USB 接口,并具备输入功能
package demo2;

public interface USB {
    void openDevice();
    void closeDevice();
}
package demo2;

public class Mouse implements USB{
    @Override
    public void openDevice() {
        System.out.println("鼠标开始工作");
    }
    @Override
    public void closeDevice() {
        System.out.println("鼠标结束工作");
    }
    public void click(){
        System.out.println("疯狂点击鼠标。。。。。。。。");
    }
}
package demo2;

public class KeyBoard implements USB{
    @Override
    public void openDevice() {
        System.out.println("键盘开始工作");
    }
    @Override
    public void closeDevice() {
        System.out.println("键盘结束工作");
    }
    public void input(){
        System.out.println("疯狂敲打键盘。。。。。。。。。。。");
    }
}
package demo2;

public class Computer {
    public void powerOn(){
        System.out.println("打开电脑!!");
    }
    public void powerOff(){
        System.out.println("关闭电脑!!");
    }
    public void useService(USB usb){
        usb.openDevice();
        //如果usb引用的对象是Mouse,强制类型转换到Mouse
        //如果usb引用的对象是KeyBoard,强制类型转换到KeyBoard
        if (usb instanceof Mouse){
            Mouse mouse = (Mouse) usb;
            mouse.click();
        } else if (usb instanceof KeyBoard) {
            KeyBoard keyBoard = (KeyBoard) usb;
            keyBoard.input();
        }
        usb.closeDevice();
    }
}
package demo2;

public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        Mouse mouse = new Mouse();
        KeyBoard keyBoard = new KeyBoard();

        computer.powerOn();
        computer.useService(mouse);
        System.out.println("=================");
        computer.useService(keyBoard);
        computer.powerOff();
    }
}

 

5.实现多个接口 - 解决Java的多继承问题

Java 中,类和类之间是单继承的,一个类只能有一个父类,即 Java 中不支持多继承 ,但是 一个类可以实现多个接 。下面通过类来表示一组动物 .
狗是一种动物 , 具有会跑的特性 .
青蛙也是一种动物 , 既能跑 , 也能游泳
鸭子也是一种动物 , 既能跑 , 也能游 , 还能飞

 

 

package demo3;

abstract class Animal{
    public String name;
    public int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public abstract void eat();

}
interface IFly{
    void fly();
}
interface IRun{
    void run();
}
interface ISwim{
    void swim();
}
//狗是一个动物,具备跑这个功能
class Dog extends Animal implements IRun{
    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void run() {
        System.out.println(this.name+"正在跑!!!");
    }

    @Override
    public void eat() {
        System.out.println(this.name+"吃狗粮");
    }


}
class Frog extends Animal implements IRun,ISwim{
    public Frog(String name,int age){
        super(name,age);
    }

    @Override
    public void run() {
        System.out.println(this.name+"正在用4条腿跳着跑!!");
    }

    @Override
    public void swim() {
        System.out.println(this.name+"正在蛙泳!!");
    }

    @Override
    public void eat() {
        System.out.println(this.name+"吃蛙粮");
    }
}
class Duck extends Animal implements IRun,IFly,ISwim{
    public Duck(String name, int age) {
        super(name, age);
    }

    @Override
    public void run() {
        System.out.println(this.name+"正在两只脚 跑!!!");
    }

    @Override
    public void swim() {
        System.out.println(this.name+"正在 游泳!!!");
    }

    @Override
    public void fly() {
        System.out.println(this.name+"正在用两只翅膀飞!!!");
    }

    @Override
    public void eat() {
        System.out.println(this.name+"吃鸭粮");
    }
}
public class Test {
    public static void func1(Animal animal){
        animal.eat();
    }
    public static void run(IRun iRun){
        iRun.run();
    }
    public static void fly(IFly ifly){
        ifly.fly();
    }
    public static void swim(ISwim iSwim){
        iSwim.swim();
    }

    public static void main(String[] args) {
        run(new Duck("唐老鸭",1));
        swim(new Duck("唐老鸭",1));
        fly(new Duck("唐老鸭",1));
        System.out.println("========");
        run(new Dog("二狗子",2));
        System.out.println("========");
        run(new Frog("青蛙王子",3));
        swim(new Frog("青蛙王子",3));

    }
    public static void main1(String[] args) {
//        Animal animal = new Duck("唐老鸭",1);
//        Animal animal2 = new Dog("二狗子",2);
//        Animal animal3 = new Frog("青蛙王子",3);

        Animal[] animals = {new Duck("唐老鸭",1),new Dog("二狗子",2),new Frog("青蛙王子",3)};
        for (Animal x:animals) {
            func1(x);

        }

    }
}

 6.接口间的继承

package demo4extends;

interface A{
    void testA();
}
interface B extends A{
    void testB();
}
class TestDemo1 implements B{
    @Override
    public void testA() {
        
    }

    @Override
    public void testB() {

    }
}
public class Test {
}

 7.接口的使用实例

1)给定一个学生对象数组, 对这个对象数组中的元素进行排序

 

 

 

 

方法1:类里重写comparaTo方法(方式固定)

package demo5;

/**
 * 方法1:固定比较方式
 */
class Student implements Comparable<Student>{
    public String name;
    public int age;

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        if(this.age > o.age){
            return 1;
        } else if (this.age == o.age) {
            return 0;
        }else {
            return -1;
        }
    }
}
public class Test {
    public static void main(String[] args) {
        //两个引用类型比较大小
        Student student1 = new Student("zhangsan",10);
        Student student2 = new Student("lisi",20);
        //System.out.println(student1>student2);无法比较
        //因为,student是引用类型,里面存的是地址,无法直接通过大于小于符号比较大小
        //不知道拿什么作比较(是姓名还是年龄)

        //使用重写后的compareTo
        System.out.println(student1.compareTo(student2));
    }
    public static void main1(String[] args) {
        //普通数值比较大小
        int a = 10;
        int b = 20;
        System.out.println(a > b);//false
    }
}

方法2:自定义一个类,写比较器(运用灵活)


import java.util.Comparator;

/**
 * 方法2:可以根据需求,更改比较的对象
 * 比较器
 */

class Student {
    public String name;
    public int age;

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}
//根据年龄比较
class AgeComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.age- o2.age;
    }
}
//根据姓名比较
class NameComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.name.compareTo(o2.name);
    }
}
public class Test {
    public static void main(String[] args) {
        //两个引用类型比较大小
        Student student1 = new Student("zhangsan",10);
        Student student2 = new Student("lisi",20);

        AgeComparator ageComparator = new AgeComparator();
        System.out.println(ageComparator.compare(student1, student2));

        NameComparator nameComparator = new NameComparator();
        System.out.println(nameComparator.compare(student1, student2));
    }

}

2)给students数组排序

package demo5;
import java.util.Arrays;
import java.util.Comparator;

/**
 * 方法1:固定比较方式
 */
//class Student implements Comparable<Student>{
//    public String name;
//    public int age;
//
//    public Student(String name, int age) {
//        this.name = name;
//        this.age = age;
//    }
//
//    @Override
//    public String toString() {
//        return "Student{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                '}';
//    }
//
//    @Override
//    public int compareTo(Student o) {
//        if(this.age > o.age){
//            return 1;
//        } else if (this.age == o.age) {
//            return 0;
//        }else {
//            return -1;
//        }
//    }
//}
/**
 * 方法2:可以根据需求,更改比较的对象
 * 比较器
 */

class Student {
    public String name;
    public int age;

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}
//根据年龄比较
class AgeComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.age- o2.age;
    }
}
//根据姓名比较
class NameComparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.name.compareTo(o2.name);
    }
}
public class Test {
    public static void main(String[] args) {
//        int[] array = {1,2,31,4};
//        Arrays.sort(array);
//        System.out.println(Arrays.toString(array));

        Student[] students = new Student[3];
        students[0] = new Student("zhangsan",10);
        students[1] = new Student("lisi",4);
        students[2] = new Student("abc",5);
        System.out.println("排序前:"+Arrays.toString(students));

        //方法1:可以用固定方法
        //Arrays.sort(students);

        //方法2:可以用自定义方法,比较器
        AgeComparator ageComparator = new AgeComparator();
        NameComparator nameComparator = new NameComparator();
        //Arrays.sort(students,ageComparator);
        Arrays.sort(students,nameComparator);
        System.out.println("排序后:"+Arrays.toString(students));

    }
    public static void main3(String[] args) {
        //两个引用类型比较大小
        Student student1 = new Student("zhangsan",10);
        Student student2 = new Student("lisi",20);

//        AgeComparator ageComparator = new AgeComparator();
//        System.out.println(ageComparator.compare(student1, student2));
//
//        NameComparator nameComparator = new NameComparator();
//        System.out.println(nameComparator.compare(student1, student2));
    }
    public static void main2(String[] args) {
        //两个引用类型比较大小
        Student student1 = new Student("zhangsan",10);
        Student student2 = new Student("lisi",20);
        //System.out.println(student1>student2);无法比较
        //因为,student是引用类型,里面存的是地址,无法直接通过大于小于符号比较大小
        //不知道拿什么作比较(是姓名还是年龄)

        //使用重写后的compareTo
        //System.out.println(student1.compareTo(student2));
    }
    public static void main1(String[] args) {
        //普通数值比较大小
        int a = 10;
        int b = 20;
        System.out.println(a > b);//false
    }
}

方法1:固定方法

 

 

 

方法2:自定义方法,比较器

根据name排序 

 根据age排序

 

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

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

相关文章

AI.com的命运之战:马斯克如何从OpenAI手中夺走这个价值千万的域名

一、AI.COM AI.com是一个极具价值的域名&#xff0c;它于1993年5月注册&#xff0c;距今已有近30年的历史。2021年2月&#xff0c;人工智能研究机构OpenAI以至少1100万美元&#xff08;约合人民币7535万元&#xff09;的高价&#xff0c;拿下了这个域名。OpenAI是马斯克在2015…

微信小程序中的分包使用介绍

一、分包的好处 可以优化小程序首次启动的下载时间 在多团队共同开发时可以更好的解耦协作 主包&#xff1a;放置默认启动页面/TabBar 页面&#xff0c;公共资源/JS 脚本 分包&#xff1a;根据开发者的配置进行划分 限制&#xff1a;所有分包大小不超过 20M&#xff0c;单…

私有化部署企业IM即时通讯:提升效率、防止泄密、高效协同办公

随着科技的飞速发展和智能手机的普及&#xff0c;即时通讯&#xff08;IM&#xff09;应用在我们的生活和工作中变得越来越重要。在企业中&#xff0c;IM已成为员工之间交流沟通的主要方式之一。然而&#xff0c;对于大多数企业来说&#xff0c;选择私有化部署企业IM即时通讯软…

Pytorch Tutorial【Chapter 2. Autograd】

Pytorch Tutorial 文章目录 Pytorch TutorialChapter 2. Autograd1. Review Matrix Calculus1.1 Definition向量对向量求导1.2 Definition标量对向量求导1.3 Definition标量对矩阵求导 2.关于autograd的说明3. grad的计算3.1 Manual手动计算3.2 backward()自动计算 Reference C…

解决在mybatis中使用class属性绑定映射文件出现的异常问题~

如下所示&#xff0c;当我在XML文件中通过class属性配置其mapper文件时&#xff0c;出现下述错误 <mappers><mapper class"mappers.userMapper"/> </mappers>错误描述&#xff1a; 解决方法如下所示&#xff1a;在pom.xml文件中添加下述代码 <…

【腾讯云Cloud Studio实战训练营】使用React快速构建点餐H5

文章目录 前言一、Cloud Studio是什么二、Cloud Studio特点三、Cloud Studio使用1.访问官网2.账号注册3.模板选择4.模板初始化5.H5开发安装 antd-mobile安装 Less安装 normalize&#xff1a;上传项目需要的素材&#xff1a;替换App.js主文件&#xff1a;项目启动、展示 6.发布仓…

zookeeper安装教程及其基本使用

目录 zookeeper下载&#xff1a; zookeeper下载官网&#xff1a; 本地安装配置&#xff1a; 启动zookeeper&#xff1a; 开启服务端&#xff1a; 启动客户端&#xff1a; 查看zookeeper的状态&#xff1a; zoo.cfg文件解读&#xff1a; zookeeper的集群安装&#xff1a…

Go调试神器pprof使用教程【实战分享】

Go调试神器pprof使用教程 go的GC会自动管理内存&#xff0c;但是这不代表go程序就不会内存泄露了。 go常见产生内存泄露的原因就是goroutine没有结束&#xff0c;简单说就是goroutine 被阻塞了&#xff0c;这样就会导致goroutine引用的内存不被GC回收。 1 概念 在Go中&#xf…

二叉树的性质、前中后序遍历【详细】

1. 树概念2.二叉树的概念1.2二叉树的性质 3.二叉树遍历3.2前序遍历3.2 中序遍历3.3 后序遍历 1. 树概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合&#xff0c;有二叉树&#xff0c;N叉树等等。 子树…

[CKA]考试之一个 Pod 封装多个容器

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 创建一个Pod&#xff0c;名字为kucc1&#xff0c;这个Pod包含4容器&#xff…

Python:Spider爬虫工程化入门到进阶(1)创建Scrapy爬虫项目

Python&#xff1a;Spider爬虫工程化入门到进阶系列: Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;1&#xff09;创建Scrapy爬虫项目Python&#xff1a;Spider爬虫工程化入门到进阶&#xff08;2&#xff09;使用Spider Admin Pro管理scrapy爬虫项目 本文通过简…

眼科医生推荐的台灯 护眼台灯买什么好?

我家孩子需要一个护眼灯&#xff0c;就请教了我的一个医生朋友。大家都知道医生白天对着电脑长时间的工作&#xff0c;晚上还要看书&#xff0c;查文献&#xff0c;写论文&#xff0c;选一个对眼睛友好的高质量护眼台灯对他们是刚需&#xff0c;同时又是医生&#xff0c;所以他…

网络安全(黑客)自学建议一一附学习路线

温馨提示&#xff1a;为了避免误入歧途&#xff0c;自学请优先看《网络安全法》。 下面是一些学习建议&#xff1a; 1、多请教有经验的人 切忌钻牛角尖&#xff0c;特别是刚入门的什么都不了解的情况下&#xff0c;可能你花好几天研究的一个东西&#xff0c;人10分钟就能搞定…

windows永久暂停更新

目录 1.winr,输入regedit打开注册表 2.打开注册表的这个路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键空白地方新建QWORD值命名为:FlightSettingsMaxPauseDays 3.双击FlightSettingsMaxPauseDays,修改里面的值为100000,右边基数设置…

互联网同摄影技术结合,图片直播的优势有哪些?

互联网同摄影技术结合&#xff0c;诞生了图片直播技术&#xff0c;这是一种区别传统摄影的商业拍摄模式。但是很多人听到图片直播都是一头雾水&#xff0c;图片直播依托于互联网和摄影技术&#xff0c;实现了边拍摄、边上传、边修图、边分享&#xff0c;实时将照片上传至互联网…

深入理解机器学习与极大似然之间的联系

似然函数&#xff1a;事件A的发生含着有许多其它事件的发生。所以我就把这些其它事件发生的联合概率来作为事件A的概率&#xff0c;也就是似然函数。数据类型的不同&#xff08;离散型和连续性&#xff09;就有不同的似然函数 极大似然极大似然估计方法&#xff08;Maximum Li…

棒球1号位:棒球联盟成立棒球学院计划

棒球联盟成立棒球学院计划 1. 引言 棒球学院&#xff0c;是一个致力于培养棒球运动员的综合性机构。我们的目标是建立一个集训练、教育和娱乐于一体的体育中心&#xff0c;将孩子们带入棒球的世界&#xff0c;发掘他们的潜力&#xff0c;培养他们的团队协作精神和体育精神。 …

开源社区寻找八月创作之星!你准备好了吗~

活动页面&#xff1a;https://openlab.cosmoplat.com/createStarCampaign-202308​​​​​​卡奥斯开源社区定位打造工业互联网行业顶级开源社区生态平台&#xff0c;为开发者、企业等用户提供代码托管、技术交流/共享、硬件认证/接入、培训认证、大赛活动等服务&#xff0c;目…

【移动机器人运动规划】02 —— 基于采样的规划算法

文章目录 前言相关代码整理:相关文章&#xff1a; 基本概念概率路线图&#xff08;Probabilistic Road Map&#xff09;基本流程预处理阶段查询阶段 优缺点&#xff08;pros&cons&#xff09;一些改进算法Lazy collision-checking Rapidly-exploring Random Tree算法伪代码…

性能分析记录

4实例压测TPS浮动在200-300 1.TPS浮动200-300&#xff0c;ART浮动的可能性是10-20ms&#xff0c;链路复杂是可接受的&#xff0c;链路简单则需要分析原因。 1&#xff09;缓存没命中&#xff0c;对某些账号缓存没命中&#xff0c;或缓存失效后导致隔段时间耗时升高。 2&…