目录
1、Spring的BeanFactory和ApplicationContext区别
1、Spring的BeanFactory和ApplicationContext区别
BeanFactory属于Spring容器相关体系的根节点接口。ApplicationContext接口继承了BeanFactory接口
BeanFactory有两个功能:创建实例、获取实例;而ApplicationContext则增加了国际化、AOP、消息发送响应机制、访问资源等
总体上说,ApplicationContext的功能更加的广泛
2、双亲委派机制解决的问题
双亲委派机制:当一个类加载器需要加载类时会首先将这个任务委托给他的父类加载器去完成,父类加载器加载不了才会交给子类加载器,注:父类加载器加载的类会被子类加载器共享,但反过来则不成立。
1、避免类的重复加载
2、防止核心类被篡改,保证核心类的安全
3、Spring Boot的优势
·spring开发一站式解决方案,快速开发,快速上手
·自动化配置
·能够很好的集成spring框架和其他第三方框架
·采用注解开发,减少xml文件的编写
总的来说就是约定大于配置
4、值传递和引用传递
5、Spring的事务在哪几种情况下会失效
1、使用new的对象会失效,在spring框架中需要使用bean
2、使用了不支持事务的数据库引擎
3、将事务注解添加到非public方法上
4、在未添加事务的方法中调用了添加事务的方法,事务也不会生效
5、异常类型错误,不是runtimeException异常则事务不生效,不会回滚
6、异常被捕捉,必须要抛出异常,事务才能生效回滚
6、JVM调优的相关命令和参数
命令:
·当cpu过高或者出现死锁,就用jstack检查问题
·当看堆里对象的情况则使用jmap检查
·查看进程及相关信息使用jps
·查看JVM运行时的状态信息使用jstat
·查看jvm参数和动态修改部分jvm参数使用jinfo
参数:
·-Xms:初始化堆大小
·-Xmx:最大堆大小
·-Xmn:新生代的内存空间大小
·-Xss:每个线程的堆栈大小
7、HashMap的key值使用String有什么好处
HashMap内部的实现是通过Key的hashCode来确定value的存储位置的,字符串是不可变的,所以在创建字符串时,其hashcode会被缓存,不需要再次计算,所以比其他对象更快。
8、Redis和MySql的数据不一致怎么办
删除缓存,在写入数据库,读取缓存,当读取不到则读取数据库然后将其写入缓存,但在读写分离的数据库中可能出现读的数据还是老数据,进而写入缓存的还是老数据。所以可以根据情况进行老数据的延迟删除(将脏数据在缓存中再删除,具体时间需要估值,不好把握)或者使用异步的方式(在更新成功后通过异步消息队列来更新,可能导致某段时间无缓存)。
9、Redis的几种部署方式
·单机模式:直接部署一台redis实例
·主从服务:部署一台redis主服务master,多台redis从服务slave,master专用于写服务,其他slave用于读
·Sentinel哨兵模式:一主二从三哨兵,哨兵主要是按照一定的频次来向主服务器发送ping命令,来确保主服务器在运作,当未接收到主服务器的PONG会默认主服务器不可用,然后按照规则选取新的主服务器。
10、MySql主从架构的实现过程
主从:master开启二进制日志并将事务操作写入,然后slave启动io线程,将事务操作写入中继日志,然后开启sql线程,将中继日志的操作在自己数据库执行。
主主:都可读写互为主备,默认一台写入,另一台为备
11、判断链表是否为环形链表
·遍历标记全链表
·快慢指针,看是否相遇
12、java的spi是什么?如何实现?
spi概念:是java提供的一种服务发现机制,允许运行时动态的加载实现某个特定接口的类。在java中是通过加载器实现的。
实现步骤:
·定义接口
·创建实现类
·配置文件:在META-INF/services/目录下创建一个以接口全限定名为命名的文件,内容为实现类的全限定名,每行一个。
·加载配置:使用serviceLoader类加载配置文件并解析出实现类
13、jpa是什么?
JPA 是一个基于O/R映射的标准规范,我们所了解的Hibernate就是它的一种。
14、Spring AOP和AspectJ的区别
AspectJ属于编译时增强,是一个完整的AOP实现,依赖特定语法和编译器在编译期间织如字节码实现,也被称为静态代理的增强;
Spring AOP属于运行时增强,仅提供了对AspectJ注解的支持,在运行时通过创建目标类和代理来实现增强,并非完整AOP,目的是为了与IOC容器整合,也被称为动态代理的增强。
15、