自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 Redis 中缓存过期该如何剔除?RDB 和 AOF 又是指的什么?

在Redis中,还有一种称为"TTL" (Time To Live) 的过期策略,可以设置每个key的过期时间,超过这个时间后,数据会被自动删除。

2023-05-29 22:26:30 224

原创 Spring MVC的设计原理

3.处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet .7. HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet .10. DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。2. DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

2023-03-16 22:15:41 162

转载 常见排序_插入排序

直接看转载文章常见排序_插入排序

2023-03-08 17:47:20 174

转载 常见排序_冒泡排序

直接查看转载文章,浅显易懂https://blog.csdn.net/dkm123456/article/details/112554292

2023-03-08 17:41:23 94

原创 cookie和session的区别和联系

1·cookie数据存放在客户的浏览器上,session数据是放在服务器上。2.很多浏览器都限制一个站点最多保存20个cookie,单个cookie保存的数据不能超过4k.3.cookie并不是很安全的。别人可以分析存放在本地的cookie,并进行cookie欺骗,考虑到安全应当使用session。4.可以考虑将登录等重要信息存放在session,其他信息如果需要保留,可以放在cookie中。5.session在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面

2023-02-27 18:59:51 216

原创 List 和 Set 的区别.

List :有序,按对象插入的顺序保存对象,可重复,允许多个 Null 元素对象,可以使用 terator 取出所有元素,在逐一遍历,还可以使用 get ( int index )获取指定下标的元素.Set :无序,不可重复,最多允许有一个 Null 元素对象,取元素时只能用 iterator 接口取得所有元素,在逐一遍历各个元素

2023-02-22 09:00:18 66

原创 ==和 equals 方法的区别

==:如果是基本数据类型,比较是值,如果是引用类型,比较的是引用地址.equals :具体看各个类重写 equals 方法之后的比较逻辑,比如 String 类,虽然是引用类型,但是 String 类中重写了 equals 方法,方法内部 t 比否全部相等。

2023-02-22 09:00:09 54

原创 RocketMQ 的底层实现原理

RocketMQ 由 NameServer 集群、 Producer 集群、 Consumer 集群、 Broker 集群组成,消息生产和消费的大致原理如下:1.Broker在启动的时候向所有的 NameServer 注册,并保持长连接,每30s发送一次心跳2.Producer在发送消息的时候从 NameServer 获取 Broker 服务器地址,根据负载均衡算法选择一台服务器来发送消息3.Conusmer消费消息的时候同样从 NameServer 获取 Broker 地址,然后主动拉取消息来消费

2023-02-22 09:00:00 162

原创 Spring Cloud 和 Dubbo 有哪些区别?

Spring Cloud 是一个微服务框架,提供了微服务领域中的很多功能组件, Dubbo 一开始是一个 RPC 调用框架,核心是解决服务调用间的问题, Spring Cloud 是一个大而全的框架, Dubbo 则更侧重于服务调用,所以 Dubbo 所提供的功能没有 Spring Cloud 全面,但是 Dubbo 的服务调用性能比 Spring Cloud 高,不过 Spring Cloud 和 Dubbo 并不是对立的,是可以结合起一起使用的。|

2023-02-22 08:59:27 75

原创 Dubbo 的架构设计是怎样的?

Dubbo 中的架构设计是非常优秀的,分为了很多层次,并且每层都是可以扩展的,比如:1.Proxy服务代理层,支持 JDK 动态代理、 javassist 等代理机制2.Registry注册中心层,支持 Zookeeper 、 Redis 等作为注册中心3.Protocol远程调用层,支持 Dubbo 、 Htpp 等调用协议4.Transport网络传输层,支持 netty 、 mina 等网络传输框架5.Serialize数据序列化层,支持 ISON 、 Hessian 等序列化机制

2023-02-22 08:59:18 71

原创 Kafka 的 Pull 和 Push 分别有什么优缺点

1.pull表示消费者主动拉取,可以批量拉取,也可以单条拉取,所以 pull 可以由消费者自己控制,根据自己的消息处理能力来进行控制,但是消费者不能及时知道是否有消息,可能会拉到的消息为空2.push表示 Broker 主动给消费者推送消息,所以肯定是有消息时才会推送,但是消费者不能按自己的能力来消费消息,推过来多少消息,消费者就得消费多少消息,所以可能会造成网络堵塞,消费者压力大等问题

2023-02-22 08:59:17 391

原创 JVM 有哪些垃圾回收算法?

