自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring脑图-动态代理-静态代理-通俗易懂理解

动态代理(而在动态代理中,你可能不确定哪个代购人员会帮你购物,但你希望有人能够替你完成购物任务。在需要购物时,你会根据代购人员的可用性和能力来选择合适的人选。不同的代购人员可能有不同的购物方式和策略,以满足你的需求)静态代理(想象你委托一个特定的代购人员帮你购买所有的商品。无论你需要什么东西,你都会联系这个特定的代购人员,他会按照你预先告知的清单和方式去购买商品。)

2024-02-23 15:55:21 402

原创 select、poll 和 epoll 是处理多任务网络请求的三种常见方法。

/ 屏幕显示当前需要处理的学生。// 挨个询问名单里的学生。学生桌上有一个按钮,想提问时按按钮(触发事件),老师的屏幕会直接显示需要帮助的学生座位号,老师只需要看屏幕过去解答。// 记录学生1可能提问。

2025-03-18 18:24:58 419

原创 redis中的list的底层数据结构有两种:双向链表(Doubly Linked List)和压缩列表(ZipList)/hash也有两种哈希表(Hash Table)和压缩列表(ZipList) 。

Redis 的数据结构是为了在内存中快速操作而设计的,而 Java 的数据结构则更侧重于通用性和灵活性。Redis 是一个开源的内存数据结构存储系统,它支持多种数据类型,每种数据类型都有其特定的底层数据结构来实现。综上所述,虽然Redis的Hash和Java的Map在底层都使用了数组和链表来解决哈希冲突,但在具体的实现细节上存在一些差异,特别是在处理哈希冲突和扩容机制上。Redis 的数据类型和底层数据结构的设计使得它能够提供高性能的数据操作和存储能力,适用于多种应用场景,如缓存、消息队列、排行榜等。

2025-03-12 00:00:00 1126

原创 客户端请求在 Spring Cloud Alibaba 框架中,包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述

这个调用链路详细描述了一个客户端请求在 Spring Cloud Alibaba 框架中如何经过 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的全过程。每个组件在不同的阶段发挥作用,确保请求的高效处理、服务的稳定性和数据的一致性。

2025-03-11 00:00:00 1771

原创 spring 和JVM之间关系

Spring 和 JVM(Java 虚拟机)之间有着紧密且 crucial 的关系,Spring 框架是基于 Java 语言开发的,而 JVM 是 Java 代码运行的基础环境。

2025-03-10 00:00:00 1598

原创 redis数据类型以及底层数据结构

Map:有两种数据结构:1.压缩列表:当hash结构中存储的元素个数小于了512个。并且元 素的大小小于64字节时,会采用压缩表来存储。2.双向链表:如果不符合压缩表限制,就会存储为双向链表。String:字符串类型,底层就是动态字符串,使用sds数据结构。List:也有两种数据结构:1压缩列表:如果存储的元素个数。redis数据类型以及底层数据结构。

2025-03-09 00:00:00 223

原创 Bean 的生命周期主要包括以下阶段:

对于 singleton 作用域的 Bean,容器关闭时调用销毁方法,释放资源。:在配置文件或注解中定义 Bean,包括其类、作用域等信息。:Spring 容器根据定义创建 Bean 的实例。:容器调用初始化方法,完成 Bean 的初始化操作。:Bean 被应用程序中的其他组件使用。:容器为 Bean 设置配置的属性值。

2025-03-08 00:00:00 154

原创 Kubernetes load Balancer

Kubernetes load Balancer

2025-03-07 00:00:00 84

原创 什么时候使用本地缓存,什么时候使用分布式缓存

是指在多个应用实例或节点之间共享的缓存,通常使用分布式缓存系统如 Redis、Memcached 或 Apache Ignite。分布式缓存可以跨多个节点,提供高可用性和一致性。在选择使用本地缓存还是分布式缓存时,需要根据具体的业务场景和需求来决定。是指在单个应用实例或节点上使用的缓存,通常存储在内存中。通过合理选择和结合使用本地缓存和分布式缓存,可以有效地提高系统的性能和可靠性。

