自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java网络通信—UDP

使用udp通信,需要三个东西:数据本体、通道、数据包装工具。

2024-09-27 22:03:10 97

原创 线程安全/线程池笔记

线程安全问题一般出现在并发度比较高的环境中,如存钱取钱问题等,解决该类问题一般有几种办法。

2024-09-22 19:24:43 230

原创 IO流笔记

Java中的IO操作大体能分成两种:输出流和输入流,根据使用的流的方式,又可分为字符流和字节流。

2024-09-22 16:18:36 328

原创 mysql笔记—sql性能分析

表示 SELECT 的类型,常见的取值有SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBOUERY(SELECT/WHERE之后包含了子查询)等。表示连接类型,性能由好到差的连接类型为NULL、system、const(主键等唯一索引)、eq_ref、ref(非唯一索引)、range、index(全索引扫描)、all(全表扫描)用了覆盖索引,也就是说,查询所需的数据可以直接从索引中获取。

2024-09-20 23:58:11 348

原创 Java集合笔记

1、如果希望记住元素的添加顺序,需要存储重复的元素,又要频繁的根据索引查询数据?用集合(有序、可重复、有索引),底层基于数组的。(常用)2、如果希望记住元素的添加顺序,且增删首尾数据的情况较多?用LinkedList集合(有序、可重复、有索引),底层基于双链表实现的。3.如果不在意元素顺序,也没有重复元素需要存储,只希望增删改查都快?用集合(无序,不重复,无索引),底层基于哈希表实现的。(常用)4.如果希望记住元素的添加顺序,也没有重复元素需要存储,且希望增删改查都快?

2024-09-18 10:05:06 404

原创 redis底层—通信协议RESP

2024-09-17 10:01:35 86

原创 redis底层—网络模型

select模式存在的三个问题:能监听的FD最大不超过1024每次select都需要把所有要监听的FD都拷贝到内核空间每次都要遍历所有FD来判断就绪状态poll模式的问题:poll利用链表解决了select中监听FD上限的问题,但依然要遍历所有FD,如果监听较多,性能会下降epoll模式中如何解决这些问题的?1.基于epoll实例中的红黑树保存要监听的FD,理论上无上限,而且增删改查效率都非常高,性能不会随监听的FD数量增多而下降。

2024-09-09 15:18:44 603

原创 redis底层—数据结构

1.获取字符串长度的时间复杂度为0(1)3.减少内存分配次数。

2024-09-09 13:29:33 413

原创 Redis分布式锁

【代码】Redis分布式锁。

2024-09-09 12:07:21 305

原创 Redis命令行客户端操作

Redis 是一个开源的内存数据结构存储系统,常用于缓存、消息队列、实时分析等场景。Redis 提供了丰富的命令行工具(redis-cli)来操作数据。

2024-09-08 16:43:15 1160

原创 mysql笔记—进阶

2.innodb存储引擎InnoDB是一种兼顾高可靠性和高性能的通用存储引擎在 MySOL 5.5 之后,InnoDB是默认的 MySOL 存储引擎。特点:DML操作遵循ACID模型,支持;,提高并发访问性能;FOREIGN KEY约束,保证数据的完整性和正确性;

2024-09-08 14:57:58 427

原创 mysql笔记—基础

DDL(数据库对象操作)、DML(增删改)、DQL(查询)、DCL(用户和权限操作)

2024-09-07 18:48:01 420

原创 简单理解Java中继承类和实现接口的区别

实现接口是当前类需要用到接口的所有抽象方法,同时自己可能还需要新增新的方法。继承类是当子类需要用到父类的方法,同时自己可能还需要新增新的方法时使用;

2024-09-05 23:11:48 239

原创 seata中TCC的使用

【代码】seata中TCC的使用。

2024-08-15 12:56:12 113

原创 部署及使用seata

​ Bean,以及pom中包含了必要的依赖,特别是数据库驱动和 Spring Data 相关的依赖。这个问题是因为在nacos里注册的网段是内网,而外部服务无法访问。​ Bean 时遇到了问题,确保。这个错误信息表明在创建。

2024-08-15 11:52:52 546

原创 关于前端如何上传文件/服务器如何接受并保存

【代码】关于前端如何上传文件/服务器如何接受并保存。

2024-08-07 21:53:28 281

原创 一个关于线程问题的案例:在线投票系统

