【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇

  • 概念
    • Java特点
    • Java为什么跨平台
    • JVM、JDK、JRE关系
  • 面向对象
    • 什么是面向对象,什么是封装继承多态?
    • 多态体现的方面
    • 面向对象设计原则
    • 重载重写的区别
    • 抽象类和实体类区别
    • Java抽象类和接口的区别
    • 抽象类可以被实例化吗
  • 深拷贝浅拷贝
    • 区别
    • 实现深拷贝方法
  • 对象
    • java创建对象的方式
    • new出来的对象什么时候回收
  • 反射
    • 什么是反射
    • 反射应用场景
  • 注解
  • 异常
    • 常见异常
    • 异常处理
  • object
    • ==和equals
    • String、StringBuilder和StringBuffer
  • 序列化
    • 怎么把一个对象从一个jvm转移到另一个jvm
      • 序列化和反序列化让你自己实现你会怎么做?
  • 设计模式
    • volatile和sychronized如何实现单例模式
    • 代理模式和适配器模式有什么区别?
  • I/O
    • BIO、和NIO、AIO区别
    • NIO如何实现
    • Netty
  • 其他
    • 有一个学生类,想按照分数排序,再按学号排序,应该怎么做?
    • Native


概念

Java特点

  • 平台无关
  • 面向对象
  • 拥有自己的内存管理机制

Java为什么跨平台

Java 之所以能够跨平台,是因为不同操作系统都有对应版本的 Java 虚拟机(JVM)。只要在目标平台上安装相应的 JVM,就能运行 Java 的字节码文件(.class)。

字节码本身是跨平台的,但 JVM 并不能跨平台。不同操作系统需要不同版本的 JVM 来解析 Java 字节码,并将其转换为该平台对应的机器码,以供执行。

JVM、JDK、JRE关系

JVM<JDK<JRE

  • JVM是虚拟机,本质上是一个用来运行java字节码文件的程序。

    • 对字节码文件中的指令,实时的解释成机器码供计算机执行
    • 自动为对象、方法分配内存以及回收不再使用的对象
    • 即时编译JIT对热点代码进行优化,提升效率,JIT将热点代码转为机器码后存至RAM,下次运行可以直接从RAM中调用。
  • JRE是虚拟机+类库,也就是java的运行时环境。

  • JDK包含虚拟机jvm、编译器javac、调试器jdb和一些标准库和工具库。

面向对象

什么是面向对象,什么是封装继承多态?

面向对象就是将事物抽象成对象,提取出对应的属性或者方法,以该对象为中心,通过对象与对象之间交互来完成所需功能。

java面向对象三大特征:封装、继承、多态

  • 封装:将对象的属性和方法结合起来,对外隐藏内部细节,仅通过对象的暴露出来的接口进行交互。
  • 继承:子类共享父类数据结构和方法,是代码复用的主要手段。
  • 多态:指多个不同类的对象对同一接口展现出不同的运行状态,也就是不同实力对同一接口表现出来的不同操作,多态分为编译时多态(重载)和运行时多态(重写)。

