自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java进阶(二十一) 微服务架构体系-SpringCloudAlibaba

"微服务”一词源于 Martin Fowler的名为 Microservices的,博文,可以在他的官方博客上找到http:/ /martinfowler . com/articles/microservices.html简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的 RESTfuL AP进行通信协作。

2025-06-15 21:57:12 1085 5

原创 Java进阶(二十) 消息中间件架构体系(3)-- Kafka研究

Kafka 是一款分布式消息发布和订阅系统,具有高性能、高吞吐量的特点而被广泛应用与大数据传输场景。它是由 LinkedIn 公司开发,使用 Scala 语言编写,之后成为 Apache 基金会的一个顶级项目。kafka 提供了类似 JMS 的特性,但是在设计和实现上是完全不同的,而且他也不是 JMS 规范的实现。kafka 作为一个消息系统,早起设计的目的是用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)。

2025-06-15 21:55:45 787

原创 Java进阶【十九】消息中间件架构体系(2)-- RabbitMQ研究

接上文,这个继续介绍RabbitMQ,并理解其底层原理。RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。为什么使用RabbitMQ呢?1、使得简单,功能强大。2、基于AMQP协议。3、社区活跃,文档完善。4、高并发性能好,这主要得益于Erlang语言。5、Spring Boot默认已集成RabbitMQ。

2025-06-15 21:54:06 1097

原创 Java进阶【十八】消息中间件架构体系(1)-- ActiveMQ研究

ActiveMQ 是完全基于 JMS 规范实现的一个消息中间件产品。是 Apache 开源基金会研发的消息中间件。ActiveMQ主要应用在分布式系统架构中,帮助构建高可用、 高性能、可伸缩的企业级面向消息服务的系统。Java 消息服务(Java Message Service)是 java 平台中关于面向消息中间件的 API,用于在两个应用程序之间,或者分布式系统中发送消息,进行异步通信。

2025-06-15 21:52:49 839

原创 Java进阶【十七】系统缓存架构设计 (下)

上章节介绍了Redis相关知识,了解了Redis的高可用,高性能的原因。很多人认为提到缓存,就局限于Redis,其实缓存的应用不仅仅在于Redis的使用,比如还有Nginx缓存,缓存队列等等。这章节我们会将讲解Nginx+Lua实现多级缓存方法,来解决高并发访问的场景。

2025-06-15 21:51:31 983

原创 Java进阶【十七】系统缓存架构设计 (下)

上章节介绍了Redis相关知识,了解了Redis的高可用,高性能的原因。很多人认为提到缓存,就局限于Redis,其实缓存的应用不仅仅在于Redis的使用,比如还有Nginx缓存,缓存队列等等。这章节我们会将讲解Nginx+Lua实现多级缓存方法,来解决高并发访问的场景。

2025-06-13 21:53:50 891

原创 Java进阶【十六】系统缓存架构设计 (上)

​ 我们将先从Redis、Nginx+Lua等技术点出发,了解缓存应用的场景。通过使用缓存相关技术,解决高并发的业务场景案例,来深入理解一套成熟的企业级缓存架构如何设计的。本文Redis部分总结于蒋德钧老师的《Redis核心技术与实战》。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

2025-06-13 21:52:42 977

原创 Java进阶【十五】数据结构与算法的应用

​ 学习算法,我们不需要死记硬背那些冗长复杂的背景知识、底层原理、指令语法……需要做的是领悟算法思想、理解算法对内存空间和性能的影响,以及开动脑筋去寻求解决问题的最佳方案。相比编程领域的其他技术,算法更纯粹,更接近数学,也更具有趣味性。​ 本文将回顾数据结构与算法的基础知识,学习日常所接触场景中的一些算法和策略,以及这些算法的原理和他背后的思想,最后会动手写代码,用java里的数据结构来实现这些算法,如何去做?​ 本文基本知识概念有借鉴《漫画算法-小灰的算法之旅》相关篇幅与图片。1)概述。

2025-06-13 21:50:59 742

原创 Java进阶【十四】从电商系统角度研究多线程(上)

​ 本章节继上章节继续梳理:线程相关的基础理论和工具、多线程程序下的性能调优和电商场景下多线程的使用。put过程:1.根据key的hash值定位到桶位置2.如果table为空if,先初始化table。3.如果table当前桶里没有node,cas添加元素。成功则跳出循环,失败则进入下一轮for循环。4.判断是否有其他线程在扩容,有则帮忙扩容,扩容完成再添加元素。5.如果桶的位置不为空,遍历该桶的链表或者红黑树,若key已存在,则覆盖,不存在则将key插入到链表或红黑树的尾部。

2025-06-13 21:49:28 866

原创 Java进阶【十三】从电商系统角度研究多线程(上)

