BAT面试必备:Java多线程、JVM、Spring深度解析
需积分: 9 179 浏览量
更新于2024-08-05
收藏 133KB MD 举报
"这是一份全面的BAT(百度、阿里巴巴、腾讯)面试题汇总,涵盖了Java多线程、JVM、Java扩展、Spring框架以及中间件等多个方面的知识点,旨在帮助求职者准备大厂面试。"
### 一、Java多线程
1. **线程池的原理**:线程池通过预创建线程来减少频繁创建和销毁线程的开销,提高系统性能。创建线程池的方式包括使用`Executors`提供的工厂方法,如`newFixedThreadPool`、`newCachedThreadPool`等。
2. **线程生命周期**:线程经历新建、就绪、运行、阻塞和死亡五个阶段。僵死进程是指已结束但其父进程未回收其资源的线程。
3. **线程安全**:当多个线程访问共享数据时,如果不正确处理可能导致数据不一致。实现线程安全可以通过同步机制(`synchronized`)、锁(`Lock`)、原子变量(`Atomic`类)等。
4. **线程池核心参数**:包括核心线程数、最大线程数、线程存活时间、工作队列容量等。合理配置线程池大小应考虑系统资源和任务特性。
5. **volatile、ThreadLocal**:volatile确保变量在多线程环境中的可见性,ThreadLocal为每个线程提供独立的变量副本,避免线程间的数据干扰。
6. **ThreadLocal OOM**:当线程池中的线程长期存在且每个线程持有大量ThreadLocal变量时,可能导致内存溢出。
### 二、JVM相关
1. **JVM内存模型**:包括堆、方法区、栈、本地方法栈和程序计数器。**GC**(Garbage Collection)是自动回收不再使用的内存空间的过程。
2. **GC类型与算法**:分为Minor GC和Full GC,Full GC通常在堆内存不足、方法区清理、System.gc()调用等情况触发,使用不同算法如复制、标记-清除、标记-整理等。
3. **ClassLoader**:JVM中有Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader,以及用户自定义类加载器。
4. **双亲委派机制**:类加载请求先向上委托给父类加载器,只有父类无法加载时才尝试自己加载,防止类重复加载和安全问题。
5. **破坏双亲委派**:自定义类加载器或使用`Class.forName()`指定加载路径可打破此机制。
6. **JVM调优**:调整JVM内存分配、设置垃圾回收器、优化代码、监控工具等,具体参数如-Xms、-Xmx、-XX:NewRatio等。
### 三、Java扩展篇
1. **红黑树**:一种自平衡的二叉查找树,应用于`HashMap`和`TreeSet`等数据结构中,保证插入、删除和查找操作的时间复杂度近似O(logn)。
2. **NIO**(Non-blocking Input/Output):提供了一种基于通道和缓冲区的I/O方式,适用于高并发、低延迟的场景。
3. **Java9改进**:模块化系统、JShell(REPL)命令行工具、HTTP客户端API等。
4. **HashMap**:使用数组+链表实现,JDK 8引入红黑树减少冲突。`ConcurrentHashMap`、`HashTable`等各有其并发控制策略。
5. **反射**:运行时获取类信息并动态操作对象,用于插件、序列化等,虽然性能较低,但在某些场景下必不可少。
6. **自定义注解**:自定义元数据,可用于编译时检查、运行时处理等,通过`@Retention`和`@Target`控制注解生命周期和应用范围。
7. **List和Map**:List是有序的元素集合,Map是键值对的集合。`ArrayList`与`LinkedList`的区别在于查找和插入操作效率,`ArrayList`与`Vector`的区别在于线程安全。
### 四、Spring相关
1. **Spring AOP**:面向切面编程,实现横切关注点的分离,常用于日志、事务管理等,基于动态代理实现。
2. **Spring Bean作用域**:单例、原型、请求、会话、全局会话,生命周期包括初始化、活跃、销毁。
3. **Spring Boot改进**:简化Spring应用的启动和配置,自动配置、起步依赖、内嵌容器等。Spring5与Spring4的改进涉及响应式编程、WebSocket支持、错误处理等。
4. **自定义SpringBoot Starter**:定义`autoconfigure`模块配置自动配置类,`starter`模块包含依赖信息。
5. **Spring IOC**:控制反转,将对象的创建和管理交给Spring容器,提高了组件间的解耦。
6. **Spring相关原理**:包括依赖注入、动态代理、AOP、事务管理,隔离级别包括读已提交、可重复读、序列化等。
### 五、中间件篇
1. **Dubbo调用链路**:涉及服务注册、发现、路由、负载均衡、调用、超时、重试、熔断等。
2. **Dubbo负载均衡**:随机、轮询、最少活跃调用数、一致性哈希等策略。
3. **其他中间件问题**:可能涵盖RabbitMQ、Kafka、Redis、Zookeeper、MyBatis等,涉及它们的使用场景、原理和最佳实践。
以上是面试题的主要知识点,掌握这些内容将有助于理解和解答面试中遇到的相关问题。
310 浏览量
150 浏览量
2023-08-22 上传
166 浏览量
250 浏览量
未来的008
- 粉丝: 3
- 资源: 17
最新资源
- roam-themez:漫游研究CSS主题
- IPO-Market-Forecasting
- flutter_smart_course:内置的智能课程应用程序
- Co1_out_Courseoutline_
- hbase-1.2.6
- 易语言-最新版PC微信2.8.0.121 hook源码分享
- 99taxis-recruitment
- MyTerm:平面UI RS232串行端口通信实用程序,可以以十六进制或ASCII格式显示接收到的数据,从而允许您配置连接参数
- 证书生成器:Python opencv程序,单击即可生成批量证书
- Data-Science-Experiments
- kodexplorer3.2无限制版
- Image Resizer-crx插件
- json2html-bookmarks:将Firefox书签从JSON转换为HTML格式(可以在其他浏览器中导入)
- 10kb-webserver-error-Pages
- wweir.github.io:温习江湖的个人博客
- 毕业设计-BOOT客户管理系统源码(免费、无需积分)