Java面试常见问题

Fly away

数据库

MySql

Redis

MongoDB

后端框架

Spring

常见面试题

  • Spring核心(IOC, DI)
    IOC(Inversion Of Controll,控制反转)是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由给Spring框架来管理, 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发.
  • Spring中的AOP
    AOP(Aspect-Oriented Programming,面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。
    Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使用JDK动态代理去创建代理对象;而对于没有实现接口的对象,就无法使用JDK动态代理
  • Spring中的bean生命周期?
    精简:
    一阶段:Bean的实例化和DI(dependency injection)
    二阶段:检查Spring Awareness
    三阶段:创建bean生命周期回调
    四阶段:销毁bean生命周期回调
简单:
 - 反射调用Bean的构造方法实例化Bean
 - 通过反射注入Bean的属性
 - Aware注入, 比如BeanNameAware, BeanClassLoaderAware
 - 调用每个BeanPostProcessor接口的postProcessBeforeInitialization接口
 - 调用初始化方法
 - 调用每个BeanPostProcessor接口的postProcessAfterInitialization接口
 -  注册需要执行销毁方法的Bean
  • Spring框架中用到了哪些设计模式?
工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。
代理设计模式:Spring AOP功能的实现。
单例设计模式:Spring中的bean默认都是单例的。
模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。
包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。
适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。
  • Spring事务中的隔离级别有哪几种?
ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。
ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

Spring MVC

Spring MVC可以帮助我们进行更简洁的Web层的开发,并且它天生与Spring框架集成。Spring MVC下我们一般把后端项目分为Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)

流程说明:
1.客户端(浏览器)发送请求,直接请求到DispatcherServlet2.DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler3.解析到对应的Handler(也就是我们平常说的Controller控制器)。
4.HandlerAdapter会根据Handler来调用真正的处理器来处理请求和执行相对应的业务逻辑。
5.处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是逻辑上的View6.ViewResolver会根据逻辑View去查找实际的View7.DispatcherServlet把返回的Model传给View(视图渲染)。
8.View返回给请求者(浏览器)

Spring Cloud

springcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。所以springcloud不方便使用版本号来管理,而是使用版本名。以避免和子项目版本号的冲突。

服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config

  • Eureka
    服务治理, 分为Eureka服务端和Eureka客户端
    Eureka服务端(@EnableEurekaServer): 用作服务注册中心。支持集群部署。
    Eureka客户端( @EnableEurekaClien或者@EnableDiscoveryClient): 是一个java客户端,用来处理服务注册与发现。
    在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

  • Ribbon

  • Hystrix
    断路器,保护系统,控制故障范围
    为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

  • Zuul
    api网关,路由,负载均衡等多种作用,类似nginx,反向代理的功能
    在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

  • Spring Cloud Config
    SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。
    这个还是静态的,得配合Spring Cloud Bus(广播)实现动态的配置更新

Spring Cloud Bus 的广播功能,让 client 端都订阅配置更新事件,当配置更新时,触发其中一个端的更新事件,Spring Cloud Bus 就把此事件广播到其他订阅端,以此来达到批量更新, 核心原理其实就是利用消息队列做广播,所以要先有个消息队列,目前官方支持 RabbitMQ 和 kafka

参考: https://www.cnblogs.com/fengzheng/p/11242128.html

Spring Data

Spring 的一个子项目。用于简化数据库访问,支持NoSQL和关系数据库存储。其主要目标是使数据库的访问变得方便快捷。实现实体和表的绑定关系, 操作实体就相当于操作表, 接口实现JPA接口.

Spring Security

认证, 授权, 攻击防护
其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

前端框架

VUE

: 其他框架博主还没有接触, 后续有时间补充!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值