Spring核心技术栈需要掌握的东西

1.Container,Dependency,AOP和IOC

1.1 Container

  • 什么是DI(dependency injection)以及有什么优点?
  • 什么是一个接口?他们在Java中使用有什么优点?
  • 为什么推荐使用Spring Beans?
  • application-context 应用程序上下文是什么意思?
  • 如何创建一个新的ApplicationContext 实例?
  • 能否在ApplicationContext中描述Spring Bean的生命周期
  • 如何在集成测试中创建ApplicationContext?
  • 关闭 application context (应用程序上下文)的首选方法是什么? Spring Boot是否是这样做的?

1.2 Dependency

  • 如何使用Java Configuration 实现依赖注入?
  • 如何使用@Autowired 注解实现依赖注入?
  • 能否描述下 Component scanning 组件扫描?
  • 能否描述下Spring Beans 的范围?默认的范围是什么?
  • Beans 默认是懒加载还是优先加载? 如何改变这种行为?
  • 什么是property?如何使用 @PropertySource?
  • BeanFactoryPostProcessor 是什么?它是用来做什么的? 什么时候开始调用?
  • 为什么要定义静态@Bean方法?
  • ProperySourcesPlaceholderConfigurer 是用来干什么的?
  • BeanPostProcessor 是什么?它和BeanFactoryPostProcessor 有什么不同?它们可以做什么?什么时候调用?
  • 什么是初始化方法?在Spring Bean 中如何声明它?
  • 什么是销毁方法,如何声明它和什么时候它会被调用?
  • 考虑如何启用JSR-250 注解,比如@PostConstruct 和@PreDestroy ,它们什么时候/如何被调用?
  • 您还可以如何为Spring bean定义初始化或销毁方法?
  • component-scanning组件扫描是干啥的?
  • @Autowired 注解作用到字段注入,构造注入和方法注入,有什么不同?
  • 如果想对私有的成员字段注入一些东西,该怎么做?这对测试有什么影响?
  • @Qualifier注解如何补充@Autowired的使用?
  • 什么是代理对象,Spring可以创建两种不同类型的代理?
  • 这些代理(每种类型)的局限性是什么?
  • 代理对象的功能是什么,缺点在哪里?
  • @Bean 注解是干什么的?
  • 如果仅使用@Bean,默认的bean ID是什么? 您如何覆盖它?
  • 为什么不允许使用@Configuration 注解作用在一个final 类上?
  • 如何让 拥有@Configuration注解的类支持单例bean?
  • 为什么@Bean 注解方法也不能是final 的?
  • 如何配置profiles文件? 有哪些可能有用的用例?
  • @Bean和@Profile 可以一起使用吗?
  • @Component 和 @Profile 可以一起使用么?
  • 可以有多少个Profiles 文件?
  • 如何将scalar/literal (标量/文字)值注入Spring Bean
  • @Value 注解是用来做什么的?
  • 什么是Spring Expression Language(简称SpEL)
  • Spring 的抽象的 Environment是什么?
  • Environment中的properties 从何而来–有许多来源属性 如果不确定,请检查文档。 Spring Boot增加了更多。
    -我们可以使用SpEL引用什么?
  • @Value表达式中的$和#有什么区别?

1.3 AOP 面向切面编程

  • AOP的概念是什么?它解决什么问题?跨域需要注意什么?
  • 列举三个典型的切面的注意事项
  • 如果您不通过AOP解决跨域问题,会出现哪两个问题?
  • 什么是pointcut(切入点),join point(连接点),advice(方面),weaving(编织)?
  • Spring如何解决跨域问题?
  • 两种代理类型有哪些局限性?
  • 使用Spring AOP必须代理Spring bean方法什么可见性?
  • Spring支持多少种建议类型,可以给每个命名吗?
  • 他们的用途是什么?
  • 如果您想尝试捕获异常,可以使用哪两个建议?
  • 您需要做什么才能启用@Aspect注解的检测?
  • @EnableAspectJAutoProxy注解是做什么的?
  • 如果显示了切入点表达式,您能理解他们吗?
  • 例如,在课程中,我们在Spring Beans上匹配了getter方法,那么正确的切入点表达式是匹配getter和setter方法?
  • JointPoint参数用于什么?
  • 什么是ProceedingJoinPoint?什么时候使用?

