关于黑马点评的面试问题

点赞排行用MySQL可以吗?
专门用Redis保存每一个博客的点赞详情会不会浪费内存?
如果像抖音那种一条视频几百万甚至上千万的点赞如果要做点赞排行也用Redis吗?如何优化?
求大佬分享一下想法
全部评论
是这样的,技术不是说一个好一个不好,技术是需要选择的,通常选择一个技术会解决另外一个技术的问题但也带来了新的问题。正如上述,使用 redis 实现点赞,是因为点赞可以疯狂点击,需要较高响应速度,redis 基于内存很好的实现这点,但是呢,随着点赞这个 key 的增大,会占用很多内存,引起新的大 key 问题,正如 MySQL 大库问题需要分库分表思想一样,大 key 问题也可以拆分成多个小 key,或者说客户端限制大 key 请求,尽量只请求大 key 中的一部分数据...如此深入去思考,会发现技术是做不到完美的,只会在带来一部分优点的同时也带来一部分缺点。
66 回复 分享
发布于 2023-09-04 21:13 江西
点赞排行榜也可以用MySQL,不过你要顾及到性能问题、写入延迟、数据一致性等问题,其实在点赞方面还是比较建议考虑使用缓存; 如果使用Redis,确实会占用较多的内存。如果关注内存的使用情况,可以考虑以下两种方案来减少内存占用: 1.用Redis的Bitmaps数据结构来保存点赞详情。然后从Bitmaps的数据结构角度向面试官阐述如何解决内存占用,这里简单说一下,Bitmaps是以位的形式存储数据,可以有效地压缩存储空间。 2.使用Redis的HyperLogLog数据结构来统计点赞数量。 如果点赞数量非常庞大,可能会导致内存占用过大。优化的方案可以从下面几点来考虑: 1.使用redis分片集群,实现分布式存储,将点赞信息分散到多个Redis节点上,减轻单个节点的负载压力。 2.设置合理的过期时间或定期清理过期的点赞数据(因为其实对于一个点赞详细来说,我们应该进行取舍,其实前端页面只需要展示部分数据,要么保存最新的一批点赞详情,要么保存一批最旧的--也就是最先点赞的人),避免占用过多的内存空间。 这是大致的一些思路吧,正如一楼老哥说的,技术不是说一个好一个不好,技术是需要选择的,通常选择一个技术会解决另外一个技术的问题但也带来了新的问题,我认为面试官抛出这么一个问题其实要的是我们的思路,在面试中如果有一个比较好的思路并分开深入阐述它的原理,我认为对于面试来说也是一个不错的加分点。 个人瞥见,如有问题,也请指出,多谢。
27 回复 分享
发布于 2023-09-26 10:47 广东
m
3 回复 分享
发布于 2023-09-13 17:45 广东
m
2 回复 分享
发布于 2023-09-13 15:12 重庆
m
1 回复 分享
发布于 2023-09-06 11:56 浙江
m
1 回复 分享
发布于 2023-09-06 00:06 北京
点赞 回复 分享
发布于 06-06 19:20 河南
m
点赞 回复 分享
发布于 04-27 20:41 上海
m
点赞 回复 分享
发布于 04-13 12:36 北京
m
点赞 回复 分享
发布于 04-07 02:02 江西
m
点赞 回复 分享
发布于 2024-12-22 18:06 陕西
m
点赞 回复 分享
发布于 2024-11-21 15:30 河北
m
点赞 回复 分享
发布于 2024-06-25 11:24 湖南
m
点赞 回复 分享
发布于 2024-04-15 15:43 重庆
M
点赞 回复 分享
发布于 2024-04-01 16:35 河北
m
点赞 回复 分享
发布于 2024-03-23 12:17 四川
m
点赞 回复 分享
发布于 2024-03-12 00:01 辽宁
m
点赞 回复 分享
发布于 2024-03-08 18:57 广东
m
点赞 回复 分享
发布于 2024-02-21 17:51 安徽
m
点赞 回复 分享
发布于 2024-02-06 21:36 湖北

相关推荐

