自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 01-JDK动态代理

定义:为目标对象提供一个代理对象,由代理对象控制目标对象的访问,在不修改目标对象的情况下,对原方法做增强或控制。职责划分四个角色1、抽象主题(接口):定义统一的业务接口,真实对象、代理对象都需要实现该接口 ​ 2、真实主题(实现类):被代理的实际业务,实现真正的业务逻辑 ​ 3、代理(Proxy):实现业务接口,内部持有回调处理器InvocationHandler;接收外部方法调用,不执行业务,直接转发给回调处理器 ​ 4、回调处理器InvocationHandler。

2026-10-10 11:43:38 178

原创 00-Dubbo-原生API开发应用

该参数标识的是 Dubbo 服务之间通信时使用的协议报文版本,用于兼容不同版本的 Dubbo 框架之间的通信,与当前使用的 Dubbo 框架版本 3.3.6 是两个不同的概念。开启后,提供者会把注册中心的元数据缓存到本地磁盘文件,当注册中心出现故障或网络不可达时,服务依然可以基于本地缓存继续对外提供服务,增强了系统的容错能力。:允许任意主机访问服务。当该参数为 true 时,表示当前服务已被标记为废弃,调用方在引用该服务时会收到告警提示,通常用于服务升级过程中的平滑过渡,提醒调用方尽快迁移到新版本服务。

2026-08-26 17:17:02 215 1

原创 00-Dubbo-基本概念

Apache Dubbo是,官方提供了Java、Golang等多语言实现。使用Dubbo开发的微服务,利用Dubbo提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo被设计为高度可扩展,用户可以方便的实现流量拦截,选址的各种定制逻辑。

2026-08-26 09:33:56 165

原创 10-深入理解ConcurrentHashMap(JDK1.8)

ConcurrentHashMap是java的并发容器,线程安全的HashMap,解决原生HashMap并发死链、数据丢失,以及解决HashTable全局锁性能低下的问题,适用于多线程并发读写场景。

2026-08-12 21:31:09 179

原创 09-深入理解ThreadLocal

弱引用只是给了key可以被回收、Entry可以被判定为过期的机会,它本身不解决泄漏;自动清理机制也只是兜底补救,不是保证。

2026-08-10 09:30:20 305

原创 08-JUC并发基础-AQS-补充共享锁

以CountDownLatch案例分析共享锁简单理解:初始化共享状态 state=5调用countDown就是将state的值减1,直到减到0为止当state的值为0时,则会唤醒头结点的后继节点当state的是不为0时,不做任何处理调用await时,如果state!=0,创建Node并加入到队列末尾,阻塞如果state=0,则继续向下执行。

2026-08-05 14:25:32 227

原创 07-JUC并发基础-AQS

同步状态(state)

2026-08-04 17:35:47 161

原创 06-深入理解java Lock

lock是java层面的接口,提供了比synchronized更灵活的锁的控制能力,支持可中断获取、超时、公平/非公平切换、多条件的使用。lock不会自动释放锁,必须显示的获取和释放锁。

2026-08-04 10:13:59 284

原创 05-初识synchronized

synchronized(英['sɪŋkrənaɪzd],美['sɪŋkrənaɪzd])是Java语言的关键字,用于实现线程同步。当修饰方法或代码块时,同一时间仅允许一个线程执行该同步区域,其他线程需等待当前线程释放锁。该关键字通过对象锁和类锁实现同步控制:修饰方法时需置于访问修饰符与返回类型之间,锁定当前实例对象;修饰代码块时可指定具体锁定对象或类。当线程访问同步代码块时,其他线程无法访问同一对象的其他同步代码块,但可访问非同步代码块。

2026-07-30 14:26:43 379

原创 04-volatile核心原理与经典案例详解

