新国都面试真题

文章目录

1.项目的高并发在哪里有所体现?

项目里面的抢券逻辑涉及到高并发,优惠力度大,单词访问量激增,这里用到了lua脚本判断库存,用户是否下单,是否一人一单,CAS控制库存,redission分布式锁保证一人一单。

2.为什么采用redis实现登录功能

可能后续项目扩增,如果是单纯session登录,在集群环境下就会存在问题,因为你session只是存储在一台机器的jvm内存中,其他机器无法感知,基于redis,所有机器可以从redis里获取

3.jwt登录这块在项目中如何做的呢?如果两个人登录同一个账户,后面登录的把之前登录的挤下线,你会怎么做?

1.jwt首先是前端发送登录请求,后端判断,通过后就生成一个jwt令牌返回给前端,jwt(header,payload,signature),前端保存到localstorage/sessionsotorage中,每次请求接口都携带这个jwt,后端拦截器校验,通过则放行。

  1. 用户登录吧userid:token:{token}存储到redis中,如果另一台设备登录就替换这里的token,原来的用户登录判断redis就不会通过,就会强制返回到登录界面

4.如果一个项目是新版本,但是你又不太确定他是不是稳定版本,所以你要做一个灰度发布的功能,你怎么做这个功能

用户请求时,网关层根据id进行hash运算,符合要求的走新版本,不符合的走老版本

5.bean的生命周期,springboot的自动装配流程?

首先是容器启动时解析xml或者注解,为每个bean生成Beandefination对象(记录类型,作用域等信息);当需要bean得时候通过反射实例化对象,然后进行依赖注入,然后Bean实现了aware接口,获取bean名称,获取容器得功能。接着执行BeanPostProcessor比如aop前置增强就在这里实现,然后调用bean初始化方法,Beanpostprocess(after)aop得后置增强就在这,最后bean就可以使用了

自动装配流程:SpringBootApplication启动类下面包含EnableAutoConfiguration,下面包含@Import注解回去读取依赖jar包下的自动配置类清单spring.factories,如果springboot引入了某些依赖,就会自动读取配置好这些配置类

6.mysql有哪些引擎,innodb的索引是如何实现的?为什么要选用b+树?

常见的有innodb和Myisam,其中innodb是默认的存储引擎,支持事务行级锁和外键,基于b+树实现,主键索引叶子节点存放整行数据,二级索引存放主键值。选择b+树的原因是对比二叉树这些,层级低,磁盘的IO少,并且叶子节点通过链表链接有助于范围查询。

7.讲一下mysql的四种隔离级别,可重复读是怎么实现的,mvcc是怎么实现的?

读未提交,读已提交(避免脏读),可重复读(避免重复读),串行化(避免幻读)

脏读:一个事务读取到另一个事务还未提交的数据

不可重复读:一个事务先后两次读取的数据不一致,第一次读数据为A,再读B提交了数据,变成b

幻读:执行次相同的查询,得到的数据行不一样

可重复读级别下,两次读取数据得到的结果一样

mvcc的实现是通过表的隐藏字段和读视图实现的。

隐藏字段包括事务id和undolog指针,undolog日志记录了不同事务修改的多个数据版本,读视图(最小事务id,预分配事务id,活跃事务id,当前事务id决定规则)决定快照读读取哪一个版本的数据,包含RC级别下读取最新已提交的数据,RR级别读取的是第一次读到的数据。

8.redis中出现大key的情况需要如何处理呢?

一开始的设计上就要避免大key的问题,可以拆分存储

定期redis扫描大key,及时优化

9.redis中redission分布式锁怎么实现的,redis什么特性可以保证它在多线程下是一个安全的

redission分布式锁的核心是利用redis的原子操作实现的,加锁使用的是底层的 set key value nx px实现。解锁用的lua脚本判断锁的value是否是自己的。如果是才删除

同时redission底层采用了看门狗机制,可以自动进行锁续期,避免业务执行时间长导致锁释放的过早

2.redis多线程下是安全的在于核心的数据操作都是单线程执行的,同时IO多路复用机制保证了包并发的处理能力,IO多路复用机制用内核的一个线程监听所有的socket连接,可读可写才得到通知

10.浏览器输入一个网址去进行访问,具体过程,用了哪些协议

DNS 域名解析----TCP三次握手---TLS加密握手---HTTP请求---服务端响应----浏览器渲染

相关推荐
Q_Q5110082852 小时前
python+django/flask的篮球馆/足球场地/运动场地预约系统
spring boot·python·django·flask·node.js·php
Q_Q5110082853 小时前
python+django/flask的城市供水管网爆管预警系统-数据可视化
spring boot·python·django·flask·node.js·php
JosieBook4 小时前
【SpringBoot】31 核心功能 - 单元测试 - JUnit5 单元测试中的断言机制——验证你的代码是否按预期执行了
spring boot·单元测试·log4j
计算机学姐6 小时前
基于SpringBoot的高校社团管理系统【协同过滤推荐算法+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
吃着火锅x唱着歌11 小时前
LeetCode 1128.等价多米诺骨牌对的数量
算法·leetcode·职场和发展
好好研究11 小时前
Spring框架 - 开发方式
java·后端·spring
编啊编程啊程12 小时前
【029】智能停车计费系统
java·数据库·spring boot·spring·spring cloud·kafka
hashiqimiya12 小时前
springboot后端的接口headers
java·spring boot·后端
ss27312 小时前
Springboot + vue 医院管理系统
vue.js·spring boot·后端