2025-03-06 16:00:06 384

原创 Spring启动过程

(0,spring扫描class得到bean定义,根据bean定义去生成bean(bean定义就是普通对象上面再封装了一次,有一些属性,比如是否是懒加载,是否单例))1,推断构造方法,比如userService这个class如果有多个构造方法,spring会推断出用哪个构造方法来得到一个普通对象,这时候还没得到bean对象2,依赖注入,给加了@autowired的属性赋值。循环依赖也是发生在这一步(先bytype,再byname)3,调用aware方法,判断当前对象是否实现了那些aware接口。

2025-03-06 10:24:44 956

原创 JPA的insert后返回插入的id

方法时,Hibernate会更新实体的所有字段,即使这些字段在数据库中并没有改变。这可能会导致不必要的数据库操作,并且可能会违反数据库的约束。注解时,Hibernate会检查实体的所有字段,只更新那些已经改变的字段。这可以减少数据库操作,并提高性能。是Hibernate提供的一个注解,用于在更新实体时只更新那些已经改变的字段,而不是更新所有字段。注解可以解决这个问题。// 获取自增的 ID。默认情况下,当你调用。

2025-03-06 10:18:40 122

原创 为什么需要动态代理和静态代理 通俗易懂的解释一下

静态代理和动态代理都是代理模式的应用,它们的核心思想都是通过代理对象来控制对目标对象的访问。静态代理的实现简单,但代码冗余且灵活性差;动态代理的实现复杂,但灵活性高且代码复用性强。在实际开发中,应根据具体的需求和场景选择合适的代理方式。

2025-03-03 09:55:23 405

原创 单例模式---是 Spring 容器的核心特性之一

单例 Bean 的线程安全性取决于其使用的共享资源。如果单例 Bean 没有可变状态,它是线程安全的。如果存在可变状态,必须采取同步机制(如等)来保证线程安全。在多线程环境下,开发者需要根据具体需求选择合适的线程安全策略来保护单例 Bean 的共享状态。总结在 Spring 中,默认的 Bean 作用域是单例(Singleton),确保在整个应用上下文中只有一个实例。如果你需要每个请求都创建一个新的 Bean 实例,可以使用或其他所需的作用域。

2025-02-28 17:00:49 1198

原创 WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口

在这个示例中,`CustomWebSocketHandler` 实现了 `WebSocketHandler` 接口,并在 `afterConnectionEstablished` 方法中将新建立的 WebSocket 会话添加到 `sessions` 集合中。在 `handleMessage` 方法中,接收到的消息被广播给所有连接的客户端。通过实现 `handleMessage` 方法,可以处理从客户端接收到的消息,并通过 `WebSocketSession` 对象发送消息回客户端。

2025-02-26 21:51:00 613

原创 微软云和金山云和k8有什么区别

Kubernetes是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它提供了一种标准化的方式来运行和管理容器,使得开发者能够更轻松地在多个主机或云端平台上管理和协调容器化服务14。微软云:微软云是微软公司提供的一系列云计算服务,旨在为用户提供全面且灵活的云解决方案。它包括计算、存储、网络、安全等多个方面,帮助企业构建、部署和管理应用程序和服务8。

2025-02-26 21:49:44 1000

原创 使用Excel批量生成SQL语句

"INSERT INTO Person (language, config, type, where, `key`, return_switch) VALUES ('"&B2&"', '"&B2&"', 3, '用户', 'userUrl', 0);

2025-02-25 11:07:54 99

原创 TSP(Telematics Service Provider,车载信息服务提供商)

TSP相当于车云链路中的“智能路由+数据管家”,通过技术整合、安全加固和服务协同,既保障车企对核心数据的可控性,又解决物联网碎片化生态下的兼容难题,最终提升用户体验(如远程控车流畅)和商业价值(如车联网功能快速迭代)。TSP(Telematics Service Provider,车载信息服务提供商)在车端和云端之间主要扮演。

