Java面试深度解析:基础、Spring与多线程

需积分: 10 2 下载量 191 浏览量 更新于2024-09-08 收藏 12KB TXT 举报
"常见_JAVA面试问题" Java面试问题涵盖了基础到高级的多个方面,包括语言特性、数据结构、内存管理、框架应用以及多线程等核心知识点。以下是对这些问题的详细解答: 一、Java基础和高级 1. String类是final的,因为它代表不可变的对象,这样可以保证字符串的安全性和多线程下的正确性。一旦创建,其内容就不能修改,提高性能,同时也方便垃圾回收。 2. HashMap基于哈希表实现,底层是数组+链表/红黑树的数据结构。插入、查找和删除的时间复杂度在平均情况下都是O(1)。 3. Class.forName()和ClassLoader的主要区别在于,前者是静态方法,用于加载并初始化指定类,而后者是动态加载类,可以自定义类的加载方式。 4. Session和Cookie是HTTP会话管理机制。Session存储在服务器端,安全性较高,但消耗服务器资源;Cookie存储在客户端,易被篡改,适用于小量数据存储。Session生命周期通常为30分钟,多服务部署时需考虑会话复制或集中式会话管理。 5. Java的队列有ArrayDeque、LinkedList、PriorityQueue等,不同队列在插入、查找、删除操作上效率各异,例如ArrayDeque适合快速插入和删除两端元素,PriorityQueue按优先级排序。 6. Java内存模型JMM包括堆、栈、方法区、本地方法栈和程序计数器,GC算法有标记-清除、复制、标记-整理、分代收集等,每种算法各有优缺点。 7. Java 7引入了try-with-resources,Java 8引入了lambda表达式、方法引用来简化代码,还增加了Stream API等新特性。 8. 数组操作效率:从开头和结尾开始的插入和删除效率较高,链表反之。查找效率数组和链表接近,取决于索引位置。在链表中间插入、查找、删除效率较低。 9. 使用jmap和jstack工具可以分析内存泄漏和线程状态,帮助定位问题。 二、Spring框架 1. Spring框架依赖的核心jar包包括spring-core、spring-context、spring-beans等,分别对应Spring的基础功能、上下文支持和bean管理。 2. SpringMVC基于Model-View-Controller设计模式,处理HTTP请求,注解如@Controller、@RequestMapping等用于简化配置。 3. beanFactory和ApplicationContext都是Spring的容器,前者更轻量级,不支持AOP和MessageSource,后者则提供更全面的功能。 4. Spring注入方式包括构造器注入、setter注入、field注入和接口注入。 5. Spring事务管理可通过编程式和声明式实现,声明式事务管理基于AOP。 6. Spring的IOC(控制反转)通过依赖注入实现,AOP(面向切面编程)用于横切关注点的分离。 7. 循环注入可能导致无限递归,需谨慎处理。 8. SpringAOP实现原理基于代理模式,IOC通过bean的实例化和依赖注入来工作。 9. Spring的事务隔离级别包括读未提交、读已提交、可重复读、串行化,实现基于数据库事务和JDBC事务管理。 10. Struts1和Struts2是两种不同的MVC框架,Struts2更现代,支持更多拦截器和注解。 三、Java多线程 1. 调用start()方法启动线程,执行run()方法;直接调用run()方法是在当前线程中执行,不会创建新线程。 2. 常见线程池模式有FixedThreadPool、SingleThreadExecutor、CachedThreadPool等,适用于不同场景,如FixedThreadPool用于固定数量的任务,CachedThreadPool用于大量短生命周期任务。 3. newFixedThreadPool若线程数达到最大,后续任务会被放入阻塞队列等待。 以上只是简要解答,深入理解还需要结合具体代码实践和原理分析。