Java面试深度解析:并发、线程安全与Spring核心知识点

需积分: 7 0 下载量 95 浏览量 更新于2024-09-08 收藏 107KB PDF 举报
"Java面试题整理" 这是一份2017年的Java面试题集合,涵盖了多方面的Java技术,包括并发、同步机制、线程池、Tomcat优化、Spring框架和Spring Boot的应用,以及MySQL数据库操作等内容。接下来,我们将详细讨论这些知识点。 1. **幂等性**:幂等是指一个操作多次执行结果相同,不会对系统状态造成改变。在网络请求中,如果需要确保请求只被处理一次,例如支付系统,就需要考虑幂等性。解决幂等问题通常可以通过唯一标识符跟踪请求,确保重复请求不会重复处理。 2. **并发问题**:在读多写少的场景下,可以优先考虑使用读写锁(ReentrantReadWriteLock),允许多个读线程同时访问,但写线程独占资源。 3. **AQS(AbstractQueuedSynchronizer)**:Java并发库中的核心组件,用于构建锁和其他同步组件,如ReentrantLock和Semaphore。 4. **线程安全**:除了`synchronized`,还可以使用`volatile`关键字,原子类(Atomic*系列)或使用`java.util.concurrent`包中的工具类来保证线程安全。 5. **线程池行为**:当线程池满且队列也满时,新的任务会被拒绝,可以通过设置线程池的拒绝策略来处理这种情况。 6. **Tomcat优化**:通常会调整最大连接数、线程池大小、超时时间等参数,以适应应用负载。 7. **synchronized锁定对象**:它锁定的是对象的监视器,字节码中通过monitorenter和monitorexit指令体现。在内存模型中,表现为锁住对象头的一部分。 8. **wait/notify**:它们必须在`synchronized`代码块或方法中使用,以防止并发问题,确保正确唤醒等待的线程。 9. **ExecutorService使用**:通常根据项目需求创建单例或按需创建,使用它可以更好地管理和控制线程池,提高系统性能。 10. **Spring AOP**:用于实现面向切面编程,如日志记录、事务管理等。使用`@Aspect`和`@Around`、`@Before`等注解定义切面和通知。 11. **Spring Autowire**:通过类型或名称自动装配依赖,可配合`@Qualifier`指定具体实现。 12. **Spring @Transactional**:用于声明式事务管理,异常会导致默认回滚,可通过`rollbackFor`和`noRollbackFor`控制回滚规则。 13. **Spring Bean初始化**:可以使用`@PostConstruct`注解标记方法,在Bean实例化后执行。 14. **Spring Boot无容器运行**:它集成了嵌入式Servlet容器(如Tomcat),可以直接运行主类启动HTTP服务。 15. **Spring Boot自定义配置**:通过添加`application-{profile}.properties`或YAML文件,根据环境加载不同配置。 16. **Spring MVC请求映射**:`@RequestMapping`可以指定HTTP方法,如`@GetMapping`和`@PostMapping`。 17. **JSON输出**:使用`@ResponseBody`或配置MessageConverter,将对象转换为JSON响应。 18. **MySQL批量插入**:可以使用PreparedStatement的批处理,或者MyBatis的批处理功能,提高插入效率。 19. **查询优化**:首先检查索引是否合理,然后优化SQL语句,避免全表扫描,减少JOIN操作。 以上是Java面试题中涉及的关键知识点,理解和掌握这些内容对于面试和实际开发都至关重要。