自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 EventBus简析

一、概述EventBus 是Google.Guava提供的消息发布-订阅类库,它实现了观察者设计模式,消息通知负责人通过EventBus去注册/注销观察者,最后由消息通知负责人给观察者发布消息。二、观察者设计模式1、目的定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时候,所有依赖于它的对象都得到通知并被自动更新。2、应用实例接水的时候,接水的人观察水位,当水位到一定程度...

2019-07-18 23:17:38 332

原创 Java内存模型

文章摘自:Java并发编程的艺术 方腾飞 魏鹏 程小明 著 Java内存模型基础 线程通信与同步:在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型中,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。而同步是显示进行的。即程序猿必须显示指定某个方法或者某段代码需要在线程之间互斥执行。在消息传递的并发模型中,线程直接没有公共状...

2019-02-23 23:18:15 1544

原创 正向代理与反向代理、nginx的负载均衡与高可用

正向代理:举例:我访问不了某网站,但是我能访问一个代理服务器,这个代理服务能访问我不能访问的网站,于是我连上代理服务,告诉他我要访问的那个网站内容,代理服务器取回来返回给我。用途:1.访问原来无法访问的资源如google2.可以做缓存,加速访问资源3.代理可以记录用户访问记录,也可以带外隐藏用户信息。 反向代理:以代理服务器接收internet上的连接请求,然后...

2019-02-22 01:43:45 377

转载 99首英文歌

 1 沉默之声 The Sound Of Silence2 爱的细语There's A Kind Of Hush3 阳光季节 Seasons In The Sun4 唱首忧郁的歌 Song Sung Blue5 在老橡树上系黄丝带 Tie A Yellow Ribbon Round The Old Oak Tree6 雨的旋律 Rhythm of The Rain7 七...

2019-02-20 20:24:55 398

原创 scheduleAtFixedRate与schedule区别

schedule和scheduleAtFixedRate的区别:如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行(追赶性)而下一次执行的时间是参考上一次执行结束的时间,而schedule不会把过去的时间算上,会立即执行一次,下一次执行时间以上一次开始的时间作为参考。/** * describe:不延时追赶性测试 *...

2019-02-20 20:15:19 2860

原创 HashMap、ConcurrentHashMap、Hashtable简单分析以及简单实现HashMap

HashMap分析:1.根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度。2.HashMap非线程安全(并发情况下put操作可能会引起死循环,因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形,Entry的next节点永远不为空,就会产生死循环获取Entry)。Hashtable分析:1.使用synchroniz...

2019-01-29 17:07:09 181

原创 尝试模拟实现AOP(二)

实现思路请看:尝试模拟实现AOP(一)源代码:GitHub

2019-01-17 20:35:04 260

原创 尝试模拟实现RMI(二)

实现思路请看:尝试模拟实现RMI(一)源代码:GitHub

2019-01-16 20:23:41 171

原创 尝试模拟实现IOC(二)

实现思路请看:尝试模拟实现IOC(一)源代码:GitHub

2019-01-16 20:05:49 151

原创 Java设计模式—中介模式(Mediator)

目录目的应用实例代码  目的 利用一个中介处理不同类间的交互,松耦合。 应用实例 MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介。 代码 /** * describe:中介 * * @author gary * @date 2018/12/27 */public class Mediator { public ...

2018-12-27 19:02:51 128

原创 Java中移位运算以及int、long和byte的转化

移位运算符运算符 含义 << 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) >> "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. >>> "无符号"右移运算 符,将运算符左边的对象向右...

2018-12-27 17:27:06 902

原创 Java设计模式—职责链模式(Chain of Responsibility)

目录目的应用实例代码   目的 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将他们连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。 应用实例 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。 Servlet的过滤器Fileter。 代码  package com.gar...

2018-12-23 11:59:25 175

原创 Java虚拟机类加载器

目录何为类加载器类与类加载器类加载器的双亲委派模型双亲委派模型好处双亲委派模型是如何实现的?文章摘自:深入理解Java虚拟机 第二版 周志明著 本文主要讲解"类加载器"。 何为类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类二进制字节流”这个动作放刀Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的...

2018-12-23 00:14:53 125

原创 Java虚拟机类加载过程

文章摘自:深入理解Java虚拟机 第二版 周志明著 本文主要讲解一个Java虚拟机中类加载的全过程,也就是加载、验证、准备、解析和初始化这5个阶段所执行的具体动作。 加载 首先,加载是类加载Class Loading过程的一个阶段。然后,在加载阶段,虚拟机需要完成以下3件事:1)通过一个类的全限定名来获取定义此类的二进制字节流。2)将这个字节流所代表的静态存储结构转化为方...

2018-12-22 18:37:14 620

原创 一个简单的线程控制的定时器