​ 本章节主要分享下,多线程并发在电商系统下的应用。主要从以下几个方面深入:线程相关的基础理论和工具、多线程程序下的性能调优和电商场景下多线程的使用。

2025-06-13 21:46:37 540

原创 Java进阶【十二】 探究JMM

多线程下,共享变量的读写顺序是头等大事,内存模型就是多线程下对共享变量的一组读写规则共享变量值是否在线程间同步代码可能的执行顺序需要关注的操作就有两种Load、StoreLoad 就是从缓存读取到寄存器中,如果一级缓存中没有,就会层层读取二级、三级缓存,最后才是MemoryStore 就是从寄存器运算结果写入缓存,不会直接写入Memory,当Cache line 将被eject 时,会writeback 到MemoryJMM 是研究的是。

2025-06-09 21:34:05 948

原创 Java进阶【十一】深入理解JVM (下)

​ 前面我们了解了JVM相关的理论知识,这章节主要从实战方面,去解读JVM。​ JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

2025-06-09 21:31:33 546

原创 Java进阶【十】 深入理解JVM(中)

​ 上次讲解了JVM内存相关知识,今天继续JVM专题。​ 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了。

2025-06-09 21:29:06 676

原创 Java进阶【九】深入理解JVM(上)

​ 作为java工程师,对于jvm肯定不陌生。JVM是Java Virtual Machine的缩写,通俗来说也就是运行java代码的容器。当项目启动时,会根据jvm相关配置参数,在计算机的内存中开启一片空间用于运行JVM。之后java相关代码就会被加载进JVM中运行。​。

2025-06-04 11:00:00 1723

原创 Java进阶【八】设计模式之总结

​ 关于设计模式的文章就到这里了,学习这门多设计模式,你是不是有这样的疑惑,发现很多设计模式很类似,经常会混淆某些设计模式。这章节我们将对设计模式做一个总结,看看各类设计模式有什么区别。需要注意的是,设计模式在于理解,不在于形式。不要为了套用设计模式而使用设计模式,而是,在业务上遇到问题时,很自然的想到设计模式作为一种解决方案。设计模式其实一门艺术。设计模式来源于生活,不要为了套用设计模式而去使用设计模式。设计模式是在我们迷茫时提供的一种解决问题的方案,或者说用好设计模式可以防范于未然。

2025-06-04 10:45:00 537 1

原创 Java进阶【七】设计模式之适配器模式、装饰者模式、观察者模式

​ 本章节将介绍:三个设计模式,适配器模式、装饰者模式和观察者模式。通过学习适配器模式,可以优雅的解决代码功能的兼容问题。另外有重构需求的人群一定需要掌握装饰者模式。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(Spring中常用的设计模式)(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的,如果觉得本文对你有用,请点个推荐)。

2025-06-04 10:30:00 1011

原创 Java进阶【六】计模式之委派模式与策略模式

本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式、策略模式让你代码更优雅,消除程序大量冗余的代码。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(Spring中常用的设计模式)(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)。​ 委派模式不属于GOF23种设计模式中。

2025-06-04 10:15:00 325

原创 Java进阶【五】设计模式之代理模式

都知道 SpringAOP 是用代理模式实现,到底是怎么实现的?我们来一探究竟,并且自己仿真手写还原部分细节。

2025-06-04 10:00:00 426

原创 Java进阶【四】设计模式之单例模式

​ 上篇文章对工厂模式进行了详细的讲解,想必大家对设计模式合理运用的好处深有感触。本章节将介绍:单例模式与原型模式。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(Spring中常用的设计模式)(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)。

2025-06-03 20:20:03 973

原创 Java进阶【三】设计模式之工厂模式

​ 今天开始对设计模式进行讲解,本章节介绍:了解设计模式的由来,介绍设计模式能帮我们解决那些问题以及剖析工厂模式的历史由来及应用场景。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(Spring中常用的设计模式)(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)。​ 工厂模式的三种方式,没有绝对的好坏,合适的场景使用合适的模式,实际应用中,我们千万不能犯强迫症甚至有洁癖。在实际需求中产品等级结构升级是非常正常的一件事情。

2025-06-03 20:18:24 588

原创 Java进阶【二】软件架构设计原则(下)

​ 本章节继续分享软件架构设计原则的下篇,将介绍:接口隔离原则、迪米特原则、里氏替换原则和合成复用原则。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)。​ 学习设计原则,学习设计模式的基础。在实际开发过程中,并不是一定要求所有代码都 遵循设计原则,我们要考虑人力、时间、成本、质量,不是刻意追求完美,要在适当的 场景遵循设计原则,体现的是一种平衡取舍,帮助我们设计出更加优雅的代码结构。

2025-06-03 20:17:30 634

原创 Java进阶【一】 软件架构设计原则(上)

