- 博客(32)
- 收藏
- 关注
原创 Java线程与线程池详解
Java线程与线程池核心知识摘要:线程创建有3种方式(继承Thread、实现Runnable/Callable),Callable支持返回值和异常抛出。线程状态包括新建、就绪、运行、阻塞和死亡。重要区别:wait释放锁,sleep不释放;notify随机唤醒单个线程,notifyAll唤醒全部。线程池通过Executor框架实现,核心类ThreadPoolExecutor可配置核心/最大线程数、任务队列和拒绝策略。Executors提供4种常用线程池,需注意无界队列的OOM风险。最佳实践包括合理设置线程数(
2025-07-01 13:02:48
831
原创 Java 类生命周期详解
Java 类的生命周期是指从 加载(Loading) 到 卸载(Unloading) 的整个过程,共分为 7 个阶段。JVM 通过 类加载器(ClassLoader) 和 运行时数据区(Runtime Data Areas) 管理类的生命周期。
2025-06-30 12:34:59
520
原创 ConcurrentHashMap 原理详解
Java中的ConcurrentHashMap(CHM)是高效的线程安全哈希表实现。JDK7采用分段锁机制(16个Segment),允许不同段并发操作;JDK8优化为CAS+synchronized,通过桶级锁和红黑树提升性能。关键改进包括:更细粒度的锁(桶头节点)、多线程协助扩容、链表转红黑树处理冲突。相比Hashtable的全局锁,CHM并发度更高,size()虽非绝对准确但误差可忽略。适用于高并发读写场景,JDK8实现复杂度更高但性能接近无锁结构。
2025-06-30 12:13:39
798
原创 HashMap底层详解
本文对比分析了JDK7和JDK8中HashMap的扩容机制及优化。JDK7采用头插法扩容,多线程环境下可能导致循环链表;JDK8改用尾插法并引入高低位拆分优化,避免死循环问题。主要区别包括:数据结构上JDK8加入红黑树(链表长度≥8时转换),索引计算采用高位标志位优化,节点类型分为链表节点和树节点。JDK8的优化还包括:扩容时无需全量rehash,通过hash&oldCap判断新索引位置;当链表长度≥8且容量≥64时转为红黑树提升查询效率。需要注意的是,两个版本均非线程安全。
2025-06-30 12:07:24
307
原创 AQS(抽象队列同步器)详解
AQS就是JDK中为“线程同步”提供的一套基础工具类,AQS 是 JUC 的基础工具类,ReentrantLock 就是基于 AQS 来写的AbstractQueuedSynchronizer(AQS)字面意思是抽象队列同步器,。AQS定义了一套**多线程访问共享资源的同步器框架**,如常用的ReentrantLock、Semaphore、CountDownLatch、CyclicBarrie并发类都是通过实现AQS里面的模板方法来实现内部的组件。
2025-06-30 11:58:40
636
原创 Java中的锁思想
原子锁、对象锁、偏向锁、轻量级锁、重量级锁、公平锁、非公平锁、死锁、乐观锁、悲观锁,萌新看到这些应该有点懵吧!不要着急耐心看完这篇文章让你了解Java中的锁到底是什么东东。
2025-06-30 11:44:05
793
原创 Kubernetes中kube-scheduler资源对象详解
Kubernetes调度机制概述 Kubernetes调度是将Pod分配到合适节点的关键流程。默认调度器kube-scheduler通过两个阶段选择节点:首先过滤掉不满足条件的节点,然后对剩余节点进行评分。调度策略可配置,支持自定义过滤规则和评分标准。针对大规模集群,可通过percentageOfNodesToScore参数优化性能,平衡调度延迟与精度。该参数默认值随集群规模自动调整,最小值为5%。调度器采用轮询机制确保节点公平性,并考虑多区域分布。开发者也允许替换默认调度器实现自定义调度逻辑。
2025-06-29 21:37:50
794
原创 Kubernetes中Service资源对象详解
Kubernetes中Service、Endpoint和kube-proxy共同协作实现服务发现与负载均衡。Service作为固定接入点,通过标签选择器关联Pod组;Endpoint自动维护Service对应的Pod IP列表;kube-proxy监听API Server变化,维护节点网络规则实现负载均衡。无头Service(ClusterIP:None)适用于有状态应用直接通信。Service类型包括ClusterIP(默认)、NodePort、LoadBalancer和ExternalName。Pod访
2025-06-29 20:08:35
481
原创 Kubernetes中Pod资源对象详解
如果因为pvc或pv无法动态创建,那么pod也会一直处于pending状态,比如要使用StatefulSet 创建redis集群,因为粗心大意,定义的storageClassName名称写错了,那么会造成无法创建pvc,这种情况pod也会一直处于pending状态,或者,即使pvc是正常创建了,但是由于某些异常原因导致动态供应存储无法正常创建pv,那么这种情况pod也会一直处于pending状态。软规则,优先调度至满足的Node的节点,但不强求,多个优先级规则还可以设置权重值;
2025-06-29 19:39:13
862
原创 JVM内存原理、垃圾回收器与算法
Java虚拟机运行时数据区分为线程私有(程序计数器、虚拟机栈、本地方法栈)和线程共享(堆、方法区)两部分。堆是主要对象存储区,采用分代回收策略;方法区存储类信息等数据。垃圾回收算法包括标记-清除、复制等,不同垃圾收集器各有特点:Serial收集器单线程工作,CMS追求低停顿,G1可预测停顿时间,ZGC暂停时间极短。JDK8默认使用ParallelScavenge+ParallelOld组合,JDK9后G1成为默认收集器。收集器选择需权衡吞吐量与停顿时间,可通过JVM参数指定。
2025-06-29 18:56:41
694
原创 Kubernetes核心组件介绍
Kubernetes架构由master和node节点组成。master节点包含API Server(集群访问入口)、Controller Manager(各类控制器)、Scheduler(资源调度)和etcd(键值存储);node节点运行kubelet(节点管理/Pod生命周期)、kube-proxy(网络代理/负载均衡)和容器运行时。主要组件通过API Server交互,只有API Server能直接操作etcd。kube-proxy支持iptables和IPVS两种模式,后者提供更高性能负载均衡。
2025-06-29 17:42:56
812
原创 Xshell常用操作记录
当前指令,与WIndows中的复制的快捷键冲突。粘贴为 ShIft+Insert。¥Ctrl+C 代表着。¥复制为:Ctrl+
2022-08-18 15:37:52
270
原创 两个Integer的是使用==比较还是.equals()比较
首先说明Integer是可以使用==进行比较的,注意两个Integer的值在-128~127之内时可以用==比较。两个Integer的值不在-128~127之内时,必须用b.equals(a)进行比较。-128~127之内比较执行效果:-128~127之外比较执行效果:......
2022-07-14 16:52:58
7369
原创 Linux命令记录
1.输入命令时输入错误时如何返回,像这样Ctrl+c2.vi文本文件时,文件太大,快速定位关键词/+关键词+回车敲字符 n 就可以向后查询 ,敲字符N(大写N)就会向前查询;3.vi/vim模式下临时显示文件行号ESC+/+set nu 或 ESC+/+set number按ESC键退出编辑内容模式,输入“:set number”或者“:set nu”后按回车键,就可以显示行号了。行号显示只是暂时的。退出后再次打开vim就不显示行号了。.........
2022-06-28 15:59:34
230
原创 Linux上项目部署(开启关闭)与日志查看 配置文件从jar包中分离出来
部署命令:nohup java -jar (项目的jar包文件)****.jar (nohup是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。加了nohup后,即使关掉命令窗口,后台程序****.jar也会一直执行。)关闭部署命令:ps -aux|grep java (查看运行的所有Java进程,查看运行的项目进程ID 12345) ...
2022-04-11 10:10:09
1462
原创 Linux输入错误后如何返回与Linux间的文件传输
Linux输入错误后返回:Ctrl+cLinux如何互传文件:scp 需要传输文件的路径 目标Linux的用户名@目标Linux的IP:/接收文件的路径例:将Linux1下 /home目录下的demo.java,转存到Linux2下 /usr目录下(这里Linux2的用户名为root,文件的路径可在文件所在位置输入pwd获取)scp /home/demo.java [email protected].**.**:/usr...
2022-04-08 17:31:39
1677
原创 远程连接登录Linux太慢(三步解决)
1.登录Linux成功后输入 vi /etc/ssh/sshd_config2.进入sshd_config配置文件中,找到 #UseDNS yes这一行,点击i键进入编辑模式,将#(注释符)删除,并修改为UseDNS no3.完成这些操作之后,点击esc键,退出编辑模式。输入:wq(退出并保存)...
2022-03-16 15:08:02
1720
原创 (fastjson)对象转JSON字符串 接收json字符串返回对象
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60</version> </dependency>// 对象转换json字符串People people = new ...
2022-03-07 16:40:55
1798
转载 java内存映射 鹿鸣自用
import org.apache.commons.lang3.ArrayUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel;.
2022-03-04 09:56:28
223
原创 fuck_the_regulations/db 问题解决
我的idea是2020.3.4版本 在启动电脑之后会出现这个问题!解决三步操作一、关闭idea二、连接上电脑网络三、打开idea警告没有了!!!
2022-02-21 15:33:37
2182
2
原创 StringUtils.hasText(字符串)用法
如果里面的值为null或空串,那么返回值为false;里面存在数据则为true效果跟if (client_id!=null&&!"".equals(client_id)) { xxxx....}
2022-02-21 09:50:43
695
原创 HttpCilent的简单封装~~~鹿鸣随笔
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4</version> </dependency> <dependency>...
2022-02-17 17:35:51
219
原创 idea开发常用快捷键
自动补全(快速补全/开发小助手):ALT+enter (小白最爱的,老师不说的)增强for循环:iter enter导入包,自动修正:ALT+回车生成方法代码(常用于重写方法): Alt+Inserttry catch : Ctrl+Alt+T代码提示:ALT+/自动缩进: CTRL+ALT+I可以跳转到上次编辑的地:Ctrl+Shift+Backspace前后导航编辑过的地方: CTRL+ALT+ left/right删除行:Ctrl+X复制行:Ctrl+D..
2022-02-15 17:36:35
320
原创 idea中文输出乱码问题(尝试网上各种姿势仍不能解决的看这里)
本来我的项目是一个sprinboot+maven编码设置是在pom文件里,昨天我在这个项目里又单独封装了一个客户端(main启动)发生了中文报错。才发现这个客户端现在是不被spring所管理的。发现问题!解决问题,,,,我打开了度娘!!!!出现了几个解决问题的版本---------比如照顾一下小白们!!方法一、这样的方法二、这样的方法三、这样的(⊙﹏⊙)对!!上面的这些方法对我的问题都没一点效果,中文还是乱码!!!蓦然回首,我看到了~~~~~四、当当当..
2022-02-15 17:09:50
1211
2
原创 把Arraylist<byte[]>的多个byte[]合成一个byte[] :鹿鸣的脱发日记
循环遍历byte[]通过System.arraycopy实现因为我需要封装一段完整的数据流通过netty-websocket发送服务端进行语音识别操作。websocket中传送的对象是ByteBuf,因为没有现成的方法将ArrayList<byte[]>对象转换成ByteBuf,所以我尝试先将ArrayList<byte[]>转换成byte[],这样再通过Unpooled.wrappedBuffer(byte[])就可以转换成我想要的ByteBuf对象了。好了思路有了,代码怼
2022-02-14 14:56:11
2348
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人