4. **线程通信(wait/notify)**:在`monitorVoteResult`方法中使用`wait`和`notifyAll`来实现投票结果的实时更新和通知。3. **并发集合(ConcurrentHashMap)**:使用`ConcurrentHashMap`来记录已经投票的用户,保证高效且线程安全。2. **同步机制(synchronized)**:在`notifyVoteResult`方法中使用同步块来确保投票结果的通知是线程安全的。4. **统计投票结果**:实时统计当前的投票结果。

2024-07-29 16:54:18 309

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

2.服务端接收FN后,向客户端发送ACK,表示我接收到了断开连接的请求,客户端你可以不发数据了,不过服务端这边可能还有数据正在处理。3.服务端处理完所有数据后,向客户端发送FIN,表示服务端现在可以断开连接。4.客户端收到服务端的FIN,向服务端发送ACK,表示客户端也会断开连接了。TCP协议是7层网络协议中的传输层协议,负责数据的可靠传输。3.客户端接收到SYN_ACK后,再给服务端发送一个ACK。2.服务端接收到SYN后,给客户端发送一个SYN_ACK。1.客户端向服务端发送一个SYN。

2024-07-23 16:17:33 362

原创 消息队列有哪些作用?消息队列如何保证消息可靠传输?

6.broker要等待消费者真正确认消费到了消息时才删除掉消息,这里通常就是消费端ack机制,消费者接收到一条消息后,如5.果确认没问题了,就可以给broker发送一个ack,broker接收到ack后才会删除消息。2.首先要确保消息不多发,这个不常出现,也比较难控制,因为如果出现了多发,很大的原因是生产者自己的原因,如果要避免出现问题,就需要在消费端做控制。4.消息不能少,意思就是消息不能丢失,生产者发送的消息,消费者一定要能消费到,对于这个问题,就要考虑两个方面。

2024-07-23 16:16:22 336

原创 Redis和mysql如何保持数据一致?

3.延时双删,步骤是:先删除Redis缓存数据,再更新Mysql,延迟几百毫秒再删除Redis缓存数据,这样就算在更新Mysq时,有其他线程读了Mysal,把老数据读到了Redis中,那么也会被删除掉,从而把数据保持一致。下性能较低,而且仍然会出现数据不一致的问题,比如线程1删除了Redis 缓存数据,正在更新Mysql,此时另外一个查询再查询,那么就会把Mysql中老数据又查到Redis中。1.先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不一致。

2024-07-22 17:18:33 672

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

否则,redis的服务就被中断了。为了保证主从库的数据一致性,主库会在内存中用专门的replication buffer,记录RDB文件生成收到的所有写操作。4.最后,也就是第三个阶段,主库会把第二阶段执行过程中新收到的写命令,再发送给从库。具体的操作是,当主库完成RDB文件发送后,就会把此时replocation buffer中修改操作发送给从库,从库再执行这些操作。5. 后续主库和从库都可以处理客户端读操作,写操作只能交给主库处理,主库接收到写操作后,还会将写操作发送给从库,实现增量同步。

2024-07-21 15:49:07 247

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

1.字符串:可以用来做最简单的数据,可以缓存某个简单的字符串,也可以缓存某个json格式的字符串,Redis分布式锁的实现就利用了这种数据结构,还包括可以实现计数器、Session共享、分布式ID。3.列表:Redis的列表通过命令的组合,既可以当做栈,也可以当做队列来使用,可以用来缓存类似微信公众号、微博等消息流数据。

2024-07-21 13:58:26 156

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

4.串行化处理读写:避免使用锁带来的性能开销。即消息的处理尽可能再同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。但是,通过调整NIO线程池的线程参数,可以同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相比一个队里-多个工作线程模型性能更优。6.高效并发编程的体现:volatile的大量、正确使用;3.内存池设计,申请的内存可以重用,主要指直接内存。2.内存零拷贝,尽量减少不必要的内存拷贝,实现了更高效率的传输。1.NIO模型,用最少的资源做更多的事情。

2024-07-21 13:44:48 250

原创 Netty的线程模型是怎么样的