volatile是 Java 提供的轻量级同步机制,核心特性可以总结为两个保证,一个不保证保证可见性:一个线程修改 volatile 变量后,其他线程能立即读到最新值;线程对 volatile 变量的读写直接与主内存交互,不会长期依赖本地缓存副本。禁止指令重排序:通过内存屏障机制,阻止编译器和 CPU 对 volatile 变量读写前后的指令进行乱序优化。不保证原子性:对于i++这类「读 - 改 - 写」的复合操作,仅靠 volatile 修饰无法保证线程安全,多线程并发执行仍会出现数据丢失。

2026-07-29 16:08:35 43

原创 03-并发三大问题:原子性、可见性、有序性

线程1和线程2分别对共享变量i,自增1000次,但是下面打代码返回结果会小于等于2000,与我们期望的2000有出入。原因: i++ 操作对应的字节码,非原子性操作。

2026-07-29 11:16:06 320

原创 02-线程的基础原理和使用

并行:多个任务同时执行(多核CPU)并发:多个任务交替执行,看起来同时运行。

2026-07-28 16:29:30 360

原创 00-JDK8 HotSpot 源码

在学习Java并发,总会遇到synchronized、volatile等关键字,单纯的去研读理论,底层原理十分抽象,很容易浮于表面,也晦涩难懂。所以借此机会下载源码,以源码为抓手将抽象的概念具象化,做到能看得见、摸得着,方便在推演、脑补整个执行过程。不求全部能看到,起码能看到内部的数据结构,是如何存储和使用的。

2026-07-27 16:34:43 215

原创 Navicat Premium连接sql server数据库

网上一般都是说在Navicat Premium的安装目录下有sqlncli.msi文件;但是我在我本地没有找到;所以我在网上自己找了这个文件下载安装。双击sqlncli.msi安装,下一步下一步就可以;重点:安装前一定要关闭navicat premium工具。

2026-07-24 15:37:01 397

原创 01-并发编程-工具

学习 Java 并发编程底层原理过程中,对象内存布局、Java 编译生成的字节码都是较为抽象的概念。为了更好地理解底层逻辑,我会使用相关指令查看对象内部布局、解析类字节码,把抽象理论转化为看得见、摸得着的直观信息。

2026-07-23 20:22:58 191

原创 99-CompletableFuture-底层源码深度剖析

状态可见性:result、stack 使用 volatile,volatile 写屏障保证状态变更实时对其他线程可见;无锁修改:全部字段更新依赖 Unsafe CAS,无 synchronized、AQS 锁,高并发性能优异;链表安全:postComplete 阶段截断链表,避免并发新增节点造成漏执行;线程阻塞:基于 LockSupport park/unpark,底层操作系统原语,无对象监视器开销;链式传递。

2026-07-20 19:51:46 369

原创 98-CompletableFuture-基本使用

在当前制造业数字化转型的浪潮中,可用量承诺(ATP)作为连接销售端和供应端的核心枢纽,其计算效率直接决定了订单履约的准确性与客户体验,一个典型的ATP计算过程,本质上是一个。

2026-07-20 16:03:31 328

原创 02-python-开发工具Pycharm

python开发工具Pycharm的安装

2026-07-09 08:55:42 307

原创 00-python-windows安装

python安装

2026-07-08 14:32:41 51

原创 03-报表导出一直卡死

在业务需求背景中需要从mysql表中查询出基础数据,其次使用rpc接口调用获取外部数据,然后再掺杂复杂的业务逻辑,然后组转出需要导出的报表数据,最后将数据写入到excel中进行导出。比如ATP系统中缺料汇总报表,需要从70W的供需追溯数据,按照物料编码的维度,以工单需求、其他需求、ASN、CMT、Balance(供应数量(良品仓库存数量+ASN+CMT-工单需求-其他需求数量)-需求数量),统计出对应的数据,可以通过Balance数据判断是否缺料,小于0表示缺料,否则不缺料。

2026-02-24 20:58:12 850

原创 项目开发各阶段的工作心得

