自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

luzhensmart的专栏

Come on baby!

  • 博客(51)
  • 资源 (11)
  • 收藏
  • 关注

原创 Java动态代理--Proxy.newProxyInstance4

注意:动态代理 并不一定非得拦截目标方法  场景也可以是 懒得写实现类和其逻辑 利用动态代理 动态实现 类似于通用工具类的模式,如xxl-job源码中的那样,只是获取对象 组织对象内容package com.xxl.job.core.rpc.netcom;import com.xxl.job.core.rpc.codec.RpcRequest;import com.xxl.job.co...

2018-09-30 23:57:28 918

转载 Java动态代理--Proxy.newProxyInstance3

 1 学习动态代理的目的  动态代理技术都是在框架中使用,例如:Struts1、Struts2、Spring和Hibernate中都使用了动态代理技术。如果你不想自己写个框架,那么你基本上是用上不动态代理技术的。学习动态代理技术的目的是为了更好的理解框架内部的原理,也就是说是为了将来学习框架打基础!动态代理技术有点难度!而且明白了动态代理技术可能一时也想不到他适合在什么情况下使用它。这些东西都...

2018-09-30 23:51:41 2250 1

转载 Java动态代理--Proxy.newProxyInstance2

一、代理的概念  动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会动态代理技术,那么在学习Spring这些框架时是学不明白的。  动态代理技术就是用来产生一个对象的代理对象的。在开发中为什么需要为一个对象产生代理对象呢?  举一个现实生活中的例子:歌星或者明星都有一个自己的经纪人,这个经纪人就是他们的代理人,当我们需要找明星表演时,不能直接找到该明星,只...

2018-09-30 17:51:14 170

翻译 Java动态代理--Proxy.newProxyInstance

一、代理模式主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情(甚至根本不去执行这个方法),因为在InvocationHandler的invoke方法中,你可以直接获取正在调用方法对应的Method对象,具体应用的话,比如可以添加调用日志,做事务控制等。动态代理是设计模式当中代理模式的一种。package proxy;public in...

2018-09-30 17:47:26 2517

翻译 Linux文件和文件夹权限解读

