自定义博客皮肤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)
  • 收藏
  • 关注

原创 掌握设计模式--策略模式

策略设计模式定义了一系列算法(策略),将每个算法封装到独立的策略类中,并通过上下文类动态地选择和使用不同的策略,从而让算法的变化独立于使用算法的客户端。渊渟岳from=001YH。

2025-04-30 17:40:03 789

原创 深入解析 Spring AI 系列:解析函数调用

通过今天的讨论,我们首先了解了如何实现函数调用的基础机制,通过核心代码示例展示了如何在Spring AI中进行函数的动态调用。在此过程中,关键的isToolCall方法和函数自动调用开关的使用,确保了我们可以根据具体需求调整函数调用的方式,甚至完全由客户端来接管函数执行。此外,通过维护聊天记录并精心管理工具调用的顺序,我们能确保AI的行为更为可控和稳定。

2025-04-29 15:54:30 569

原创 用远程代理模式轻松实现远程服务调用,打开编程新大门

通过这种实现,您可以模拟一个基于Socket的远程服务和远程代理的应用。客户端通过与远程服务进行通信,而远程服务通过提供计算功能。客户端在使用代理对象进行操作时,就像是调用本地的方法一样,无感的实现远程方法的调用。这种调用方式又称为远程过程调用。常用的远程过程调用框架有CXF、Dubbo、gRPC等等,其核心思想之一都是远程代理,它实现了在本地调用远程服务时的透明性,使得远程调用看起来像本地调用。渊渟岳用远程代理模式轻松实现远程服务调用,打开编程新大门 - 渊渟岳 - 博客园。

2025-04-28 18:14:36 816

原创 K8s新手系列之K8s中的资源

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。Service:为 Pod 提供稳定的网络端点(负载均衡)。

2025-04-28 15:58:24 1143

原创 G1原理—G1垃圾回收过程之Mixed GC

Mixed GC混合回收是什么:一.YGC的过程二.Mixed GC有那些步骤三.YGC和Mixed GC的关系四.Mixed GC的并发标记是从那些对象开始的五.Mixed GC的标记还需要做哪些内容问题:Mixed GC(混合回收)的标记还需要做哪些工作?由于需要从老年代中选择一些性价比较高的区域来回收,所以需要进行性价比相关的标记。那么性价比又应该怎么计算?在MGC的并发标记阶段中会使用位图,那么位图在并发标记阶段又应该怎么使用?为什么YGC可作为Mixed GC的初始标记阶段?

2025-04-23 17:35:07 745

原创 瞧瞧别人家的日期处理,那叫一个优雅!

在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间。比如:2025-04-21、2025/04/21、2025年04月21日等等。有些字段是String类型,有些是Date类型,有些是Long类型。如果不同的数据类型,经常需要相互转换,如果处理不好,可能会出现很多意想不到的问题。这篇文章跟大家一起聊聊日期处理的常见问题,和相关的解决方案,希望对你会有所帮助。终极建议:在微服务架构中,建议建立统一的时间处理中间件,通过AOP拦截所有时间相关操作,彻底消除代码层面的时间处理差异。

2025-04-23 16:04:16 671

原创 分库分表带来的这7大问题,一定要小心!

分库分表是解决单库单表性能瓶颈的有效手段,但也会引入新的复杂性和技术挑战。这篇文章跟大家一起聊聊,分库分表后带来的7个问题,以及相关的解决方案,希望对你会有所帮助。分库分表本质上是“性能换复杂度”,它虽然能有效提升系统的性能和扩展性,但问题也随之而来。分库分表后带来的问题总结如下:应根据业务场景选择适合的分库分表策略,并通过工具和技术方案,解决由此带来的一些问题,最终实现系统的高性能与高可靠性。苏三说技术分库分表带来的这7大问题,一定要小心!- 苏三说技术 - 博客园。

2025-04-22 17:55:54 736

