Java 核心知识点与实战应用解析

简介: 我梳理的这些内容涵盖了 Java 众多核心知识点。包括 final 关键字的作用(修饰类、方法、变量的特性);重载与重写的区别;反射机制的定义、优缺点及项目中的应用(如结合自定义注解处理数据、框架底层实现)。还涉及 String、StringBuffer、StringBuilder 的差异;常见集合类及线程安全类,ArrayList 与 LinkedList 的区别;HashMap 的实现原理、put 流程、扩容机制,以及 ConcurrentHashMap 的底层实现。线程相关知识中,创建线程的四种方式,Runnable 与 Callable 的区别,加锁方式(synchronize
  1. Final 的作用:被 final 修饰的类没法被继承,被 final 修饰的方法不能被重写,被 final 修饰的变量其引用不可改变,但引用指向的内容能改。比如一个 final 数组,数组里的元素是可以修改的。
  2. 重载(Overload)和重写(Override):重载发生在同一个类中,方法名相同但参数列表(类型、个数、顺序)不同,和返回值、访问修饰符无关,没法通过返回类型区分。重写是在父子类中,方法名和参数列表必须相同,返回值要小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类,父类 private 方法不能被重写。
  3. 反射机制:就是在运行时,能知道任意类的所有属性和方法,还能调用任意对象的任意方法。优点是能动态加载类,提高代码灵活度;缺点是性能差,比直接代码慢很多。项目中常用反射 + 自定义注解,比如前后端交互时,后端 Long 类型返回前端会精度丢失,我们自定义 @IdEncrpt 注解,通过反射获取类的属性,若有该注解就把属性值转成字符串;整合 EMQ 时,自定义 @Topic 注解作用在类上,反射获取类的字节码和注解里的主题,用策略模式分发不同主题的消息。而且 Mybatis、Spring 等框架和 common-utils、hutool 工具库都大量用了反射。
  4. String、StringBuffer、StringBuilder 的区别:String 是不可变的,因为用字符数组保存字符串;StringBuffer 和 StringBuilder 是可变的。线程安全方面,String 是常量所以安全,StringBuffer 方法加了同步锁所以安全,StringBuilder 没加所以不安全。性能上,String 每次改变都生成新对象,效率低;StringBuffer 操作自身,比 String 好;StringBuilder 比 StringBuffer 效率更高。
  5. 常见集合类:Map 和 Collection 是所有集合的父接口。Collection 的子接口有 Set 和 List,Set 实现类有 HashSet、TreeSet 等,List 有 ArrayList、LinkedList 等。Map 实现类有 HashMap、TreeMap、Hashtable、ConcurrentHashMap 等。线程安全的类有 Vector(比 ArrayList 多 synchronized,效率低)、HashTable(比 HashMap 多 synchronized)、ConcurrentHashMap(高效线程安全)。
  6. ArrayList 和 LinkedList 的区别:ArrayList 是动态数组实现,LinkedList 是双向链表实现。随机访问 ArrayList 效率高,LinkedList 要移动指针遍历。非首尾增删 LinkedList 效率高,因为 ArrayList 会影响其他元素下标。LinkedList 更占内存,因为节点还存前后引用。两者都线程不安全。
  7. HashMap 的实现原理:是 “链表散列”(数组 + 链表),JDK1.8 后链表长度超 8 会转红黑树,红黑树节点数≤6 退回链表。put 时用 key 的 hashCode 算数组下标,hash 冲突时,key 相同就覆盖,不同就放链表。put 流程:先判数组是否为空,空就扩容;算下标,数组位置为空直接放,不为空就判 key 是否相同,相同覆盖;是红黑树就插入树中,否则遍历链表,长度超 8 转树,有相同 key 就覆盖;最后判 size 是否超阈值,超就扩容。扩容机制:JDK1.8 中,当键值对数量超阈值(0.75 * 容量)时扩容 2 倍,元素位置要么在原位置,要么在原位置 + 旧容量,通过 (e.hash & oldCap) 是否为 0 判断,不用重新算 hash。
  8. ConcurrentHashMap 底层实现:是线程安全的高效 Map。JDK1.7 底层用分段的数组 + 链表,分段锁保证安全;JDK1.8 用数组 + 链表 / 红黑树,靠 CAS 和 synchronized(只锁链表或红黑树首节点)实现,效率更高。
  9. 创建线程的四种方式:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口、使用匿名内部类。Runnable 的 run 方法无返回值,只能抛运行时异常;Callable 的 call 方法有返回值,能抛异常,配合 Future、FutureTask 获取结果,且 get 方法会阻塞主进程。
  10. 加锁方式:synchronized 是 Java 内置关键字,可给类、方法、代码块加锁,不用手动获取和释放锁,异常会自动释放,不会死锁,但没法知道是否获取到锁。Lock 是 Java 类,只能给代码块加锁,需手动加锁和释放锁,否则可能死锁,还能知道是否成功获取锁。
  11. 线程池队列已满的情况:若用无界队列(如 LinkedBlockingQueue),会继续加任务到队列;若用有界队列(如 ArrayBlockingQueue),队列满了会先增加线程到 maximumPoolSize,还满就用拒绝策略(默认 AbortPolicy)。项目中常用线程池处理优先级低的业务,比如搜索历史记录异步保存、用户行为数据异步入库;还用于大量任务,如 1000w 数据统计,10 个线程各算 100w 再合并结果,像每天晚上的运营统计数据、售货机补货数据计算。
  12. 线程池的种类:newCachedThreadPool(可缓存,灵活回收空闲线程)、newFixedThreadPool(定长,控制最大并发数)、newScheduledThreadPool(定长,支持定时及周期性任务)、newSingleThreadExecutor(单线程,按顺序执行任务)。核心参数有 corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(线程保持时间)、unit(时间单位)、workQueue(阻塞队列)、threadFactory(线程工厂)、handler(拒绝策略)。核心线程数配置:IO 密集型任务约为 CPU 核心数 * 2-3 倍;计算密集型任务约为 CPU 核心数 + 1。执行原理:先判断核心线程是否空闲,不空闲就放队列;队列满了就增加线程到 maximumPoolSize;还满就用拒绝策略。
  13. 保证 T1、T2、T3 按顺序执行:可以用 join 方法,让后执行的线程等待前一个线程完成。
  14. JVM 的组成:包含类加载器、执行引擎两个子系统,以及运行时数据区、本地接口两个组件。类加载器根据全限定名把 class 文件加载到方法区;执行引擎执行 classes 中的指令;本地接口与 native 库交互;运行时数据区就是 JVM 内存。Java 代码执行流程:编译器转字节码→类加载器加载到方法区→执行引擎转系统指令→CPU 执行,期间调用本地接口。
  15. JVM 运行时数据区:程序计数器是当前线程执行的字节码行号指示器,线程私有,支持分支、循环等功能。Java 虚拟机栈中,每个方法执行时会创建栈帧,存局部变量表等,线程私有。本地方法栈为虚拟机调用 Native 方法服务,线程私有。Java 堆是最大的内存区域,所有线程共享,几乎所有对象实例都在这分配。方法区存类信息、常量、静态变量等,线程共享。
  16. 类加载器及双亲委派模型:类加载器有启动类加载器(加载核心类库,无法被 Java 程序直接引用)、扩展类加载器(加载扩展库)、系统类加载器(按 CLASSPATH 加载,可通过 ClassLoader.getSystemClassLoader () 获取)、用户自定义类加载器(继承 ClassLoader)。双亲委派模型是指类加载器收到请求后,先委派父类加载器加载,父类无法加载时自己再加载,避免类重复加载。
  17. JDK8 新特性:有函数式接口、方法引用、stream 流、optional 等。
目录
打赏
0
0
0
0
3
分享
相关文章
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
190 3
基于最新 Java 技术栈的在线任务管理系统开发实战详解
本项目基于最新Java技术栈开发在线任务管理系统,涵盖任务创建、分配、跟踪、统计等功能。采用Spring Boot 3.2.x、React 18、PostgreSQL 16等主流技术,详解项目架构设计、核心功能实现及部署流程,助力掌握现代Java全栈开发技能。
123 6
|
29天前
|
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
290 1
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
本篇文章探讨了 Java 大数据在智慧文旅景区中的创新应用,重点分析了如何通过数据采集、情感分析与可视化等技术,挖掘游客情感需求,进而优化景区服务。文章结合实际案例,展示了 Java 在数据处理与智能推荐等方面的强大能力,为文旅行业的智慧化升级提供了可行路径。
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
78 0
Java 大视界 -- Java 大数据机器学习模型在自然语言生成中的可控性研究与应用(229)
本文深入探讨Java大数据与机器学习在自然语言生成(NLG)中的可控性研究,分析当前生成模型面临的“失控”挑战,如数据噪声、标注偏差及黑盒模型信任问题,提出Java技术在数据清洗、异构框架融合与生态工具链中的关键作用。通过条件注入、强化学习与模型融合等策略,实现文本生成的精准控制,并结合网易新闻与蚂蚁集团的实战案例,展示Java在提升生成效率与合规性方面的卓越能力,为金融、法律等强监管领域提供技术参考。
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
校招 Java 面试常见知识点及实战案例全解析
本文全面解析了Java校招面试中的常见知识点,涵盖Java新特性(如Lambda表达式、、Optional类)、集合框架高级应用(线程安全集合、Map性能优化)、多线程与并发编程(线程池配置)、JVM性能调优(内存溢出排查、垃圾回收器选择)、Spring与微服务实战(Spring Boot自动配置)、数据库与ORM框架(MyBatis高级用法、索引优化)、分布式系统(分布式事务、缓存应用)、性能优化(接口优化、高并发限流)、单元测试与代码质量(JUnit 5、Mockito、JaCoCo)以及项目实战案例(电商秒杀系统、社交消息推送)。资源地址: [https://pan.quark.cn/s
140 4
校招 Java 面试常见知识点汇总及备考指南
本文全面解析校招Java面试常见知识点,涵盖Java基础、集合框架、多线程并发、JVM等内容。从面向对象特性(封装、继承、多态)到数据类型与包装类,再到字符串处理和关键字用法,逐一剖析。集合框架部分深入讲解List、Set、Map接口及其常用实现类的特性和应用场景。多线程章节探讨线程创建、同步机制及线程池的使用。JVM部分聚焦内存区域、垃圾回收机制和类加载过程。结合实际案例,助你轻松应对校招面试!资源地址:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
100 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问