自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2025-04-01 18:06:14 963

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

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

2025-04-01 17:22:06 698

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

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

2025-03-31 18:04:55 777

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

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

2025-03-31 17:28:28 746

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

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

2025-03-28 18:02:38 897

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

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

2025-03-28 15:47:07 898

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

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

2025-03-27 17:44:21 1222

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

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

2025-03-27 15:34:28 873

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

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

2025-03-26 18:04:44 1136

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

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

2025-03-25 17:16:25 836

原创 Netty源码—Pipeline和Handler

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

2025-03-25 15:27:19 999

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

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

2025-03-24 18:04:15 541

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

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

2025-03-24 11:21:42 11

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

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

2025-03-22 10:33:34 26

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

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

2025-03-21 17:23:33 1041

原创 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 917

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

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

2025-03-20 18:00:57 982

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

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

2025-03-20 17:19:31 745

原创 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 1074

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

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

2025-03-19 17:34:41 1104

原创 DeepSeek来袭!低代码+AI竟让程序员摸鱼接私单月入5W!

DeepSeek 是由杭州深度求索人工智能基础技术研究有限公司开发的 AI 大模型,在自然语言处理和代码生成领域展现出卓越的性能。它通过深度学习和自然语言处理技术,能够理解复杂的问题,并提供精准的解决方案,具备强大的智能问答和多模态交互能力。凭借其独特的技术架构,DeepSeek 在代码生成任务中表现出色,能够快速生成高质量、符合语法规范且逻辑清晰的代码片段,涵盖多种编程语言,如 Python、Java、C++ 等,大大提高了开发效率。

2025-03-18 17:39:58 1415

原创 redis基本操作

为什么学习redis,前几天有个需求,用到了redis库,之前学习过但仅限于大学的时候,这个时候差不多忘光了,需求测的时候也是现学的几个查询指令。印象最深的是开发设计的时候存储了10个不同key值但value(list字符串)相同的数据,当时问过为什么要存十个,解释为 “为了防止频繁的访问一个key导致的热key问题,所以存储10个相同value的key,随机访问,分散压力”。后面查询资料才发现,频繁访问一个会导致CPU资源过载,内存资源紧张,负载不均衡等问题。

2025-03-18 16:23:16 592

原创 『Plotly实战指南』--折线图绘制基础篇

使用Plotly能够轻松绘制折线图。在本文中,我们从基础的折线图绘制开始,然后逐步介绍了数据预处理技巧。希望这些内容能帮助你在数据分析中更好地利用Plotly绘制折线图。wang_yb『Plotly实战指南』--折线图绘制基础篇 - wang_yb - 博客园引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构。

2025-03-18 16:04:55 743

原创 依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式

提供一个接口,用于创建相关或依赖对象族,而无需指定具体类。抽象工厂包含多个工厂方法,每个方法负责创建一个产品族中的对象。依赖倒置(DIP)、依赖注入(DI)、控制反转(IoC)和工厂模式是软件设计中紧密相关的概念,它们共同服务于代码的解耦和可维护性。

2025-03-17 17:39:10 743

原创 Netty基础—Netty实现RPC服务

本地只有一个方法的接口,需要在本地对这个方法进行远程调用,而对这个方法进行调用其实就是对该接口的动态代理进行调用。动态代理的底层会把对这个方法的调用封装成一个请求,然后把这个请求序列化成一个二进制数据请求,之后再通过Netty网络通信将二进制数据请求发送给远程机器。远程机器会启动一个Netty服务端来监听连接和请求,然后把二进制数据反序列化成请求对象,接着再根据这个请求对象在本地找到要调用的那个方法,最后通过反射去调用这个方法并获取结果进行返回。

2025-03-17 16:19:32 766

原创 红头文件流出:国企禁用Spring!低代码+国产化部署已成唯一出路(附避坑指南)

在这样的背景下,低代码技术逐渐走进了人们的视野。低代码技术是一种新兴的应用程序开发方法,它允许开发者通过图形化界面、配置和少量的编码来快速构建应用程序。低代码平台就像是一个装满各种零件的工具箱,开发者不需要像传统开发那样,从最基础的代码开始一点点搭建应用,而是可以直接从工具箱中选取合适的 “零件”(组件、模块等),通过简单的拖拽、配置操作,就能够快速组合出一个功能完备的应用程序。

2025-03-14 17:47:12 1217

原创 鸿蒙WebSocket的使用竟如此简单

