小厂实习面试记录-001

1.springmvc运行流程

Spring MVC的处理过程:

  1. DispatcherServlet 接收用户的请求。
  2. 找到用于处理request的 handler 和 Interceptors,构造成 HandlerExecutionChain 执行链。
  3. 找到 handler 相对应的 HandlerAdapter。
  4. 执行所有注册拦截器的preHandler方法。
  5. 调用 HandlerAdapter 的 handle() 方法处理请求,返回 ModelAndView。
  6. 倒序执行所有注册拦截器的postHandler方法。
  7. 请求视图解析和视图渲染。

处理流程中各个组件的功能:

  • 前端控制器(DispatcherServlet):接收用户请求,给用户返回结果。
  • 处理器映射器(HandlerMapping):根据请求的url路径,通过注解或者xml配置,寻找匹配的Handler。
  • 处理器适配器(HandlerAdapter):Handler 的适配器,调用 handler 的方法处理请求。
  • 处理器(Handler):执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装到ModelAndView对象中。
  • 视图解析器(ViewResolver):将逻辑视图名解析成真正的视图View。
  • 视图(View):接口类,实现类可支持不同的View类型(JSP、FreeMarker、Excel等)。

2.Redis内存优化

1.压缩值
2.使用较小的键
3.切换到32位
4.升级Redis版本
5.使用更好的序列化器
6.将较小的字符串组合为哈希
7.从Set切换为Intset
8.切换到bloom filter或hyperloglog
9.大哈希分片成小哈希
10.将哈希的Hashtable转换为Ziplist
11.转换为List而不是Hash
12.压缩字段名
13.避免动态Lua脚本
14.启用List压缩
15.更快地回收过期的键内存

3.springboot核心配置文件

⼀、springboot主要配置⽂件种类

1.bootstrap (.yml或.properties)
2.application(.yml或.properties)

⼆、bootstrap与application的区别

Spring Cloud项⽬是基于Spring Boot项⽬的,我们创建的Spring Cloud项⽬其实包含了两个Spring容器,⼀个是Spring Cloud的,⼀个是Spring Boot的,Spring Cloud作为⽗容器。这两个容器都是分开进⾏实例化的,最后关联起来。⼀开始是Spring Boot项⽬启动,然后在环境准备阶段会进⼊到BootstrapApplicationListener这个监听器当中,通过这个监听器会创建⼀个属于Spring Cloud的SpringApplication对象(与Spring Boot创建异曲同⼯,只不过有⼀些⾃⼰特别的配置⽽已),执⾏SpringApplication对象的run⽅法就会创建⼀个Spring Cloud的容器对象。

三、bootstrap与application的应⽤场景

1.application主要⽤于spring项⽬的⾃动化配置。
2.bootstrap主要有以下⼏个应⽤场景:

  • 使⽤ Spring Cloud Config 配置中⼼时,这时需要在 bootstrap 配置⽂件中添加连接到配置中⼼的配置属性来加载外部配置中⼼的配置
    信息;

  • ⼀些固定的不能被覆盖的属性;

  • ⼀些加密/解密的场景;

4.https

什么是数字证书?

服务端可以向证书颁发机构CA申请证书,以避免中间人攻击(防止证书被篡改)。证书包含三部分内容:证书内容、证书签名算法和签名,签名是为了验证身份。

服务端把证书传输给浏览器,浏览器从证书里取公钥。证书可以证明该公钥对应本网站。

数字签名的制作过程

  1. CA使用证书签名算法对证书内容进行hash运算
  2. 对hash后的值用CA的私钥加密,得到数字签名。

浏览器验证过程

  1. 获取证书,得到证书内容、证书签名算法和数字签名。
  2. 用CA机构的公钥对数字签名解密(由于是浏览器信任的机构,所以浏览器会保存它的公钥)。
  3. 用证书里的签名算法对证书内容进行hash运算
  4. 比较解密后的数字签名和对证书内容做hash运算后得到的哈希值,相等则表明证书可信。

HTTPS原理

首先是TCP三次握手,然后客户端发起一个HTTPS连接建立请求,客户端先发一个Client Hello的包,然后服务端响应Server Hello,接着再给客户端发送它的证书,然后双方经过密钥交换,最后使用交换的密钥加解密数据。

  1. 协商加密算法 。在Client Hello里面客户端会告知服务端自己当前的一些信息,包括客户端要使用的TLS版本,支持的加密算法,要访问的域名,给服务端生成的一个随机数(Nonce)等。需要提前告知服务器想要访问的域名以便服务器发送相应的域名的证书过来。

  2. 服务端响应Server Hello,告诉客户端服务端选中的加密算法

  3. 接着服务端给客户端发来了2个证书。第二个证书是第一个证书的签发机构(CA)的证书。

  4. 客户端使用证书的认证机构CA公开发布的RSA公钥对该证书进行验证,下图表明证书认证成功。

  5. 验证通过之后,浏览器和服务器通过密钥交换算法产生共享的对称密钥

  6. 开始传输数据,使用同一个对称密钥来加解密。

5.301 302状态码代表什么


小厂实习面试记录-001
https://zty-f.github.io/2022/05/06/小厂面试记录-001/
作者
ZTY
发布于
2022年5月6日
更新于
2025年1月2日
许可协议