当前位置: 首页 > news >正文

Java基础知识总结

Java面试高频知识点总结

📚 Java基础

1. 面向对象三大特性

// 封装示例
public class Person {private String name;  // 封装public String getName() { return name; }
}// 继承示例
class Student extends Person { }// 多态示例
Animal animal = new Dog();  // 父类引用指向子类对象

2. == 和 equals() 的区别

  • ==:比较基本类型值或对象内存地址
  • equals():通常需要重写,用于比较对象内容
String s1 = new String("hello");
String s2 = new String("hello");s1 == s2;      // false(不同对象)
s1.equals(s2); // true(内容相同)

3. String、StringBuffer、StringBuilder

特性StringStringBufferStringBuilder
可变性不可变可变可变
线程安全安全安全(synchronized)不安全
性能低(频繁操作)中等
使用场景少量字符串操作多线程环境单线程环境

📦 Java集合框架

1. HashMap原理(JDK8+)

// 数组 + 链表/红黑树结构
static final int TREEIFY_THRESHOLD = 8;  // 链表转树阈值
static final int UNTREEIFY_THRESHOLD = 6; // 树转链表阈值// put过程伪代码
1. 计算key的hash值
2. 如果table为空则初始化
3. 如果桶为空,直接插入
4. 如果桶不为空:- 键相同则更新值- 如果是树节点,树插入- 否则遍历链表插入
5. 链表长度>8时转为红黑树

2. ConcurrentHashMap线程安全实现

  • JDK7:分段锁(Segment)
  • JDK8+
    • Node + CAS + synchronized
    • 只锁定当前桶(链表头/树根)
    • 并发控制更细粒度

3. ArrayList vs LinkedList

操作ArrayListLinkedList
随机访问O(1)O(n)
头部插入O(n)O(1)
内存占用较小(连续内存)较大(节点开销)
适用场景读多写少写多读少

🔁 多线程与并发

1. 线程状态转换

NEW
RUNNABLE:
start()
RUNNABLE
BLOCKED:
等待锁
BLOCKED
获得锁
WAITING:
wait()/join()
WAITING
notify()/notifyAll()
TIMED_WAITING:
sleep(n)
TIMED_WAITING
时间到
TERMINATED:
run()结束

2. synchronized vs ReentrantLock

特性synchronizedReentrantLock
实现机制JVM层面API层面
锁获取方式自动获取释放需要手动lock/unlock
公平性非公平可公平/非公平(构造函数指定)
条件变量单一wait/notify支持多个Condition
锁中断不支持支持lockInterruptibly()

3. 线程池核心参数

ThreadPoolExecutor(int corePoolSize,     // 核心线程数int maximumPoolSize,  // 最大线程数long keepAliveTime,   // 空闲线程存活时间TimeUnit unit,        // 时间单位BlockingQueue<Runnable> workQueue, // 工作队列RejectedExecutionHandler handler   // 拒绝策略
)
四种拒绝策略:
  1. AbortPolicy:默认策略,直接抛异常
  2. CallerRunsPolicy:用调用者线程执行任务
  3. DiscardPolicy:静默丢弃任务
  4. DiscardOldestPolicy:丢弃队列最老任务

⚙️ JVM与性能调优

1. 内存区域划分

JVM内存区域
“方法区”
“堆”
“虚拟机栈”
“本地方法栈”
“程序计数器”

2. 垃圾回收算法

  • 标记-清除:产生内存碎片
  • 复制算法:适合新生代(Eden/Survivor)
  • 标记-整理:适合老年代
  • 分代收集:新生代(Minor GC) + 老年代(Full GC)

3. 常见GC收集器

收集器区域算法特点
Serial新生代复制单线程,简单高效
ParNew新生代复制Serial的多线程版本
Parallel Scavenge新生代复制吞吐量优先
CMS老年代标记-清除低停顿,并发收集
G1全堆分Region+标记-整理可预测停顿,JDK9默认

🧩 设计模式

1. 单例模式(双重校验锁)

public class Singleton {private volatile static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {                     // 第一次校验synchronized (Singleton.class) {if (instance == null) {              // 第二次校验instance = new Singleton();}}}return instance;}
}

2. 工厂模式

interface Car {void drive();
}class Tesla implements Car { /*...*/ }
class BMW implements Car { /*...*/ }class CarFactory {public Car createCar(String type) {switch(type) {case "Tesla": return new Tesla();case "BMW": return new BMW();default: throw new IllegalArgumentException();}}
}

3. Spring中的设计模式

  • 工厂模式:BeanFactory
  • 代理模式:AOP实现
  • 单例模式:默认Bean作用域
  • 模板方法:JdbcTemplate
  • 观察者模式:ApplicationEvent

✨ Java 8+ 新特性

1. Lambda表达式

// 传统写法
Collections.sort(list, new Comparator<String>() {public int compare(String s1, String s2) {return s1.length() - s2.length();}
});// Lambda写法
Collections.sort(list, (s1, s2) -> s1.length() - s2.length());

2. Stream API

List<String> result = list.stream().filter(s -> s.startsWith("A")).map(String::toUpperCase).sorted().collect(Collectors.toList());

3. Optional避免NPE

Optional<User> user = userService.findById(id);
user.ifPresent(u -> System.out.println(u.getName()));String name = user.map(User::getName).orElse("Unknown");

http://www.dtcms.com/a/320530.html

相关文章:

  • 文件管理从基础到高级:文件描述符、超大文件切片重组与快速删除实战
  • Android 的CameraX的使用(配置,预览,拍照,图像分析,录视频)
  • Harbor 企业级实战:单机快速上手 × 高可用架构搭建 × HTTPS安全加固
  • 音视频直播全链路技术手册:核心术语与实战应用解析
  • Flink的窗口
  • LangChain4j终极指南:Spring Boot构建企业级Agent框架
  • 双目标定中旋转矩阵参数应用及旋转角度计算(聚焦坐标系平行)
  • 三方相机问题分析七:【datespace导致GPU异常】facebook 黑块和Instagram花图问题
  • Linux Shell:Nano 编辑器备忘
  • 以下是使用这款ePub编辑器将指定章节转换为TXT文本文档的操作方法
  • (数据结构)链表
  • Android 安全编程:Kotlin 如何从语言层保障安全性
  • Kotlin反射
  • HarmonyOS SDK助力讯飞听见App能力建设
  • 高德地图地理编码 逆地理编码全解析:地址和坐标的双向转换实战
  • HarmonyOS 设备自动发现与连接全攻略:从原理到可运行 Demo
  • 深入理解 robots.txt:网站与搜索引擎的 “沟通协议”
  • DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛
  • 控制建模matlab练习12:线性状态反馈控制器-①系统建模
  • Ideogram:优秀的在线AI绘画平台
  • 人工智能基础知识笔记十五:文本分块(Chunk)
  • 芯伯乐XBL6019 60V/5A DC-DC升压芯片的优质选择
  • 新手向:Python实现图片转ASCII艺术
  • Custom SRP - Directional Shadows
  • 【0基础3ds Max】主工具栏介绍(上)
  • 论文reading学习记录7 - daily - ViP3D
  • 3D TOF 视觉相机:工业视觉的破局者,重塑视觉感知的未来
  • Cesium 模型3dtiles压平,任意多面压平,无闪烁
  • ETL流程详解:从概念到实战案例一次讲透
  • 宝龙地产债务化解解决方案二:基于资产代币化与轻资产转型的战略重构