2. Data Management:JDBC,Transactions

  • 已检查和未检查的异常之间有什么区别?
  • 为什么Spring更喜欢未检查的异常?
  • 什么是数据访问异常层次结构?
  • 如何在Spring中配置数据源? 哪个bean对开发/测试数据库非常有用?
  • 什么是模板设计模式,什么是JDBC模板?
  • 什么是回调? 可以使用的三个JdbcTemplate回调接口是什么有疑问吗? 每个都有什么用? (您不必记住界面 名称,但如果您在代码示例中看到它们,则应该知道它们的作用。)
  • 您可以使用JDBC模板执行普通的SQL语句吗?
  • 对于每种方法,JDBC模板何时获取(并释放)连接 每个模板调用一次还是一次? 为什么?
  • JdbcTemplate如何支持通用查询? 它如何返回对象以及列表/对象图?
  • 什么是事务? 本地事务和全局事务有什么区别?
  • 事务是否是跨域的关注点? Spring如何实现?
  • 您将如何在Spring中定义事务?
  • @Transactional是做什么的? 什么是PlatformTransactionManager?
  • JDBC模板是否可以参与已存在的事务?
  • 什么是事务隔离级别? 我们有多少,如何定制?
  • @EnableTransactionManagement 注解是做什么的?
  • 事务传递是什么意思?
  • 如果一个@Transactional带注解的方法在同一对象实例上调用另一个@Transactional带注解的方法会发生什么?
  • 在哪里可以使用@Transactional 注解? 如果您将其放在class 类级别上,通常有什么用法?
  • 声明式事务管理是什么意思?
  • 默认回滚策略是什么? 如何重写它?
  • 当您使用JUnit测试时,默认的回滚策略是什么? 当我们使用JUnit 4中的@RunWith(SpringJUnit4ClassRunner.class)或 JUnit
    5中的@ExtendWith(SpringExtension.class)的注解,您的@Test注解@Transactional的方法?
  • 为什么“工作单元”一词如此重要,为什么JDBC AutoCommit违反了这种模式?
  • 如果您想使用JPA,在Spring需要做什么?
  • 使用JPA时,当Spring 和JPA 一起使用的时候,可以参与已有的事务么?
  • 您可以在JPA中使用哪些PlatformTransactionManager?
  • 您需要配置什么才能在Spring中使用JPA? Spring Boot如何使这更容易?

3.Spring Data JPA

  • 什么是 Repository 接口?
  • 如何定义Repository 接口? 为什么它是一个接口而不是类?
  • Repository接口中的finder方法的命名约定是什么?
  • Spring在运行时如何实现Spring Data repositories (存储库)?
  • @Query 注解是用来做什么的? Spring MVC和Web层
  • MVC是一个设计模式的缩写。 它代表什么,它背后的思想是什么?
  • 什么是DispatcherServlet,它的作用是什么?
  • 什么是web application context(Web应用程序上下文)? 它提供什么额外的范围?
  • @Controller注解有什么用?
  • 传入请求如何映射到控制器然后映射到方法?
  • @RequestMapping 和 @GetMapping 注解不同之处是什么?
  • @RequestParam 是做什么的?
  • @RequestParam 和@PathVariable 的不同之处是什么?
  • 控制器方法的参数类型有哪些?
  • 您还可以在控制器方法参数上使用哪些其他注解? (您可以忽略此考试的表单处理注释)
  • 控制器方法的有效返回类型有哪些?

4. Security

  • 什么是身份验证和授权? 哪一个必须优先?
  • security 是跨领域关注的问题吗? 在内部如何实现?
  • 什么是委派过滤器代理?
  • 什么是安全过滤器链?
  • 什么是 security context ?
  • antMatcher或mvcMatcher中的**模式有什么作用
  • 为什么在antMatcher上推荐使用mvcMatcher?
  • Spring Security是否支持密码哈希? 什么是salt 盐?
  • 为什么需要方法安全性? 该方法通常保护哪种类型的对象级别(考虑其用途而不是其Java类型)。
  • @PreAuthorized和@RolesAllowed注解是做什么? 它们之间有什么区别?
  • 这些注解如何实现?
  • 您可以在哪个security 注解中使用SpEL?