服务端启动时,通常会创建两个NioEventLoopGroup实例,对应了两个独立的Reactor线程池,bossGroup负责处理客户端的连接请求,workerGroup负责处理I/0相关的操作,执行系统Task、定时任务Task等。用户可根据服务端引导类ServerBootstrap配置参数选择Reactor线程模型,进而最大限度地满足用户的定制化需求。Netty同时支持Reactor单线程模型、Reactor多线程模型和Reactor主从多线程模型,用户可根据启动参数配置在这三种模型之间切换。

2024-07-20 17:14:36 240

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

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

2024-07-20 17:03:57 108

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

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

2024-07-20 17:01:26 126

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

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

2024-07-20 16:59:49 95

原创 Spring Cloud有哪些常用组件,作用是什么

8.Spring Cloud Gateway:服务网关。10.Spring CLoud Sleuth:链路追踪。4.Spring Cloud Config:配置中心。5.Feign/OpenFeign: RPC调用。3.Consul:注册中心、配置中心。2.Nacos:注册中心、配置中心。14.Sentinel:服务熔断。15.Hystrix:服务熔断。11.Zipkin:链路追踪。13.Dubbo:RPC调用。1.Eureka:注册中心。6.Kong:服务网关。7.zuul:服务网关。

2024-07-20 16:51:20 87

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

9.同时Leader节点还是将当前写请求直接发送给observer节点,observer节点收到Leader发过来的写请求后直接执行更新本地内存数据。5.Leader节点会将该写请求对应的日志发送给其他Follower节点,并等待Follower节点持久化日志成功。7.当Leader节点收到半数以上的Ack后,就会开始提交,先更新Leader节点本地的内存数据。3.集群在工作过程中,所有的写请求都会交给Leader节点来进行处理,从节点只能处理读请求。10.最后Leader节点返回客户端写请求响应成功。

2024-07-20 16:30:55 319

原创 为什么Zookeeper可以用来作为注册中心?

可以利用Zookeeper的临时节点和watch机制来实现注册中心的自动注册和发现,另外Zookeper中的数据都是存在内存中的,并且Zookeeper底层采用了nio,多线程模型,所以zookeeper的性能也是比较高的,所以可以用来作为注册中心,但是如果考虑到注册中心应该是注册可用性的话,那么Zookeeper则不太合适,因为Zookeper是CP的,它注重的是一致性,所以集群数据不一致时,集群将不可用,所以用Redis、Eureka、Nacos来作为注册中心将更合适。

2024-07-19 22:32:16 152

原创 什么是ZAB协议?

3.请求广播阶段: 当Leader节点接收到写请求时,会利用两阶段提交来广播该写请求,使得写请求像事务一样在其他节点上执行,达到节点上的数据实时一致。ZAB协议是Zookeeper用来实现一致性的原子广播协议,该协议描述了zookeeper是如何实现一致性的,分为三个阶段。1.领导者选举阶段: 从Zookeeper集群中选出一个节点作为Leader,所有的写请求都会由Leader节点来处理。但值得注意的是,Zookeeper只是尽量的在达到强一致性,实际上仍然只是最终一致性的。

2024-07-19 22:27:09 221

原创 什么是分布式事务?有哪些实现方案?

在分布式系统中,一次业务处理可能需要多个应用来实现,比如用户发送一次下单请求,就涉及到订单系统创建订单、库存系统减库存,而对于次下单,订单创建与减库存应该是要同时成功或同时失败的,但在分布式系统中,如果不做处理,就很有可能出现订单创建成功,但是减库存失败,那么解决这类问题,就需要用到分布式事务。d.一旦half消息commit了,消费者库存系统就会来消费,如果消费成功,则消息销毁,分布式事务成功结束死信队列,等待进一步处理e.如果消费失败,则根据重试策略进行重试,最后还失败则进入。

2024-07-19 21:32:26 187

原创 分布式锁的使用场景是什么?有哪些实现方法?

而在分布式架构中,多个线程是可能处于不同进程中的,而这些线程并发执行遇到资源竞争时,利用ReentrantLock、synchronized等技术是没办法来控制多个进程中的线程的,所以需要分布式锁,意思就是,需要一个分布式锁生成器,分布式系统中的应用程序都可以来使用这个生成器所提供的锁,从而达到多个进程中的线程使用同一把锁。在单体架构中,多个线程都是属于同一个进程的,所以在线程并发执行遇到资源竞争时,可以利用ReentrantLock、synchronized等技术来作为锁,来控制共享资源的使用。

2024-07-19 21:20:28 365

