面试题.05

1. 介绍一下java的并发问题,以及java是通过什么去解决这个并发问题的

Java 的并发问题涉及多个线程同时访问和修改共享资源,可能导致数据不一致或程序行为异常。主要并发问题包括:

竞态条件:多个线程同时访问和修改共享变量,导致不一致的结果。可以通过加锁解决,但是加锁又会引入新的问题。

死锁:两个或更多线程互相等待对方释放资源,导致程序停滞。需要在编码层面解决。

可见性问题:Java内存模型给线程引入了工作内存,一个线程更新了某个共享变量的值时,其他线程可能无法立即看到这个更新,导致程序出现不可预测的行为,可以通过volitile关键字,或者通过synchronized同步锁的方式解决。

2. 介绍一下java的反射是什么,使用场景是什么,反射的底层是怎么实现的

Java 的反射机制允许在运行时获取类的信息、创建对象、调用方法和访问字段。

使用场景

  1. 动态对象创建:根据运行时的信息动态创建对象。
  2. 框架设计:许多框架如 Spring使用反射来实现依赖注入。
  3. 测试:在测试框架中,可以通过反射访问私有字段和方法。

反射的底层实现依赖于 JVM 提供的元数据和动态加载机制。具体来说:

  1. 类加载器:JVM 使用类加载器(如 ClassLoader)动态加载类的字节码,并将其解析为 Class 对象。
  2. 元数据:类的结构信息(如字段、方法等)存储在方法区或运行时常量池中。
  3. 反射 API:java.lang.reflect 包提供了对这些元数据的访问接口。通过 Class 对象,程序可以获取类的信息,并使用 Field、Method、Constructor 等类来操作字段、调用方法和创建对象。

3. aop是怎么进行切入点切入的

  1. 定义切入点:切入点表达式(如基于方法名、参数、注解等)确定在哪些方法上应用通知。

  2. 应用通知:通知是切入点的实际实现,可以是前置通知、后置通知、异常通知等,定义了在切入点匹配的方法执行前后或异常时要执行的逻辑。

  3. 织入:AOP 框架使用代理(基于动态代理或字节码增强)将切面织入到目标对象中。织入过程将切入点和通知代码合成到目标类中,从而实现增强功能。

4. 介绍一下spring,为什么要用到spring,spring带来了什么便利,没有spring该怎么办

Spring 是一个开源的 Java 框架,旨在简化企业级 Java 应用程序的开发。核心是IoC以及AOP

使用Spring可以简化开发:

  1. 解耦:通过依赖注入,Spring 解耦了应用程序中的各个组件,使得它们之间的依赖关系更加清晰,便于测试和维护。
  2. 增强的可测试性:依赖注入和面向切面编程使得单元测试更加容易,能够隔离测试环境中的各个组件。
  3. 简化事务管理:Spring 提供声明式事务管理,减少了繁琐的事务控制代码。

如果没有 Spring 或其他类似的框架,可能会面临以下挑战:

  1. 复杂的依赖管理:需要手动创建和管理对象的依赖关系,代码中会有大量的工厂模式和手动配置代码。
  2. 难以进行事务管理:需要编写大量的低级别的代码来处理事务,容易出错且难以维护。
  3. 缺乏一致性:在不同的层(如数据访问、业务逻辑、Web 层)中使用不同的技术和编程模型,导致系统的不一致性。
  4. 难以测试:由于紧耦合的设计,单元测试和集成测试变得复杂和困难。
  5. 重复代码:横切关注点(如日志、缓存、性能监控)需要在每个相关的地方重复实现。

5. springboot在spring的基础上做了什么事情

1. 自动配置
自动配置(Auto-Configuration) 是 Spring Boot 的核心特性之一。它试图根据项目的依赖和配置,自动配置应用程序所需的 Bean。例如,如果你的项目中包含了数据库驱动的依赖,Spring Boot 会自动配置一个数据源,并且可以根据配置文件中的属性来设置数据源的参数。这样可以大大减少手动配置的工作量。

3. 内嵌服务器
内嵌服务器 允许 Spring Boot 应用程序内嵌 Tomcat、Jetty 或 Undertow 服务器,这意味着你不需要在开发或生产环境中单独部署 WAR 文件。Spring Boot 应用程序可以作为独立的 Java 应用程序运行,内嵌服务器会在应用启动时自动启动,这简化了部署过程。

4. 简化配置
Spring Boot 提供了 application.properties 或 application.yml 配置文件,简化了应用程序的配置。你可以在这些配置文件中设置各种应用程序参数,包括数据库连接、端口号、日志级别等。此外,Spring Boot 支持外部化配置,允许你在不同的环境中使用不同的配置文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ting-yu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值