一、关于看资料还是看视频以下仅代表笔者个人看法,仅供参考。笔者主要推荐通过资料进行学习,如果有不理解的地方再配合视频进行学习。因为笔者认为看资料的效率会更高,接收的知识更成体系,防止看了视频还是一知半解的状态。个人推荐的资料如下(以freertos为例): 《FreeRTOS开发手册》、《CM3权威指南》、 《嵌入式实时操作系统原理及应用》、 《FreeRTOS实时内核使用指南》《操作系统精髓与涉及原理》(这是本书,可自行购买);此处先把所有资料列出来,后续再讲解什么时候用到某个资料(有需要上述资料的同学,私信我即可领取)。除此之外,多说一点的是:个人建议先补好C语言基础知识和数据结构的基础知识再来学习RTOS。因为RTOS里边存在大量的指针高阶用法,如函数指针/指针函数/二维指针等;以及数据结构,最典型的就是链表,Freertos里边还涉及到环形链表。因此,先将这些基础打牢固,再来学RTOS的时候就更加水到渠成一些。二、RTOS学习路线0基础的同学建议按照以下步骤走:1、学习任务基础知识:先打开书《操作系统》 (百度也行)了解一下什么是操作系统?为什么要用操作系统?个人习惯是再用一个东西之前, 需要了解为什么。其次打开《 FreeRTOS开发手册》以及《freertos内核使用指南》,学习任务的基础知识。包括什么是任务、任务的几种状态、任务优先级、任务堆栈、TCB及简单了解任务的调度等。2、学习移植RTOS:还是打开Freertos开发手册,跟着教程一步一步移植操作系统。这里的移植不仅是让你把源码移植进工程里,还需要你明白如何进行相应的中端配置、移植文件的修改、 以及内核裁剪的系统配置(可能到这一步的时候,有些东西你不知道为什么,先不用管,后边学了原理再来看)。3、学习简单的rtos使用:打开Freertos内核使用指南或者freertos开发手册,学习rtos中API 的参数、作用、以及使用示例。这里的API至少了解任务的创建、删除、挂起、延时(至少知道延时的时候会发生任务调度)、信号量等。上述目的就是让你先学会用,用的过程中就会自然而然的出现问题,接下来就知道该去探究原理了。4、学习rtos原理:打开《CM3权威指南》,学习以下重点知识即可:第二章、第三章(寄存器组、control寄存器等)、第7章(SvC和PendSV重点、其他的也是重点)、第8章(Systick定时器是重点,其他的也是重点)、 第9章主要了解中断入栈时push进哪些寄存器、 取向量、更新寄存器、异常返回等内容即可。4.1、了解完CM3架构的基础知识后,打开《嵌入式实时操作系统原理及应用》,主要了解任务调度算法,学习任务到底是如何切换的,需深刻理解任务切换实际上为堆栈指针切换这句话。ps:笔者在小红书发布了freertos学习合集,也可以配合起来看看,其中发布了任务切换原理的视频讲解。5、看RTOS的源码:此时之前学习的c基础和数据结构基础就可以派上用场了。看源码可以直接在工程里打开代码看,也可以打开《FreeRTOS开发手册》,里边也有相关源码的解析。建议看源码的顺序按照以下来:创建任务函数--开启多任务调度函数(看一下任务切换原理的代码怎么实现的)--队列--信号量等(也可以配合freertos内核使用指南)接下来需要重点看的是systick中断函数以及delay函数源码,主要了解Systick怎么作为rtos 时钟使用的,delay函数怎么实现任务切换的, 任务如何从阻塞态到就绪态的、相对延时和绝对延时的区别等。ps:到这一步也可以选择做一些rtos项目帮助理解各个API的用法、原理。要做到分析代码的执行时序是怎样的。6、学习rtos 的内存管理以及空闲任务:FreertoS开发手册就有详细介绍,需要了解什么是内存碎片,各种内存管理方法的优缺点是什么、空闲任务的作用,此处也要去看源码怎么实现的。7、进阶:继续学习FreeRTOS的软件定时器、 低功耗Tickless模式及时间标志组等。了解清楚原理,如何使用,建议也分析一下源码,看如何实现的。最后,本次分享就到这里,上述只是笔者个人的一些建议,希望能给大家带来一定的参考。找不到上述资料的可私信我领取。
点赞 评论 收藏
分享
评论
47
449
分享

创作者周榜

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