2025-02-18 14:41:12 210

原创 IOT通道&MQTT

IoT通道是物联网设备与云端或设备之间建立的通信链路,用于数据传输和指令交互。例如,OT通道是小米IoT设备与云端之间建立的长连接,支持UDP、TCP或TLS三种传输方式,主要用于业务RPC(远程过程调用)的透传。

2025-02-15 12:12:56 192

原创 强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)

在Java中,对象的引用类型可以分为四种:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。这四种引用类型为我们提供了多样化的内存管理手段,使得我们能够灵活地控制对象的生命周期。通过合理利用这四种引用,不仅可以有效防止内存泄漏,还可以优化应用性能。

2024-11-25 11:53:39 260

原创 RocketMQ 确保事务消息不丢失的机制主要包括以下几个方面:

如果是Rollback,RocketMQ会把Half消息写入到特定主题中,如果是Commit,RocketMQ会将消息提交到普通topic中,供消费者消费。消息首先发送到主节点,主节点将消息写入磁盘后,异步地将消息复制到从节点。:事务消息机制首先会发送一个Half消息到MQ中,这个Half消息在消费者看来是不可见的,相当于一个“试探”消息。如果Half消息发送失败,就会回滚业务逻辑,确保消息不会丢失。通过这些机制,RocketMQ能够确保事务消息的可靠性,避免消息在发送和存储过程中的丢失。

2024-11-21 13:56:28 310 1

原创 Spring 框架提供了大量的注解来支持各种功能,以下是一些常用的 Spring 注解及其作用:

这些注解是 Spring 框架中非常核心和常用的,它们极大地简化了配置和开发过程。和 @PreDestroy。

2024-11-21 13:40:19 213

原创 Spring boot常用注解和作用

Spring Boot 提供了许多注解来简化开发和配置。这些注解是 Spring Boot 开发中非常核心和常用的,它们极大地简化了配置和开发过程。和 @PreDestroy。

2024-11-21 13:39:47 595

原创 Redis的String类型和Java中的String类在底层数据结构上有一些异同点

总结来说,Redis的String类型和Java中的String类虽然都是动态字符串,但Redis的SDS在设计上更加注重内存效率和二进制数据的安全存储,而Java的String类则更侧重于字符串的不可变性和Unicode文本的处理。

2024-11-21 10:43:24 608

原创 redis的List底层数据结构 分别什么时候使用双向链表(Doubly Linked List)和压缩列表(ZipList)

从Redis 3.2版本开始,Redis引入了QuickList作为List的新的底层实现,它结合了ZipList和双向链表的特点,以提高性能和存储效率。QuickList是一个由多个ZipList组成的双向链表,这样可以在保持ZipList内存效率的同时,支持更长的列表和快速的随机访问。- 当List中的元素数量超过512个,或者元素中存在长度超过64字节的字符串时,Redis会使用双向链表作为List的底层数据结构。- 列表对象保存的所有字符串元素的长度都小于64字节。

2024-11-21 10:36:27 576

原创 redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)

ZipList允许在O(1)时间内在列表的任一侧进行推送和弹出操作,但是,由于每个操作都需要重新分配ZipList使用的内存,因此实际复杂性与ZipList使用的内存量有关。- 如果Hash中的数据项数量超过512个,或者任意一个value的长度超过了64字节,Redis将使用HashTable作为Hash的底层实现。- HashTable是一种散列表结构,通过哈希函数将键映射到表中的位置,支持高效的查找、插入和删除操作,适合存储大量的键值对。- 当Hash中所有的键和值的字符串长度都小于或等于64字节。

2024-11-21 10:32:09 462 1

原创 Redis 集群主要有以下几种类型

这些集群模式各有特点,适用于不同的应用场景。主从复制模式和哨兵模式适用于需要高可用性和读写分离的场景,而Cluster模式则适用于需要水平扩展和高并发处理的场景。

