- 博客(92)
- 收藏
- 关注
原创 Java集合框架
在理想哈希下,链表长度服从泊松分布,平均约 0.5链表长度达到 8 的概率:约 0.00000006% —— 几乎是“异常事件”此时链表查找从 O(1) → O(n),性能断崖下跌红黑树查找为 O(log n),在 n=8 时,8 次 vs 4 次比较,效率提升 50%+退化选 6,是为防抖:避免在 7 附近反复树化/退化,浪费 CPU🌟 你看到的不是代码,是 Java 工程师用概率学对抗随机性的诗。
2026-04-13 14:57:10
370
原创 多线程之AQS
AbstractQueuedSynchronizer(简称AQS)是Java并发包中的核心组件,它为实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器提供了一个框架。AQS是Java并发包中许多同步工具类的基础,如ReentrantLock、CountDownLatch、Semaphore等。
2026-04-03 11:57:26
346
原创 多线程之CAS
CAS(Compare-And-Swap)是一种用于实现无锁编程的原子操作机制,它在多线程环境中用于保证数据的一致性和线程安全。CAS操作通过比较内存中的值与预期值是否相等,如果相等,则将新值写入内存中,整个过程是原子性的。
2026-04-03 11:55:49
294
原创 多线程之volatile
在多线程编程中,volatile 关键字是一个重要的同步机制,主要用于保证变量的可见性和有序性。它是一种轻量级的同步策略,适用于特定场景下的线程安全问题。
2026-04-03 11:55:05
46
原创 多线程之synchronized
synchronized 是 Java 中的一个关键字,用于实现线程同步,确保在多线程环境下对共享资源的访问是安全的。它通过对象锁或类锁来控制同一时间只有一个线程可以执行被修饰的代码块或方法。
2026-04-02 16:17:55
207
原创 G1数据结构
G1垃圾回收算法的内部结构以“化整为零”的分区思想为核心,将整个Java堆划分为多个大小相等的独立区域(Region),每个Region大小通常为1~32MB(2的幂次方),由JVM根据堆大小自动设定。这种结构打破了传统垃圾回收器对堆内存的固定分代布局,实现了更灵活、高效的内存管理。
2026-04-02 14:35:49
213
1
原创 GC tuning
在Java中,垃圾指的是堆内存中那些已经不再被任何引用链访问到的对象。这些对象无法再被程序使用,其所占用的内存空间应当被回收,以供新对象分配使用。例如:Object obj = new Object();obj = null;当obj被置为null后,若该对象无其他引用指向它,则成为“垃圾”。
2026-04-02 10:27:54
363
原创 Java运行时数据区
Java运行时数据区是JVM在执行Java程序时管理内存的核心区域,它将内存划分为多个逻辑部分,以支持程序的运行、方法调用、对象存储和垃圾回收等机制。根据线程的访问权限,这些区域可分为线程私有和线程共享两大类。
2026-04-02 10:27:43
159
原创 对象的大小
Java对象的大小 = 对象头大小 + 实例数据大小 + 对齐填充大小在默认情况下(64位JVM + 开启指针压缩):对象头大小:16字节实例数据大小:根据字段类型和数量计算对齐填充:确保总大小为8的倍数。
2026-04-02 10:27:28
175
原创 对象头具体包含什么
总结来说,对象头通过 Mark Word 和类型指针,记录了对象运行时的关键信息,是JVM进行对象管理、锁机制和垃圾回收的基础。存储对象自身的运行时数据,这些数据与对象的锁状态、哈希码、GC分代年龄等信息相关。Mark Word 的大小是动态的,根据对象的状态会复用部分存储空间,以节省内存。锁状态标志:表示对象当前的锁状态(如无锁、偏向锁、轻量级锁、重量级锁)。偏向线程ID:在偏向锁机制下,记录偏向该对象的线程ID。线程持有的锁:记录当前持有该对象锁的线程。偏向时间戳:偏向锁的启动时间戳。
2026-04-01 14:50:10
27
原创 对象在内存中的存储布局
在HotSpot虚拟机中,Java对象在内存中的存储布局主要分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。这一结构是理解JVM内存管理、锁机制与性能优化的基础。
2026-04-01 14:32:03
34
原创 Java内存模型
Java内存模型(Java Memory Model, JMM)是定义多线程程序中变量访问规则的抽象规范,核心目标是确保在不同硬件和操作系统上程序的并发行为一致。它不等同于JVM运行时数据区的物理内存结构,而是一套关于主内存与工作内存之间交互、变量可见性、指令有序性的逻辑规则。
2026-04-01 13:43:45
215
原创 双亲委派机制
JVM类加载的双亲委派机制是一种类加载器之间的层级协作模型,其核心是:当一个类加载器收到类加载请求时,不会自行加载,而是优先委派给父类加载器去完成,只有父类无法加载时,自身才会尝试加载。
2026-04-01 13:37:18
195
原创 class文件加载到内存
JVM将class文件加载到内存的过程主要分为三个阶段:加载(Loading)、链接(Linking)和初始化(Initialization),其中链接又细分为验证、准备、解析三个步骤。
2026-04-01 13:33:27
254
原创 六大设计原则
软件设计的六大原则是面向对象设计的核心指导思想,分别是:单一职责、开闭原则、里氏替换、依赖倒置、接口隔离和迪米特法则,它们共同构成了设计模式的基础,帮助构建高内聚、低耦合、易扩展的系统架构。
2026-03-31 18:23:50
45
原创 Java中对象之间的关系
Java中对象之间的关系主要有依赖、关联、聚合、组合、继承和实现六种,它们体现了面向对象设计中类与类、对象与对象之间的结构与行为联系。
2026-03-31 18:20:55
36
原创 Netty 参数配置
int 类型,服务器端连接请求队列的最大长度含义:该参数用于设置服务器监听套接字(ServerSocketChannel)的连接请求队列(全连接队列)的最大长度。作用:当服务器正在处理连接请求时,新的连接请求会先放入这个队列中等待处理。如果队列已满,新的连接请求可能会被拒绝。配置方式:在 ServerBootstrap 中使用 option(ChannelOption.SO_BACKLOG, value) 设置。
2026-03-19 17:41:30
319
原创 Netty编解码与粘包拆包
在Netty中,网络传输的数据是字节流,而应用层处理的是Java对象或业务消息,因此需要编码(Encoder) 和 解码(Decoder) 来完成类型转换。⚠️ 注意:解码必须处理“半包”情况——数据未到齐时不能抛异常,应保留读指针,等待下一批数据。
2026-03-19 14:30:35
217
原创 Netty Channel 生命周期
当一个新的连接建立时,ChannelHandler 中的方法按照以下顺序执行:handlerAdded() - 当 Handler 被添加到 ChannelPipeline 中时调用,表示该 Handler 已经成功加入到处理链中。channelRegistered() - 当 Channel 注册到 EventLoop(NioEventLoop)时调用,表示 Channel 已经与 NIO 线程建立了绑定关系。
2026-03-19 11:25:45
360
原创 多线程基础
compare and swap 1.8,高版本 compare and set(比较并且设定)线程数量少,执行时间短用自旋锁;线程数量多,执行时间长,用重量级锁。保证线程之间可见性(MESI,CPU缓存一致性保证)禁止指令重排序(读屏障、写屏障、读写屏障)加版本号(A1.0 B2.0 A3.0)概念、启动方式、常用方法、线程生命周期。如果是基本类型无所谓,引用类型有问题。锁升级:偏向锁、自旋锁和重量级锁。锁定方法和非锁定方法同时执行。
2026-03-09 18:15:40
35
原创 GitLab基本设置
gitlab默认分支是main分支,如果想修改,需要到项目设置里进行修改,具体步骤如下:1、在主页种选择项目,如下图:2、选择左侧菜单最后一项设置,然后点击仓库,如下图:3、修改分支默认值4、最后保存更改。
2026-02-02 17:21:35
210
原创 GitLab SSH 密钥配置
如果看到 id_rsa 和 id_rsa.pub(或类似文件),说明已有密钥,可直接跳到第3步复制公钥。接着设置密码(passphrase),可留空直接回车,但建议设一个强密码以增强安全性。5、给密钥起个名字(如“工作电脑”或“MacBook Pro”),便于识别。系统会提示保存路径,直接回车使用默认位置(~/.ssh/id_rsa)全选输出内容并复制(以 ssh-rsa 开头,包含邮箱结尾)。2、点击右上角头像 → Settings(设置)。4、在 Key 文本框中粘贴你复制的公钥内容。
2026-02-02 16:36:55
342
原创 elasticsearch时间搜索
在Elasticsearch中,now/d 是一个非常实用的日期数学表达式,它表示将当前时间向一天进行取整,即返回到当天的00:00:00时刻。
2026-01-29 18:20:32
173
原创 Java 启动服务时指定JVM(Java 虚拟机)的参数配置说明
示例:java -jar -Xms1024m -Xmx1024m -Duser.timezone=Asia/Shanghai -Dfile.encoding=utf-8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof。
2026-01-16 11:33:31
320
原创 前端从服务端下载文件的几种方式
缺点:仅支持同源文件下载,跨域文件需服务器设置 Access-Control-Allow-Origin 头。优点:支持跨域文件下载(需服务器设置 Content-Disposition 头)。优点:最灵活,支持动态生成内容、认证请求(如添加 Authorization 头)。缺点:实现复杂度高,需处理 Blob 转换和 URL 创建。优点:兼容性好,适用于浏览器不支持 Blob 的场景。优点:实现简单,兼容性好(现代浏览器支持)。优点:兼容性好,无需页面跳转。
2026-01-16 11:00:01
305
原创 过滤条件放在ON后与WHERE后的区别
在SQL关联查询中,将过滤条件放在ON后与WHERE后存在显著区别,主要体现在连接类型(内连接/外连接)和结果集行为上。ON vs WHERE:无本质区别,两者均过滤最终关联结果,结果集相同。关键结论:外连接时,ON仅影响右表匹配,WHERE可能破坏外连接特性。ON条件:仅过滤右表匹配逻辑,保留左表所有行(即使右表无匹配)。性能优化:ON条件优先过滤减少中间结果集,提高效率。左表过滤:条件放在WHERE中(保留左表所有行)。右表过滤:条件放在ON中(仅影响右表匹配)。
2026-01-13 11:35:03
43
原创 内连接(INNER JOIN)与外连接(OUTER JOIN)的区别及效率对比
内连接:语法:SELECT … FROM A INNER JOIN B ON A.id = B.id特点:只返回A.id = B.id匹配的行不保留非匹配行(如A中无B匹配时,该行被丢弃)适用场景:获取两个表的交集数据(如员工-部门关联)外连接:语法:SELECT … FROM A LEFT JOIN B ON A.id = B.id特点:返回A表所有行,B表无匹配时用NULL填充保留非匹配行(如A中有B无时,B字段为NULL)
2026-01-13 11:28:30
170
原创 Dump配置
opt:启用所有优化选项(相当于 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset)。若使用标准工具,应替换为 --databases 或 --tables。数据一致性:–single-transaction 选项未显式使用,但 --flush-logs 可能用于确保导出时二进制日志的一致性。:指定数据库用户名。
2026-01-06 16:03:37
57
原创 【漏洞扫描】ZooKeeper 未授权访问
默认情况下,Zookeeper会占用8080端口用于AdminServer,但通过配置admin.serverPort可以将其更改为其他端口(如8082),以避免端口冲突或安全风险。到此,当前漏洞已经解决,8080和8082端口都已经关闭,但是又提示了个新的漏洞,具体信息:ZooKeeper 未授权访问,关于这个漏洞需要设置 ACL 访问控制,由于ZooKeeper 仅限本地访问,配置 ip:127.0.0.1:cdrwa 是正确且必要的安全措施,但必须配合其他关键配置才能彻底消除未授权访问风险。
2025-12-22 18:11:21
608
原创 Linux日常命令
ausearch 是 Linux 系统自带的审计工具,属于 auditd(审计守护进程)套件的一部分,并非 MySQL 独有的命令。SELinux(Security-Enhanced Linux)是一种基于强制访问控制(MAC)的Linux安全模块,通过为进程和文件分配安全上下文(标签)来限制访问权限,从而增强系统安全性。此外,日志还提供了详细的上下文信息:操作发生时进程的当前工作目录(cwd)是 /usr/local/ms/data/platform。comm="rm" 和 。
2025-11-20 18:11:34
995
原创 【漏洞扫描】SSL/TLS 服务器瞬时 Difie-Hellman 公共密钥过弱
若未显式禁用DHE算法或未配置强DH参数(≥2048位),服务器可能自动使用弱DH密钥(如1024位),直接触发“瞬时Diffie-Hellman公共密钥过弱”漏洞。默认可能包含弱加密算法(如3DES、RC4)或使用不安全的密钥交换方式(如DH 512/1024位),易受降级攻击或中间人攻击。默认可能启用不安全的旧版协议(如TLSv1.0/1.1),这些协议存在已知漏洞(如POODLE、BEAST等)密钥存储类型(PKCS12)和密码加密不影响协议安全性,但若未限制协议版本和算法,仍可能暴露漏洞。
2025-10-17 10:03:31
951
原创 Esxi安装麒麟操作系统
Esxi 版本:6.7.0 (Build 8169922)openKylin版本:6.6.0-15-generic #0ok9-KYLINOS。
2025-09-25 16:26:44
436
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