自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白衣胜雪

呦呦, 程序员呐!

  • 博客(47)
  • 收藏
  • 关注

原创 MySQL Communications Link Failure 问题排查 & 经验 & 运维记录

MySQL连接中断问题排查经验:当出现CommunicationsLinkFailure异常时,需重点关注连接池配置、网络稳定性及MySQL服务端状态。主要排查步骤包括:检查连接池的keepalive设置、JDBC连接校验参数、MySQL超时时间配置,以及容器环境网络情况。解决方案建议优化连接池keepalive机制,调整MySQL的wait_timeout参数,并在容器环境中检查网络稳定性。关键经验包括必须配置连接保活机制、监控连接池状态,以及正确解读错误日志中的关键信息(如lastpacketrecei

2025-11-26 13:40:50 301

原创 服务器时间引起的签名问题,导致无法收到验证码

去看了一下文档,发现没有。然后读了一下代码,发现签名里面会拿当前的时间加上其他信息作为签名,然后本地run了一下代码,发现没问题,能正常发出短信验证码。那就很可能是服务器的原因,有个项目,客户反应无法收到验证码,我去看了一下日志,显示日志服务签名有问题,第一反应是短信提供商改了签名方式吗?上了服务器看用 date 命名看了一下,果然是这个问题,服务器上时间慢了好几分钟。然后用一下命令开启时间同步。还可以先设置一下时区。

2025-07-07 14:07:55 285

原创 深入理解 JDK 动态代理 (JDK Dynamic Proxy)

摘要:JDK动态代理是一种运行时生成代理类的技术,通过Proxy和InvocationHandler实现方法调用的集中转发,主要用于实现AOP横切关注点。它仅支持接口代理,通过字节码生成在运行时创建代理类,适用于日志、事务等场景。相比静态代理,动态代理减少样板代码,但其性能与CGLIB、Byte Buddy等字节码框架相近。开发者可通过反编译生成的代理类字节码直观理解其实现原理。

2025-06-17 17:37:12 804

原创 @Resource vs @Autowired 在Spring中的使用和区别

摘要:Spring框架中@Resource(JSR-250标准)和@Autowired(Spring提供)是两种依赖注入注解。@Resource默认按名称匹配,而@Autowired默认按类型匹配。关键区别在于来源、匹配规则和附加功能:@Resource不支持@Qualifier和required属性,而@Autowired支持。在Spring Boot环境下推荐使用@Autowired,如需兼容Java EE系统则可选择@Resource。两者均可实现指定名称的依赖注入,但@Autowired提供更丰富的

2025-06-12 11:07:03 418

原创 Spring @Autowired解析

Spring的@Autowired注解是实现依赖注入(DI)的关键机制。它可标注在构造器、字段、Setter方法或普通方法上,让Spring容器自动装配匹配的Bean。注入时机发生在实例化Bean后的依赖注入阶段,通过类型匹配、@Qualifier指定或@Primary优先等规则完成装配。常见应用场景包括构造器注入(推荐)、字段注入(简洁但不推荐)和Setter注入(可选依赖)。高级用法包括required属性控制强制注入、集合自动收集及Optional包装。需注意循环依赖问题,并确保只对Spring管理的

2025-06-10 16:27:36 841

原创 Maven依赖作用域深度解析:原理、实践与最佳应用

Maven依赖管理核心要点: 六大作用域:compile(默认)、provided(容器提供)、runtime(运行时)、test(测试专用)、system(系统路径)、import(BOM管理),通过scope标签控制依赖在不同构建阶段的可见性 关键差异:compile参与全周期,provided不打包,runtime仅运行需要,test不传递,需结合业务场景选择 传递规则:compile/runtime可传递,provided/test不传递,影响子模块依赖继承 最佳实践:核心组件用compile,容器

2025-06-10 14:03:19 794

原创 Maven安装部署

maven 本身也是java项目,也需要启动jvm来运行maven 代码,进而执行各种操作,因此maven自身的jvm内存大小也是要关注的,如果在构建比较大的项目时,可能会出现maven自身jvm 内存不够,导致构建失败,引发OOM设置MAVEN_OPS环境变量就是设置maven的jvm参数,可以设置为 -Xms128m -Xmx512m。原因是,maven会将中央仓库的依赖包缓存到本地仓库,若不指定的话,默认是在系统盘 .m2下的,如图。配置MAVEN_HOME环境变量为maven的安装目录。

2025-06-10 11:10:03 682

原创 TypeError: crypto$2.getRandomValues is not a function

而这个函数是 Vite 在启动时用来生成随机 ID 的一部分。

2025-06-05 11:07:25 3248

原创 JavaScript async/await指南

函数命名:async函数建议添加Async后缀(可选),如定义方式:优先使用普通函数定义,避免箭头函数(可读性更好)// 推荐// 不推荐变量命名:await后的变量名建议体现异步操作含义,如能用async/await就不用传统Promise:除非需要处理极其复杂的异步流程控制每个await必配try…catch:避免未捕获的异步错误导致程序崩溃合理选择并行/顺序执行:IO密集型任务用Promise.all并行处理,计算密集型任务考虑Web Worker。

2025-06-03 17:12:23 1642

原创 ES6 Promise 状态机

摘要:Promise是ES6引入的异步编程解决方案,本质是一个状态机,包含pending(进行中)、fulfilled(成功)和rejected(失败)三种状态。通过new Promise创建实例,执行resolve或reject改变状态,并通过.then()方法处理结果。它适用于异步操作(如定时器、网络请求),能避免回调地狱,统一处理成功/失败情况。Promise状态一旦改变不可逆,主流浏览器均支持该特性,是处理异步流程的有效工具。

2025-06-03 16:09:23 1207

原创 ES6 深克隆与浅克隆详解:原理、实现与应用场景

本文详细解析了ES6中的深克隆与浅克隆技术。浅克隆仅复制对象第一层属性(扩展运算符、Object.assign等),适用于简单数据结构。深克隆通过递归或结构化克隆API(structuredClone)创建完全独立副本,但需注意JSON方法的局限性。文章提供了手动实现深克隆的代码示例,包含循环引用处理和性能优化方案(WeakMap缓存、非递归实现)。最后指出浅克隆适合组件props传递等场景,而深克隆适用于需要完全独立副本的复杂对象操作。这些技术是现代JavaScript开发中数据管理的核心知识。

2025-05-30 15:47:04 877

原创 ES6解构赋值与传统数据提取方式的对比分析

摘要: ES6解构赋值相比传统数据提取方式具有显著优势:语法更简洁(如const {name, age} = obj替代多次属性访问),支持默认值、别名和剩余元素等高级功能。对象处理中,解构赋值实现批量提取与参数默认值;数组处理时,可跳过元素或收集剩余项。此外,解构赋值在函数参数、字符串和Map遍历中也更高效。尽管现代浏览器已优化其性能,但需注意IE不兼容。核心优势在于代码精简、语义明确和提升可维护性,特别适合API响应处理、配置参数提取等场景。

2025-05-30 15:14:00 483

原创 JavaScript 变量声明:var vs let vs const详情

JavaScript变量声明方式对比:var存在函数作用域和变量提升问题,而ES6引入的let/const采用块级作用域,解决了重复声明和泄漏问题。const用于常量,let用于可变量,建议优先使用const并禁用var。关键区别在于作用域、重复声明、提升机制和赋值限制,合理选择声明方式能提升代码质量,避免常见错误。

2025-05-30 14:12:27 588

原创 聊聊前端工程化

摘要:从传统ASP.NET项目的前后端混杂开发模式,到现代前端工程化的演进历程。文章通过模块化(代码分治)、组件化(UI复用)、规范化(统一风格)和自动化(构建测试)四个维度,剖析了前端开发效率的提升路径。重点分析了接口设计的两种方案(整体/拆分接口)及适用场景,并以工厂化生产类比前端工程化变革。最终指出工程化核心在于分治协作与效率优化,这一理念将持续指导前端技术演进。(149字)

2025-05-30 11:40:54 875

原创 记录日常使用linux的命令(不断更新)

【代码】记录日常使用linux的命令(不断更新)

2024-11-27 10:42:32 186 1

原创 分布式数据一致性协议之NWR协议

NWR协议是一种用在分布式数据库中的机制,用来确保数据在多台机器上存储时的一致性和可靠性。简单来说,就是保证数据在分布式系统中能够被正确读取和写入的一套规则。NWR协议是用来管理和控制数据在分布式数据库中的一致性的。它通过设置写和读的节点数,保证每次操作都能返回最新的正确数据。选择合适的W和R值可以在性能和数据一致性之间找到平衡。

2024-08-01 16:21:26 679

原创 场景下看看Base理论

BASE理论作为CAP定理的一种权衡策略,通过在一致性上做出让步,来确保系统的高可用性和分区容忍性。通过基本可用、软状态和最终一致性,BASE理论提供了一种应对大型分布式系统中一致性挑战的方法。在实际项目中,如电商网站、分布式缓存系统和社交媒体平台,BASE理论被广泛应用,以保证系统在高负载和故障情况下的稳定运行。

2024-08-01 11:20:17 1219

原创 Java发展过程中,JVM的演进

在Java 6 和 Java 7 中,JVM的垃圾回收器得到了显著改进。Java 6 引入了并发标记清除(Concurrent Mark-Sweep, CMS)垃圾回收器,提升了垃圾回收的效率。Java 7 引入了Garbage First(G1)垃圾回收器,它能够更好地处理大堆内存,减少垃圾回收对应用程序的停顿时间。GraalVM提供了比传统JIT编译器更好的优化,并支持提前编译(AOT, Ahead-Of-Time),使得Java应用可以编译成本地代码,提高启动速度和整体性能。

2024-07-11 17:28:10 720

原创 在 CentOS 上安装 Docker Engine

Docker 是啥之类的就不必多说了,直接上安装步骤。官网安装教程地址:https://docs.docker.com/engine/install/centos/

2024-07-01 17:20:37 679

原创 简单聊聊JSX

JSX 是 JavaScript XML 的缩写,是 React 中用来描述用户界面的语法(其实可以看作是JavaScript的扩展语法)。

2024-06-24 15:35:54 1108

原创 分布式ID生成方案之雪花算法

当我首次接触到这个算法时,便被其富有诗意的名字所吸引。雪花,亦称未央花,"未央"意味着永恒与无限,象征着希望与未来,代表着光明与前行的道路。言归正传,自然界中存在一种现象:据说不存在两片完全相同的雪花,每一片在形成时都会展现出其独特的形态与纹路。雪花算法这个名字,象征该算法能生成一个全局唯一且不重复的标识符。在分布式系统中,数据一般都被分散存储在不同的节点上,由于数据被分散存储在不同的节点上,为了确保每个数据项的唯一性,就需要这样一套机制来生成不会重复的ID。这个不会重复的ID就是分布式ID。全局唯一性。

2024-06-20 11:09:42 1230

原创 HttpClient Overview(翻译)

超文本传输​​协议 (HTTP) 可能是当今互联网上使用的最重要协议。Web 服务、支持网络的设备和网络计算的增长不断扩大 HTTP 协议的作用,使其不再局限于用户驱动的 Web 浏览器,同时增加了需要 HTTP 支持的应用程序数量。HttpClient的设计既支持扩展,又为基础HTTP协议提供了强大的支持,因此它对任何构建HTTP感知客户端应用程序(如网络浏览器、网络服务客户端或利用或扩展HTTP协议进行分布式通信的系统)的人来说可能都是有用的。

2024-06-05 14:43:30 1074

原创 大白话聊聊MySQL查询之五子句(知识简单但重要)

在日常开发中,查询数据占很大的比重,在使用 MySQL 数据库进行查询时,我们经常需要通过各种条件和规则来筛选和排序数据。要实现这些功能,就不得不使用以下这些子句:WHERE、ORDER BY、GROUP BY、HAVING 和 LIMIT。那,接下来,我就用简单易懂的语言详细介绍这些子句的作用和用法。

2024-05-24 15:58:54 765

原创 MySQL 数据类型详解及在 Java 中的使用场景

在数据库设计和 Java 开发中,选择合适的数据类型和对应的 Java 类型是至关重要的。本文将详细介绍 MySQL 的各种数据类型,并结合 Java 的使用场景及注意事项。

2024-05-17 11:38:45 1207

原创 简单聊聊分布式和集群

分布式和集群,我们都听的比较多,分布式系统和集群的概念对于刚进入职场的小伙伴可能不是很清楚,这篇文章我们就一起看看两者到底是什么,有什么区别。分布式系统(Distributed System)是由多个相互独立的计算节点组成的系统,这些节点通过网络相互通信与协作,以实现共同的目标。分布式系统的设计思想是将计算任务分散到不同的节点上,每个节点负责特定的子任务,从而提高系统的整体性能、可靠性和可扩展性。

2024-05-15 16:16:52 1088 4

原创 大白话理解IoC和DI

IoC( Inversion of Control ) 它是一个技术思想,不是一个技术实现。它描述的是 Java开发领域对象的创建,管理问题,我们看了上面的图就知道在传统开发中,存在依赖时,往往都会new一个依赖的对象,那么在IoC 思想下,就不用去new 对象了。而是由IoC容器去帮我们实例化对象并且管理它。为什么叫控制反转呢?1.控制了什么?控制了对象创建、管理的权力2.反转了什么?将控制权交给了外部(IoC容器)

2024-04-30 16:47:48 936 1

原创 Java开发为什么选择ORM框架而不用JDBC呢(通常来说)?

在使用Java开发中,大概率会与数据库交互,在很早时候,我们使用JDBC(Java Database Connectivity)来执行SQL语句和访问数据库。后来,随着ORM(Object-Relational Mapping)框架的出现,我们就没有直接使用JDBC了,而是用封装了JDBC的ORM框架,并提供了更高级别的抽象,以简化数据库操作。那两者有什么区别,以及为什么在企业开发中基本都使用ORM框架而不是直接使用JDBC呢?接下我我们一起看看。维基百科是这样说的。

2024-04-19 13:01:48 889 1

原创 记录一条不难但包括了常见操作的SQL查询

这条SQL 还是比较简单,不过涉及了一些常见的SQL操作和技巧,包括联接(JOIN)、条件筛选(WHERE)、聚合函数(COUNT)、条件判断(CASE WHEN)、子查询等。

2024-04-18 11:11:34 216

原创 记录一次StackOverflowError解决思路

我们看一下维基百科是怎么解释的呢?(在软件中,如果调用堆栈指针超出堆栈界限,就会发生堆栈溢出。调用堆栈可能包含有限数量的地址空间,通常在程序开始时确定。调用堆栈的大小取决于许多因素,包括编程语言、机器体系结构、多线程和可用内存量。当程序尝试使用比调用堆栈上的可用空间更多的空间时(即,当它尝试访问超出调用堆栈边界的内存时,这本质上是缓冲区溢出),则称堆栈溢出,通常会导致程序崩溃。简单了解一下之后,看看我遇到的问题。

2024-04-01 16:14:01 504

原创 Java开发中常用到的各种时间转换

获取当天的最大时间:比如:2024-04-01 23:59:59。获取当天的开始时间(也就是最小时间)

2024-04-01 15:11:44 409

原创 ThreadLocal:解析简单易懂的多线程局部变量

在实际工作中,若用到多线程,就会遇到共享变量的问题,也就是在不同的线程间共享变量的值,这个时候就会用到同步机制。比如关键字或锁对象。这些机制确保了在任何时候只有一个线程能够访问共享资源,防止了并发访问时可能出现的冲突。然而,ThreadLocal类提供了一种不同的方法来处理线程安全问题。ThreadLocal允许我们创建仅对创建它们的线程可见的变量。这意味着每个线程都有自己的变量副本,不会与其他线程发生冲突。下面我们一起从它的定义、使用场景、优缺点、注意事项、原理分析等方面了解ThreadLocal。

2024-03-28 15:54:19 1026

原创 在Windows系统下安装Node Version Manager (nvm)

Windows系统下安装Node Version Manager (nvm)

2024-03-21 11:48:03 873

原创 真实场景运用Springboot +策略模式

在真实开发中,我们经常需要处理不同类型的对象,但是对他们的操作是相同或者类似的,在这种场景下,策略模式就派上用场啦,我之前也看过不少文章,但是看的云里雾里,看完还是不知道怎么用,那么,在这篇文章中,我也不写理论的东西,直接上代码,和大家一起交流,一起学习。通过使用策略模式,我们成功地将不同类型的浏览量递增操作进行了解耦,使得系统更加灵活和可维护。每个具体业务类都可以独立地进行扩展和修改,而不会影响到其他部分的代码。以上就是一个简单的Spring Boot + 策略模式的实战示例。

2024-01-29 17:15:46 904

原创 Open Swagger & Java 规范

从SpringFox迁移到SpringDoc,从Swagger3开始,SpringFox更新进度缓慢,SpringDoc相较于SpringFox具有更明显的优势,相较 SpringFox来说,SpringDoc的支撑时间更长,无疑是更好的选择。开发人员参照本规范文档进行配置前,请引入以下依赖,目前最新版本为1.5.12,后续会根据版本更新进行改动。依赖引入配置文件和配置类依赖引入完毕后,需进行相关配置,配置分为配置文件和配置类两种,下面将分别进行说明配置项是否必需作用配置值这里只列举一些常用配置,

2023-05-31 17:31:15 3384

原创 踩坑之Java接收Microsoft Date

这两种格式在.NET平台中常用,用于表示日期和时间的序列化和反序列化。在Java中,可以使用自定义的日期反序列化器(如提供的DateDeserializer类)来解析这种格式的时间字符串,并将其转换为Java的Date对象或其他适当的类型。这两种时间格式都是Microsoft JSON日期格式(Microsoft JSON Date format)的变种,也被称为.NET JSON日期格式(.NET JSON Date format)。这种格式只包含日期的毫秒数,没有时区偏移量。先看一下时间格式:如下。

2023-05-30 16:33:19 725

原创 刚开始工作时总结的一些经验

前言:软件开发工程师、程序员、码农。其实说的就是我们。但是,我更喜欢软件开发工程师,而不是码农。说到这个就会提到工程师文化,工程师是有创新冲动的,是自我驱动的、是讲团队合作的、是热衷技术的…是乐于分享的、等等等太多了。 码农虽然是自嘲、但是,我个人是不喜欢的,因为 不想做代码生成器。哈哈哈,更喜欢软件开发工程师这个称谓。对于刚入行的我们,需要注意哪些问题呢?很久以前,就想写这样一篇文章,但是笔力有限、精力有限。拖到今天才开始动笔。就以下面这些方面简单说一下。沟通交流是开发者最重要的,你不仅要能听懂别人说的,

2022-11-18 16:14:25 277

原创 深入理解数组:从概念到实践

我们在了解/学习一个新技能之前,都会先了解这个技能的概念。搞清楚是用来干嘛的,能解决什么问题、这样的话,方便后面正确的打开。正所谓磨刀不误砍柴工嘛。

2022-09-21 00:36:42 417 1

原创 一文看懂ArrayList的自动扩容

看以上源码,我们每次往ArrayList中塞入数据的时候,都会判断一下,当前数据的元素是否塞满了,如果塞满的话,此时就会扩容这个数据,让后将老数组的元素拷贝到新的数组中去。从上面我们知道,若我们使用的是默认数组的大小,也就是10,如果我们已经往数组里面插入了10个元素了,那么现在数组的size=10 ,capacity=10,:对于数组,我们都知道,当你往数组的中间插入元素的时候,会让新插入元素位置的后面的元素全部往后挪动一位。数组扩容的时候,old数组的大小+old数组的大小>>1 就得到新的数组大小。

2022-06-10 18:22:30 1968

原创 C#集合篇之--列表List<T>

列表.NET Framework 为动态列表提供了泛型类List<T> 这个类实现了 Llist、ICollection、IEnumerable、IList<T> 、ICollection<T>和IEnumerable<T> 接口。1、创建列表调用默认的构造函数就可以创建列表对象:var int intList=new List<int>(); 这是一个int 类型的List 泛型类。使用默认的构造函数创建一个空列表。当我们将元素添加到列表

2021-06-28 18:19:41 5948 1

原创 一个nodejs环境变量引起的问题

今天在vs code npm run dev Vue 项目的时候,被 'node' is not recognized as an internal or external command, operable program or batch file 这个问题折腾了很久,查了google 发现出现这个问题是因为环境变量出了问题,但是我查看了我的环境变量,发现path 里面我是配了 C:\Program Files\nodejs 这个的,所以,我觉得我的环境变量是没有问题的。 但是,这........

2021-05-22 18:05:33 11006 9

空空如也

空空如也

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

TA关注的人

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