Java面试深度解析:集合、多线程、JVM与并发
需积分: 5 16 浏览量
更新于2024-08-03
收藏 114KB DOCX 举报
"Java面试题集,涵盖Java基础、并发编程、JVM、设计模式、性能优化等多个方面"
1. **乐观悲观锁**:乐观锁假设很少发生冲突,因此在读取数据时不加锁,而在更新时检查是否被其他线程修改过。悲观锁则相反,假设会发生冲突,在读取数据时就加锁。Java中,`乐观锁`常通过版本号或CAS(Compare and Swap)实现,`悲观锁`如`synchronized`关键字。
2. **原子性**:Java中的`synchronized`、`volatile`和`Atomic`类可以保证操作的原子性,防止数据在多线程环境中的不一致。
3. **内存分布**:`char`占2字节,`double`占8字节。在内存中,对象存储在堆上,基本类型和引用在栈上,对于数组,其元素在堆上。
4. **对象死亡过程**:包括可达性分析、 finalize 方法执行、垃圾收集器清理。
5. **对象头**:对象头包含Mark Word(用于锁状态、GC标记等)、Class Pointer(指向类元数据的指针)。
6. **synchronized原理**:保证同一时间只有一个线程访问同步代码块,内部异常会释放锁,避免死锁。排查死锁通常使用`jstack`命令,死锁会导致线程永久等待。替代方案如使用`ReentrantLock`。
7. **集合线程安全**:`HashSet`非线程安全,`HashMap`同样,但`ConcurrentHashMap`是线程安全的。若需使它们线程安全,可使用`synchronized`修饰或者使用并发集合。
8. **多线程解决的问题**:提高程序运行效率,利用多核CPU资源。线程池解决了频繁创建销毁线程的开销,提供线程复用。
9. **线程池设计**:线程池参数包括核心线程数、最大线程数、工作队列(如ArrayBlockingQueue、LinkedBlockingQueue等)和超时策略。设计线程池需考虑任务类型、系统资源、性能需求等因素。
10. **AQS(AbstractQueuedSynchronizer)**:是Java并发包中的基础组件,`ReentrantLock`和`Semaphore`等依赖它实现同步。
11. **JVM内存模型**:包括堆、栈、方法区、本地方法栈、程序计数器,大页模式是为了提高内存访问效率。
12. **敏捷开发**:快速响应变化,强调迭代和增量开发。防御性编程是在编写代码时假设可能会出错,提前预防。并行编程是同时处理多个任务,提高效率。
13. **逃逸分析**:分析对象是否会被外部线程访问,有助于优化如栈分配、锁消除等。
14. **线程安全**:一个类在多线程环境下正确工作的能力。Java中有`synchronized`、`volatile`、`final`等关键字保证线程安全。
15. **线程设计题**:例如使用条件变量或`CountDownLatch`来控制线程执行顺序。
16. **后缀表达式**:也叫逆波兰表示法,利于计算,减少括号使用。中缀表达式转后缀表达式是算法题常考内容。
17. **性能优化**:分析项目中的内存溢出(OOM)和内存泄漏,使用工具如VisualVM、JProfiler等。
18. **抽象方法和类方法**:抽象方法无实现,存在于抽象类中;静态方法属于类,不依赖实例。
19. **Java克隆体系**:涉及到`Cloneable`接口和`clone()`方法,浅拷贝和深拷贝的概念。
20. **触发类加载**:类加载器根据需要加载类,如首次访问类的静态成员、创建类实例等。
以上只是部分关键知识点的概述,每个话题都包含了大量的理论和实践内容,深入理解需要结合具体实现和实际案例进行学习和探讨。
2010-10-01 上传
2009-12-16 上传
2020-12-20 上传
2024-07-26 上传
2012-12-11 上传
2019-11-08 上传
2016-02-04 上传
2010-04-08 上传
2024-03-09 上传
T-OPEN
- 粉丝: 2w+
- 资源: 30
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器