自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一文彻底搞懂javascript中的undefined

undefined是可以说是javascript中最特殊的一个类型,许多其他语言中都没有这个类型。它表示一个变量已经声明,但还没有被赋值。如果没有掌握好undefined,则可能会写出一些非常业余的代码,我们来看一个例子,这是在做code review时遇到的真实例子,你能看出下面的代码有什么问题吗?在揭晓答案之前,我们先系统学习一下什么情况下JavaScript会产生undefined类型。

2025-07-25 18:01:09 568

原创 Mysql字段类型20连问

当存储CHAR值时,MySQL会删除字符串中的末尾空格同时,CHAR值会根据需要采用空格进行剩余空间填充,以方便比较和检索。但正因为其长度固定,所以会占据多余的空间,也是一种空间换时间的策略;CHAR适合存储很短或长度近似的字符串。例如,

2025-07-25 16:49:04 879

原创 C#解析JSON数据全攻略

还在为C#处理网络API返回的复杂JSON数据头疼吗?,90%的开发者都曾在JSON解析上栽过跟头!本文将手把手教你用C#轻松玩转JSON数据:- HttpClient获取网络JSON数据- System.Text.Json动态解析技巧- 强类型模型转换实战- 特殊字符/日期格式处理方案- 完整可运行代码示例。

2025-07-24 17:58:02 478

原创 Web前端入门:JavaScript 哪些地方需要 try...catch 异常捕获

任何事物都是犹过不及,合理使用可以有效提高代码健壮性,但过渡使用也容易造成代码冗余,所以编码也需要考虑分寸,拿捏得合适,则是优雅舞者。编码注意:不要静默吞掉错误,至少使用 console 记录错误信息(如 console.error),否则会影响程序问题排查。前端路引Web前端入门第 80 问:JavaScript 哪些地方需要 try...catch 异常捕获 - 前端路引 - 博客园JNPF快速开发平台。

2025-07-24 17:02:56 791

原创 SpringBoot--如何创建自己的自动配置

自定义条件注解的关键就是要有一个Condition实现类,该类负责条件注解的处理逻辑--它所实现的matches()方法决定了条件注解的要求是否得到满足。代码示例:Condition实现类@Override// 获取@ConditionalCustom注解的全部属性// 获取注解的value属性值(String[]数组)// 遍历每个属性值// 如果某个属性值对应的配置属性不存在,返回false。

2025-07-22 17:19:02 974

原创 传统开发已死?低代码“快准狠”,让企业数智转型效率飙升500%!

在低代码开发模式下,业务人员可以直接参与到应用开发过程中,通过可视化的操作,将自己的业务需求直观地表达出来,避免了因需求理解偏差而导致的开发失误。但传统开发模式下,技术栈一旦确定,就很难进行大规模的更新和替换,因为这涉及到整个系统架构的调整、代码的重写以及大量的测试工作,成本和风险都非常高。JNPF 是一款功能强大的低代码开发平台,它基于先进的技术架构,提供了可视化的开发环境、丰富的组件库和模板,以及强大的工作流引擎,能够帮助企业快速构建各种应用程序,满足不同业务场景的需求。

2025-07-21 17:54:31 1181

原创 面试官:如何实现大模型连续对话?

所有的大模型本身是不进行信息存储的,也不提供连续对话功能,所以想要实现连续对话功能需要开发者自己写代码才能实现。那怎么才能实现大模型的连续对话功能呢?大模型连续对话功能不同的框架实现也是不同的,以行业使用最多的 Java AI 框架 Spring AI 和 Spring AI Alibaba 为例,给大家演示一下它们连续对话是如何实现的。Spring AI 以 MySQL 数据库为例,我们来实现一下它的连续对话功能。1.创建表2.添加数据库和 MyBatisPlus 依赖:3.设置配置文件:

2025-07-21 16:42:45 594

原创 阿里巴巴为什么禁止超过3张表join?

