自整理Java常见重要面试题

自己复习用的,肯定不全面

常见题

Cookie和Session的区别

1.实现记住用户名和密码时一般使用Cookie技术,因为需要记住的数据时客户端输入的内容,数据库无法直接保存客户端的信息,保存的是用户信息,使用Cookie保存数据的时间一般会很久,而Session只能保存半小时左右。
2.

简述SpringBoot

SpringBoot是Spring官方的一个产品,其本质上是一个基于Maven、以Spring框架作为基础的进阶框架,很好地支持了主流的其他框架,并默认完成了许多可预测的配置,其核心思想是“约定大于配置”;SpringBoot的启动类上添加了@SpringBootApplication注解,此注解的元注解包括@ComponentScan注解,所以SpringBoot项目默认就开启了组件扫描,且扫描的包就是启动类所在的包,SpringBoot不是一个代码生成器,并不能自动生成任何代码。

GET和POST

GET请求:请求参数在请求地址的后面通过?分隔,参数可见所以敏感信息不建议用GET请求,参数长度受限只能传递几K的数据,从服务器获取数据时使用GET请求,通常用于查询操作、删除操作。
POST请求:

同步和异步

异步请求:指客户端由主线程负责显示页面,由子线程负责发请求获取数据,获取到数据之后把数据展示到原页面当中,这个过程就成为页面的局部刷新,通过Axios框架发出异步请求。

SSM框架是什么

三大框架指的是Spring、SpringMVC、Mybatis

Spring相关

SpringMVC的核心组件

核心流程

  • 用户向服务器发送请求,每次请求被DispatcherServlet捕获;
  • DispatcherServlet对请求URL进行解析,得到请求资源标识符URI,根据该URI调用HandlerMapping获得该Handler配置的所有相关对象,最后以HandlerExecutionChain对象的形式返回;
  • DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter;
  • 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据配置,Spring将做一些额外的工作:
    1)HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
    2)数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
    3)数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等
    4)数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
  • Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
  • 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
  • ViewResolver 结合Model和View,来渲染视图;
  • 将渲染结果返回给客户端。

1.DispatcherServlet:中央处理器,把请求转发到具体的控制类
2.Controller:具体处理请求的控制类
3.HandlerMapping:映射处理器,负责映射中央处理器转发给Controller的映射策略
4.ModelAndView:服务层返回的数据和视图层的封装类
5.ViewsResolve:视图解析器,负责解析具体的视图
6.Interceptors:拦截器,负责拦截自定义的请求然后做处理工作

Spring中Bean的生命周期

1.实例化:首先,Spring容器会使用Java反射API实例化Bean。这意味着Spring根据Bean的类定义创建一个新的Java对象。

2.属性赋值:然后,Spring将利用两种方式对Bean进行属性注入:

  • Setter方法注入:利用对象的setter方法对Bean进行属性赋值。
  • 构造函数注入:Spring将参数传递给Bean的构造函数来进行属性赋值。

3.对Bean进行Aware回调
如果Bean实现了Spring的Aware接口。Spring容器将会使用相应的接口回调方法设置Bean的一些相关属性。

4.BeanPostProcessor 的前置处理
Spring 容器将会对实现了 BeanPostProcessor 接口的 Bean 进行预处理。

5.初始化
在 Bean 初始化之前容器会调用 init-method 方法。

6.初始化 BeanPostProcessor
Spring 容器将会实例化 BeanPostProcessor 并将其应用到 Bean 实例上。

7.将 Bean 注入到其它 Bean 中
这是将 Bean 注入到其他 Bean 中的最佳时机。

8.BeanPostProcessor 后处理器

  • 在 Bean 初始化之后调用 postProcessBeforeInitialization 和 postProcessAfterInitialization 方法,对 Bean 进行后置处理。

9.销毁
在容器关闭之前, Spring 将会调用销毁方法(如果有配置的话)的 bean。

总结
Spring Bean 的生命周期可以概括为实例化、属性赋值、BeanPostProcessor 预处理、Bean 初始化、BeanPostProcessor 后处理器、使用和销毁等阶段,而 Spring 容器负责管理 Bean 的整个生命周期。

Spring的自动装配

(1)如果某个方法是由Spring框架自动调用的(例如构造方法、@Bean方法、添加了@Autowired的Setter方法),当这个方法被声明了参数时,Spring框架也会自动尝试从容器找到匹配的对象,用于调用此方法,对方法的参数自动装配时,如果方法有多个参数,各参数的先后顺序是不重要的。
(2)当某个量需要被赋值时,可以使用特定的语法,使得Spring尝试从容器找到合适的值,并完成自动赋值。

注解相关