2024-11-20 10:16:22 420

原创 redis的双重hash作用

Redis 的双重哈希(Double Hashing)通常是指在 Redis 集群中使用的一种数据分片和节点定位机制。这种机制主要包含两个哈希步骤:双重哈希的优势包括:此外,Redis 集群使用这种机制可以实现数据的高可用性和可扩展性,同时保持较低的数据迁移成本和较高的数据访问效率。Lua 本身并没有提供对于原子性的直接支持,它只是一种脚本语言,通常是嵌入到其他宿主程序中运行,比如 Redis。在 Redis 中执行 Lua 脚本的原子性是指:整个 Lua 脚本在执行期间,不会被其他客户端的命令打断。这意味

2024-11-19 21:22:10 656

原创 hash表和B树

总结来说,Hash 表在处理等值查询时非常高效,但不适合处理范围查询和数据有序性要求较高的场景。而 B 树(特别是 B+树)在处理大量数据和范围查询时表现出色,但其结构相对复杂,且在数据动态变化时维护成本较高。

2024-11-19 21:15:22 332

原创 如果定时任务部署在多台服务器上,quartz怎么保证那么定时任务不会执行两次,导致业务重复执行

具体来说,Elastic-Job中的分片项是指任务被拆分成的多个独立的任务项,每个分片项都有一个唯一的标识符,通常是从0开始的数字,直到分片总数减1。例如,如果一个分片的标识符是0,那么它将处理所有ID为4的倍数的数据;总结来说,Elastic-Job通过分片策略将任务分配给不同的作业服务器,而具体的数据分片逻辑需要开发者根据分片项来实现,以确保每个作业服务器只处理分配给它的数据。在Elastic-Job中,数据分片是一个重要的概念,它允许任务在分布式环境下运行,每个任务服务器只运行分配给该服务器的分片。

2024-11-19 20:50:53 1598

原创 ThreadLocal 和 Caffeine 缓存是两种不同的缓存机制,它们在用途和实现上有明显的区别

总结来说,ThreadLocal 更多是用于线程间的数据隔离,而 Caffeine 是一个功能丰富的本地缓存解决方案,适用于需要高性能缓存的场景。ThreadLocal 不适合用作缓存,因为它不支持跨线程访问,而 Caffeine 则提供了丰富的缓存策略和高性能的数据访问能力。

2024-11-19 14:00:52 867

原创 quartz

数组采用的尾插法,如果是头插法会导致所有元素的向后移动,耗费性能时间,小顶堆的特性就是每个节点的值都要比父节点值大,比较父子节点值的大小后 如果不符合就会将新值不停的向上置换,直到满足条件。一个表盘,每个时间的刻度对应一条链表,链表中存储的是需要执行的定时任务,当钟表开始转动,转动到设定时间后取出链表进行执行。实际上每个定时任务的job都对应着堆上的一个节点,如图一个节点代表几分钟,每次取对顶元素执行,每次堆会将最小值放在最上面,这样就更快的执行,而不用去检索。二叉树的帮我们维护的节点之间的父。

2024-11-14 14:42:57 222

原创 kafka

Kafka和RocketMQ都提供了强大的扩展性,

2024-11-13 13:31:28 978

原创 Spring Initializr 和 Maven 是创建 Spring 项目时可以使用的两种不同的工具

总的来说,如果你是 Spring Boot 的用户,希望快速开始一个项目,Spring Initializr 是一个很好的选择。如果你需要更复杂的构建逻辑或者不是 Spring Boot 项目,Maven 可能更适合你。

2024-11-13 12:46:28 559

原创 类在jvm之间的流转和存储哪些值

总结来说,类加载后,类的结构信息(如类的字段和方法定义)存储在元空间,类的实例数据存储在堆中,局部变量存储在栈中,程序计数器用于记录方法调用的地址。• 元空间是JDK 8引入的,用于替代之前的永久代(PermGen),用于存储类的元数据,如类的结构信息(字段、方法)、常量池、方法数据、方法代码等。堆中的对象包含了类的字段信息,以及指向类的元数据的引用(即指向方法区的引用)。• 堆中的对象存储了类的实例数据,但不存储类的结构信息(如类的字段和方法定义)。• 元空间并不存储类的实例,只存储类的元数据。

