每天一套面试题Day13-京东高频(2)

链接题目来自牛客

我的每日一套面试题专栏,每天更新一起打卡

8.说说Spring事务管理。

我的博客 它提供了一个统一抽象层,核心接口是PlatformTransactionManager。它有两种实现方式:编程式和声明式。我们最常用的是基于@Transactional注解的声明式事务,因为它对代码无侵入。

使用@Transactional时,需要重点关注它的几个属性:传播行为(比如默认的REQUIRED和创建新事务的REQUIRES_NEW)、隔离级别、超时时间和只读属性。同时,要注意事务失效的常见场景,比如方法的自调用、异常被捕获、方法非public等。

Spring事务的本质是通过AOP代理实现的

9.详细的说说Redis的数据类型

String 计数器 Set 集合交并差 共同关注 List 消息队列 ZSet 班级排名 Hash 对象

Stream 消息队列 GEO 查看附近的位置 HyperLogLog 以固定的较少内存实现不精确的去重计数,如网站UV统计 BitMap 位图,二值,签到,用户状态

10.Redis的缓存淘汰策略

LRU 最近最小使用,认为距离上次使用时间越远,今后使用的可能性越低。 LFU,最小频率,认为最近一段时间内使用的频率越小,今后可能性越低 当超过配置的maxmemory,会触发内存淘汰机制

10.1不进行数据淘汰(Redis3.0后默认)

当超过maxmemory,直接返回错误,不再提供服务

10.2进行数据淘汰(可配置策略)

10.2.1在设置了过期时间的数据中进行淘汰 volatile

  • volatile-random - 随机淘汰
  • volatile-ttl - 优先淘汰最早过期
  • volatile-lru - 淘汰最久未使用
  • volatile-lfu - 淘汰最少使用

10.2.2在所有数据范围内淘汰 allkeys

  • allkeys-random 随机
  • allkeys-lru 最久未使用
  • allkeys-lfu 最少使用

11.说说缓存穿透、击穿、雪崩的区别。

穿透:原本不存在 布隆过滤器 缓存控制 击穿:热key过期。 逻辑过期,互斥锁 雪崩:大量同时过期。 随机过期时间。提高可用性(主从复制,哨兵,集群)

12.Redis如何与数据库保持双写一致性?

先更新数据库,后删除->读写并发,但概率不高

先删除后更新->读写并发 ->延迟双删 先更新sql后更新缓存或者先更新缓存后更新sql->写写并发

设置较短的过期时间

分布式锁(先更新数据库再更新缓存,写加锁,确保串行更新)

我的博客

13.什么是进程和线程?进程和线程的区别?

进程是分配资源的基本单位,线程是CPU调度的基本单位。 线程共享进程的空间,切换线程的代价要比切换进程的代价小。

通信方式 进程:通过进程间通信(IPC)进行数据交换,如管道、消息队列、共享内存,套接字。 线程:通过共享内存直接通信,速度快但需注意同步

14.为什么 MySQL 采用 B+ 树作为索引?

叶子节点双向链表,高效的范围查询,排序

叶子节点才有值,索引节点没有值,让树更矮胖,减少IO次数

#面试真题#
每日一套面试真题 文章被收录于专栏

记录刷过的面试真题

全部评论

相关推荐

11-10 14:12
南京大学 golang
我的OC时间线
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务