1.标记清除算法:a .标记阶段:把垃圾内存标记出来b .清除阶段:直接将垃圾内存回收。c .这种算法是比较简单的,但是有个很严重的问题,就是会产生大量的内存碎片。2.复制算法:为了解决标记清除算法的内存碎片问题,就产生了复制算法,复制算法将内存分为大小相等的两半,每次只使用其中一半。垃圾回收时,将当前这一块的存活对象全部拷贝到另一半,然后当前这一半内存就可以直接清除。这种算法没有内存碎片,但是他8的问题就在于浪费空间,而且,他的效率跟存活对象的个数有关。3.标记压缩算法:为了解决复制算法的缺陷,

2023-02-22 08:59:11 115

原创 hashCode ()与 equals ()之间的关系

在 Java 中,每个对象都可以调用自己的hashCode0方法得到自己的哈希值( hashCode ),相当于对象的指纹信息,通常来说世界上没有完全相同的两个指纹,但是在 Java 中做不到这么绝对,但是我们仍然可以利用 hashCode 来做一些提前的判断,比如:1.如果两个对象的 hashCode 不相同,那么这两个对象肯定不同的两个对象2.如果两个对象的 hashCode 相同,不代表这两个对象一定是同一个对象,也可能是两个对象3.如果两个对象相等,那么他们的 hashCode 就一定相同在

2023-02-21 08:38:32 207

原创 Zookeeper 集群中节点之间数据是如何同步的

1.首先集群启动时,会先进行领导者选举,确定哪个节点是 Leader ,哪些节点是 Follower 和 Observer2.然后 Leader 会和其他节点进行数据同步,采用发送快照和发送 Diff 日志的方式3.集群在工作过程中,所有的写请求都会交给 Leader 节点来进行处理,从节点只能处理读请求4.Leader节点收到一个写请求时,会通过两阶段机制来处理5.Leader节点会将该写请求对应的日志发送给其他 Follower 节点,并等待 Follower 节点持久化日志成功6.Follo

2023-02-21 08:32:48 1341

原创 Innodb 是如何实现事务的

Innodb 通过 Buffer Pool , LogBuffer , Redo Log , Undo Log 来实现事务,以一个 update 语句为例:1.Innodb在收到一个 update 语句后,会先根据条件找到数据所在的页,并将该页缓存在 Buffer Pool 中2.执行 update 语句,修改 Buffer Pool 中的数据,也就是内存中的数据3.针对 update 语句生成一个 RedoLog 对象,并存入 LogBuffer 中4.针对 update 语句生成 undolog

2023-02-21 08:31:07 239

原创 最左前缀原则是什么

当一个 SQL 想要利用索引是,就一定要提供该索引所对应的字段中最左边的字段,也就是排在最前面的字段,比如针对 a , b , c 三个字段建立了一个联合素引,那么在写一个 sql 时就一定要提供 a 字段的条件,这样才能用到联合索引,这是由于在建立 a , b , c 三个字段的联合索引时,底层的 B +树是按照 a , b , c 三个字段从左往右去比较大小进行排序的,所以如果想要利用 B +树进行快速查找也得符合这个规则

2023-02-21 08:30:30 103

原创 B 树和 B +树的区别,为什么 Mysql 使用 B +树

B 树的特点:1.节点排序2.一个节点了可以存多个元素,多个元素也排序了B +树的特点:1.拥有8树的特点2.叶子节点之间有指针3.非叶子节点上的元素在叶子节点上都冗余了,也就是叶子节点中存储了所有的元素,并且排好顺序Mysql 索引使用的是 B +树,因为索引是用来加快查询的,而 B +树通过对数据进行排序所以是可以提高查询速度的,然后通过一个节点中可以存储多个元素,从而可以使得 B +树的高度不会太高,在 Mysql 中一个 Innodb 页就是一个 B +树节点,一个 Innodb 页默

2023-02-21 08:30:14 106

原创 Netty 是什么?和 Tomcat 有什么区别?特点是什么?

Netty 是一个基于 NIO 的异步网络通信框架,性能高,封装了原生 NIO 编码的复杂度,开发者可以直接使用 Netty 来开发高效率的各种网络服务器,并且编码简单。 Tomcat 是一个 Web 服务器,是一个 Servlet 容器,基本上 Tomcat 内部只会运行 Servlet 程序,并处理 HTTP 请求,而 Netty 封装的是底层10模型,关注的是网络数据的传输,而不关心具体的协议,可定制性更高。 Netty 的特点:1.异步、 NIO 的网络通信框架2.高性能3.高扩展,高定制性

