复习总结 2023.5.20

补充:出现OutOfMemoryException的情况及解决办法
1、一次性申请的对象太多:更改申请对象的数量
2、内存资源耗尽未释放:找到未释放的对象进行释放,池化思想
3、本身资源就不够:通过jmap -heap命令查看堆信息

一、Integer和Int的区别?

1、考察面向对象的深入理解,侧重从封装类型的特性和功能上去回答
简单列举三点:作为成员变量来说,integer的默认值是null,int的默认值是0;integer存储在堆内存中,而int类型直接存储在栈中;integer是一个对象类型,它封装了很多方法和属性,使我们在使用时更加灵活,jdk1.5之后支持integer直接定义一个对象

设计封装类型的原因:因为Java本身就是面向对象的语言,一切操作以对象为基础

二、如何提高接口的性能?

1、如果接口中有操作数据库层面的代码,可以对SQL进行优化,提升IO效率
2、如果存在频繁访问数据库的热点数据,可以采用缓存机制
3、如果涉及远程调用,可以采用异步方式避免同步阻塞

三、concurrentHashMap中的key为什么不可以为null?

从concurrentHashMap的设计角度去回答:它的put方法中定义了如果key或者value为null,则会抛出一个空指针异常,因为当使用get(key)方法来获取对应的value时,返回如果为null,那么我们不能判断是key存在但是value为null,还是key根本就不存在,那么就会造成线程安全问题。根本原因就是concurrentHashMap它是一个并发安全的集合,为了避免在多线程并发环境下的歧义问题

四、线程池如何知道一个线程的任务是否执行完成?

当我们把一个任务交给线程池去执行的时候,线程池会调度工作线程去执行任务的run()方法,当run()方法正常执行结束返回后,就代表这个任务执行完成了

五、MyBatis是如何进行分页的?

逻辑分页:先查询出所有的数据缓存到内存中,再根据业务逻辑在内存中筛选出合适的数据,比如拦截执行器方法、拦截参数的处理、拦截结果集的处理。通过这种方式可以提供统一的处理机制,无需再单独维互分页的相关功能
1、使用数据库提供的分页关键字,select时传递需要展示的页面以及每页的条数
2、使用MyBatis提供的RowBounds对象,实现内存级别分页
3、基于MyBatis里面的interceptor拦截器,在select语句执行之前动态拼接分页关键字

六、Redis和MySQL如何保证数据一致性?

一般来说,Redis是用来实现应用和数据库之间的一个读操作的缓存层,是为了减少数据库的IO,同时还可以提高数据IO的性能。当应用程序需要读取某个数据时,首先会去Redis中加载,如果命中就直接返回。如果没有命中就去数据库中查询,再将数据缓存到Redis中。
那么问题就是一份数据同时保存在Redis和MySql中,当数据发生变化时,如何保证Redis和MySql中数据的一致性?更新操作是有先后顺序的。
1、先更新数据库,再更新缓存:如果数据库更新失败,会导致数据库和缓存的数据不一致
2、先删除缓存,再更新数据库:理想情况下,当应用下次访问Redis的时候,发现Redis中数据时空的,那么就会从数据库中加载,然后保存到Redis中。理论情况下数据是一致的,但是当其他线程来访问时,还是可能会存在数据不一致的情况,就需要结合具体业务场景进行分析

七、spring中@Conditional注解有什么用?

为Bean的装载操作提供一个判断条件,只有满足条件时,spring的Bean才会被转载到IOC容器中。这个条件是我们自己可以来实现的,通过实现Condition这个接口并且重写里面的matches()方法实现自定义的逻辑,该注解增加了spring Bean的装配灵活性

八、spring中@Resource和@Autowired的区别?

1、@Autowired是spring提供的一个默认根据类型实现Bean的依赖注入,该注解有一个required属性,默认值为true,在应用启动的时候会强制注入这个Bean,但是如果IOC中没有这个Bean,那么就会报错
2、@Resource是JDK提供的注解,使用方式和@Autowired注解一样,最大的区别是在于@Resource支持Name和Type两种方式进行注入,如果没有配置Name和Type的情况下,默认会先根据Name进行匹配,如果失败就根据Type进行匹配,两个都没有匹配到的话就会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个射手座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值