【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区别
| 特性 | BIO | NIO | AIO |
|---|---|---|---|
| 工作模式 | 阻塞 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"
- Windows:
相关文章:
【Java八股文】01-Java基础面试篇
【Java八股文】01-Java基础面试篇 概念Java特点Java为什么跨平台JVM、JDK、JRE关系 面向对象什么是面向对象,什么是封装继承多态?多态体现的方面面向对象设计原则重载重写的区别抽象类和实体类区别Java抽象类和接口的区别抽象类可以被实例化吗 深拷贝浅拷…...
k8s部署logstash
1. 编写logstash.yaml配置文件 --- apiVersion: v1 kind: Service metadata:name: logstash spec:type: ClusterIPclusterIP: Noneports:- name: logstash-tcpport: 5000targetPort: 5000- name: logstash-beatsport: 5044targetPort: 5044- name: logstash-apiport: 9600targ…...
Arcgis/GeoScene API for JavaScript 三维场景底图网格设为透明
项目场景: 有时候加载的地图服务白色区域会露底,导致在三维场景时,露出了三维网格,影响效果,自此,我们需要将三维场景的底图设为白色或透明。 问题描述 如图所示: 解决方案: 提示…...
《qt open3d网格拉普拉斯平滑》
qt open3d网格拉普拉斯平滑 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterLaplacian_triggered();void MainWindow::on_actionFil...
怎么选择免费的SEO排名工具
随着2025年互联网的迅猛发展,越来越多的企业意识到,拥有一个高排名的网站对于品牌曝光和吸引客户至关重要。尤其是通过SEO(搜索引擎优化),可以提高网站在搜索引擎中的排名,进而带来更多的自然流量ÿ…...
缓存技术介绍
缓存技术是一种用于提高数据访问速度的技术,通过在快速存储介质(如内存)中保存频繁访问的数据,从而减少对较慢存储介质(如硬盘)的访问次数。缓存可以显著提高系统性能,尤其是在处理大量数据或进…...
SSH隧道+Nginx:绿色通道详解(SSH Tunnel+nginx: Green Channel Detailed Explanation)
SSH隧道Nginx:内网资源访问的绿色通道 问题背景 模拟生产环境,使用两层Nginx做反向代理,请求公网IP来访问内网服务器的网站。通过ssh隧道反向代理来实现,重点分析一下nginx反代的基础配置。 实验环境 1、启动内网服务器的tomca…...
Spring 项目接入 DeepSeek,分享两种超简单的方式!
⭐自荐一个非常不错的开源 Java 面试指南:JavaGuide (Github 收获148k Star)。这是我在大三开始准备秋招面试的时候创建的,目前已经持续维护 6 年多了,累计提交了 5600 commit ,共有 550 多位贡献者共同参与…...
【c++】四种类型转换形式
【c】四种类型转换形式 编译时: static_cast(静态转换) const_cast(去常性转换) reinterpret_cast(重新解释转换,直接转换地址) 运行时: dynamic_cast(动态转换,运行时类…...
Unity 制作2D动画必要准备:启动篇
制作Unity 2D动画需要准备以下内容: 美术素材准备 选择或绘制符合需求的2D精灵图(如像素风格角色、场景元素)确保素材包含完整动画序列帧(如行走/攻击/跳跃等动作分解)注意素材尺寸统一性,建议采用网格化排…...
半小时在本地部署DeepSeek的Janus Pro,进行图片分析和文生图
半小时在本地部署DeepSeek的Janus Pro,进行图片分析和文生图 下载Janus Pro源代码下载模型文件创建Python虚拟环境安装依赖包Janus Pro测试运行程序图片分析测试文生图测试使用中文提示词使用英文提示词 测试印象: 整体模型体积较小,个人可以…...
急停信号的含义
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是确认设备按钮的急停…...
设置mysql的主从复制模式
mysql设置主从复制模式似乎很容易,关键在于1)主库启用二进制日志,2)从库将主库设为主库。另外,主从复制,复制些什么?从我现在获得的还很少的经验来看,复制的内容有表,用户…...
三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)
三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 完整代码私信回复三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 一、引言 1、研究背景和意义 在现代数据科学领域,时间序列…...
东方财富Android面试题及参考答案
接口和抽象类的区别是什么? 定义与语法 接口:接口是一种抽象类型,它只包含方法签名、常量定义,方法默认是public、abstract的,常量默认是public、static、final的。接口不能包含实例变量和普通方法的实现。抽象类:抽象类是一种不能被实例化的类,它可以包含抽象方法和具体…...
ArcGIS基础知识之ArcMap基础设置——ArcMap选项:常规选项卡设置及作用
作为一名 GIS 从业者,ArcMap 是我们日常工作中不可或缺的工具。对于初学者来说,掌握 ArcMap 的基础设置是迈向 GIS 分析与制图的第一步。今天,就让我们一起深入了解 ArcMap 选项中常规选项卡的各个设置,帮助大家更好地使用这款强大的软件。 在 ArcMap 中,常规选项卡是用户…...
element-ui时间组件同一个月内选择/30天内选择
element-ui时间组件同一个月内选择/30天内选择 同一个月 <el-date-picker v-model"time" type"datetimerange"range-separator"至" start-placeholder"开始时间"value-format"timestamp" :picker-options"pickerO…...
Linux Media 子系统 V4l2
一 创建 V4l2 的 entity 在Linux内核的Media Controller框架中,V4L2设备作为实体(entity)的注册过程涉及以下步骤: 1. 初始化Media Controller结构 驱动首先创建一个media_device实例,并与V4L2设备(如v4…...
14,.左下角的值,路径和,由序列确定树
找树左下角的值 迭代法 层序遍历 class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*> qu;qu.push(root);TreeNode* leftqu.front();while(!qu.empty()){int szqu.size();leftqu.front();for(int i0;i<sz;i){TreeNode* curqu.fron…...
RabbitMQ 如何设置限流?
RabbitMQ 的限流(流量控制)主要依赖于 QoS(Quality of Service) 机制,即 prefetch count 参数。这个参数控制每个消费者一次最多能获取多少条未确认的消息,从而避免某个消费者被大量消息压垮。 1. RabbitMQ…...
Python常见面试题的详解3
1. 类和对象的区别、对象访问类的方法、创建对象时的操作 类和对象的区别:类是一种抽象的概念,它定义了一组具有相同属性和方法的对象的蓝图或模板。而对象是类的具体实例,是根据类创建出来的实体,每个对象都有自己独立的状态&am…...
【推理llm论文精读】DeepSeek V3技术论文_精工见效果
先附上原始论文和效果对比https://arxiv.org/pdf/2412.19437 摘要 (Abstract) DeepSeek-V3是DeepSeek-AI团队推出的最新力作,一个强大的混合专家(Mixture-of-Experts,MoE)语言模型。它拥有671B的总参数量,但每个tok…...
python自动化测试之Pytest框架之YAML详解以及Parametrize数据驱动!
一、YAML详解 YAML是一种数据类型,它能够和JSON数据相互转化,它本身也是有很多数据类型可以满足我们接口 的参数类型,扩展名可以是.yml或.yaml 作用: 1.全局配置文件 基础路径,数据库信息,账号信息&…...
DeepSeek 本地部署指南
在人工智能飞速发展的今天,大语言模型的应用越来越广泛。DeepSeek 作为一款强大的大语言模型,具备出色的语言理解和生成能力。然而,许多用户希望能够在本地部署 DeepSeek,以实现更高的隐私性、更低的延迟和更好的定制化。本文将为…...
[LeetCode]day21 15.三数之和
题目链接 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…...
Unity学习part1
课程为b站【Unity教程】零基础带你从小白到超神 1、脚本执行顺序 unity的脚本执行顺序不像blender的修改器那样按顺序执行,而是系统默认给配置一个值,值越小,执行顺序越靠前(注意,这个顺序是全局生效的) …...
【AI知识点】Adversarial Validation(对抗验证)
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 Adversarial Validation(对抗验证) 是一种用于检查 训练集(Train Set)和测试集(Test Set)是否同分布 的方法。它…...
力扣 15.三数之和
题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的…...
Spring boot中实现字典管理
数据库脚本 CREATE TABLE data_dict (id bigint NOT NULL COMMENT 主键,dict_code varchar(32) DEFAULT NULL COMMENT 字典编码,dict_name varchar(64) DEFAULT NULL COMMENT 字典名称,dict_description varchar(255) DEFAULT NULL COMMENT 字典描述,dict_status tinyint DEFA…...
唯一值校验的实现思路(续)
本文接着上一篇文章《唯一值校验的实现思路》,在后端实现唯一值校验。用代码实现。 /*** checkUniqueException[唯一值校验]** param entity 新增或编辑的学生实体* param insert 是否新增,如果是传入true;反之传入false* return void* date…...