使用WebSocket建立服务器与客户端的双向连接,需要先通过createWebSocket()方法创建WebSocket对象,然后通过connect()方法连接到服务器。当连接成功后,客户端会收到open事件的回调,之后客户端就可以通过send()方法与服务器进行通信。当服务器发信息给客户端时,客户端会收到message事件的回调。当客户端不要此连接时,可以通过调用close()方法主动断开连接,之后客户端会收到close事件的回调。若在上述任一过程中发生错误,客户端会收到error事件的回调。

2025-03-14 17:02:59 841

原创 提示词工程——AI应用必不可少的技术

提示词工程是通过设计特定的输入指令(Prompt),引导大模型生成符合预期的输出结果的技术。将人类的意图转化为模型能理解的“语言”,从而指挥模型完成复杂任务。请解析以下文本,提取“出发地”和“目的地”,按JSON格式输出:文本:我看了成都飞北京的机票,价格比上周涨了500元。模型便会返回:{"from": "成都", "to": "北京"}。这一过程看似简单,实则需要精准的“对话术”——这正是提示词工程的价值所在。提示词工程不是“魔法咒语”,而是AI时代的编程新范式。

2025-03-14 15:45:28 671

原创 血泪亲测!低代码开发OA系统竟比传统编码快8倍!这3个坑千万别踩!​

低代码开发 OA 系统在提升开发效率、降低技术门槛、增强系统灵活性等方面展现出了巨大的优势,能够比传统编码方式快 8 倍甚至更多,这已经在众多企业的实践中得到了验证。通过可视化编程、预构建模块复用和自动化流程,低代码开发为 OA 系统的搭建带来了前所未有的便捷性和高效性。然而,在低代码开发 OA 系统的过程中,也需要警惕平台选型、需求分析、数据安全与集成等方面的陷阱,避免因这些问题影响项目的进度和质量。企业应充分了解自身需求,做好充分的调研和准备工作,选择合适的低代码平台,并注重开发过程中的细节把控。

2025-03-13 17:57:19 1192

原创 字符编码:从基础到乱码解决