首先来查看一下当前目录下的文件内容吧: ls -l 查看当前目录下的文件列表 ls -ld 目录名称 查看指定文件夹权限 ls -l xxx.xxx (xxx.xxx是文件名) 查看指定的文件 我们可以看到文件的权限,-rw-rw-r--  ,一共有10位数。其中:最前面那个 - 代表的是类型(详细如下面贴图所示)前面那三个 rw- 代表的是所有者(u...

2018-09-27 17:40:36 1057

转载 Dubbo底层采用Socket进行通信详解

由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下。n  通信理论计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。1.一组信息(通常是字节)的各位数据被同时传送的通信方法称为并行通信。并行通信依靠并行I/O接口实现。并行通信速度快,但传输线根数多,只适用于近距离(相距数公尺)的通信。2.一组信息的各位数据...

2018-09-26 19:46:53 2057

翻译 Java线程之异步回调(Callback)

●介绍     有时候执行一个任务需要很长时间,单线程下线程会处于阻塞状态。这个时候我们会考虑一种非阻塞的处理模式。非阻塞任务在任何编程语言里都必不可少,Java也不例外。多线程就是一个很好的解决办法。     但是多线程是异步处理,异步就意味着不知道处理结果,如果我们需要知道处理结果的时候应该怎么办呢? 笔者介绍下面两种方法 ●Callback 回调一般是异步处理的一种技术。一个回调是被传...

2018-09-26 19:33:24 30038 2

转载 ArrayList的底层实现原理

一、对于ArrayList需要掌握的七点内容ArrayList的创建:即构造器 往ArrayList中添加对象:即add(E)方法 获取ArrayList中的单个对象:即get(int index)方法 删除ArrayList中的对象:即remove(E)方法 遍历ArrayList中的对象:即iterator,在实际中更常用的是增强型的for循环去做遍历 判断对象是否存在于Arra...

2018-09-19 20:12:09 287 1

转载 class文件中的方法表集合--method方法在class文件中是怎样组织的

0. 前言         了解JVM虚拟机原理是每一个Java程序员修炼的必经之路。但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的。         感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成《Java虚拟机...

2018-09-19 19:15:38 697 1

原创 volatile与synchronize区别

volatile与synchronizedvolatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住. volatile仅能使用在变量级别,synchronized则可以使用在变量,方法. volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则...

2018-09-19 15:45:17 371

翻译 HashSet、HashMap、ArrayList、LinkedList、Vector区别

什么是HashSetHashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。public boolean add(Object o)方...

2018-09-19 11:19:25 275

原创 用LinkedList实现队列1

package org.luzhen.test;import java.util.LinkedList;public class MainClass { public static void main(String[] args) { Queue queue = new Queue(); for (int i = 0; i < 10; i++) { ...

2018-09-19 11:15:53 769

原创 用LinkedList实现栈

先进后出:package org.luzhen.test.bean;import java.util.LinkedList;public class MainClass { public static void main(String[] args) { StackL stack = new StackL(); for (int i = 0; i <...

2018-09-19 11:13:24 1206

转载 用LinkedList实现队列

队列 队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。 im...

2018-09-19 11:08:24 1547

原创 Quartz有状态的job

package com.lz.quartz.job;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.PersistJobDataAfterExecution;import java.time.In...

2018-09-18 22:00:19 942

原创 Quartz无状态的JOB

package com.lz.quartz.job;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.time.Instant;import java.time.LocalDateTime;import ja...

2018-09-18 21:54:03 318

原创 Quartz--Demo2 job实现类中的setter覆盖JobDataMap中的key

package com.lz.quartz.job;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.time.Instant;import java...

2018-09-18 00:16:10 297

原创 Quartz的API--DEMO

pom.xml: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio...

2018-09-17 23:54:01 615

翻译 Builder模式--复杂的DEMO--Builder嵌套

优缺点优点在建造者模式中, 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,  用户使用不同的具体建造者即可得到不同的产品对象。 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更...

2018-09-17 22:05:38 912

翻译 Builder模式

模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发动机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道...

2018-09-17 21:52:15 119

转载 redis分布式锁

如果没有用到分布式锁的场景是这样的:这是一个普通的更新用户年龄的功能,各层代码如下,访问controller层,一个更新,一个查询: ”这是service层,我们使用contdownlatch发令枪来模拟线程同时并发的情况,发令枪设为32,即32个线程同时去请求修改年龄,   这里使用线程池来提交多线程任务,看代码知道,这里我们已经有了判断年龄的操作,当查询用户查询大于...

2018-09-15 20:27:15 121

转载 java线程的状态转换图

从图上可以看出,当调用wait()方法之后,线程便进入了等待状态,直到调用了notify()/notifyAll()方法之后,则唤醒线程去竞争对象锁

2018-09-14 17:59:33 578

原创 dubbo底层实现原理

分析源代码,基本原理如下:client一个线程调用远程接口,生成一个唯一的ID(比如一段随机字符串,UUID等),Dubbo是使用AtomicLong从0开始累计数字的 将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object 向专门存放调用信息的全局ConcurrentHashMap里面put(I...

2018-09-14 17:49:37 1242 1

翻译 自定义文件系统类加载器

类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中并为之生成对应的Java.lang.Class对象。尽管在Java开发中无须过分关心类的加载机制,但是所有的编程人员都应该了解其工作机制,明白如何才能让其更好的满足我们的需要。类加载器负责加载所有的类,一旦一个类被载入JVM中,同一个类就不会被再次载入了。JVM中,有一个类加载子系统,它包括了四种类加载器:    B...

2018-09-14 09:26:54 187

原创 Java类加载器Demo

package org.luzhen.test;public class TestGC { public static void main(String []args){ System.out.println(TestGC.class.getClassLoader().toString()); System...

2018-09-13 10:57:19 610

翻译 java_符号引用与直接引用

1.符号引用(Symbolic References):  符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等类型的常量出现。符号引用与虚拟机的内存布局无关,引用的目标并不一定加载...

2018-09-12 22:18:33 402

转载 JVM类加载机制详解

首先,在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class)。而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验、转换解析、初始化,使这些数据最终成为可以被JVM直接使用的Java类型,这个说来简单但实际复杂的过程叫做JVM的类加载机制。 Class文件中的“类”从加载到JVM内存中,到卸载出内存过程有七个生命周期阶段。类加载机制包...

2018-09-12 19:04:10 87

转载 Tomcat类加载架构:

 Tomcat目录下有4组目录:/common目录下:类库可以被Tomcat和Web应用程序共同使用;由 Common ClassLoader类加载器加载目录下的类库; /server目录:类库只能被Tomcat可见;由 Catalina ClassLoader类加载器加载目录下的类库; /shared目录:类库对所有Web应用程序可见,但对Tomcat不可见;由 Shared C...

2018-09-12 18:27:42 105

转载 破坏双亲委派模型

双亲委派模型很好的解决了各个类加载器加载基础类的统一性问题。即越基础的类由越上层的加载器进行加载。 若加载的基础类中需要回调用户代码,而这时顶层的类加载器无法识别这些用户代码,怎么办呢?这时就需要破坏双亲委派模型了。 下面介绍两个例子来讲解破坏双亲委派模型的过程。 JNDI破坏双亲委派模型  JNDI是Java标准服务,它的代码由启动类加载器去加载。但是JNDI需要回调独立厂商实现的代...

2018-09-12 18:26:00 2211

转载 双亲委派模型的代码实现

双亲委派模型的代码实现集中在java.lang.ClassLoader的loadClass()方法当中。 1)首先检查类是否被加载,没有则调用父类加载器的loadClass()方法; 2)若父类加载器为空,则默认使用启动类加载器作为父加载器; 3)若父类加载失败,抛出ClassNotFoundException 异常后,再调用自己的findClass() 方法。loadClass源代码如...

2018-09-12 17:25:23 783

翻译 一道面试题搞懂JVM类加载机制

class Singleton{ private static Singleton singleton = new Singleton(); public static int value1; public static int value2 = 0; private Singleton(){ value1++; value2++...

2018-09-12 15:34:05 306

转载 JVM中的直接引用和符号引用

JVM在装载class文件的时候,会有一步是将符号引用解析为直接引用的过程。那么这里的直接引用到底是什么呢?对于指向“类型”【Class对象】、类变量、类方法的直接引用可能是指向方法区的本地指针。指向实例变量、实例方法的直接引用都是偏移量。实例变量的直接引用可能是从对象的映像开始算起到这个实例变量位置的偏移量。实例方法的直接引用可能是方法表的偏移量。在《深入java虚拟机》书的第1...

2018-09-11 19:30:00 276

转载 java -- JVM的符号引用和直接引用

在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用。1.符号引用(Symbolic References):  符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_...

2018-09-11 18:17:41 113

转载 浅析 JVM 中的符号引用与直接引用

前言在 JVM 的学习过程中,一直会遇到符号引用和直接引用这两个概念。最近我也查阅了一些资料,有了一些初步的认识,记录在此与大家分享。文中的内容,主要参考自 JVM里的符号引用如何存储? 与 自己动手写Java虚拟机。关于符号引用与直接引用,我们还是用一个实例来分析吧。看下面的 Java 代码:package test;public class Test { public ...

2018-09-11 18:10:30 7093 5

转载 VOLATILE 只保证可见性,并不保证原子性

 在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型。     (1)Java所有变量都存储在主内存中     (2)每个线程都有自己独立的工作内存,里面保存该线程的使用到的变量副本(该副本就是主内存中该变量的一份拷贝)   (1)线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接在主内存中读写   (2)不同线程之间无法直接访问其他线程工作内存中的变...

2018-09-10 22:56:29 516 1

转载 新生代Eden与两个Survivor区的解释

聊聊JVM的年轻代1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域...

2018-09-10 22:55:30 129

转载 JVM老年代和新生代的比例

Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆的内存模型大致...

2018-09-09 23:08:59 49080 9

原创 如何控制线程执行的顺序?

 方法一:通过共享对象锁加上可见变量来实现。public class MyService { private volatile int orderNum = 1; public synchronized void methodA() { try { while (orderNum != 1) { ...

2018-09-09 22:40:12 389

转载 悲观锁和乐观锁问题使用场景

定义:悲观锁(Pessimistic Lock): 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。乐观锁(Optimistic Lock): 每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更...

2018-09-09 22:27:28 960

翻译 一致性哈希算法

使用场景现在我们假设有100台redis data服务器,一份数据101进来的时候,以散列公式hash(i)&100,计算所存放的服务器,假设hash(i) = i,那么数据被散列到标号为1的服务器,然后这个时候服务器新增了一台,然后散列公式为hash(i)%101,这个时候请求访问数据101的时候,被分配至0号服务器,但是其实这个时候数据是在1号服务器的。所以这个时候大量的数据失...

2018-09-09 17:48:55 170

tcnative-1.dll

解决方法: 下载tcnative-1.dll文件,将其放到tomcat\bin里。也可以忽略,不影响程序运行。

2013-05-23

LeapFTP 破解版

LeapFTP 破解版

2013-05-16

SSH2整合需要的jar包(2)

SSH2整合需要的jar包(2) 同样是SSH2整合的jar包 根据版本的不同 整合需要的jar包 也不同

2013-05-07

SSH2整合 需要的jar包

Struts2 Spring Hibernate 整合需要的jar包很好用

2013-05-07

aopalliance-1.0.jar

aopalliance-1.0.jar 很好用

2013-05-06

aspectj -1.6.13 . jar

aspectj-1.6.13.jar 很好用

2013-05-06

w3school_5.0.chm中文文档

w3school_5.0.chm中文文档 挺好用的

2013-04-30

jQueryAPI1.4.chm中文文档

jQueryAPI 1.4.chm 中文文档 还不错 挺好用的

2013-04-30

jQuery-UI-Reference-1.7.chm

jQuery-UI-Reference-1.7.chm文档,挺好用的

2013-04-30

Myeclipse8.6注册码获取

将文档中的代码复制进去后,运行,即可获取Myeclipse8.6的注册码

2013-04-30

Altova XMLSpy 2013注册机

必须是32位系统的 很好用 减压后 有个图片文件 照着上面做 即可注册成功

2013-04-30

空空如也

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

TA关注的人

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