java面试题集

1.什么是反射?反射的作用?

java反射,就是在运行状态中

  • 获取任意类的名称,包的信息,所有属性,方法,注解,类型,类加载器、modifiers,
    父类,现实接口等
  • 获取任意对象的属性,并且能改变对象的属性
  • 调用任意对象的方法
  • 判断任意一个对象所属的类
  • 实例化任意一个类的对象

java的动态就体现在反射。通过反射我们可以实现动态装备,
减低代码的耦合度;动态代理等。
不过反射的过度使用会严重消耗系统资源

JDK中java.lang.Class类,就是为了实现反射提供的核心类之一。

一个JVM中一种Class只会被加载一次。

2.动态代理是什么?应用场景?

动态代理:在运行时,创建目标类,并可以调用扩展目标类的方法。
JAVA中实现动态的方式:

  • JDK中的动态代理
  • java类库CGLib

应用场景:

  • 统计每个API的请求耗时
  • 统一的日志输出
  • 校验被调用的API是否已经登录和权限鉴定
  • Spring的aop功能模块就是采用动态的机制来实现切面编程

3.什么是AOP

AOP:Aspect Oriented Programming,面向切面编程
通过预编译和运行期动态代理实现程序功能的统一维护。
在Spring框架中,AOP是一个很重要的功能。

AOP利用一种称横切的技术,剖开对象的封装,并将影响多个类的公共行为封装到一个可重用的模块,组成一个切面,即Aspect。
“切面”就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统重复的代码,减低模块间的耦合度,利于可操作性和可维护性。

实现AOP的方式,主要有两大类:

  • 采用动态代理技术,利用拦截方法的方式,对该方法进行装饰,以取代原有对象行为的执行;
  • 采用静态织入的方式,引入特定的语法创建“切面”,从而使得编译器可以在编译期间织入有关的“切面”代码。

AOP的相关概念
切面(Aspect)、连接点(Joinpoint)、通知(Advice)、切点(Pointcut)、
引入(Introduction)、目标对象(Target Object)、AOP代理(AOP Proxy)、
织入(Weaving)

spring框架中可以通过XML配置和注释去使用AOP功能

详情可以参考:

4.事务的三个并发问题

事务的并发问题是指多个用户对同一数据进行操作时出现的问题,最常见的有脏读,不可重复读,幻读

  • 脏读:事务A读取了事务B更新但未提交的数据,然后事务B出现异常执行回滚操作,那么此时事务A读取的数据就是脏数据。如:在员工工资表中,张三的salary为3000,事务B更新张三的salary为5000,但并未提交;同时事务A正在读取张三的salary并且读取到的数据为5000;突然事务B出现异常执行回滚为3000,所以事务A读取的5000即为脏数据。这个问题主要是修改数据后未提交引起。
  • 不可重复读:事务A多次读取同一数据,事务B在事务A读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据时,结果不一致。例如:事务A读取到张三的salary为3000,但事务A还没有提交;同时事务B把张三的salary改为5000并且提交这时事务A再次读取到张三的salary为5000。在事务A这一事务中前后读取到的数据不一致,即原始读取不可重复。这个问题主要是修改数据并提交引起
  • 幻读:事务A原先读取的数据记录数为a,但此时事务B新插入或者删除一条数据 ,此时事务A读取到的数据记录数为a+1或者a-1。例如:员工表中salary为3000的有10位员工,事务A读取到的也是10位;此时,事务B新插入或者删除一位salary为3000的新员工,事务A再次读取到的记录数为11或9,相当于产生幻觉。这个问题主要是增加或删除数据引起
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值