Java 核心知识与技术全景解析

简介: 本文涵盖 Java 多方面核心知识,包括基础语法中重载与重写、== 与 equals 的区别,String 等类的特性及异常体系;集合类中常见数据结构、各集合实现类的特点,以及 HashMap 的底层结构和扩容机制;网络编程中 BIO、NIO、AIO 的差异;IO 流的分类及用途。线程与并发部分详解了 ThreadLocal、悲观锁与乐观锁、synchronized 的原理及锁升级、线程池核心参数;JVM 部分涉及堆内存结构、垃圾回收算法及伊甸园等区域的细节;还包括 Lambda 表达式、反射与泛型的概念,以及 Tomcat 的优化配置。内容全面覆盖 Java 开发中的关键技术点,适用于深

一、基础语法与面向对象

  1. 重载与重写的区别:重载是同一对象中方法名相同但参数列表不同的方法,编译时由编译器根据参数区分;重写是父子类(或接口与实现类)中方法名和参数列表都相同的方法,运行时由虚拟机根据对象实际类型确定调用哪个,可用@Override检查是否重写。
  2. == 与 equals 的区别:对于基本类型,==比较值;对于引用类型,==比较引用地址(是否为同一对象)。equals 的实现不同:Object 的 equals 本质是==,而 String、ArrayList 等的 equals 比较内容(如字符串的每个字符、集合的每个元素)。
  3. String、StringBuilder 和 StringBuffer 的区别:三者都可表示字符串,String 不可变(线程安全),后两者可变;StringBuilder 非线程安全,StringBuffer 线程安全(方法加同步锁)。大部分场景用 String;大量拼接时,多线程访问用 StringBuffer,单线程内用 StringBuilder 更高效。String 被 final 修饰是为了保证不可变,带来线程安全、可缓存等好处。
  4. Java 中的异常:Throwable 是顶层父类,分为 Error 和 Exception。Error 是无法恢复的错误(如内存溢出、栈溢出),捕获后通常无法恢复;Exception 是可恢复的异常,可通过 catch 处理或 throw 抛给上层。Exception 分检查异常(必须处理,如 try-catch 或 throws)和非检查异常(RuntimeException 及其子类,如空指针、数组越界,无需强制处理)。

二、集合类

  1. 常见数据结构:线性结构有动态数组(如 ArrayList,元素连续存储)、链表(如 LinkedList,元素通过节点链接)、栈(先进后出,LinkedList 的 push/pop/peek 可实现)、队列(先进先出,LinkedList 的 offer/poll 可实现);非线性结构有优先级队列(如 PriorityQueue,基于堆实现,适合排行榜)、哈希表(如 HashMap,key-value 存储,快速查找)、红黑树(如 TreeMap,自平衡二叉树)、跳表(如 ConcurrentSkipListMap,多级链表,性能接近红黑树)、B + 树(数据库索引常用)。
  2. Java 常见集合类:核心接口有 Collection(子接口 List、Set)和 Map。List 实现类中,ArrayList 基于数组,随机访问快、增删(非尾部)影响其他元素;LinkedList 基于链表,随机访问慢、增删(非定位阶段)快;Vector 基于数组,线程安全。Set 实现类中,HashSet 基于 HashMap,元素唯一(需实现 hashCode 和 equals)。Map 实现类中,HashMap 底层是数组 + 链表 + 红黑树,key 唯一;LinkedHashMap 在 HashMap 基础上用链表记录插入顺序(可做 LRU 缓存);TreeMap 基于红黑树;Hashtable 线程安全(方法加 synchronized);ConcurrentHashMap 线程安全(锁链表,并发度高,get 无锁靠 volatile 保证可见性)。
  3. HashMap 原理(数据结构):底层是数组 + 链表 + 红黑树。数组通过 key 的 hashCode 计算索引,实现 O (1) 存取;因数组容量有限,会发生哈希冲突,用链表存储冲突元素(此时存取复杂度 O (n));当链表长度≥8 且数组容量≥64 时,链表转为红黑树(复杂度 O (log n)),节点减少到一定程度会退化为链表。
  4. HashMap 原理(扩容):扩容因子 0.75,初始容量 16,当元素数超过容量 ×0.75 时扩容(容量翻倍)。扩容后重新计算 key 的索引,部分 key 会移动到新位置(通过 (n-1)&hash 计算,n 为新容量)。

三、网络编程

BIO、NIO、AIO 的区别:三者核心差异在处理客户端连接、数据等待、数据复制阶段的线程状态。BIO 中线程在这三个阶段都阻塞,高并发下线程资源紧张;NIO 在连接和数据等待阶段非阻塞,结合多路复用技术(事件驱动),用少量线程处理大量请求,线程利用率高;AIO 在数据复制阶段也解放线程,通过回调处理,适合高并发场景。

四、IO 流