开始进阶学习的第一天,我们先从经典设计思想开始,看看大牛市如何写代码的,提升技术审美、提高核心竞争力。本章节参考资料书籍《Spring 5核心原理》中的第一篇 Spring 内功心法(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的)。

2025-06-03 20:16:41 852

原创 100道Java程序员面试题(含答案)

答案:StringBuffers本质上是动态的,我们可以改变StringBuffer对象的值,而String是不可变的,每次数据更改都会创建一个新的String对象,增加额外开销,所以在数据更改很多的情况下,StringBuffer是一个更好的选择。答案:final是Java中的关键字,有“无法改变”、“终态”的含义,final类不能被继承,没有子类,final类中的方法默认是final的,且不能被子类的方法覆盖,但可以被继承。答案:使用继承的主要优点是代码的可重用性,因为继承使子类能够重用其父类的代码。

2025-06-02 16:42:12 1554

原创 高并发下的计数器,为什么阿里不推荐使用 AtomicLong?

LongAdder 是 JDK1.8 由 Doug Lea 大神新增的原子操作类,位于 java.util.concurrent.atomic 包下,LongAdder 在高并发的场景下会比 AtomicLong 具有更好的性能,代价是消耗更多的内存空间。图片 图里可以看出在高并发情况下,当有大量线程同时去更新一个变量,任意一个时间点只有一个线程能够成功,绝大部分的线程在尝试更新失败后,会通过自旋的方式再次进行尝试,这样严重占用了 CPU 的时间片,进而导致系统性能问题。这对于开发人员来说是非常重要的。

2025-06-02 16:37:56 473

原创 关于IDEA使用xml实现动态sql的问题

使用哪种方法主要取决于项目的具体需求和团队的偏好:项目规模较小,SQL语句简单:可以考虑使用依赖注解的方法,简洁直观。项目规模较大,SQL语句复杂:建议使用XML文件,便于SQL的灵活拼接和独立维护。

2025-06-02 16:37:24 828

原创 领导:谁再用 Redis 实现过期订单关闭,立马滚蛋!

这里说点题外话,使用 redis 过期监听或者 rabbitmq 死信队列做延时任务都是以设计者预想之外的方式使用中间件,这种出其不意必自毙的行为通常会存在某些隐患,比如缺乏一致性和可靠性保证,吞吐量较低、资源泄漏等。在电商、支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时间段后进行关闭操作,细心的你一定发现了像某宝、某东都有这样的逻辑,而且时间很准确,误差在1s内;那他们是怎么实现的呢?时间轮是一种很优秀的定时任务的数据结构,然而绝大多数时间轮实现是纯内存没有持久化的。

2025-06-02 16:36:43 325

原创 Java使用poi导出excel折线图

【代码】Java使用poi导出excel折线图。

2025-06-02 16:36:03 145

原创 mybatis条件判断及动态sql的简单拓展

【代码】mybatis条件判断及动态sql的简单拓展。

2025-06-02 16:35:33 309

原创 线程的6种状态(juc编程)

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢?/* 新建 */NEW ,/* 可运行状态 */RUNNABLE ,/* 阻塞状态 */BLOCKED ,/* 无限等待状态 */WAITING ,/* 计时等待 *//* 终止 */TERMINATED;// 获取当前线程的状态通过源码我们可以看到Java中的线程存在6种状态,每种线程状态的含义如下线程状态具体含义。

2025-06-02 16:35:02 730

原创 MySQL:事务基础知识

Session A和Session B各开启了一个事务,Session B中的事务先将studentno列为1的记录的name列更新为'张三',然后Session A中的事务再去查询这条studentno为1的记录,如果读到列name的值为'张三',而Session B中的事务稍后进行了回滚,那么Session A中的事务相当于读到了一个不存在的数据,这种现象就称之为。:可重复读,事务A在读到一条数据之后,此时事务B对该数据进行了修改并提交,那么事务A再读该数据,读到的还是原来的内容。

2025-06-02 16:02:18 890

原创 Nacos 高级详解:提升你的开发和部署效率

nacos 提供了3种方式,配置dataId的加载顺序。

2025-06-02 16:01:45 455

原创 Jenkins太重?快试试这款简而轻的自动化部署工具吧

Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。团队中没有专业的运维,开发还要做运维的活,需要自己手动构建、部署项目。不同的项目有不同的构建、部署命令。有开发、测试、生产等多环境打包的需求。需要同时监控多个项目的运行状态。需要下载 SSH 工具远程连接服务器。需要下载 FTP 工具传输文件到服务器。多台服务器时,在不同电脑之间账号密码同步不方便。想使用一些自动化工具,但是对服务器性能太高,搭建太麻烦。

2025-06-02 16:01:04 930

原创 从单 Agent 到多 Agent 的案例落地实践