2023-02-21 08:28:27 370

原创 缓存穿透、缓存击穿、缓存雪崩分别是什么

缓存中存放的大多都是热点数据,目的就是防止请求可以直接从缓存中获取到数据,而不用访问 Mysql 。1.缓存雪崩:如果缓存中某一时刻大批热点数据同时过期,那么就可能导致大量请求直接访问 Mysql 了,解决办法就是在过期时间上增加一点随机值,另外如果搭建一个高可用的 Redis 集群也是防止缓存雪崩的有效手段2.缓存击穿:和缓存雪崩类似,缓存雪崩是大批热点数据失效,而缓存击穿是指某一个热点 key 突然失效,也导致了大量请求直接访问 Mysql 数据库,这就是缓存击穿,解决方案就是考虑这个热点 key

2023-02-21 08:28:07 97

原创 TCP 的三次握手和四次挥手

TCP 协议是7层网络协议中的传输层协议,负责数据的可靠传输。在建立 TCP 连接时,需要通过三次握手来建立,过程是:1.客户端向服务端发送一个 SYN2.服务端接收到 SYN 后,给客户端发送一个 SYN _ ACK3.客户端接收到 SYN _ ACK 后,再给服务端发送一个 ACK 在断开 TCP 连接时,需要通过四次挥手来断开,过程是:1.客户端向服务端发送 FIN2.服务端接收 FIN 后,向客户端发送 ACK ,表示我接收到了断开连接的请求,客户端你可以不发数据了,不过服务端这边可能还

2023-02-21 08:28:00 44

原创 SOA 、分布式、微服务之间有什么关系和区别?

1.分布式架构是指将单体架构中的各个部分拆分,然后部署不同的机器或进程中去, SOA 和微服务基本上都是分布式架构师2.SOA是一种面向服务的架构,系统的所有服务都注册在总线上,当调用服务时,从总线上查找服务信息,然后调用3.微服务是一种更彻底的面向服务的架构,将系统中各个功能个体抽成一个个小的应用程序,基本保持一个应用对应的一个服务的架构

2023-02-21 08:26:38 344

原创 什么是服务熔断?什么是服务降级?区别是什么?

1.服务熔断是指,当服务 A 调用的某个服务8不可用时,上游服务 A 为了保证自己不受影响,从而不再调用服务 B ,直接返回一个结果,减轻服务 A 和服务 B 的压力,直到服务 B 恢复。2.服务降级是指,当发现系统压力过载时,可以通过关闭某个服务,或限流某个服务来减轻系统压力,这就是服务降级。相同点:1.都是为了防止系统崩溃2.都让用户体验到某些功能暂时不可用不同点:熔断是下游服务故障触发的,降级是为了降低系统负载

2023-02-21 08:26:26 1416

原创 什么是服务雪崩?什么是服务限流?

1.当服务 A 调用服务 B ,服务 B 调用 C ,此时大量请求突然请求服务 A ,假如服务 A 本身能抗住这些请求,但是如果服务 C 抗不住,导致服务 C 请求堆积,从而服务 B 请求堆积,从而服务 A 不可用,这就是服务雪崩,解决方式就是服务降级和服务熔断。2.服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,在秒杀中,限流是非常重要的。

2023-02-20 12:23:03 119

原创 BIO 、 NIO 、 AIO 分别是什么

1.BIO:同步阻塞 IO ,使用 BIO 读取数据时,线程会阻塞住,并且需要线程主动去查询是否有数据可读,并且需要处理完一个 Socket 之后才能处理下一个 Socket2.NIO:同步非阻塞 IO ,使用 NIO 读取数据时,线程不会阻塞,但需要线程主动的去查询是否有 IO 事件3.AIO:也叫做 NIO 2.0,异步非阻塞 IO ,使用 AIO 读取数据时,线程不会阻塞,并且当有数据可读时会通知给线程,不需要线程主动去查询

2023-02-20 12:21:52 149

原创 Netty 的高性能体现在哪些方面

NIO模型,用最少的资源做更多的事情。2.内存零拷贝,尽量减少不必要的内存拷贝,实现了更高效率的传输。3.内存池设计,申请的内存可以重用,主要指直接内存。内部实现是用一颗二叉查找树管理内存分配情况。4.串行化处理读写:避免使用锁带来的性能开销。即消息的处理尽可能再同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。表面上看,串行化设计似乎 CPU 利用率不高,并发程度不够。但是,通过调整 NIO 线程池的线程参数,可以同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相