2017年,《阿里巴巴Java开发手册》“禁止超过三张表进行join操作”。时至今日,这条规范仍被众多企业奉为圭臬。但背后原因你真的懂吗?本文将从架构设计、执行原理、实战案例三方面深度解析,带你揭开这条军规背后的技术真相!希望对你会有所帮助。“禁止三表JOIN”本质是架构思维的转变从“数据库是全能选手”到数据库专注存储与事务从“SQL解决一切”到业务逻辑分层处理从“实时一致性”到最终一致性的设计妥协正如阿里资深DBA所言:“当你的系统面临千万级并发时,每个微秒的优化都是在为业务争取生存权。

2025-07-21 08:57:01 610

原创 分布式系统高可用性设计 - 监控与日志系统

提前预警:通过监控指标趋势预测潜在风险(如内存泄漏导致的 GC 频率增加)。故障定位:日志与追踪系统提供从现象到根因的完整线索,缩短 MTTR(平均恢复时间)。容量规划:基于流量与资源使用率趋势,合理扩容(如预判促销期间的 QPS 峰值)。

2025-07-18 17:11:16 583

原创 Vue3响应式编程三剑客:计算属性、方法与侦听器深度实战指南

计算属性是基于响应式数据进行计算并返回结果的属性。它的特点是具有缓存机制 ,只有当依赖的响应式数据发生变化时,才会重新计算结果。这使得计算属性非常适合用于处理需要频繁访问但计算成本较高的逻辑。方法是组件中用于执行特定操作的函数。它通常用于处理用户交互、表单提交、数据初始化等一次性或非响应式的逻辑。侦听器用于监听响应式数据的变化,并在变化时执行相应的回调函数。它是处理异步操作或复杂逻辑的理想选择。

2025-07-16 17:33:54 543

原创 MySQL 逻辑架构说明

那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?

2025-07-16 15:53:51 705

原创 缓存穿透的解决方式?—布隆过滤器

布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,查询时可以用来判断 “一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。布隆过滤器的空间效率O(m) 和查询时间O(k) 都很优秀,但是存在一定的误判率 (布隆过滤器认为不存在,则一定不存在;布隆过滤器认为存在,则只是可能存在)bit数组的位数m越大,hash函数的个数k越多,误判率就越低。

2025-07-15 18:03:05 1014

原创 Web前端入门:JavaScript 由程序触发绑定事件的几种方式

按照 MDN 的说法,由程序触发的事件,还有一个专用名词合成事件,表示不是浏览器本身触发的事件。除了本文例子中的几个 Event 对象外,还有一些其他对象,在使用时可参考 MDN 文档。用户交互:鼠标、键盘、触摸交互MouseEventTouchEvent表单与输入:输入框、表单提交InputEvent媒体控制:音视频播放、设备流拖放与剪贴板:拖拽操作、复制粘贴DragEvent存储与通信:本地存储、跨文档通信错误与调试:脚本错误捕获ErrorEvent设备与传感器:方向、加速度检测。

2025-07-15 16:49:26 788

原创 低代码×系统集成:开发周期从3个月缩到2周,我们是怎么做到的?

低代码与系统集成的结合,无疑是企业数字化转型道路上的一次重大变革。它打破了传统开发模式的时间和成本枷锁,让企业能够以更快的速度、更低的成本实现系统的集成与创新,显著提升了企业的竞争力和应变能力。从企业 A的案例中,我们清晰地看到了这种结合所带来的巨大优势:开发周期从漫长的 10 个月锐减至短短 2 周,成本降低了 80%,业务效率更是得到了大幅提升。这不仅是一个企业的成功实践,更是为众多在数字化浪潮中摸索前行的企业指明了方向。展望未来,随着技术的不断进步和完善,低代码与系统集成的应用前景将更加广阔。

2025-07-14 18:03:48 746

原创 分布式系统高可用性设计 - 缓存策略与数据同步机制

性能与一致性:非核心业务优先保证性能(最终一致性),核心业务(如支付)通过分布式事务保证强一致性。成本与可用性:多级缓存降低源站压力,但需平衡 CDN/Redis 的成本;缓存集群高可用需付出资源冗余代价(如主从复制)。

