
面试题
文章平均质量分 79
学是为了不学
你学习吗?大家都在学习噢
展开
-
Java你们的限流是怎么做的
在Java中,限流(Rate Limiting)是一种控制服务访问速率的技术,以防止服务过载或被滥用。令牌桶算法是一种基于令牌(token)的限流方法,令牌以固定的速率生成,并存储在桶中。当有请求到达时,先从桶中获取令牌,如果获取到令牌,则允许访问;漏桶算法是一种基于固定速率的限流方法,请求以任意速率到达,然后放入漏桶。漏桶以固定速率处理请求,当请求速率超过漏桶的处理速率时,多余的请求将被丢弃。在指定的时间窗口内,限制访问次数。当访问次数达到阈值时,拒绝后续访问。根据实际需求,你可以选择合适的限流算法。原创 2023-07-20 20:59:15 · 626 阅读 · 0 评论 -
redis集群模式是如何保证高可用和动态扩容的?
集群中的其他节点会选举出一个新的主节点,并将原主节点的数据重新分配给其他节点。节点监控:Redis集群会定期监控各个节点的状态,并及时发现故障节点或网络异常情况。一旦发现异常,集群会立即采取相应的措施,例如触发故障转移操作或重启节点,以保证整个集群的稳定运行。节点复制:每个节点都可以配置多个从节点,从节点通过复制主节点的数据来实现数据冗余和备份。当主节点不可用时,从节点可以接替成为主节点,保证数据的持久可用性。数据分片:Redis集群将数据分片存储在多个节点上,每个节点负责管理其中一部分数据。原创 2023-07-03 21:14:13 · 1041 阅读 · 0 评论 -
redis 分布式锁实现
3、锁可以续期,应该怎么续期?通过一个线程,比较锁key的对应的value(uuid)在一定时间内是发生变化(获取定时查看锁剩余时间,小于10s,重新设置时间,类似watch机制),执行三次即可;4、删除锁必须当前线程操作,threadlocal获取和存放的value值比较;5、删除锁之前的获取比较,和删除操作应该也是原子操作,建议使用lua脚本;2、可重入的问题:判断锁key的对应的value(uuid)是否相等;1、锁的获取和锁的过期时间设置需要原子操作;原创 2023-04-26 22:21:57 · 127 阅读 · 0 评论 -
接口的幂等性,如何保证
最近跟朋友聊起这个话题,想深入了解下,于是学习总结,记录下来,此文章参考以下博客综合而来表示感谢:参考:分布式系统接口幂等性参考:高并发的核心技术-幂等的实现方案参考:什么是分布式系统中的幂等性1. 接口调用存在的问题 现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有可能在服务器处理完毕后返回结果的时候挂掉,这个时候用户端...转载 2021-06-08 23:39:38 · 713 阅读 · 0 评论 -
SpringCloud常用面试题整理
什么是SpringBoot?1、用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件)2、创建独立的spring引用程序main方法运行3、嵌入Tomcat无需部署war包,直接打成jar包nohup java -jar – & 启动就好4、简化了maven的配置4、自动配置spring添加对应的starter自动化配置SpringBoot常用的starter:1、spring-boot-starter-web(嵌入Tomcat和web开发需转载 2021-05-26 21:25:56 · 230 阅读 · 0 评论 -
Spring中Bean的作用域、是否线程安全
Spring 的 bean 作用域(scope)类型 1、singleton:单例,默认作用域。 2、prototype:原型,每次创建一个新对象。 3、request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。 4、session:会话,同一个会话共享一个实例,不同会话使用不用的实例。 5、global-session:全局会话,所有会话共享一个实例。Bean是否线程安全:最终回答:Spring中的Bean是否线程原创 2020-08-16 00:06:49 · 998 阅读 · 4 评论 -
Spring容器启动时初始化一些信息:@postConstruct
@PostConstruct和@PreDestroyimport javax.annotation.PostConstruct;import javax.annotation.PreDestroy;@PostConstruct和@PreDestroy是java自己提供的注解,不是Spring提供的注解@PostConstruct@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次。被@PostConstruct修饰的方法会在构造函...转载 2020-08-23 20:50:49 · 386 阅读 · 0 评论 -
RabbitMQ如何保证消息发送成功
1. 本篇概要RabbitMQ针对这个问题,提供了以下几个机制来解决:生产者确认 持久化 手动Ack本篇博客我们先讲解下生产者确认机制,剩余的机制后续单独写博客进行讲解。2. 生产者确认要想保证消息不丢失,首先我们得保证生产者能成功的将消息发送到RabbitMQ服务器。但在之前的示例中,当生产者将消息发送出去之后,消息到底有没有正确地到达服务器呢?如果不进行特殊配置,默认情况下发送消息的操作是不会返回任何消息给生产者的,也就是默认情况下生产者是不知道消息有没有正确的到达服务器。转载 2020-08-30 23:57:21 · 6282 阅读 · 1 评论 -
数据库的btree和hash索引
关系型数据库中,索引大多采用B/B+树来作为存储结构,而全文搜索引擎的索引则主要采用hash的存储结构,这两种数据结构有什么区别?如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;从示意图中也能看到,如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范...转载 2020-08-29 11:25:19 · 662 阅读 · 0 评论 -
我们重写一个对象的时候为什么要同时重写hashcode()和equals()方法
在创建的类不重写hashCode()和equals() 方法时,默认使用 java 提供的 java.lang.Object 下的 hashCode()和equals() 方法。> 注意:Object 的public boolean equals(Object obj)方法主要是对非空对象的引用地址的判断相同才返回true,而非对象本身的字符串内容或数值是否相同。简而言之,当且仅当 值A 和 值B 都是引用自同一个对象时,此方法才会返回true;所以,当我们重写一个对象,重写了equals()方原创 2020-08-24 21:01:40 · 447 阅读 · 0 评论