待编码字符集,定义字符的逻辑集合,不涉及具体的编码逻辑。这一层仅确定“汉”字属于某个字符集。(像 GB2312 就只收录了 6763 个常用的汉字和字符,一些生僻字就没有被收录进来。又比如 ASCII 中就没有中文字符。笔者希望通过这篇博客,能为各位读者在字符编码这一块提供一些有价值的见解和帮助。文章转载自:师从名剑山字符编码:从基础到乱码解决 - 师从名剑山 - 博客园引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构。

2025-03-13 16:17:18 1001

原创 Netty基础—基础网络协议

首先是七层模型和四层模型,然后是一次请求的全过程,接着是传输层的TCP连接(三次握手和四次挥手),然后就是传输层TCP协议上的Socket编程,最后是应用层的HTTP协议。网络层最重要的协议就是IP协议,IP协议定义了一个个的IP地址,通过IP地址可以划分出一个个的子网。子网内通信是通过以太网协议 + mac地址 + 交换机来广播数据包的。

2025-03-13 15:25:53 1135

原创 .NET Core 中如何实现缓存的预热?

缓存预热,顾名思义,就是在系统启动或缓存失效后,主动将热点数据加载到缓存中,避免用户首次请求时直接访问数据库,造成性能瓶颈。缓存预热是提升 .NET Core 应用性能的重要手段。通过合理的预热策略,可以有效提升用户体验、降低数据库压力、提高系统稳定性。希望本文能帮助你更好地理解和应用缓存预热技术。代码拾光.NET Core 中如何实现缓存的预热?- 代码拾光 - 博客园引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构。

2025-03-12 18:02:26 294

原创 Vue3组合式API终极指南:从原理到实战,彻底掌握高效开发!

在Vue3从发布到今天,组合式API已成为现代前端开发的标杆设计模式。本文通过真实项目场景,深度解析组合式API的核心特性,配以完整代码示例,助你彻底掌握企业级Vue应用开发精髓。通过本篇文章的解析,相信你已经掌握了Vue3组合式API的核心精髓。建议结合官方文档 和Vue Mastery课程 进行系统化学习。欢迎在评论区分享您的实战经验!Vue3组合式API终极指南:从原理到实战,彻底掌握高效开发!- Code_Cracke - 博客园。

2025-03-12 16:34:29 408

原创 程序员福音!用低代码1周搞定3个月项目,看我如何助力企业数字化转型

比如开发一个简单的电商商品展示页面,用传统方式,程序员需要用 HTML 定义页面结构,用 CSS 精心调整样式,像设置图片的大小、位置,文字的字体、颜色等,再用 JavaScript 实现交互功能,如点击图片放大、加入购物车的动态效果。而低代码平台提供了丰富的预构建组件和模板,开发者只需像搭积木一样,将这些组件拖拽到合适的位置,再进行一些简单的配置,就能快速搭建出应用的基本框架,大大缩短了开发周期。同时,在系统架构搭建方面,程序员可以凭借其对技术的深入理解,确保系统的性能、安全性和可靠性。

2025-03-11 18:20:20 905

原创 分布式锁的实现原理

绕不过的 CAP 理论Redis 与 zk 由于客户端与服务端的交互机制上存在比较大的差异,相应的分布式锁实现原理也有所不同。两者都是优秀的支持分布式部署的系统,自然具备分区容错性,但分布式系统总绕不过去一个经典的问题——CAP理论:在满足了分区容错性的前提下,分布式系统只能满足可用性、数据一致性两者其一。对比之下,Redis 在可用性上更胜一筹,属于 AP 系统;zk 具备更强的数据一致性,属于 CP 系统,而基于 AP、CP 的特性去实现的分布式锁,自然也会存在不同程度的问题。

2025-03-11 17:16:53 927

原创 写一个简单的SQL生成工具

MyBatis 通过简化 SQL 操作和提供动态 SQL 功能,使得数据库操作变得更加灵活和强大。它的高级映射功能和缓存机制也为开发者提供了更多的便利。

2025-03-11 15:40:00 517

原创 万字长文手把手教你实现MicroPython/Python发布第三方库

在 MicroPython 中,发布库文件指的是将已经开发好的功能模块或工具库以标准化的方式分享给其他开发者使用,通过发布我们编写的库文件,可以让其他人能够快速地集成并使用这些库,而不必从头开始编写相同的功能;发布库文件通常包含功能实现、配置文件、示例代码以及文档,按照一定的规范组织,使得其他用户可以通过简单的安装和引用过程来使用这些功能模块。对于 MicroPython 来说,发布库文件不仅仅是一个普通的.py。

2025-03-10 17:59:53 681

原创 分布式锁—Curator的分布式锁

然后获取当前客户端线程尝试获取锁时创建的临时顺序节点的名称,再根据名称获取在节点列表中的位置 + 是否可以获取锁 + 前一个节点的路径,也就是获取一个封装好这些信息的PredicateResults对象。当/semaphore/leases目录下的节点发生变化时,那些对该目录进行Watcher监听的客户端就会收到通知,于是就会执行Watcher里的process()方法,唤醒执行wait()时被阻塞的线程,从而让这些没有成功获取Semaphore的Lease的线程继续尝试获取Lease。

2025-03-10 16:17:05 892

原创 程序员预警!低代码正在接管AI办公,不会这招明年恐被淘汰?

学习低代码技术是首要任务。而低代码平台的出现,让业务人员也能参与到应用开发中来,他们可以根据自己的业务经验,提出需求和建议,与技术人员共同打造出更贴合业务实际的 AI 办公应用。通过学习和掌握低代码技术,我们可以拓宽自己的技术视野,提升自己的综合能力,为未来的职业发展打下坚实的基础。低代码与 AI 办公的融合,绝非简单的叠加,而是一场深度的变革,正重塑着我们的工作方式。程序员们,让我们携手共进,以积极的心态迎接未来的挑战,用我们的智慧和创造力,为推动低代码技术与 AI 办公的融合发展贡献自己的力量!

2025-03-07 17:45:50 1145

原创 AI技术革命,工作效率10个最佳AI工具

用于WhatsApp Business、Instagram和Co的AI代理 将WhatsApp Business、Instagram、Facebook、Live Chat等连接起来,自动化工作流程,培养潜在客户,提高销售和改革客户支持。在这场变革中,成功者将是那些能快速将AI转化为“认知外骨骼”的人——既善用机器智能拓展能力边界,又深耕人类特有的创造力与情感智慧,在虚实交融的职场新生态中建立不可替代的价值锚点。结合声音克隆和唇语同步,Vozo确保翻译结果精确地适应你的需求,从内容到声音和视觉。

2025-03-07 16:47:41 903

空空如也

空空如也

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

TA关注的人

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