- 博客(546)
- 资源 (4)
- 收藏
- 关注
原创 logstash-output-jdbc插件离线安装
如果安装过程中遇到依赖问题,可能需要单独下载并安装缺失的依赖插件,重复上述步骤即可。文件通过U盘、移动硬盘等方式传输到离线环境的Logstash服务器。
2025-08-12 16:52:25
137
原创 释放容器线程——Servlet3.0异步处理真正的价值锚点
在微服务与云原生时代,线程即资源。这条 HTTP 请求有没有在 1 毫秒内把宝贵的容器线程还回去。释放容器线程,才是异步接口唯一的、不可替代的价值锚点。
2025-07-18 16:41:38
791
原创 非阻塞与多路复用的关系与区别
非阻塞I/O是打破传统阻塞模型的基础,它赋予单个I/O操作“不阻塞进程”的能力;而多路复用则是协调多个非阻塞I/O的“调度器”,通过内核的高效管理实现“一对多”的事件驱动。非阻塞是多路复用的必要条件:没有非阻塞I/O,多路复用无法实现多流并发处理;多路复用是规模化非阻塞的最优解:当非阻塞I/O的数量超过一定阈值,唯有借助内核级的多路复用机制,才能避免用户态轮询的性能灾难。从select到epoll。
2025-05-28 17:27:17
865
原创 CPU特权级别:硬件与软件协同构建系统安全的基石
用户模式与内核模式的划分,本质是计算机系统“分层治理”思想的体现——硬件定义规则边界,操作系统负责规则执行。对于国产CPU而言,无论是基于ARM/X86的兼容创新,还是LoongISA/SW64的完全自主,均需在硬件特权设计与操作系统适配中寻找平衡点。
2025-05-28 08:55:51
848
原创 为什么UTF-8字节序列用ISO-8859-1这种单字节字符集解码成乱码后,可通过new String(wrongStr.getBytes(“ISO-8859-1“), “UTF-8“)恢复
这一方法本质上是利用了 ISO-8859-1 的“字节透明性”特性。UTF-8 的每个字节天然满足这一条件(UTF-8 使用 1~4 字节,每字节范围。:恢复过程中必须使用相同的 ISO-8859-1 编码重新编码字符串。,且该字符的 ISO-8859-1 编码值与原始字节值完全相同。:原始字节必须是有效的 ISO-8859-1 字符(即字节值在。如果使用其他编码(如 GBK),字节值会改变,导致恢复失败。,但被错误地用 ISO-8859-1 解码为字符串。假设原始 UTF-8 字节序列为。
2025-05-27 14:25:51
993
原创 Java Class 文件编码机制全解析
Java 的 class 文件是 JVM 实现跨平台兼容的核心载体,其编码规则直接影响程序的存储、传输和执行。本文基于 JVM 规范,系统解析 class 文件的结构与编码机制,涵盖字符串处理、符号名称存储、源文件编码影响等关键问题。通过理解 class 文件的编码机制,开发者能更好地处理国际化、调试字节码问题,并编写出健壮的跨平台 Java 程序。所有字符串数据(包括类名、方法名、字段名、字符串字面量等)均存储在常量池的。)采用何种编码(UTF-8、GBK、ISO-8859-1 等),
2025-05-26 23:14:02
843
原创 解析Java String.getBytes()编码与new String()解码的字符集转换机制
核心原则编码()与解码()字符集必须一致。始终显式指定字符集,避免依赖默认值。最佳实践优先使用常量(如UTF_8ISO_8859_1在文件、网络、数据库交互中明确声明字符集。避坑指南禁止用字符串处理二进制数据。跨系统交互时,验证字符集兼容性(如特殊符号的支持)。通过理解字符编码的本质并遵循上述实践,开发者可彻底告别乱码问题,确保文本数据在复杂场景下的正确性和可靠性。
2025-05-26 15:13:57
917
原创 百分比编码(Percent-Encoding)详解
百分比编码的本质是将字符的字节表示通过十六进制转义为URL安全格式编码与解码的字符集一致性:客户端编码(如UTF-8)与服务端解码字符集必须匹配。对字节而非字符的操作:编码结果仅反映字节值,与字符的语义无关。实际开发中,统一使用UTF-8是避免乱码的最佳实践,同时在处理URL参数时,优先使用(前端)和标准库的解码方法(后端),确保编码规则符合RFC标准。
2025-05-26 10:25:17
935
原创 Java file.encoding 属性详解:作用与影响
的默认编码受其影响,例如控制台输出的字符编码。包装网络字节流时,若未显式指定编码,会依赖。在协议中明确编码格式(如 HTTP 头部声明。的潜在影响,确保应用在不同环境中稳定运行。处理网络数据时,若未指定编码,同样依赖。当使用以下类未显式指定编码时,默认使用。是 Java 的系统属性,用于指定。在以下操作中未指定编码时,依赖。强制通信双方使用同一种编码(如。通过遵循最佳实践,可彻底消除。
2025-05-26 09:30:11
453
原创 计算机字符世界的底层逻辑:从符号到编码的全解析
在计算机处理文本的过程中,字符、字符集、码点与编码构成了一套精密的符号系统。这套系统不仅是人类语言数字化的基石,更折射出计算机技术从本地化到全球化的演进历程。本文将结合技术原理与历史脉络,深入解读这些核心概念及其相互关系。
2025-05-26 09:02:25
547
原创 Java字符编码转换:从UTF-8到GBK的实现原理与实践
Java实现UTF-8到GBK的转换,本质是通过Unicode作为中间桥梁解码阶段:将源编码(UTF-8)的字节流转换为Java内部的Unicode字符串(String编码阶段:将Unicode字符串按目标编码(GBK)规则生成字节流。
2025-05-25 22:17:05
1057
原创 深入解析 I/O 模型:原理、区别与 Java 实践
BIO:简单但性能差,适合低频场景。非阻塞 I/O:需主动轮询,效率低下,实际较少直接使用。I/O 多路复用:高并发场景的黄金标准,Java NIO 的核心实现。AIO:理论最优,但受限于操作系统和编程复杂度。技术选型建议大多数场景下,I/O 多路复用(NIO)是最佳选择。若需极致性能且系统支持,可尝试异步 I/O(如 Linuxio_uring传统 BIO 仅适用于原型开发或低并发场景。
2025-05-13 22:00:30
895
1
转载 简单说一下阻塞IO、非阻塞IO、IO复用的区别
在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、IO复用、信号驱动IO以及异步IO。本篇文章主要介绍IO的基本概念以及阻塞IO、非阻塞IO、IO复用三种模型,供大家参考学习。对于计算机而言,任何涉及到计算机核心(CPU和内存)与其他设备间的数据转移的过程就是IO。IO设备:比如我们最常见的打印机、鼠标、键盘。对IO设备的数据读写。阻塞IO模型会阻塞较长时间;非阻塞IO在等待数据报的过程中,进程并没有阻塞,它可以做其他的事情;
2025-05-13 21:49:52
54
原创 Java并发之流水线模式以及CompletableFuture实战
流水线模式是一种高效的并发处理模型,适用于需要分阶段处理的任务场景。通过合理设计线程池规模和使用等工具,可以显著提升代码的可读性和性能。避免回调地狱:通过链式调用或简化代码。合理配置线程池:根据任务类型选择合适的线程数和队列策略。异常处理:确保每个阶段的异常能够被捕获和处理。任务解耦:通过模块化设计提高系统的可维护性。通过以上优化,流水线模式可以成为Java并发编程中的强大工具,帮助开发者构建高效、可靠的并发系统。
2025-05-09 11:45:57
719
原创 Java 显式锁与 Condition 的使用详解
Java 中的 ReentrantLock 和 Condition 提供了比 synchronized 更灵活的线程同步机制。ReentrantLock 支持可重入锁、超时等待和公平锁,而 Condition 则用于线程的等待和唤醒,替代了传统的 Object.wait() 和 Object.notify()。通过生产者-消费者模型的示例,展示了如何使用 ReentrantLock 和 Condition 实现线程协作。常见误区包括不加锁调用 Condition.await(),这会导致 IllegalMo
2025-05-08 20:56:15
1002
原创 Java线程阻塞方法LockSupport.park()/Thread.sleep()/Object.wait()详解:原理、区别
适合底层同步工具开发,提供最灵活的线程控制。适合简单延时,但需注意锁的释放问题。是经典的线程通信工具,适合条件驱动的协作场景。也是基于wait实现)开发者需根据具体需求选择合适的方法,并结合 JVM 和操作系统特性,编写高效、健壮的并发程序。理解这些方法的底层机制,不仅能优化性能,还能避免常见的并发陷阱(如死锁、资源泄漏)。
2025-05-08 17:24:38
1116
原创 CAS、CAS自旋、CAS自旋锁、CLH锁与Java AQS:深入理解并发编程核心机制
CAS(Compare and Swap)是一种无锁(Lock-Free)的原子操作,用于在多线程环境下实现数据同步。CLH(Craig, Landin, Hagersten)锁是一种基于链表的队列锁,通过隐式队列管理线程,减少缓存一致性流量。基于CAS自旋实现的锁,线程在获取锁失败时不会阻塞,而是循环尝试。理解这些机制的原理与实现,是编写高效、健壮并发代码的关键。CAS自旋是指线程在CAS失败后循环重试,直到成功。)的核心框架,用于构建锁和同步器(如。AQS提供需子类实现的抽象方法(如。
2025-05-08 12:25:23
976
原创 Java捕获InterruptedException异常后,会自动清空中断状态
异常,然后输出捕获异常后的中断状态。由于 Java 会自动清除中断状态,所以输出的中断状态为。在上述代码中,子线程开始睡眠 5 秒,主线程睡眠 1 秒后中断子线程。异常时,线程的中断状态会被自动清除,这是 Java 处理线程中断的一种机制。,Java 会自动清除该线程的中断状态。异常一般是在一个线程处于等待(像。等方法)状态时被另一个线程调用。,此时线程可以重新响应中断。
2025-05-04 22:18:32
266
原创 Java获取classpath根路径的方式
上述几种方法在不同场景下有各自的优势,可根据具体需求来选择合适的方法。能获取类路径,该路径由多个路径组成,以分隔符分隔。分隔符将其分割成多个路径元素,最后输出这些元素。方法来获取类路径的根路径,最后输出其路径。方法来获取类路径的根路径,然后输出该路径。方法可用于获取类路径下资源的。时,就能得到类路径的根路径。在上述代码中,先获取当前类的。即可得到类路径的根路径。方法获取类路径,再使用。
2025-03-31 11:08:20
461
原创 Server-Sent Events(SSE)协议(实现ChatGPT聊天“打字机“效果)
SSE是一种基于HTTP的轻量级协议,允许服务器通过单个HTTP连接持续向客户端推送实时数据。它是HTML5标准的一部分,旨在为Web应用提供一种简单、高效的实时数据传输方式。SSE协议作为一种基于HTTP的轻量级实时数据推送协议,为Web应用提供了一种简单、高效的实时通信解决方案。它继承了HTTP协议的兼容性和简单性,同时解决了实时数据传输的需求。对于不需要双向通信的场景,SSE是比WebSocket更轻量、更易维护的选择。随着Web技术的不断发展,SSE协议在实时通知、流式输出等领域将继续发挥重要作用。
2025-03-30 11:18:02
1008
原创 Struct2中自定义的Filter失效问题
Struts2 的拦截器(Interceptor)机制替代了传统 Filter 链的职责,因此核心 Filter 可能在处理完成后主动终止 Filter 链。:一旦匹配到 Action,直接处理并返回响应,无需后续 Filter 参与。:直接响应静态资源(如 JS、CSS),避免无关 Filter 执行。(即请求匹配到一个 Struts2 Action),则直接调用。路径),则直接处理并返回响应,同样终止 Filter 链。,导致后续 Filter 链终止。若请求是静态资源(如配置的。
2025-03-26 15:43:44
298
原创 Linux 挂载磁盘操作指南
在进行磁盘挂载操作之前,你需要做好以下准备工作:通过以下命令查看磁盘是否已经存在分区:若 的输出中没有目标磁盘对应的分区信息(如 ),或者 里目标磁盘没有子节点,说明该磁盘未分区,需要进行分区操作。若磁盘已有分区,则可跳过分区步骤,直接进行格式化。(二)创建分区(针对未分区磁盘)使用 工具对磁盘进行分区,以 为例:进入 的交互模式后,按照以下步骤操作:创建分区后,让内核重新读取分区表以识别新分区:三、格式化分区(针对未格式化磁盘)格式化分区会清除分区内的所有数据,请确保已备份重要
2025-03-25 15:10:01
3347
原创 一般机器学习有哪些算法?
传统的机器学习算法主要依赖统计学和优化方法,不依赖深层神经网络,通常具有较高的可解释性且适用于中小规模数据集。通过最小化预测值与真实值的平方误差,拟合特征与目标之间的线性关系。:房价预测、销量趋势分析。和在线性回归基础上加入L2或L1正则化,防止过拟合。:高维数据回归(如基因数据分析)。基于支持向量机(SVM)的回归方法,通过间隔最大化优化预测边界。通过Sigmoid函数将线性回归结果映射到概率,用于二分类或多分类。:信用评分、疾病预测。寻找最大间隔超平面分割数据,支持核技巧处理非线性问题。
2025-03-14 22:54:31
1059
原创 深度学习有哪些算法?
深度学习包含多种算法和模型,广泛应用于图像处理、自然语言处理、语音识别等领域。希望这份分类能帮助你系统了解深度学习算法!如需某个方向的详解,可进一步探讨。
2025-03-14 22:41:02
1960
转载 利特尔法则在计算机系统中的应用
在引出今天的主角Little's Law之前,有必要先统一一下我们描述“性能”的“基本语言”,毕竟语言不通是没法交流的不是。稳定的系统中同时被服务的用户数量等于用户到达系统的速度乘以每个用户在系统中驻留的时间,适用于所有需要排队的场景。N = X * R,其中N 表示系统中同时活动的用户,X 表示用户相继到达系统的速率,在稳定(这个词非常重要!!!)状态(用户到达系统的速度等于用户离开系统的速度)时即为系统吞吐量,R 表示每个用户在系统中平均的驻留时间。
2025-03-12 15:19:28
111
原创 利特尔法则(Little‘s Law)
利特尔法则(Little’s Law)是排队论中的一个基本定理,由约翰·利特尔(John Little)于1954年提出并于1961年证明。它描述了一个稳定的系统中,、**平均到达率(λ)
2025-03-12 15:02:00
767
原创 Java 线程池的核心线程数已满,什么情况下会创建新的线程?
是创建新线程的必要条件。此时,线程池会突破核心线程数限制,创建新线程直至达到最大线程数,后续任务将。
2025-03-09 19:55:25
313
原创 Java线程池 execute方法和submit方法,异常处理有何不同?
execute方法execute方法是Executor接口定义的方法,在类中实现,用于提交一个Runnable任务到线程池执行。submit方法submit方法是接口定义的方法,有多个重载版本,可接受Runnable或Callable任务,并且会返回一个Future对象,用于获取任务的执行结果。execute方法提交的任务抛出异常时,异常会直接影响工作线程,需要在任务内部或通过线程的进行处理。submit方法提交的任务抛出异常时,异常会被封装在Future对象中,需要通过调用Future的get。
2025-03-09 13:10:23
417
原创 httpclient4.5 的 httpclient对象是可以作为单例复用的吗?
Apache HttpClient 4.5 的 `HttpClient` 对象可以作为单例复用,且这是官方推荐的最佳实践
2025-03-06 13:13:59
931
转载 ElasticSearch踩坑日记:Logstash同步数据库有type字段导致同步失败
通常情况下,我们都会在Logstash为pipeline指定type,用来区分不同管道的同步处理。解决方案就是把结果集的type字段改名,暂时只找到这个方案,这纯粹就是Logstash的设计问题。当SQL语句返回的也有type同名字段时,运行Logstash不会同步任务数据,也不会报错。
2025-02-19 15:09:03
81
原创 Linux nohup
nohup是 Linux 系统中一个非常实用的命令,它的英文全称是 “no hang up”(不挂断),主要用于在用户退出登录或者终端会话关闭后,让指定的程序在后台持续运行,而不会受到 HUP(hangup)信号的影响而终止。以下为你详细介绍nohup的使用方法、注意事项等内容。
2025-02-17 16:50:07
958
原创 Linux /dev/null
dev/null是一个简单但功能强大的工具,在处理输入输出、文件操作和程序测试等方面都有广泛的应用,可以帮助用户更灵活地控制命令的执行和输出。
2025-02-17 16:19:13
597
原创 elasticsearch8 linux版以服务的方式启动
作为系统初始化系统的 Linux 发行版(如 CentOS 7 及以上、Ubuntu 16.04 及以上),需要创建一个。这样,每次系统启动时,Elasticsearch 服务都会自动启动。创建或修改服务文件后,需要重新加载。
2025-02-15 15:55:26
551
原创 自签名证书和可信证书的区别
当用户访问使用自签名证书的网站时,浏览器会显示安全警告,提示用户该连接可能不安全,这会让用户对网站的安全性产生疑虑。例如,在浏览器中访问使用自签名证书的网站时,地址栏可能会显示红色或黄色警告标识。
2025-02-15 14:50:49
468
固定管理系统
2011-10-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人