原创 分布式ID是什么?有哪些解决方案?

4.雪花算法,一切问题如果能直接用算法解决,那就是最合适的,利用雪花算法也可以生成分布式ID,底层原理就是通过某台机器在某一毫秒内对但是只能保证趋势递增。3.利用redis、zookeeper的特性来生成id,比如redis的自增命令、Dokeeper的顺序节点,这种方案和单机数据库(mysql)相比,性能有所提高,可以适当选用。中,ID长度较之uuid更短,但是受到单机数据库性能的限制,并发量大的时候,2.利用单机数据库的自增主键,作为分布式ID的生成器,复杂度适。此方案也不是最优方案。

2024-07-19 20:26:19 483

原创 在微服务架构中如何使用 RPC(Dubbo) 和 Feign 进行服务调用?

Dubbo:通过 XML 配置文件配置服务提供者和消费者,并指定 Nacos 注册中心的地址。Feign:通过 Spring Boot 配置文件配置 Feign 客户端和 Nacos 注册中心,使用注解定义服务客户端。加入注册中心后,Dubbo 和 Feign 都能够实现服务的动态注册和发现,提高系统的灵活性和可维护性。Dubbo 提供了更全面的服务治理功能和多种协议支持,适用于复杂的分布式系统;

2024-07-18 22:54:20 373

原创 什么是RPC

在Java中,我们可以通过直接使用某个服务接口的代理对象来执行方法,而底层则通过构造HTTP请求来调用远端的方法,所以,有一种说法是RPC协议是HTTP协议之上的一种协议,也是可以理解的。RPC调用和HTTP调用是有区别的,RPC表示的是一种调用远程方法的方式,可以使用HTTP协议、或直接基于TCP协议来实现RPC,RPC,表示远程过程调用,对于Java这种面试对象语言,也可以理解为远程方法调用,

2024-07-18 22:35:37 734

原创 什么是BASE理论?

1.BA:Basicalv Available,表示基本可用,表示可以允许一定程度的不可用,比如由于系统故障,请求时间变长,或者由于系统故障导致部分非核心功能不可用,都是允许的。3.E:Eventualv consistent,表示最终一致性,不要求分布式系统数据实时达到一致,允许在经过一段时间后再达到一致,在达到一致过程中,系统也是可用的。2.S:Soft state:表示分布式系统可以处于一种中间状态,比如数据正在同步。

2024-07-18 22:17:19 91

原创 什么是CAP理论?

分区容错性表示,一个系统虽然是分布式的,但是对外看上去应该是整体,不能由于分布式系统内部的某个结点挂点,或网络出现了故障,而导致系统对外出现异常。所以,对于分布式系统而言是一定要保证分区错性的。强一致性表示,一个分布式系统中各个结点之间能及时的同步数据,在据同步过程中,是不能对外提供服务的,不然就会造成数据不一致,所以强一致性和可用性是不能同时满足的。CAP理论指出在目前的硬件条件下,一个分布式系统是必要保证分区容错性的,而在这个前提下,分布式系统要么保证CP,要么保证AP,无法同时保证CAP。

2024-07-18 22:13:40 244

原创 Mybatis中#{}和${}的区别是什么?

2.Mybatis 在处理#{}时,会将 sq!号,调用 Preparedstatement 来赋值。3.Mybatis 在处理{}时,就是把$替换成变量的值,调用 Statement 来赋值。1.#0是预编译处理、是占位符,$0是字符串替换、是拼接符。4.使用#{}可以有效的防止SQL注入,提高系统安全性。

2024-07-18 21:25:54 230

原创 MyBatis中的优点和缺点?

1.基于 SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL单独写,解除 sq!2.与JDBC 相比,减少了 50%以上的代码量,消除了 JDBC 大量冗余代码,不需要手动开关连接。5.提供映射标签,提供对象关系映射标签,支持对象关系组件维护支持对象与数据库的 ORM 字段关系映射。1.SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开人员编写SQL语句的功底有一定要求。2.SQL 语句依赖于数据库, 导致数据库移植性差,不能随意更换数据库。

2024-07-18 21:10:04 306

ImageMagick-7.1.0-47-Q16-HDRI-x64-dll.exe

ImageMagick-7.1.0-47-Q16-HDRI-x64-dll.exe

2022-09-06

空空如也

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

TA关注的人

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