java面试题带答案2025最新整理
文章目录
- 一、java面试题集合框架
- 1. 请简要介绍 Java 集合框架的体系结构
- 2. ArrayList 和 LinkedList 的区别是什么
- 3. HashMap 的工作原理是什么,它在 JDK 7 和 JDK 8 中有哪些不同
- 4. 如何解决 HashMap 的线程安全问题
- 5. TreeSet 是如何保证元素有序的
- 二、java面试题多线程与并发
- 1. 什么是线程和进程,它们有什么区别
- 2. 创建线程有哪几种方式,各有什么优缺点
- 3. 什么是线程安全,如何保证线程安全
- 4. 什么是死锁,如何避免死锁
- 三、java面试题异常处理
- 1. Java 中的异常体系是怎样的
- 2. try-catch-finally 语句的执行顺序是怎样的
- 3. throws 和 throw 的区别是什么
- 4. 自定义异常有什么作用,如何自定义异常
- 四、java面试题IO 流
- 1. 请介绍 Java 中的 IO 流体系
- 2. 字节流和字符流有什么区别
- 3. 什么是缓冲流,使用缓冲流有什么好处
- 4. 如何实现文件的复制
- 5. 什么是 NIO,它与传统 IO 有什么区别
java面试题带答案2025最新整理12万字:https://pan.quark.cn/s/6e941688e902
一、java面试题集合框架
1. 请简要介绍 Java 集合框架的体系结构
Java 集合框架主要分为两大分支:Collection 和 Map。
- Collection 接口:它是单列集合的根接口,下面又有三个主要的子接口。
- List 接口:有序、可重复的集合。常见实现类有 ArrayList(基于动态数组实现,查询快,增删慢)、LinkedList(基于双向链表实现,增删快,查询慢)和 Vector(线程安全的动态数组,性能相对较低)。
- Set 接口:无序、不可重复的集合。HashSet 基于哈希表实现,不保证元素顺序;LinkedHashSet 继承自 HashSet,使用链表维护元素插入顺序;TreeSet 基于红黑树实现,可对元素进行自然排序或根据指定的比较器排序。
- Queue 接口:队列,遵循先进先出(FIFO)原则。PriorityQueue 是优先队列,根据元素的自然顺序或指定比较器进行排序;LinkedList 也实现了 Queue 接口。
- Map 接口:双列集合,存储键值对。HashMap 基于哈希表实现,允许键和值为 null,不保证元素顺序;LinkedHashMap 继承自 HashMap,使用链表维护元素插入顺序;TreeMap 基于红黑树实现,根据键的自然顺序或指定比较器对键进行排序;Hashtable 是线程安全的,不允许键和值为 null。
2. ArrayList 和 LinkedList 的区别是什么
- 数据结构:ArrayList 基于动态数组实现,数组在内存中是连续存储的;LinkedList 基于双向链表实现,每个节点包含数据、指向前一个节点的引用和指向后一个节点的引用。
- 性能特点:
- 查询性能:ArrayList 支持随机访问,通过索引可以快速定位元素,时间复杂度为
O(1)
;LinkedList 不支持随机访问,需要从头或尾开始遍历链表,时间复杂度为
O(n)
。 - 增删性能:在列表末尾添加元素时,两者性能相近;但在中间或开头插入或删除元素时,ArrayList 需要移动大量元素,时间复杂度为
O(n)
,而 LinkedList 只需要修改节点的引用,时间复杂度为
O(1)
。 - 内存占用:ArrayList 的主要内存开销在于数组的预分配空间,可能会有一定的空间浪费;LinkedList 每个节点需要额外的引用空间,整体内存开销相对较大。
3. HashMap 的工作原理是什么,它在 JDK 7 和 JDK 8 中有哪些不同
- 工作原理
HashMap 基于哈希表实现,通过键的 hashCode() 方法计算哈希值,再根据哈希值确定元素在数组中的存储位置。当发生哈希冲突(不同键的哈希值相同)时,使用链表或红黑树来存储冲突的元素。 - JDK 7 和 JDK 8 的区别
- 数据结构:JDK 7 采用数组 + 链表的结构;JDK 8 采用数组 + 链表 + 红黑树的结构。当链表长度超过 8 且数组长度大于 64 时,链表会转换为红黑树,以提高查找效率。
插入方式:JDK 7 使用头插法,即新元素插入到链表头部;JDK 8 使用尾插法,新元素插入到链表尾部,避免了多线程环境下的链表成环问题。 - 哈希算法:JDK 8 对哈希算法进行了优化,减少了哈希冲突的概率。
- 扩容机制:JDK 7 在扩容时需要重新计算每个元素的哈希值和位置;JDK 8 在扩容时,根据元素的哈希值与原数组长度的与运算结果,将元素分为低位链表和高位链表,避免了重新计算哈希值。
4. 如何解决 HashMap 的线程安全问题
使用 Hashtable:Hashtable 是线程安全的,它的方法都使用 synchronized 关键字修饰,但性能较低,因为所有操作都进行同步,会影响并发性能。
使用 Collections.synchronizedMap():可以将一个普通的 HashMap 转换为线程安全的 Map,例如:
java
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class SynchronizedMapExample {
public static void main(String[] args) {
Map<String, String> hashMap = new HashMap<>();
Map<String, String> synchronizedMap = Collections.synchronizedMap(hashMap);
}
}
这种方式也是通过同步机制保证线程安全,性能也有一定的损耗。
使用 ConcurrentHashMap:ConcurrentHashMap 是专门为并发场景设计的线程安全的 Map。在 JDK 7 中,它采用分段锁机制,将整个 Map 分为多个段,每个段都有自己的锁,不同段的操作可以并发进行;在 JDK 8 中,采用 CAS(Compare - And - Swap)和 synchronized 来保证并发操作的安全性,性能更高。
5. TreeSet 是如何保证元素有序的
TreeSet 基于红黑树实现,它可以保证元素按照自然顺序或指定的比较器顺序进行排序。
- 自然排序:如果元素的类实现了 java.lang.Comparable 接口,TreeSet 会根据元素的 compareTo() 方法进行排序。例如:
java
import java.util.TreeSet;
class Person implements Comparable {
private int age;
public Person(int age) {this.age = age;
}@Override
public int compareTo(Person other) {return Integer.compare(this.age, other.age);
}@Override
public String toString() {return "Person{age=" + age + "}";
}
}
public class TreeSetNaturalOrderExample {
public static void main(String[] args) {
TreeSet treeSet = new TreeSet<>();
treeSet.add(new Person(20));
treeSet.add(new Person(10));
treeSet.add(new Person(30));
System.out.println(treeSet);
}
}
- 定制排序:可以在创建 TreeSet 时传入一个 Comparator 对象,TreeSet 会根据 Comparator 的 compare() 方法进行排序。例如:
java
import java.util.Comparator;
import java.util.TreeSet;
class Student {
private int score;
public Student(int score) {this.score = score;
}@Override
public String toString() {return "Student{score=" + score + "}";
}
}
public class TreeSetCustomOrderExample {
public static void main(String[] args) {
TreeSet treeSet = new TreeSet<>(Comparator.comparingInt(s -> s.score));
treeSet.add(new Student(80));
treeSet.add(new Student(90));
treeSet.add(new Student(70));
System.out.println(treeSet);
}
}
二、java面试题多线程与并发
1. 什么是线程和进程,它们有什么区别
- 进程:进程是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。每个进程都有自己独立的内存空间、系统资源和执行上下文。例如,打开一个浏览器就是启动了一个进程。
- 线程:线程是进程中的一个执行单元,是 CPU 调度和分派的基本单位。一个进程可以包含多个线程,这些线程共享进程的内存空间和系统资源,但每个线程有自己独立的栈和程序计数器。例如,在浏览器进程中,可能有负责渲染页面的线程、处理网络请求的线程等。
区别: - 资源占用:进程拥有自己独立的资源,而线程共享所在进程的资源,因此创建和销毁进程的开销比线程大。
- 并发程度:进程之间的并发度较低,因为进程之间的通信和同步需要通过操作系统提供的机制(如管道、消息队列等);线程之间的并发度较高,因为它们共享内存,通信和同步相对简单。
- 调度:进程的调度由操作系统内核完成,开销较大;线程的调度可以由操作系统内核或用户线程库完成,开销相对较小。
2. 创建线程有哪几种方式,各有什么优缺点
- 继承 Thread 类
java
class MyThread extends Thread {
@Override
public void run() {
System.out.println(“Thread is running”);
}
}
public class ThreadInheritanceExample {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
- 优点:实现简单,直接继承 Thread 类,重写 run() 方法即可。
- 缺点:Java 是单继承的,继承了 Thread 类后就不能再继承其他类,会限制类的扩展性。
- 实现 Runnable 接口
java
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println(“Runnable is running”);
}
}
public class RunnableExample {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
}
}
- 优点:避免了单继承的局限性,一个类可以在实现 Runnable 接口的同时继承其他类;可以将相同的 Runnable 实例传递给多个线程,实现资源共享。
- 缺点:代码相对复杂,需要创建 Thread 对象并将 Runnable 实例传递给它。
- 实现 Callable 接口并结合 FutureTask
java
import java.util.concurrent.*;
class MyCallable implements Callable {
@Override
public Integer call() throws Exception {
return 1 + 2;
}
}
public class CallableExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable callable = new MyCallable();
FutureTask futureTask = new FutureTask<>(callable);
Thread thread = new Thread(futureTask);
thread.start();
Integer result = futureTask.get();
System.out.println("Result: " + result);
}
}
- 优点:Callable 的 call() 方法可以有返回值,并且可以抛出异常;可以通过 FutureTask 获取线程执行的结果。
- 缺点:代码复杂度较高,需要处理 FutureTask 和异常。
3. 什么是线程安全,如何保证线程安全
-
线程安全的定义
当多个线程访问某个对象时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要额外的同步或协调,这个对象都能表现出正确的行为,那么就称这个对象是线程安全的。 -
保证线程安全的方法
-
使用 synchronized 关键字:可以修饰方法或代码块,确保同一时刻只有一个线程可以访问被修饰的方法或代码块。例如:
java
class Counter {
private int count = 0;public synchronized void increment() {
count++;
}public synchronized int getCount() {
return count;
}
} -
使用 Lock 接口及其实现类:如 ReentrantLock,可以更灵活地控制锁的获取和释放。例如:
java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class CounterWithLock {
private int count = 0;
private Lock lock = new ReentrantLock();
public void increment() {lock.lock();try {count++;} finally {lock.unlock();}
}public int getCount() {lock.lock();try {return count;} finally {lock.unlock();}
}
}
- 使用原子类:如 AtomicInteger、AtomicLong 等,这些类使用 CAS 操作保证操作的原子性。例如:
java
import java.util.concurrent.atomic.AtomicInteger;
class CounterWithAtomic {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {count.incrementAndGet();
}public int getCount() {return count.get();
}
}
4. 什么是死锁,如何避免死锁
- 死锁的定义
死锁是指两个或多个线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。例如,线程 A 持有资源 1 并请求资源 2,而线程 B 持有资源 2 并请求资源 1,两个线程就会陷入死锁状态。 - 避免死锁的方法
- 破坏互斥条件:一般来说,互斥条件是资源本身的特性,很难被破坏。
- 破坏占有并等待条件:可以采用一次性分配所有资源的方法,即线程在执行前一次性请求它所需要的所有资源。
- 破坏不剥夺条件:允许线程在持有资源的情况下,当请求其他资源失败时,释放已持有的资源。
- 破坏循环等待条件:对资源进行排序,线程按照资源的顺序依次请求资源,避免形成循环等待。例如,规定线程必须先请求资源 1,再请求资源 2。
-
请介绍 volatile 关键字的作用
volatile 关键字主要有两个作用:
保证可见性:当一个变量被声明为 volatile 时,它会保证对该变量的写操作会立即刷新到主内存中,而读操作会直接从主内存中读取。这样可以保证不同线程对该变量的修改能够及时被其他线程看到。例如:
java
class VolatileExample {
private volatile boolean flag = false;public void setFlag() {
flag = true;
}public boolean getFlag() {
return flag;
}
}
-
禁止指令重排序:在 Java 中,编译器和处理器为了提高性能,可能会对指令进行重排序。volatile 关键字可以禁止指令重排序,保证变量的读写操作按照代码的顺序执行。例如,在单例模式的双重检查锁定中,使用 volatile 关键字可以避免因指令重排序导致的问题:
java
public class Singleton {
private static volatile Singleton instance;private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
三、java面试题异常处理
1. Java 中的异常体系是怎样的
Java 中的异常体系以 Throwable 类为根类,它有两个主要的子类:
Error:表示系统级的错误,通常是由系统内部错误或资源耗尽等严重问题引起的,程序无法处理这些错误。例如,OutOfMemoryError 表示内存不足,StackOverflowError 表示栈溢出。
Exception:表示程序可以捕获和处理的异常,它又分为受检查异常(Checked Exception)和非受检查异常(Unchecked Exception)。
受检查异常:必须在方法签名中声明或者在方法内部进行捕获处理。例如,IOException、SQLException 等。
非受检查异常:也称为运行时异常(RuntimeException 及其子类),不需要在方法签名中声明,也可以不进行捕获处理。例如,NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException 等。
2. try-catch-finally 语句的执行顺序是怎样的
首先执行 try 块中的代码。
如果 try 块中没有抛出异常,则执行完 try 块后,接着执行 finally 块中的代码。
如果 try 块中抛出了异常,会依次检查 catch 块,找到匹配的异常类型进行处理。如果找到匹配的 catch 块,执行该 catch 块中的代码,然后执行 finally 块;如果没有找到匹配的 catch 块,会在执行 finally 块后将异常抛给上层调用者。
无论 try 块中是否抛出异常,finally 块中的代码都会执行(除非在 try 或 catch 块中调用了 System.exit() 方法)。例如:
java
public class TryCatchFinallyExample {
public static void main(String[] args) {
try {
int result = 1 / 0;
System.out.println(“This line will not be executed”);
} catch (ArithmeticException e) {
System.out.println("Caught ArithmeticException: " + e.getMessage());
} finally {
System.out.println(“Finally block is executed”);
}
}
}
3. throws 和 throw 的区别是什么
throws:用于方法签名中,用于声明该方法可能会抛出的异常类型。它表示该方法本身不处理这些异常,而是将异常抛给调用者处理。例如:
java
public class ThrowsExample {
public static void readFile() throws java.io.IOException {
java.io.FileInputStream fis = new java.io.FileInputStream(“test.txt”);
}
}
throw:用于方法内部,用于手动抛出一个异常对象。它表示在程序执行过程中,当满足某个条件时,主动抛出一个异常。例如:
java
public class ThrowExample {
public static void checkAge(int age) {
if (age < 0) {
throw new IllegalArgumentException(“Age cannot be negative”);
}
}
}
4. 自定义异常有什么作用,如何自定义异常
自定义异常的作用
可以根据业务需求,创建特定类型的异常,使异常信息更加明确和有针对性,方便程序的调试和维护。
可以将业务逻辑中的错误情况进行封装,提高代码的可读性和可维护性。
自定义异常的步骤
定义一个类,继承自 Exception(受检查异常)或 RuntimeException(非受检查异常)。
提供构造方法,通常包含一个无参构造方法和一个带字符串参数的构造方法,用于传递异常信息。例如:
java
class MyCustomException extends Exception {
public MyCustomException() {
super();
}
public MyCustomException(String message) {super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
throw new MyCustomException(“This is a custom exception”);
} catch (MyCustomException e) {
System.out.println(e.getMessage());
}
}
}
四、java面试题IO 流
1. 请介绍 Java 中的 IO 流体系
Java 中的 IO 流体系主要分为输入流和输出流,又可以根据处理的数据类型分为字节流和字符流。
字节流:以字节为单位进行数据读写,主要用于处理二进制数据。
输入流:InputStream 是所有字节输入流的抽象基类,常见的实现类有 FileInputStream(用于从文件中读取数据)、BufferedInputStream(带缓冲功能的输入流)等。
输出流:OutputStream 是所有字节输出流的抽象基类,常见的实现类有 FileOutputStream(用于向文件中写入数据)、BufferedOutputStream(带缓冲功能的输出流)等。
字符流:以字符为单位进行数据读写,主要用于处理文本数据。
输入流:Reader 是所有字符输入流的抽象基类,常见的实现类有 FileReader(用于从文件中读取字符数据)、BufferedReader(带缓冲功能的字符输入流)等。
输出流:Writer 是所有字符输出流的抽象基类,常见的实现类有 FileWriter(用于向文件中写入字符数据)、BufferedWriter(带缓冲功能的字符输出流)等。
2. 字节流和字符流有什么区别
处理的数据类型:字节流处理的是二进制数据,适用于处理图像、音频、视频等文件;字符流处理的是文本数据,它会根据字符编码将字节数据转换为字符进行读写。
使用场景:如果处理的是文本文件,使用字符流更方便,因为它可以直接处理字符;如果处理的是二进制文件,必须使用字节流。
缓冲区:字节流通常没有缓冲区,每次读写操作都会直接与数据源或目标进行交互;字符流通常带有缓冲区,这样可以提高读写效率。
3. 什么是缓冲流,使用缓冲流有什么好处
缓冲流是对基本流的包装,它在内存中设置了一个缓冲区,用于暂存数据。常见的缓冲流有 BufferedInputStream、BufferedOutputStream、BufferedReader 和 BufferedWriter。
使用缓冲流的好处主要有:
提高读写效率:由于缓冲流在内存中设置了缓冲区,每次读写操作会先将数据读写到缓冲区中,当缓冲区满或达到一定条件时,再一次性将缓冲区中的数据写入到目标数据源或从数据源读取数据到缓冲区。这样可以减少与磁盘或网络的交互次数,提高读写效率。
简化操作:缓冲流提供了一些方便的方法,如 BufferedReader 的 readLine() 方法可以一次读取一行文本,简化了文本处理的操作。
4. 如何实现文件的复制
可以使用字节流或字符流来实现文件的复制,以下是使用字节流的示例:
java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopyExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream(“source.txt”);
FileOutputStream fos = new FileOutputStream(“destination.txt”)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
System.out.println(“File copied successfully”);
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,使用 FileInputStream 从源文件中读取数据,使用 FileOutputStream 将数据写入到目标文件中。通过一个缓冲区 buffer 来提高读写效率。使用 try-with-resources 语句可以自动关闭流,避免资源泄漏。
5. 什么是 NIO,它与传统 IO 有什么区别
NIO 的定义
NIO(New IO)是 Java 1.4 引入的新的 IO 库,它提供了一种非阻塞的、基于通道(Channel)和缓冲区(Buffer)的 IO 操作方式。
与传统 IO 的区别
阻塞与非阻塞:传统 IO 是阻塞式的,当进行读写操作时,线程会一直阻塞直到操作完成;NIO 是非阻塞式的,线程可以在等待 IO 操作完成的同时去执行其他任务。
面向流与面向缓冲区:传统 IO 是面向流的,数据是单向流动的,只能顺序读写;NIO 是面向缓冲区的,数据先被读取到缓冲区中,然后可以在缓冲区中进行随机访问和操作。
通道与流:传统 IO 使用流进行数据读写;NIO 使用通道(Channel),通道可以双向读写,并且可以与缓冲区进行交互。
选择器:NIO 引入了选择器(Selector),可以实现单线程管理多个通道,提高了并发性能。例如,一个线程可以通过选择器同时监听多个通道的读写事件。
相关文章:
java面试题带答案2025最新整理
文章目录 一、java面试题集合框架1. 请简要介绍 Java 集合框架的体系结构2. ArrayList 和 LinkedList 的区别是什么3. HashMap 的工作原理是什么,它在 JDK 7 和 JDK 8 中有哪些不同4. 如何解决 HashMap 的线程安全问题5. TreeSet 是如何保证元素有序的 二、java面试…...
第七届浙江省大学生网络与信息安全竞赛决赛Unserialize深度解析 1.0
花还会重新开,不同的春来了又来。 - 2025.4.11 0x01 声明 仅作为个人学习使用,仅供参考,欢迎交流 可能是新生赛缘故,突发奇想,想好好梳理此题,顺便写成参考,于是有了这篇文章 当然很多理解可…...
onlyoffice 在线编辑集成
onlyoffice 在线编辑集成 项目中要使用word在线编辑功能,记录一下过程 安装使用docker版本 docker run -itd -p 8001:80 --name kodoffice --restart always registry.cn-hangzhou.aliyuncs.com/kodcloud/kodoffice:7.4.1.1 启动后http://192.168.x.x:8001/web/…...
2.4goweb 项目1
mysql库和表 CREATE DATABASE IF NOT EXISTS book_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE book_manager;-- 用户表(用于登录) CREATE TABLE IF NOT EXISTS users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(…...
ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(系列开篇)
目录 ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(系列开篇)简介模块概述功能定义架构位置核心特性 接口分析公共API概述1. 外设集合管理API2. 单个外设管理API3. 事件通信API4. 定时器管理API 数据结构关键数据结构分析枚…...
供应链管理:供应链管理的边界
一、追根溯源,什么是真正的财富 序号财富解释1土地作为生产资料,土地是农业、工业、商业的基础 城市中心的土地因稀缺性而价值连城,农业土地的肥沃程度直接影响粮食产量。2资源、矿产提供能源和原材料,支撑工业生产和经济发展。 …...
【Linux网络编程】TCP Echo Server的实现
本文专栏:linux网络编程 本文的基础知识是基于上篇文章:UDP Echo Server的实现 传送门: 【Linux网络编程】UDP Echo Server的实现 -CSDN博客 目录 一,InetAddr类的编写 二,客户端代码编写 创建套接字(s…...
信奥赛CSP-J复赛集训(数学思维专题)(11):P9585 「MXOI Round 2」酒店
信奥赛CSP-J复赛集训(数学思维专题)(11):P9585 「MXOI Round 2」酒店 题目描述 小 C 开了一家酒店,叫做 CC Hotel。 一天,CC Hotel 来了 n n n 位客人。小 C 需要把他们都安排在酒店的某一层…...
python: audioFlux XXCC 提取梅尔频率倒谱系数 MFCC
承上一篇:python:audioFlux 使用教程 XXCC: 倒谱系数,支持所有频谱类型. 可以提取梅尔频率倒谱系数(MFCC) Cepstrum coefficients, supports all spectrum types. 以下是使用 audioflux 库中 XXCC 类计算倒谱系数…...
PHP + Go 如何协同打造高并发微服务?
为什么需要 PHP Go 协同? 在微服务架构中,PHP 和 Go 看似是“两个世界”的语言,但它们的互补性极强: PHP:开发效率高、生态成熟,适合快速实现复杂业务逻辑(如电商订单、用户系统)…...
k8s工具使用
Kubectl Cheat Sheet k8s的命令级别 1.基础命令(初级) 2.基础命令(中级) 3.部署命令 4.集群管理命令 5.故障排查和调试命令 6.高级命令 7.设置命令 8.其它命令 命令行提示 为了使用kubectl命令更加高效,我们可以选择安装一下开源软件来增加操作kubectl命令的快捷方式,同…...
uml制做参考-以代码画UML图
【PlantUML系列】类图(一)_plantuml skin-CSDN博客 UML入门以及Plant UML工具介绍_plantuml-CSDN博客 UML类图详解-CSDN博客 【PlantUML】-类图-CSDN博客 【掌握绘图艺术】用PlantUML绘制完美UML图表,编程开发者的福音 - 知乎 如何优化P…...
深入解析B站androidApp接口:从bilibili.api.ticket.v1.Ticket/GetTicket到SendMsg的技术分析
前言 最近一段时间,我对B站的App接口进行了深入分析,特别是关注了认证机制和私信功能的实现。通过逆向工程和网络抓包,发现了B站移动端API的底层工作原理,包括设备标识生成机制、认证流程和消息传输协议。本文将分享这些研究成果…...
[AI ][Dify] 构建一个自动化新闻编辑助手:Dify 工作流实战指南
在内容创作行业中,自动化辅助工具已成为提升编辑效率的重要利器。本文将通过 Dify 平台,演示如何构建一个**“新闻编辑助手”**,实现从网页抓取、文本翻译、标题生成,到新闻配图的全流程自动化。 🎯 目标概览 这个工作流旨在实现如下功能: 从指定网页抓取新闻内容; 使…...
Unity中国战略调整简讯:Unity6下架 团结引擎接棒
Unity中国战略调整简讯:Unity6下架 团结引擎接棒 免费版 2025年4月9日 —— Unity中国宣布自即日起,中国大陆及港澳地区停止提供Unity 6及后续版本下载与服务,相关功能由国产引擎“团结引擎”承接。国际版2022 LTS及更早版本仍由Unity中国维护…...
司美格鲁肽用SNAC市场报告:2024年全球市场销售额达到了0.14亿美元
引言:了解司美格鲁肽与SNAC的重要性 在当前的医药领域,司美格鲁肽(Semaglutide)作为一种创新性的治疗2型糖尿病和肥胖症的药物,受到了广泛关注。而SNAC(N-(8-(2-羟苯基)…...
自动驾驶第一性原理
所谓的第一性原理: 就是指从最基本的物理规律,数据逻辑及工程约束条件出发,剥离所有的非本质的假设,直接推导出自动驾驶最核心的要素。 自动驾驶核心框架分解: 1、根本目标: 安全高效的将人/物从A地运送…...
《UE5_C++多人TPS完整教程》学习笔记36 ——《P37 拾取组件(Pickup Widget)》
本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P37 拾取组件(Pickup Widget)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author) Steph…...
Uniswap V2/V3/V4 流动性与价格计算详解
Uniswap V2/V3/V4 流动性与价格计算详解 一、核心概念对比 Uniswap V2 流动性模型: 恒定乘积公式 (x * y = k)价格决定: 完全由池子中的代币数量决定 (price = y/x)流动性衡量: 总储备量代表流动性,直接通过 getReserves() 获取流动性分布: 均匀分布在所有价格点交易费用: 固…...
yum安装MySQL数据库
yum安装方式 优点:操作简单易用。不用单独下载,服务器可以联网且yum源没有问题即可(可以选择国内的163/阿里源) 安装步骤: 1.关闭防火墙和selinux: systemctl stop firewalld ##关闭防火墙 systemctl disable firewalld …...
大联盟(特别版)双端互动平台完整套件分享:含多模块源码+本地部署环境
这是一套结构清晰、功能完整的互动平台组件,适合有开发经验的技术人员进行模块参考、结构研究或本地部署实验使用。 该平台覆盖前端展示、后端服务、移动端资源以及完整数据库,采用模块化架构,整体部署流程简单清晰,适合自研团队参…...
【Code】《代码整洁之道》笔记-Chapter15-JUnit内幕
第15章 JUnit内幕 JUnit是最有名的Java框架之一。就像别的框架一样,它概念简单,定义精确,实现优雅。但它的代码是怎样的呢?本章将研判来自JUnit框架的一个代码例子。 15.1 JUnit框架 JUnit有很多位作者,但它始于K…...
【Java八股】
JVM JVM中有哪些引用 在Java中,引用(Reference)是指向对象的一个变量。Java中的引用不仅仅有常规的直接引用,还有不同类型的引用,用于控制垃圾回收(GC)的行为和优化性能。JVM中有四种引用类型…...
深入探究AI编程能力:ChatGPT及其大规模模型的实现原理
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4-turbo模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 随着人工智能的快速发展,…...
高德地图 JS-SDK 实现教程
高德地图 JS-SDK 实现教程:定位、地图选点、地址解析等 适用地点选择、地址显示、表单填写等场景,全面支持移动端、手机浏览器和 PC端环境 一、创建应用&Key 前端(JS-SDK、地图组件) 登陆 高德开放平台创建应用,…...
【信息系统项目管理师】高分论文:论信息系统项目的整合管理(银行数据仓库项目)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 正文一、制定项目章程二、制定项目管理计划三、指导和管理项目的实施四、管理项目知识五、监控项目工作六、实施整体变更控制七、结束项目或阶段正文 2023年6月,我以项目经理的身份,参加了 xx银行xx省分行数…...
dev中使用auto的方法
在dev-c中使用新特性是一样的道理,在他启动编译器来编译代码的时候我们让他加上这个参数就行了,设置方法是:在Tools里面找到Compiler Options打开它,然后把那个Add the following commands when calling compiler:选上勾,在里面加…...
C 语言中经典的数据结构
在 C 语言中,经典的数据结构通常包括以下几种,每种都有其特定的应用场景和实现方式: 1. 数组(Array) 定义:连续内存空间存储相同类型的数据。 特点:随机访问快(O(1))&am…...
小白学习java第12天(下):网络编程
上面我们了解TCP就是三次握手!!! 下面我们就详细介绍一下UDP,就是进行发包(TCP协议类似于就是打电话,你必须进行连接才能进行传输,但是UDP类似于发消息,连不连接我都是可以的&#…...
论文精度:双分支图Transformer网络:视频驱动的3D人体网格重建新突破
论文地址:https://arxiv.org/pdf/2412.01179 目录 一、背景与问题定义 1.1 3D人体网格重建的意义 1.2 现有方法的困境 二、核心创新:DGTR网络架构 2.1 整体框架设计 2.2 全局运动感知分支(GMA) 2.3 局部细节优化分支(LDR) 2.3.1 局部信息聚合 2.3.2 调制图卷积…...
华三IRF堆叠技术
IRF(Intelligent Resilient Framework,智能弹性架构)是华三通信(H3C)自主研发的网络设备虚拟化技术,通过将多台物理设备整合为单一逻辑设备,实现统一管理、高可靠性和灵活扩展。以下是其核心要点…...
第一阶段补充知识
目录 书写脚本使用的相关知识? 备份和冗灾的区别?什么叫DD备份,什么叫DD冗灾? 关于Linux系统优化以及Linux的安全加固? 系统优化 硬件系统优化: 内核参数优化: 网络性能优化: 进程管…...
STM32 HAL库 L298N电机驱动模块实现
一、引言 在机器人、自动化设备等众多应用场景中,电机驱动是一个关键的部分。L298N 是一款常用的电机驱动模块,它可以驱动两个直流电机或一个步进电机。STM32F407 是一款高性能的 ARM Cortex-M4 内核微控制器,结合 HAL 库可以方便地实现对 L…...
Redis的Key的过期策略
我们都知道Redis的键值对是可以设置过期时间的,那么就会涉及到一个问题,Redis到底是如何做到响应快的同时有能快速地释放掉过期的键值对的呢?不卖关子了,直接说答案,那就是Redis两个策略:定期删除和惰性删除…...
ubuntu桌面版使用root账号进行登录
这里写自定义目录标题 第一步:给root账户设置密码,并切换至root账户第二步:注释gdm-autologin文件内的相关内容第三步:注释gdm-password文件内的相关内容第四步:重启系统即可使用root账户登录 第一步:给roo…...
贪心算法(18)(java)距离相等的条形码
在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码,使其中任意两个相邻的条形码不能相等。 你可以返回任何满足该要求的答案,此题保证存在答案。 示例 1: 输入:barco…...
CentOS服务器能ping通却无法yum install:指定镜像源解决
文章目录 前言一、问题记录二、解决过程1.修改DNS无效2.指定镜像源 总结 前言 今天有一个项目现场要在一个远程centos服务器上部署产品服务,发现能ping通百度,但是无法yum install 安装基础软件包,开始以为DNS服务器的问题,结果配…...
WebSocket与MQTT
在物联网(IoT)领域,WebSocket和MQTT确实都可以实现实时通信,但它们的核心设计目标、适用场景和角色存在显著差异。以下是两者的对比分析: 1. 协议设计初衷 WebSocket 目标:提供浏览器与服务器…...
【论文解读】MSVM-UNet: Multi-Scale Vision Mamba UNet for Medical Image Segmentation
MSVM-UNet: Multi-Scale Vision Mamba UNet for Medical Image Segmentation 论文链接: https://arxiv.org/abs/2408.13735 Code: https://github.com/gndlwch2w/msvm-unet 来源: 2024 IEEE International Conference on Bioinformatics an…...
Vue表单组件el-form校验规则rules,条件判断rules表单验证显示必填或非必填
在使用 Element UI(一个基于 Vue 的前端框架)的表单验证功能时,你可能想要实现一个规则,使得某些字段在特定条件下成为必填项,或者在满足某些条件时不允许为空。这通常通过自定义校验规则来实现。 <template>&l…...
手动关闭ArcGIS与ArcGIS Online连接的方法
【关闭软件启动时ArcGIS与ArcGIS Online连接方法】 打开C盘找到文件夹“C:\Program Files (x86)\Common Files\ArcGIS\bin”,如下图,删除“ArcGISConnection.exe”与“ArcGISConnectionTest.exe”文件,软件下次启动的时候就不会建立与ArcGIS …...
(二十五)安卓开发一个完整的登录页面-支持密码登录和手机验证码登录
下面将详细讲解如何在 Android 中开发一个完整的登录页面,支持密码登录和手机验证码登录。以下是实现过程的详细步骤,从布局设计到逻辑实现,再到用户体验优化,逐步展开。 1. 设计登录页面布局 首先,我们需要设计一个用…...
【过程控制系统】PID算式实现,控制系统分类,工程应用中控制系统应该注意的问题
目录 1-1 试简述过程控制的发展概况及各个阶段的主要特点。 1-2 与其它自动控制相比,过程控制有哪些优点?为什么说过程控制的控制过程多属慢过程? 1-3 什么是过程控制系统,其基本分类是什么? 1-4 何为集散控制系统…...
测试第三课-------自动化测试相关
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
关于数据清洗和数据处理实践学习笔记
一些可能想要知道的: pandas是一个模板,它读取的数据都是dataframe的格式,即df Matplotlib是一个用于数据可视化的Python库,能够生成各种静态、动态和交互式图表 pyplot:Matplotlib 的核心接口模块,提供类…...
ubuntu学习day2
linux常用命令 3.文件查看及处理命令 3.1查看文件内容 cat[选项][文件] -b 对非空输出行编号 -E 在每行结束处显示$ -n 对输出的所有行编号 -s 不输出多行空行 标准输入、标准输出和标准错误 在 Linux 中,每个进程默认有三个文件描述符: 标准输入&…...
JavaScript `new Date()` 方法移动端 `兼容 ios`,ios环境new Date()返回NaN
在 iOS 环境下,new Date() 方法会返回 NaN,这通常是由于时间字符串的格式问题。iOS 的 Date 构造函数对时间字符串的格式要求比其他平台更严格。 原因:ios端不兼容“-”为连接符的时间。 解决办法: 替换时间格式 IOS 不支持某…...
考研408参考用书:计算机组成原理(唐朔飞)介绍,附pdf
我用夸克网盘分享了「《计算机组成原理》第2,3版 唐朔飞」, 链接:https://pan.quark.cn/s/6a87d10274a3 1. 书籍定位与适用对象 定位:计算机组成原理是计算机科学与技术、软件工程等专业的核心基础课程,涉及计算机硬件的底层工作原…...
案例-索引对于并发Insert性能优化测试
前言 最近因业务并发量上升,开发反馈对订单表Insert性能降低。应开发要求对涉及Insert的表进行分析并提供优化方案。 一般对Insert 影响基本都在索引,涉及表已按创建日期做了分区表,索引全部为普通索引未做分区索引。 优化建议ÿ…...
@Async 为什么要自定义线程池,使用默认线程池风险
为什么要自定义线程池而非使用默认线程池 使用Spring的Async注解时,如果不自定义线程池而使用默认线程池,可能会带来一些风险和问题。以下是主要原因: 默认线程池的风险 无限制的资源消耗 默认线程池使用SimpleAsyncTaskExecutor࿰…...