多态体现的方面

  • 方法重载:同一个命名的方法可以有多种参数列表。

  • 方法重写:子类可以重写父类同名行为。

  • 接口与实现:多个类可以实现同一接口,多个动物类实现动物接口并调用动物接口的方法则会出发对应的实现。

  • 向上向下转型

    • 向上:父类引用指向子类对象,只能调用父类忒的那个方法,不能调用子类特有方法。

      Animal animal = new Dog();
      animal.makeSound();
      
    • 向下:父类引用转为子类类型,转为子类类型必须强制转换,可以调用子类特有方法。

      Animal animal = new Dog();
      Dog dog = (Dog) animal;
      dog.makeSound();
      dog.wagTail();`
      

      向下转有风险

面向对象设计原则

  • 单一职责:一个类只负责一项职责。
  • 开放封闭:对拓展开放,对修改封闭。
  • 里氏替换:子类对象应该能够替换所有父类对象,并且程序的行为不会发生变化。
  • 接口隔离:接口应该设计得小而专,同时通过依赖注入管理依赖关系。强调通过依赖注入来管理类之间的依赖关系,而不是在类内部直接创建依赖,从而实现松耦合。
  • 依赖倒置:高层次模块不应该依赖于底层模块。
  • 最少知识:一个类应该对其他对象最少了解。

重载重写的区别

  • 重载是对同一命名方法可以拥有不同的参数列表,编译器根据调用时参数类型来自动选择调用哪个方法
  • 重写是子类重写父类同名方法,通过@override来标注

抽象类和实体类区别

  • 实例化:抽象类不能被实例化,只能被继承
  • 方法:抽象类的方法可以没有具体实现
  • 继承:
    • 一个类只能继承一个普通类,但可以实现多个接口
    • 一个类只能继承一个抽象类,但可以实现多个接口。
  • 实现限制:抽象类一般是基类,供其他类继承。而实体类可以被其他类继承和使用。

Java抽象类和接口的区别

  • 两者特点:

    • 抽象类描述类的共同特性和行为,可以有具体的成员变量,构造方法和具体方法。
    • 接口可以多实现,只能有常量字段和抽象方法。
  • 两者区别:

    • 实现接口的关键字implements,继承为extends,一个类可以实现多个接口,一个类只能继承一个抽象类。
    • 接口只能有定义,而抽象类可以有定义与实现。
    • 接口成员默认是常量,public static final,并且必须赋初值不能背修改,方法为public abstract的。抽象类成员默认default,可以被定义,抽象方法由abstract修饰,必须以分号结尾,不带花括号。
    • 抽象类可以由实体变量和静态变量,而接口只能由静态常量。

抽象类可以被实例化吗

抽象类不能通过new被实例化,但是抽象类可以有自己的构造器,在子类实例化的过程也会被调用,以便进行必要的初始化工作。

深拷贝浅拷贝

区别

浅拷贝类似于快捷方式,只是创建了一个新的对象,指向原复制对象的地址,所以如果原复制对象发生变化,他也跟着变化。

深拷贝是指在复制对象的同时,重新开辟一部分内存区域,将其的全部字面值都复制一份,创建一个新对象,与原复制对象除了值一样外没有其他关系。

实现深拷贝方法

  • 实现Cloneable接口并重现clone方法
  • 使用序列化和反序列化:将对象序列化为字节流,在通过字节流反序列化为对象实现深拷贝,要求对象和引用类型实现Serializable接口
  • 手动复制

对象

java创建对象的方式

  • new MyClass obj = new MyClass();

  • 通过反射使用Class类的newInstance()方法:

    MyClass obj = (MyClass) Class.forName("com.example.MyClass").newInstance();
    
  • 使用Constructor类的newInstance()方法:

    Constructor<MyClass> constructor = MyClass.class.getConstructor(String.class);
    MyClass obj = constructor.newInstance("John");
    
  • 使用clone()方式,clone() 方法是 Object 类的一个方法,必须实现 Cloneable 接口才能正常工作。

    class MyClass implements Cloneable {private String name;MyClass(String name) {this.name = name;}void display() {System.out.println("Name: " + name);}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();  // 调用 Object 的 clone() 方法}
    }
    public class Main {public static void main(String[] args) throws CloneNotSupportedException {MyClass original = new MyClass("John");MyClass cloned = (MyClass) original.clone();cloned.display();}
    }
    
  • 使用反序列化

    class MyClass implements Serializable {private String name;MyClass(String name) {this.name = name;}void display() {System.out.println("Name: " + name);}
    }
    public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("obj.dat"));MyClass original = new MyClass("John");out.writeObject(original);out.close();ObjectInputStream in = new ObjectInputStream(new FileInputStream("obj.dat"));MyClass deserialized = (MyClass) in.readObject();in.close();deserialized.display();}
    }
    

new出来的对象什么时候回收

new出来的对象由GC进行回收,根据一下算法进行检测:

  • 引用计数法:为每个对象维护一个引用计数器,当对象被引用时加1,取消引用时减1。
  • 可达性分析法:可达性分析将对象分类两类:垃圾回收的根对象GCRoot和普通对象,如果某个到GCRoot对象是可达的那么这个对象就不可回收。

反射

什么是反射

指在运行中对于任意一个类或对象都知道其所有属性及方法,这种动态获取信息及动态调用对象的方法称为java的反射机制。

  • 运行时类信息访问。

  • 动态对象创建,即使不知道具体类名也可以通过Class类的newInstance()或Constructor对象的newInstance()创建。

  • 动态方法调用,通过调用Method的invoke方法实现,可以调用私有方法。

  • 访问和修改字段值,即使时私有的也可以通过Field类的get()和set()方法调用。

    class Person {private String name = "Alice";private void sayHello() {System.out.println("Hello, my name is " + name);}
    }
    Person person = new Person();
    Field nameField = Person.class.getDeclaredField("name");
    nameField.setAccessible(true); // 允许访问私有字段
    System.out.println("Before modification: " + nameField.get(person));
    nameField.set(person, "Bob"); // 修改私有字段的值
    Method sayHelloMethod = Person.class.getDeclaredMethod("sayHello");
    sayHelloMethod.setAccessible(true); // 允许访问私有方法
    sayHelloMethod.invoke(person); // 调用方法
    

反射应用场景

  • 加载数据库驱动

    我们可以根据实际情况通过反射动态的来加载驱动类,那么在JDBC连接数据库的时候我们就可以通过Class.forName()通过反射加载对应的驱动类

    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection connection = DriverManager.getConnection(url, user, password);
    

    通过反射加载 MySQL JDBC 驱动类,触发其 static 代码块注册驱动。通过 DriverManager 获取数据库连接,内部会调用已注册的驱动程序的 connect() 方法。

  • 配置文件加载

    Spring IoC 容器的本质可以类比为一个 HashMap,其中 Key 是 Bean 的名称,Value 是实例化的对象。Spring 通过反射动态加载 Bean:

    • 解析 beans.xml@Configuration 类,获取需要实例化的类名。
    • 通过 Class.forName() 反射加载类,并使用Constructor.newInstance() 创建对象。
    • 通过 Field.set() 或 方法反射调用(setter、构造器)进行依赖注入。
    • BeanPostProcessor 允许在 Bean 初始化前后 进行额外处理,如AOP 代理等。

注解

注解可以作用在类上、方法上、字段上。注解的本质时继承了Annotation的特殊接口,具体实现时java运行时生成的动态代理。

异常

常见异常

错误和异常均继承于Throwable类

  • 错误Error:OutOfMemoryError、StackOverflowError
  • 异常Exception:
    • 非运行时异常:文件不存在、类未找到
    • 运行时异常:空指针、数组越界

异常处理

通过try-catch

try {int result = 10 / 0; // 触发 ArithmeticException
} catch (ArithmeticException e) {System.out.println("捕获异常:" + e.getMessage());
} finally {System.out.println("无论如何都会执行的 finally 代码块!");
}

object

==和equals

==对比的是对象的首地址是否一样,equals是对比字面值是否一样

String、StringBuilder和StringBuffer

  • String是不可变字符串,String对象是在jdk8之后是存储在堆中,具体存储位置取决于创建方式,常量创建放在字符串常量池,new出来放在普通对象中,intern()手动放入常量池。StringBuilder和StringBuffer也都创建在队中的普通对象里。

  • StringBuffer线程安全,StringBuilder线程不安全

  • 因为StringBuffer引入了线程安全,所以速度要慢于StringBuilder,但都大于String,因为String修改要频繁进行字符串常量池变更。

序列化

怎么把一个对象从一个jvm转移到另一个jvm

  • 序列化与反序列化Serializable
  • 使用中间件的消息传递机制
  • 远程方法调用RPC(Remote Procedure Call)、Feign等
  • 共享数据库

序列化和反序列化让你自己实现你会怎么做?

要么手动拼接JSON字符串,要么使用成熟的框架Fastjson、Jackson

import com.alibaba.fastjson.JSON;
public class FastjsonExample {public static void main(String[] args) {MyClass obj = new MyClass("John", 30);String json = JSON.toJSONString(obj);// 序列化System.out.println(json);  // Output: {"age":30,"name":"John"}// 反序列化MyClass deserializedObj = JSON.parseObject(json, MyClass.class);System.out.println(deserializedObj.name);  // Output: JohnSystem.out.println(deserializedObj.age);   // Output: 30}
}

设计模式

volatile和sychronized如何实现单例模式

volatile 关键字可以防止 JVM 对变量进行指令重排,sychronized是加锁

有两种实现方式

  • 单sychronized,保证一个线程只会拿到一把锁

    public class Singleton {private static Singleton instance;private Singleton() {}// 私有构造函数,防止外部实例化public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton(); // 创建实例}return instance;}
    }
    

​ 缺点:每个线程所对应的对象无论是否创建都会拿锁,性能较差

  • volatile+更细粒度的锁

    public class Singleton {private static volatile Singleton instance;// 使用 volatile 防止指令重排private Singleton() {} // 私有构造函数,防止外部实例化public static Singleton getInstance() {// 第一次检查,不加锁if (instance == null) {synchronized (Singleton.class) {// 第二次检查,加锁if (instance == null) {instance = new Singleton(); // 创建实例}}}return instance;}
    }
    

​ 只有在第一次检查没有实例化的时候才会加锁,volatile保证顺序,更细粒度的锁synchronized保证性能。

代理模式和适配器模式有什么区别?

代理模式通过是增强功能,例如AOP来对目标方法进行增强,比如增加日志、事务、权限检查等。

适配器模式是为了适配不同场景不同应用。

I/O

BIO、和NIO、AIO区别

特性BIONIOAIO
工作模式阻塞 I/O,数据流模式非阻塞 I/O,缓冲区 + 通道 + 选择器异步 I/O,回调通知
线程模型每个连接一个线程多个通道由单线程管理(通过 Selector)异步 I/O,无需阻塞或轮询
I/O 操作阻塞,直到 I/O 操作完成非阻塞,可以轮询多个通道的事件异步,不会阻塞,完成时回调通知
适用场景并发连接数少,低性能需求高并发、大量连接,I/O 密集型应用超高并发、大数据量 I/O 操作
性能问题并发连接数多时性能差(线程开销大)比 BIO 性能好,但需要轮询(高并发时更有效)性能非常高,尤其适用于高并发应用

NIO如何实现

在这里插入图片描述

每个客户端通过通道(Channel)与服务端进行数据交互,客户端通过端口向服务端发送连接请求。服务端使用一个线程,通过多路复用器(Selector)来监听多个客户端的连接请求和数据事件,服务端会将每个客户端的通道注册到 Selector 上进行管理。

Netty

Netty 是建立在 Java NIO 之上的框架,它在底层使用 NIO 的 Selector(选择器)和非阻塞 I/O来处理并发的连接。与传统的 NIO 编程方式相比,有一下特点:

  • 事件驱动和异步机制:通过回调机制处理I/O结果
  • boss-worker:boss只负责管理,具体处理交给worker,还有更加智能的线程管理
  • 内存管理优化:采用内存池化区别于传统每次读取都会分配新的字节数组
  • 支持多种协议:不仅有tcp、udp还有http、https、websocket等等

其他

有一个学生类,想按照分数排序,再按学号排序,应该怎么做?

  • 如果这个学生类是原生数组,直接用Array.sort配合内部函数实现自定义排序。

    Arrays.sort(students,(a,b)->{if(a.getScore()!=b.getScore()){return b.getScore()-a.getScore();}else{return a.getId()-b.getId();}
    });
    
  • 如果这个学生类是List集合,建议建议 Student 实现 Comparable<Student>以提供自定义排序

    class Student implements Comparable<Student> {private int score;private int id;... //构造、getter、setter@Overridepublic int compareTo(Student other) {if (this.score != other.score) {return Integer.compare(other.score, this.score); // 降序}return Integer.compare(this.id, other.id); // 升序}
    }
    

Native

在 Java 中,native 关键字用于声明本地方法(Native Method),这些方法的实现通常由 C 或 C++ 编写,并通过 JNI(Java Native Interface)调用。

用native声明的方法没有方法体

  • native方法声明:

    public class NativeExample {  public native void sayHello();// 声明一个 native 方法// 加载 C/C++ 库static {System.loadLibrary("NativeLib"); // 加载 "NativeLib.dll"(Windows)或 "libNativeLib.so"(Linux)}public static void main(String[] args) {new NativeExample().sayHello(); // 调用本地方法}
    }
    
  • C/C++ 代码实现

    创建 NativeExample.h(通过 javac + javah 生成)

    #include <jni.h>
    #include <stdio.h>
    #include "NativeExample.h"
    JNIEXPORT void JNICALL Java_NativeExample_sayHello(JNIEnv *env, jobject obj) {printf("Hello from C!\n");
    }
    

    编译成动态库:

    • Windows: gcc -shared -o NativeLib.dll NativeExample.c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32"
    • Linux: gcc -shared -o libNativeLib.so NativeExample.c -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux"

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…

【STM32】舵机SG90

1.舵机原理 舵机内部有一个电位器&#xff0c;当转轴随电机旋转&#xff0c;电位器的电压会发生改变&#xff0c;电压会带动转一定的角度&#xff0c;舵机中的控制板就会电位器输出的电压所代表的角度&#xff0c;与输入的PWM所代表的角度进行比较&#xff0c;从而得出一个旋转…

PostgreSQL:备库的延迟问题处理步骤

目录标题 1. 查看主备状态计算方式&#xff1a;实际情况&#xff1a;举个例子&#xff1a; 2. 查看历史状态3. 分析日志文件4. 查看数据库层面的复制状态5. 检查活动事务6. 检查系统资源7. 检查网络状况8. 检查复制槽状态9. 检查未提交的两阶段事务 要排查 PostgreSQL 备库的延…

【重构谷粒商城】06:Maven快速入门教程

重构谷粒商城06——Maven快速入门教程 前言&#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具&#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中&#xff0c;帮助初级程序员快速进阶&#xff0c;以最快的速度&#xff0c;效率&#xff0c;快速进阶到…

【Python】错误异常

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Python 文章目录 1. 错误和异常的概念1.1 错误1.2 异常 2. 常见的内置异常类型2.1 ZeroDivisionError2.2 IndexError2.3 KeyError2.4 TypeError 3. 异常处理机制3.1 try-except 语句3.2 try-except-else 语句3.3 try-except-fin…

Win11 远程 连接 Ubuntu20.04(局域网)

Win11 远程 连接 Ubuntu20.04(局域网&#xff09; 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1&#xff1a;远程桌面连接(winr: mstsc)方式2&#xff1a;mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…

visutal studio 2022使用qcustomplot基础教程

编译 下载&#xff0c;2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录&#xff08;Qt project&#xff09;。 在msvc中将它俩加入项目中。 使用Qt6.8&#xff0c;需要修改两处代码&#xff1a; L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …

ElasticSearch详解

声明 内容来源尚硅谷知识星球谷粒随享项目&#xff0c;部分概念性的内容&#xff0c;就使用对应文档填写了&#xff0c;若有侵权联系作者删除。 检索模块 技术栈&#xff1a;ElasticSearch ElasticSearch介绍 1.1 elasticsearch 简介 官网: https://www.elastic.co/ Ela…

250214-java类集框架

引言 类集框架本质上相当于是容器&#xff0c;容器装什么东西由程序员指定 1.单列集合 单列集合是list和set&#xff0c;list的实现类有ArrayList和LinkedList&#xff0c;前者是数组实现&#xff0c;后者是链表实现。list和set&#xff0c;前者有序、可重复&#xff0c;后者…

Vue3(3)

一.具体业务功能实现 &#xff08;1&#xff09;登录注册页面 [element-plus 表单 & 表单校验] 功能需求说明&#xff1a; 1.注册登录 静态结构 & 基本切换 2.注册功能 (校验 注册) 3.登录功能 (校验 登录 存token) import request from /utils/request// 注册接…

数据结构 day05

数据结构 day05 5. 队列5.3. 链式队列5.3.1. 特征5.3.2. 代码实现 6. 双向链表6.1. 特性6.2. 代码实现 5. 队列 5.3. 链式队列 5.3.1. 特征 逻辑结构&#xff1a;线性结构 存储结构&#xff1a;链式存储 操作&#xff1a;创建、入列、出列、判空、清空 5.3.2. 代码实现 头文…

Uniapp 短视频去水印解析工具开发实现

最近搞了一个有意思的小工具——短视频去水印解析器&#xff01;这玩意儿可以把短视频中的水印给抹掉&#xff0c;还能提取视频、封面等资源。整个项目用了 Uniapp 开发&#xff0c;做完后体验了一下&#xff0c;发现还挺顺手。今天就来跟大家聊聊实现思路和代码细节~ 需求分析…

HTML【详解】input 标签

input 标签主要用于接收用户的输入&#xff0c;随 type 属性值的不同&#xff0c;变换其具体功能。 通用属性 属性属性值功能name字符串定义输入字段的名称&#xff0c;在表单提交时&#xff0c;服务器通过该名称来获取对应的值disabled布尔值禁用输入框&#xff0c;使其无法被…

什么是MVC?什么是SpringMVC?什么是三层架构?

文章目录 应用分层什么是MVC?什么是 SpringMVC&#xff1f;三层架构三层架构和MVC的关系 应用分层 在讲解什么是MVC之前&#xff0c;先来理解一下什么是应用分层。 应用分层是一种软件开发设计思想&#xff0c;将应用程序划分成N个层次&#xff0c;每个层次都分别负责自己…

【深度学习】深度学习和强化学习算法——深度 Q 网络DQN

深度 Q 网络&#xff08;Deep Q-Network, DQN&#xff09; 详解 什么是DQNDQN 的背景DQN 训练流程 2 DQN 的核心思想2.1 经验回放&#xff08;Experience Replay&#xff09;2.2 目标网络&#xff08;Target Network&#xff09;2.3 ε-贪心策略&#xff08;ε-Greedy Policy&a…

CSS flex布局 列表单个元素点击 本行下插入详情独占一行

技术栈&#xff1a;Vue2 javaScript 简介 在实际开发过程中有遇到一个场景&#xff1a;一个list&#xff0c;每行个数固定&#xff0c;点击单个元素后&#xff0c;在当前行与下一行之间插入一行元素详情&#xff0c;便于更直观的查看到对应的数据详情。 这种情形&#xff0c…

Deepseek本地部署

一&#xff0c;Deepseek本地部署方式 有UI且简单&#xff1a;LM Studio、Text Generation WebUI。 高效率但无UI&#xff1a;Ollama、LLama.cpp、Tabby。 二&#xff0c;通过Ollama本地部署Deepseek 1&#xff0c;什么是Ollama Ollama是一个开源的 LLM&#xff08;大型语言…

Django 创建表时 “__str__ ”方法的使用

在 Django 模型中&#xff0c;__str__ 方法是一个 Python 特殊方法&#xff08;也称为“魔术方法”&#xff09;&#xff0c;用于定义对象的字符串表示形式。它的作用是控制当对象被转换为字符串时&#xff0c;应该返回什么样的内容。 示例&#xff1a; 我在初学ModelForm时尝…

最新智能优化算法: 中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法求解23个经典函数测试集,MATLAB代码

中华穿山甲优化&#xff08; Chinese Pangolin Optimizer &#xff0c;CPO&#xff09;算法由GUO Zhiqing 等人提出&#xff0c;该算法的灵感来自中华穿山甲独特的狩猎行为&#xff0c;包括引诱和捕食行为。 算法流程如下&#xff1a; 1. 开始 设置算法参数和最大迭代次数&a…

【云安全】云原生- K8S etcd 未授权访问

什么是etcd&#xff1f; etcd 是一个开源的分布式键值存储系统&#xff0c;主要用于存储和管理配置信息、状态数据以及服务发现信息。它采用 Raft 共识算法&#xff0c;确保数据的一致性和高可用性&#xff0c;能够在多个节点上运行&#xff0c;保证在部分节点故障时仍能继续提…