自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无止于天涯 - Always on the Road

编程之路其修远兮,吾将上下而求索

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

原创 ThreadLocal失效

在JDK中,解决线程冲突问题,有两种解决方案:l 给临界区加锁;l 本地化临界区。第一种解决方案的典型代表是Synchonized。第二种的典型代表是ThreadLocal。而CopyOnWrite是这两种方案的融合。

2016-03-08 15:11:08 3494

原创 生成唯一序列号 Unique ID

程序取号的锁竞争和网络延迟是不可避免的,所以最理想的Unique ID策略还是本地生成:把发号器内嵌到每个程序中,同时保证生成标准的同步。

2016-02-01 11:07:36 11727 1

原创 JDK自动拆箱下,三目运算符的潜规则

三目运算中, Java自动拆箱的潜规则,一不留意就会抛NullPointerException

2014-06-25 01:03:37 5376 1

原创 反射破坏单例的私有构造函数保护

Java的反射破坏单例的私有构造函数保护,最典型的就是Spring的Bean注入,我们可以通过改造私有构造函数来防止。

2014-03-09 12:25:15 3139 6

原创 初探JVM-ClassLoader源码

之前简单介绍了一下JVM中的ClassLoader,现在我们再来看看ClassLoader的源码。ClassLoader          首先,我们看看ClassLoader的构造方法,如果不传入参的话,默认父加载为SystemClassLoader默认加载器。protected ClassLoader() {        this(checkCreateClassLoader

2013-12-02 01:21:05 2288 1

原创 JDK-Future 模式和实现

最近的项目用到了多线程,发现java.util.concurrent.Future蛮好用的。像平时,写多线程一般使用Thread/Runnable,直接扔给线程池执行就好了。但是遇到了一些需要获取线程执行结果的情况,就需要使用Callable。对于使用Callable的task,ExecutorService执行后会返回一个Future对象来传递执行结果。那这个Future是怎么存放返回值

2013-09-15 21:45:54 3385 1

转载 加解密-overview

转载于:http://blog.sina.com.cn/s/blog_9d357d970100zl8d.html一、基础知识:1、互联网上中间人攻击通常用的三种方式:1)窃听 2)数据篡改 3)会话劫持2、数据加密的常用的三种方式有:对称加密、非对称加密、单向加密。3、ssl:secure socket layer:安全的套接字层。4、TLS:Transport Layer Security

2017-11-05 22:19:16 362

转载 Unique ID策略

下面对比几个典型的Unique ID策略。程序号采用分配的形式,每个进程/线程启动的时候申请一个唯一的WorkerID,关闭的时候再回收。20bit能支持100w个WorkerID,应该也够用了。WorkerID可以通过Redis/ZK/MySQL/单独服务来管理。

2016-02-01 11:35:45 2346

转载 Unique ID的特性需求分析

UniqueID在一个真实的系统里可能也可以承担更多的作用。概括起来主要有以下几点:l 唯一性l 时间相关l 粗略有序l 可反解l 可制造

2016-02-01 11:17:24 1326

原创 单例 变 多例--多ClassLoader实例加载

最近做项目,要把一个服务线程Worker做成单例模式。但是,在多ClassLoader的情况下,很难控制实例的数量。 类加载层次         我们系统为了方便各个服务热启动,给每个服务分配一个ClassLoader实例,来实现动态加载。结合JDK的ClassLoader加载链,可以分成下面5层:BootstrapLoader -> ExtClassLoader -> App

2015-10-11 17:17:51 5111 6

转载 MySQL高可用方案-MHA

MHA是MySQL High Available的缩写,一般指一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用。         MHA易于安装和部署,不需要改变现有部署,也不影响服务器性能 (1 ping/3s),而且可以完全部署到Slave上,节约了新服务器的成本。         如此轻量的部署,就能提供自动监控master和故障转移 (dow

2015-10-03 11:25:28 1806

原创 MySQL的主从复制,半同步复制

主从复制                MySQL数据库支持同步复制,单向、异步复制,在复制的过程中一个服务器充当主服务器,而一个或多个服务器充当从服务器。                单向复制有利于健壮性、速度和系统管理:l  健壮性:主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份,实现更加健壮的故障切换。l  速度快:通过在主服务器和

2015-09-30 15:46:36 1102

原创 Git的状态转换

状态跳转         就本地仓库来看,Git可以分成5个不同的状态,可以通过$ git status来查看。这五个状态可以互相转换,具体操作详见下面的“版本回退/整合”。         当然,有些文件很有用,不能删除又不能提交,如Eclipse的项目文件. project等。这种情况最好就是选择把他们忽略掉,可以通过修改根目录的.gitignore文件,或者update-inde

2015-08-23 18:08:22 2305

原创 Redis集群方案的对比

Redis集群方案         长期以来,Redis本身仅支持单实例,内存一般最多10~20GB。这无法支撑大型线上业务系统的需求。而且也造成资源的利用率过低,毕竟现在服务器内存动辄100~200GB。         为解决单机承载能力不足的问题,出现了不少集群方案,物理上把数据“分片”存储在多个Redis实例。(一般情况下,每一片对应一个Redis实例)         其中最

2015-08-23 17:40:03 2598

原创 重视[读写分离]的delay影响

最近参考了公司的文档,整理了一下读写分离的delay影响。读写分离         过去我们几乎都只是宣扬读写分离的好处,往往没有重视由此带来的问题。         读写分离大大提高了我们系统的读写性能、可扩展性以及高可用性,同时也带来了主从的delay。这个主从delay对不同业务有不同程度的影响,有一些甚至会造成致命的bug,特别是在支付领域,我们不得不重视起来。

2015-08-18 00:05:14 3075 2

转载 F5负载均衡服务器

F5服务器/网络负载均衡         F5Networks (飓风网络) 成立于美国华盛顿州西雅图市,是应用交付网络(ADN)领域的全球领先厂商,致力于帮助全球大型的企业和服务提供商实现虚拟化、云计算和“随需应变”的IT的业务价值。F5提供业界领先的成套集成产品和服务。F5的产品能够消除带宽拥塞,并提高关键任务互联网服务器和应用系统的可用性和速度,其中包括Web发布、内容提供、电子商务、高

2015-05-19 21:49:21 3126

原创 [科普]原码,反码,补码由来

在计算机内部,所有信息都是用二进制数串的形式表示的整数。是整数就有正负之分,而这个正负也需要用二进制来表示,所以一般会用最高有效位作为符号位,0表示正号、1表示负号。这种正负号数字化的机内表示形式就称为“机器数”,而相应的机器外部用正负号表示的数称为“真值”,将一个真值表示成二进制字串的机器数的过程就称为编码。         带符号整数有原码、反码、补码、移码等几种编码方式:1)

2015-03-01 00:51:11 2582 2

原创 Reactor反应器模式

最近学习NIO,看《Netty权威指南》的时候,讲JDK1.5的NIO提到了Reactor模式。所以参考《Netty权威指南》,结合JDK的NIO中Selector来简述一下Java中Reactor模式的实现。

2015-02-28 20:42:46 1054

原创 初探Java序列化(2)-writeObject/readObject

上一篇《初探Java序列化(Serialization)》给我们大体介绍了什么是序列化和反序列化,以及解析了一下序列化出来的文件。接着我们看看JDK具体如何序列化一个Object。        在序列化过程中,虚拟机会试图调用对象类里的writeObject() 和readObject(),进行用户自定义的序列化和反序列化,如果没有则调用ObjectOutputStream.defaultW

2015-02-26 22:36:14 7790

原创 初探Java序列化(Serialization)

Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化Deserialization是一种将这些字节重建成一个对象的过程。【字节流的来回转换】Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。将对象状态转换成字节流之后,可以用java

2015-02-26 22:24:03 3226

转载 String的不可变性

String是所有语言中最常用的一个类。我们知道在Java中,String是不可变的、final的。Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。String类不可变性的好处1.只有当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是

2015-01-18 23:46:51 813

原创 比较两个List是否相等(相同元素)

我们看看如何比较两个数组相等。数组是一个连续的内存空间,所以一般来说,两个数组相等,就是意味着他们有相同的长度,相同的元素,以及相同的顺序。我们看看JDK的Arrays.equals()实现就一目了然了。 public static boolean equals(int[] a, int[] a2) { if (a==a2) return true;

2015-01-18 16:21:31 51268 2

原创 类的初始化&实例化顺序

讲到类的初始化和实例化,不得不提提初始化和实例化的顺序,我想这也是一直困扰了很大一部分人。         从大流程来说,类肯定是先初始化,再实例化的:静态域 --> 实例域 --> 构造函数。另外要符合任何子类的动作都会触发父类:父类 --> 子类。所以得出原则:【先静态后实例;先父类后子类】 而且同一个域的顺序可以分成两步: 创建-->赋值

2014-11-16 20:59:51 3778 1

原创 Class的生命周期

Class的生命周期就是指一个class文件(字节码)从加载到卸载的全过程。当一个类被装载、连接、初始化后,它的生命周期就开始了,当代表该类的Class对象不再被引用、即已经不可触及的时候,Class对象的生命周期结束。那么该类的方法区内的数据也会被卸载,从而结束该类的生命周期。一个类的生命周期取决于它Class对象的生命周期,经历加载、连接、初始化、使用、和卸载五个阶段。

2014-11-16 20:44:43 2017

原创 浅谈JDK的File.equal()

java.io.File.equal()比较两个File对象是否指向同一个文件,但实际上不同系统的文件系统中,需要小心使用,以免被坑。

2014-06-28 00:36:02 2827

转载 DAO模式

DAO(Data Access Object)模式实际上是两个模式的组合,即DataAccessor 模式和 Active Domain Object 模式。其中DataAccessor模式实现了数据访问和业务逻辑的分离,而Active Domain Object 模式实现了业务数据的对象化封装,一般我们将这两个模式组合使用。Data Accessor模式实现了数据访问和业务逻辑的分离:就

2014-03-17 00:42:12 1301

原创 Linux常用命令笔记-ftp/sed/awk

FTP     FTP (File TransferProtocol文件传输协议),就是专门用来传输文件的协议。FTP服务器,是互联网上提供存储空间的计算机,它们依照FTP协议提供服务。         SFTP和FTP的语法几乎一样。只是SFTP(安全文件传送协议)作为SSH的一部份是Secure的,为传输文件提供一种安全的加密/解密方法,所以传输效率比普通的FTP要低得多。所以

2013-11-20 19:53:51 2044

原创 Linux常用命令笔记-Shell

Shell 何为Shell,就是用户和操作系统核心交互的工具,用户通过Shell向操作系统发送指令,来支配系统中的硬软件设备。在Linux上使用的Shell有很多,其中最为广泛的要数Bash(BourneAgain Shell,简称sh),一般Linux都是以这个为预设的Shell。   想知道现在用的是什Shell,可以 [echo $SHELL] History

2013-11-17 01:00:13 2320 2

原创 Linux常用命令笔记-Shell Script

Shell Script顾名思义,Shell Script就是利用 shell所写的一个脚本,简单来说就是将许多shell指令集合起来,可以一次执行。相当于dos中的.bat批次文件。Shell脚本是最常用的系统管理工具,一般用来结合程序完成工作。--------------------------------Demo--------------------------------

2013-11-17 00:51:56 1661

原创 64位win 7装Linux虚拟机(RedHat)

好不容易在我64的win7下装好了RedHat,和大家分享一下几个麻烦的地方:1 教程        安装教程还是很多的,基本上掌握流程就好,版本可以调自己合适的,教程如:http://www.linuxidc.com/Linux/2010-08/27449.htm2 小红帽镜像:rhel-server-6.2-x86_64-dvd.iso        我下了好几个镜像都不兼容,

2013-11-17 00:38:16 2473

原创 JVM类加载机制-ClassLoader

类的加载何为类加载器,简单的说就是JVM通过类加载器ClassLoader,把.class文件中的信息,拼装成Class对象放入内存中。JVM的类加载器,就是字节码和JVM的桥梁。如下图所示,我们写好的.java文件经过编译器,编译成.class的二进制文件(字节码),然后通过类加载器把.class文件读到内存中,组成我们使用的Class对象。类加载到JVM内存

2013-11-05 23:43:54 2661 1

原创 Import原理,避免误区

import在java中是非常普遍的关键字,只要是会java基础的人肯定会用,但如果不了解他的其原理,很容易会进入理解的误区。

2013-11-03 22:15:01 3531

原创 JDK-CountDownLatch-实例、源码和模拟实现

CountDownLatch作为一个同步的计数器,可以统一线程组的开始和结束,让我们来探探其内部实现。并且一起讨论,其实现是否可以通过原子类来替代呢?

2013-09-14 12:34:40 1436

原创 草稿note

public class DownloadExcelService implements DownloadService {private static final Logger LOG = Logger.getLogger(DownloadExcelService.class.getName());protected static final char[] SUB_SPACE =

2013-08-22 00:31:33 849

原创 JDK1.7-Arrays源码详解

Arrays此类包含数组操作的各种方法(比如排序和搜索)。此类还包含一个允许将数组作为列表来查看的静态工厂。除非特别注明,否则如果指定数组引用为null,则此类中的方法都会抛出 NullPointerException Arrays的主要方法:sort(),binarySearch(),equals(),copyOf(),toString()等。 sort我们先看看排序方法

2013-06-04 08:24:03 1766 1

原创 JDK1.7-StringBuilder源码详解

StringBuilder是一个可变字符序列 (字符串)。和String相比,两者都是字符串,都是字符的有序排列;不同的是,String是不可变的,而StringBuilder是可变的。       StringBuilder和StringBuffer几乎一样,只是前者没有同步处理,更加高效。因此,这两者的操作逻辑几乎是一样的,可以通过一个抽象的父类AbstractStringBuilder来

2013-06-02 20:36:49 1911

原创 eclipse_64位 反编译插件:jadclipse3.3

今天,刚刚换了个固态硬盘,顺便装了一个64的win7,感觉速度的确提高了一大截,但是接踵而来也有很多麻烦,原来32位的软件大部分用不了。        eclipse换成64位的eclipse4.2,没想到原来的反编译插件decompiler也用不了了,报错如下:java.lang.UnsatisfiedLinkError:……\jd-eclipse.dll: Can't load IA

2013-06-02 19:26:28 4470 3

原创 JDK1.7-String源码详解

String表示字符串,是char的有序集合,在java中所有的字符串值,都是String的实例。    String类提供了很多方法,如获取字符串中的字符,比较字符串,查询字符等。    Java给String的 + 操作提供了很好的支持,相加后会返回一个字符常量结果。    String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象。所以

2013-06-01 02:23:47 2545

原创 String字符常量池和intern()

常量池(Constant Pool)指的是在编译期被确定,并被保存在已编译的class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。    JVM在运行的时候,会装进存在于.class文件中的常量池。    常量池在运行中,是可以扩展的,如String.intern()方法:先检查常量池里有没有相同Unicode的常量,没有则添加,然后返回此String的引用。

2013-05-31 00:45:16 1492

原创 初探Tomcat源码 —— 关闭钩子

在Tomcat中,通过Catalina的start()来启动服务器Server等组件;然后监听ShutDown命令来调用stop()关闭。        但是,如果程序没有走上面的流程,非正常关闭,那么stop()的逻辑就没法执行了。幸运的是,和Java的shutdown钩子一样,Tomcat也提供了自己的关闭钩子。JVM的关闭钩子可以参考我的《JVM关闭钩子(2)—— 源码浅析》,主要是

2013-05-22 21:53:54 2725

RocketMQ-3.1.1

鉴于Github最新版本的RocketMQ不能安装到windows上,这里提供了一个低版本的RocketMQ-3.1.1以供大伙学习。

2015-04-05

How tomcat works

《How tomcat works》 is a famous book to know more about tomcat5.0

2014-11-17

just a pic

just a picture for you. share it.

2014-08-16

pic for me

just a picture, you can share it free.

2014-08-16

pic for job

this picture just for develop job. please don't spread it in the internet.

2014-08-15

demo for rmi

a demo for java rmi. you can test it and do something modify.

2014-07-23

wane‘s ppt

这是个不错的课程,大家可以下载下来看看,还蛮不错的!顶一个

2014-07-03

v5 new code

release for v5, you can download and enjoy it.

2014-06-20

platform for robot

platform for robot, you can enjoy it.

2014-06-16

proguard5.0beta1

代码混淆工具,just for free

2014-06-15

my leader code

this is my leader code, anyone can read and share your suggestions.

2014-06-09

v5_robot_release_1.1

my release of robot, you maybe can learn something from it.

2014-06-08

v5Tank_1.0

好东西,你值得拥有

2014-06-05

robocode 1.9

IBM的坦克大战,传闻很容易上瘾哦! 指挥你的坦克冲锋陷阱,消灭其他渣渣吧

2014-05-13

Java NIO 中文版.pdf

Java NIO 中文版,我看了一下还不错,给大家分享一下!

2013-11-26

jclazz字节码查看工具(反编译)

用根目录下的\scripts\win32\jclazz-gui.cmd打开class文件,就能看到字节码,还有反编译功能

2013-11-03

深入理解Java虚拟机-JVM高级特性与最佳实践

《深入理解Java虚拟机-JVM高级特性与最佳实践》-周志明(pdf扫描版)

2013-11-03

随便写的代码-jacky

jacky代码,随便下载

2013-08-22

cpuz-硬件检测工具

cpuz-硬件检测工具,用于检测cup等。

2013-08-20

jadclipse_3.3.0.jar

eclipse的反编译插件,32位/64位都可以用

2013-06-02

jad 158g.win.zip

jdk的反编译命令,放到jdk的bin目录就好

2013-06-02

空空如也

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

TA关注的人

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