原创 JDK的SPI有什么缺陷?dubbo做了什么改进?

在com.alibaba.dubbo.rpc.Protocol extension = (com.alibaba.dubbo.rpc.Protocol)ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.Protocol.class).getExtension(extName)这个代码中,当然这个是有在具体的暴露服务或者引用远程服务才被调用执行的。到这一步就可以认为是dubbo的spi加载整个的过程完成了,整个链路有些长,需要好好的梳理一下。

2025-04-22 16:12:38 1005

原创 docker镜像仓库

harbor镜像仓库:Harbor 是一个开源的镜像仓库服务,用于容器镜像、Helm Chart 等符合 OCI 标准的 Artifact 的安全托管及高效分发,能够帮助您跨云原生计算平台(如 Kubernetes 和 Docker)一致且安全地管理 Artifact。在Docker生态系统中,Docker镜像仓库(或称为Docker Registry)是一个存储和分发Docker镜像的服务。,地址:https://hub.docker.com当然,现在目前各厂商也相继推出了公共的镜像仓库。

2025-04-21 17:54:03 786

原创 邮件自动回复助手(Rasa/SMTP)实现教程

Rasa NLU:负责自然语言理解,将用户输入的文本转换为结构化的意图和实体。Rasa Core:负责对话管理,根据当前对话历史和预设的对话策略,决定下一步的回复动作。Tkinter是Python的标准GUI库,可以用于创建桌面应用程序。在邮件自动回复助手中,我们可以使用Tkinter来开发一个桌面通知系统,实时显示新邮件和回复建议。

2025-04-18 18:08:38 760

原创 让我看看有多少人不知道Vue3中也能实现高阶组件HOC

HOC使用场景就是加强原组件。HOC实际就是一个函数,这个函数接收的参数就是一个组件,并且返回一个组件,返回的就是加强后组件。如下图:在出现之前HOC还有一个常见的使用场景就是提取公共逻辑,但是有了后这种场景就无需使用HOC了。这篇文章我们讲了在Vue3中如何实现一个高阶组件HOC,但是里面涉及到了很多源码知识,所以这是一篇运用源码的实战文章。如果你理解了文章中涉及到的知识,那么就会觉得Vue中实现HOC还是很简单的,反之就像是在看天书。还有最重要的一点就是。

2025-04-17 17:05:21 988

原创 面试官:如果某个业务量突然提升100倍QPS你会怎么做?

应对突发流量的核心逻辑:🔹横向拆分:用空间换时间(扩容、分库分表)。🔹纵向分层:每层专注单一问题(缓存、异步、限流)。🔹冗余设计:假设任何环节都会挂,做好兜底方案。代码拾光面试官:如果某个业务量突然提升100倍QPS你会怎么做?- 代码拾光 - 博客园引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构。

2025-04-11 17:06:46 604

原创 瞧瞧别人家的限流,那叫一个优雅!

上面列举了工作中最常用的4种限流方案。对于不同的业务场景,我们需要选择不同的限流方案。限流的黄金法则如下:记住:好的限流方案就像高铁闸机——既保证通行效率,又守住安全底线。苏三说技术瞧瞧别人家的限流,那叫一个优雅!- 苏三说技术 - 博客园引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构。

2025-04-10 17:50:07 863

原创 什么是微前端?有什么好处?有哪一些方案?

微前端是一种将前端整体架构模块化、服务化、解耦的方案。核心思想:主应用负责公共框架、路由分发;子应用负责独立业务模块(如订单管理、用户中心);各子应用可独立部署、独立运行、独立构建;技术栈可异构(如主应用用 Vue,子应用可用 React);微前端为大型应用系统带来了极大的灵活性和可扩展性,适合多团队并行开发场景。但同时也带来了通信、样式、性能等方面的新挑战。通过合理的架构设计与技术选型,可以最大化其优势,构建现代化前端基础设施。幼儿园技术家什么是微前端?有什么好处?有哪一些方案?

