
Java面试考点
文章平均质量分 84
dsq_MaDing
全栈工程师(java、python、GO、HTML、CSS、JS、Vue、大数据分析、网络安全...)
展开
-
Java面试考点大纲
java面试考点大纲原创 2025-02-18 21:40:16 · 861 阅读 · 0 评论 -
分库分表(ShardingSphere)相关知识详解
分库:将一个数据库中的数据分散存储到多个数据库中。这样可以减轻单个数据库的负载压力,提高数据库的并发处理能力,同时也能增加数据的存储容量。分表:把一个表中的数据拆分到多个表中。当单表数据量过大时,查询和写入操作的性能会显著下降,分表可以有效缓解这个问题。ShardingSphere 是 Apache 软件基金会的顶级项目,它提供了分库分表、读写分离、分布式事务等功能。原创 2025-02-21 02:00:55 · 1006 阅读 · 0 评论 -
Java JVM 调优参数(Xms、Xmx、SurvivorRatio 等)详解
JVM 调优是一个复杂的过程,需要根据应用程序的特点、运行环境等因素综合考虑并调整各种参数。上述介绍的参数只是 JVM 调优参数中的一部分,在实际应用中,还需要结合具体情况进行深入分析和测试,以找到最适合的参数组合,从而提高应用程序的性能和稳定性。原创 2025-02-20 15:47:16 · 1073 阅读 · 0 评论 -
Java 类加载机制:双亲委派模型与打破双亲委派
在 Java 中,类加载器(ClassLoader)是实现类加载的核心组件。启动类加载器(Bootstrap ClassLoader):它是最顶层的类加载器,由 C++ 实现,负责加载 Java 的核心类库,如java.langjava.util等。启动类加载器无法被 Java 代码直接引用。扩展类加载器(Extension ClassLoader):它是由 Java 代码实现的,继承自,负责加载 Java 的扩展类库,通常位于目录下。应用程序类加载器(Application ClassLoader)原创 2025-02-20 15:46:26 · 757 阅读 · 0 评论 -
Java OOM 异常场景与排查(堆、栈、方法区)
Java OOM 异常是一个复杂的问题,不同的内存区域出现 OOM 异常的原因和排查方法也有所不同。在开发和运维过程中,需要密切关注程序的内存使用情况,合理调整 JVM 参数,优化代码逻辑,以避免 OOM 异常的发生。当出现 OOM 异常时,要根据异常的类型和具体情况,采用合适的排查方法,找出问题的根源并进行解决。原创 2025-02-20 15:44:14 · 1250 阅读 · 0 评论 -
Java 垃圾收集器:CMS、G1、ZGC 详解
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,它非常适合注重响应时间的应用程序,如 Web 应用。G1 收集器是一种面向服务端应用的垃圾收集器,它在 JDK 7u4 及以上版本中被正式引入。G1 收集器的设计目标是在满足高吞吐量的同时,尽可能地降低垃圾收集的停顿时间。与传统的收集器将堆划分为新生代和老年代不同,G1 收集器将堆划分为多个大小相等的 Region,每个 Region 可以是 Eden 区、Survivor 区或老年代。原创 2025-02-20 15:43:27 · 942 阅读 · 0 评论 -
Java垃圾回收算法(标记清除、复制、标记整理)详解
不同的垃圾回收算法适用于不同的场景。标记清除算法简单但会产生内存碎片;复制算法能避免碎片但浪费内存;标记整理算法综合了两者的优点,但存在移动对象的性能开销。在实际的Java虚拟机中,往往会根据不同的堆区域(如新生代、老年代)的特点,组合使用这些算法,以达到最佳的垃圾回收效果。原创 2025-02-20 15:42:19 · 926 阅读 · 0 评论 -
Java 内存区域:堆、栈、方法区、元空间详解
Java 堆是 Java 虚拟机所管理的内存中最大的一块,它是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。Java 栈是线程私有的,它的生命周期与线程相同。每个线程在创建时都会创建一个独立的 Java 栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。方法区也是被所有线程共享的一块内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。原创 2025-02-20 15:36:26 · 531 阅读 · 0 评论 -
Java 的 ThreadLocal 原理与内存泄漏问题
是 Java 中实现线程局部变量的重要工具,它通过为每个线程提供独立的数据副本。然而,由于中键为弱引用、值为强引用的设计,可能会导致内存泄漏问题。为了避免内存泄漏,在使用完后,一定要及时调用remove()方法进行清理。原创 2025-02-20 15:01:41 · 316 阅读 · 0 评论 -
Java 原子类(AtomicInteger、CAS 原理)详解
是 Java包下的一个类,用于对整数类型的变量进行原子操作。它提供了一系列的方法,可以原子地对整数进行递增、递减、比较并交换等操作,避免了多线程环境下的数据竞争问题。是 Java 中用于实现原子操作的重要类,它基于 CAS 原理,在无锁的情况下保证了对整数变量操作的原子性,提高了并发性能。CAS 作为一种无锁算法,具有性能高、避免死锁等优点,但也存在 ABA 问题和自旋开销大等缺点。在实际开发中,需要根据具体的业务场景合理选择使用原子类和 CAS 操作,以达到最佳的性能和稳定性。原创 2025-02-20 15:00:49 · 883 阅读 · 0 评论 -
Java 并发工具类:CountDownLatch、CyclicBarrier、Semaphore 详解
是一个同步辅助类,它允许一个或多个线程等待其他线程完成操作。其内部维护了一个计数器,该计数器的初始值由构造函数指定,每当一个线程完成任务后,会调用方法将计数器减 1,当计数器的值变为 0 时,等待在await()方法上的线程将被唤醒继续执行。是一个同步辅助类,它允许一组线程相互等待,直到所有线程都到达某个公共屏障点(barrier point)。与不同的是,可以被重复使用,当所有线程都到达屏障点后,计数器会被重置,可以继续进行下一轮的等待。Semaphore。原创 2025-02-20 14:59:15 · 525 阅读 · 0 评论 -
Java线程池(ThreadPoolExecutor参数、拒绝策略)详解
方式:实现接口,重写方法。示例@OverrideSystem.out.println("自定义拒绝策略:任务 " + r.toString() + " 被拒绝");理解的参数和拒绝策略对于合理使用线程池至关重要。通过合理设置核心线程数、最大线程数、工作队列和拒绝策略,可以根据不同的业务场景优化线程池的性能,避免资源耗尽和任务堆积等问题。在实际开发中,需要根据具体的需求选择合适的参数和拒绝策略,以确保系统的稳定性和高效性。原创 2025-02-20 14:57:42 · 566 阅读 · 0 评论 -
Java的Lock接口与AQS原理详解
(简称 AQS)是 Java 并发包中实现锁和其他同步组件的基础框架,它位于包中。AQS 提供了一个基于 FIFO 队列的同步机制,通过维护一个状态变量(int state)和一个线程等待队列来实现锁的获取和释放。Lock接口为 Java 提供了更灵活的锁控制机制,而 AQS 作为实现锁和其他同步组件的基础框架,通过维护状态变量和等待队列,为锁的实现提供了强大的支持。和是基于 AQS 实现的典型锁,它们在不同的场景下可以发挥出各自的优势,提高程序的并发性能。原创 2025-02-20 14:54:12 · 312 阅读 · 0 评论 -
Java 的 volatile 关键字与内存可见性
volatile关键字在 Java 多线程编程中起着重要的作用,它通过保证变量的内存可见性和禁止指令重排序,解决了多线程环境下的部分数据不一致问题。但需要注意的是,volatile关键字不能替代关键字,它只能保证变量的可见性,不能保证原子性。在实际开发中,我们需要根据具体的场景合理选择使用volatile关键字和关键字,以确保程序的正确性和性能。原创 2025-02-20 14:52:36 · 276 阅读 · 0 评论 -
Java synchronized 与锁升级机制详解
在 Java 中,是一个非常重要的关键字,用于实现线程同步,保证在同一时刻只有一个线程可以访问被修饰的代码块或方法,从而避免多线程环境下的数据竞争和不一致问题。原创 2025-02-20 14:50:01 · 245 阅读 · 0 评论 -
Java线程生命周期与状态切换详解
Java 线程的生命周期和状态切换是多线程编程中的重要概念。了解线程的不同状态以及它们之间的切换条件,有助于我们更好地控制线程的执行流程,避免线程安全问题,从而编写出高效、稳定的多线程程序。在实际开发中,可以根据具体的需求,合理地使用线程的各种方法来实现线程状态的切换。原创 2025-02-20 14:41:26 · 636 阅读 · 0 评论 -
Java中Fail - Fast与Fail - Safe机制
在 Java 集合框架中,Fail - Fast(快速失败)和 Fail - Safe(安全失败)是两种不同的迭代机制,用于处理集合在迭代过程中被修改的情况。原创 2025-02-19 18:13:22 · 874 阅读 · 0 评论 -
Java 比较器:Comparable vs. Comparator
Comparable接口位于java.lang包下,它定义了一个compareTo方法。实现了Comparable接口的类的对象可以进行自然排序,即对象本身具备了比较的能力。compareTo方法接收一个同类型的对象作为参数,返回一个整数值:如果返回值小于 0,表示当前对象小于参数对象。如果返回值等于 0,表示当前对象等于参数对象。如果返回值大于 0,表示当前对象大于参数对象。Comparator接口位于java.util包下,它定义了一个compare方法。Comparator。原创 2025-02-19 18:11:37 · 295 阅读 · 0 评论 -
Java 中线程安全集合(CopyOnWriteArrayList、ConcurrentHashMap)知识详解
是 Java 并发包()中提供的线程安全的List实现类。它通过在写入操作时复制整个底层数组来保证线程安全,适用于读多写少的场景。是 Java 并发包中提供的线程安全的Map实现类,用于在多线程环境下高效地进行读写操作。它在不同的 Java 版本中有不同的实现方式。:适用于读多写少的场景,如配置信息的存储,配置信息很少修改,但会被频繁读取。:适用于多线程环境下对Map进行高并发读写操作的场景,如缓存系统、计数器等。原创 2025-02-19 18:09:30 · 414 阅读 · 0 评论 -
Java中哈希冲突与扩容机制
在 Java 中,当使用哈希表(如HashMapHashSet等)存储数据时,会通过哈希函数计算键(Key)的哈希值,然后根据这个哈希值来确定数据在哈希表中的存储位置。哈希冲突指的是,不同的键通过哈希函数计算后得到了相同的哈希值,从而映射到了哈希表中的同一个位置。原创 2025-02-19 18:06:58 · 515 阅读 · 0 评论 -
Java 中 List、Set、Map 核心实现类解析
ArrayList是基于动态数组实现的List类,它允许存储重复元素,并且可以通过索引快速访问元素。LinkedList是基于双向链表实现的List类,同样允许存储重复元素。HashMap是基于哈希表实现的Map类,用于存储键值对,键不能重复。也是基于哈希表实现的Map类,是线程安全的,适合在多线程环境下使用。若需要快速随机访问元素,可选择ArrayList。若频繁进行插入和删除操作,LinkedList是更好的选择。单线程环境下,使用HashMap存储键值对。多线程环境下,使用确保线程安全。原创 2025-02-19 18:04:54 · 864 阅读 · 0 评论 -
JDK 8+新特性(Stream API、Optional、模块化等)
Optional是 Java 8 引入的一个容器类,用于表示一个值可能存在或不存在的情况。它可以避免空指针异常(),使代码更加健壮。Java 9 引入了模块化系统(Project Jigsaw),它允许将代码组织成模块,每个模块有自己的声明性依赖和访问控制。模块化可以提高代码的可维护性、安全性和可扩展性,并且可以减少类路径的复杂性。在 Java 9+ 中,每个模块由一个文件来定义。该文件位于模块的根目录下,用于声明模块的名称、依赖关系和导出的包。// 声明依赖的模块// 导出的包。原创 2025-02-18 23:27:49 · 612 阅读 · 0 评论 -
Java的Lambda表达式与函数式接口
函数式接口是指只包含一个抽象方法的接口。Java 8引入了函数式接口的概念,主要是为了支持Lambda表达式。因为Lambda表达式本质上是函数式接口的一个实例,所以只有函数式接口才能使用Lambda表达式来实现。原创 2025-02-18 23:25:42 · 409 阅读 · 0 评论 -
Java注解与元注解
使用@interface关键字来定义注解,注解中的方法称为注解元素,注解元素可以有默认值。// 定义一个简单的注解元注解是用于注解其他注解的注解,它们可以控制注解的使用范围、生命周期等。Java 提供了几个元注解,常用的有@Retention@Target和@Inherited。原创 2025-02-18 23:21:33 · 556 阅读 · 0 评论 -
Java泛型与类型擦除
泛型是 Java 5 引入的一个重要特性,它允许在定义类、接口和方法时使用类型参数。通过使用泛型,我们可以编写更通用、类型安全的代码,避免了在使用集合等数据结构时进行强制类型转换,同时在编译阶段就能发现类型不匹配的错误。原创 2025-02-18 23:14:50 · 259 阅读 · 0 评论 -
Java反射与动态代理
反射是 Java 提供的一种强大机制,它允许程序在运行时动态地获取类的信息,包括类的属性、方法、构造函数等,并且可以在运行时创建对象、调用方法、访问和修改属性。通过反射,程序可以在运行时根据需要操作类,而不是在编译时就确定好所有的操作。原创 2025-02-18 23:00:00 · 755 阅读 · 0 评论 -
Java 异常体系(Checked vs. Unchecked)
在 Java 中,异常是指在程序执行过程中出现的错误或意外情况。Java 的异常体系是一个类层次结构,所有异常类都继承自Throwable类。ThrowableError和Exception。Error:表示系统级的错误,通常是由 Java 虚拟机(JVM)本身的问题引起的,如等。这类错误通常是不可恢复的,程序员一般无法通过代码进行处理。Exception:表示程序可以处理的异常情况。它又可以分为两种类型:Checked 异常和 Unchecked 异常。原创 2025-02-18 22:55:44 · 909 阅读 · 0 评论 -
Java自动装箱与拆箱
在 Java 中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是 Java 编译器提供的一种语法糖,用于在基本数据类型和对应的包装类之间进行自动转换。自动装箱:是指将基本数据类型自动转换为对应的包装类对象。例如,将int类型转换为Integer类型。自动拆箱:是指将包装类对象自动转换为对应的基本数据类型。例如,将Integer类型转换为int类型。原创 2025-02-18 22:24:27 · 335 阅读 · 0 评论 -
Java中final、static、transient关键字区别和运用
修饰的变量在对象序列化时会被忽略,即不会被保存到序列化文件或通过网络传输。这在某些情况下很有用,比如一些敏感信息或者临时计算结果,不需要在序列化时保存。,说明该变量在序列化过程中被忽略了。关键字用于修饰类的成员变量,被。修饰,在反序列化后其值为。原创 2025-02-18 21:57:46 · 371 阅读 · 0 评论 -
Java基本数据类型与包装类
Java基本数据类型与包装类原创 2025-02-18 21:50:46 · 271 阅读 · 0 评论 -
java面向对象特性(封装、继承、多态、抽象)
继承是指一个类(子类、派生类)可以继承另一个类(父类、基类)的属性和方法,从而实现代码的复用和扩展。子类可以拥有父类的所有非私有成员,并且可以在此基础上添加自己的新成员或重写父类的方法。多态是指同一个方法调用可以根据对象的不同类型而表现出不同的行为。多态的实现需要满足三个条件:继承、方法重写和父类引用指向子类对象。抽象是指从具体的事物中提取出共同的特征和行为,形成一个抽象的概念。在Java中,抽象通过抽象类和抽象方法来实现。抽象类是一种不能被实例化的类,它可以包含抽象方法和具体方法;原创 2025-02-18 21:45:34 · 425 阅读 · 0 评论 -
MySQL面试考点汇总
DDL 主要用于定义数据库的结构,是创建和管理数据库对象的重要工具。常见的操作包括 CREATE(创建数据库、表等)、ALTER(修改数据库、表结构)、DROP(删除数据库、表等)。例如,原创 2025-02-17 02:08:26 · 843 阅读 · 0 评论