面试题总结

本文整理了Java面试中常见的技术问题,包括索引优化策略、Spring的IOC和AOP原理、数据溢出处理、线程安全与并发控制等。通过对创建组合索引的决策、增加索引的影响分析、数据库优化及Spring框架的理解,深入探讨了Java开发中的关键知识点。同时,解释了动态代理的实现与Java原生代理与CGLIB的区别,以及Mybatis的优缺点和使用场景。最后,对比了悲观锁与乐观锁的概念,以及索引实现的基本原理。
摘要由CSDN通过智能技术生成

1、创建组合索引如何决定哪个字段在前,哪个字段在后?
根据业务需求,where子句中使用最频繁的一列放在最左边。
择性高的字段放前面,选择性越高,查询性能越好

2、增加索引前,如何知道增加索引对SQL有好处?
果增加索引的列,选择性很高,则增加索引对查询的性能是有提高的,反之则不然。
符合条件数据量少的,使用索引效率会高出很多

3、当一个表数据已经占满服务器磁盘时,应该如何做?

4、Spring IOC原理,注入的原理,如何创建出一个实例对象。
IOC的原理:控制反转,将原本需要我们手动创建实例的权利交给Spring去管理,通过,读取Spring的配置文件,注入相应的属性,得到一个Bean,在通过反射机制或者CGLIB,产生我们需要的实例对象。这就是IOC的原理。
注入的原理:依赖注入,表示运行时注入依赖对象。注入包含两部分,一部分是生成Bean所包含的java对象实例,一份部分是将Bean的属性依赖关系注入Bean实例对象中并设置好。产生Java的实例对象是通过通过反射机制或者CGLIB,将Bean的属性依赖关系注入到实例对象中,这个过程分了两中,一种是不需要类型转换不需要解析属性值的属性直接设置到实例对象中,第二种是需要进行类型转换时,如对其他对象的引用等,首先需要解析属性值,然后对解析后的属性值进行设置。
反射机制如何创建一个实例对象:1)通过Class类的forName方法,加载目标类的字节码,返回一个Class对象,代表的是一个字节码文件。2)调用这个类对象的方法newInstance()(注意:这里的这个newInstance方法默认调用默认的构造方法即调用无参的构造方法, 一旦构造方法有参数时,此方法行不通,需要使用构造方法的对象的相关方法来 实例化),返回的是Object对象。3)强制转型为目标类型的对象。
CGLIB如何创建一个实例对象:动态生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。它比使用java反射的JDK动态代理要快。
CGLIB底层:使用字节码处理框架ASM,来转换字节码并生成新的类。

5、Spring AOP原理。
简单地说,就是动态代理。通过动态代理的方式,增强我们目标类的功能,为程序添加统一功能,集中解决一些公共问题,比如说事务处理,权限管理,缓存等。
AOP的实现有以下几个步骤:
根据配置解析出切面
生成AOP的代理对象,给目标对象产生一个代理类和一个实例对象,根据解析的切面,生成通知链设置到代理对象,在代理对象中会回调通知链。
将AOP的代理对象注册到容器中,当请求目标bean时,容器将返回一个代理对象。

6、动态代理原理。
动态代理 原理就是通过jdk自带的接口,动态地生成目标类的子类,以达到增强这个类的某些某些功能。比如,Person类,自带一个eat()吃饭的方法,那我们要让这个类实现吃饭前洗手的功能,那么,就要通过代理的方式,生成一个Person的代理类,在调用eat方法前,先执行一次wash()方法,就达到了我们的目的。
动态代理的实现:1)动态代理需要我们去实现一个InvocationHandler接口;2)重写invoke()方法;3)在invoke()方法中,可以写我们的逻辑,如上面的里面,判断方法名是否等于eat,是,则调用wash()方法,否则继续,最后回调invoke()方法,相当于执行原来的函数eat。
动态代理有一个强制性要求,就是被代理的类(source)必须实现了某一个接口,或者本身就是接口

7、JAVA原生的代理和CGLIB的区别,CGLIB是如何产生一个类的,能否代理接口?
区别
1)java原生的代理不需要额外的jar包支持,而CGLIB依赖CGLib的类库。
2)Java的原生动态代理通过实现InvocationHandler接口,重写invoke方法实现,而CGlib是通过字节码技术,生成的代理类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值