
面试
文章平均质量分 85
面试题学习并总结
阳宗德
诚然,程序员应该重视代码,但眼里也不应该只有代码,很多代码之外的东西也很精彩。工作也是为了更好的生活,多看看身边的事,多关心身边的人,终究我们还是要回归到平凡的生活中。
我们所热爱的,就是自己的生活!
--写是为了更好的思考,坚持写作,力争更好的思考。
展开
-
面试题:如何保证消息不被重复消费?如何保证消息消费的幂等性?
Kafka 实际上有个 offset 的概念,就是每个消息写进去,都有一个 offset,代表消息的序号,然后 consumer 消费了数据之后,每隔一段时间(定时定期),会把自己消费过的消息的 offset 提交一下,表示“我已经消费过了,下次我要是重启啥的,你就让我继续从上次消费到的 offset 来继续消费吧”。能不能避免重复消费?幂等性,通俗点说,就一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。当然,如何保证 MQ 的消费是幂等性的,需要结合具体的业务来看。转载 2024-08-14 15:07:36 · 301 阅读 · 0 评论 -
高频java 面试题
Java 基础1.JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包...转载 2019-05-13 22:43:10 · 811 阅读 · 1 评论 -
面试题:消息队列-如何保证消息队列的高可用?
实际上 RabbitMQ 之类的,并不是分布式消息队列,它就是传统的消息队列,只不过提供了一些集群、HA(High Availability, 高可用性) 的机制而已,因为无论怎么玩儿,RabbitMQ 一个 queue 的数据都是放在一个节点里的,镜像集群下,也是每个节点都放这个 queue 的完整数据。,这个策略是镜像集群模式的策略,指定的时候是可以要求数据同步到所有节点的,也可以要求同步到指定数量的节点,再次创建 queue 的时候,应用这个策略,就会自动将数据同步到其他的节点上去了。转载 2024-08-09 11:54:41 · 687 阅读 · 0 评论 -
面试题:如何设计一个高并发系统?
一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。因为真正干过高并发的人一定知道,脱离了业务的系统架构都是在纸上谈兵,真正在复杂业务场景而且还高并发的时候,那系统架构一定不是那么简单的,用个 redis,用 mq 就能搞定?,大家可以仔细结合之前讲过的知识考虑一下,到时候你可以系统的把这块阐述一下,然后每个部分要注意哪些问题,之前都讲过了,你都可以阐述阐述,表明你对这块是有点积累的。读流量太多的时候,还可以加更多的从库。转载 2024-08-09 09:59:28 · 617 阅读 · 0 评论 -
面试题:分库分表-设计一个可以动态扩容缩容的分库分表方案?
如何设计可以动态扩容缩容的分库分表方案?对于分库分表来说,主要是面对以下问题:这个是你必须面对的一个事儿,就是你已经弄好分库分表方案了,然后一堆库和表都建好了,基于分库分表中间件的代码开发啥的都好了,测试都 ok 了,数据能均匀分布到各个库和各个表里去,而且接着你还通过双写的方案咔嚓一下上了系统,已经直接基于分库分表方案在搞了。那么现在问题来了,你现在这些库和表又支撑不住了,要继续扩容咋办?这个可能就是说你的每个库的容量又快满了,或者是你的表数据量又太大了,也可能是你每个库的写并发太高了,你得继续扩容。这都转载 2024-08-09 10:35:45 · 719 阅读 · 0 评论 -
面试题:如何保证缓存与数据库的双写一致性?
原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。另外更新缓存的代价有时候是很高的。是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新。但是问题在于,这个缓存到底会不会被频繁访问到?转载 2024-08-14 11:56:57 · 351 阅读 · 0 评论 -
面试题:Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?
你要写入缓存的数据,都是从 mysql 里查出来的,都得写入 mysql 中,写入 mysql 中的时候必须保存一个时间戳,从 mysql 查出来的时候,时间戳也查出来。一下当前这个 value 的时间戳是否比缓存里的 value 的时间戳要新。如果是的话,那么可以写,否则,就不能用旧的数据覆盖新的数据。每个系统通过 zookeeper 获取分布式锁,确保同一时间,只能有一个系统实例在操作某个 key,别人都不允许读和写。,可能本来应该先到的数据后到了,导致数据版本错了;转载 2024-08-14 11:23:59 · 149 阅读 · 0 评论 -
面试题:什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?该如何应对这种情况?如何处理 Redis 的穿透?
面试题面试官心理分析面试题剖析缓存雪崩缓存穿透缓存击穿。转载 2024-08-14 11:05:58 · 1318 阅读 · 0 评论 -
面试题:Redis 的持久化有哪几种方式?都有什么优缺点?持久化机制具体底层是如何实现的?
如果 Redis 挂了,服务器上的内存和磁盘上的数据都丢了,可以从云服务上拷贝回来之前的数据,放到指定的目录中,然后重新启动 Redis,Redis 就会自动根据持久化数据文件中的数据,去恢复内存中的数据,继续对外提供服务。,可以将这种完整的数据文件发送到一些远程的安全存储上去,比如说 Amazon 的 S3 云服务上去,在国内可以是阿里云的 ODPS 分布式存储上,以预定好的备份策略来定期备份 Redis 中的数据。里面,如果 Redis 宕机了再重启,内存里的数据就全部都弄丢了啊。转载 2024-08-14 14:31:47 · 235 阅读 · 0 评论