package com.gary.dida;import java.util.Scanner;public class Test { public static void main(String[] args) { TimeMeterDemo timeMeter1 = new TimeMeterDemo("第一个", 1000); TimeMete...

2018-12-22 18:12:28 200

原创 Java虚拟机类加载时机

文章摘自:深入理解Java虚拟机 第二版 周志明著 代码编译的结果从本地机器码转变为字节码。在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期...

2018-12-21 18:51:09 149

原创 “重载”和“重写”在Java虚拟机中如何确定正确的目标方法

文章摘自:深入理解Java虚拟机 第二版 周志明著  静态分派 请看如下代码:package com.gary.test.overload_overwrite;/** * 方法静态分派演示 * @author gary * */public class StaticDispatch { static abstract class Human { } s...

2018-12-21 16:51:45 202

原创 Java设计模式—原型模式

目录目的应用实例代码  目的 原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。即用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 应用实例 细胞的分裂 Java中Object 的 clone()方法 代码 原型角色:定义用于复制现有实例来生成...

2018-12-21 12:41:23 97

原创 尝试模拟实现struts2(一)

由于在另一篇文章中已经分析过Struts2的执行流程,所以直接开始尝试。声明:只是简单实现过程,没有使用代理。首先:因为struts2会当用户访问action时候加入一个过滤器,将用户请求拦下来。用户请求路径"./action/StudentInfo"所以我们也在web.xml加一个过滤器dispatcher。如下:<filter> <filter-nam...

2018-11-26 00:51:55 167

原创 简单分析Struts2的执行流程

客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。 在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction(); 在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(); 在代理中执行的execute方法中调用ActionInvocation的invoke...

2018-11-26 00:19:02 242

原创 Java中对于模态框的使用以及在多线程中的应用

模态框可以通过继承JDialog并且设置构造参数boolean modal = true即可。但是 当此模态框setVisible(true)时候,会导致当前线程阻塞。那么问题来了:现有一需求是点击登陆按钮,则会向服务器发送登陆请求以及获取数据的请求,待服务器成功返回响应即可登陆主界面。但是由于如果有人多次点击登陆按钮,就会发很多次请求,这样服务器的压力就会变大。如何改进程序较少服务器的压...

2018-11-20 16:15:10 415

原创 操作系统引论

目录操作系统的目标与作用操作系统的发展过程操作系统的基本特性:并发、共享、虚拟和异步操作系统的主要功能OS结构设计  操作系统的目标与作用 操作系统的目标:方便性、有效性、可扩充性和开放性。 方便性:方便用户,易学易用; 有效性:1提高系统资源的利用率2提高系统的吞吐量;方便性和有效性是设计OS时最重要的两个目标 可扩充性:从无结构到模块...

2018-11-11 20:24:32 157

原创 计算机中的数制与编码

目录原码:反码:补码:转换:补码的加减运算:信息编码:目前,计算机中通常用补码进行带符号数的运算。  原码: 最高为为符号位(0/1),其余数字位表示数的绝对值。当机器字长为8时,-127原码11111111B +127原码01111111B 可以看出8位二进制原码表示数的范围是-127~+127.原码表示简单直观,且与真值的转换很方便,但是不便于...

2018-11-10 18:30:25 1510

原创 Java泛型中extends和super的区别

<? extends Fruit>代表的是上界通配符,也就是说这个List中存放的对象都是Fruit以及其子类的对象,这样我们就不用因为输入的List中类型的不同而改变代码了。上界通配符有一个特点,就是程序只知道List<? extends Fruit>中的对象是Fruit的子类的对象,但是如果Fruit的子类有很多个,那个在使用add方法的时候,就可能出现本来是List...

2018-11-08 00:29:03 324

转载 Java集合类小结

本文摘自 https://www.jianshu.com/p/589d58033841目录 Collection接口Set集合HashSetLinkedHashSetTreeSetEnumSetList集合ArrayListLinkedListArrayList与LinkedList性能对比Queue集合Map集合Java的集合类主要由Col...

2018-11-04 01:49:49 146

原创 关于Java中Socket通信时使用ObjectInputStream与ObjectOutputStream的顺序问题

在Java中使用Socket与ServerSocket建立客户机和服务器时,若采用ObjectInputStream与ObjectOutputStream建立通信,则需要注意两个流的顺序。否则会发生两方互相等待导致死锁。下面通过一个例子来证明:服务器:package com.gary;import java.io.IOException;import java.io.Objec...

2018-11-02 15:40:56 3205 1

原创 Java堆中的新生代和老年代以及相应的垃圾收集算法

新生代 主要是用来存放新生的对象,会频繁创建对象,所有垃圾收集会频繁进行回收。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。复制算法将内存分为三个区:一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活的对象一次...

2018-11-02 01:30:31 1631

原创 Java中过滤器与拦截器的区别与使用

拦截器(Interceptor) 拦截器是动态拦截Action调用的对象。它提供一种机制可以使开发者可以定义一个action执行的前后执行的代码,也可以在一个action执行前组织其执行。同时也是提供了一种可以提取的action中可重用的部分的方式拦截器在AOP中用于某个方法或者字段被访问之前,进行拦截然后在之前或者之后加入某些操作。是实现AOP的一种策略。拦截器链:拦截器按一...

2018-10-31 20:52:07 3928

原创 尝试模拟实现持久化层(一)

准备:为模拟的需要,本次采用c3p0数据库连接池以及Spring的JdbcTemplate。自定义三个注解:@Table、@Column、@ID目标:对JDBC进行封装,将POJO与数据库表建立映射关系,尝试模拟实现持久化层(Hibernate)简单的操作如save、list、get等等。大体思路:1.首先完成最简单的get,参数是POJO的class和id。要完成该方...

2018-10-30 22:40:25 372

原创 尝试模拟实现RMI(一)

关于RMI的基础理解在我之前的文章中有所介绍。点我这次是根据RMI的基础理解从而想到尝试模拟实现RMI。大体思路:我们的目标是建立RpcServer以及RpcClient后,从RpcClient中得到相应接口或类的代理对象,并且执行接口中的方法。 而这的执行是通过代理机制,把需要执行的方法和参数在通过RpcClientExecutor发送到RpcServerExecutor中执行。...

2018-10-28 02:14:02 197

原创 尝试模拟实现AOP(一)

大体思路:除了模拟实现IOC准备的东西外,还需要准备一套有关拦截器的类以及相关注解; 包括类InterceptorFactory、InterceptorScanner、,注解After、Before、ThorwException、Aspect; 一个描述拦截器的类IntercepterMethodDefination和一个描述被拦截的类IntercepterTargetDefination...

2018-10-26 01:41:15 288

原创 关于RMI的简单理解

RMI(Remote Method Invocation) 即远程方法调用; 涉及两个网络端,其核心思想是:一个端可以通过调用另外一个端的方法,实现相关功能; 一个端“执行”一个方法,而这个方法实际是在另外一端进行的; 当然,两个端都应该有相同的类,自然会拥有相同的方法。 一个端‘执行’这个方法,其实是通过调用这个类的代理对象的方法,在其中拦截这...

2018-10-25 15:55:51 336

原创 尝试模拟实现IOC(一)

大体思路:首先需要准备一个包扫描工具,用来扫描需要创建Bean的类。 准备注解,暂时使用Component、Bean、Autowired注解,后续还会增加。 创建一个BeanFactory,对外提供getBean(Calss<?> class)方法。 getBean返回的是代理对象(为之后实现拦截器模拟AOP做准备),则还需要创建一个ProxyBeanFactory,对外提供...

2018-10-24 01:07:37 169

原创 IOC与DI基本理解

IOC是什么? 含义:IOC全称为“Inversion of Control”,即控制反转,不是一种技术,而是一种设计思想。是将对象的创建权交给容器管理。优点:方便解耦合。在传统的应用程序中,我们需要在对象内部去创建(new)依赖的对象,在这样的情况下,对象之间的耦合度就非常高。如Dao接口和Dao实现类,传统情况下若要更改XxDao xxDao = new XxDaoimpl()则需...

2018-10-21 16:18:37 178

转载 Mysql 数据库引擎简单介绍

目录 数据库引擎 数据库引擎任务 MySQL数据库引擎类别 ISAM MYISAM HEAP INNODB和BERKLEYDB mysql数据引擎更换方式 MyIASM 和 Innodb引擎详解 Innodb引擎 MyIASM引擎 两种引擎的选择 Index——索引 MyIASM引擎的索引结构 Innodb引擎的索引结构 数据库引...

2018-10-16 01:27:15 148

原创 Java设计模式—适配器模式(adapter)

目录目的应用实例代码 目的 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 应用实例 三角插座到双角插座的转换需要一个适配器。 音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。 代码 public interface Three {...

2018-10-04 00:13:59 298

原创 Java设计模式—抽象工厂模式(factory)

目录 目的应用实例代码 目的 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂模式是最常用的设计模式之一。这种类型的设计模式输出创建型模式,提供了一种创建对象的最佳方式。在工厂模式中创建对象是通过使用一个共同 的接口来指向新创建的对象。 应用实例 一个框架或者系统要由多个子工具系列的一个工具来配置时候。 提供一个产品类库,只显...

2018-10-04 00:07:06 124

原创 Java设计模式—建造者模式(build)

目录目的应用实例代码 目的 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 应用实例 JAVA 中的 StringBuilder。 商品不同的套餐实际为不同的单件通过组合模式组合成的。 代码  package com.gary.designpattern.build;public class Person { p...

2018-10-03 23:52:12 770

原创 Java设计模式—单例模式(single)

目录 目的应用实例代码 目的 保证一个类仅有一个实例,并提供一个访问它的全局访问点。(菜鸟教程) 应用实例 一个国家有一个首都 Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 代码 第一种:package com.gary.design...

2018-10-03 23:45:05 2150

原创 Java设计模式—观察者模式(IListenner、ISpeaker)

目录目的应用实例代码 目的      定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时候,所有依赖于它的对象都得到通知并被自动更新。 应用实例 接水的时候,接水的人观察水位,当水位到一定程度时候便停止接水; 老师一布置任务,学生听到都得做。 代码 package com.gary.designpattern.observe;...

2018-10-03 23:36:53 343

空空如也

空空如也

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

TA关注的人

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