一些最近学习的面试题

1.简述IOC以及它的主要实现方式:

IOC(Inversion of Control,控制反转)是一种软件设计原则,用于实现依赖关系的解耦和提高代码的灵活性。它的核心思想是将控制权从应用程序中转移到框架或容器中,从而使应用程序更加模块化和可测试。

主要的IOC实现方式有以下几种:

  1. 依赖注入(DI,Dependency Injection)

    • 构造函数注入:依赖对象通过构造函数传递给类。适用于必须提供依赖的情况。
    • 属性注入:依赖对象通过公共属性设置。适用于可选依赖。
    • 方法注入:依赖对象通过方法参数传递。适用于需要在方法调用时注入依赖的场景。
  2. 服务定位器(Service Locator)

    • 通过一个专门的服务定位器对象来获取所需的依赖。服务定位器提供了一种集中管理依赖的方式,但可能会导致代码对服务定位器的强耦合。
  3. 事件驱动(Event-Driven)

    • 使用事件和监听器模式来实现控制反转。通过发布和订阅事件来管理对象之间的依赖关系。
  4. 工厂模式(Factory Pattern)

    • 通过工厂对象创建和提供依赖对象,工厂模式可以帮助封装对象创建逻辑,减少对具体类的依赖。

在实际应用中,依赖注入是最常见的IOC实现方式,因为它通过将依赖关系注入到对象中,使得代码更加灵活和易于测试。各种依赖注入框架(如Spring、Guice、Dagger等)也提供了丰富的功能来简化依赖注入的过程。

2.Spring常用的注解有哪些?都有什么用?

Spring框架提供了多种注解,用于简化配置和管理Spring应用程序中的各种组件。以下是一些常用的Spring注解及其用途:

核心注解

  1. @Component

    • 用于标记一个普通的Spring组件类,使其成为Spring容器中的一个Bean。通常用于自定义的组件类。
  2. @Service

    • 继承自@Component,用于标记服务层的类,表明这个类的主要职责是提供服务。
  3. @Repository

    • 继承自@Component,用于标记数据访问层的类,表明这个类负责与数据库进行交互,并处理数据库相关的异常。
  4. @Controller

    • 继承自@Component,用于标记Web控制器类,处理HTTP请求并返回视图名称。
  5. @RestController

    • 组合注解(包含@Controller和@ResponseBody),用于RESTful Web服务控制器类,自动将返回值转换为JSON或XML。
  6. @Configuration

    • 标记一个类为配置类,Spring会从中加载Bean定义。通常与@Bean注解一起使用,用于替代XML配置文件。
  7. @Bean

    • 用于方法上,表示该方法将返回一个Spring管理的Bean。与@Configuration注解一起使用。

注入相关注解

  1. @Autowired

    • 自动注入依赖。可以用于构造函数、字段、方法上,Spring会根据类型自动注入相应的Bean。
  2. @Inject

    • 与@Autowired类似,用于自动注入依赖。是JSR-330规范的一部分。
  3. @Resource

    • 用于按名称自动注入依赖。默认按名称注入,如果找不到相应的Bean则按类型注入。
  4. @Qualifier

    • 配合@Autowired或@Inject使用,用于指定注入的Bean的名称,解决依赖注入中的歧义问题。

事务管理注解

  1. @Transactional
    • 用于声明事务管理,指定方法或类上所有方法在一个事务中执行。

Spring Boot注解

  1. @SpringBootApplication

    • 组合注解(包括@Configuration、@EnableAutoConfiguration和@ComponentScan),用于标记Spring Boot应用的启动类。
  2. @EnableAutoConfiguration

    • 启用Spring Boot的自动配置功能,Spring Boot会根据类路径中的依赖自动配置应用程序的Bean。
  3. @ComponentScan

    • 指定要扫描的包路径,以便Spring找到并注册Bean。
  4. @ConfigurationProperties

    • 绑定外部配置(如application.properties或application.yml)到一个Bean的属性中。

Web相关注解

  1. @RequestMapping

    • 用于映射HTTP请求到控制器的方法上。可以指定请求的URL、请求方法等。
  2. @GetMapping

    • 用于处理HTTP GET请求,是@RequestMapping的快捷方式。
  3. @PostMapping

    • 用于处理HTTP POST请求,是@RequestMapping的快捷方式。
  4. @PutMapping

    • 用于处理HTTP PUT请求,是@RequestMapping的快捷方式。
  5. @DeleteMapping

    • 用于处理HTTP DELETE请求,是@RequestMapping的快捷方式。
  6. @PathVariable

    • 用于提取URL路径中的变量。
  7. @RequestParam

    • 用于提取HTTP请求中的查询参数。
  8. @ResponseBody

    • 将方法的返回值直接写入HTTP响应体中,通常与@RestController一起使用。

AOP相关注解

  1. @Aspect

    • 标记一个类为切面,Spring会将其识别为AOP切面。
  2. @Before

    • 指定切面方法在目标方法执行前运行。
  3. @After

    • 指定切面方法在目标方法执行后运行。
  4. @Around

    • 指定切面方法在目标方法执行前后运行,允许对方法调用进行增强。
  5. @AfterReturning

    • 指定切面方法在目标方法执行成功后运行,并允许获取方法的返回值。
  6. @AfterThrowing

    • 指定切面方法在目标方法抛出异常后运行,并允许获取异常信息。

这些注解帮助开发者简化Spring应用程序的配置和管理,提高开发效率和代码的可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值