随笔分类 -  Java

摘要:CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对副本进行修改,最后将修改后的副本对象写回,从而保证操作的线程安全,下面我们看一下具体的代码实现。 构造函数 阅读全文
posted @ 2022-12-05 16:19 DaFanJoy 阅读(262) 评论(0) 推荐(0) 编辑
摘要:19年写的一个基础的TCP服务框架,内置了一个简单IOC容器,当时的目标是一方面能作为组件供第三方集成实现TCP通讯相关功能,另一方面作为提供一种服务框架范式。所以框架核心点主要还是通过适度的封装,隐藏底层的通讯细节,最终调用者接受到的是经过合包分包处理的字节数组,不涉及具体的协议解析,大家如果使用 阅读全文
posted @ 2022-10-08 10:03 DaFanJoy 阅读(1039) 评论(0) 推荐(0) 编辑
摘要:数据分片技术作为目前架构设计中处理大数据的一种常规手段,当前被广泛用于缓存、数据库、消息队列等中间件的开发与使用当中,例如在数据量较大的项目当中,系统的性能瓶颈主要来自于与数据库的交互,而通过合理的设计数据库分片规则,可将系统中的数据分布在不同的物理数据库中,平衡了单点的数据量与访问压力,达到提升应 阅读全文
posted @ 2021-08-04 10:22 DaFanJoy 阅读(1194) 评论(0) 推荐(2) 编辑
摘要:在实际项目开发中我们会经常使用到设计模式,设计模式是否能够正确、合理、灵活的运用到项目当中,是评判你开发能力的重要指标之一, 这一方面需要你打下牢固的编程基础,同时也需要积累大量的项目经验。这个过程并不是一蹴而就的,可能需要大量时间与项目的磨炼。本篇文章旨在汇总设计模式中的一些概念性知识,起到一个总 阅读全文
posted @ 2021-07-04 09:28 DaFanJoy 阅读(979) 评论(0) 推荐(1) 编辑
摘要:在日常的项目开发中,我们会经常遇到通过多线程执行程序并需要返回执行结果的场景,下面我们就对获取多线程返回结果的几种方式进行一下归纳,并进行简要的分析与总结。 一、Thread.join 在一些简单的应用场景中我们可以使用线程本身提供的join方法,我们知道join方法的目的是让一个线程等待另一个线程 阅读全文
posted @ 2021-04-28 09:01 DaFanJoy 阅读(11537) 评论(1) 推荐(0) 编辑
摘要:我们在平常使用Shrio进行身份认证时,经常通过获取Subject 对象中保存的Session、Principal等信息,来获取认证用户的信息,也就是说Shiro会把认证后的用户信息保存在Subject 中供程序使用 public static Subject getSubject() { retu 阅读全文
posted @ 2021-01-31 09:44 DaFanJoy 阅读(1613) 评论(0) 推荐(0) 编辑
摘要:控制反转,即Inversion of Control(IoC),是面向对象中的一种设计原则,可以用有效降低架构代码的耦合度,从对象调用者角度又叫做依赖注入,即Dependency Injection(DI),通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的容器,将其所依赖的对象的引用传递 阅读全文
posted @ 2020-10-31 19:03 DaFanJoy 阅读(2839) 评论(0) 推荐(2) 编辑
摘要:在日常的项目开发中,我们经常会遇到需要生成唯一ID的业务场景,不同的业务对唯一ID的生成方式与要求都会不尽相同,一是生成方式多种多样,如UUID、雪花算法、数据库递增等;其次业务要求上也各有不同,有的只要保证唯一性即可,有的需要加上时间戳,有的要保证按顺序递增等。以下是我结合实际业务中的使用总结了几 阅读全文
posted @ 2020-09-28 09:25 DaFanJoy 阅读(8544) 评论(5) 推荐(3) 编辑
摘要:在之前的文章中我们详细介绍过Netty中的NioEventLoop,NioEventLoop从本质上讲是一个事件循环执行器,每个NioEventLoop都会绑定一个对应的线程通过一个for(;;)循环来处理事件消息。今天我们就借鉴NioEventLoop,并加入消息分发策略构建一个基础的Eventl 阅读全文
posted @ 2020-07-27 09:02 DaFanJoy 阅读(651) 评论(0) 推荐(1) 编辑
摘要:在项目当中数据库一般都会成为主要的性能与负载瓶颈,那么针对数据库各项性能指标的监控与对应的优化是开发与运维人员需要面对的主要工作,而且这部分的工作会贯穿项目从开发到运行的整个周期里。 这篇文章中我们对MySql数据库中的几个主要的性能指标的计算与统计进行下说明与总结。 在MySql中通过show g 阅读全文
posted @ 2020-01-24 18:19 DaFanJoy 阅读(6626) 评论(0) 推荐(0) 编辑
摘要:当我们使用kafka向指定Topic发送消息时,如果该Topic具有多个partition,无论消费者有多少,最终都会保证一个partition内的消息只会被一个Consumer group中的一个Consumer消费,也就是说同一Consumer group中的多个Consumer自动会起到负载均 阅读全文
posted @ 2019-09-06 12:25 DaFanJoy 阅读(3168) 评论(0) 推荐(1) 编辑
摘要:一、版本 CentOS 7.5 zookeeper-3.4.12 kafka _2.12-1.1.0 二、zookeeper安装 1、下载解压zookeeper压缩包 tar -zvxf zookeeper-3.4.12.tar.gz 2、创建数据与日志文件夹 mkdir /usr/local/zo 阅读全文
posted @ 2019-08-24 16:50 DaFanJoy 阅读(533) 评论(0) 推荐(0) 编辑
摘要:《Scalable IO in Java》 是java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章,在文章中Doug Lea通过各个角度,循序渐进的梳理了服务开发中的相关问题,以及在解决问题的过程中服务模型的演变与进化,文章中基于R 阅读全文
posted @ 2019-07-28 15:11 DaFanJoy 阅读(8739) 评论(3) 推荐(5) 编辑
摘要:Semaphore信号量通常做为控制线程并发个数的工具来使用,它可以用来限制同时并发访问资源的线程个数。 一、Semaphore使用 下面我们通过一个简单的例子来看下Semaphore的具体使用,我们同时执行10个计数线程,并定义一个Semaphore变量用来控制并发值,同一时间只允许两个线程并发执 阅读全文
posted @ 2019-07-06 18:06 DaFanJoy 阅读(952) 评论(0) 推荐(0) 编辑
摘要:一、CyclicBarrier使用 CyclicBarrier从字面上可以直接理解为线程运行的屏障,它可以让一组线程执行到一个共同的屏障点时被阻塞,直到最后一个线程执行到指定位置,你设置的执行线程就会触发运行;同时CyclicBarrier相比与CountDownLatch,它是可以被重置的;下面我 阅读全文
posted @ 2019-06-30 18:27 DaFanJoy 阅读(362) 评论(0) 推荐(0) 编辑
摘要:在过去我们实现多线程同步的代码中,往往使用join()、wait()、notiyAll()等线程间通信的方式,随着JUC包的不断的完善,java为我们提供了丰富同步工具类,官方也鼓励我们使用工具类来实现多线程的同步,今天我们就对其中CountDownLatch类的使用与底层实现进行分析与总结。 一、 阅读全文
posted @ 2019-06-28 20:56 DaFanJoy 阅读(671) 评论(0) 推荐(0) 编辑
摘要:前面我们在java线程池ThreadPoolExecutor类使用详解中对ThreadPoolExector线程池类的使用进行了详细阐述,这篇文章我们对其具体的源码进行一下分析和总结; 首先我们看下ThreadPoolExecutor用来表示线程池状态的核心变量 ThreadPoolExecutor 阅读全文
posted @ 2019-05-29 21:34 DaFanJoy 阅读(557) 评论(0) 推荐(0) 编辑
摘要:在SpringBoot框架中,注解做为一种隐式配置,极大的简化了之前xml文件的配置方式。SpringBoot中包含许多种类的注解,这里对在SpingBoot项目中经常使用到的一些注解的进行大致的归纳总结; 一、启动相关 1、@SpringBootApplication 在SpirngBoot启动类 阅读全文
posted @ 2019-05-16 18:52 DaFanJoy 阅读(597) 评论(0) 推荐(0) 编辑
摘要:一、基本介绍 ArrayBlcokingQueue,LinkedBlockingQueue是jdk中内置的阻塞队列,网上对它们的分析已经很多,主要有以下几点: 1、底层实现机制不同,ArrayBlcokingQueue是基于数组的,LinkedBlockingQueue是基于链表的; 2、初始化方式 阅读全文
posted @ 2019-02-03 19:00 DaFanJoy 阅读(2980) 评论(1) 推荐(0) 编辑
摘要:最近开发网关服务的过程当中,需要用到kafka转发消息与保存日志,在进行压测的过程中由于是多线程并发操作kafka producer 进行异步send,发现send耗时有时会达到几十毫秒的阻塞,很大程度上上影响了并发的性能,而在后续的测试中发现单线程发送反而比多线程发送效率高出几倍。所以就对kafk 阅读全文
posted @ 2019-01-20 00:16 DaFanJoy 阅读(15558) 评论(3) 推荐(5) 编辑