Java面试深度解析:百度面试常见问题
需积分: 5 122 浏览量
更新于2024-08-03
收藏 1KB MD 举报
"Java面试题集锦,涵盖了Java并发、垃圾回收、数据库、网络协议、设计模式等多个领域的核心知识点,适合准备Java相关面试者参考学习。"
以下是对这些面试题涉及知识点的详细解释:
1. **synchrnoized和ReentrantLock的底层实现**:synchronized基于Java内置机制,依赖于Monitor(监视器锁);ReentrantLock是Java并发包中的锁,底层采用 CAS(Compare and Swap)操作和AQS(AbstractQueuedSynchronizer)。
2. **锁的四种状态及升级过程**:从无锁(Lock-Free)、偏向锁(Bias Lock)、轻量级锁(Lightweight Lock)到重量级锁(Mutex Lock),锁的状态随着竞争程度逐步升级。
3. **CMS(Concurrent Mark Sweep)和G1(Garbage-First)**:CMS是一种低暂停时间的垃圾收集器,而G1是一种并行、分代、区域化的垃圾收集器,目标是实现可预测的停顿时间。
4. **G1何时触发Full GC**:当老年代空间不足或者Young GC后晋升到老年代的对象大小超过历次Young GC平均晋升大小的1.5倍时,G1可能触发Full GC。
5. **其他线程安全方式**:除CAS、原子类、synchronized、Lock之外,还有volatile、ThreadLocal、AtomicReference等。
6. **HashMap与Hashtable**:HashMap允许null键值,不保证线程安全;Hashtable不允许null键值,是线程安全的。
7. **允许null键的map**:除HashMap外,还有LinkedHashMap、WeakHashMap等。
8. **HashMap扩容原因**:HashMap扩容是为了保持负载因子(默认0.75)以避免过多的哈希冲突,当元素数量达到容量的75%时,会进行扩容至原来两倍大小。
9. **红黑树插入时间复杂度**:红黑树插入操作的时间复杂度为O(logn)。
10. **解决哈希冲突的方法**:开放寻址法、链地址法、再哈希法、建立公共溢出区等。
11. **大数据排序**:面对1T数据但只有1G内存的情况,可以使用外部排序,如归并排序或MapReduce。
12. **Tomcat类加载器**:Tomcat自定义类加载器以实现Web应用的隔离,防止不同应用之间的类冲突。
13. **TCP握手挥手**:TCP连接的建立需要三次握手(SYN-SYN/ACK-ACK),断开连接需要四次挥手(FIN-ACK-FIN-ACK)。
14. **MySQL隔离级别**:包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)、串行化(SERIALIZABLE)。
15. **B树与B+树**:B树每个节点可以有多个子节点,所有键都在叶子节点;B+树所有数据都存储在叶子节点,非叶子节点只作为索引。
16. **设计模式与JDK源码**:如单例模式(Singleton)在`java.lang.Runtime`,工厂模式在`java.util.Calendar`,观察者模式(Observer)在`java.util.EventObject`等。
17. **Java运行时数据区**:包括程序计数器、虚拟机栈、本地方法栈、堆、方法区(Java 8后变为元空间)。
18. **垃圾回收算法**:主要有标记-清除、复制、标记-整理、分代收集等。
19. **吞吐量优先与响应时间优先的垃圾收集器**:吞吐量优先通常指Parallel Scavenge + Parallel Old组合,响应时间优先则常用G1或ZGC。
20. **类加载全过程**:加载、验证、准备、解析、初始化。
21. **线程池7个参数**:corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(空闲线程存活时间)、workQueue(工作队列)、threadFactory(线程工厂)、handler(拒绝策略)、poolSize(当前线程池大小)。
22. **CAS ABA问题**:ABA问题是指在乐观锁中,一个值从A变到B再变回A,CAS无法检测到这个变化。解决方案可以使用版本号或原子引用。
23. **Java内存模型**:描述了线程如何访问和修改主内存以及线程工作内存中的数据,确保多线程环境下的可见性、原子性和有序性。
24. **有界与无界阻塞队列**:有界队列限制了最大容量,当队列满时,生产者会被阻塞;无界队列没有容量限制,不会阻塞生产者。
25. **Session与Cookie的区别**:Session存储在服务器端,Cookie存储在客户端。Session用于跟踪用户会话,Cookie常用于存储用户偏好设置等非敏感信息。
26. **反射**:Java反射机制允许程序在运行时动态获取类的信息并调用其方法,但过度使用会增加系统开销,影响性能。
27. **AQS(AbstractQueuedSynchronizer)**:它是Java并发包中的抽象类,提供了线程同步的基本框架,如ReentrantLock、Semaphore等都基于它实现。
28. **JUC(Java Util Concurrency)包中的同步组件与AQS**:许多组件如ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier等都实现了AQS的acquire和release方法来管理共享资源的访问。
2023-01-26 上传
2023-08-22 上传
2012-12-03 上传
2012-02-18 上传
2021-09-02 上传
2023-07-30 上传
2018-11-03 上传
不走小道
- 粉丝: 3330
- 资源: 5060
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