2025-07-14 16:51:55 1100

原创 订单初版—取消订单链路中的技术问题说明文档(二)

在v1版本的取消订单接口中,由于"更新订单状态 + 取消履约 + 发送释放资产消息到MQ"属于刚性事务,所以其中任何一个操作出现Exception,都会进行全局回滚保证数据一致。为保证取消订单的链路中,数据库的更新事务与推送给MQ的消息强一致,需要将两者包裹在一个事务中,保证它们要么一起成功,要么一起失败。如果"修改订单状态 + 拦截订单不被履约"采用了异步柔性事务,那么可能出现订单状态已经改为已取消,但是由于异步拦截履约慢了,导致订单都已经被打包发货了,这样就可能发生纠纷和资损了。

2025-07-11 17:48:56 562

原创 订单初版—取消订单链路中的技术问题说明文档

一.实现流程图二.技术要点要点一:更新订单状态、取消履约、发送释放资产是⼀个分布式事务,需要将Seata的AT模式替换成RocketMQ的事务消息。要点二:超时订单的处理⽅案是⽣成订单后发送⼀个延迟30分钟后才被消费的消息到MQ。订单系统消费该延迟消息时,会验证订单是否已支付,否就调⽤取消订单的接⼝。

2025-07-11 16:36:55 1027

原创 这几个 Vibe Coding 经验,真的建议学!

建议多试试不同模型,看哪个适合什么任务:有的适合规划,有的适合实现,有的调试重构强。遇到复杂功能,可以单独开个新项目,先做个小型参考实现,或者从 GitHub 下载参考代码。AI 改错了,直接回退到上个稳定版本,别在烂代码上修修补补,那样只会越搞越糟。Vibe Coding,直译为“氛围编程”,是一种全新的 AI 编程方式,你可以让 AI 充当你的编码助手,甚至完成大部分的编写工作,而你只需要给出方向、决策和反馈。通常会在阶段结束后,让 AI 检查结构,优化或拆分模块,保证质量也方便扩展。

2025-07-10 17:49:13 554

原创 订单初版—支付和履约链路中的技术问题说明文档

幂等操作的特点是其任意多次执行产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可使用相同参数重复执行,并能获得相同结果。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果。即第一次请求时对资源产生了副作用,但以后多次请求都不会产生副作用,这里的副作用是不会对结果产生破坏或者产生不可预料的结果。也就是说,任意多次执行对资源本身产生的影响均与一次执行的影响相同,但网络超时等问题除外。

2025-07-10 16:46:36 875

原创 ​​惊!AIGC让低代码“开挂”!不懂代码也能开发复杂应用?

在人工智能应用开发中,低代码平台可以降低 AI 应用开发的门槛,让更多的开发者能够参与到 AI 应用的开发中,而 AIGC 则可以为 AI 模型的训练和优化提供智能辅助,提高模型的性能和效果。AIGC 可以根据用户的需求和业务场景,智能推荐合适的低代码组件。以开发一个电商应用为例,当用户需要实现商品展示功能时,AIGC 能够分析电商业务的特点和常见需求,推荐诸如商品图片展示组件、商品信息列表组件、价格显示组件等,这些组件经过优化和预配置,能够快速集成到应用中,降低了开发难度,提高了开发的准确性和效率。

2025-07-09 18:02:56 1559

原创 Java集合--从本质出发理解HashMap

一种函数 H,接受任意长度的输入 x,并输出固定长度的整数(通常在 0 到2^k-1之间)1、映射性质输入空间:可以是无限或非常大的(例如所有可能的字符串)。输出空间:有限且固定(例如 32 位整数,共约 4 294 967 296 种可能)。h: 输入 → 输出,把大空间“压缩”到小空间。2、理想特性确定性:同样输入每次产生相同输出;高效性:计算速度要快,适合大量数据处理;均匀分布:对不同输入应尽量输出均匀分布,减少“碰撞”(不同输入映射到同一哈希值)的概率;固定长度。

