我遇到的Java面试题,凡是我没做出来的,或者不清晰都会往这里不停的更新
1,double转BigDecimal精度问题
1 | public static void main(String[] args) { |
2 集合
Java中的集合分为单列集合Collection和双列集合Map。
图是截取别人的,在此声明一下
我遇到的面试题是list和map的应用场景
list的使用场景
查询某一个元素复杂度是n,但是有顺序,所以放进去之后需按顺序读取出来那就使用list
map的场景:
如一个班的学生的学号与姓名的映射,每个学号对应了一个学生的姓名,学号不能重复,但是姓名可能会重复;
简答来说,就是一个数据需要以键值对来存储,并且键不重复,那么使用map
3 事务概念
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
声明式事务的流程:
在容器配置类上使用@EnableTransactionManagement注解,该注解在容器中注册了两大组件——AutoProxyRegistrar、ProxyTransactionManagementConfiguration;
AutoProxyRegistrar通过导入方式在容器中注册了InfrastructureAdvisorAutoProxyCreator,这是一个后置处理器;
ProxyTransactionManagementConfiguration本身就是一个容器配置类,它注册了transactionAdvisor(事务增强器),然后又在这个事务增强器中注入了两个属性transactionAttributeSource、transactionInterceptor;
transactionAttributeSource用于解析@Transactional注解的各种属性;
transactionInterceptor实现了MethodInterceptor,是一个拦截器链,这个拦截器链会从容器中获取事务管理器,利用事务管理器,在目标方法发生异常时执行回滚,在目标发生正常完成后提交事务;
第2步的InfrastructureAdvisorAutoProxyCreator后置处理器,会在目标对象创建完成之后将其包装为代理对象,代理对象在执行目标方法时会首先获取拦截器链,这个拦截器链就是第5步的transactionInterceptor。
以后自己看源码在详说
4 Exception是个什么东西,有什么用
这里我懵了,其实很简单
他在java里面是所有异常的基类,任何自定义的异常都要继承它,
作用在于,你判断程序某一个地方可能出现一些你能够预测到的结果时,使用异常处理机制,能够让程序正常执行
5 查询A、B表中,A表中存在B表不存在的数据
sql语句
使用 not in ,容易理解,效率低 执行时间为:1.395秒 (第一种方法亲测可用)
1 | 1 select distinct A.ID from A where A.ID not in (select ID from B) |
用 left join…on… , “B.ID isnull” 表示左连接之后在B.ID 字段为 null的记录 执行时间:0.739秒
1 | 1 select A.ID from A left join B on A.ID=B.ID where B.ID is null |
6 什么时候使用线程
不需要知道执行结果的操作使用线程,会发生阻塞的地方可以使用线程
对于处理时间短的服务或者启动频率高的要用单线程,相反用多线程!
7 eclipse和Intellij
这里不解释,每个人都有自己喜欢用的
- 本文作者: 忘忧症
- 本文链接: https://NepenthesZGW.github.io/2020/06/11/java/面试题/java面试题/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!