IO 流按单位分字节流(父类 InputStream、OutputStream)和字符流(父类 Reader、Writer)。转换流(InputStreamReader、OutputStreamWriter)用于字节流转字符流;缓冲流(如 BufferedInputStream)通过缓冲提高效率;对象流(ObjectInputStream、ObjectOutputStream)配合序列化实现对象与字节流的转换。

五、线程与并发

  1. ThreadLocal 原理:用于多线程变量隔离,每个线程有 ThreadLocalMap,以 ThreadLocal 为 key 存储隔离资源。set 方法将资源存入当前线程的 map,get 方法从中获取,用完需调用 remove () 避免内存泄漏。
  2. 悲观锁与乐观锁:悲观锁(如 synchronized、Lock)认为会有竞争,失败线程阻塞,适合竞争多、独占时间长的场景;乐观锁(如 AtomicInteger)认为竞争少,失败线程重试,适合竞争少、快速处理的场景。
  3. synchronized 原理:重量级锁中,线程通过 Monitor 对象的 owner 属性竞争,成功则加锁,失败则自旋重试或进入等待队列。锁升级过程:单线程加锁用偏向锁,交替加锁用轻量级锁,竞争时升级为重量级锁(Java 15 后偏向锁废弃)。
  4. synchronized 和 volatile 对比:volatile 保证共享变量的可见性和有序性,但不保证原子性;synchronized 保证原子性、可见性和有序性。
  5. 线程池核心参数:核心线程数(常驻线程)、最大线程数(核心线程 + 救急线程)、存活时间(救急线程空闲时长)、时间单位、工作队列(存放待处理任务)、线程工厂(创建线程)、拒绝策略(队列满且线程全忙时,如 AbortPolicy 抛异常、CallerRunsPolicy 让提交线程处理等)。

六、JVM 虚拟机

  1. 堆内存结构:传统垃圾回收器将堆分为老年代和年轻代(Eden、S0、S1);G1 回收器将堆分为多个 Region,可分别作为 Eden、幸存区、老年代、巨型对象区。
  2. 垃圾回收算法:标记 - 清除算法(快但产生碎片);标记 - 整理算法(无碎片但慢);标记 - 复制算法(将内存分为 S0 和 S1,复制存活对象到 S1 后清空 S0,无碎片,适合存活对象少的场景)。
  3. 伊甸园、幸存区、老年代细节:对象初始在 Eden,年轻代回收(标记 - 复制)后存活对象进入 S0;再次回收时,Eden 和 S0 的存活对象复制到 S1,二者互换;多次回收后存活的对象晋升老年代。大对象在不同回收器中处理不同,如 CMS 中超过阈值直接进老年代,G1 中巨型对象存于专用 Region。

七、Lambda 表达式

Lambda 表达式是匿名函数(语法:(参数) -> 表达式),本质是函数对象,用于行为参数化场景(如 Stream API、MyBatisPlus 的 QueryWrapper)。与匿名内部类相比,Lambda 需配合函数式接口,语法更简洁,this 含义不同,运行时动态生成类。

八、反射及泛型

  1. 反射:Java 提供的 API,可在运行时加载类、获取类信息(属性、方法等)、创建对象、调用方法。广泛用于框架(如 Spring 的 Bean 创建、MyBatis 的结果映射),但效率较低。
  2. 泛型:实现类型参数化,可用于类、接口、方法,提供编译时类型检查(避免运行时转换错误),提高代码通用性(如 List<T>可存储任意类型元素)。

九、Tomcat 优化

Tomcat 优化可调整线程池和网络配置,如 springboot 默认配置中,max-connections 控制最大连接数,accept-count 控制连接队列数,threads.max 控制最大线程数,threads.min-spare 控制最小备用线程数。JDK 21 配合 SpringBoot 3.2.x 可使用虚拟线程优化,提升并发处理能力。

相关文章
|
7月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
695 1
|
7月前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
629 0
|
7月前
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
802 44
|
8月前
|
Java 测试技术 API
2025 年 Java 开发者必知的最新技术实操指南全览
本指南涵盖Java 21+核心实操,详解虚拟线程、Spring Boot 3.3+GraalVM、Jakarta EE 10+MicroProfile 6微服务开发,并提供现代Java开发最佳实践,助力开发者高效构建高性能应用。
1138 5
|
8月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
249 4
|
8月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
1576 1
|
8月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
395 3
|
8月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
|
8月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据在智能物流运输车辆智能调度与路径优化中的技术实现(218)
本文深入探讨了Java大数据技术在智能物流运输中车辆调度与路径优化的应用。通过遗传算法实现车辆资源的智能调度,结合实时路况数据和强化学习算法进行动态路径优化,有效提升了物流效率与客户满意度。以京东物流和顺丰速运的实际案例为支撑,展示了Java大数据在解决行业痛点问题中的强大能力,为物流行业的智能化转型提供了切实可行的技术方案。
|
8月前
|
分布式计算 Cloud Native 安全
Java:历久弥新的技术基石
Java:历久弥新的技术基石
下一篇
开通oss服务