- 博客(124)
- 收藏
- 关注
原创 Java——代理模式详解,框架必备利器
代理模式是一种比较好理解的设计模式。简单来说就是代理模式的主要作用是的功能,比如说在目标对象的某个方法你可以增加一些自定义的操作。举个例子:新娘找来了自己的姨妈来代替自己处理新郎的提问,新娘收到的提问都是经过姨妈处理过滤之后的。姨妈在这里就可以看作是代理你的代理对象,代理的行为(方法)是接收和回复新郎的提问。代理模式有静态代理和动态代理两种实现方式,我们 先来看一下静态代理模式的实现。
2024-12-17 14:46:18
1048
原创 浅析RPC—基础知识
即远程过程调用,通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。为什么要 RPC?因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以,需要通过网络编程才能传递方法调用所需要的参数。并且,方法调用的结果也需要通过网络编程来接收。但是,如果我们自己手动网络编程来实现这个调用过程的话工作量是非常大的,因为,我们需要考虑底层传输方式(TCP 还是 UDP)、序列化方式等等方面。RPC 能帮助我们做什么呢?
2024-12-02 14:14:18
748
2
原创 流与Lambda:Java 8中的数据处理新纪元
流和Lambda表达式是Java 8中引入的两个强大特性,它们共同为Java的数据处理带来了革命性的变化。通过结合使用这两个特性,我们可以以更加简洁、高效和易于维护的方式处理集合数据。这不仅提高了代码的可读性和灵活性,还使Java更加适应现代软件开发的需求。在未来,随着Java的不断发展和完善,我们可以期待流和Lambda表达式在更多场景中得到应用,为Java开发者提供更加丰富的数据处理工具。
2024-11-15 11:21:55
458
原创 Java 8中的流API:革新集合处理的强大工具
最近在编写新需求时,学到了一个新的处理List循环遍历的方法,就是使用Java中的流API来处理,具体如下://将school对象对应字段转换为student对象这样代码看起来更简洁,可读性更强,同时避免了for循环的使用,提高了性能。在Java 8中,流API(Streams API)的引入无疑为开发者们带来了革命性的变化。这一新特性不仅极大地简化了集合数据的处理,还提高了代码的可读性和可维护性。本文将深入探讨Java 8中的流API,包括其基本概念、核心优势以及实际应用场景。
2024-11-15 11:07:38
889
原创 SQL中的时间类型:深入解析与应用
SQL标准定义了多种时间类型,但具体支持哪些类型可能因不同的数据库管理系统(DBMS)而异。DATE:仅存储日期部分,格式为YYYY-MM-DD。TIME:仅存储时间部分,格式为HH:MI:SS,可选地包含小数秒。DATETIME(或TIMESTAMP):存储日期和时间,格式为,通常包含时区信息(在TIMESTAMP中)。YEAR:存储年份,格式为YYYY。INTERVAL:存储时间间隔,可以表示如“3天”、“4小时”等时间长度。SQL中的时间类型为我们提供了强大的时间数据处理能力。
2024-11-14 11:56:48
881
原创 HTTP状态码详解
HTTP状态码是Web开发中不可或缺的一部分,它们帮助客户端和服务器之间进行有效的通信。通过理解和使用这些状态码,开发者可以更好地调试和优化Web应用,提高用户体验。希望这篇博客能帮助你更好地理解HTTP状态码,并在实际开发中加以应用。
2024-11-12 16:08:21
992
原创 Java中的时间类型:从java.util.Date到java.time
随着Java版本的迭代,时间处理的API也在不断演进,从早期的。的设计存在一些缺陷,例如月份从0开始计算(0代表一月,11代表十二月),年份从1900年开始计算,以及时间处理相对复杂且易出错。本文将带您深入探索Java中的时间类型,帮助您更好地理解和使用时间相关的功能。这个API旨在解决旧API中的许多缺陷,提供更丰富、更直观的时间处理功能。类,它允许我们以字段(如年、月、日、时、分、秒)的形式操作时间。类提供了丰富的方法来设置和获取时间字段,以及进行时间的加减运算。创建一个自定义的日期和时间,或者使用。
2024-11-11 15:23:57
875
原创 RESTful API——构建现代Web服务的基石
RESTful API又叫REST API,是基于REST构建的API。RESTful API 可以让你看到 URL+Http Method 就知道这个 URL 是干什么的,让你看到了 HTTP 状态码(status code)就知道请求结果如何,简单、易读、易用比如GET / classes 获取所有班级POST / classes 新增一个班级RESTful API作为一种现代Web服务的构建方式,具有可扩展性、灵活性、高性能和标准化等优势。
2024-11-08 11:21:09
865
原创 Spring事务详解——面试必看!
平台事务管理器,Spring事务策略的核心: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则):事务运行状态会根据的定义比如事务隔离级别、超时时间、传播行为等来进行事务管理,而 TransactionStatus接口则提供了一些方法来获取事务相应的状态比如是否新事务、是否可以回滚等等。注解只有作用到public方法上事务才生效,不推荐在接口上使用;避免同一个类中调用注解的方法,这样会导致事务失效(SpringAOP的自调用问题正确的设置的和属性,否则事务可能会回滚失败;被。
2024-10-24 17:02:51
1055
原创 JVM中的经典收集器
Parallel Scavenge 收集器提供了很多参数供用户找到最合适的停顿时间或最大吞吐量,如果对于收集器运作不太了解,手工优化存在困难的时候,使用 Parallel Scavenge 收集器配合自适应调节策略,把内存管理优化交给虚拟机去完成也是一个不错的选择。的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程(它是许多运行在 Server 模式下的虚拟机的首要选择,除了 Serial 收集器外,只有它能与。
2024-10-16 23:51:12
836
原创 设计模式,面试级别的详解(持续更新中)
其实很简单,第一重判断,如果实例已经存在,那么就不再需要进行同步操作,而是直接返回这个实例,如果没有创建,才会进入同步块,同步块的目的与之前相同,目的是为了防止有多个线程同时调用时,导致生成多个实例,有了同步块,每次只能有一个线程调用访问同步块内容,当第一个抢到锁的调用获取了实例之后,这个实例就会被创建,之后的所有调用都不会进入同步块,直接在第一重判断就返回了单例。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。,这种方式比较常用,但容易产生垃圾对象,浪费内存空间。
2024-10-16 23:46:32
863
原创 实战——Docker快速搭建三主三从的Redis集群
1、目前使用容器部署Docker仅能使用host这种网络模式,其他模式暂未实验成功,如果有了解的小伙伴欢迎赐教;
2024-10-14 15:23:52
346
原创 实战——使用dokcer配置Redis的哨兵模式
从上面截图中可以看出,领头sentinel重新选出了一个master节点,127.0.0.1:6380,然后发送命令给其他的从服务节点,让他们成为新主服务节点的从服务节点,这就是哨兵模式高可用的原因之一,当redis-master挂掉以后,sentinel会选出一个领头sentinel,这个领头sentinel又会继续从从服务器列表中选出一个master节点,再通知其余的从节点成为这个主节点的从节点,这就完成了主节点切换的工作。由于这段内容涉及的ip地址太多,所以很多地方给模糊处理了一下,请谅解~
2024-10-14 15:20:59
573
原创 ConcurrentHashMap–面试必备的源码分析
Java7 中使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个Segment都是一个类似HashMap数组的结构,它可以扩容,它的冲突会转化为链表。但是Segment的个数一但初始化就不能改变。Java8 中的使用的锁加 CAS 的机制。结构也由 Java7 中的 Segment数组 +HashEntry数组 + 链表进化成了Node 数组 + 链表 / 红黑树,Node 是类似于一个 HashEntry 的结构。
2024-10-12 10:11:54
656
原创 Synchronized的缺陷
在Java多线程编程中,synchronized关键字被广泛应用于同步线程访问共享资源,确保同一时间只有一个线程可以访问该资源。然而,尽管synchronized提供了简单且易用的互斥机制,但它也存在一些显著的缺陷和局限性。本文将详细探讨synchronized的缺陷,并解释为什么在高并发和复杂线程管理的场景中,其他同步机制(如Lock)可能是更好的选择。
2024-10-09 16:43:36
557
原创 运算符“||”与“|”,“&&”和“&”的区别
逻辑或运算符:“||”是短路或运算符,用于条件判断;“|”是按位或运算符,用于二进制数据的位操作。逻辑与运算符:“&&”是短路与运算符,用于条件判断;“&”是按位与运算符,用于二进制数据的位操作。理解这些运算符的区别和用法对于编写高效、可靠的程序至关重要。希望本文能帮助读者更好地掌握这些运算符,并在编程实践中灵活运用它们。
2024-10-09 14:20:22
4277
原创 索引失效:数据库性能优化的隐形杀手
索引失效是数据库性能优化中不容忽视的问题。通过深入理解索引失效的原因、掌握识别方法并采取有效的应对策略,可以显著提升数据库查询性能,确保数据操作的高效与稳定。作为数据库管理员和开发者,持续学习数据库优化知识,结合实际工作场景不断优化查询和索引设计,是提升系统性能的关键。希望本文能为你解决索引失效问题提供有益的参考。
2024-10-09 11:56:39
432
原创 延迟队列:时间敏感的任务调度神器
延迟队列是一种非常实用的数据结构,它能够帮助我们处理那些需要在未来某个时间点执行的任务。通过选择合适的实现方式,我们可以根据具体的应用场景和需求来构建高效、可靠的延迟队列系统。当然,延迟队列也存在一些缺点和挑战,但只要我们能够合理地使用和优化它,就一定能够发挥出它最大的价值。希望这篇博客能够帮助你更好地理解延迟队列的概念、应用场景和实现方式。如果你有任何疑问或者建议,欢迎在评论区留言与我交流。
2024-10-09 10:59:46
352
原创 探索消息中间件:RabbitMQ深度解析
RabbitMQ是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP)。RabbitMQ通过提供消息队列,允许生产者(发送消息的一方)和消费者(接收消息的一方)在时间和空间上解耦,从而提高了系统的灵活性和可扩展性。RabbitMQ作为一款强大的消息中间件,为分布式系统提供了稳定、可靠的消息传递机制。通过了解其核心概念、使用场景和实战技巧,我们可以更好地利用RabbitMQ来构建高效、可扩展的分布式系统。无论是在异步通信、削峰填谷还是日志收集等方面,RabbitMQ都能发挥重要作用。
2024-10-06 09:24:54
562
原创 RabbitTemplate与AmqpTemplate:Spring AMQP中的消息传递模板
是Spring AMQP框架的核心接口,它定义了一套标准的AMQP操作,如发送和接收消息、声明队列和交换机等。这个接口是对AMQP协议的抽象,提供了一种面向对象的方式来操作AMQP协议。它基于RabbitMQ的Java客户端库实现,使得开发者可以通过Spring框架的依赖注入和配置机制来简化与AMQP消息队列系统的交互。而则是Spring AMQP为RabbitMQ提供的一个高级消息操作模板。它实现了接口,并添加了一些针对RabbitMQ的特性和优化。不仅提供了与。
2024-10-05 11:27:00
817
原创 使用Docker-Compose部署SpringBoot项目的案例
Docker-Compose是Docker官方的一个开源项目,主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写,通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API,就可以利用Docker-Compose进行编排管理。Docker-Compose通过简化多容器应用的部署和管理,使得开发人员能够更专注于应用程序的开发和测试。
2024-09-28 00:21:22
1504
原创 Docker-Compose:简化Docker容器编排的利器
Docker-Compose是一个用于定义和运行多容器Docker应用程序的工具。它使用YAML文件来配置应用程序的服务,然后通过一个命令,就可以创建并启动所有服务。Docker-Compose非常适合用于开发、测试和部署分布式应用,因为它能够简化多容器应用的部署流程,确保环境的一致性。Docker-Compose以其简洁的配置和强大的功能,成为了Docker容器编排的得力助手。它简化了多容器应用的部署和管理流程,提高了开发效率,确保了环境的一致性,并使得应用的扩展和维护变得更加容易。
2024-09-27 23:39:52
530
原创 Kafka与RabbitMQ:深入理解两者之间的区别
在现代分布式系统架构中,消息队列作为异步通信的重要手段,扮演着至关重要的角色。Apache Kafka和RabbitMQ作为两大主流消息队列系统,各自具有独特的设计理念和优势。本文将深入探讨Kafka与RabbitMQ之间的主要区别,帮助读者在选择时做出更明智的决策。
2024-09-27 15:49:45
1125
原创 Docker容器间通信详解
为了更灵活地管理容器间的通信,你可以创建自定义的桥接网络,并将容器连接到这个网络上。自定义网络允许你为容器分配别名(alias),使得通信更加清晰和灵活。# 创建一个自定义桥接网络# 将容器连接到自定义网络sleep 1;done"Docker容器间的通信是Docker生态系统中的一个重要方面。通过合理利用Docker提供的网络模式和工具,你可以轻松地实现容器间的通信,构建出高效、可扩展的微服务架构。
2024-09-26 22:14:20
580
原创 Spring Security 详解:保护Java应用的强大盾牌
Spring Security是一个面向Java应用程序的安全框架,它提供了全面的安全性解决方案,包括用户认证、授权、攻击防护(如防止跨站请求伪造CSRF、点击劫持等)和会话管理等。Spring Security能够轻松与Spring框架的其他部分集成,如Spring Boot和Spring Cloud,是Java企业级应用的首选安全框架。为了实现自定义的用户信息存储和验证,可以实现接口并配置到中。这样,Spring Security就可以使用自定义的用户信息来进行身份验证。
2024-09-23 09:37:01
986
原创 在Docker中运行Tomcat:打造高效可移植的Java Web服务器
通过本文,您应该已经学会了如何在Docker中运行Tomcat,并部署一个简单的Java Web应用。Docker为Java Web应用的部署提供了极大的便利,使得应用的部署更加高效、可移植和可扩展。随着对Docker的深入学习和实践,您将能够更加灵活地运用Docker来构建和部署复杂的Java Web应用。
2024-09-22 11:31:15
1071
原创 Docker命令全解析:掌握容器化技术的基石
Docker命令是Docker容器化技术的基石,掌握这些命令对于高效利用Docker至关重要。从基础命令到进阶管理,本文为您详细解析了Docker命令的各个方面。希望这篇文章能够帮助您更好地理解和使用Docker,从而在容器化技术的道路上越走越远。
2024-09-22 11:23:14
581
原创 Docker:简化应用部署与管理的神奇容器
Docker以其独特的容器化技术,为应用的部署与管理带来了革命性的变化。通过Docker,我们可以轻松地实现应用的快速部署、可扩展性和环境一致性,从而提高开发效率和软件质量。随着Docker技术的不断发展和完善,相信它将在未来的软件开发和运维领域发挥更加重要的作用。
2024-09-22 09:22:52
910
原创 SQL关键字的优先级执行顺序:深入理解SQL查询的构造
在数据库管理和开发中,SQL(Structured Query Language)是一种至关重要的语言,用于与数据库进行交互,执行数据查询、更新、删除和管理等操作。然而,编写高效且准确的SQL查询需要对SQL的解析和执行顺序有深入的理解。本文将探讨SQL查询中关键字的优先级执行顺序,帮助读者更好地理解和优化SQL查询。
2024-09-20 16:43:14
866
原创 Nginx 负载均衡:优化网站性能与可扩展性的利器
Nginx负载均衡是指通过Nginx服务器将客户端的请求根据一定的策略分发到后端多台服务器上处理的过程。这种机制可以有效地平衡后端服务器的负载,提高系统的整体吞吐量和响应时间,同时增强系统的可用性和容错能力。Nginx的负载均衡功能为网站提供了强大的性能和可扩展性支持。通过合理配置负载均衡策略,我们可以有效地分散请求,提高系统的整体性能和可靠性。同时,Nginx的灵活性和易于配置的特点也使得它成为了众多网站的首选负载均衡解决方案。
2024-09-15 15:19:30
1423
原创 Nginx的使用场景:构建高效、可扩展的Web架构
Nginx,作为当今最流行的Web服务器和反向代理软件之一,凭借其高性能、稳定性和灵活性,在众多Web项目中扮演着核心角色。无论是个人博客、中小型网站,还是大型企业级应用,Nginx都能提供强大的支持。本文将探讨Nginx的几个主要使用场景,帮助读者理解如何在实际项目中充分利用Nginx的优势。
2024-09-14 21:55:12
794
原创 Nginx:高性能的Web服务器与反向代理
Nginx是一个开源的、高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它由伊戈尔·赛索耶夫(Igor Sysoev)于2004年首次发布,并迅速在Web服务器领域崭露头角。Nginx以其轻量级、高并发处理能力和低资源消耗而闻名,特别适用于需要处理大量并发连接的场景,如高流量的网站、视频分享平台、实时通信应用等。
2024-09-14 21:51:41
507
原创 SpringCloud:构建分布式系统的利器
SpringCloud是一系列框架的有序集合,它基于Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施的开发。通过SpringCloud,开发者可以轻松地实现服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等功能。这些功能使得微服务之间的通信与协作变得更加简单和高效。SpringCloud作为Spring生态中的微服务架构开发工具,为开发者提供了丰富的组件和框架,帮助开发者快速构建分布式系统。
2024-09-06 19:24:20
1276
原创 JVM避免频繁的GC
在编写代码时,完全避免垃圾收集(GC)是不可能的,因为Java(以及许多其他现代编程语言)的内存管理是基于自动垃圾收集的。然而,你可以通过一些最佳实践来减少GC的频率和开销,从而优化你的应用程序性能。GC是现代JVM中不可或缺的一部分,它确保了内存的有效管理和应用程序的稳定性。特别注意长生命周期的对象,它们可能持有对短生命周期对象的引用,从而阻止这些对象被回收。根据应用程序的内存需求和性能要求,调整JVM的堆大小、年轻代和老年代的比例等参数。定期进行代码审查,以发现潜在的内存泄漏和不必要的对象创建。
2024-09-05 11:51:57
714
原创 JVM中的GC过程
在后续的GC中,Eden区和之前存放存活对象的Survivor区(如S0)中的存活对象会被复制到另一个Survivor区(如S1),同时清空这两个区。Major GC的过程通常比Minor GC更复杂,耗时也更长,因为它需要处理的对象更多,且存活率较高。:将Eden区中的存活对象复制到其中一个Survivor区(如S0),同时清空Eden区。:标记出所有需要回收的对象,然后让所有存活的对象都向一端移动,最后清理掉边界以外的内存。:当老年代空间不足以存放晋升的对象时,会触发Major GC。
2024-09-05 11:49:39
615
原创 HTTP与TCP的区别与联系
在HTTP 1.0中,每个请求-响应对都是独立的,即每次请求都要求建立一次单独的连接,并在处理完请求后释放连接。:在实际应用中,客户端和服务器之间通过TCP建立连接后,会使用HTTP协议来传输具体的数据。:通过握手和确认机制建立和维护连接,如三次握手协议来建立连接,以及通过确认和重传机制来保证数据的可靠传输。:定义了数据在客户端和服务器之间传输的规范和格式,主要关注传输的数据内容,如文本、图片、视频等。:提供字节流的传输,即将数据分割成多个包(报文段)进行传输,并在接收端重新组合成原始数据。
2024-09-05 11:33:08
605
原创 Spring Security:为你的Spring应用保驾护航
Spring Security是一个基于Spring框架的安全性解决方案,它为应用程序提供了完整的安全管理,包括认证、授权、攻击防范和会话管理等功能。其核心在于为系统提供声明式的安全访问控制,减少了为系统安全而编写大量重复代码的工作。如果你需要自定义认证和授权逻辑,你可以实现接口来加载用户信息,并通过和来控制认证和授权过程。
2024-09-03 00:12:22
828
原创 Cookie、Session、Token:三者的区别与应用
Cookie是存储在用户浏览器中的一小段文本数据。当服务器响应客户端请求时,可以在响应头中设置Set-Cookie字段来向客户端发送Cookie。客户端(通常是浏览器)会将这些Cookie保存在本地,并在后续的请求中通过Cookie请求头将Cookie发送回服务器。Session是指服务器为了保持客户端状态而创建的一种数据结构,它存储在服务器上。与Cookie不同,Session本身并不在客户端存储任何数据,而是通过一个唯一的Session ID来标识客户端的会话。
2024-08-31 21:35:40
1087
原创 DispatcherServlet vs 传统Servlet:优势解析
在Java Web开发领域,与传统Servlet都是处理HTTP请求的关键组件。然而,随着Spring MVC等现代Web框架的兴起,逐渐成为了开发者的首选。本文将探讨相较于传统Servlet的优势,帮助读者更好地理解两者的区别与选择。
2024-08-30 11:04:03
473
原创 Spring MVC中的DispatcherServlet:核心调度者
在Spring MVC框架中,扮演着至关重要的角色,它是整个请求处理流程的核心组件和调度者。本文将深入探讨的工作原理、主要职责以及在Spring MVC应用中的重要作用。
2024-08-30 10:57:21
1442
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人