2025-04-10 16:12:52 661

原创 Python并发总结:多线程、多进程与异步编程

总的来看,多线程是在一个进程里创建多个线程,共享资源,线程切换开销小,适合I/O密集型任务,像网络请求、文件读写。它编程简单,能提高程序响应性,但因全局解释器锁,在CPU密集型任务中无法发挥多核优势,还存在线程安全问题。多进程中每个进程有独立内存和资源,适合CPU密集型任务,能充分利用多核CPU,稳定性高。不过,进程创建和销毁开销大,进程间通信和数据共享复杂。异步编程基于事件循环和协程,在单线程内实现异步。它并发性能高,代码简洁,适合大量 I/O 密集型任务。

2025-04-08 18:00:33 1080

原创 zk基础—zk实现分布式功能

将配置信息存储到zk的节点上。应用启动时首先从zk节点上获取配置信息,然后再向该zk节点注册一个数据变更的Watcher监听。一旦该zk节点数据发生变更,所有订阅的客户端就能收到数据变更通知。应用收到zk服务端发过来的数据变更通知后重新获取最新数据。

2025-04-08 15:44:37 1126

原创 条件锁存在的意义:用生活中的例子秒懂线程间的“暗号系统“

消灭忙等待:让线程在条件不满足时主动让出CPU,而不是"占着茅坑不拉屎"精准唤醒:通过pthread_cond_signal或pthread_cond_broadcast控制唤醒策略避免竞态条件:pthread_cond_wait会自动释放锁+进入等待队列,保证唤醒后能重新获得锁跨线程协作:像交通信号灯一样协调多个线程的执行顺序下次看到pthread_cond_wait,就想象成线程在说:"这事我干不了,先睡会儿,有情况叫我!" ——这才是高效程序员的智慧。徐lida。

2025-04-07 17:57:32 571

原创 zk源码—数据节点与Watcher机制及权限

zk的基础内容包括:数据模型、节点类型、stat状态属性等。利用这些内容可解决:集群中服务器运行情况统计、悲观锁、乐观锁等。了解zk数据模型的基本原理后,有一个问题:为什么zk不能采用相对路径查找节点?因为zk大多应用场景是定位数据模型上的节点,并在相关节点上进行操作。对于这种查找与给定值相等的问题,最适合用散列表来解决。因此zk在底层实现时,使用了一个ConcurrentHashMap来存储节点数据,用节点的完整路径作为key去存储节点数据,可以大大提高zk的查找性能。......

2025-04-07 15:52:30 1004

原创 线性判别分析(LDA):降维与分类的完美结合

线性判别分析LDA)是一种经典的线性模型,它在降维和分类任务中都表现出色。LDA监督学习LDA是一种监督学习方法,它需要利用标签信息来训练模型。线性投影LDA通过寻找特征空间中的线性组合,将数据投影到低维空间。最大化类间方差和最小化类内方差:LDA的目标是最大化不同类别之间的分离度,同时最小化同一类别内部的差异。适用于高维数据LDA可以有效地处理高维数据,通过降维来降低计算复杂度。分类和降维LDA不仅可以用于分类,还可以用于降维。LDA。

2025-04-07 10:08:29 956

原创 Excel百万数据如何快速导入?

如何高效导入百万级Excel数据。去年有家公司找到我,他们的电商系统遇到一个致命问题:每天需要导入20万条商品数据,但一执行就卡死,最长耗时超过3小时。更魔幻的是,重启服务器后前功尽弃。经过半天的源码分析,我们发现了下面这些触目惊心的代码...决不允许全量加载数据到内存→ 使用SAX流式解析避免逐行操作数据库→ 批量插入加持永远不要让用户等待→ 异步处理+进度查询横向扩展比纵向优化更有效→ 分片+分布式计算内存管理是生死线→ 对象池+避免临时大对象合理配置连接池参数→ 杜绝瓶颈在数据源。