2023-02-20 12:19:15 138

原创 Redis 有哪些数据结构?分别有哪些典型的应用场景?

Redis 的数据结构有:1.字符串:可以用来做最简单的数据缓存,可以缓存某个简单的字符串,也可以缓存某个 json 格式的字符串, Redis 分布式锁的实现就利用了这种数据结构,还包括可以实现计数器、 Session 共享、分布式 ID2.哈希表:可以用来存储一些 key - value 对,更适合用来存储对象3.列表: Redis 的列表通过命令的组合,既可以当做栈,也可以当做队列来使用,可以用来缓存类似微信公众号、微博等消息流数据4.集合:和列表类似,也可以存储多个元素,但是不能重复,集合可

2023-02-20 12:16:21 48

原创 Redis 分布式锁底层是如何实现的?

1.首先利用 setnx 来保证:如果 key 不存在才能获取到锁,如果 key 存在,则获取不到锁2.然后还要利用 lua 脚本来保证多个 redis 操作的原子性3.同时还要考虑到锁过期,所以需要额外的一个看门狗定时任务来监听锁是否需要续约4.同时还要考虑到 redis 节点挂掉后的情况,所以需要采用红锁的方式来同时向 N /2+1个节点申请锁,都申请到了才证明获取锁成功,这样就算其中某个 redis 节点挂掉了,锁也不能被其他客户端获取到

2023-02-20 12:13:01 178

原创 Redis 主从复制的核心原理

Redis 的主从复制是提高 Redis 的可靠性的有效措施,主从复制的流程如下:1.集群启动时,主从库间会先建立连接,为全量复制做准备2.主库将所有数据同步给从库。从库收到数据后,在本地完成数据加载,这个过程依赖于内存快照 RDB3.在主库将数据同步给从库的过程中,主库不会阻塞,仍然可以正常接收请求。否则, redis 的服务就被中断了。但是,这些请求中的写操作并没有记录到刚刚生成的 RDB 文件中,为了保证主从库的数据一致性,主库会在内存中用专门的 replication buffer ,记录 R

2023-02-20 12:11:03 94

原创 Mysql 锁有哪些,如何理解

按锁粒度分类:1.行锁:锁某行数据,锁粒度最小,并发度高2.表锁:锁整张表,锁粒度最大,并发度低3.间隙锁:锁的是一个区间还可以分为:1.共享锁:也就是读锁,一个事务给某行数据加了读锁,其他事务也可以读,但是不能写2.排它锁:也就是写锁,一个事务给某行数据加了写锁,其他事务不能读,也不能写还可以分为:1.乐观锁:并不会真正的去锁某行记录,而是通过一个版本号来实现的2.悲观锁:上面所的行锁、表锁等都是悲观锁在事务的隔离级别实现中,就需要利用所来解决幻读

2023-02-20 12:09:07 97

原创 Mysql 慢查询该如何优化?

1.检查是否走了索引,如果没有则优化 SQL 利用索引2.检查所利用的索引,是否是最优索引3.检查所查字段是否都是必须的,是否查询了过多字段,查出了多余数据4.检查表中数据是否过多,是否应该进行分库分表了5.检查数据库实例所在机器的性能配置,是否太低,是否可以适当增加资源

2023-02-20 12:07:14 44

原创 消息队列有哪些作用

1.解耦:使用消息队列来作为两个系统直接的通讯方式,两个系统不需要相互依赖了2.异步:系统 A 给消费队列发送完消息之后,就可以继续做其他事情了3.流量削峰:如果使用消息队列的方式来调用某个系统,那么消息将在队列中排队,有消费者自己控制消费速度

2023-02-20 12:04:24 105

原创 死信队列是什么?延时队列是什么?

1.死信队列也是一个消息队列,它是用来存放那些没有成功消费的消息的,通常可以用来作为消息重试2.延时队列就是用来存放需要在指定时间被处理的元素的队列,通常可以用来处理一些具有过期性操作的业务,比如十分钟内未支付则取消订单

2023-02-20 12:03:03 59

原创 Kafka 为什么比 RocketMQ 的吞吐量要高

Kafka 的生产者采用的是异步发送消息机制,当发送一条消息时,消息并没有发送到 Broker 而是缓存起来,然后直接向业务返回成功,当缓存的消息达到一定数量时再批量发送给 Broker 。这种做法减少了网络 io ,从而提高了消息发送的吞吐量,但是如果消息生产者宕机,会导致消息丢失,业务出错,所以理论上 kafka 利用此机制提高了性能却降低了可靠性。

