BAT面试深度解析:Java多线程、JVM与Spring核心技术

0 下载量 28 浏览量 更新于2024-06-21 收藏 1.14MB DOCX 举报
"这是一份关于BAT(百度、阿里巴巴、腾讯)面试题的汇总,涵盖了Java多线程、JVM、Java扩展以及Spring框架等多个核心技术领域的深入问题和详解,旨在帮助求职者准备大厂面试,提升技术水平。" 1. **Java多线程** - 线程池的创建是为了管理线程,减少线程创建和销毁的开销,提高系统效率。创建线程池的方式有`Executors`工厂方法和自定义`ThreadPoolExecutor`。 - 线程生命周期包括新建、就绪、运行、阻塞和死亡,僵死进程是已终止但未被垃圾回收的线程。 - 线程安全问题可以通过同步机制(如`synchronized`、`volatile`、`Lock`等)解决,确保并发访问的一致性和可见性。 - `volatile`保证了变量的可见性,但不保证原子性;`ThreadLocal`用于线程局部变量,避免数据冲突,但如果过度使用可能导致内存泄漏,当线程池中的线程数量过多且长时间不释放,可能出现`OOM`。 2. **JVM相关** - JVM内存模型包括堆、栈、方法区等,GC(垃圾收集)主要负责内存的自动管理。 - GC分为Minor GC(年轻代)和Full GC(老年代),Full GC一般在堆空间不足、手动触发、System.gc()调用等情况触发,使用不同算法如复制、标记-清除、标记-整理等。 - 类加载器有bootstrap classloader、extension classloader、app classloader等,双亲委派机制保证了类加载的唯一性,但在特殊场景下可能需要打破这种模型。 - JVM调优涉及内存参数设置(如-Xms、-Xmx等)、垃圾收集器选择、并发参数调整等,以优化性能和避免内存溢出。 3. **Java扩展篇** - 红黑树是一种自平衡二叉查找树,常用于`Map`实现,如`TreeMap`和`ConcurrentSkipListMap`,保证了插入、删除、查找操作的时间复杂度。 - NIO(非阻塞I/O)适用于高并发、低延迟的网络通信,Java 9对其进行了改进,增加了更多的通道和缓冲区类型。 - HashMap内部使用数组+链表/红黑树实现,其并发问题通常通过`ConcurrentHashMap`来解决,而`HashTable`则不推荐在多线程环境中使用。 - 反射允许程序在运行时动态获取类的信息并调用方法,虽然性能较低,但在配置、插件、动态代理等场景中有重要作用。 - 自定义注解可提供元数据,用于代码注释、编译时检查或运行时处理。 4. **Spring相关** - Spring AOP(面向切面编程)用于添加日志、事务管理等功能,实现代码解耦。 - SpringBean的作用域包括单例、原型、会话、请求等,生命周期包括初始化、使用、销毁三个阶段。 - SpringBoot简化了Spring应用的配置和启动,Spring5相比Spring4增强了反应式编程支持、HTTP/2支持等。 - 自定义SpringBoot Starter可方便地打包和复用功能组件。 这份面试题汇总详细涵盖了多个技术领域的重要知识点,对于准备大厂面试的开发者来说,不仅能够检验自己的技术水平,还能通过深入学习来提升自己的专业能力。