![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 85
汲建帅
这个作者很懒,什么都没留下…
展开
-
java 成神之路
感觉自己技术不错的小伙伴们,看看有没有自己欠缺知识点,赶快补起来吧。java成神之路一、基础篇JVMJVM内存结构堆、栈、方法区、直接内存、堆和栈区别Java内存模型内存可见性、重排序、顺序一致性、volatile、锁、final垃圾回收内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定JVM参数及调优Java对...转载 2018-07-02 13:37:03 · 1494 阅读 · 0 评论 -
Java 序列化 之 Serializable
概念序列化:就是把对象转化成字节。 反序列化:把字节数据转换成对象。对象序列化场景:1、对象网络传输 例如:在微服务系统中或给第三方提供接口调用时,使用rpc进行调用,一般会把对象转化成字节序列,才能在网络上传输;接收方则需要把字节序列再转化为java对象。2、对象保存至文件中 例如:hibernate中的二级缓存:把从数据库中查询出的对象,序列化转存到硬盘中,下次...原创 2018-04-06 16:33:44 · 2233 阅读 · 0 评论 -
Java 动态代理 原理解析
概要AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执行。Spring中的动态代理是使用Cglib进行实现的。我们这里分析的是JDK中的动态代理实现机制。下面我们通过例子快速了解JDK中的动态代理实现方式。示例需要代理的接口原创 2017-09-28 13:46:22 · 1868 阅读 · 0 评论 -
Java Timer 定时任务实现原理及缺陷分析
Timer Demopublic class ThreadTest { public static void main(String[] args) { TimerTask task1 = new TimerTask() { @Override public void run() { S原创 2017-10-31 23:23:07 · 8684 阅读 · 2 评论 -
Junit 多线测试 问题
问题在使用Junit测试时,发现在测试方法中启动新的线程,结果新开启的线程未执行,测试方法就结束了。难道Junit不支持多线程测试?示例如下:public class ThreadTest { @Test public void testSleep() { Thread t = new Thread(()-> { try原创 2017-10-31 23:23:53 · 1980 阅读 · 0 评论 -
java 中的内省 introspector
概述经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。内省(IntroSpector)是Java语言对JavaBean 类属性、事件的一种处理方法。 例如类A中有属性name,那我们可以通过getName,setName 来得到其值或者设置新的值。 通过getName/setName 来访原创 2017-10-31 23:27:42 · 1939 阅读 · 0 评论 -
Junit 测试之 Spring Test
在做spring相关测试时比较麻烦,如果只用JUnit测试,需要没测有初始化一下applicationContext,效率比较底下,而且也有不足之处。导致多次Spring容器初始化问题 根据JUnit测试方法的调用流程,每执行一个测试方法都会创建一个测试用例的实例并调用setUp()方法。由于一般情况下,我们在setUp()方法 中初始化Spring容器,这意味着如果测试用例有多少个测试方原创 2017-10-31 23:28:29 · 2466 阅读 · 0 评论 -
《Java 进阶之路》 下--推荐书籍
真正想提升自己,我感觉最主要的是先把 JVM、并发、网络这三块知识点学会、学通,这三块是基础,后面所有的框架、中间件等相关的都是基于这三块知识点之上的。学完这三块知识点,可以快速的掌握其它的知识,新框架等。接着上篇上一篇: 《java进阶之路》 下 继续给大家分享,进阶高级或架构师必看的书籍。1. HeadFirst 设计模式 如果对设计模式不了解,可以入手这本书,或图解设计原创 2017-12-04 11:50:55 · 3668 阅读 · 0 评论 -
《java 进阶之路》 上--推荐书籍
整整一月没有更新博客了,因为十月份和双十一新入手的6本技术相关的书,这个月看完了3本,后面的3本还得慢慢肯。下面我就介绍下进阶高级工程师必须也是我自己都看的一些书和知识点。1.深入理解Java虚拟机 个人感觉想踏入高级工程师行列,第一本应了解的书。理解Java虚拟机后好多知识点迎刃而解,对理解其它的知识点也事半功倍。主要修炼程序员内功。 该书看了差不多5遍了(第一版+第二版)原创 2017-12-04 11:50:15 · 3368 阅读 · 1 评论 -
从零手写RPC
RPC概述RPC(Remote Proceduce Call 远程过程调用) 一般用来实现部署在不同机器上的系统之间的方法调用,使程序能够像访问本地系统资源一样,通过网络传输过去访问远端系统资源。RPC 调用过程Client 客户端调用方法实现,负责发起RPC调用。ClientStub/SereverStub 可以看作一个代理对象,屏蔽RPC调用过程中复杂的网络处理逻辑,使原创 2017-12-04 11:52:15 · 5439 阅读 · 5 评论 -
Java 序列化之 Externalizable
相关文章: Java 序列化 之 SerializableJDK中除了提供 Serializable 序列化接口外,还提供了另一个序列化接口Externalizable,使用该接口之后,之前基于Serializable接口的序列化机制就将失效。Externalizable 的序列化机制优先级要高于 Serializable 。Externalizable 源码分析 从源码中,我们...原创 2018-04-14 10:27:22 · 2272 阅读 · 0 评论 -
Java 序列化 之 单例模式
序列化相关文章: * Java 序列化 之 Serializable * Java 序列化之 Externalizable当我们使用Singleton模式时,应该是期望某个类的实例应该是唯一的,但如果该类是可序列化的,那么发序列化后还会是单例的吗?下面我们通过如下示例一来验证一下:示例一User 类User 类是单例模式,使用的饿汉模式,在类加载的时候就创建对象实例。...原创 2018-04-14 10:30:16 · 2620 阅读 · 0 评论 -
获取当前执行代码的类、方法、行数信息
package cn.com.infcn.tool.utils;/** * Class工具类 * * @author jijs * @version 1.0 */public class ClassUtils { /** * 获取调用的类名 * * @return String */ public static Stri...原创 2018-07-02 13:35:54 · 7218 阅读 · 0 评论 -
NIO 之 FileChannel
概述文件通道总是阻塞式的,因此不能被置于非阻塞模式。现代操作系统都有复杂的缓存和预取机制,使得本地磁盘 I/O 操作延迟很少。网络文件系统一般而言延迟会多些,不过却也因该优化而受益。 面向流的 I/O 的非阻塞范例对于面向文件的操作并无多大意义,这是由文件 I/O 本质上的不同性质造成的。对于文件 I/O,最强大之处在于异步 I/O( asynchronous I/O),它允许一个进程可以从操...原创 2018-06-05 15:40:51 · 1553 阅读 · 0 评论 -
凯撒加密算法(最简单的对称加密)
凯撒算法 概述凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。 因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq...原创 2018-06-05 15:36:27 · 15793 阅读 · 0 评论 -
RSA 非对称加密原理(小白也能看懂哦~)
RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P 、Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) = (P-1)(Q-1) - 4 计算公钥E 1 < E < φ(N) E的取值必须是整数 E 和 φ(N) 必须是互质数 5 计算私...原创 2018-06-05 15:35:09 · 105815 阅读 · 25 评论 -
NIO 之 Channel
可参考之前写过的文章:NIO 之 Channel实现原理概述通道( Channel)是 java.nio 的主要创新点。它们既不是一个扩展也不是一项增强,而是全新、极好的 Java I/O 示例,提供与 I/O 服务的直接连接。 Channel 用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。Channel 接口定义public in...原创 2018-06-05 15:33:21 · 1642 阅读 · 0 评论 -
NIO 之 MappedByteBuffer
可参考: MappedByteBuffer以及ByteBufer的底层原理概述Bytebuffer分为两种:间接地和直接的,所谓直接就是指MappedByteBuffer,直接使用内存映射(java的话就意味着在JVM之外分配虚拟地址空间);而间接的ByteBuffer是在JVM的堆上面的。间接缓冲区就是我们通常说的堆缓冲区。 直接缓冲区 java内部是使用 DirectByteBu...原创 2018-06-05 15:32:28 · 2313 阅读 · 0 评论 -
NIO 之 Buffer 图解
可参考之前的文章:NIO 之 ByteBuffer实现原理 下面是对之前文章的一个补充Buffer 类 结构对于每个非布尔原始数据类型都有一个缓冲区类。尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节。概述缓冲区 Buffer 内部就是用数组实现的。 Buffer 包含了下面4个属性:容量( Capacity) 缓冲区能够容纳的数据元素的最大...原创 2018-06-05 15:31:14 · 1699 阅读 · 0 评论 -
Java IO 之 管道流 原理分析
概述管道流是用来在多个线程之间进行信息传递的Java流。 管道流分为字节流管道流和字符管道流。 字节管道流:PipedOutputStream 和 PipedInputStream。 字符管道流:PipedWriter 和 PipedReader。 PipedOutputStream、PipedWriter 是写入者/生产者/发送者; PipedInputStream、PipedR...原创 2018-05-15 09:36:32 · 4894 阅读 · 1 评论 -
Java IO 之 SequenceInputStream 原理解析
概述今天给大家分享一个比较有意思的 IO 流。SequenceInputStream ,听名字顾名思义。SequenceInputStream 流可以把多个 InputStream 合并为一个 InputStream . 按照指定的顺序,把几个输入流连续地合并起来,使用起来像一个流一样。并且使它们像单个输入流一样出现。每个输入流依次被读取,直到到达该流的末尾。然后“序列输入流”类关闭这个流...原创 2018-04-14 10:32:08 · 2634 阅读 · 0 评论 -
java 序列化 原理解析
序列化相关文章: * Java 序列化 之 Serializable * Java 序列化之 Externalizable * Java 序列化 之 单例模式。阅读本文章之前,务必要阅读上面的三篇文章。 这篇文章是围绕上面三篇文章的原理进行剖析的。 因为 ObjectInputStream 和 ObjectOutputStream 类比较复杂,这里只解析跟上面三篇文章相关的内容。...原创 2018-04-14 10:31:23 · 2853 阅读 · 1 评论 -
从零手写IOC
概述IOC (Inversion of Control) 控制反转。熟悉Spring的应该都知道。那么具体是怎么实现的呢?下面我们通过一个例子说明。1. Component注解定义package cn.com.infcn.annotation;import java.lang.annotation.ElementType;import java.lang.annotatio原创 2017-12-04 11:53:07 · 3998 阅读 · 0 评论 -
JAVA 文件锁 FileLock
概述FileLock是java 1.4 版本后出现的一个类,它可以通过对一个可写文件(w)加锁,保证同时只有一个进程可以拿到文件的锁,这个进程从而可以对文件做访问;而其它拿不到锁的进程要么选择被挂起等待,要么选择去做一些其它的事情, 这样的机制保证了众进程可以顺序访问该文件。也可以看出,能够利用文件锁的这种性质,在一些场景下,虽然我们不需要操作某个文件, 但也可以通过 FileLock 来进行原创 2017-12-04 11:54:59 · 4171 阅读 · 0 评论 -
JAVA 文件监控 WatchService
概述java1.7中 提供了WatchService来监控系统中文件的变化。该监控是基于操作系统的文件系统监控器,可以监控系统是所有文件的变化,这种监控是无需遍历、无需比较的,是一种基于信号收发的监控,因此效率一定是最高的;现在Java对其进行了包装,可以直接在Java程序中使用OS的文件系统监控器了。使用场景场景一:比如系统中的配置文件,一般都是系统启动的时候只加载一次,如果想原创 2017-12-04 11:56:00 · 2938 阅读 · 0 评论 -
Java 使用 endorsed 覆盖jdk提供的类
在分析 Tomcat catalina.bat 原理解析时候,我们发现在启动tomcat的参数中存在 -Djava.endorsed.dirs 参数 如下图: -Djava.endorsed.dirsjava提供了endorsed技术: 关于 endorsed :可以的简单理解为 -Djava.endorsed.dirs 指定的目录面放置的jar文件,将有覆盖系统API的功能。但是能够覆盖的类原创 2017-08-27 14:31:18 · 3991 阅读 · 0 评论 -
Tomcat catalina.bat 原理解析
tomcat 的真正启动是在 catalina.bat 设置并启动的。startup.bat 只是找到catalina.bat 然后执行catalina.bat 来启动tomat的。下面我们来分析下catalina.bat验证CATALINA_HOME 环境变量验证CATALINA_HOME 设置是否正确,如果不正确,重新设置CATALINA_HOME 环境变量。如果在CATALINA_HOME原创 2017-08-27 14:30:06 · 3980 阅读 · 0 评论 -
使用DelayQueue 和 FutureTask 实现java中的缓存
使用DelayQueue、ConcurrentHashMap、FutureTask实现的缓存工具类。DelayQueue 简介DelayQueue是一个支持延时获取元素的无界阻塞队列。DelayQueue内部队列使用PriorityQueue来实现。队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列中获取当前元素。只有在延迟期满时才能从队列中提取元素。DelayQueue非常原创 2017-08-01 18:11:44 · 2813 阅读 · 0 评论 -
最简单的 java 防反编译技巧
public class CompileForbid { public static void main(String[] args) { try { System.out.println("-------"); //防止反编译的处理 if (654789 == new Random().nextInt()原创 2017-07-17 10:29:23 · 6345 阅读 · 4 评论 -
多线程并发下的单例模式
定义:单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。下面通过代码分析下java中,各种单例模式写法的优缺点。1、饿汉模式示例1.1public class Singleton { private Singleton() {} private static Object INSTANCE = new Object(); public原创 2017-06-26 14:55:36 · 1828 阅读 · 0 评论 -
常量池之字符串常量池String.intern()
运行时常量池是方法区(PermGen)的一部分。需要提前了解: 1. JVM内存模型。 2. JAVA对象在JVM中内存分配常量池的好处常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 - Java的自动装箱中其实就使用到了运行时常量池。详见:Java 自动装箱与拆箱的实现原理 - 还有字符串常量池。字符串进入到常量池的两种方法:1. new String()的实例原创 2017-04-25 22:01:41 · 3212 阅读 · 4 评论 -
Java中的四种引用类型
概述 Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java垃圾回收器密切相关的引用类。StrongReference(强引用),SoftReference(软引用),WeakReference(弱引用),PhantomReference(虚引用)。这四种引用的强度按照上面的顺序依次减弱.引用类型对比 序号 引用类型 取得目标对象方式 垃圾回收条原创 2017-05-15 17:29:49 · 1761 阅读 · 0 评论 -
Java 自动装箱与拆箱的实现原理
什么是自动装箱和拆箱 自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。原始类型byte, short, char, int, long, float, double 和 boolean 对应的封原创 2017-04-21 23:58:24 · 2344 阅读 · 0 评论 -
HttpClient 学习整理
HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放在这里。HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中原创 2012-09-06 11:10:37 · 1722 阅读 · 0 评论 -
教你如何配置Tomcat 绑定指定目录的工程文件
1.新建一个文件,名称为test.xml (test指我现在的项目名称,你的就写你的)2.复制以下内容CODE:cachingAllowed="true"cookies="true"crossContext="true"docBase="D:MyEclipseCode2006testWebRoot"workDir="D:MyEclipseCode2006test原创 2009-07-29 09:24:00 · 2162 阅读 · 0 评论 -
java.util.Random 实现原理
概述该类的实例被用于生成伪随机数的流。该类使用一个 48 位的种子,它被一个线性同余公式所修改。如果 Random 的两个实例用同一种子创建,对每个实例完成同方法调用序列它们将生成和返回相同的数序列成同一方法调用序列,它们将生成和返回相同的数序列。示例public class RandomTest { public static void main(String[] args) {原创 2017-09-07 10:56:50 · 3153 阅读 · 0 评论 -
编码规范
代码格式化设置:统一使用tab缩进,一个tab占用4个空格宽度,120字符换行。代码提交前必须进行格式化。JAVA代码提交不允许出现红叉、尽量也不要出现警告。[.classpath] [.project] [.git] [.idea] [.settings] [.iml] 等文件不允许提交。Controller类名称去掉Controller这几个字符,并且首字母小写后,应该与访问地址中对应部原创 2017-09-28 13:38:06 · 1697 阅读 · 0 评论 -
java 的 System.getenv() 和 System.getProperty()
概述java中提供了 System.getenv() 和 System.getProperty() 两个方法可以获取系统的环境变量和java程序相关的信息。Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量基本都是跟系统相关,getProperty方法返回的变量基本都是跟java程序有关。Sys原创 2017-12-21 13:57:39 · 5762 阅读 · 0 评论 -
DatabaseMetaData.getIndexInfo
示例通过 DatabaseMetaData.getIndexInfo() 获取索引信息。public static void getIndexInfo() throws Exception { Connection conn = getConnection(); ResultSet rs = null; try {原创 2018-01-03 11:34:46 · 5638 阅读 · 0 评论 -
Java 注解 Annotation
概述了解 Java 注解前必须先了解元注解。 元注解:描述注解的注解。如果明白元数据概念就比较好理解元注解 元数据:描述数据的数据。 还是比较抽象哈,下面举个例子说明下。 比如一个txt文件的元数据有 : 文件大小、创建时间、最后修改时间等数据。JDK提供了4种元注解@Retention 声明注解的生命周期@Target 修饰注解可以使用到那些目标对象上原创 2018-01-17 13:45:32 · 2020 阅读 · 0 评论