面试题小总结

server/2024/10/18 9:28:09/

一、为什么要使用Redis?

  1. 因为它是内存数据库,运行速度快
  2. 因为它的工作线程是单线程,具有串行化,原子性
  3. 具有IO模型,天生支撑高并发
  4. 是kv模型,v具有多个数据结构
  5. 具有本地方法,可以计算数据移动
  6. 是二进制安全的,value最大为512MB

二、在百万级的Redis中如何查找key?

查找key有两种方法,第一种是用keys,第二种是scan。keys在数据量比较多的时候,会阻塞服务器,浪费服务器资源,所以通常情况下用scan,scan是一个基于游标的迭代器,它会在用户每次调用时,返回一个包含两个元素的数组,一个是下次迭代的游标,一个是所有迭代的元素,当返回的游标为0时,表示迭代结束。

三、Redis键的过期删除策略

Redis键的过期删除策略有两种:

  1. 惰性删除:在键过期后不会立即删除,而是在下次请求时扫描这个键是否过期,如果过期就删除,反之,则返回该键
  2. 定期删除:每隔一段时间扫描数据库,删除里面的过期键,扫描键的数量和数据库数量由算法决定

四、Spring MVC的执行流程

请添加图片描述
流程大致是:

  1. 用户向前端控制器发送请求
  2. 前端控制器接收到请求后调用处理映射器
  3. 处理器映射器找到具体的处理器,生成处理器对象以及处理器拦截器,再一起返回给前端控制器
  4. 然后前端控制器调用处理器适配器
  5. 处理器适配器调用具体的处理器
  6. 处理器适配器将处理器执行结果ModelAndView返回给前端控制器
  7. 然后前端控制器ModelAndView传给视图解析器解析View
  8. 前端控制器视图解析器返回的View进行渲染,然后响应给用户

五、Spring Boot自动装载原理

Spring Boot的自动装载主要是通过**@SpringBootApplication注解实现,它包含了==@EnableAutoConfiguration==,该注解从META-INF/spring。factories**文件中读取自动装置类,这些类通过条件注解决定是否要被激活。另外,Spring Boot允许通过配置文件调整自动配置

六、如何解决session问题

JWT将用户的信息封装到一个token令牌中,当每次请求时需要携带token令牌访问
JWT由三个部分组成:头部、负载、签名
头部中就是使用加密算法的签名,负载中存放着需要传递的数据信息
基于Cookie,用户登录后,将Session信息保存在客户端,用户在每次请求的时候,通过客户端的cookie把Session信息带过来

七、布隆过滤器的作用

布隆过滤器是由位数组和哈希函数组成的,通过过个哈希函数将元素映射到位数组的随机位置,主要作用是处理大量任务的筛选任务,主要应用到时预防缓存穿透中,而缓存穿透指的是恶意用户或攻击者通过请求不存在于缓存和后端存储中的数据来使得所有请求都落到后端存储上,导致系统瘫痪。但是通常使用的办法是使用黑名单防止缓存穿透

八、Rabbion中常用的负载均衡算法

主要有四种:轮询、随机、权重、响应时长

九、Rabbion第一次调用为什么会很慢

因为Rabbion默认的是懒加载,它在第一次访问的时候才会去创建LoadBalanceClient,就会导致调用很慢
优化方法就是使用饥饿加载,饥饿加载会在项目启动时加载,降低了第一次访问到耗时时长

十、为什么要使用双token拦截器

双token就是使用了两个token令牌,访问令牌和刷新令牌,这种方法会在提高安全性的同时,优化用户的体验,会更加灵活,更好的管理用户权限

十一、什么是CAP原则

C就是一致性,A是可用性,P是分区容忍性,这三个属性最多只能同时保证其中两个

十二、Nacos配置中心动态刷新原理

  1. 客户端发起请求:客户端通过后台线程发起一个 HTTP 请求到 Nacos 服务端,用于监听配置变化。
  2. 服务端挂起连接:Nacos 服务端接收到请求后,会挂起(hold)这个 HTTP 连接一段时间(例如 30 秒),在此期间服务端监控配置文件的变化。
  3. 无变化情况:若在这段时间内没有检测到配置文件有任何变更,服务端将释放连接并向客户端返回一个指示,表明配置没有更新。
  4. 配置变更情况:如果在挂起期间检测到配置文件发生变化,服务端会立即释放连接并将最新的配置推送给客户端。
  5. 循环轮询:无论哪种情况,客户端在接收完响应后,会在短暂延迟(如 10 毫秒)之后重新发起一个新的 HTTP 请求,从而形成循环轮询机制以持续监听配置更新。