2025-04-07 10:07:48 652

原创 JVM实战—JVM垃圾回收器的原理和调优

新生代的垃圾回收是通过标记-复制算法来实现的,我们最希望的是:新对象都在新生代的Eden区分配内存。然后每次垃圾回收后,存活对象都进入Survivor区。然后下一次垃圾回收后的存活对象都进入另外一个Survivor区。这样几乎很少对象会进入老年代,几乎不会触发老年代的垃圾回收。但是理想很丰满,现实是在写代码时,很少会考虑垃圾回收。都是不停写代码然后上线部署,很少考虑所写代码对垃圾回收的影响。

2025-04-01 18:06:14 979

原创 推荐 5 个 火火火火 的CMS开源.Net项目

下面推荐5个基于.NetCore开发的CMS开源项目。

2025-04-01 17:22:06 712

原创 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!

先别急,咱们从头说起。宏定义,顾名思义,就是用一个简短的名字来替代一段代码。这有啥了不起的?等等,这才是入门级操作。宏定义的强大之处在于,它不只能替换常量,还能替换整段代码、函数,甚至能实现一些函数做不到的骚操作!// 编译时会变成 int array[100];这种基础操作,相信很多小伙伴都知道。但接下来的操作,可能会让你眼前一亮。// 定义多个缓冲区// 展开为: char input_buffer[100]// 展开为: char output_buffer[100]

2025-03-31 18:04:55 795

原创 C 语言内存布局深度剖析:从栈到堆,你真的了解吗?

想象一下,你搬进了一栋新公寓,却不知道卧室、厨房、卫生间分别在哪儿...每天早上找个马桶都跟玩密室逃脱似的,是不是很崩溃?C 语言内存就像你的"数字公寓",不了解它的布局,代码写着写着就容易"走错房间",结果就是 —— 程序崩溃,电脑蓝屏,领导白眼...看完是不是觉得豁然开朗?栈区:餐桌,用完自动收拾堆区:储物间,需要自己管理全局区:固定家具,一直都在代码段:房屋结构,不能随便改掌握这些概念,你写 C 语言代码时就能心中有数,不再像无头苍蝇乱撞。

2025-03-31 17:28:28 755

原创 Netty源码—编解码原理(二)

在MessageToByteEncoder的编码过程中,首先会判断当前ChannelHandler能否处理传入的Java对象,如果能处理就对新创建的ByteBuf对象分配一块内存空间。然后由子类的encode()方法实现具体的编码协议,并且把编码后的数据存放到分配给ByteBuf对象的内存空间中。最后把ByteBuf对象往前一个ChannelHandler结点进行传播。如果在编码的过程中出现异常,那么就把已申请出来的、分配给ByteBuf对象的内存空间进行释放。

2025-03-28 18:02:38 899

原创 Netty源码—编解码原理(一)

一.累加字节流Netty会通过一个ByteBuf字节容器cumulation,把所有读取到的字节流累加到该字节容器。二.调用子类的decode()方法进行解析把累加字节容器里的字节流通过子类的decode()方法进行解析。三.将解析到的ByteBuf向下传播如果调用子类的decode()方法可以解析到一个ByteBuf对象,则将这个ByteBuf对象向下传播。...@Override//只基于ByteBuf对象进行解码//1.累加字节流//2.调用子类的decode()方法进行解析。

2025-03-28 15:47:07 912

原创 MySQL 优化利器 SHOW PROFILE 的实现原理

在中显示的每个阶段的耗时,实际上是由下一个阶段的采集时间减去当前阶段的采集时间得出的。每个阶段的采集时间是通过在代码的不同路径中植入实现的,采集的是系统当前时间。这种实现方式在判断操作当前状态(通过 SHOW PROCESSLIST)和分析各个阶段耗时(通过 SHOW PROFILE )时存在一定的误导性,主要是因为预定义的阶段数量是有限的。在 MySQL 8.4 中,共定义了 98 个阶段,具体的阶段名可在mysqld.cc中的数组找到。在表空间导入操作中,虽然大部分耗时显示为。

