随笔分类 - JAVA
Java Singleton Implementation
摘要:概述Java中单例模式的实现有多重方法, 要实现单例模式主要的问题是线程安全问题以及对Lazy Load的考虑,主要有如下几种双重锁定懒加载单例预加载单例枚举单例双重锁定懒加载单例模式/** * 双重锁定懒加载单例实现 * * @author zhenwei.liu created on 2013 ...
阅读全文
Chapter 1 -- UsingAndAvoidingNull
摘要:"Null sucks."-Doug Lea"Null 很恶心!""I call it my billion-dollar mistake."-Sir C. A. R. Hoare, on his invention of the null reference"我称它为我的十亿美元错误"Using and avoiding null 使用和避免nullCareless use ofnullcan cause a staggering variety of bugs. Studying the Google code
阅读全文
Java Reference
摘要:概述Java中一共有四种Reference, 其中 SoftReference, WeakReference, PhantomReference内有一个Referent和ReferenceQueueReferent: 被引用对象RefernceQueue: 当引用的Referent被回收后该引用会被enqueue到这个ReferenceQueue中一个对象可以同时拥有多种引用, 可以通过Reference.get()方法获取ReferentStrongReference (强引用)强引用时Java中使用得最多的引用, 我们使用的普通引用就是Java强应用例如Object o = new Obj
阅读全文
FinalizableReference, FinalizablePhantomReference, FinalizableReferenceQueue
摘要:FinalizableReference/* * Copyright (C) 2007 The Guava Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * *
阅读全文
Guava Finalizer
摘要:/* * Copyright (C) 2008 The Guava Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable la
阅读全文
Reader 与 Guava MultiReader
摘要:Reader是Java IO体系里字符处理读取流的基本类,代码如下/* * %W% %E% * * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.io;/** * Abstract class for reading character streams. The only methods that a * subclass must .
阅读全文
Java Type Inference (类型推断)
摘要:public class Test2 { public static void main(String[] args) { ArrayList list = newArrayList(); list.add("k"); list.add("b"); System.out.println(list.getClass()); // 这一句编译是不会通过的,因为编译器对pick()返回值的推断是Serializable或Comparable类型 // 亦即 String "a", list 这两个参数共同继承的...
阅读全文
Guava Files 源码分析(二)
摘要:createTempDir()之后就没有什么有意思的函数了,基本上都是对Java IO函数操作的聚合,只看一个simplifyPath() /** * Returns the lexically cleaned form of the path name, usually (but * not always) equivalent to the original. The following heuristics are used: * * * empty string becomes . * . stays as . * fol...
阅读全文
Guava Files 源码分析(一)
摘要:Files中的工厂Files类中对InputStream, OutputStream以及Reader,Writer的操作封装了抽象工厂模式,抽象工厂是InputSupplier与OutputSupplier,具体工厂是Files中的newInputStreamSupplier(),newOutputStreamSupplier()等方法而InputStream, OutputStream以及Reader,Writer则是抽象产品, 他们的各种实现和装饰器包装则为具体产品Input与Output工厂Files中将Input与Output(包括InputStream,OutputStream和Re
阅读全文
观察者模式与Guava EventBus
摘要:观察者模式结构图代码实现public abstract class Subject { private List observerList = new ArrayList(); /** * 注册观察者 * @param observer */ public void register(Observer observer) { observerList.add(observer); } /** * 注销观察者 * * @param observer */ public void unregi...
阅读全文
Guava 源码分析之 Beta, GwtCompatible, GwtIncompatible, Charset, HashCode
摘要:com.google.common.annotations.Beta/** * 表明一个公用API的未来版本是受不兼容变更或删除限制的 * 拥有这个注释标志的API不受任何兼容性保证 * */@Retention(RetentionPolicy.CLASS)@Target({ ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})@Documented@Gwt...
阅读全文
Java IO的简单示例
摘要:File类示例public class FileUsageTest { private static void usage() { System.err.println("Usage: FileUsageTest path1 ... \n" + "Creates each path\n" + "Usage: FileUsageTest -d path1 ...\n" + "Deletes each path\n" + "Usage: FileUsageTest -r path1 path2\n"
阅读全文
从volatile说到i++的线程安全问题
摘要:简介volatile关键字保证了在多线程环境下,被修饰的变量在别修改后会马上同步到主存,这样该线程对这个变量的修改就是对所有其他线程可见的,其他线程能够马上读到这个修改后值.Thread的本地内存每个Thread都拥有自己的线程存储空间Thread何时同步本地存储空间的数据到主存是不确定的例子借用G...
阅读全文
乐观锁与悲观锁
摘要:假如有一个购买行为事务,我们更需要去跟新数据库update item set amount = amount - 1 where item_id = 1;然而当amount只有1个的时候,同时有两个顾客进入了事务进行购买行为会如何,最后amount=-1,两个顾客都获得了这个商品,这显然不合理而使用乐观锁和悲观锁的解决方案可以如下:1. 乐观锁1) 概念: 在执行修改操作时不判断是否存在冲突,而是到了操作完成后再判断是否存在冲突,如有冲突则回滚2) 适用情况: 一般适用于回滚代价低,且冲突较少的情况.3) 优点: 执行操作时不会造成阻塞4) 缺点: 如果冲突较多,将造成较多的回滚操作5) 实现
阅读全文
SimpleDateFormat的线程安全问题与解决方案
摘要:1. 原因SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日期相关String, Date等等, 都是交友Calenda...
阅读全文
手动项目发布流程
摘要:1. 申请建立数据库2. 使用rz将war打包到跳板机3. 使用scp将war传到开发机4. 在 /home/q/www 里复制项目模板带自定义文件夹testproject5. 修改testproject里的conf/server.xml里面的server shutdown port和connector port6. 使用 /home/q/tools/bin/start_tomcat.sh /home/q/www/testproject 来启动项目7. 完工
阅读全文
Maven 命令速记
摘要:1. 创建项目1) 创建父目录mvn archetype:generate -DgroupId=com.qunar.training -DartifactId=training -Dversion=1.0.0 -DinteractiveMode=false -DarchetypeGroupId=or...
阅读全文
MyBatis+Spring SQL效率测试报告
摘要:1. 数据库结构2. insert 测试insert 的测试包括1) 批量拼接values()插入2) 有事务for循环插入3) 无事务for循环插入测试 SQL: ( #{post.title}, #{post.content}, #{post.author}, #{post.status}, #{post.created} ) 测试代码...
阅读全文
Java NIO
摘要:Java NIO 是Java新的IO类库(相对于旧IO来说),它的目的是提高速度.虽然旧IO已经使用NIO重新实现过,但是显示使用NIO对于文件IO和网络IO的速度还是有很大提升.NIO的体系结构比较简单,主要围绕的是FileChannel和ByteBuffer来使用FileChannel相当于IO...
阅读全文
Endianess(字节次序)简介
摘要:1. 基础在解释Endianess前,需要先明白几个基础定义1) 数据的高位与低位是什么以1001001为例,则从左边算起是 高位 -> 低位, 简而言之就是左边是高位,右边是低位而内存中一般来说是以字节为单位来表示数据,所以对于数字 int 型 0x12345678 来说如下2) 多字节数据在内存中的存储地址表示一般来说我们表示某个数据的内存地址都是取它的内存地最低位置地址表示,例如a = 0x1234567占据了内存的地址0x100,0x101,0x102,0x103四个字节,则a的内存地址为0x1002. Endianess的定义Endianess指的是字节在在内存中的存储次序,一
阅读全文
浙公网安备 33010602011771号