2024-11-10 18:21:59 339

原创 rediss数据结构及其底层实现

Redis 是一个基于内存的高性能键值对数据库,它支持多种数据结构,每种数据结构都有其特定的底层实现。这些底层数据结构的设计使得Redis能够高效地处理各种类型的数据和操作,同时保持内存使用的优化。

2024-11-05 14:23:38 492

原创 nginx小记

Nginx主要用于处理HTTP请求、负载均衡、反向代理和静态文件服务,而网关可以是各种类型,如API网关、数据库网关等,用于连接不同的网络或系统,提供统一的访问点。3、正向代理中,服务器不知道真正的客户端到底是谁,以为访问自己的就是真实的客户端。而在反向代理中,客户端不知道真正的服务器是谁,以为自己访问的就是真实的服务器。2、正向代理一般是客户端架设的,比如在自己的机器上安装一个代理软件。简而言之,Nginx是一个用于处理Web流量的服务器和代理,而网关是连接不同系统或网络的设备,其功能范围更广泛。

2024-11-05 14:13:36 257

原创 nginx小记

Nginx(发音为"engine-x")是一种高性能的Web服务器和反向代理服务器,而"gateway"(网关)通常指的是网络中连接不同系统或网络的设备。Nginx主要用于处理HTTP请求、负载均衡、反向代理和静态文件服务,而网关可以是各种类型,如API网关、数据库网关等,用于连接不同的网络或系统,提供统一的访问点。所以,Nginx是负责Web流量的,而网关是连接不同系统的。简而言之,Nginx是一个用于处理Web流量的服务器和代理,而网关是连接不同系统或网络的设备,其功能范围更广泛。

2024-11-05 14:11:50 186

原创 Spring底层原理

就像现实生活中的4S店负责销售,上牌,交税,而bean工厂的就像汽车工厂一样,职责比较单一。一个Bean就会有一个BeanDefinition,所以很多的BeanDefinition也需要有位置存放,所以定义了一个BeanDefinitionMap,key就是bean的名字;类(Class):首先,你需要有一个Java类,这个类定义了你想要创建的对象的结构和行为。Bean的作用域为原型的时候,不会放入单例池中,每次都会创建一个新的Bean;所以,实际上是先有类,然后才有。

2024-11-04 21:19:39 1097

原创 spring循环依赖解决方式

字段注入和setter注入则提供了更多的灵活性,但需要更谨慎地管理对象的状态。方法注入和注解注入则适用于特定的场景。在Spring框架中,依赖注入(Dependency Injection,DI)是一种实现控制反转(Inversion of Control,IoC)的机制,用于将对象的依赖关系自动注入到对象中。这种方式不如构造器注入严格,但比字段注入更灵活,因为它可以在不创建新实例的情况下改变对象的依赖。这种方式是推荐的,因为它可以保证对象在创建时就处于完全初始化的状态,并且可以使得bean不可变。

2024-11-04 20:33:37 1077

原创 Spring框架和Spring Boot框架都使用注解来简化配置和提高开发效率,但它们之间存在一些区别

Spring Boot的注解通常是为了进一步简化Spring应用的配置,而Spring的注解则提供了更多的灵活性和控制。Spring Boot注解主要用于简化Spring应用的配置和启动,而Spring Cloud注解则专注于微服务架构中的服务治理和协调。Spring Cloud依赖于Spring Boot,利用Spring Boot的自动配置和起步依赖来简化微服务的部署和管理。Spring、Spring Boot和Spring Cloud都是Java开发中常用的框架,但它们的侧重点和提供的注解有所不同。

2024-11-04 15:54:20 761

空空如也

空空如也

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

TA关注的人

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