java
文章平均质量分 69
maikelsong
这个作者很懒,什么都没留下…
展开
-
根据表结构生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第7版)
http://vipbooks.iteye.com/blog/2230565根据表结构生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第7版)博客分类: TableToBeanjavabeanjpamysqloracle 目录: 第1版:http://vipbooks.i转载 2015-11-24 18:30:14 · 430 阅读 · 0 评论 -
java提高篇(二五)-----HashTable
有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable。对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对Has转载 2016-07-05 17:17:18 · 252 阅读 · 0 评论 -
StringBuffer、StringBuilder、ArrayList、Vector、HashMap、HashTable是如何扩容的
StringBuffer、StringBuilder默认初始化是16个字符,默认增容为(原长度+1)*2,代码如下: //默认初始化大小public StringBuilder() {super(16);}// 默认扩容int newCapacity = (value.length + 1) * 2; ArrayList、Ve转载 2016-07-05 17:23:05 · 390 阅读 · 0 评论 -
Java提高篇(三四)-----fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器转载 2016-07-05 18:09:49 · 188 阅读 · 0 评论 -
Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList、LinkedList、Vector、Stack,通过这几个知识点可以对List接口有了比较深的了解了。只有通过归纳总结的知识才是你的知识。所以下面LZ就List接口做一个总结。推荐阅读: java提高篇(二一)-----ArrayList java提高篇(二二)-----Li转载 2016-07-05 18:19:59 · 254 阅读 · 0 评论 -
怎样理解阻塞非阻塞与同步异步的区别?
老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水转载 2016-09-28 11:19:34 · 354 阅读 · 0 评论 -
深度剖析ConcurrentHashMap
还记得大学快毕业的时候要准备找工作了,然后就看各种面试相关的书籍,还记得很多面试书中都说到:HashMap是非线程安全的,HashTable是线程安全的。那个时候没怎么写Java代码,所以根本就没有听说过ConcurrentHashMap,只知道面试的时候就记住这句话就行了…至于为什么是线程安全的,内部怎么实现的,通通不了解。今天我们将深入剖析一个比HashTable性转载 2016-10-31 17:59:39 · 319 阅读 · 0 评论 -
java中init()和clinit()方法的区别
:在jvm第一次加载class文件时调用,包括静态变量初始化语句和静态块的执行:在实例创建出来的时候调用,包括调用new操作符;调用Class或java.lang.reflect.Constructor对象的newInstance()方法;调用任何现有对象的clone()方法;通过java.io.ObjectInputStream类的getObject()方法反序列化。(1)(转载 2018-01-01 23:14:02 · 4455 阅读 · 0 评论 -
Java提高篇(二六)------hashCode
在前面三篇博文中LZ讲解了(HashMap、HashSet、HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是最重要也是最精华的部分,所以下面LZ揭开hashCode的“神秘”面纱。 hashCode的作用 要想了解一个方法的内在原理,我们首先需要明白它是干什么的,也就是这个方法的作用。在讲解数组转载 2016-07-05 17:05:57 · 222 阅读 · 0 评论 -
Java提高篇(三三)-----Map总结
在前面LZ详细介绍了HashMap、HashTable、TreeMap的实现方法,从数据结构、实现原理、源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结。 推荐阅读: java提高篇(二三)—–HashMap java提高篇(二五)—–HashTable Java提转载 2016-07-05 15:41:46 · 218 阅读 · 0 评论 -
java提高篇(二三)-----HashMap
>>>>>>>>>>原文参见:http://cmsblogs.com/?p=176 HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value转载 2016-07-05 15:26:07 · 229 阅读 · 0 评论 -
JSR规范整理(整理中......)
http://manysysy.iteye.com/blog/1046963Web Service技术Java Date与Time API ( JSR 310)Java API for RESTful Web Services (JAX-RS) 1.1 (JSR 311)Implementing Enterprise Web Services 1.3 (JSR 109)转载 2015-11-25 18:49:12 · 549 阅读 · 0 评论 -
Action 分发机制实现原理
本文是《轻量级 Java Web 框架架构设计》的系列博文。整个 Web 应用中,只有一个 Servlet,它就是 DispatcherServlet。它拦截了所有的请求,内部的处理逻辑大致是这样的:1. 获取请求相关信息(请求方法与请求 URL),封装为 RequestBean。2. 根据 RequestBean 从 Action Map 中获取对应的 ActionBea转载 2015-11-26 15:03:03 · 1150 阅读 · 0 评论 -
readResolve()方法与序列化
在CJC(一) 中提到一个问题,即 readResolve方法是干啥的? 当时也没多想, 只是列在那里, 今天忙里偷闲地把搜点材料整理下这个问题. 原来这个方法跟对象的序列化相关(这样倒是解释了为什么 readResolve方法是private修饰的). ??? 怎么跟对象的序列化相关了? 下面我们先简要地回顾下对象的序列化. 一般来说, 一个类实现了 Serializable转载 2016-02-18 16:56:54 · 359 阅读 · 0 评论 -
Serializable序列化作用
对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。一. JDK类库中的序列化API java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到原创 2016-02-18 18:25:16 · 414 阅读 · 0 评论 -
Java自定义的类加载器
一、类加载器类别 * 1.java虚拟机自带的加载器 * 根类加载器(Bootstrap,c++实现) * 扩展类加载器(Extension,java实现) * 系统类加载器(System,java实现) * 2.用户自定义的类加载器 * java.lang.ClassLoader的子类 * 用户可以定制类的加载方式转载 2016-02-29 18:00:43 · 252 阅读 · 0 评论 -
不使用构造方法创建Java对象 Objenesis
如果一个类没有参数为空的构造方法时候,那么你直接调用newInstance方法试图得到一个实例对象的时候是会抛出异常的。能不能有 办法绕过构造方法来实例化一个对象呢?Objenesis 为其提供了在四个不同的jvm上的解决方案。 Sun Hotspot VM, versions 1.3, 1.4, 1.5 and 1.6 GCJ version 3.4.4 (tested on W转载 2016-07-22 16:19:21 · 1795 阅读 · 0 评论 -
ThreadPoolExecutor参数说明
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,BlockingQueue workQueue) 核心和最大池大小1.运行的线程2.运行的线程>corePoolSize && 运行的线程3.如果corePoolSize==maximumPo原创 2016-07-05 11:03:53 · 382 阅读 · 0 评论 -
-TreeMap
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好。通过这篇博文你可以获得如下知识点: 1、红黑树的基本概念。 2、红黑树增加节点、删除节点的实现过程。 3、红黑转载 2016-07-05 14:09:06 · 334 阅读 · 0 评论 -
理解Tomcat的WebappClassLoader(web应用类加载器)
我目前的系统可能需要自己实现类加载器,想要参考Tomcat的实现。关于Tomcat的类加载机制,网上文章很多,当然大多都是互相copy,有价值的信息并不多,不得已我开始看Tomcat代码,略有所得,记录起来。主要针对WebappClassLoader。 负责Web应用的类加载的是org.apache.catalina.loader.WebappClassLoader,它几个比较重要转载 2018-01-01 23:30:54 · 671 阅读 · 0 评论 -
深入探讨 java.lang.ref 包
概述Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java 垃圾回收器密切相关的引用类。这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍 Java 垃圾回收器对它们所指向的对象进行回收。其好处就在于使者可以保持对使用对象的引用,同时 JVM 依然可以在内存不够用的时候对使用对象进行回收。因此这个包在用来实现与缓存相关的应用时特别转载 2018-01-23 14:37:31 · 254 阅读 · 0 评论 -
线程安全的CopyOnWriteArrayList介绍
先写一段代码证明CopyOnWriteArrayList确实是线程安全的。ReadThread.java<span style="color:#000000"><code><span style="color:#000088">import</span> java.util.List;<span style="color转载 2018-07-29 20:33:20 · 176 阅读 · 0 评论 -
初识JVM byte code
关于JVM和其上的byte code,网上其实有足够多的资料了,我这里就简单做个提纲和介绍,权当记录吧。stack-based VMJava byte code运行在JVM上,就像机器指令运行在物理机上,是需要遵循这个机器的指令规范的。所以认识JVM byte code,是需要稍微了解下JVM的。JVM是一个基于栈(stack-based)的虚拟机。很久以前我还写过类似 简单的虚拟机 。...转载 2018-07-22 10:17:27 · 168 阅读 · 0 评论 -
Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力
一、背景对于Java来说我们知道,Java代码首先会编译成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上进行执行。Java中所使用的并发机制依赖于JVM的实现和CPU的指令。下边我们对常见的实现同步的两个关键字volatile和synchronized进行底层原理的分析,分析之余我们就会了解到JVM在对锁的优化所做的事情,这样的话我们...转载 2018-08-07 18:15:17 · 133 阅读 · 0 评论 -
java中 int、char、long各占多少字节数
所谓的占用字节数 就是申请内存的时候所占的空间大小 byte 1字节 最小值是 -128(-2^7); 最大值是 127(2^7-1); boolean 至少1字节 这种类型只作为一种标志来记录 true/false 情况; short 2字节 最小值是 -32768(-2^15); ...转载 2018-08-28 10:59:52 · 787 阅读 · 0 评论 -
为什么String要设计成不可变的?
这是一个老生常谈的话题(This is an old yet still popular question). 在Java中将String设计成不可变的是综合考虑到各种因素的结果,想要理解这个问题,需要综合内存,同步,数据结构以及安全等方面的考虑. 在下文中,我将为各种原因做一个小结。1. 字符串常量池的需要字符串常量池(String pool, String intern pool, S...转载 2018-08-28 11:05:35 · 165 阅读 · 0 评论 -
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不...转载 2018-09-06 14:37:46 · 149 阅读 · 0 评论 -
GuavaCache简介(一)
前言在多线程高并发场景中往往是离不开cache的,需要根据不同的应用场景来需要选择不同的cache,比如分布式缓存如redis、memcached,还有本地(进程内)缓存如ehcache、GuavaCache。之前用spring cache的时候集成的是ehcache,但接触到GuavaCache之后,被它的简单、强大、及轻量级所吸引。它不需要配置文件,使用起来和ConcurrentHashMa...转载 2019-05-23 16:23:14 · 226 阅读 · 0 评论 -
Java传值调用和传引用调用(参数引用为null的问题)
一、问题近期在项目中遇到一个场景,在多层级调用中需要传递上下文,调用过程中上线文对象可能为空,想通过一个公共方法处理上下文,当上下文为空时生成上下文对象,执行相关操作后将该上下文对象向后传递。大致逻辑如下:public class Test { public static void handleContext(Context context) { if(contex...原创 2019-08-01 13:03:55 · 1544 阅读 · 0 评论 -
ThreadPoolExecutor线程池参数设置技巧
一、ThreadPoolExecutor的重要参数 corePoolSize:核心线程数核心线程会一直存活,及时没有任务需要执行当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭queueCapacity:任务队列容量(阻塞队列)当核心线程数达到最大时,新任务会放在队列中排队等待执...转载 2018-07-15 11:42:49 · 612 阅读 · 0 评论 -
Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以...转载 2018-07-15 11:37:44 · 121 阅读 · 0 评论 -
【深入理解JVM】:类加载机制
概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行链接工作的语言不同,在Java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,例如import java.util.*下面包含很多类,但是,在程序运行的时候,虚拟机只会加载哪些我们程序需要的类。这种...转载 2018-07-18 18:19:52 · 228 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理] + 知乎大神解答
http://www.cnblogs.com/Anker/p/3265058.html select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过...转载 2018-05-31 10:26:37 · 3332 阅读 · 1 评论 -
你真的会写单例模式吗-------Java实现
目录饿汉法单线程写法考虑线程安全的写法兼顾线程安全和效率的写法坑静态内部类法枚举写法总结参考资料转载: 你真的会写单例模式吗——Java实现单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好、用对单例模式,还真得费一番脑筋。本文对Java中常见的单例模式写法做了一个总结,如有错漏之处,恳请读者指正。饿汉法顾名思义,饿汉法就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建...转载 2018-07-10 10:58:18 · 88 阅读 · 0 评论 -
eclipse debug 多线程
以前用到过许多线程开发,对多线程开发也算是小有点心得,但一开始多线程开发的时候,碰到很多壁。但总得来说,有个好的工具总是能事半功倍。我用的工具是eclipse,在开发多线程时,其debug模式是能直接模拟多线程环境的,网上也有许多资料,但大多都不是很全。希望我能够将自己的一些心得记录下来,希望能帮助到还为多线程开发而纠结的朋友。先写个简单的多线程测试用例:package com.wxw.debug...转载 2018-07-10 17:21:17 · 120 阅读 · 0 评论 -
泛型通配符extends与super的区别
<? extends T>限定参数类型的上界:参数类型必须是T或T的子类型<? super T> 限定参数类型的下界:参数类型必须是T或T的超类型总结为:<? extends T> 只能用于方法返回,告诉编译器此返参的类型的最小继承边界为T,T和T的父类都能接收,但是入参类型无法确定,只能接受null的传入 <? super T>只能用...转载 2018-07-17 15:28:01 · 155 阅读 · 0 评论 -
什么是一致性Hash算法?
最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大家整理一下什么是Hash一致性算法,希望对大家有帮助!经常阅读我文章的小伙伴应该都很熟悉我写文章的套路,上来就是先要问一句为什么?也就是为什么要有Hash一致性算法?就像以前介绍为什么要有Spring...转载 2018-07-11 16:52:10 · 98 阅读 · 0 评论 -
几种常见的编码格式
为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定为英语,其它语言要能够...转载 2018-07-18 15:05:09 · 50025 阅读 · 0 评论 -
【深入理解JVM】:解析与分派
解析Java中方法调用的目标方法在Class文件里面都是常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用。(关于符号引用与直接引用,详见【深入理解JVM】:Class类文件结构)这种解析的前提是:方法在程序真正运行之前就有一个可以确定的调用版本,并且这个方法的调用版本在运行期是不可改变的,即“编译期可知,运行期不可变”,这类目标的方法的调用称为解析(Resolve...转载 2018-07-18 17:04:06 · 349 阅读 · 0 评论 -
【深入理解JVM】:Class类文件结构
概述我们平时在DOS界面中往往需要运行先运行javac命令,这个命令的直接结果就是产生相应的class文件,然后基于这个class文件才可以真正运行程序得到结果。自然。这是Java虚拟机的功劳,那么是不是Java虚拟机只能编译.java的源文件呢?答案是否定的。时至今日,Java虚拟机已经实现了语言无关性的特点。而实现语言无关性的基础是虚拟机和字节码的存储格式,Java虚拟机已经不和包括Jav...转载 2018-07-18 17:13:15 · 130 阅读 · 0 评论