【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);
        }
        @Override
        protected 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: John
        System.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
        @Override
        public 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"

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

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

相关文章

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略&#xff0c;早在2024年5月&#xff0c;推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体&#xff0c;为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来&#xff0c;亚信安全人工智能实验室利…

Flutter 的 Widget Key 提议大调整?深入聊一聊 Key 的作用

Flutter 的 Widget Key 提议大调整&#xff1f;深入聊一聊 Key 的作用 在 Flutter 里&#xff0c;Key 对象存在的目的主要是区分和维持 Widget 的状态&#xff0c;它是控件在渲染树里的「复用」标识之一&#xff0c;这一点在之前的《深入 Flutter 和 Compose 在 UI 渲染刷新时…

Vulhub靶机 openfire(CVE-2023-32315)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 二、访问靶机IP 9090端口 1、利用bp&#xff0c;抓取当前页面的包&#xff0c;并修改get请求如下 /setup/setup-s/%u002e%u002e/%u002e%u002e/user-groups.jsp 获取到JSESSIONID和csrf的值 2、拿到…

LogicFlow自定义节点:矩形、HTML(vue3)

效果&#xff1a; LogicFlow 内部是基于MVVM模式进行开发的&#xff0c;分别使用preact和mobx来处理 view 和 model&#xff0c;所以当我们自定义节点的时候&#xff0c;需要为这个节点定义view和model。 参考官方文档&#xff1a;节点 | LogicFlow 1、自定义矩形节点 custo…

python卷积神经网络人脸识别示例实现详解

目录 一、准备 1&#xff09;使用pytorch 2&#xff09;安装pytorch 3&#xff09;准备训练和测试资源 二、卷积神经网络的基本结构 三、代码实现 1&#xff09;导入库 2&#xff09;数据预处理 3&#xff09;加载数据 4&#xff09;构建一个卷积神经网络 5&#xff0…

基于Ollama安装deepseek-r1模型搭建本地知识库

大模型 安装Ollama使用win系统安装使用sh脚本安装使用docker安装 下载大模型搭建本地知识库安装Dify对比参数模型 本实验主要使用win系统安装ollama部署deepseek-r1&#xff08;1.5b、7b、8b、14b、32b等参数&#xff09;并搭建本地知识库&#xff08;个人学习研究为主&#xf…

【R语言】t检验

一、基本介绍 t检验&#xff08;t-test&#xff09;是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式&#xff1a; t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…

Uniapp 原生组件层级过高问题及解决方案

文章目录 一、引言&#x1f3c5;二、问题描述&#x1f4cc;三、问题原因❓四、解决方案&#x1f4af;4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结&#x1f38…

x_xor_md5

x_xor_md5 打开附件&#xff0c;用010打开 发现有一行值是重复的。 根据题目提示我们把全文与重复行进行异或 str1 [0x01,0x78,0x0C,0x4C,0x10,0x9E,0x32,0x37,0x12,0x0C,0xFB,0xBA,0xCB,0x8F,0x6A,0x53]result[]txt [0x69,0x35,0x41,0x01,0x1C,0x9E,0x75,0x78,0x5D,0x48,0xF…

【C语言标准库函数】标准输入输出函数详解[6]:字符文件读取写入

目录 一、字符文件写入函数 1.1. fputc函数 1.1.1. fputc函数简介 1.1.2. 使用场景 1.1.3. 注意事项 1.1.4. 示例 1.2. fputs函数 1.2.1. fputs函数简介 1.2.2. 使用场景 1.2.3. 注意事项 1.2.4. 示例 二、字符文件读取函数 2.1. fgetc函数 2.1.1. 函数简介 2.1…

基于深度学习的半导体故障诊断与寿命预测算法研究

摘要 半导体产业在现代科技领域占据着核心地位&#xff0c;其设备的稳定性和可靠性至关重要。传统的半导体故障诊断和寿命预测方法存在效率低、准确性差等问题。本文聚焦于深度学习算法在半导体故障诊断与寿命预测方面的应用&#xff0c;详细阐述了卷积神经网络&#xff08;CN…

制药行业 BI 可视化数据分析方案

一、行业背景 随着医药行业数字化转型的深入&#xff0c;企业积累了海量的数据&#xff0c;包括销售数据、生产数据、研发数据、市场数据等。如何利用这些数据&#xff0c;挖掘其价值&#xff0c;为企业决策提供支持&#xff0c;成为医药企业面临的重大挑战。在当今竞争激烈的…

基于Python flask-sqlalchemy的SQLServer数据库管理平台

适应场景&#xff1a; 主要用于帮助DBA自动化很多日常工作&#xff0c;包括&#xff1a; 数据库状态监控 性能问题诊断 日志分析 自动巡检 问题告警 系统截图&#xff1a; main.py from flask import Blueprint, render_template, request, flash, redirect, url_for f…

TensorRT 8.6.1教程1-TensorRT简介

区分计算节点和数据节点 视频 TensorRT 教程 | 基于 8.6.1 版本 | 第一部分_哔哩哔哩_bilibili cookbook

MySQL创建存储过程和存储函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

【项目总结】易到家家政服务平台 —— 派单调度(7)

派单调度需求分析 在抢单业务中&#xff0c;用户下单成功由服务人员或机构进行抢单&#xff0c;抢单成功服务人员上门服务&#xff0c;除了抢单业务系统还设计了派单业务&#xff0c;由系统根据用户订单的特点自动派给合适的服务人员。 流程如下&#xff1a; 首先获取待分配…

visual studio 在kylin v10上跨平台编译时c++标准库提示缺少无法打开的问题解决

情况1&#xff1a;提示无法打开 源文件 "string"之类导致无法编译 情况2:能编译&#xff0c;但无法打开这些库文件或标准库使用提示下划红色问题 解决方案&#xff1a; 一、通过工具->选项->跨平台里&#xff0c;在“远程标头IntelliSense管理器”更新下载一下…

SpringCould+vue3项目的后台用户管理的CURD【Taurus教育平台】

文章目录 一.SpringCouldvue3项目的后台用户管理的CURD【Taurus教育平台】 1.1 背景 二.用户列表&#xff08;分页查询&#xff09; 2.1 前端Vue3 &#xff08;Vue3-Element-Admin&#xff09;2.2 后端SpringCould 处理 三. 用户信息删除 3.1 前端Vue3 &#xff08;Vue3-Eleme…

Eclipse 插件开发相关概念

整理了Eclipse插件开发的概念&#xff0c;用于熟悉入门 SWT&#xff08;Standard Widget Toolkit&#xff09;标准图形工具箱 Java开发的GUI程序技术&#xff0c;由Eclipse开发&#xff0c;相比AWT、Swing更美观&#xff1b;对于目标平台上已经有的控件&#xff0c;SWT会直接使…

算法之 数论

文章目录 质数判断质数3115.质数的最大距离 质数筛选204.计数质数2761.和等于目标值的质数对 2521.数组乘积中的不同质因数数目 质数 质数的定义&#xff1a;除了本身和1&#xff0c;不能被其他小于它的数整除&#xff0c;最小的质数是 2 求解质数的几种方法 法1&#xff0c;根…