
java
文章平均质量分 77
青鱼入云
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java有几种文件拷贝方式,哪一种效率最高?
效率最高的方式是使用NIO的或,尤其适合大文件拷贝。日常开发中,推荐使用(Java 7+),它兼顾了效率与代码简洁性,底层同样依赖的零拷贝机制。原创 2025-08-28 21:02:45 · 199 阅读 · 0 评论 -
volitale伪共享问题及解决方案
伪共享是CPU缓存机制导致的性能问题,根源在于CPU缓存行(Cache Line)CPU缓存以「缓存行」为最小存储单位(通常64字节),一个缓存行可以存储多个变量。当多个线程同时操作不同变量,但这些变量恰好位于同一缓存行时,会触发缓存一致性协议(如MESI),导致缓存行频繁失效和刷新,大幅降低性能。无关变量共享了同一个缓存行,引发了不必要的缓存竞争,这就是伪共享。伪共享是缓存行机制导致的性能问题,与变量是否为volatile无关,但volatile会加剧其影响。解决核心。原创 2025-08-27 23:40:10 · 411 阅读 · 0 评论 -
如何通过arthas打印某个方法的具体执行耗时
(TimeTunnel)命令可以记录方法的调用信息,包括入参、返回值和执行耗时,便于后续分析。命令可以追踪方法的调用路径,并打印每个子方法的执行时间,适合分析方法内部的耗时分布。命令用于监控方法的执行情况,包括调用次数、成功次数、失败次数、平均耗时、最大耗时等。通过这些命令,可以快速定位方法的执行耗时,分析性能瓶颈。命令来打印某个方法的具体执行耗时,其中。更适合查看方法的调用链路和各环节耗时,适合统计方法的执行耗时分布。在Arthas中,可以使用。执行后会记录每次调用,通过。表示对应方法的执行耗时。原创 2025-08-26 22:44:27 · 362 阅读 · 0 评论 -
介绍java中atomic及相关类
atomic包提供的原子类通过 CAS 操作实现了高效的线程安全,适合简单值的并发更新场景,性能优于传统锁机制。但需注意其局限性:仅适用于单一变量操作,复杂场景仍需结合锁或其他并发工具。实际开发中,应根据业务复杂度选择合适的并发方案。原创 2025-08-14 20:28:28 · 570 阅读 · 0 评论 -
hashmap和concurrentHashmap是否允许null值和null健
集合类是否允许 null 键是否允许 null 值核心原因HashMap允许(仅一个)允许(多个)单线程场景,无需处理并发歧义不允许不允许多线程场景,避免返回值歧义实际开发中,若需在并发场景中使用类似“空值”的标记,可使用一个特殊的占位符对象(如)替代null,避免。原创 2025-08-14 19:32:53 · 384 阅读 · 0 评论 -
CompletableFuture介绍及使用方式
默认使用// 使用自定义线程池执行任务// 任务逻辑return "结果";用runAsync()提交异步任务;用实现链式操作;用handle()处理异常;用allOf()anyOf()组合多任务。它避免了传统Future的阻塞问题,让异步代码更简洁、易维护,尤其适合高并发场景下的任务编排。原创 2025-08-13 23:06:43 · 639 阅读 · 0 评论 -
Synchronized锁的使用方式
使用专门的锁对象(如Object实例),避免与其他同步方法/代码块共享锁,减少锁竞争。// 自定义锁对象(推荐使用private final修饰,避免被修改)// 同步代码块,锁为自定义对象lock// 临界区代码实例方法:控制同一实例的方法级同步,简单直接。静态方法:控制类级别的同步,适用于静态资源的并发访问。代码块:粒度更细,可自定义锁对象,灵活性最高,推荐优先使用。合理选择使用方式,可在保证线程安全的同时,减少性能损耗。原创 2025-08-13 22:54:33 · 790 阅读 · 0 评论 -
数据库连接池如何进行空闲管理
Druid通过定期检查和空闲阈值控制管理空闲连接,删除时机取决于等配置。若使用被删除的连接报错,核心是通过强化空闲检查、对齐数据库超时配置、必要时开启,确保应用获取的连接始终有效。原创 2025-08-13 22:02:05 · 606 阅读 · 0 评论 -
单元测试实战
JUnit是一个为Java编程语言设计的开源单元测试框架,由 Kent Beck 和 Erich Gamma建立,它是单元测试框架家族中的一个,这些框架被统称为xUnit,JUnit是xUnit 家族中最为成功的一个。:如果已经编写了一套可自动执行的单元测试代码,那么每次修改代码或重构后,只需要再自动执行一遍单元测试,就知道修改是否正确了,能够大幅提高效率和项目稳定性。:通过编写和运行单元测试,开发者能够快速验证代码的各个部分是否按照预期工作,有利于保证系统功能的正确可用,这是单元测试的核心作用。原创 2023-12-26 13:51:30 · 1721 阅读 · 0 评论 -
BIO、NIO、selector、Netty代码Demo示例
阻塞I/O的连接accept()方法及数据读取的read()方法都是阻塞的,也就是说没有客户端发起连接时会阻塞,客户端发起连接后不发送数据也会阻塞。非阻塞I/O在客户端连接方法accept()和read()方法中都不会阻塞,我们可以通过返回值判断是否有客户端发起连接或者发送数据,进行相应的处理。通过一个多路复用器selector对channel进行管理,这样。简单的NIO因为是通过遍历的方式,会有大量的空循环。服务端处理handler。客户端处理handler。原创 2023-11-29 21:44:51 · 1074 阅读 · 0 评论 -
面试:MyBatis问题
MyBatis呢,是Java领域中的一款持久化框架,它的主要功能是,让我们能够轻松地在Java对象和数据库之间建立联系。通过这种联系,开发者可以很方便地存储、检索和操作数据。MyBatis与其他ORM框架相比,有一些独有的特点。首先,MyBatis强调对SQL的可控性。在使用的时候,可以直接编写SQL语句,提供更精准地优化查询。还可以充分利用数据库的特性,处理各种复杂的业务逻辑。在某些情况下,这能够带来更好的性能。原创 2023-11-23 15:56:43 · 490 阅读 · 0 评论 -
判断线程池任务执行完成的方式
Thread线程是否执行完成,我们可以调用join方法然后等待线程执行完成;那在使用线程池的时候,我们如何知道线程已经执行完成了?本文就带给大家五种判断的方式:● isTerminated() 方式,在执行 shutdown() ,关闭线程池后,判断是否所有任务已经完成。● ThreadPoolExecutor 的 getCompletedTaskCount() 方法,判断完成任务数和全部任务数是否相等。● CountDownLatch计数器,使用闭锁计数来判断是否全部完成。原创 2023-11-21 20:28:06 · 2038 阅读 · 0 评论 -
如何停止一个正在运行的线程
3. 使用Thread.stop方法(不推荐使用):Thread.stop方法可以强制停止一个线程,但不建议使用它,因为它可能导致线程的状态不一致和资源泄漏等问题,容易引发不可预测的错误。4. 使用ExecutorService: 如果线程是通过ExecutorService创建的,可以使用shutdown或shutdownNow方法来停止线程池中的线程。要停止一个正在运行的线程,通常有几种方法,但需要根据具体情况选择适当的方式,因为线程的停止涉及到线程安全和资源释放等问题。原创 2023-11-21 19:19:01 · 374 阅读 · 0 评论 -
有三个线程T1,T2,T3,如何保证顺序执行
确保三个线程 T1、T2、T3 按照指定顺序执行有多种方式。这些方法都可以用来确保线程按照指定顺序执行。选择其中一种方式取决于你的具体需求和场景。原创 2023-11-21 17:46:57 · 243 阅读 · 0 评论 -
ThreadLocaL如何防止内存泄漏
ThreadLocal 变量的内存泄漏问题主要是由于 ThreadLocalMap 中的 Entry 没有被及时清理导致的。ThreadLocalMap 是 ThreadLocal 的底层数据结构,它用于存储每个线程独立的变量副本。通过采取这些预防措施,可以有效避免 ThreadLocal 变量的内存泄漏问题,确保不再需要的对象能够被及时回收。原创 2023-11-21 17:41:46 · 397 阅读 · 0 评论 -
Lambda小课堂:巧用“Function”让代码优雅起来~
在开发过程中经常会使用if…else…进行判断抛出异常、分支处理等操作。这些if…else…充斥在代码中严重影响了代码代码的美观,这时我们可以利用Java 8的Function接口来消灭if…else…原创 2023-11-21 17:16:37 · 264 阅读 · 0 评论 -
BigDecimal的常见陷阱
BigDecimal 是 Java 中的一个类,用于精确表示和操作任意精度的十进制数。它提供了高精度的数值计算,并且可以避免浮点数计算中常见的精度丢失问题。它提供了大量的方法来支持基本的数学运算,如加法、减法、乘法、除法等。它还支持比较操作和取整操作,可以设置小数位数、舍入模式等。此外,BigDecimal 还提供了一些其他功能,如转换为科学计数法、格式化输出、判断是否是整数等。适用场景:需要处理精确计算或防止浮点数计算精度丢失的场景。原创 2023-11-21 17:09:04 · 258 阅读 · 0 评论 -
如何优雅的删除HashMap元素
需要注意增强的 for 循环底层使用的迭代器 Iterator,而 HashMap 是 fail-fast 原则的错误机制,所以遍历时删除元素会出现 java.util.ConcurrentModificationException 并发修改异常。通过Iterator迭代删除元素不会出现并发修改异常,但由于HashMap是线程不安全的,这时如果多个线程同时修改HashMap数据也会出现并发修改异常 ,日常使用可以先用ConcurrentHashMap封装。所以也存在第三种方法同样的问题。原创 2023-11-21 17:01:22 · 1181 阅读 · 0 评论 -
List操作的一些常见问题
从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。在写操作(add、remove等)时,不直接对原数据进行修改,而是先将原数据复制一份,然后在新复制的数据上执行写操作,最后将原数据引用指向新数据。这样做的好处是读操作(get、iterator等)可以不加锁,因为读取的数据始终是不变的。原创 2023-11-21 16:32:55 · 619 阅读 · 0 评论 -
如何优雅的避免空指针异常
空指针异常是导致java程序运行中断最常见的原因,相信每个程序猿都碰见过,也就是NullPointException,我们通常简称为NPE,本文告诉大家如何优雅避免NPE。原创 2023-11-21 16:07:37 · 492 阅读 · 0 评论 -
java泛型使用
java 泛型原创 2017-12-18 18:40:50 · 340 阅读 · 1 评论 -
面试:JVM问题
jvm面试相关问题原创 2023-08-03 19:09:39 · 899 阅读 · 0 评论 -
了解Netty,从IO开始
从0开始学习Netty,将io、socket、reactor等netty必备知识点一一讲清楚,方便理解netty的运行模式原创 2023-10-19 17:08:12 · 414 阅读 · 0 评论 -
jrebel+eclipse+tomcat实现热部署(带破解)
jrebel+eclipse+tomcat热部署搞了个jrebel准备热部署代码,方便以后开发web类型项目,网上找了一堆安装教程,各式各样的都有,尝试了几个,结果遇到了一堆问题,决定把正确流程贴出来。本流程是按照jrebel官网安装,但jrebel是收费的(虽然说有一个免费social版,但我没有搞出来),期间加入破解方法。第一步:下载jrebeltomcat和eclipse的安装就不说了,打原创 2016-05-10 17:29:36 · 7838 阅读 · 0 评论 -
bio,io,nio
io,nio原创 2018-05-14 22:52:15 · 323 阅读 · 0 评论 -
java juc图谱
juc图谱: 1.collections 2.executor 3.atomic 4.locks 5.tools原创 2018-05-14 22:40:41 · 2714 阅读 · 1 评论 -
回调模式
回调模式: 回调模式并不在23种设计模式中,但是做java的其实是接触比较多的,在java的接口注入中,使用的就是回调模式。 比如集合排序中,使用注入Comparator比较器的方式进行排序:Collections.sort(list,new Comparator () { @Override public int compare(Objec...原创 2018-05-14 22:20:47 · 361 阅读 · 0 评论 -
一个项目中的Web.xml解读
web.xml文件内容分析 web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"原创 2018-01-09 20:00:51 · 939 阅读 · 0 评论 -
Copy-On-Write写时复制机制与Java中CopyOnWriteArrayList容器源码实现
copy-on-write并发编程写时复制,解决list和set的并发读写问题 linux系统中内存的管理和分配。参考:写时复制机制 redis快照持久化(bg...原创 2018-06-03 15:16:05 · 1595 阅读 · 1 评论 -
创建线程的三种方式
1. 继承Thread类创建线程2. 实现Runnable接口3. 实现callable接口原创 2018-06-03 16:23:39 · 306 阅读 · 0 评论 -
ReentrantReadWriteLock源码解析
ReentrantReadWriteLock是ReadWriteLock的一个实现类,具有和ReentrantLock相似的语义。但注意:并不是Lock、或者ReentrantLock的子类或实现,但ReadLock和WriteLock实现了Lock接口。 ReadWriteLock源码如下:/** * A ReadWriteLock维护一对关联的locks ,一个用于只读操作,一个用于写...原创 2018-05-24 11:44:28 · 289 阅读 · 0 评论 -
hashmap技术概览与扩容在Java7与Java8中的不同实现
hashmap技术概览原创 2018-06-01 16:33:36 · 2786 阅读 · 3 评论 -
通过ps -ef | grep java查看到java进程相应jvm启动参数
/opt/taobao/java/bin/java-server-Xms4g-Xmx4g-XX:MetaspaceSize=512m-XX:MaxMetaspaceSize=512m-Xmn2g-XX:MaxDirectMemorySize=1g-XX:SurvivorRatio=10-XX:+UseConcMarkSweepGC-XX:CMSMaxAbortablePrecl...原创 2018-10-24 11:21:14 · 5848 阅读 · 0 评论 -
Semaphore源码解析
Semaphore:一个计数信号量。 在概念上,信号量维持一组许可证。 如果有必要,每个acquire()都会阻塞,直到许可证可用,然后获取它。 每个release() 释放一个许可证回去,潜在地释放一个阻塞获取方。 类似与限流算法中的令牌桶算法。 但是,Semaphore并没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。 信号量通常用于限制线程数,而不是访问...原创 2018-05-20 22:39:08 · 345 阅读 · 0 评论 -
CountDownLatch源码解析
CountDownLatch:允许一个或多个线程等待其他线程中执行完成的同步辅助工具。 CountDownLatch使用一个给定的计数初始化。await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数器无法重置。 如果您需要重置计数器的版本,可以考虑使用CyclicBar...原创 2018-05-20 21:39:22 · 258 阅读 · 0 评论 -
可重入锁ReentrantLock源码解析
ReentrantLock:一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和语义,但具有扩展功能。比如实现公平锁、超时处理、锁中断。 A ReentrantLock由最后一个成功锁定且尚未解锁的线程拥有 。当锁不是由另一个线程拥有时,调用lock的线程将成功获取锁。 如果当前线程已经拥有该锁,该方法将立即返回。 当前线程是否持有该锁可以使用...原创 2018-05-20 21:10:47 · 732 阅读 · 1 评论 -
面试:消息队列问题
消息队列相关面试问题原创 2018-03-28 17:07:41 · 230 阅读 · 1 评论 -
一致性hash算法及java实现
一致性hash算法是分布式中一个常用且好用的分片算法、或者数据库分库分表算法。现在的互联网服务架构中,为避免单点故障、提升处理效率、横向扩展等原因,分布式系统已经成为了居家旅行必备的部署模式,所以也产出了几种数据分片的方法: 1.取模,2.划段,3.一致性hash 前两种有很大的一个问题就是需要固定的节点数,即节点数不能变,不能某一个节点挂了或者实时增加一个节点,变了分片规则就需要改变,需要迁...原创 2018-03-28 14:11:38 · 18647 阅读 · 9 评论 -
记两次未解决的jvmCrash事件日志
同一个应用的两个实例,在某次发版后相隔7天相继crash,这次发版在正常启动后,其中一台机器,过几分钟突然连接池关闭,无法获取jdbc Connection,半小时后又自动恢复,另一台机器在四个小时后突然挂掉,此时无高负载任务。目前已知的一个可能原因是xss不够,这个结论是因为重启一直起不来,启动时报重复引用,并且会导致内存不断飙高,甚至飙满jvm分配的内存。后来调整xss384k到512k后,启...原创 2018-04-09 14:34:46 · 1503 阅读 · 0 评论 -
面试:JAVA集合问题
Java集合相关面试题原创 2018-03-30 16:19:38 · 144 阅读 · 1 评论