Java面试深度解析:百度面试常见问题
需积分: 5 175 浏览量
更新于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 上传
不走小道
- 粉丝: 3343
- 资源: 5059
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握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数据到服务器