求大佬解答

1.redis为什么不用红黑树或者b+树
2.hashmap为什么不用跳表和b+树
3.mysql索引为什么不用跳表和红黑树
求佬解答,感激不尽
全部评论
其实很简单,下策:你把redis用跳表,hash用红黑树,mysql用b➕树的底层加原理讲透。最简单用redis进行举例,跳表的优点,查询时间复杂度Ologn,尽管和红黑树,b➕查询时间复杂度一致,但是从redis作用场景使用场景上来说做读多于写,减少了写时自平衡开销,再衍生一点,缓存数据量肯定没有内存大,这点对比b➕树来说,他的插入性能更好,主打一个灵活,想不出来就灵活进行举例优缺点,只要你够熟,面试官就不会追着你拷打这个问题,再说了,都能举例优缺点了,肯定也没问题的
31 回复 分享
发布于 2024-08-31 19:40 陕西
Redis:跳表在进行范围查询时优于红黑树,内存占用优于B+树; HashMap:HashMap 通常不需要进行范围查询,并且比跳表占用的内存空间更少(每个节点最多两个指针),这也是不选择B+树的原因(内存占用太大了); MySQL:InnoDB 存储引擎下内存与磁盘进行数据交换的单位是页,跳表和红黑树占用的内存空间是离散的,每进行一次比较就需要进行一次磁盘 IO,B+树在非叶子节点中保存索引,一次磁盘IO就能更快锁定数据所在的范围(在内存中进行比较的速度是很快的),B+树最大的优点就是磁盘 IO 次数少。
23 回复 分享
发布于 2024-09-02 00:34 江苏
1.红黑树不能范围查询,b+树实现太复杂了,redis作者手撕不出来
22 回复 分享
发布于 2024-08-31 23:56 重庆
我觉得问这种问题真挺逆天的,我只记得小林里面有说跳表vs红黑树,这踏🐴就是开发者来了也只挤出来三个理由,而且还不是那种决定性的理由,不过确实很有道理。 凭记忆能想起来原因之一是跳表更简单,更好维护和调试。
11 回复 分享
发布于 2024-08-31 23:11 北京
可以看小林coding,我记得原因是这样的 1 为什么mysql用b+树?因为mysql基于磁盘,磁盘io很慢,b+树一个节点可以存100个数据,那么一次i9就可以比较100个数据,3次io就可以定位100w的区分度了,减少了磁盘io次数就提升了性能。 2 为什么redis用跳表,因为跳表比b+树维护索引要简单的多,每次插入节点只需要考虑需不需要向上层增加索引节点即可,不需要考率索引节点分裂的情况。 3为什么hashmap用红黑树?这个我自己想的,可能是因为红黑树不需要维护索引结点,所以没有额外的空间开销,因为不像mysql和redis都是数据库,数据量非常大,对读写性能要求都特别高。
5 回复 分享
发布于 2024-09-01 20:48 江苏
mysql不用红黑树,红黑树是二叉树,只能有两个子节点,相同数据量下层数更大,io操作次数更多
3 回复 分享
发布于 2024-08-31 23:15 广东
我觉得是 1红黑树和b+树实现比跳表复杂,而且红黑树不支持范围查询,对于b+树更多的是考虑每一个数据页节点能够尽量的占满磁盘的每一个簇,redis都是基于内存操作没有这方面的考虑 2hashmap同样是不支持范围查询 3为什么不用跳表1有说了,然后红黑树就是因为是二叉树结果,每次io能读取到的节点有限,io次数多,性能就低综合来说b+树更好
2 回复 分享
发布于 2024-09-01 08:20 广东
1. 范围查询排除红黑树,跳表和b+树都可以,底层都是索引。 2. hashmap只需要查询,红黑树做查询内存消耗低(其他两个都需要维护顺序)。 3. 范围查询排除红黑树,磁盘I/O问题,B+树是用的页来存储,I/O效率更好。
1 回复 分享
发布于 2024-09-02 17:50 重庆
m
点赞 回复 分享
发布于 2024-09-30 01:15 上海
如果redis用的红黑树又该问为什么不用跳表了😂
点赞 回复 分享
发布于 2024-09-29 14:57 湖南
用跳表是因为跳表好维护,对于redis这种速度极快但大小受限的应用来说,使用索引会不仅不会加快到哪去,反而增加了维护的成本,反比mysql,mysql的io速度很慢,但空间大小绰绰有余,至于索引大小啊维护成本啊根本不在乎,在乎的是如何快速的找到减少io次数。
点赞 回复 分享
发布于 2024-09-27 11:32 河南
为啥大家没有人考虑空间复杂度啊,跳表应该比红黑树更占地方吧?个人愚见,查询性能在内存应该差不多,就算多查一层少查一层也没什么所谓,redis为了实现简单可以忽略一些空间,但是java可能考虑gc等等的需要同时平衡时空复杂度,红黑树就显得更靠谱一些。
点赞 回复 分享
发布于 2024-09-25 23:00 天津
cy
点赞 回复 分享
发布于 2024-09-22 10:39 北京
看了大家的回答我就放心了😋
点赞 回复 分享
发布于 2024-09-05 19:09 辽宁
m
点赞 回复 分享
发布于 2024-09-02 09:15 香港
我记得redis的八股说是跳表+哈希表不用存储节点的颜色信息所以节省了空间,删除节点不用考虑树的平衡性,实现简单
点赞 回复 分享
发布于 2024-08-31 22:54 四川

相关推荐

1️⃣核心功能与定位不同不同MCP:是一种标准化协议,旨在为AI模型提供统一的接口,使其能够安全、高效地连接和调用外部工具、数据源(如数据库、API、文件系统等)。它侧重于解决AI与外部系统的对接问题,确保不同系统之间的兼容性和互操作性。Skills:是AI模型可调用的技能包或操作手册,包含特定任务的指令、流程、脚本和资源。它侧重于封装专业知识和工作流程,帮助AI模型更精准地执行特定任务,提升任务执行的效率和准确性。2️⃣解决问题不同MCP 解决怎么连、连得上:让 Agent 能调用数据库、 API 、文件系统、第三方服务,聚焦连接能力。Skills 解决怎么做、做得对:让 Agent 按步骤、按规则、按标准完成任务,聚焦执行能力。3️⃣加载与使用方式不同MCP:在启动时通常会完整加载上下文,模型需按照协议规定的格式和流程调用外部工具,输入输出格式由协议严格定义。Skills:采用渐进式披露机制,先加载元数据,仅在模型判断需要时才动态加载完整技能内容,模型需自主判断何时调用何种技能。4️⃣适用场景不同MCP:适用于需要AI模型与外部系统(如数据库、第三方API、云服务等)交互的场景,如数据查询、实时信息获取、跨平台协作等。Skills:适用于需要AI模型执行特定流程化任务的场景,如文档处理、数据分析、代码生成、合规检查等,尤其适合封装专业知识和工作流程。📳对于想求职算法岗的同学,如果想参加高质量项目辅导,提升面试能力,欢迎后台联系。
点赞 评论 收藏
分享
评论
47
395
分享

创作者周榜

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