十三、负载方案有哪些?

负载方案有两种:

  1. 服务端负载均衡:在消费者和服务提供放中间使用独立的代理方式进行负载,有硬件(F5)和软件(Nginx、OpenResty)
  2. 客户端负载均衡:客户端根据自己的请求做负载均衡,Rabbion就属于客户端自己的负载均衡

十四、ES使用场景

  1. 全文搜索
  2. 数据分析
  3. 日志分析与监控
  4. NoSQL JSON文档数据库
  5. 搜索推荐
  6. 地理位置信息
  7. 大规模监控系统

十五、MongoDB应用场景

做了一个拼车微信小程序,里面用到了MongoDB,用来存储定位信息和订单信息等,还有其他的应用场景比如:

  1. 网站数据存储
  2. 游戏开发
  3. 物流与电商
  4. 社交网络
  5. 物联网
  6. 内容管理系统
  7. 大数据分析

十六、MyBatis执行流程

在这里插入图片描述

  1. 读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息
  2. 加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
  3. 构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。
  4. 创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。
  5. Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
  6. MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。
  7. 输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。
  8. 输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。

十七、MyBatis拦截器

有四个拦截器

  1. Executor(执行器拦截器)
  2. StatementHandler(语句拦截器)
  3. ParameterHandler(参数拦截器)
  4. ResultHandler(结果集拦截器)
    拦截的执行顺序也是如上面顺序

http://www.ppmy.cn/server/110411.html

相关文章

axios发送post请求实例

在body中的数据格式又有两种,一种是 json 数据格式,另一种是 字符串。具体要用哪种格式取决于后端入参的格式。 如果后端接收json数据类型,post 的 headers 需要设置 { ‘content-type’: ’application/json’ },传给后端的数…

Linux系统(Centos7)没有安装GUI图形界面后期加装方法

问题背景 前期图方便安装了centos7的命令行版本,后期发现需要有图形界面才行,所以需要在后期加装图形界面。 问题解决 必要要求:服务器能够连接互联网,如果是VMware,网络选择NAT,开机后就可以联网;所有操…

常见框架报错信息

一、报错信息(不同类型转换) 2024-08-28 14:57:15.450 ERROR 8272 --- [io-8080-exec-12] c.w.common.exception.RRExceptionHandler : class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer ar…

概率论与编程的联系及数据科学应用

目录 引言 第一章 概率模拟与编程实现 1.1 随机数生成与蒙特卡罗模拟 1.1.2 蒙特卡罗模拟 第二章 统计建模与数据分析 2.1 统计模型实现 2.2 概率图模型 第三章 概率论在机器学习中的应用 3.1 随机森林与决策树 3.2 贝叶斯分类器 总结与展望 引言 在大数据和人工智…

NMPC非线性模型预测控制经验分享与代码实例

NMPC非线性模型预测控制经验分享与代码实例 原本做完本科毕设之后就应该动笔写这一部分,但是做的过程中慢慢意识到自己懂的只是一点点。最近重新接触一些优化相关的问题,希望能够做出我认知之下比较好的解答。本人知识有限,难免写的有问题&am…

【GIT】Idea中的git命令使用-全网最新详细(包括现象含义)

原文网址:【GIT】Idea中的git命令使用-全网最新详细(包括现象含义) 文章目录 **命令1:查看当前所处分支:****命令2:拉取最新代码:****命令3:切换分支:****命令4&#xff…

VS2019开发CAN上位机

1、CAN分析仪,主要功能就是把CAN信号转换成电脑能接收的USB信号。索引号是指电脑连接了几台CAN分析仪设备,一般情况下都是一台,该值为0。不同CAN盒的二次开发文件不同 2、CAN上位机一般只能适应一个CAN盒,如果需要实现多个CAN盒通…

《高等代数》三对角行列式的递推法

说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。 注:1)当三对角行列式里面存在“俄罗斯套娃”的结构时可以用递推法进行求解。 2)用递推法进行求解有三步: (1)将三对角行列…