小厂后端的十连问面试,教你如何应答

本文整理了一份小厂后端面试的十连问,涵盖了Redis的存储限制、数据去重、序列化、MySQL的B+树高度计算、线程池状态与原理、ThreadLocal使用场景和内存泄漏、Kafka消息有序性、Nacos的Raft选举机制以及TCC补偿机制等内容,旨在帮助面试者准备相关问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,最近一位朋友去面试,分享了一份面试真题,我整理了一下答案给大家。如果有不正确的,欢迎指出哈,一起进步。

  • Redis的key和value可以存储的最大值分别是多少?
  • 怎么利用Redis实现数据的去重?
  • Redis什么时候需要序列化?Redis序列化的方式有哪些?
  • MySQL的B+树的高度怎么计算?
  • 线程池的状态有哪些?获取多线程并发执行结果的方式有哪些?
  • 线程池原理?各个参数的作用。
  • ThreadLocal的使用场景有哪些?原理?内存泄漏?
  • kafka是如何保证消息的有序性?
  • Nacos的选举机制了解嘛?说下Raft算法?
  • 聊一聊TCC补偿机制

1、Redis的key和value可以存储的最大值分别是多少?

  • 虽然Key的大小上限为512M,但是一般建议key的大小不要超过1KB,这样既可以节约存储空间,又有利于Redis进行检索。
  • value的最大值也是512M。对于String类型的value值上限为512M,而集合、链表、哈希等key类型,单个元素的value上限也为512M

2. 怎么利用Redis实现数据的去重?

  • Redis的set:它可以去除重复元素,也可以快速判断某一个元素是否存在于集合中,如果元素很多(比如上亿的计数),消占用内存很大
  • Redis的bit:它可以用来实现比set内存高度压缩的计数,它通过一个bit设置为1或者0,表示存储某个元素是否存在信息。例如网站唯一访客计数,可以把user_id作为 bit 的偏移量 offset,如设置为1表示有访问,使用1 MB的空间就可以存放800多万用户的一天访问计数情况。
  • HyperLogLog:实现超大数据量精确的唯一计数都是比较困难的,HyperLogLog可以仅仅使用 12 k左右的内存,实现上亿的唯一计数,而且误差控制在百分之一左右。
  • bloomfilter布隆过滤器:布隆过滤器是一种占用空间很小的数据结构,它由一个很长的二进制向量和一组Hash映射函数组成,它用于检索一个元素是否在一个集合中

3. Redis什么时候需要序列化?Redis序列化的方式有哪些?

大家先回忆下Java序列化,什么时候需要序列化?

  • 序列化:将 Java 对象转换成字节流的过程。
  • 反序列化:将字节流转换成 Java 对象的过程。

为什么需要序列化呢?

打个比喻:作为大城市漂泊的码农,搬家是常态。当我们搬书桌时,桌子太大了就通不过比较小的门,因此我们需要把它拆开再搬过去,这个拆桌子的过程就是序列化。而我们把书桌复原回来(安装)的过程就是反序列化啦。

  • 比如想把内存中的对象状态保存到一个文件中或者数据库中的时候(最常用,如保存到redis);
  • 再比喻想用套接字在网络上传送对象的时候,都需要序列化。

RedisSerializer接口 是 Redis 序列化接口,用于 Redis KEY 和 VALUE 的序列化

  • JDK 序列化方式 (默认)
  • String 序列化方式
  • JSON 序列化方式
  • XML 序列化方式

4. MySQL的B+树的高度怎么计算?(比如有100w的数据,字段为int类型)

InnoDB存储引擎最小储存单元是页,一页大小就是16k。

B+树叶子存的是数据,内部节点存的是键值+指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而再去数据页中找到需要的数据;

假设B+树的高度为2的话,即有一个根结点和若干个叶子结点。这棵B+树的存放总记录数为=根结点指针数*单个叶子节点记录行数。

  • 如果一行记录的数据大小为1k,那么单个叶子节点可以存的记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小晴晴呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值