同时,针对基础数据功能(如导入导出模板统一、导入时清空历史数据等),结合测试提出的合理建议,及时完成整体优化调整(此类需求未在原始需求文档中明确,需重点关注并完善)。背景:以下流程是基于某个系统升级迭代工作,产品不了解原逻辑的细节(需要从代码中梳理出原有的逻辑,在进行逻辑的叠加以及需要跟产品对逻辑)、需求文档不清晰,需要开发Leader主导整个开发、测试、上线的整体流程。:核心推进前后端联调工作,实现业务功能全流程串联,在流程串通过程中,重点排查并梳理各类细节问题及流程衔接漏洞,提前规避后续风险。

2026-02-24 15:20:16 404

原创 性能分析工具-StopWatch

StopWatch是一个用于计时和统计代码执行耗时的工具类,主要功能包括:分段计时:支持统计多个任务的耗时(如用户登录流程中的密码验证、权限加载等);自动累加总耗时:无需手动计算个任务耗时之和;格式化输出:可直接输出包含各任务耗时占比的易读结果;轻量无侵入:仅需少量代码即可集成,适合调试和性能分析。

2026-02-13 10:06:19 1024

原创 02-生产问题-慢SQL-20250906

当发生性能问题时候:1 查看执行计划,该加索引加索引2 SQL从内向外依次执行,排查出执行时间长的语句,比如内部时间长,则针对优化即可3 适当增加条件,查看执行的时长等<5点补充就是按照这个方式排查出来的>

2025-09-06 15:20:00 362 1

原创 01-线上问题处理-树形结构拼接

步骤一:一次性获取到所有的数据tisManualCatalogPOS步骤二:获取到一级节点(parentId为null)步骤三:递归向下拼接树的深度很深,导致堆栈越多,可能生产8K的数据能很明显的看到接口响应慢,<

2025-09-06 14:36:32 290

原创 04-spring-手写spring-demo-aop0V1

类名描述Spring ioc容器上下文,aop入口instantiateBean方法下工具类,缓存aop配置,创建对象的实例以及类,缓存实例方法和切面方法的对应关系代理对象的工厂,策略,有接口则走jdk代理否则走cglib代理接口,代理类,getProxyjdk动态代理实现,具体调用时在这块加强cglib动态代理包含切面方法、切面实例,异常名称等属性,缓存切面方法的对象aop在properties的配置对象。

2025-08-13 17:08:31 378

原创 03-spring-手写spring-demoV2-解决循环依赖问题

场景一:A B互相依赖,这种依赖关系形成一个闭环的形式就称之为循环依赖场景二:A依赖于自己,这种依赖关系形成一个闭环的形式就称之为循环依赖场景三:A依赖于B, B依赖于C, C依赖于A, A依赖C ,这种依赖关系形成一个闭环的形式就称之为循环依赖。

2025-08-12 13:33:26 672

原创 02-spring-手写spring-demoV2

在的基础上进行改造,原来在DispatcherServlet类上进行了所有的操作比如读取配置文件地址,加载配置文件、创建实例、依赖注入等操作。现在模仿spring的方式拆分出来。

2025-08-12 10:38:34 737

原创 01-spring-手写spring-demo实现基础的功能

自定义BonnieController BonnieRequestMapping、BonnieService、BonnieAutowired等注解实现一个简单的springmvc的功能。从浏览器访问url,然后请求到对应的接口,以及service等。

2025-08-11 15:02:27 909

原创 14-netty基础-手写rpc-提供方(服务端)-06

在服务端启动的时候,在,拿到当前bean的信息,判断是否被BonnieRemoteService修饰,如果被修饰则获取到当前类下的所有Method,然后将这个Method信息缓存到容器中。以供后续rpc反射调用。缓存容器使用Map, key:类的全路径+方法名称 value:Method即可。

2025-08-07 15:36:42 426

原创 13-netty基础-手写rpc-消费方生成代理-05

在spring容器加载BeanDefinition之后,在Bean初始化之前执行,实现接口接口中postProcessBeanFactory方法即可获取所有的beanDefinitionNames获取beanClassName对应的类信息Class<?获取clazz上的所有属性(成员变量)当前这个field是否被BonnieRemoteReference注解修饰生成SpringRpcReferenceBean的BeanDefinition。

2025-08-07 15:24:31 1193

