Java并发编程面试题
Java并发编程面试题一、基础1、并行跟并发的区别 并行:同一时刻,多个线程都在执行,这就要求有多个CPU分别执行多个线程。 并发:在同一时刻,只有一个线程执行,但在一个时间段内,两个线程都执行了。其实现依赖于CPU切换线程,因为切换时间很短,所以基本对于用户是无感知的。 2、什么是进程和线程 进程:程序运行起来后在内存中执行,并附带有运行所需的资源,是系统进行资源分配的基本单位。 线程:CPU是被分配到线程的,所以线程是CPU分配的基本单位。在Java中,当我们启动一个main函数就相当于启动了一个JVM进程,而main函数的线程就是主线程。一个进程中有多个线程,多个线程共用进程的堆和方法区,但每个线程都有自己的程序计数器和栈。 3、线程有几种创建方式 继承Thread类:重写run方法,调用start()方法启动线程。 缺点:单继承,继承了Thread就不能继承别的类了 1234567891011public static class MyThread extends Thread { @Override public void run...
Java中锁机制
Java 锁机制详细解析1. 锁的基本概念与分类1.1 为什么需要锁在多线程环境中,当多个线程同时访问共享资源时,可能会导致数据不一致或程序行为异常。锁机制通过强制互斥访问来确保线程安全,保证在同一时刻只有一个线程可以访问共享资源。 1.2 锁的分类Java中的锁可以分为以下几类: 内置锁(synchronized):Java语言内置的同步机制 显式锁(Lock接口):java.util.concurrent.locks包提供的锁 读写锁:允许多个读操作同时进行,但写操作独占 乐观锁与悲观锁:不同的并发控制策略 2. synchronized 内置锁2.1 实现原理synchronized是Java关键字,它基于监视器锁(Monitor)实现。每个Java对象都有一个关联的监视器锁,当线程进入synchronized代码块时,会自动获取这个锁,退出时自动释放。 底层实现: 在JVM字节码层面,synchronized通过monitorenter和monitorexit指令实现 对象头中的Mark Word字段用于存储锁状态信息 锁的升级过程:无锁 → 偏向锁 → 轻量级锁 ...
Java多线程梳理
Java多线程全面解析1. 多线程基础概念1.1 进程与线程进程是操作系统进行资源分配和调度的基本单位,每个进程都有独立的内存空间和系统资源。一个进程崩溃不会影响其他进程的运行,提供了良好的隔离性。 线程是进程中的一个执行单元,是CPU调度和执行的最小单位。同一进程内的所有线程共享进程的内存空间和系统资源,这使得线程间的通信更加高效,但也带来了数据同步的挑战。 1.2 为什么需要多线程 提高程序响应性:对于图形界面应用程序,使用多线程可以避免用户界面”冻结” 提高CPU利用率:当某个线程等待I/O操作时,其他线程可以继续执行,充分利用CPU资源 简化程序结构:对于需要处理多个独立任务的程序,多线程可以提供更清晰的设计 1.3 多线程的挑战 线程安全问题:多个线程同时访问共享数据可能导致数据不一致 死锁问题:线程间相互等待对方释放锁,导致程序无法继续执行 性能问题:线程上下文切换和同步操作会带来额外的开销 2. 线程创建方式2.1 继承Thread类这是最简单的创建线程方式,通过继承Thread类并重写run()方法。但这种方式的缺点是Java不支持多重继承,如果已经...
Java中反射与Spring AOP全面梳理
Java中反射与Spring AOP全面梳理一、知识点详解第一部分:Java 反射机制详解一、反射概述1. 什么是反射?反射是 Java 提供的一种能够在程序运行时动态获取类的所有信息(如类名、方法、属性、构造器、注解等),并能动态操作类属性、调用类方法的机制。 2. 为什么需要反射? 动态性:在编译时无法确定要操作哪个类,只有在运行时才能确定 灵活性:可以突破访问权限的限制,访问和修改类的私有成员 框架开发:Spring、Hibernate、MyBatis 等主流框架的核心技术 3. 反射的优缺点优点: 极大提高了程序的灵活性和扩展性 允许实现通用功能,如对象序列化、动态代理等 缺点: 性能较低:反射操作比直接代码慢 安全性问题:可以绕过权限检查 内部暴露:打破了封装性 4. 核心类与接口反射的核心 API 位于 java.lang.reflect 包中: Class:代表一个类的实体 Field:代表类的成员变量 Method:代表类的方法 Constructor:代表类的构造方法 Array:动态创建和访问数组 Modifier:解析访问修饰符 二、反射 AP...
Java中JVM梳理
Java JVM 知识点全面详细梳理一、JVM 概述与体系结构1. JVM 是什么?Java 虚拟机(JVM)是运行 Java 字节码的虚拟计算机,它提供了跨平台运行 Java 程序的能力。”一次编写,到处运行”的核心就是 JVM。 2. JVM 体系结构1234567891011121314151617181920212223242526272829JVM 体系结构:┌─────────────────────────────────────────────────────────────┐│ JVM ││ ┌───────────────────────────────────────────────────────┐ ││ │ 运行时数据区 (Runtime Data Areas) │ ││ │ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │ │...
Java中IO梳理
一、知识点梳理一、Java I/O 概述Java I/O 主要分为以下几种模型: BIO (Blocking I/O):同步阻塞 I/O NIO (New I/O):同步非阻塞 I/O AIO (Asynchronous I/O):异步非阻塞 I/O 二、BIO (Blocking I/O)1. 基本概念BIO 是传统的同步阻塞 I/O 模型,每个连接都需要一个独立的线程处理。 2. 使用场景 连接数较少且固定的应用 简单的客户端/服务器应用 需要简单编程模型的应用 3. 核心类 InputStream/OutputStream:字节流基类 Reader/Writer:字符流基类 FileInputStream/FileOutputStream:文件字节流 FileReader/FileWriter:文件字符流 BufferedReader/BufferedWriter:缓冲字符流 Socket/Serve...
Java注解梳理
Java 注解(Annotation)是 Java 5 引入的一种元数据(metadata)机制,用于为代码提供附加信息,不直接影响代码逻辑,但可以通过编译器、工具或运行时环境解析并执行特定操作。 一、注解的基本概念 用途: 标记代码行为:如 @Override 标记方法重写。 携带元数据:如 @Test 标记测试方法。 替代配置文件:如 Spring 框架中的 @Component。 编译时检查:如 @FunctionalInterface 校验函数式接口。 运行时处理:如通过反射读取注解并执行逻辑。 分类: 内置注解:Java 提供的常见注解(如 @Override、@Deprecated)。 元注解:用于定义其他注解的注解(如 @Target、@Retention)。 自定义注解:用户自定义的注解。 二、内置注解1. @Override 作用:标记方法为重写父类方法,编译器会校验是否符合重写规则。 示例:123456789101112class Animal { void eat() { System.out.p...
Java泛型梳理
Java泛型梳理一、 泛型是什么?为什么需要它? (The “What” and “Why”)1.1 核心概念:泛型(Generics)是 JDK 5 引入的一个核心特性,它允许在定义类、接口或方法时使用类型参数(Type Parameter)。在使用时(如声明变量、创建实例时)再指定具体的类型实参(Type Argument)。简单说,就是参数化类型。 1.2 主要目的与优势(解决什么问题): 类型安全(Type Safety):在编译期检查类型,将运行时的 ClassCastException 转移到了编译期。这是最重要的优点。 没有泛型前:List 只持有一个 Object 类型的引用,取出的元素需要手动强制转换,容易出错。 有泛型后:List<String> 明确告知编译器它只持有 String,如果存入 Integer,编译器会直接报错。 消除强制转换(Eliminates Casts):代码更简洁,可读性更强。 没有泛型:String s = (String) list.get(0); 有泛型:String s = list.get(0); ...
Java集合框架梳理
Java集合框架梳理 一、什么是 Java 集合框架?Java 集合框架是一个统一的、可扩展的体系结构,用于表示和操作集合。它将集合的抽象与具体实现分离,提供了通用的接口、实现类和算法(如排序、搜索),极大地提高了代码的复用性、可读性和可维护性。 在 JCF 出现之前(Java 1.2 之前),开发者需要使用数组、Vector、Hashtable 等结构,这些结构功能单一,且 API 设计不一致。JCF 解决了这些问题。 二、集合框架的核心体系结构JCF 主要分为两大接口分支:Collection 和 Map。 1. Collection 接口 (单列数据)存储一组独立的元素。它有三个主要的子接口: List:有序、可重复 的集合。元素都有对应的顺序索引。 Set:无序、不可重复 的集合。类似于数学中的“集合”。 Queue/Deque:队列 结构,实现了特定的 FIFO(先进先出)或 LIFO(后进先出)等规则。 2. Map 接口 (双列数据,键值对)存储一组 键值对 (Key-Value) 映射。Key 是不可重复的,每个 Key 最多映射到一个 Value...
Java异常处理梳理
mermaid.initialize({ startOnLoad: true, theme: 'default' }); 本文全面介绍了Java异常处理机制。文章首先阐释了异常的概念,即程序运行中中断正常流程的意外事件。接着详细分析了Java异常的体系结构,以 Throwable 为根类,分为 Error (严重错误,程序不应处理)和 Exception (可捕获和处理的异常)两大分支,后者又分为 RuntimeException (非受检异常,程序逻辑错误引起)和非 RuntimeException (受检异常,外部环境因素引起)。 文章系统讲解了三种异常处理机制: try-catch-finally 语句块(捕获和处理异常)、 throws 声明(将异常处理责任交给调用者)和 throw 关键字(主动抛出异常对象)。还介绍了自定义异常的创建方法(继承 Exception 或 RuntimeException ),以及异常处理的最佳实践,如使用try-with-resources自动管理资源、异常链保留完整上下文信息等。此外,文章还提及了异常...
Java语法基础梳理
本文面介绍了Java语言的核心基础知识。文章首先详细讲解了Java的8种基本数据类型(byte、short、int、long、float、double、char、boolean)及其包装类型的特点、范围和使用方法;接着阐述了变量的声明规则、命名规范和常量的定义方式;然后系统梳理了Java提供的各类运算符(算术、关系、逻辑、位运算等)及其用法;还介绍了流程控制语句,包括条件语句(if、switch)、循环语句(for、while、do-while)和跳转语句(break、continue、return);此外,文章还讲解了Java中的三种注释方式,以及基本数据类型和引用数据类型在JVM中的存储位置(栈内存、堆内存、方法区/元空间等)。整体内容涵盖了Java语言基础的核心知识点,结构清晰,示例丰富。 Java语言基础梳理一、基础语法1. 数据类型Java是一种强类型语言,每个变量都必须声明其数据类型。Java的数据类型分为两大类:基本数据类型和引用数据类型。 1.1 基本数据类型(Primitive Data Types)Java有8种基本数据类型,它们是Java语言内...
Java知识体系
Java 知识体系一、Java 语言基础 这是所有 Java 程序的基石。 基础语法 数据类型: 基本数据类型:byte, short, int, long, float, double, char, boolean 引用数据类型:类、接口、数组、枚举等 变量与常量:final 关键字 运算符:算术、关系、逻辑、位、赋值、条件(三元)、instanceof 等 流程控制:if-else, switch-case, for, while, do-while, break, continue, return 面向对象编程 (OOP) 四大特性: 封装:通过访问控制符(private, protected, public, 默认)隐藏实现细节,提供公共方法访问。 继承:extends 关键字,实现代码复用。单继承,但可多层继承。 多态: 编译时多态:方法重载(Overload) 运行时多态:方法重写(Override),基于继承和接口实现,通过父类/接口引用指向子类对象。 抽象:abstract 类和接口(interface)用于定义规范。 类与对象:类的...
SpringCloud框架组件梳理
SpringCloud框架组件梳理一、 服务治理与发现 (Service Governance & Discovery) 这是微服务的核心,解决服务如何找到彼此的问题。 Nacos (阿里开源,目前主流选择) 功能:兼具服务注册与发现和分布式配置中心两大功能。 优势:AP/CP模式可切换、支持DNS和RPC服务发现、管理界面友好、生态丰富,是Eureka的强力替代者。 Eureka (Netflix开源,Spring Cloud Netflix套件核心) 功能:服务注册与发现。 现状:目前处于维护模式,新项目建议选择Nacos或Consul。 Consul (HashiCorp公司) 功能:服务发现、配置、服务网格(内置)一体化工具。基于CP模型,保证强一致性。 优势:功能强大,与Docker等云原生技术结合紧密。 Zookeeper 功能:分布式协调服务,也可用于服务注册与发现(通过临时节点)。 现状:更偏向于分布式协调,作为纯服务发现组件不如Nacos/Consul便捷,但在一些老系统或大数据生态中常见。 二、 配置中心 (C...
Java中各个LTS版本新特性梳理
Java中各个LTS版本新特性梳理一、Java8新特性梳理1. Lambda 表达式Lambda 表达式是 Java 8 最引人注目的特性,它允许你将功能作为方法参数,或者将代码本身当作数据。它提供了一种清晰且简洁的方式来表示一个方法接口(通常是函数式接口)的实例。 语法:(parameters) -> expression或(parameters) -> { statements; } 示例: 123456789101112131415161718192021222324252627// 1. 无参数,无返回值Runnable r1 = () -> System.out.println("Hello World!");// 2. 一个参数,无返回值 (参数可省略括号)Consumer<String> consumer = (msg) -> System.out.println(msg);// 等价于Consumer<String> consumerSimplified = msg ->...
