Java
文章平均质量分 84
~小龙~
勇往直前,不停奋斗!!!
展开
-
Java SPI详解(转)
原文链接:https://www.cnblogs.com/jy107600/p/11464985.html1.什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI的作用就是为这些被扩展的API寻找服务实现。2.SPI和API的使用场景 API (Application Programming Interface)在大多数情况下,都是实现方制定接口并完成对接口的...转载 2021-07-28 01:15:54 · 967 阅读 · 0 评论 -
JMX超详细解读(转)
转自:https://www.cnblogs.com/dongguacai/p/5900507.html一、JMX的定义 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。这是官方文档上的定义,我看过很多次也无法很好的理解。我个人的理解是JMX让程序有被管理的功能,例如你开发一个WEB网站,它是在24小时不间断运行,那么你肯定会对网站进行监控,如每天转载 2021-07-26 23:40:21 · 1427 阅读 · 0 评论 -
【转】Mockito教程
原文地址:https://www.cnblogs.com/Ming8006/p/6297333.html目录1Mockito 介绍 1.1Mockito是什么? 1.2为什么需要Mock 1.3Stub和Mock异同 1.4Mockito资源 1.5使用场景2使用Mockito 2.1验证行为 2.2模拟我们所期望的结果 2.3RETURNS_SMART_NULLS和RETURNS_DEEP_STUBS 2.4模拟方法体抛出异常 2.5...转载 2021-03-12 11:17:06 · 924 阅读 · 0 评论 -
Java线程回顾
JavaSE中,线程是比较难理解,因为在学习中很难遇到多线程,高并发的情况,而且我们也是很难模拟出来的,但是我们又要去抽象化,想象多线程访问,来进行学习理解。好了,其实什么都是会者不难,难者不会,只要我们坚持学习就好。 线程:是进程中的一个执行控制单元,执行路径;一个进程中至少有一个线程在负责控制程序的执行;一个进程中如果只有一个执行路径,这个程序称为单线程;一个进程中有多个执行路径时,这原创 2015-11-11 21:48:07 · 2887 阅读 · 4 评论 -
Reactor模式详解(转)
在学习netty源码以前,需要熟悉JDK 中的NIO,多线程;了解一些设计模式:例如工厂方法、抽象工厂、建造者、外观、代理等;还有NIO的Reactor和AIO的Proactor模式。下边我转了两篇关于Reactor和Proactor相关内容的文章,感觉还不错,帮助理解: 转自:http://www.cnblogs.com/winner-0715/p/8733787.html...转载 2018-11-03 10:38:35 · 2107 阅读 · 1 评论 -
Netty(六)——Server创建流程之解
前边的篇章已经把Netty的使用:包括Server创建、Client创建、粘包/拆包问题处理、编码解码支持、http协议开发、WebSocket协议编写等。接下来,我们来看看源码学习一下流程,原理。(个人认为,源码学习是一个了解牛人设计思想、学习高人编码方式、扩宽自己解决问题之道的很好途径) 服务端创建,前边写了那么多的例子,慢慢大家就会发现,其实是有套路的(也就是...原创 2018-11-03 22:47:36 · 1344 阅读 · 0 评论 -
Netty(八)——ByteBuf功能之说
前边说了Netty的一些基本使用,还有Server和Client的创建流程的分析,接下来的几篇博客,来看看Netty NIO相关的主要接口和模块的API功能,这篇和下篇先来看看里边核心的ByteBuf,由于东西比较多,这篇先来看看ByteBuf的功能,下篇说ByteBuf的源码实现。 好,当我们数据传输的时候,往往都需要缓冲区,ByteBuf就是Netty提供使用的,...原创 2018-11-10 14:42:32 · 1865 阅读 · 0 评论 -
Netty(九)——ByteBuf源码之析
ByteBuf在Netty占据着中重要的位置,上篇《Netty——ByteBuf功能之说》讲了ByteBuf的工作原理和重要功能介绍。这篇从源码的角度来看ByteBuf。首先,来看一下主要的类继承结构图: 我们从两个角度看下上图: 从内容分配角度上分为:1,堆内存(HeapByteBuf)字节缓冲区,特点是内存的分配和回收速度快,可被JVM自动回收...原创 2018-11-11 23:51:16 · 1250 阅读 · 0 评论 -
JAVA高并发(一)——了解并行世界
最近不知道怎么了,感觉什么东西都需要画画图,梳理梳理思路、写写,而且每每晚上坐到自己的位置上,打开本书,打开篇文章,打开思维导图,打开onenote,再打开音乐,然后就开始静静理解着,梳理着,画图着,编写着……感觉心情也能平静下来。netty源码还需要多花点时间理解理解,周末再进行;今天开始把Java高并发多线程的知识也回顾整理一吧。 以前学习高并发多线程的过程,现...原创 2018-11-14 00:52:01 · 1877 阅读 · 0 评论 -
Netty(七)——客户端创建之意
上一篇,看了Netty创建Server的步骤,和一些源码跟踪,这篇来看看Client创建的流程以及一些源码分析,还是我们到前边博客中,随便找一个完整的Client创建的示例代码来看。 Netty创建Client的流程其实和Server的挺类似的,下边,还是来看一张时序图: 下边,来梳理一下上边的创建流程:1,用户创建Bootstrap实例,通过API设...原创 2018-11-08 23:59:40 · 772 阅读 · 0 评论 -
Netty(十)——Channel功能之剖
Channel是netty网络操作抽象类,它聚合网络的读、写、客户端发起连接、主动关闭连接、链路关闭,获通信双方的网络地址等,也包括获取该Chanel的EventLoop获取缓冲分配器的ByteBufAllocator和pipeline等。也是非常非常重要的。 一,看下它的设计理念:1,Netty在Channel接口层,采用Facade模式进行统一封装,将网络I/O操...原创 2018-11-16 00:41:22 · 772 阅读 · 0 评论 -
Java高并发(二)——多线程基础
在上一篇 JAVA高并发——了解并行世界 中我们回顾了一些多线程的概念知识。这里先举个例子,来看现实生活中的多线程例子:一个家庭中有爸爸、妈妈、儿子,家中有电视、洗衣机、书桌等,如果妈妈领着儿子出去了,爸爸就可以想干什么干什么(单线程);如果三人都在家,妈妈可以洗衣服、爸爸在书桌上工作、儿子看动画片(三个线程使用不同的资源互不影响);如果儿子看动画片,爸爸想看NBA视频,就得等着儿子...原创 2018-11-18 23:50:47 · 1141 阅读 · 1 评论 -
Netty(五)——WebSocket之事
在说WebSocket以前,我们再来看看HTTP协议,HTTP1.0,HTTP1.1,HTTP2.0每个版本的更新带来更高效的更丰富的功能:短连接、长连接、缓存处理的丰富、断点续传、错误通知的丰富、多路复用、请求优先级、header压缩……更多的我们来看这篇文章:HTTP1.0、HTTP1.1和HTTP2.0的区别 (https://www.cnblogs.com/zhangyfr...原创 2018-10-30 23:21:11 · 562 阅读 · 0 评论 -
Netty(三)——编解码之路
我们在开发中经常会把Java类进行implements Serializable用来网络传输的序列化和反序列化,过程其实就是将Java对象转编码为字节数组或者ByteBuffer对象进行传输,当远程服务读取到ByteBuffer对象或者字节数组时,需要将其解码为Java对象。这也就是编解码技术。 Java的序列化只是编解码技术中的一种,但是由于其1,不支持跨语言;2,...原创 2018-10-27 02:30:12 · 1190 阅读 · 1 评论 -
Netty(二)——粘包、拆包解决之道
上一篇博客我们说了Java基础中BIO、NIO、AIO,其中用NIO和AIO开发中需要处理的东西比较多,Netty是IO这方面优秀的框架,我们来看个Netty的入门,以及其解决IO传输中的比较恶心的粘包和拆包问题。 首先我们到http://netty.io/ 去下载netty的jar包,我是通过Maven下载了5.0.0.Alpha2版本,然后我们看下入门实例。注意其...原创 2018-10-23 23:45:16 · 871 阅读 · 0 评论 -
JAVA实现DES加密
DES全称为DataEncryption Standard,即数据加密标准,是一种对称加密算法!DES加密介绍 DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以转载 2016-05-18 17:09:27 · 9225 阅读 · 1 评论 -
JAVA实现AES加密
JAVA实现AES加密1. 因子 上次介绍了《JAVA实现AES加密》,中间提到近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一;AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据。本文就简单介绍如何通过JAVA实现AES加密。2. JAVA实现闲话少许,掠过AES加密转载 2016-05-19 00:13:23 · 5728 阅读 · 1 评论 -
JAVA实现RSA加密
[html] view plain copypackage utils; [html] view plain copyimport java.io.ByteArrayOutputStream; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import ja转载 2016-05-19 00:16:18 · 9350 阅读 · 3 评论 -
Java注解(Annotation)——1 知识
回顾一下JAVA注解(Annotation)的开发,转载两篇吧,都比较基础,简单易懂!深入理解Java:注解(Annotation)自定义注解入门 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类转载 2016-05-23 20:25:16 · 6966 阅读 · 2 评论 -
Java注解(Annotation)——2 注解处理器
深入理解Java:注解(Annotation)--注解处理器 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来转载 2016-05-23 20:29:04 · 5961 阅读 · 2 评论 -
Java注解(Annotation)——3 实例
本例子旨在使用自定义注解为实体打上标记,为自动生成 sql 提供依据,模拟 hibernate 的注解,至于注解的原理自己搜吧1.定义 Table 注解[java] view plain copypackage test; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; im转载 2016-05-23 20:31:21 · 6883 阅读 · 5 评论 -
定期产品如何用活期的方式展示——逼近算法
这篇文章是我分享PPT内容的总结,主要讲述如何使用逼近算法解决工作中的一些棘手问题,通过解决具体场景的问题进行分析。 前序:算法是什么 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。简单而言算法就是解决问题的步骤,其特征:1,有穷性(Finiteness):算...原创 2018-10-18 16:32:57 · 734 阅读 · 1 评论 -
Netty(四)——HTTP服务端之例
HTTP(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。我们用的tomcat、jetty、jobss等各种服务器,其实就是一个服务端容器,方便我们直接部署我们应用,让用户通过使用客户端(WEB浏览器、手机H5、app等)借住HTTP协议,来完成信息的提交和获取。这篇文章简单总结一...原创 2018-10-28 23:34:37 · 1489 阅读 · 0 评论 -
Netty(一)——BIO、NIO、AIO
在工作中,无论什么项目我们都会用到网络传输,tomcat等server服务器、Dubbo等Rpc协议框架、Redis等NOsql数据库、各种MQ的中间件等等。这篇文章是学习《Netty权威指南》后的总结,从Java基础的BIO、NIO、AIO进行学习。 在说JavaIO以前,先看看unix提供的5种IO模型: 1,阻塞IO模型: ...原创 2018-10-21 22:57:53 · 917 阅读 · 0 评论 -
Java高并发(三)——多线程协作,同步控制
继上一篇:Java高并发——多线程基础 中讲到,共享资源的合理使用,才能够使多线程程序有条不紊的运行。其中我们通过synchronized来实现临界区资源的是否可以访问。而,这篇我们来重点总结synchronized的增强替代版锁,以及其它JDK并发包提供的一些同步控制的功能。 好,还是先看下知识的总结思维导图,然后分开进行总结: 一,Reentran...原创 2018-11-21 01:14:26 · 1876 阅读 · 0 评论 -
Netty(十一)——Unsafe容貌之揭
上一篇 末尾简单提到了JDK的Unsafe类,其实是调用了一些底层的Native的一些方法实现,不希望用户调用的。而Netty中的Unsafe类实际上也是Channel的辅助类,不应该被用户直接调用的。实际的IO的读写操作都是有Unsafe完成的。好,我们简单总结一下。 一,AIP接口功能列表:Unsafe-API功能 序号 接口 注释 1, ...原创 2018-11-18 01:16:36 · 1090 阅读 · 0 评论 -
JVM(三)——Class类文件结构浅析
前边 Java内存区域管理 中我们学习总结了JVM这个容器的内存空间区域划分,垃圾回收(GC Garbage Collection)中学习总结了JVM对容器中的对象是如何进行回收处理的。好,那么接下来,我们来看看,是什么样的对象在JVM中运行实现我们想要的业务效果呢? 我们IT技术人员,都会写代码,什么数据类型,什么数据结构,什么算法,什么面向对象……就Java技术而...原创 2019-01-04 23:37:34 · 485 阅读 · 0 评论 -
JVM(五)——JVM如何执行代码之执行引擎
前边,我们学习总结了JVM的内存区域分布、内存回收机制、及装载文件.class的文件组成结构,还有.class文件的装载过程。好,接下来,我们来看看装载好.class文件,jvm如何进行执行其代码。 我们都知道,我们写的代码,为了实现业务主要是执行其中的方法。都说项目=逻辑+数据,逻辑,即我们写的业务代码,数据及数据库、各种缓存、client本地存储等存储的数据。好,那...原创 2019-01-20 13:01:36 · 2173 阅读 · 0 评论 -
JVM(四)——类加载机制
在上篇 Class类文件结构浅析 中,我们总结了将.java文件编译为的.class文件的组成结构,不仅知道我们如何写代码,也清楚了JVM执行的文件构成。那么,JVM是如何将加载这些Class文件呢?好,这篇我们来学习总结一下JVM的类加载机制。 一,JVM的类加载机制(概念):JVM把描述类的文件从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形...原创 2019-01-10 00:05:06 · 521 阅读 · 0 评论 -
JVM(六)——高效并发
前边其实我们已经梳理总结了多线程相关知识:Java高并发——多线程 ,这篇,我们再从JVM的角度,来看看高效并发。 JAVA内存模型: 1,在前边我们学习Java内存区域管理中,像程序计数器、栈为线程独享的,堆和方法区为线程共享的。在JVM中对于对线程,也分为工作内存和主内存,其实也可以简单理解为上边两种。看下模型图: 2,看下上边...原创 2019-01-27 15:23:03 · 622 阅读 · 1 评论 -
动态规划——解决最优问题
说到动态规划,这里先简单看下另一个算法“贪心算法-greedy algorithm”,是一种在每一步选择中都采用在当前状态下最优或最好的选择,从而导致结果是最好或最优的算法。也就是,在当前情况下,我们只管按照“心最贪”的思路进行选择即可。 一般我们会分析:1-将求解问题分成若干个子问题;2-对每一个子问题进行求解,得到子问题的局部最优解;3-把子问题的解,局部最优解合...原创 2019-03-02 00:58:26 · 6310 阅读 · 1 评论 -
数据结构回顾
很多人都说程序=数据+逻辑,数据存放到了缓存、数据库、硬盘等,而逻辑却让这些数据根据人的操作、时间的变化等变起来。那么,在逻辑处理过程中,怎么更快、更省空间、更方便的进行数据变化,那么就是合理的选择数据结构,往往可以达到事半功倍的效果。 这段时间,经常和我媳妇聊一些衣柜啊、储物柜啊、收纳箱啊等各种储物容器,她给我说,这放这个合适,那放那个合适,这个放这个东西方便拿取,...原创 2019-03-07 01:12:49 · 1038 阅读 · 0 评论 -
RocketMQ(一)——运维管理operation(转)
最近看了看RocketMQ的官方文档,感觉不错,一直在用,每看一次,深刻一次。接下几篇主要是整理转载一下!官方地址:http://rocketmq.apache.org/docs/motivation/github地址:https://github.com/apache/rocketmq运维管理(operation)1 集群搭建1.1 单Master模式这种方式风险较大,一旦Br...转载 2019-03-14 22:58:48 · 2506 阅读 · 0 评论 -
RocketMQ(三)——概念和特性(转)
最近看了看RocketMQ的官方文档,感觉不错,一直在用,每看一次,深刻一次。接下几篇主要是整理转载一下!官方地址:http://rocketmq.apache.org/docs/motivation/github地址:https://github.com/apache/rocketmq一,基本概念消息模型(Message Model)主要由 Producer、Broker、Consu...转载 2019-03-17 22:09:47 · 1258 阅读 · 0 评论 -
RocketMQ(四)——常用Example(转)
最近看了看RocketMQ的官方文档,感觉不错,一直在用,每看一次,深刻一次。接下几篇主要是整理转载一下!官方地址:http://rocketmq.apache.org/docs/motivation/github地址:https://github.com/apache/rocketmq当然需要我们根据实际情况,做我们想要的抽象封装!1 基本样例在基本样例中我们提供如下的功能场景:...转载 2019-03-18 22:52:15 · 1492 阅读 · 0 评论 -
Netty(十五)——Future、Promise之略
在总结Netty的过程中,我也在边总结多线程,因为Netty当中好多用到了多线程,比如Netty中的ChannelFuture、ChannelPromise的其实就是来源于上篇博客中的 Java高并发(七)——Future模式 ,将线程之间的交互通过异步通知的形式进行实现,提高效率,提升性能。当然在总结多线程中,其实有些东西想说的更明白,又会涉及到JVM的的东西,数据结构的知识,在...原创 2018-12-11 23:15:30 · 2109 阅读 · 0 评论 -
JVM(二)——垃圾回收(GC Garbage Collection)
在上一篇中 JVM(一)——Java内存区域管理 中我们介绍了JVM这个容器内存区域管理。其中 程序计数器、虚拟机栈、本地方法栈 为线程私有的,也就是这几个区域的内存占用,随线程而生、随线程而亡。而 Java堆 和 方法区 则不一样,一个接口中的多个实现类需要的内存不一样,一个方法中的多个分支需要的内存也不一样,只有程序在真正运行执行的期间才能知道创建哪些对象,动态创建、动态回收,也...原创 2018-12-23 01:51:29 · 778 阅读 · 2 评论 -
Java高并发(四)——ThreadPool,线程复用
前边我们讲述了:Java高并发——了解并行世界、Java高并发——多线程基础、Java高并发——多线程协作,同步控制 。从1,线程是什么?为什么需要多线程?2,Java对多线程的基础操作:线程的状态扭转,线程的创建、终止、中断、等待和通知、挂起和执行、等待结束和谦让,volatile关键字,线程组进行分类管理,守护线程,线程优先级,线程共享资源安全和synchronized进行控制...原创 2018-11-25 01:49:58 · 18512 阅读 · 2 评论 -
Netty(十二)——ChannelPipeline之观
前边文章的代码中,我们经常往pipeline中添加ChannelHandler来进行前后顺序控制处理实际业务。是不是类似Servlet和Filter过滤器,利用职责链模式的思想,通过一个一个的Handler进行业务传递处理。下边这个图感觉挺合适: 好,这篇文章主要对ChannelPipeline进行总结学习,首先看下总结思维导图: 一,功能说明...原创 2018-11-27 23:34:22 · 2902 阅读 · 0 评论 -
Java高并发(五)——Lock优化,提高性能
前边我们讲了,多线程的世界,多线程的基础操作,多线程协作,多线程管理——线程池。其中多线程为什么麻烦,就因为线程并行操作,对共享资源的争夺,会出现线程安全问题。而我们解决线程安全问题的方案是同步(锁资源,串行使用),串行就会出现性能问题。举个例子:大家在大道上并行前进的几列人(多线程并发),突然遇到河流,只有一个独木桥,大家只能一个个过(锁共享资源,串行使用)。显而易见,时间更多的消...原创 2018-12-06 01:31:42 · 3163 阅读 · 1 评论