新国都面试真题

文章目录

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请求---服务端响应----浏览器渲染

相关推荐
霸道流氓气质几秒前
SpringAI+Ollama本地模型实现快速对话入门实例
spring boot·ai
老纪11 分钟前
Redis怎样利用Lua为多个Key同步续期
jvm·数据库·python
2403_8832610914 分钟前
C#怎么计算两个日期的差值_C#如何处理时间跨度【笔记】
jvm·数据库·python
m0_7406532215 分钟前
Golang切片底层原理是怎样的_Golang切片实现原理教程【简明】
jvm·数据库·python
yexuhgu17 分钟前
CSS如何处理CSS逻辑属性兼容性_通过PostCSS转译为物理属性
jvm·数据库·python
m0_6245785919 分钟前
CSS如何给Bootstrap背景添加半透明层_使用rgba颜色模式与定位
jvm·数据库·python
m0_4708576420 分钟前
CSS如何实现等宽表格布局_利用table-layout与盒模型
jvm·数据库·python
kexnjdcncnxjs25 分钟前
HTML 中使用 EXIF.js 读取图片元数据失败的常见原因与解决方案
jvm·数据库·python
iuvtsrt32 分钟前
Python如何实现定时异步任务_结合asyncio与loop.call_later调用
jvm·数据库·python
m0_4636722032 分钟前
HTML怎么标注成就连续打卡中断_HTML“断连,重新开始”提示【方法】
jvm·数据库·python