面试官:好,咱们开始面试。第一轮先问几个基础的Java核心知识问题。首先,Java中的数据类型分为哪几类?
王铁牛:分为基本数据类型和引用数据类型。
面试官:不错,回答正确。那基本数据类型都有哪些呢?
王铁牛:有byte、short、int、long、float、double、char、boolean。
面试官:很好。再问一个,什么是多态?
王铁牛:多态就是同一个行为具有多个不同表现形式或形态的能力。
面试官:第一轮表现不错,接下来进入第二轮,我问几个关于JUC和多线程的问题。什么是线程安全?
王铁牛:线程安全就是多线程访问时,保证数据的正确性和一致性。
面试官:那如何实现线程安全呢?
王铁牛:可以用锁,比如synchronized关键字,还有Lock接口。
面试官:线程池有哪些参数?
王铁牛:这个……好像是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler吧。回答得不是很清晰。
面试官:最后一轮,我会问一些关于框架的问题。Spring框架的核心特性有哪些?
王铁牛:Spring的核心特性就是控制反转和面向切面编程。
面试官:Spring Boot有什么优势?
王铁牛:Spring Boot简化了配置,能快速搭建项目。
面试官:MyBatis的核心组件有哪些?
王铁牛:不太清楚,瞎答一个,好像有SqlSessionFactory吧。
面试结束,整体来看,你对一些基础的Java核心知识掌握得还可以,但在JUC、多线程以及框架相关的复杂问题上回答得不是很理想。回去等通知吧。
答案:
- Java中的数据类型:Java中的数据类型分为基本数据类型和引用数据类型。基本数据类型包括byte、short、int、long、float、double、char、boolean。基本数据类型存储在栈中,其值直接存储在变量所对应的内存空间中。引用数据类型指向存储在堆中的对象,变量存储的是对象的引用。
- 多态:多态是指同一个行为具有多个不同表现形式或形态的能力。在Java中,多态通过继承和方法重写来实现。当一个子类对象调用一个被重写的方法时,会根据该对象的实际类型来决定调用哪个具体实现。
- 线程安全:线程安全是指多线程访问时,保证数据的正确性和一致性。当多个线程同时访问共享资源时,如果不采取适当的措施,可能会导致数据竞争和不一致的结果。实现线程安全可以使用锁机制,如synchronized关键字和Lock接口。
- 线程池参数:
- corePoolSize:线程池的核心线程数,当提交的任务数小于corePoolSize时,线程池会创建新的线程来执行任务。
- maximumPoolSize:线程池的最大线程数,当提交的任务数大于corePoolSize且任务队列已满时,线程池会创建新的线程来执行任务,直到线程数达到maximumPoolSize。
- keepAliveTime:线程池中非核心线程的存活时间,当线程池中的线程数大于corePoolSize时,多余的线程在空闲一段时间后会被销毁,空闲时间由keepAliveTime和unit决定。
- unit:keepAliveTime的时间单位。
- workQueue:任务队列,用于存储提交的任务,当提交的任务数大于corePoolSize时,任务会被放入任务队列中。
- threadFactory:线程工厂,用于创建线程。
- handler:拒绝策略,当线程池的线程数达到maximumPoolSize且任务队列已满时,会调用handler来处理新提交的任务。
- Spring框架的核心特性:
- 控制反转(IoC):将对象的创建和依赖关系的管理交给Spring容器,而不是在对象内部直接创建和管理依赖对象。这样可以降低对象之间的耦合度,提高代码的可维护性和可测试性。
- 面向切面编程(AOP):通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。它允许将一些通用功能(如日志记录、事务管理等)从业务逻辑中分离出来,以提高代码的复用性和可维护性。
- Spring Boot的优势:
- 简化配置:Spring Boot通过自动配置和约定大于配置的原则,极大地简化了Spring应用的配置过程,减少了大量的XML配置文件。
- 快速搭建项目:提供了各种起步依赖(Starter),可以快速集成各种常用的技术栈,如Web、数据库、缓存等,大大缩短了项目的开发周期。
- 内置Web服务器:Spring Boot内置了Tomcat等Web服务器,无需外部安装和配置,方便快捷地部署Web应用。
- 监控与管理:提供了丰富的监控和管理端点,方便对应用的运行状态进行监控和管理。
- MyBatis的核心组件:
- SqlSessionFactory:SqlSessionFactory是MyBatis的关键对象,它创建SqlSession实例,负责读取MyBatis的配置文件并构建Configuration对象,以及创建Executor、MappedStatement等核心对象。
- SqlSession:SqlSession是MyBatis执行SQL操作的主要接口,它提供了一系列方法来执行SQL语句,如selectOne、selectList、insert、update、delete等。SqlSession内部维护了一个Executor对象,用于执行SQL语句。
- Executor:Executor是MyBatis执行器,负责执行SQL语句并处理结果集。它有三种执行器类型:SimpleExecutor、ReuseExecutor、BatchExecutor,分别用于不同的执行场景。
- MappedStatement:MappedStatement是MyBatis映射语句的封装,它包含了SQL语句、参数映射、结果映射等信息,是MyBatis执行SQL操作的核心对象之一。
- ParameterHandler:ParameterHandler负责处理SQL语句中的参数,将Java对象转换为JDBC参数。
- ResultSetHandler:ResultSetHandler负责处理SQL查询的结果集,将结果集转换为Java对象。