5. REST

  • REST代表什么?
  • resource 是什么?
  • CRUD 是什么意思?
  • REST安全吗? 您可以采取什么措施来保护它?
  • REST是否可扩展和/或可互操作?
  • REST使用哪些HTTP方法?
  • 什么是HttpMessageConverter?
  • REST通常是无状态的吗?
  • @RequestMapping有什么作用?
  • @Controller是构造型吗? @RestController是构造型吗?
  • 什么是构造型注解?这意味着什么?
  • @Controller和@RestController有什么区别?
  • 您何时需要@ResponseBody?
  • GET,POST,PUT或DELETE的HTTP状态返回码是什么?
  • 什么时候需要@ResponseStatus?
  • 在哪里需要@ResponseBody? @RequestBody呢?尽量不需要混淆了。
  • 如果您看到了示例控制器代码,您是否了解它在做什么?你能否告诉是否正确注解?
  • 您的类路径中是否需要Spring MVC?
  • 对于Spring REST应用程序,您将使用哪种Spring Boot Starter?
  • RestTemplate的优点是什么?
  • 如果您看到一个使用RestTemplate的示例,您会理解它的作用吗?

6.Testing

  • 您是否在单元测试中使用Spring?
  • 什么类型的测试通常使用Spring?
  • 如何在JUnit集成测试中创建共享的应用程序上下文?
  • 在测试时,什么时候,什么地方使用@Transactional?
  • 如何使用Mockito或EasyMock等模拟框架?
  • @ContextConfiguration如何使用?
  • Spring Boot如何简化编写测试?
  • @SpringBootTest做什么?它如何与@SpringBootApplication和@SpringBootConfiguration交互?

7. Spring Boot 介绍

  • Spring Boot 是什么?
  • 使用Spring Boot有什么优势?
  • 为什么它是 opinionated (自以为是)的?
  • 哪些因素会影响Spring Boot的设置?
  • 什么是 Spring Boot starter POM ?为什么它是有用的?
  • Spring Boot同时支持properties和YML文件。 如果你看到,你能识别和理解他们么?
  • 您可以使用Spring Boot控制日志记录吗? 怎么控制?
  • 默认情况下,Spring Boot在哪里寻找properties文件?
  • 如何定义特定于配置文件的properties文件?
  • 如何访问properties文件中定义的属性?
  • 您必须定义哪些属性才能配置外部MySQL?
  • 您如何配置默认schema 表结构 和初始数据?
  • 什么是 fat jar? 它和原始的jar 有什么不同?
  • 嵌入式容器和WAR有什么区别?
  • Spring Boot支持哪些嵌入式容器?

8. Spring Boot Auto Configuration

  • Spring Boot如何知道要配置什么?
  • @EnableAutoConfiguration做什么?
  • @SpringBootApplication做什么?
  • Spring Boot是否进行组件扫描? 默认情况下它在哪里?
  • 如何自动配置DataSource和JdbcTemplate?
  • spring.factories文件有什么用?
  • 如何自定义Spring自动配置?
  • @Conditional注解的示例是什么? 如何使用?

9. Spring Boot Actuator

  • Spring Boot Actuator提供什么值?
  • 您可以使用哪两种protocols 协议访问actuator endpoints?
  • 开箱即用的actuator endpoints有哪些?
  • 信息endpoints的作用是什么? 您如何提供数据?
  • 如何使用loggers endpoint更改包的日志记录级别?
  • 如何使用标签访问端点?
  • metrics 指标是什么?
  • 如何创建带有或不带有标签的自定义指标?
  • 什么是健康指标?
  • 开箱即用的健康指标是什么?
  • 健康指标状态是什么?
  • 开箱即用的健康指示器的状态是什么?
  • 您如何更改健康指标状态严重性顺序?
  • 为什么要利用第三方外部监控系统?

10. Spring Boot Testing

  • 什么时候要使用@SpringBootTest 注解?
  • @SpringBootTest自动配置什么?
  • spring-boot-starter-test 会给classpath添加什么依赖?
  • 如何使用@SpringBootTest对Web应用程序执行集成测试?
  • 您何时要使用@WebMvcTest? 它会自动配置什么?
  • @MockBean和@Mock有什么区别?
  • 您何时需要@DataJpaTest? 它会自动配置什么?