
Java
文章平均质量分 79
yidao620
这个作者很懒,什么都没留下…
展开
-
字符编码笔记:ASCII,Unicode和UTF-8
1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出 256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字...原创 2009-03-27 09:23:22 · 105 阅读 · 0 评论 -
《effective java》之九:并发
第66条:同步访问共享的可变数据:使用volatile可以在两个线程中通信public class StopThread { private static volatile boolean stopRequested; public static void main(String[] args) throws InterruptedException { Thread...2013-04-04 00:45:36 · 96 阅读 · 0 评论 -
《effective java》之十:序列化
第74条:谨慎地实现Serializable接口: 第75条:考虑使用自定义的序列化形式: public final class StringList implements Serializable { private transient int size = 0; private transient Entry head = null; // No longe...2013-04-04 04:17:59 · 97 阅读 · 0 评论 -
《Java并发编程》之一:对象的共享
====不可变对象定义:====1,对象创建后其状态不能修改2,对象所有域都是final的3,对象时正确创建的,在对象构造期间,this引用没有逸出 ====安全发布对象的含义:====确保使用对象的线程能够看到该对象处于已发布的状态,是对象的状态呈现一致性视图。安全发布对象的常用模式:可变对象必须通过安全的方式来发布,通常意味着发布和使用该对象的线程都必须使用...原创 2013-04-20 11:36:19 · 127 阅读 · 0 评论 -
《Java并发编程》之二:对象的组合
当对象下一个状态需要依赖当前状态时,这个操作必须是一个复合操作。并非所有操作都会在状态转换上施加限制,比如直接更新字段,以赋值形式,典型的就是javabean的get/set方法。如果在一个不变性条件中包含多个变量,那么在执行任何访问相关变量的操作时候,都必须持有保护这些变量的锁。 下面的PersonSet说明了如何通过实例封闭与加锁机制使一个可变对象或者线程不安全对象成为一个线程...2013-04-20 17:03:03 · 101 阅读 · 0 评论 -
《Java并发编程》之三:基础构建模块
将线程安全性委托给现有的线程安全类,委托时创建线程安全类一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。 5.1 同步容器类早起JDK的同步容器类包括Vector和Hashtable等,这些同步封装器类是由Collections.synchronizedXxx等工厂方法创建的。同步容器类的问题是,但有复合操作:迭代、跳转、条件运算的时候,如果有其他线程并发地修改容...2013-04-21 12:01:04 · 109 阅读 · 0 评论 -
《Java并发编程》之四:Executor框架
ExecutoreService增加了生命周期的管理,有三种状态:运行、关闭、已终止。public class LifecycleWebServer { private final ExecutorService exec = Executors.newCachedThreadPool(); public void start() throws IOExceptio...2013-04-26 21:42:58 · 121 阅读 · 0 评论 -
《Java并发编程》之五:取消和关闭线程
Java没有提供任何机制来安全地终止线程,虽然Thread.stop和suspend等方法提供了这样的机制,但是存在严重的缺陷,应该避免使用这些方法。但是Java提供了中断Interruption机制,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。这种协作方式是必要的,我们很少希望某个任务线程或者服务立即停止,因为这种立即停止会时某个共享的数据结构处于不一致的状态。相反,在编写...2013-04-29 11:13:25 · 238 阅读 · 0 评论 -
《Java并发编程》之六:线程池的使用
8.1 在任务与执行策略之间的隐形耦合有些类型的任务需要明确指定执行策略,包括:依赖性任务、使用线程封闭机制的任务、对响应时间敏感的任务、使用ThreadLocal的任务。只有当任务都是同类型的并且相互独立时,线程池的性能才能达到最佳。 8.1.1 线程饥饿死锁public class ThreadDeadlock { ExecutorService ex...2013-04-30 12:04:22 · 125 阅读 · 0 评论 -
《Java并发编程》之七:避免活跃性危险
如果所有线程以固定顺序来获取锁,那么在程序中就不会出现锁顺序死锁问题。通过锁顺序来避免死锁:public class InduceLockOrder { private static final Object tieLock = new Object(); public void transferMoney(final Account fromAcct, ...2013-05-01 13:19:14 · 118 阅读 · 0 评论 -
NIO笔记-缓存器细节
用缓存器操纵数据:Buffer由数据和可以高效访问以及操纵这些数据的四个索引组成,这四个索引是:mark、position、limit、capacity。下表是用于设置和复位索引以及查询它们的方法:capacity()返回缓存区容量clear()清空缓存区,position=0,limit=capacity,此方法可覆写缓存区flip()limit=po...2013-06-14 22:27:05 · 116 阅读 · 0 评论 -
Lambdas & Streams in Java8
2014年3月18日,Oracle终于发布Java8正式版。在新的版本里面加入了很多特性,总共增加了55个新特性,其中最最吸引人的就是Lambdas表达式和Stream函数式编程,本文详细讲解这两个特性。其他特性比如日期API,泛型,反射,注解,集合框架,并发,Nashorn引擎等等这里暂时就不详细介绍了。具体可以参考:http://openjdk.java.net/projects/jd...原创 2014-05-07 14:31:10 · 151 阅读 · 0 评论 -
《JVM笔记》之一:Java内存区域与内存溢出异常
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。按照《Java虚拟机规范(第2版)》的规定,Java虚拟机所管理的内存将包括以下几个运行时数据区域,来个图更加直观点,如下图所示: 解释下各个部分 程序计数器:Program Counter Register是一块较小的内存空间,它的作用可以看做是当前线程所执行的字...原创 2013-09-27 19:59:14 · 287 阅读 · 0 评论 -
《JVM笔记》之二:垃圾收集器与内存分配策略
引用计数算法:判定一个对象是否还存活,一个比较简单的算法就是引用计数算法。比较著名案例就是微软的COM技术、使用ActionScript 3的FlashPlayer、Python语言以及游戏脚本中的Squirrel都利用这个算法进行内存管理。但是Java中并没有使用这项技术,主要原因是循环引用问题。 根搜索算法:在主流的商用程序语言中,包括Java、C#、Lisp等都使用的是根...原创 2013-09-27 19:59:45 · 140 阅读 · 0 评论 -
《effective java》之八:异常
第57条:只针对异常情况才使用异常: 第58条:对可恢复的情况使用受检异常,对编程错误使用运行时异常: 第59条:避免不必要地使用受检异常: 第60条:优先使用标准异常: 第61条:抛出与抽象相对应的异常: 第62条:每个方法抛出的异常都要有文档: 第63条:在细节消息中包含能够捕获失败的信息: 第64条:努力使失败保持原子性: ...2013-04-04 00:35:01 · 102 阅读 · 0 评论 -
《effective java》之七:方法
第45条:将局部变量的作用域最小化:几乎每个局部变量声明都应该包含一个初始化表达式。这个有个例外,就是try catch,在try的外部定义,然后在try里面初始化。 第46条:for-each循环优先于传统的for循环: 第47条:了解和使用类库: 第48条:如果需要精确的答案,请避免使用fload和double:float和double执行二进制浮点运算 b...原创 2013-04-04 00:09:51 · 111 阅读 · 0 评论 -
java十大杰出人物
James Gosling : Java之父作为Java之父,James Gosling的名字可谓是耳熟能详。当人们评论一种编程语言时,总喜欢捎带着把下蛋的母鸡一起带上。Java做为中国的编程语言学习者餐桌上有限的那么几样餐点中的流行款式,自然是让James Gosling风光不已。虽然James Gosling现在已经不是领导Java发展潮流的领军人物了,做为Sun的开发者产品组的C...原创 2009-03-27 09:24:58 · 413 阅读 · 0 评论 -
Eclipse中可视化开发Swing桌面程序
由于在Swing的可视化方面一直都是Netbeans的天下,有位热心人写了个开源Eclipse插件,用过后发现不错。代码位置: http://code.google.com/p/visualswing4eclipse/ 使用的是EPL v1.0授权方式。照顾商业利用和开源改进而采用此授权。目前支持的Eclipse平台是3.4,JDK请使用1.6目前最新版本0.9.12。期待1.0的到...2010-03-02 13:54:41 · 489 阅读 · 0 评论 -
开源自由与免费博弈
一,什么是开源软件?什么是自由软件?什么是免费软件? 很多人经常把开源软件和自由软件混为一谈,也常常会有人把开源软件和免费软件这两个概念混淆在一起,其实当我第一此站在HUSA的讲台上的时候,自己对开源的了解,也只是狭隘的定位为:免费的,公开源代码的。也难怪会会被下面的高人嘲笑自己对开源的理解太肤浅了。 好啦,下...原创 2011-01-18 12:46:33 · 151 阅读 · 0 评论 -
Java开源建站工具
美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单。他的语言平台是Java,开发项目是一个网站(还未上线)。所用到的工具都是开源的,可以免费得到。在目前的创业者之中,用Java作为网站开发语言的人似乎很少。这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事。但是不可否认的是,Java的平台很成熟,各种工...原创 2011-10-06 20:47:59 · 98 阅读 · 0 评论 -
最快排序和搜索算法的最简代码实现
快速排序算法和二分搜索算法算法主要分为排序算法、搜索算法、图算法。图算法我用得不多,没有发言权,本文就不说了。排序算法中最快的是快速排序算法,搜索算法中最快的是二分搜索算法。我也最喜欢这2 个算法。因为,它们是使用递归实现的,代码简洁清晰,效率又非常高。根据我的理解,算法的本质就是数学。根据输入和设定的目标,采用有限的步骤实现输出。通常,使用计算机实现的算法,都会用到循环,这样...原创 2012-02-13 19:28:28 · 159 阅读 · 0 评论 -
关于java中的回调函数
最近学习内部类的时候,对java实现回调函数机制有了进一步了解,自己整理点比较,希望大家可以相互讨论。所谓回调,就是允许客户类通过内部类引用来调用其外部类的方法,这是一种非常灵活的功能。由于java暂时还不能显示支持闭包(Closure),不过听说新版可以支持了,不过我还没用过。现在暂时用的是非静态内部类实现回调功能。情形一:假设有一个老师Teacher对象,平时的工作是上课,周末的工作在...2013-03-26 20:40:36 · 107 阅读 · 0 评论 -
《effective java》之一:创建和销毁对象
第1条:考虑用静态工厂方法代替构造器: public class Services { private Services() { } // Prevents instantiation (Item 4) // Maps service names to services private static final Map<String, Provider>...2013-03-26 21:04:10 · 121 阅读 · 0 评论 -
《effective java》之二:对于所有对象都通用的方法
第8条:覆盖equals时请遵守通用约定: 以下四种情况,默认实现正是所期望的结果:* 类的每个实例本质上是唯一的。* 不关心类是否提供了逻辑相等的测试功能* 超类已经覆盖了equals方法,继承过来的子类同样适用的* 类是私有的或者包级私有的,可以确定它的equals方法永远不会被调用,那么请覆盖这个equals方法:@Override public boolea...原创 2013-03-27 22:27:07 · 159 阅读 · 0 评论 -
《effective java》之三:类和接口
第13条:使类和成员的可访问性最小化:实例域决不能是公有的。如果域是非final的,或者指向的是一个可变对象的final引用,那么一旦这个实例域变成公有,这个公有域就不是线程安全的了,很有可能出问题。 第14条:在公有类中使用访问方法而非公有域 第15条:使可变性最小化:为了使类成为不可变,遵循下面5条原则:* 不要提供任何会修改对象状态的方法 mutator*...2013-03-27 22:46:07 · 100 阅读 · 0 评论 -
《effective java》之四:泛型
第23条:请不要在新代码中使用原生态类型:Set<Object>是个参数化类型,表示可以包含任何对象的一个集合;Set<?>则是一个通配符类型,表示只能包含某种未知对象类型的一个集合,既不能从里面拿到一个元素去赋值,也不能增加一个元素,可以删除。 第24条:消除泛型的非受检警告 unchecked warning:如果无法消除警告,同时可以证明引起警告的...2013-03-30 23:45:51 · 104 阅读 · 0 评论 -
Google Guava Collections 使用介绍
Google Guava Collections 使用介绍Google Guava Collections(以下都简称为 Guava Collections)是 Java Collections Framework 的增强和扩展。每个 Java 开发者都会在工作中使用各种数据结构,很多情况下 Java Collections Framework 可以帮助你完成这类工作。但是在有些场合你使用...原创 2013-03-31 20:26:16 · 224 阅读 · 0 评论 -
《effective java》之五:枚举和注解
第30条:用enum代替int常量:public enum Operation { PLUS("+") { double apply(double x, double y) { return x + y; } }, MINUS("-") { double apply(double x, double y) { return x - y; ...2013-04-03 11:48:01 · 141 阅读 · 0 评论 -
《effective java》之六:方法
第39条:必要时进行保护性拷贝: 第40条:谨慎设计方法签名:避免过长的参数列表,目标是四个参数或者更少,如果多于四个了就该考虑重构这个方法了。三种方法可以缩短过长的参数列表:①,把方法分解成多个方法,每个方法只需要参数的一个子集,不推荐。②,创建辅助类helper class,用来保存参数的分组。这些辅助类一般为静态成员类。③,从对象构建到方法调用都采用Build...原创 2013-04-04 00:09:33 · 124 阅读 · 0 评论 -
fastjson对Date的处理
对日期的序列化:一种方法是通过注解@JSONField (format="yyyy-MM-dd HH:mm:ss")public Date birthday;另一种是通过SerializeConfig:private static SerializeConfig mapping = new SerializeConfig();private static String ...原创 2014-03-26 13:55:03 · 4744 阅读 · 0 评论