2025-07-09 17:07:13 962

原创 架构师必备:业务扩展模式选型

业务发展过程中,增加字段是很常见、频繁的,因此怎么存储新增的字段是要重点考虑的因素。下面结合笔者的经验,总结一下各种业务扩展模式选型的优缺点、适用场景,如何让系统保持良好的业务扩展性。

2025-07-08 17:32:16 734

原创 MySQL行锁功过:怎么减少行锁对性能的影响?

行锁是针对数据表中行记录的锁,是在引擎层由引擎实现的。

2025-07-08 16:46:41 1151

原创 商品中心—库存分桶高并发的优化文档(二)

所以在并发分桶下线 + 分桶扩容的场景下,虽然竞争到锁的⼏个分桶成功地快速下线了,但可能会导致很多请求访问到没法及时扩容的、快没库存的分桶上,从而导致很多扣减请求出现库存不⾜、扣减失败的问题,而实际上中心桶还是有剩余库存的。即用分布式锁来保证分桶的上线和下线不会覆盖分桶元数据的变更,从而导致即便分桶下线成功,下线分桶的剩余库存返还给中心桶。因为优化后采取的是单个分桶去验证分桶下线处理,覆盖的是整个商品SKU的分桶元数据信息,这⾥的顺序已⽆法保证了,不处理直接简单覆盖可能会造成已下线的分桶重复错误上线。

2025-07-07 17:57:56 661

原创 商品中心—库存分桶高并发的优化文档

从而计算出要使⽤的库存明细的缓存key,实现对库存明细缓存的写入按缓存key均匀打散到不同分⽚上。当使⽤ThreadLocal维护缓存的分桶元数据变量时,ThreadLocal为会每个使⽤该变量的线程提供独⽴的变量副本。每次库存扣减,对应的路由分桶原本是通过缓存的⾃增序号来获取的。所以如果出现大量扣减请求时,也发生对本地缓存的分桶元数据对象修改,那么就会出现并发的读写问题,从而导致偶尔出现读方法的延迟问题。优化后,获取本地缓存的分桶元数据对象的可⽤分桶列表的耗时都为0毫秒了,没有再出现⼏⼗上百毫秒的情况。

2025-07-07 16:57:16 900

原创 程序员注意:低代码正在‘抢活’?但企业数字化转型真的离不开它!

低代码开发平台的出现,无疑是软件开发领域的一次重大变革。它虽然不会完全取代程序员的工作,但却切实改变了程序员的工作方式和职业发展路径。对于程序员而言,低代码并非威胁,而是一次提升自我、拓展职业边界的契机。通过学习和掌握低代码技术,与自身的专业编程技能相结合,程序员能够在软件开发中发挥更大的价值。在企业数字化转型的征程中,低代码平台已成为不可或缺的关键力量。它帮助企业突破了传统开发模式的束缚,有效解决了系统割裂、数据孤岛、开发周期长和成本高等诸多难题,为企业实现数字化转型提供了高效、灵活且经济的解决方案。

2025-07-04 18:02:31 1216

原创 商品中心—商品消息处理系统的技术文档

所以接着可以把变更数据发送到非商品中心系统的开发人员配置的topic,从而实现非商品中心系统对商品中心的表的binlog变化的监听,而且严格保证了binlog消息的消费顺序:先商品中心->再非商品中心。商品中心的系统消费完binlog消息对应的变更数据消息后,会将消息编号发送到MQ中以外部消息的形式由商品消息系统去消费处理。监听表消息模型表中配置的是数据变更后,消息是内部消息还是外部消息,消息发送的topic,消息延迟等级,消息需要通知的字段。非商品中心系统的开发人员会对商品中心的表配置外部消息对象。

2025-07-04 16:59:54 574

原创 用好索引的10条军规

