新国都面试真题

文章目录

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

相关推荐
zzywxc7872 小时前
AI 行业应用:AI 在金融、医疗、教育、制造业等领域的落地案例
人工智能·spring·金融·prompt·语音识别·xcode
Gz、2 小时前
Spring Boot 常用注解详解
spring boot·后端·python
麦兜*3 小时前
Redis 7.0 新特性深度解读:迈向生产级的新纪元
java·数据库·spring boot·redis·spring·spring cloud·缓存
我是华为OD~HR~栗栗呀3 小时前
测试转C++开发面经(华为OD)
java·c++·后端·python·华为od·华为·面试
龙茶清欢3 小时前
最新版 springdoc-openapi-starter-webmvc-ui 常用注解详解 + 实战示例
java·spring boot·ui·spring cloud
Dream it possible!3 小时前
LeetCode 面试经典 150_哈希表_快乐数(45_202_C++_简单)(哈希表;快慢指针)
leetcode·面试·散列表
用户093 小时前
MVI架构如何改变Android开发模式
android·面试·kotlin