(1)Spring相关注解

  • @Component、@Controller、@Service、@Repository

  • @Autowired
    使用在字段上用于根据类型依赖注入。

  • @Qualifier
    结合@Autowired一起使用,用于根据名称进行依赖注入。

  • @Scope
    标注Bean的作用范围。

  • @Configuration
    指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解。

  • @ComponentScan
    用于指定Spring在初始化容器时要扫描的包。

  • @Bean

  • @Import
    使用此注解导入的类会被Spring加载到IOC容器中。

  • @Aspect、@Before、@After、@Around、@Pointcut

(2)SpringMVC相关注解

  • @RequestMapping
    可以添加在控制器类之前,例如
@RestController 
@RequestMapping("/user")
public class userController{
	@PostMapping("/login")
	public void login(){
	...
	}
}

在类上添加此注解并配置路径后,每个方法实际映射到的请求路径都是“类上的配置路径 + 方法上的配置路径”,例如/user/login;
Tips:主要作用是配置请求路径与处理请求的方法的映射关系。

  • @RequestBody
    接收HTTP请求的JSON数据,将JSON转换为Java对象。

  • @RequestParam
    指定请求参数的名称。

  • @PathViriable
    从请求路径中获取请求参数{/user/{id}},传递给方法的形式参数。

  • @ResponseBody

  • @RequestHeader
    获取指定的请求头数据

  • @Rest

  • @Controller

  • @RestController
    @Rest和@Controller的组合注解

  • @ControllerAdvice
    添加在SpringMVC框架统一处理异常的类上的注解

  • @RestControllerAdvice
    同@ControllerAdvice一样是添加在SpringMVC框架统一处理异常的类上的注解

(3)SpringBoot相关注解

  • @SpringBootConfiguration
    组合了@Configuration注解,实现配置文件的功能。
  • @EnableAutoConfiguration
    打开自动配置的功能,也可以关闭某个自动配置。
  • @ComponentScan
    Spring扫描组件。

HTTP响应码相关

  • 404响应码:
    找不到路径,需要检查的地方包括①Controller的包是否创建在了自带的包里面;②请求路径是否书写正确;③是否添加了Controller注解;④RequestMapping注解里面的路径是否书写正确。
  • 405响应码:
    服务器端程序收到请求时,发现客户端提交请求的请求方式与服务器端要求的不符。
  • 500响应码:
    1.服务器端程序执行过程中,出现了异常,但是始终未被处理。
    2.服务器业务代码出错,需要检查Idea控制台报错

Mybatis框架

Mybatis框架的依赖项的ArtificialId是 mybatis。

要想所有用于Mybatis处理数据的接口都必须被Mybatis识别,则需要在配置类上添加@MapperScan注解,并通过注解参数指定接口所在的根包,或者在每个接口上添加@Mapper注解。

  • 缓存机制:
    当执行查询后,可以将查询结果暂时保存到应用程序服务器中(即使返回了查询结果,也不会销毁这个数据),后续再次查询时,就可以将此前的查询结果直接返回,以此提高“查询”效率。
    分为一级缓存和二级缓存:
    一级缓存:即会话缓存,它是基于sqlSession

    二级缓存:

MySql语句

【select name, salary from teacher order by salary desc limit M,N;】
M:(当前页数-1)* 每页显示的记录数
N:每页显示的记录数
limit 12, 3 则表示每页显示3条,显示第(12+3)/3 页。
limit 0, 5 则表示每页显示5条,显示第(0+5)/5 页。

微服务框架

  • 微服务是以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API/或其他协议直接通信。同时服务会使用最小的规模的集中管理能力,服务可以用不同的编程语言与数据库等组件实现。
    简单来说,微服务就是将一个大型项目的各个业务模块拆分成多个互不相关的小项目,而这些小项目专心完成自己的功能,而且可以调用其他小项目的方法,从而完成整体功能。

SpringCloud

SpringCloud是由Spring提供的一套能够快速搭建微服务架构程序的框架集
框架集表示SpringCloud不是一个框架,而是很多框架的统称
SpringCloud就是为了搭建微服务架构项目出现的

微服务框架组件

  • nacos:微服务治理组件
  • dubbo:rpc框架,负载均衡远程调用
  • spring cloud gateway:网关(路由、过滤、负载均衡)
  • sentinel:熔断限流组件

Nacos组件

  • 服务管理
    管理纵向拆分出来的,独立运行的服务集群,治理的主要手段 注册 发现
  • 配置管理
    服务中冗余,重复的项目配置比如json properties txt yaml文件几种管理,分组,分环境管理。

naocs工作结构

  • nacos组件中角色划分:
    • 服务端:刚刚启动的进程就是服务端,可以接收客户端的各种请求,根据不同请求处理客户端发送的请求信息.请求可以使用不同的通信协议,比如http rpc等.
    • 客户端:就是我们拆分出来的每一个微服务,在我们的demo案例中,有4个服务分别是buseniss cart order stock,每一个服务都可以启动好多个客户端
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值