在大型系统性能瓶颈中,索引设计不当导致的性能问题占比超过60%。经过多年的工作经历,我处理过多起数据库性能事故。索引不是越多越好,而是越精准越好。这篇文章跟大家一起聊聊设计索引的10条军规,希望对你会有所帮助。更多精彩内容,可以查看我博客园的首页,里面有我发表过的历史文章。业务驱动:索引设计始于业务场景分析左前缀优先:复合索引必须遵守最左前缀原则适度精简:警惕过度索引的写放大效应覆盖为王:优先考虑覆盖索引解决方案类型优化:用小而精的数据类型降低索引体积函数规避:避免在索引列上使用函数前缀压缩。

2025-07-03 18:03:48 1010

原创 向量数据长什么样子?如何将一段文本数据转化为向量数据?

运行你的代码,就可以看到“它是一只猫”这段文字,用“all-MiniLM-L6-v2”这个模型,转化为向量后的数据长得什么样子了。AI预训练模型就像个多语言语义转换器——你可以把任何语言的句子丢给它(如中文“它是一只猫”或英文“it is a cat”),它可以立刻输出一串代表这段数据语义的数字向量。下载后存储到本地目录(放在与python代码同一目录)下(可以看到,所谓的预训练模型,是由一组文件组成的)在这里,我们选择的预训练模型为“all-MiniLM-L6-v2”(当然,还有其他很多模型可以选择)

2025-07-03 16:46:59 488

原创 Java并发利器:CountDownLatch深度解析与实战应用

/ 1. countDown() - 计数器减1// 2. await() - 等待计数器变为0// 3. await(时间, 单位) - 超时等待// 4. getCount() - 获取当前计数值System.out.println("剩余计数: " + count);

2025-07-02 18:02:49 735

原创 深入理解Spring AOP:核心原理与代理机制详解

面向切面编程(Aspect-Oriented Programming)是一种通过预编译方式和运行期动态代理实现程序功能统一维护的技术。它是对OOP的补充,专门用于处理分布在应用中多处的功能(称为横切关注点)。核心价值分离业务逻辑与系统服务(如日志、事务)提高代码复用性使开发者更专注于业务实现Spring AOP通过巧妙的代理机制实现了强大的切面编程能力。理解其底层原理对于正确使用和问题排查至关重要。在实际项目中,建议:根据具体场景选择合适的代理方式遵循"单一职责"原则设计切面。

2025-07-02 16:42:20 795

原创 ​​下一个风口已至!掌握AI大模型应用,抓住这波技术红利!

2017 年,Transformer 架构的诞生是 AI 大模型发展的重要里程碑,它摒弃了传统的循环结构,采用自注意力机制,使得模型能够更好地处理长序列数据,训练效率大幅提升,为后续大语言模型的发展奠定了坚实基础。同时,基于 AI 大模型的智能运维系统能够实时监测系统的运行状态,提前预测潜在的故障风险,并自动采取相应的措施进行修复,减少系统停机时间,保障业务的连续性,进一步提升了企业的运营效率。此外,还可以运用联邦学习等技术,在不泄露原始数据的前提下,实现多个参与方之间的数据协同训练,保护各方的数据隐私。

2025-07-01 18:05:18 928

原创 快速理解向量和向量数据库

如果把这些属性用数字表示,比如美式咖啡(苦味 8 分,价格 25 元,甜度 0 分),这组数字[8,25,0]就组成了一个 “向量”。它就像一个巨大的 “数字图书馆”,里面存放的不是书籍,而是各种用向量表示的信息,比如图片、文章、语音等。​向量数据库不仅能存向量,最关键的是具备强大的相似性搜索能力。比如你存入一张猫的图片向量,它能快速找出数据库里所有和这只猫 “长得像” 的图片向量,这是传统数据库很难做到的。维度就像是描述事物的 “角度”,维度越多,例如再加上“香味,颜色”等维度,对咖啡的描述就更细致。

2025-07-01 17:08:47 652

原创 C# 中委托和事件的深度剖析与应用场景