2023-02-19 23:10:25 535

原创 消息队列如何保证消息可靠

传输消息可靠传输代表了两层意思,既不能多也不能少。1.为了保证消息不多,也就是消息不能重复,也就是生产者不能重复生产消息,或者消费者不能重复消费消息2.首先要确保消息不多发,这个不常出现,也比较难控制,因为如果出现了多发,很大的原因是生产者自己的原因,如果要避免出现问题,就需要在消费端做控制3.要避免不重复消费,最保险的机制就是消费者实现幂等性,保证就算重复消费,也不会有问题,通过幂等性,也能解决生产者重复发送消息的问题4.消息不能少,意思就是消息不能丢失,生产者发送的消息,消费者一定要能消费到,对

2023-02-19 23:08:23 682

原创 JDK 、 JRE 、 JVM 之间的区别

JDK ( ava SE Development Kit ), Java 标准开发包,它提供了编译、运行 Java 程序所需的各种工具和资源,包括 Java 编译器、 Java 运行时环境,以及常用的 Java 类库等.JRE ( Java Runtime Environment ), Java 运行环境,用于运行 Java 的字节码文件。 JRE 中包括了 JVM 以及 IVM 工作所需要的类库,普通用户而只需要安装 JRE 来运行 Java 程序,而程序开发者必须安装 JDK 来编译、调试程序。JV

2023-02-19 23:06:08 210

原创 重载和重写的区别

.重载( Overload ):在一个类中,同名的方法如果有不同的参数列表(比如参数类型不同、参数个数不同)则视为重载。.重写( Override ):从字面上看,重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型都相同(子类中方法的返回值可以是父类中方法返回值的子类)的情况下,对方法体进行修改,这就是重写。但要注意子类方法的访问修饰权限不能小于父类的。

2023-02-19 23:04:08 43

原创 Dubbo 是如何完成服务引入的?

1.当程序员使用@ Reference 注解来引入一个服务时, Dubbo 会将注解和服务的信息解析出来,得到当前所引用的服务名、服务接口是什么2.然后从注册中心进行查询服务信息,得到服务的提供者信息,并存在消费端的服务目录中3.并绑定一些监听器用来监听动态配置中心的变更4.然后根据查询得到的服务提供者信息生成一个服务接口的代理对象,并放入 Spring 容器中作为 Bean

2023-02-18 19:41:25 144 1

原创 Dubbo 是如何完成服务导出的?

1.首先 Dubbo 会将程序员所使用的@ DubboService 注解或@ Service 注解进行解析得到程序员所定义的服务参数,包括定义的服务名、服务接口、服务超时时间、服务协议等等,得到一个 ServiceBean 。2.然后调用 ServiceBean 的 export 方法进行服务导出3.然后将服务信息注册到注册中心,如果有多个协议,多个注册中心,那就将服务按单个协议,单个注册中心进行注册4.将服务信息注册到注册中心后,还会绑定一些监听器,监听动态配置中心的变更5.还会根据服务协议启动

2023-02-18 19:38:51 229

原创 Dubbo 支持哪些负载均衡策略

1.随机:从多个服务提供者随机选择一个来处理本次请求,调用量越大则分布越均匀,并支持按权重设置随机概率2.轮询:依次选择服务提供者来处理请求,并支持按权重进行轮询,底层采用的是平滑加权轮询算法3.最小活跃调用数:统计服务提供者当前正在处理的请求,下次请求过来则交给活跃数最小的服务器来处理4.一致性哈希:相同参数的请求总是发到同一个服务提供者

2023-02-18 19:35:49 106

原创 Zookeeper 中的领导者选举的流程是怎样的?

对于 Zookeeper 集群,整个集群需要从集群节点中选出一个节点作为 Leader ,大体流程如下:1.集群中各个节点首先都是观望状态,一开始都会投票给自己,认为自己比较适合作为 leader2.然后相互交互投票,每个节点会收到其他节点发过来的选票,然后 pk ,先比较 zxid , zxid 大者获胜, zxid 如果相等则比较 myid , myid 大者获胜3.一个节点收到其他节点发过来的选票,经过 PK 后,如果 PK 输了,则改票,此节点就会投给 zxid 或 myid 更大的节点,并将

2023-02-17 18:33:57 432

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除