Java类的加载机制

1、什么是类的加载

类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。

类加载器并不需要等到某个类被“首[……]

Read more

Java CGLIB动态代理

JDK InvocationHandler的动态代理是基于接口来实现的,从newProxyInstance()方法中的参数也可以看出来,假如被代理的对象的类并没有实现接口,而是一个普通的类,那么久可以通过CGLIB动态代理来实现

了解了JDK动态代理之后,再来理解CGLIB相对容易一些,大致流程

1、通过CGLIB的Enhancer对象注入被代理类和方法属性,进而调用create()方法来创建代理[……]

Read more

Java JDK动态代理

到处都是用的动态代理,这次是认真的

静态代理:事先已经知道了要代理什么,而且编译时代理类就已经生成

动态代理:事先不知道要代理什么,运行的时候才能确定,实现InvocationHandler接口,调用Proxy的newProxyInstance()方法通过反射动态地创建代理类

下图就是创建代理类的流程

图来自:https://upload-images.jianshu.io/upload_ima[……]

Read more

Spring操作Redis数据库,RedisTemplate和StringRedisTemplate差异

Redis是KV内存数据库,支持很多数据结构,具体如下面之前写过的,也可以自行google

http://lihuia.com/?s=redis

Spring对Redis操作的支持,基本也和JDBC,MongoDB类似,通过Spring Data Redis,具体有

1、客户端支持,Jedis和Lettuce

2、RedisTemplate

3、Repository支持

测试一下通过Jedis来操[……]

Read more

Spring MVC:Tomcat,Servlet,Spring

最近迷上了tomcat,小研究了下多层容器结构,下图来自互联网

Spring MVC相关的内容,一些基本的概念,转载几个讲解的部分内容学习一下

web容器中有servlet容器,spring项目部署后存在spring容器和springmvc容器。其中spring控制service层和dao层的bean对象。springmvc容器控制controller层bean对象。servlet容器[……]

Read more

Java多线程wait()用while代码块的理解

多线程wait()判断条件这个地方的逻辑琢磨了挺久的,本意就是拿到锁之后如果条件不满足就等待,感觉用if和while似乎没啥区别

首先是生产者,单独一个线程,和消费者共用一个锁和一个队列,都通过构造方法传入

1.线程里直接死循环持续生产消息,消息体最好不一样,可以弄个随机数,我这里用了微妙时间戳,调用add()方法

2.需要添加一个条件,如果队列已经满了,就不能继续添加了,调用wait()方法等待[……]

Read more

Java之BIO,NIO,AIO

这几个概念不清楚,熟悉一下,转自:Java BIO、NIO、AIO

写在前面

对于Java里面同步异步阻塞非阻塞那些,其实我的理解都只停留在最基础的层面,有一些概念可能还非常模糊。最近由于工作需要准备研究一下netty,查了一下发现-Netty 是一个基于 JAVA NIO 类库的异步通信框架。啥是NIO.. 一脸懵逼,看来不先搞懂这个是没办法进行下去了。看到NIO顺便又了解了一下B[……]

Read more

干货 | 阿里巴巴混沌测试工具ChaosBlade两万字解读

很详细的chaos工具,有空研究下,转自朱小厮的博客

一、前言

ChaosBlade 是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练实践基础上,并结合了集团各业务的最佳创意和实践,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具。

Chaosblade 可直接编译运行,cli 命令提示使执行混沌实验更加简单。目前支持的演练场景有操作系统类的 CPU、[……]

Read more