Java面试深度解析:基础、Spring与多线程
需积分: 10 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若线程数达到最大,后续任务会被放入阻塞队列等待。
以上只是简要解答,深入理解还需要结合具体代码实践和原理分析。
2023-11-29 上传
2022-09-20 上传
2021-10-02 上传
2022-09-22 上传
2022-09-15 上传
2022-09-21 上传
2022-09-23 上传
2022-09-23 上传
wt520it
- 粉丝: 68
- 资源: 1
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器