• Java远程调试 2018-11-19
    ``` // JVM 1.5以后的版本 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999 -jar demo.jar ``` 或者 ``` java -Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n -jar demo.jar ``` 相关可选项: ``` // 禁止JIT,加快DEBUG速度 -Djava.compiler=NONE ``` 新建Eclipse远程调试配置,输入IP和端口,就可以开始调试了
  • [Structural] 装饰模式(Decorator Pattern) 2018-07-17
    定义:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。) In object-oriented programming, the decorator pattern is a design pattern that a
  • [Behavioral]责任链模式(Chain-of-responsibility) 2018-07-13
    定义:Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.(使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。) 优点: 1、降低耦合度。它
  • [Behavioral]命令模式(Command ) 2018-07-12
    定义:Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。) ![设计模式-Command.jpg](files/73d74f63-37d2-3391-b98e-46735191a852) ```java pack
  • [Behavioral]中介者模式(Mediator pattern) 2018-07-11
    定义:Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly,and it lets you vary their interaction independently.(用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。) ![设计模式-Mediator.jpg](
  • [Creational]原型模式(Prototype Pattern) 2018-07-09
    定义:Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.(用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。) ![设计模式-Prototype.jpg](files/0fe3dffd-15cb-3dee-95d1-cbfc8f19b4bf) 相关概念:浅拷贝、深拷贝 Java 中 clone 方法只能进行浅拷贝,若要对引用对象也做拷贝,需要单独处理 应用场景: 1.如需要保护原有对象,则可
  • [Structural]代理模式(Proxy Pattern) 2018-07-06
    定义:Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。) ![设计模式-Proxy.jpg](files/13f38628-76df-3c82-ab6b-6153bf92ecbb) ● Subject抽象主题角色 抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。 ● RealSubject具体主题角色 也叫做被委托角色、被代理角色。它才是冤大头,是业务逻辑的具体执行者。 ● Proxy代理主题角色 也叫做委托
  • UML类图 2018-07-05
    #####泛化 【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。 【箭头指向】:带三角箭头的实线,箭头指向父类 #####实现 【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现. 【箭头指向】:带三角箭头的虚线,箭头指向接口 #####组合 【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
  • [Creational]建造者模式(Builder Pattern) 2018-07-04
    #####定义: Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。) ![设计模式-Builder.jpg](files/8b452564-a0d2-354a-8074-26ec3580e2ba) #####角色 ● Product产品类 被构造的复杂对象。 ● Builder
  • Java 重写(Override)与重载(Overload) 2018-07-04
    ####重写与重载之间的区别 | 区别点 | 重载方法 | 重写方法 | | ------------ | ------------ | ------------ | | 参数列表 | 必须修改 | 一定不能修改 | | 返回类型 | 可以修改 | 一定不能修改 | | 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 | | 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) | 参考:http://www.runoob.com/java/java-override-overload.html
  • ASM :Java 字节码操作与分析框架 2018-07-03
    ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or to dynamically generate classes, directly in binary form. ASM provides some common bytecode transformations and analysis algorithms from which custom complex transformations and code
  • JDK动态代理 2018-06-28
    ####简单例子: ```java package com.hjh.demo.proxy; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * @author xxonehjh */ public class ProxyTester
  • CGLIB 动态代理简单例子 2018-06-28
    #####CGLIB和Java动态代理的区别 Java动态代理只能够对接口进行代理,不能对普通的类进行代理(因为所有生成的代理类的父类为Proxy,Java类继承机制不允许多重继承); CGLIB能够代理普通类; Java动态代理使用Java原生的反射API进行操作,在生成类上比较高效; CGLIB使用ASM框架直接对字节码进行操作,在类的执行过程中比较高效。 ```java package com.hjh.demo.proxyCglib; import java.lang.reflect.Method; import net.sf.cglib.proxy.Callback; impor
  • Java 消息摘要算法 2018-06-27
    #####CRC32 CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。由于CRC32产生校验值时源数据块的每一个bit(位)都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的CRC32值。 #####MD5 即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。MD5是输入不定长度信息,输出固定长度128-bits的算法。 #####SHA (Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然SHA
  • MySql 悲观锁、乐观锁 2018-06-26
    ####悲观锁: 悲观锁的特点是先获取锁,再进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。通常所说的“一锁二查三更新”即指的是使用悲观锁。通常来讲在数据库上的悲观锁需要数据库本身提供支持,即通过常用的select … for update操作来实现悲观锁。当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果。select for update获取的行锁会在当前事务结束时自动释放,因此必须在事务
  • Spring-AOP 简单样例 2018-06-23
    ###Aop 概念 Let us begin by defining some central AOP concepts and terminology. These terms are not Spring-specific…​ unfortunately, AOP terminology is not particularly intuitive; however, it would be even more confusing if Spring used its own terminology. * Aspect: a modularization of a concern that
  • [Creational]抽象工厂模式(Abstract Factory Pattern) 2018-06-22
    定义:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。) 与工厂模式的区别: One uses inheritance and one uses composition. One creates only one product and the other creates a family of products. One makes u
  • [Behavioral]模板方法模式(Template Method Pattern) 2018-06-21
    定义:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。) ```java package com.hjh.demo.des
  • 软件设计原则 2018-06-21
    ####单一职责原则(Single Responsibility Principle, SRP) 一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。 https://blog.csdn.net/lovelion/article/details/7536542 ####里氏代换原则(Liskov Substitution Principle, LSP) 所有引用基类(父类)的地方必须能透明地使用其子类的对象。 https://blog.csdn.net/lovelion/article/details/7540445 ####依赖倒转原则(De
  • [Creational]工厂模式(Factory method) 2018-06-20
    定义:Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。) ```java package com.hjh.demo.designPatterns; public class Factory { public interface I
  • [Creational]单例模式(Singleton Pattern) 2018-06-20
    定义:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。) ```java package com.hjh.demo.designPatterns; /** * 单例模式 */ public class Singleton { public static void main(String args[]) { Singleton.getInstance().hello(); } private
  • Spring 事务处理 2018-06-15
    ####事务有四个特性:ACID 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。 隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。 持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持
  • Spring-IOC 简单样例 2018-06-15
    IoC是什么   Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:   ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制
  • HTML5 拖拽实例 2018-06-13
    1.设置拖拽对象 class 为 drop-source , 属性 draggable="true" 2.设置目标对象 class 为 drop-target ```javascript $(document).on('dragstart', '.drop-source', function (event) { // 获取当前拖拽对象 window.g_drop_source = event.currentTarget; }); $(document).on('dragend', '.drop-source', function (event) { window.g_drop_sou
  • Kafka基础知识与实例 2018-06-12
    ####Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: - 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。 - 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。 - 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。 - 同时支持离线数据处理和实时数据处理。 - Scale out:支持在线水平扩展。 -------------------------------------------------------
  • Spring JdbcTemplate 2018-06-12
    Spring JdbcTemplate 封装数据库操作,管理连接的获取与释放,对各种不同种类数据库特有的异常做了统一处理 #### 简单例子 ```java package com.hjh.demo.springJdbcTemplate; import java.io.IOException; import java.sql.SQLException; import java.sql.Statement; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.Jd
  • RabbitMq 实例 2018-06-11
    #### 安装(ubuntu) ```shell sudo apt-get install rabbitmq-server ``` #### 常用命令(ubuntu) ```shell # 启动 service rabbitmq-server start # 关闭 service rabbitmq-server stop # 重启 service rabbitmq-server restart # 添加用户 sudo rabbitmqctl add_user userName password # 删除用户 rabbitmqctl delete_user userName # 修改密码 r
  • 远程数据同步 2016-08-02
    远程数据同步(源码地址): https://github.com/xxonehjh/remote-files-sync 发布包下载地址:https://github.com/xxonehjh/remote-files-sync/tree/master/publish ####一.功能特性 支持同步本地文件 支持同步远程文件 支持代理同步 提供Android app作为服务端 数据传输采用thrift框架 ####二.使用说明 #####服务端启动 java -jar remote_sync.jar server config.properties #####客户端启动 java -ja
  • 使用keytool生成thrift相关证书 2016-07-08
    ####1.利用 keytool 生成公钥和私钥 ##### 1. 生成 .keystore ```` keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore .keystore ```` ##### 2. server.cer证书 ```` keytool -export -alias certificatekey -keystore .keystore -rfc -file server.cer ```` ##### 3. 生成.truststore ```` keytool -import
  • 数据同步方案(附Java源码) 2016-05-22
    一.问题背景 经常碰到要同步数据的情况,而系统自带的复制功能又不能实现增量同步,每次都要做全量复制,发生异常情况后只能重头再来,非常麻烦,优其是对那种大文件的处理,更是耗时。 二.解決方案 1.计算源目录数据指纹 2.计算目标目录数据指纹 3.对比指纹数据,找出差异项,得到需要添加,删除或更新的文件列表,计算出需要更新的数据大小 4.挨个同步差异项,如果碰到大文件,则缓存其指纹数据到目标文件夹中,供下次同步数据时使用 三.数据指纹说明 数据指纹顾名思义,就是对某一文件夹或文件的唯一标识,其格式为: 文件相对路径+:(分隔符)+修改日期+:+数据长度+:+內容指纹 內容指纹是由多个内容块的md5