2025-03-27 17:44:21 1237

原创 关于 K8s 的一些基础概念整理-补充

稳定的唯一网络标识符:每个 StatefulSet 的 Pod 都有一个稳定的网络标识符(如 DNS 名称),这个标识符由控制器自动生成,并与 Pod 的生命周期保持关联。而 StatefulSet 为每个 Pod 维护了一个有粘性的 ID,这些 Pod 是基于相同的规约创建的,但不可相互替换,且每个 Pod 都有一个永久不变的 ID。通过使用 ConfigMap,应用程序的配置信息不再硬编码在容器镜像中,而是存储在 k8s 集群中,这样可以在不修改容器镜像的情况下更新配置,更新完成后重启服务即可。

2025-03-27 15:34:28 887

原创 【经验】几种数据库优化技巧

为了避免死锁,建议在系统中定义一个。

2025-03-26 18:04:44 1221

原创 Netty源码—Pipeline和Handler(二)

一.判断ChannelHandler是否重复添加的依据是:如果该ChannelHandler不是共享的且已被添加过,则拒绝添加。二.否则就创建一个ChannelHandlerContext结点(ctx),并把这个ChannelHandler包装进去,也就是保存ChannelHandler的引用到ChannelHandlerContext的成员变量中。

2025-03-25 17:16:25 848

原创 Netty源码—Pipeline和Handler

ChannelPipeline中保存了Channel的引用,ChannelPipeline中每个结点都是一个ChannelHandlerContext对象,每个ChannelHandlerContext结点都包裹着一个ChannelHandler执行器,每个ChannelHandlerContext结点都保存了它包裹的执行器ChannelHandler执行操作时所需要的上下文ChannelPipeline。在这个过程中,任何ChannelHandler都可以中断当前的流程,中断消息的传递。

2025-03-25 15:27:19 1028

原创 Netty源码—客户端接入流程

在服务端Channel对应的NioEventLoop的run()方法的processSelectedKeys()方法里,发现产生的IO事件是ACCEPT事件之后,会通过JDK Channel的accept()方法取创建JDK的Channel,并把它包装成Netty自定义的NioSocketChannel。在这个过程中会通过一个RecvByteBufAllocator.Handle对象控制连接接入的速率,默认一次性读取16个连接。创建NioSocketChannel的逻辑可以分成两部分。

2025-03-24 18:04:15 551

转载 工作中最常用的 8 种设计模式

设计模式在我们日常的软件开发中无处不在,它们帮助我们编写更易扩展、更具可读性的代码。今天结合我实际工作场景和源码实例,跟大家一起聊聊工作中最常用的8种设计模式,希望对你会有所帮助。这些设计模式不仅在日常开发中有着广泛应用,更在 JDK 和 Spring 中深度体现。了解它们的本质和应用场景,能够让我们写出更优雅、更健壮的代码。下次再遇到类似问题时,希望你能得心应手地选择合适的模式!文章转载自:苏三说技术工作中最常用的 8 种设计模式 - 苏三说技术 - 博客园。

2025-03-24 11:21:42 18

转载 Netty源码—Reactor线程模型二

关于Reactor线程的select操作所做的事情:简单来说就是:不断轮询是否有IO事件发生,并且在轮询过程中不断检查是否有任务需要执行,从而保证Netty任务队列中的任务都能够及时执行,以及在轮询过程中会巧妙地使用一个计数器来避开JDK的空轮询Bug。详细来说就是:NioEventLoop的select()方法首先会判断有没有定时任务快到要开始的时间了、普通任务队列taskQueue里是否存在任务。

2025-03-22 10:33:34 34