委托是一种引用类型,它定义了方法的签名,即方法的返回类型和参数列表。可以将委托看作是一种类型安全的函数指针,它可以引用任何具有相同签名的方法。在 C# 中,使用delegate关键字来定义委托。// 定义一个委托,该委托接受两个整数参数并返回一个整数在上述示例中,是一个委托类型,它可以引用任何接受两个整数参数并返回一个整数的方法。事件是基于委托的一种特殊机制,它允许对象在发生特定情况时通知其他对象。在 C# 中,使用event关键字来定义事件。// 定义一个委托,用于事件处理// 定义一个事件。

2025-06-27 17:58:45 1174

原创 明明是同一条SQL,为什么有时候走索引a,有时候却走索引b ?

菜单A:按菜品分类排列(前菜、主菜、甜点)菜单B:按价格从低到高排列当顾客说:"我要最便宜的川菜"。你会:先用菜单B找到所有低价菜从中筛选川菜或者:先用菜单A找到所有川菜再按价格排序这就是MySQL优化器的日常决策!明明是同一条SQL,有时候走的索引a,而有时候走的索引b,就是它的锅。今天这篇文章跟大家一起聊聊,MySQL选错索引的问题,希望对你会有所帮助。WHERE条件字段是否有合适索引ORDER BY/GROUP BY是否利用索引排序统计信息是否最新(尤其大表每天更新)

2025-06-27 16:53:39 659

原创 Java中什么是类加载?类加载的过程?

类加载指的是把类加载到 JVM 中。把二进制流存储到内存中,之后经过一番解析、处理转化成可用的 class 类二进制流可以来源于 class 文件,或通过字节码工具生成的字节码或来自于网络。只要符合格式的二进制流,JVM 来者不拒。虚拟机遇到⼀条 new 指令时,⾸先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引⽤,并且检查这个符号引⽤代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执⾏相应的类加载过程。类加载过程包括了加载、连接、初始化三个阶段,其中连接还可以分为验证、准备、解析将二

2025-06-26 18:01:44 1090

原创 商品中心—商品溯源系统的技术文档

所以接着可以把变更数据发送到非商品中心系统的开发人员配置的topic,从而实现非商品中心系统对商品中心的表的binlog变化的监听,而且严格保正了binlog消息的消费顺序:先商品中心->再非商品中心。也就是在商品消息处理系统另新建一个Listener来消费binlog消息,然后发送binlog消息到商品溯源系统监听的topic中,所以这里没有接入使用通用的binlog消息处理流程。商品中心的系统消费完binlog消息对应的变更数据消息后,会将消息编号发送到MQ中以外部消息的形式由商品消息系统去消费处理。

2025-06-26 17:17:54 844

原创 Web前端入门:JavaScript 事件循环机制中的微任务与宏任务

JS 中的代码执行流程永远都是事件循环机制,这是 JS 的任务调度核心,理解事件循环机制,才能在开发中游刃有余~~前端路引Web前端入门第 68 问:JavaScript 事件循环机制中的微任务与宏任务 - 前端路引 - 博客园JNPF快速开发平台。

2025-06-24 17:22:34 1175

原创 浅谈开源在线客服系统与 APP 集成的技术方案与优劣势

多数 SDK 提供的是一个封闭的“客服界面模块”,虽然也许支持修改 logo 或颜色,但想要深度定制(如自定义气泡、快捷回复布局、夜间模式适配)则非常困难。你无法像使用 Fragment 一样嵌入它,也无法对其 UI 做出任何 DOM 样式层级的控制。这会造成:与 App 原生风格不一致;切换页面、分享链接、发送图片等功能受限;多语言适配无法精细控制。

2025-06-24 16:33:10 817

原创 线程安全集合选择深度解析

全表锁:Vector/Hashtable(简单但低效,仅适用于遗留系统)。细粒度锁:ConcurrentHashMap(JDK 1.8+,锁粒度到桶,高并发首选)。无锁 / CAS:ConcurrentLinkedQueue(无阻塞,适合低延迟队列)。写时复制:CopyOnWriteArrayList(读多写少,允许最终一致性)。

2025-06-23 18:00:30 998

空空如也

空空如也

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

TA关注的人

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