关于 Agent 的定义目前还没有形成共识,目前有3个代表性的定义:流行最广的是前 OpenAI 研究与安全副总裁 Lilian Weng 对 Agent 的定义:Agent = LLM + Planning + Tools + Memory。除此之外,LangChain 对 Agent 的定义为:使用 LLM 决定应用程序控制流的系统。OpenAI 对 Agent 的定义是:Agent 是能够代表用户自主完成任务的系统。

2025-06-02 16:00:18 986

原创 互联网大厂1000道Java面试题及答案整理

一线互联网公司都比较注重实际的项目中解决问题的能力,另外面试点主要围绕 JVM、多线程相关、基础知识的底层原理、处理高并发的能力。这里也不扯什么面试技巧了,轻松发挥就好,祝大家金三银四季能有个高薪满意的工作!你的支持,我的动力;祝各位前程似锦,offer 不断!!!

2025-05-30 20:27:26 1028

原创 如何应对 Redis 大 Key 问题

大 Key 具体表现为Redis 中的 Key 对应的 Value 很大,占用 Redis 空间比较大,本质上是大 Value 问题。对于 Redis 中不同的数据结构类型,常见示例如下所示:对于 String 类型的 Value 值,值超过 10MB(数据值太大)。对于 Set 类型的 Value 值,含有的成员数量为 10000 个(成员数量多)。对于 List 类型的 Value 值,含有的成员数量为 10000 个(成员数量多)。

2025-05-30 15:07:03 665

原创 sharding-jdbc分页查询机制,如何避免深分页导致内存过大?

为了确保从每个分片获取到足够的数据,以便在内存中进行全局排序和精确截取最终的第 10000 到 10009 条记录(总共 10 条)。因为数据分散在各个分片,Sharding-Jdbc 无法预知哪个分片的数据最终会排在全局结果的哪个位置。: 通过添加更具体的筛选条件(如时间范围、状态、用户ID等),利用分片键或索引,大幅减少每个分片需要扫描的数据量,从而间接缓解深分页影响。根据配置的分片键(如 order_id 或 user_id)和分片算法,将这条 SQL 改写并路由到所有相关的物理分片(表)上执行。

2025-05-30 15:05:53 907

原创 LosslessCut:30k Star!高效无损剪辑视频音频的利器

最后提一句,它是跨平台的(Win/Mac/Linux),而且是 Electron 架构(也就是网页技术做的桌面应用),好处是体验统一,坏处是内存占用略高。举个例子,之前一个客户给我一个成片 MP4,要我提取出背景音乐当作配乐素材,原来还得进剪辑软件、拖时间线导出,现在直接 LosslessCut 选轨道、点导出,三秒钟搞定,音质一点没变。一开始还真不信它宣传的“无损剪辑”,直到我剪了个 4K 视频出来,结果十几秒钟就搞定,还原封不动的画质和码率,才意识到这软件的核心竞争力真不是唬人的。

2025-05-30 15:04:44 731

原创 两种写法调HTTPS接口

开发阶段想快点调试 OK,可以临时跳过证书验证,但只要进到生产,建议所有人都别嫌麻烦,老老实实把证书装好,走合规流程。我这边总结了两种常见的方式——一个是“图省事式”,直接绕过 SSL 验证,另一个是“正规军”,走证书认证流程。这玩意咋说呢,能用是能用,发请求也没报错,结果到了生产一跑就挂——对方服务器启用了强校验,必须验证证书链,结果我们这边就被 SSLHandshakeException 直接踹出来了。是默认的 keystore 密码,如果你们的系统改过这个密码,那可得问问你们的安全团队,别盲改。

2025-05-30 15:03:39 494

原创 超硬核:SpringBoot+ResponseBodyEmitter异步流式推送神技,非常强大

ChatGPT 的火爆,让流式输出技术迅速走进大众视野。在那段时间里,许多热爱钻研技术的小伙伴纷纷开始学习和实践 SSE 异步处理。我当时也写过相关文章,今天,咱们换一种更为简便的方式来实现流式输出,那就是。其实,并非新技术,早在版本就已被引入。直到最近,我们在开发一个滚动日志输出功能时,才深入了解到它的强大之处。

2025-05-30 15:03:08 881

原创 阿里这么顶吗,IDE都出来了

真的是太给力了,Lingma IDE 会先调用 get-station-code-of-citys,参数为洛阳,等我确认后会再查询杭州的编码,之后调用 get-tickets ,参数为 5 月 31 日,以及洛阳和杭州的城市编码。请将 G3198 途径站点信息嵌入到网页中,帮我生成一段高德地图JSAPI代码, 实现地图上标记出来途径的站点信息,并且以箭头图标的形式标记, 各站点需要连成线,并且鼠标放到图标上可以显示到达时间,输出为yb.html。好,我们在此基础上,添点油加点醋,搞一个沿途风光的精美网页。

2025-05-30 15:02:37 590

空空如也

空空如也

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

TA关注的人

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