原创 数据、信息、知识、智慧:AI时代我们该如何思考?

从大数据到大模型,从大模型到知识库,从知识库到工作流,再到现在的多智能体协作,这不只是技术升级那么简单,它正在改变我们思考问题的方式,甚至改变我们工作和生活的方式。我们既是这场变革的见证者,同时也是参与者。如果能理解AI发展背后的这些规律和逻辑,就像掌握了一张未来世界的地图,帮我们在这个变化超快的时代找到属于自己的生态位。说了这么多,其实就想表达一个简单的想法:“AI的发展不是偶然的,而是遵循着人类认知发展的自然规律,了解了规律,就了解了AI的走向。工业革命解放了人类的体力,AI革命正在解放人类的脑力。

2025-03-21 17:23:33 1086

原创 Netty源码—Reactor线程模型一

默认情况下,NioEventLoopGroup会创建2倍CPU核数个NioEventLoop。一个NioEventLoop和一个Selector以及一个MPSC任务队列一一对应。NioEventLoop线程的命名规则是nioEventLoopGroup-xx-yy,其中xx表示全局第xx个NioEventLoopGroup线程池,yy表示这个NioEventLoop在这个NioEventLoopGroup中是属于第yy个。

2025-03-21 15:18:33 925

原创 打工人逆袭指南:老板不知道的AI+低代码组合拳,立省80%开发成本!

低代码开发平台是一种新型的应用开发工具,它打破了传统开发模式对大量代码编写的依赖。其核心特点在于提供了可视化的界面,就像搭建积木一样,开发者只需通过简单的拖放组件操作,就能快速构建出应用的基本框架。同时,通过配置参数的方式,进一步定义组件的功能和行为,从而实现复杂的业务逻辑。以JNPF为例,这是引迈推出的低代码开发平台,它为企业数字化转型提供了有力支持。在宜搭上,开发者可以通过可视化界面,轻松拖拽各种表单组件、数据展示组件等,快速搭建出企业所需的业务应用,如办公自动化系统、客户关系管理系统等。

2025-03-20 18:00:57 1001

原创 几个技巧,教你去除文章的 AI 味!

最近有不少朋友在利用 AI 写毕业设计论文,几秒钟一篇文章就刷出来的,爽的飞起。结果万万没想到,人家论文查重服务也升级了,是不是用 AI 写的论文大概率都能被查出来。。。这可如何是好啊?救救我救救我。。。下面我就给大家分享一些快速去除文章 AI 味的小技巧,有些是网上被分享过的,也有些是我个人的经验。学会之后,无论是写工作文案、毕业设计、自媒体文章,还是平时生活中写写好评,都是非常轻松的。不过请大家放心,本文纯手打,也才消耗了我 3 成的指力罢了~

2025-03-20 17:19:31 819

原创 C#实现自己的Json解析器(LALR(1)+miniDFA)

Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器)迅速实现一个简单高效的Json解析器。读者可在(https://gitee.com/bitzhuwei/bitParser-demos/tree/master/bitzhuwei.JsonFormat.TestConsole)查看、下载完整代码。

2025-03-20 16:03:52 1085

原创 Netty基础—Netty实现私有协议栈

跨节点的远程服务调用(跨节点通信),除了链路层的物理连接外,还需要对请求和响应消息进行编解码。在请求和应答消息本身以外,也需要携带一些其他控制和管理类指令。例如链路建立的握手请求和响应消息、链路检测的心跳消息等。当这些功能组合到一起后就会形成私有协议。私有协议并没有标准的定义,只要是能够用于跨进程、跨主机数据交换的非标准协议,都可以称为私有协议。任何一个自定义协议,都必须有消息头Header + 消息体Body。消息头Header里会存放一些消息的元数据,消息体Body里会存放完整的请求体数据。

2025-03-19 17:34:41 1118

空空如也

空空如也

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

TA关注的人

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