自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 问答 (2)
  • 收藏
  • 关注

原创 Java面试被问到快速排序的问题

【代码】Java面试被问到快速排序的问题。

2023-10-25 18:28:56 80

原创 groovy快速上手第2篇:数据类型篇

了解一门语言,那么了解她的语法特性必不可少,groovy针对java语言的书写要求做了很多简化。下面直接开始总结groovy的语法特点。

2022-10-22 09:26:40 1460 1

原创 groovy快速上手第1篇:简介、环境准备和Java异同点

Apache Groovy,看到Apatch就感觉看到了java,Apache围绕java打造了很多开源的web服务应用。所以看到Groovy属于Apache下的时首先想到了Java也不足为奇,事实上Groovy是基于Java平台的,Groovy程序也是运行在JVM之上的。甚至Groovy脚本编译后的字节码和Java的字节码是相通的,你可以通过反编译Groovy字节码来获取Java格式的源码。

2022-10-22 02:49:42 794

原创 Netty源码分析6:NioEventLoop

NioEventLoop基本介绍在构建Netty服务时,首先需要创建一个NioEventLoopGroup,即如下代码:···NioEventLoopGroup boss = new NioEventLoopGroup(1);NioEventLoopGroup worker = new NioEventLoopGroup();···初始化时机:NioEventLoopGroup内部定义了一个EventExecutor[] children成员变量(NioEventLoop是EventExec

2022-03-07 02:16:04 304

原创 Netty源码分析4:NioEventLoopGroup

NioEventLoopGroup其父类和实现的接口作用分析NioEventLoopGroup内部维护了一组NioEventLoop,它们之间的关系有点类似于线程池和线程之间的关系,其类图如下:其中Iterable和ScheduledExecutorService属于jdk提供,EventExecutorGroup接口作为Netty定义事件执行器组的顶级接口,主要定义了优雅关闭EventExecutorGroup的方法。其次定义了一个next()方法用于轮询内部的EventExecutor。

2022-03-05 04:08:34 570

原创 Netty源码分析3:创建一个简单的Netty服务并测试

Netty源码分析3:创建一个简单的Netty服务并测试创建并启动一个Netty服务端创建客户端并连接到客户端服务端boss的ChannelHandler服务端worker和客户端的ChannelHander启动测试启动客户端链接到客户端服务端处理客户端消息创建并启动一个Netty服务端如何创建并启动一个Netty服务端?通过如下的代码将启动一个netty服务端并监听在8888端口。public class MyNettyServer { private static Logger logge

2022-03-05 01:08:02 551

原创 基于synchronized实现读写锁

什么时候可以获取读锁读锁重入非写锁独占状态且阻塞队列为空非写锁独占意味着可能已有线程获取读锁阻塞队列为空意味着不存在获取不到写锁的线程被阻塞由于不满足上述两种条件获取读锁将被阻塞(已有新城获取到写锁或被阻塞),后续被唤醒后将再次尝试获取读锁,如果当前被阻塞的线程所在的节点不存在前继写锁节点线程,则认为可以获取锁什么情况下可以获取写锁写锁重入当前不存在读写锁且阻塞队列为空阻塞被唤醒后如果不存在任何读写锁且该阻塞节点位于头部时可以获取锁释放读锁当且仅当释放最后一把读锁时才会

2022-02-20 12:58:35 444

原创 jdk动态代理源码以及缓存结构分析

概述jdk动态代理是基于接口的代理,其在运行期间创建对应接口的代理类字节码class并将字节码class装载进虚拟机实现代理。简单jdk动态代理例子我们通过对代理对象创建代理类后,可以在代理对象的被代理方法执行前后增加额外的逻辑,可以修改被代理方法的参数和执行返回结果,甚至可以控制被代理方法是否执行。public class JdkProxyTest { public static void main(String[] args) { Itf proxy = (Itf) Pr

2022-01-03 15:42:29 394

原创 关于spring中的TypeDescriptor、ResolvableType功能说明

TypeDescriptor:类型描述符该类位于org.springframework.core.convert包下,convert包主要用于类型转换相关功能,在类型转换过程中,通常需要从一个类型转为另一个类型,而Java类型包含基本类型,数组、集合、泛型以及普通类型,该类试图将这些不同的类型使用一种统一的类型来表示,因此方法中提供了各种静态方法和不同的类型来获取一个TypeDescriptor实例,此外也提供了构造器方法来获取TypeDescriptor实例,具体如下:静态方法获取TypeDescr

2021-07-13 00:28:25 1401

原创 用户态内核态浅析

用户态内核态浅析用户态与内核态定义为什么要区分用户态和内核态如何实现用户态和内核态的切换分析Java synchronized中用出现的用户态内核态切换问题Java IO用户态与内核态定义用户态与内核态实际上是cpu运行在两种不同的权限级别上,inter架构将cpu指令按照权限级别由高到低分为4个等级,分别是ring0、ring1、ring2、ring3。而windows实现将所有指令划分为2个级别,即ring0和ring3。ring0级别的cpu指令仅由操作系统程序使用,ring3则是所有程序(包含用

2021-06-30 21:17:33 153

原创 Java集合框架

Java集合框架详解Collection分析List:有序结合或列表ArrayList:可扩容的数组集合ArrayList特性说明ArrayList源码分析ArrayList中的fast-fail遍历ArrayList的错误示范Vector:线程安全的可扩容数组集合Vector中的线程安全机制Vector中的fast-failStack:基于数组的栈Queue:队列Deque:双端队列LinkedList:链表列表PriorityQueue:优先级队列ArrayDeque:双端数组队列ArrayDeque源

2021-06-27 02:00:39 327

原创 CompletionStage及其实现CompletableFuture源码分析

概述CompletionStage直译是完成阶段,如果你发现你有这么一个需求:一个大的任务可以拆分成多个子任务,并且子任务之间有明显的先后顺序或者一个子任务依赖另一个子任务完成的结果时,那么CompletionStage是一个不错的选择,说到底这不就是聚合任务的特色吗?实际上CompletionStage就是实现了将一个大任务分成若个子任务,这些子任务基于一定的并行、串行组合形成任务的不同阶段,CompletionStage接口实现了对这些子任务之间的关系定义,接口方法较多如下:CompletionS

2021-06-26 21:59:00 2099

原创 ForkJoinPool的CountedCompleter源码分析

CountedCompleter直译是计数的完成器,其使用方式和原理相比RecursiveTask和RecursiveAction相对要复杂,因此案例不多,实际上源码中已经提供了较为详细的说明和使用案例,主要能实现在任务完成时触发一个特定的自定义操作。源码文档比较晦涩,直接分析源码。CountedCompleter新增了两个成员变量:/***当前任务挂起的子任务数,ForkJoinTask的一大特色就是分治任务的拆分,一个大的任务拆分成多个子任务,*子任务在进行细拆,因此任务和任务之间就形成了层级父子

2021-06-25 00:41:45 306

原创 关于ForkJoinPool使用ManagedBlocker防线程阻塞而降低吞吐量的说明

ForkJoinPool适合执行计算密集型且可进行拆分任务并汇总结果(类似MapReduce)的任务,执行这种任务可以充分利用多核处理器优势提高任务处理速度,实际上ForkJoinPool内部的工作窃取队列的高性能(远高于普通线程池的BlockingQueue)也决定其适用于执行大量的简短的小任务。对于IO阻塞型任务,当然可以设置较大的parallelism参数保证并发数防止任务IO阻塞耗时的时候没有空闲工作线程来执行新提交的IO阻塞任务导致CPU空闲,从而线程池的吞吐率不高,参见下方例子,例子中创建30

2021-06-24 19:45:12 4591

原创 Java平衡二叉树、AVL树的实现,节点增删自平衡

Java平衡二叉树、AVL树详解关于树的基本概念关于二叉树的特点AVL树、平衡二叉树添加节点使得树失衡左失衡、右失衡左右失衡、右左失衡失衡节点重平衡代码实现添加节点删除节点关于树的基本概念- 树定义:树是n(n>=0)个有限节点的集合,当n=0时称为空树,当n>0时,这些节点满足:每个节点可以有m(m>=0)个子节点;除根节点外每个节点有且只有一个父节点,根节点没有父节点;任意节点的子节点也是一棵树- 节点:如上图所示的A、B、C···为为一个个节点,节点是树的最小单位,是存储数据

2021-06-03 02:01:00 201

原创 jdk1.8新增特性Optional类介绍

Optional的使用场景和其用法介绍Optional的使用场景介绍Optional的方法介绍OptionalDouble、OptionalInt,OptionalLong介绍jdk1.8新增了一个Optional类,同时还增加了OptionalDouble、OptionalInt,OptionalLong用于对基本类型double、int、long的支持。Optional的使用场景介绍有时候我们需要从一个对象中获取其成员变量,甚至需要获取其成员变量的变量,通常为了避免产生空指针异常需要进行非空校验,

2021-05-28 23:33:55 416

原创 AQS实现之Semaphore、CountDownLatch、CyclicBarrier分析

对基于AQS的一些线程并发工具的分析SemaphoreCountDownLatchCyclicBarrierCyclicBarrier等待入口方法:awaitSemaphoreSemaphore维持一组信号量,信号量的大小代表线程并发上限,超过上限后线程将被阻塞直到其它线程释放信号,该类可用于控制并发大小,详见下面例子,例子中定义了一个持有3个信号两的Semaphore,同时启动12个线程去竞争这个三个信号两,竞争成功后打印提示信息package com.test.sync;import lomb

2021-05-24 22:31:03 156

原创 Java并发之AQS源码分析ReentranLock、ReentrantReadWriteLock、Condition

基于AQS的重入锁和读写锁的源码分析基本概念说明锁的基本原理思考测试环境实现方案1实现方案2基本概念说明AQS:全称AbstractQueuedSynchronizer,是jdk提供的一个并发框架,位于java.util.concurrent包下,该框架已实现独享锁、共享锁的大部分逻辑,开发者只需要少量变成编码即可实现相应的读写锁和共享锁,同时可基于该框架实现公平锁和非公平锁。jdk已经提供了读写锁和共享锁的具体实现,分别是同样位于Java.util.concurrent包下的ReentrantLoc

2021-05-22 03:03:47 257 1

原创 mysql的timestamp类型映射到java类型的TimeStamp类型时报错

Cannot convert value ‘2017-04-28 00:00:00.000000’ from column 3 to TIMESTAMP.最近在写jdbc连接mysql查询数据时,偶尔遇到这个问题,具体错误如下:Exception in thread "main" java.sql.SQLException: Cannot convert value '2017-04-28 00:

2017-11-20 01:10:01 1007

原创 虚拟机不能ping主机的问题

在vartualbox下安装了linux,使用桥接网卡,但在测试二者之间的通信时却出现了奇怪现象,主机可以ping虚拟机,反过来虚拟机就不能ping主机,但是虚拟机可以ping百度,晚上搜了一堆问题都对不上,后面找到一篇博客,原来是主机防火墙的原因,打开ICMPv4-in这个规则即可。具体操作是打开windows防火墙-高级设置-入栈规则,找到ICMPv4(专用公共),右键启用规则即可。参考博客

2017-03-27 23:09:20 367

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除