- 博客(200)
- 收藏
- 关注
原创 跨域请求真的很简单,一文教你轻松应对 CORS 问题
问题 1:CORS 错误:Request header field <header> is not allowed by Access-Control-Allow-Headers问题 2:CORS 错误:The value of the 'Access-Control-Allow-Origin' header must not be '\*' when the request's credentials mode is 'include'
2025-03-28 18:19:09
611
原创 通过源码解决Field xxxMapper in xxx required a bean of type ‘xxxMapper‘ that could not be found.
项目中我们经常会遇到这样的错误:`Field userMapper in com.shiqi.mybatis.bug.demo.service.impl.UserServiceImpl required a bean of type 'com.shiqi.mybatis.bug.demo.mapper.UserMapper' that could not be found.` 今天我们就一起通过源码来探究下产生的原因。
2024-12-30 20:43:39
346
原创 使用Java和不同HTTP客户端库发送各种Content-Type类型请求
在HTTP协议中,头用于指示请求或响应中数据的媒体类型。了解和正确设置 对于确保客户端和服务器之间正确解析数据至关重要。本文将介绍如何使用Java 和 不同的HTTP客户端发送各种 类型的请求。以下是几种常见的 类型及其应用场景:描述: 用于发送键值对数据,通常用于表单提交。传参方式: 数据以键值对的形式编码在请求体中,格式类似于查询字符串。示例:请求头:解析前:解析后:描述: 用于发送包含文件上传的表单数据。传参方式: 数据以多部分形式编码,每部分包含一个表单字段或文件。示例:请求头:解析前:
2024-12-26 14:35:17
1128
原创 深入理解 HTTP HEAD 请求:节省带宽、提高效率的秘密武器
HEAD 请求是 HTTP协议中的一种请求方法,HEAD请求是与GET请求相似的一种请求方式,唯一的区别是:• GET 请求:请求并返回资源的完整内容和响应头。• HEAD 请求:只请求并返回资源的响应头,不返回响应体(即没有实际的数据内容)。HEAD 请求是一种非常有效的 HTTP 请求方法,适用于需要获取资源元数据而不需要完整内容的场景。它通过节省带宽、提高响应速度,成为了缓存管理、网站健康检查、API 调试等任务中的得力助手。
2024-12-20 16:44:37
1636
原创 “Java开发者必备神器:掌握 BeanUtils,这篇就够了!”
BeanUtils是Apache Commons提供的一个工具类库,专注于JavaBean的属性操作。对象属性的拷贝动态设置属性值类型转换Bean 与 Map的相互转换极大减少手动写setter/getter的繁琐提供丰富的工具方法,便于快速开发。
2024-12-08 13:37:32
569
原创 让调试变成艺术!掌握 Console.log 的 12 种花式玩法
在本文中,我们将介绍 12 种 console.log 的花式玩法,助你从调试“小白”进阶成调试“大师”,甚至让输出日志变成一种艺术!
2024-11-21 19:09:23
354
原创 打造属于你的文章发布平台,支持一键“禁止转载”设置
随着互联网的普及,原创内容变得越来越容易被复制和转载。作为创作者,我们有权利保护自己的劳动成果免受盗用。而在一个文章发布平台中提供“禁止转载”功能,能够有效提高文章内容的保护力度,减少未经授权的转载行为。在这篇文章中,我们将一步步构建一个简易的文章发布系统,并且为每篇文章增加“禁止转载”设置,保护你的原创内容。创建简易文章发布平台框架3. 第二部分:实现文章发布界面3.1 设计前端页面文章发布页面包含文章标题、内容以及“禁止转载”选项。可以使用 HTML 和 CSS 创建一个简洁的表单页面。4. 第
2024-11-21 15:07:26
917
原创 一键开启原创保护!教你实现网页“禁止复制转载”全套防护方案
在内容为王的时代,保护原创已成为所有创作者的共识。然而,稍不留神,你精心创作的文章可能就被复制粘贴,甚至未经授权被发布到其他平台。这不仅让人愤怒,也对你的创作权益造成威胁。那么,如何在技术层面上有效防护呢?今天,我将为你提供一整套网页“禁止复制转载”的解决方案,从基础设置到高级防护,助你轻松实现内容保护,再也不用担心你的作品被随意搬运!
2024-11-21 14:33:47
654
原创 90%的人不知道的秘密:网页文字禁止复制?教你7招轻松破解!
从关闭 JavaScript 到利用 OCR 技术,这7招涵盖了各种场景,让你再也不用担心无法复制网页文字。想要更多实用技能?关注我,获取更多神奇技巧!
2024-11-21 10:35:08
4904
1
原创 从一次java.io.StreamCorruptedException: invalid stream header: 48656C6C 错误中学到的调试思路
在项目中,我试图使用 Java 的 ObjectInputStream 反序列化一个对象。代码逻辑看似简单:读取字节流,将其转为 Java 对象。
2024-11-19 16:51:40
576
原创 Shell 脚本中的大小写陷阱:为什么 ${PWD} 而不是 ${pwd}?
pwd 是一个内建命令,用于显示当前工作目录的路径,但它不会作为环境变量存在。${PWD} 是一个内建环境变量,始终指向当前工作目录的路径,使用时需要大写。
2024-11-15 10:34:45
1252
原创 误删代码后直接推送?别慌!教你几种找回丢失代码的方法(最终靠IDEA救了一命)
有一次我开发新功能时,为了保留原始代码,手动备份了一份文件。接着,我将原文件重命名,并把新的文件重命名为原始文件名。操作完成后,我没多想,直接推送到了远程仓库。等我再次检查时,发现文件内容还是原始版本的代码,而备份文件已经被我删掉了!懵了,这意味着我的新功能代码被覆盖了,Git的历史记录中也没有这个修改版本。怎么找回丢失的代码呢?下面是我的寻找之旅,以及最终成功恢复代码的经历。
2024-11-11 23:45:31
1134
2
原创 “还在四处搜IDEA快捷键?IDEA其实早给你准备好了PDF!”
还在为IDEA的快捷键到处查找?其实IDEA自带了一份 快捷键PDF,完全不需要上网费劲找,轻松一键就能看到。如何找到内置快捷键PDF?以下是导出的PDF文件。
2024-11-11 23:14:46
347
原创 502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决
502 Bad Gateway 错误通常意味着服务器之间的通信失败,但导致的具体原因往往因场景而异。
2024-11-03 12:35:06
8702
1
原创 4.WebSocket 配置与Nginx 的完美结合
在现代 web 应用中,WebSocket 作为一种全双工通信协议,为实时数据传输提供了强大的支持。若要确保 WebSocket 在生产环境中的稳定性和性能,使用 Nginx 作为反向代理服务器是一个明智的选择。本篇文章将带你了解如何在 Nginx 中配置 WebSocket,并验证其是否正常工作。
2024-11-02 13:45:33
6777
原创 美定制!用Vue的:deep选择器轻松覆盖第三方组件样式
在Vue中,Scoped样式会限制样式作用范围,仅作用于组件自身。然而,第三方组件往往是以封装的方式引入的,Scoped样式无法直接穿透进入子组件。:deep选择器则解决了这个问题,它允许我们“深入”到子组件的内部样式中。
2024-11-02 11:26:05
786
原创 3. 探索 Netty 的粘包与拆包解决方案
在TCP传输过程中,消息并不是按“包”的概念发送的。粘包: 多条消息在接收端拼接在了一起,导致接收方在解析时无法确定消息的边界。拆包: 一条细哦西被拆分成了多个部分,导致接收方收不到完整的数据。例如,当客户端发送了两条消息“Hello"和"World"时,接收方可能收到"HelloWorld",也可能收到"Hell" 和 “oWorld" 这样的切片。Netty 提供了一套完整的解码器,帮助开发者有效解决粘包和拆包的问题。通过选择合适的解码器,你可以确保数据在不同场景下都能够稳定传输。
2024-11-01 16:22:40
647
原创 2. 探索 Netty 的进阶特性:解锁高性能通信的秘诀
在实际项目中,传输的数据格式可能不止于简单的文本。Netty 提供了强大的编解码功能,让你能够在数据进出网络时实现自定义的格式转换,以提升传输效率和数据处理的灵活性。编码器(Encoder):用于将消息转换为二进制数据,便于在网络中传输。解码器(Decoder):用于将接收到的二进制数据还原为特定格式,方便业务逻辑处理。// JSON 编码器@Override// 将对象转换为字节数组// 写入 ByteBuf// JSON 解码器@Override// 读取 ByteBuf 数据。
2024-11-01 15:32:27
745
原创 1. 让我们聊聊 Netty:高性能网络通信库
Netty 是一个高性能、异步事件驱动的网络应用框架,主要用于开发 TCP、UDP 和 WebSocket 等协议的服务器。它封装了 Java 底层的 NIO(New I/O)类库,使开发者能够专注于业务逻辑,而不必关心底层的网络传输细节。传统的 Java 网络编程是基于阻塞 IO(Blocking I/O),每个请求都需要一个线程来处理,而 Netty 使用了非阻塞 IO(Non-blocking I/O),在处理海量连接时更加高效。
2024-11-01 10:58:46
1045
原创 docker基础入门
认识DockerDocker是一个开源的应用容器引擎,基于Go语言并遵从Apach2.0协议开源。通俗的来说你可以把它理解为一款应用商店。为什么出现一句话:为了解决开发和部署环境不一致的问题能做什么,有哪些优点快速交付和部署(镜像与容器)资源的高效利用和隔离(高密度部署)轻松的迁移和扩展(一次封装,到处运行)Docker使用步骤安装Docker(安装应用商店)寻找/下载镜像(寻找/下载app)启动容器(启动应用)移植(别的手机安装应用商店,继续以前流程)...
2024-10-31 16:19:53
184
1
原创 Vue自定义组件
在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。// 定义组件var counter={// 定义模板template:"<button @click='num++'>你点击了{{num}}次;我记住了</button>", // 定义数据 data(){ return{ num:0 } } }// 注册全局组件Vue.component("counter",counter);var
2024-10-31 16:08:55
117
1
原创 3. 教你用WebSocket构建一个实时聊天应用
WebSocket提供了一个轻松的API,能够在浏览器和服务器之间建立持久连接。每当用户打开聊天室时,客户端与服务器之间进行WebSocket连接,之后,客户端和服务器之间的通信就不需要重复建立HTTP请求。
2024-10-31 15:29:20
799
原创 2.WebSocket进阶: 深入探究实时通信的最佳实践与优化技巧
Command ID,也称为Message ID,是每条消息附带的唯一标识符(ID)。在WebSocket通信中,客户端和服务器可以在发送每条消息时加上一个Command ID,这样:• 客户端发送消息给服务器时附带Command ID,便于之后确认该消息是否成功接收或处理。• 服务器在回应消息时返回相同的Command ID,帮助客户端识别是哪个请求的响应。这种方式的好处是,哪怕在同一个WebSocket连接中发送了多条请求,客户端和服务器也能一一对应每条消息。
2024-10-31 14:50:03
1467
原创 1.探索WebSocket:实时网络的心跳!
WebSokcet是HTML5引入的一种网络协议,最初由IEFT(互联网工程任务组)在2011年发布,专为双向通信设计。简单来说,它让浏览器和服务器之间可以像打电话一样,保持着一个实时的“通话线路”,随时互相传递信息。在普通的HTTP请求里,浏览器每次想要一些数据,都需要单独“打电话”给服务器,并等待回应,收到后电话就挂断了——这种方式叫短连接。而WebSocket却能让浏览器和服务器之间维持一条长连接,使他们随时可以向对方传递消息,就像微信、微博的实时消息推送那样!
2024-10-31 14:30:23
1089
原创 超实用!如何用搜索引擎提升你的工作效率
搜索引擎不只是输入关键词那么简单。本篇文章揭秘搜索引擎中的隐藏功能和高级用法,让你发现从未想到的搜索黑科技。
2024-09-01 22:52:03
451
原创 解决移动端使用Vant van-overlay 遮罩层导致的弹窗不可滚动问题
我们在进行H5调试的时候,尽量使用Nexus 4模式,如下图所示:因为之前一直习惯都是Responsive 和 默认显示的那几种方式进行调试,也并没有发现问题,但是在这次的调试中发现这种浏览器样式显示正确的,但是手机端访问的时候还是会有些区别导致样式显示有问题。
2024-08-31 15:22:23
1945
原创 记录一次单例模式乱用带来的危害。
Spring Bean 本身是单例的,在Spring 托管的Bean 中 通过单例模式获取对象会与Spring 产生冲突,导致无法通过Autowried 依赖注入的方式进行注入进来。
2024-08-04 11:59:04
457
原创 一文搞定Spring中登录权限验证,轻松掌握过滤器、拦截器与AOP
4. 1 过滤器 vs 拦截器- 过滤器是Servlet规范的一部分,独立于具体框架,主要用于HTTP请求和响应的预处理和后处理,如字符编码、安全控制等。- 拦截器是Spring MVC框架的一部分,依赖于Spring容器,可以访问Spring管理的Bean,用于业务处理方法的预处理和后处理,如权限验证、事务管理等。4.2 拦截器 vs AOP- 拦截器是针对特定的请求路径或者Controller进行拦截和增强,属于局部性的增强。- AOP是一种更为广泛的横切关注点的编程
2024-07-02 16:38:46
1285
原创 JSR 303全解析:如何在Java项目中实施高效数据校验
## 1.1 JSR 303的主要功能- 注解驱动:通过注解直接在Java类上定义校验规则。- 内置约束:如@NotNull、@Size、@Min、@Max等。- 自定义约束:可以定义自定义的校验注解和逻辑。- 分组校验:支持对不同场景(如创建和更新)进行分组校验。## 1.2 常用注解- @NotNull:验证注解的元素值不是null。- @Size:验证注解的元素的大小在指定范围内。- @Min和@Max:验证注解的元素值在指定范围内。- @NotNull:验证
2024-06-26 21:37:09
977
原创 优化你的Spring事务处理:TransactionSynchronizationManager的实用指南
在一个复杂的应用程序中,可能有多个数据库操作或者其他资源操作需要在一个事务中执行。`TransactionSynchronizationManager` 的存在可以确保这些操作在事务的上下文中**得到正确的执行顺序**和管理。这是确保数据完整性和一致性的重要机制。
2024-04-28 14:24:08
806
原创 MyBatis-Plus 实用工具:SqlHelper 让你的数据库操作更得心应手
SqlHelper 是MyBatis-Plus的一款SQL 辅助工具类,提供了一些常用的方法,简便我们的操作,提高开发效率。
2024-03-22 11:45:34
1314
1
原创 java.lang.UnsatisfiedLinkError: Unable to load library ‘tesseract‘
java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract':dlopen(libtesseract.dylib, 0x0009): tried: 'libtesseract.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibtesseract.dylib' (no such file), '/Library/Java/JavaVirtualMachines/
2024-03-20 14:14:26
1191
原创 JDK Locale的妙用:探索多语言和地区设置的强大功能
JDK(Java Development Kit)的Locale类用于表示特定的地理、文化和语言的环境信息。Locale对象包含了对应于特定地区或语言的信息,这对于国际化和本地化的应用程序是非常重要的。
2024-01-30 13:50:51
512
原创 避免灾难的良药:接口幂等性的架构秘术
我们经常会听到幂等性这个词,那什么是幂等性呢?为什么都在强调接口要做幂等性处理,如果不做幂等性处理会导致什么问题呢?哪些接口是幂等性的,哪些接口不是幂等性的呢?我们该如何保证接口的幂等性呢?我们一起来探讨一下吧。所谓接口的幂等性,就是不敢请求接口多少次获取到的结果都是一样的。
2024-01-29 15:39:33
1081
原创 位运算的辉煌:通过异或实现代码优化
异或是一种二进制的位运算,符号以 XOR 或 ^ 表示。异或运算可以看作是模2加法,其结果等于对应位相加取模2。
2024-01-24 23:56:58
599
原创 Kafka速度之谜:高性能的幕后秘密大揭秘
Kafka的介绍kafka是linkedIn开源的分布式消息系统,归给Apache的顶级项目kafka主要特点是基于Pull的模式来处理消息的消费的,追求高吞吐量,一开始的目的就是来做日志传输的收集的kafka不支持事务,对消息的丢失,错误没有太严格的要求高并发业务场景很好有用到事务的kafka的特点跨平台分布式实时性伸缩性。
2024-01-23 21:15:17
475
原创 高空之盾:构建系统韧性的高可用投递方案设计
MQ一直是系统开发中必不可少的组件,众所周知MQ有流量削峰解耦异步三大特性。但是既然是第三方组件,那么如何保证消息投递性的可靠性,是我们开发人员必须要研究的。保障消息的成功发出保障MQ节点的成功接收发送端接收到MQ节点(Broker)确认应答完善的消息补偿机制如何保障100%投递成功需要有补偿机制生产端在投递消息的时候失败了的处理机制生产端消息投递到MQ,但在MQ给生产返回应答时出现网络闪断这就导致生产端不知道消息是否送达。
2024-01-23 15:59:38
416
原创 JVM垃圾回收器手册:为你的项目挑选最适合的自动内存管理工具
串行收集器->Serial和Serial Old只能有一个垃圾回收线程执行,用户线程暂停。 适用于内存比较小的嵌入式设备 。并行收集器[吞吐量优先]->Parallel Scanvenge、Parallel Old多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 适用于科学计算、后台处理等若交互场景 。并发收集器[停顿时间优先]->CMS、G1用户线程和垃圾收集线程同时执行(但并不一定是并行的,可能是交替执行的),垃圾收集线程在执行的时候不会停顿用户线程的运行。 适用于相对时间有要求
2024-01-22 15:50:23
898
原创 大对决:选择明智,Java中Synchronized与Lock的并发之战
synchronized:在发生异常时候会自动释放占有的锁,因此不会出现死锁。Lock:发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,不然可能会引起死锁的产生
2024-01-19 20:01:18
473
原创 代码的守护者:拆解并发安全的三道防线
● 原子性问题通过 Synchronized, AtomicXXX、Lock解决● 可见性问题 Synchronized, volatile 解决● 有序性通过 Synchronized,volatile 解决。
2024-01-19 11:13:39
803
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人