原创 12-netty基础-手写rpc-编解码-04

编解码都采用原生的ByteBuf,分别为MessageToByteEncoder、ByteToMessageDecoder;解决了拆包、粘包问题编码:将需要发送的数据封装成形式进行发送解码:将接收到的数据解释成形式然后处理相应的业务逻辑。

2025-08-07 14:44:28 374

原创 11-netty基础-手写rpc-支持多序列化协议-03

因为序列化的方式多种多样,使用场景也不一样,所以要提供多种序列化的方式,然后根据业务场景来选择对应的序列化方式。netty-protocol serializer包下。根据不同的序列化类型返回对应的序列化处理类。

2025-08-07 14:38:05 400

原创 10-netty基础-手写rpc-定义协议头-02

请求头中包含:

2025-08-07 14:17:07 358

原创 09-netty基础-手写rpc-原理-01

6、服务端启动的时候,在spring的对象初始化完成之后,识别出被BonnieRemoteService修饰的类,将这种类下的所有方法都缓存到Map中,以供后续处理客户端的请求反射调用。5、客户端启动的时候在spring容器加载bean定义文件之后,初始化之前,为添加了BonnieRemoteReference的类属性生成Bean的代理对象放入到spring容器中。1、自定义服务提供方和消费方注解 BonnieRemoteReference(消费方)、BonnieRemoteService(提供方)

2025-08-07 14:00:12 691

原创 08-netty基础-自定义序列化和反序列化

Serializer接口/*** 反序列化:一个是要反序列化的对象类型,还一个是反序列化的字节数组* @return*//*** 序列化:需要的参数就是序列化的对象* @return*/

2025-08-05 11:39:10 441

原创 07-netty基础-自定义编解码器

Slf4j@Data@ToString// header长度 4个字节// 头内容@Slf4j@Data// 版本// 语言// 序列化方式 1个字节// 请求类型 1个字节@Slf4j@Data@ToString// 长度 4个字节// 请求头信息// 消息体。

2025-08-01 17:39:08 559

原创 06-netty基础-编码解码

使用其他方式作为结束标志的解码器,比如使用&;等;只需要在发送数据的时候在数据后面加上分隔的符号就行了,只是分隔的符号需要包装成一个ByteBuf// 第三种:分隔符// maxFrameLength :报文的最大长度// stripDelimiter:判断解码的时候是否要把分隔符去掉// failFast:跟maxFrameLength合起来用,如果为true,如果大于消息的长度,直接抛异常,如果为false,解码之后抛异常// Delimiter:分隔符。

2025-08-01 16:41:23 772

原创 05-netty基础-ByteBuf数据结构

在网络编程中,字节数据的处理是核心环节之一。无论是客户端与服务器之间的通信,还是数据的编解码操作,都离不开对字节缓冲区的高效管理。Java 原生的ByteBuffer虽然提供了基础功能,但在灵活性、性能和易用性上存在诸多局限。而 Netty 框架提供的ByteBuf则彻底解决了这些问题,成为处理网络字节数据的首选工具。

2025-07-31 11:29:45 739

原创 04-netty基础-Reactor三种模型

Reactor模型是一种的设计模式,主要用于高效处理高并发、I/O密集型场景(如网络、服务器、分布式等)。其核心思想就是集中管理事件,将I/O操作与业务逻辑解耦,避免传统多线程模型中线程切换的开销,从而提升系统的吞吐量和响应速度。核心目标:在高并发场景下,传统的 “一连接一线程” 模型会因线程创建 / 销毁、上下文切换的开销过大而效率低下。

2025-07-25 10:55:51 1369

原创 03-netty基础-多路复用select、poll、epoll

是一种让单个线程同时处理多个 I/O 通道的技术,核心是通过系统调用将 I/O 状态查询的工作交给操作系统内核,应用程序只需等待内核通知哪些通道就绪。

2025-07-24 17:55:55 829

Navicat Premium连接sqlServer安装环境

Navicat Premium连接sqlServer安装环境

2026-07-24

空空如也

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

TA关注的人

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