自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Java升级攻略 启蒙进阶深入

驾八龙之婉婉兮 载云旗之委蛇

  • 博客(36)
  • 收藏
  • 关注

原创 Hibernate批处理实战

我们在用数据库时,如果可以批量插入或者更新数据,可以很大地提高使用数据库的性能。但是我在用Hibernate实现批处理的过程中,走了一些弯路。下面我就把我的整个配置过程和经验总结分享,希望可以帮助到后来人。

2016-04-29 17:04:48 4075

原创 Hibernate中如何用HQL进行模糊查询

和SQL查询一样,HQL也用like关键字进行模糊查询。模糊查询常用于当用户正在输入关键字时,就以该关键字开头去做查询。

2015-02-27 16:46:51 5623

原创 减少Jmeter系统资源占用的几个要点

最近在使用Jmeter来对web服务器进行性能测试。期间用Jmeter创建了测试脚本(TestPlan),测试时走了一些弯路,后来在Jmeter的官方手册上看到了如何减少Jmeter系统资源的占用以达到更好的测试效果的best practices。

2015-02-27 13:58:13 2062

原创 如何用Maven手动添加Linux环境下的JZMQ依赖库

JZMQ是ZeroMQ的Java binding库。我之前使用JZMQ都是直接在Maven库中找到最新的版本,然后添加到自己的project中。最近发现Maven中央库中的JZMQ一直停留在3.x的版本,而github上已经更新到了4.x。下面是我手动更新JZMQ Linux依赖库步骤

2015-02-25 09:57:13 875

原创 OCJP(310-065)精选笔记之-继承(Inheritance)

什么是继承每个Java的类都是Object这个类的子类Java不支持多继承。换句话说,一个类只能有一个直接的父类用继承的原因提高代码的复用率使用多态IS-A 关系在面向对象中,IS-A的概念是基于类继承和接口实现来说的在Java里,我们用关键字extends(类继承)或者关键字implements(接口实现)来说明ISHAS-A关系HAS-A的概念基于使

2015-02-10 21:06:46 384

原创 Java并发编程实践笔记之—线程封闭(Thread Confinement)

什么是线程封闭仅在单线程内访问数据,就不需要同步(可理解成“将对象封闭在线程中”)是实现线程安全性的最简单的方式之一应用1——Swing中大量使用了线程封闭技术。Swing的可视化组件和数据模型对象都不是线程安全的,Swing通过将它们封闭到Swing的事件分发线程中来实现线程安全性。Swing应用程序的许多并发错误就是由于错误地在另一个线程中使用了这些被封闭的对象应用2——JDBC的Co

2015-02-10 20:35:09 1165 1

原创 Java并发编程实践笔记之—不变性(Immutability)

不可变对象对象在创建后其状态就不能被改变,称为不可变对象对象的状态不会改变,那同步的问题和复杂性也就消失了简单,只有一种状态,是由构造函数来控制的安全,不会被恶意破坏,可安全的共享和发布不可变对象必须满足的条件:对象创建后其状态就不能修改对象的所有域都是final类型的对象是正确创建的(创建期间,this引用没有逸出)事实不可变对象(Effectively Immutabl

2015-02-10 20:34:11 561

原创 Java并发编程实践笔记之—并发容器(Concurrent Collections)

什么是并发容器Java5.0提供针对多个线程并发访问设计的改进同步容器的性能(同步容器将所有对容器状态的访问都串行化来实现线程安全,代价就是严重降低并发性)Queue用来保存一组待处理的元素几种实现:ConcurrentLinkedQueue, PriorityQueue, BlockingQueue(可阻塞,用在生产者-消费者模式中)Queue和List的关系:虽然可以用Li

2015-02-02 20:40:43 770

原创 Java并发编程实践笔记之—阻塞队列和生产者-消费者模式(Blocking Queues and the Producer-consumer Pattern)

BlockingQueue提供了可阻塞的put和take,和支持定时的offer和pollQueue可以是有界的或者无界的支持了生产者-消费者的设计模式,将两个过程解耦如果数据项添加队列失败,offer方法返回失败状态,这样可以创建更多灵活的策略来处理负荷过载的情况多种实现:LinkedBlockingQueue,ArrayBlockingQueue,PriorityBlockingQue

2015-02-02 20:38:19 507

原创 OCJP(310-065)精选笔记之-封装(Encapsulation)

我们创建类和代码,要有灵活性和可维护性封装的关键作用是:——在改变你自己的具体实现时,不会影响使用你的代码的人写的代码,也就是说,你的改变对别人是透明的。那如何向别人隐藏你的具体实现呢:——用一个public的接口。通过接口,你告诉别人可以通过哪些可用的method来用你的代码。如何具体做到封装呢:用private(通常是)等访问控制修饰符来保护你的实例变量创建publ

2015-02-02 20:31:52 361

原创 Java并发编程实践笔记之——用锁来保护状态(Guarding State with Locks)

什么是用锁来保护状态对于可能被多个线程同时访问的可变状态变量,在访问它时(不仅仅是写入的时候)都需要持有同一个锁。这种情况下,我们称状态变量时由这个锁来保护的内置锁许多线程安全类使用的加锁模式是,将可变状态都封装在对象内部,并通过对象的内置锁对所有访问可变状态的代码进行同步每个对象都有一个内置锁,只是为了免去显式地创建锁对象为什么不在每个方法声明中加synchronized

2015-02-02 10:24:49 454

原创 Java并发编程实践笔记之——活跃性和性能(Liveness and Performance)

将整个方法加synchronized,每次只能有一个线程执行,在服务器负载过高的情况下用户的请求要排队等待处理(比如要做长时间的计算),给用户带来糟糕的体验。也就是并发性差而且仍会有CPU处于空闲状态缩小同步代码块的范围尽量将不影响共享状态且执行时间较长的操作从同步代码块中分离出去,一定不要持有锁如果使用了同步代码块,就不要再重复使用AtomicLong之类的原子变量,使用两种

2015-02-02 10:23:36 468

原创 Java并发编程实践笔记之-什么是线程安全

线程安全的定义核心是正确性定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的线程安全类中封装了必要的同步机制,所以客户端无须进一步采取同步措施无状态(stateless)的对象一定是线程安全的什么是无状态:不包含任何field,也不包含任何对

2015-02-02 10:14:31 324

原创 OCJP(310-065)精选笔记之-类构造体声明(Constructor Declaration)

类构造体的关键点如下:构造体绝对不能也不会有返回类型(return type)可以用所有的访问控制修饰符可以有输入参数(包括可变长参数)和它所在的类必须有完全一样的名字不能用static,final或者abstract这几个非访问控制修饰符下面用例子说明:[code lang="java"]class Foo2 {//合法的Foo2() {}private Foo(byte

2015-02-02 10:09:42 451

原创 OCJP(310-065)精选笔记之-JavaBeans标准

JavaBeans规范帮助Java开发者如何定义Java模块或者说Java API给别的开发者使用。

2015-01-30 09:33:13 503

原创 Java并发编程实践笔记之—线程

线程的优势多处理器以成为趋势,而单线程只利用了一个处理器,所以线程可以发挥多处理器的强大能力;同时在单处理器上可以提高吞吐率,比如一个线程等待I/O完成,另一个线程可继续运行用线程可以简化建模,可以为每种类型的任务分配一个专门的线程,复杂异步的工作流分解成一组简单且同步的工作流,每个工作流在一个线程中运行线程简化了异步事件的处理,比如服务器应用程序(application

2015-01-28 21:10:28 284

原创 Java并发编程实践笔记之-并发简史

计算机中加入操作系统,使多程序在单独的进程中同时执行成为了可能,目的有:提高资源的利用率通过时间分片使用户和程序公平第分享计算机资源编写多个程序完成多个任务比写一个程序完成所有任务要容易这些因素同样也促使了线程的出现:又称轻量级线程大多数现代操作系统都是以线程为基本调度单位的每个线程有各自的程序计数器,栈和局部变量同一个进程中的所有线程都共享进程的内存地址空间,所以能访问相同的

2015-01-28 21:09:50 315

原创 Java NIO之—什么是I/O?

本笔记来自《Java NIO》(译本,来自互联网)和原著《Java NIO》(Ron Hitchens,O'Reilly)。更详细的内容请参考这两本书。先谈谈现状程序员往往热衷于调试代码,优化处理效率,而不关注I/O的性能实际上,I/O效率的提升相比处理时间的优化反而可能大大提升吞吐率(Throughput)现代的JVM优化已经做得非常好了,这意味多数Java 应用程序已不再受CPU的

2015-01-28 21:07:30 515

原创 OCJP(310-065)精选笔记之-多态(Polymorphism)

多态定义:任何一个可以通过IS-A测试的对象就认为是它是多态的所以说,任何类都是多态的,因为它们可以通过自己和Object类的IS-A测试关于引用(reference variable)的关键点引用可以是任何类型,一旦创建,就不能更改其类型(它所引用的对象可以变)引用是一个变量,所以可以被赋新的对象,除非引用是final引用的类型决定了有哪些方法可以被调用一个引用变量可以指向任

2015-01-28 21:04:07 382

原创 Java并发编程实践笔记之——原子性(Atomicity)

竞态条件(Race Condition)++count这个操作是紧凑的语法,但并非原子的,包含了三个独立的操作(读取-修改-写入)由于不恰当的执行时序而出现不正确的结果(或者说计算结果的正确性取决于线程的交替执行顺序),这种情况称为竞态条件一种典型的竞态条件——“先检查后执行”首先观察到某个条件为真,然后根据这个条件做相应的动作,但事实上,在观察这个条件和做动作直接,观察的条件变为假了

2015-01-28 21:03:00 784

原创 Java并发编程实践笔记之——加锁机制(Locking)

多个状态变量的一致性保持当线程安全的不变性条件中涉及多个变量时,并且各个变量之间不是彼此独立,某个变量对其他变量的值产生约束。那当更新一个变量时,要在同一个原子操作中更新其他的变量内置锁(Intrinsic Locks)Java提供了同步代码块(Synchronized Block)这种内置锁机制来支持原子性每个Java对象都可以用作一个实现同步的锁,被称为内置锁或者监视锁内置

2015-01-28 21:02:28 458

原创 Java并发编程实践笔记之—可见性(Visibility)

同步的重要性有两个方面:实现原子性:防止某个线程正在使用对象状态而另一个线程同时在修改改状态内存可见性:确保一个线程修改了对象状态后,其他线程能够看到发生的状态变化失效数据缺乏同步的程序可能会产生的一种错误情况就是——失效数据失效数据举例//在没有同步的情况下共享数据public class NoVisibility { private static boolean

2015-01-28 21:00:08 1506 1

原创 Java并发编程实践笔记之—发布和逸出(Publication and Escape)

什么是发布对象——使对象在当前作用域之外的代码中使用什么是逸出——当某个不应该发布的对象被发布时对象如何逸出的最简单的方法是将对象的引用保存到一个公有的静态变量中当发布某个对象时,可能会间接地发布其他对象。如果将一个对象添加到被发布的集合对象中,那么同样会发布这个对象当发布一个对象时,在该对象的非私有域中引用的所有对象同样会被发布;或者说当把一个对象传递给某个外部方法时,就

2015-01-28 20:58:42 1255

原创 Java并发编程实践笔记之—安全发布(Safe Publication)

安全地共享对象前面几节讲的都是如何确保对象不被发布。但是在某些情况下我们希望在多个线程间共享对象,此时必须确保安全地进行共享可变对象必须通过安全的方式来发布要安全地发布一个对象,对象的引用以及对象的状态必须同时对其他线程可见,一个正确构造的对象可以通过以下几种的方式来安全发布这个例子是一个不安全的发布,由于存在可见性问题,其他线程看到Holder对象处于不一致的状态// 不安全的发布

2015-01-28 20:57:11 1080

原创 Java并发编程实践笔记之—同步容器类(Synchronized Collections)

什么是同步容器类包括Vector和Hashtable(早期JDK的一部分)由Collections.synchronizedXxx等工厂方法创建的实现方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态(下节将看到并发容器不是这么做的)某些情况下需要额外的客户端加锁来保护符合操作迭代(遍历容器中的元素)(书中的例子5-3,5-4)跳转条件运

2015-01-28 20:56:06 339

原创 Java并发编程实践笔记之—阻塞和中断方法(Blocking and Interruptible Methods)

线程阻塞线程阻塞或者暂停执行的原因等待I/O操作结束等待获得一个锁等待从Thread.sleep中醒来等待另一个线程的计算结果线程阻塞时的状态BLOCKEDWAITINGTIMED_WAITING阻塞操作和执行时间很长的普通操作差别在于:被阻塞的线程必须等待某个不受它控制的事件发生后才能继续执行,线程被置回RUNNALBE状态,并可以再次被调度执行

2015-01-28 18:03:03 491

原创 OCJP(310-065)精选笔记之-枚举(Enum)

枚举要点如下:枚举限制一个变量只能赋予预先定义的一些值枚举常量要大学,非强制但是符合代码规范枚举可以声明为单独的类(outside a class),或者为类的一个成员(in class)。但是不能在一个方法中声明枚举。枚举声明结束是否用分号是可选的每个枚举都要一个静态(static)方法——values()。这个方法返回枚举值的数组(按值被声明的顺序)枚举是一种特殊的类,所以可以添加进构

2015-01-28 17:24:58 406

原创 OCJP(310-065)精选笔记之-变量声明 (Variable Declaration)

Java里有两种类型的变量主数据类型变量(Primitive):8种引用变量(Reference variables):可以指向声明某个类型或者其子类型(compatible type)的的任何对象PrimitiveAll six number types are signed.The leftmost bit (the most significant digit) isus

2015-01-28 17:23:25 731

原创 OCJP(310-065)精选笔记之-非访问控制修饰符 (Nonaccess Method Modifiers)

FinalFinal关键字防止method在子类中被覆盖(overridden),通常用在增强API method的功能性(即不能随意更改其特定作用,比如String的method)Abstract被修饰了abstract的method没有花括号{},但是有分号(函数体就是一个分号)abstract类可以包含non-abstract method,但是non-abstract类

2015-01-28 17:21:37 389

原创 OCJP(310-065)精选笔记之-访问控制修饰符 (Access Modifiers)

类成员和变量使用4种访问控制修饰符(access modifiers)publicprotecteddefaultprivate首先,你得理解两种不同类型的访问情形一个类里的方法是否可以访问另一个类的成员——用点操作符 (.)调用方法或者变量子类是否可以继承父类的成员——如果子类可以继承该成员,那子类就相当于拥有了它小提示:虽然说实例变量总是允许使用public,但实际上,

2015-01-28 17:20:42 548

原创 OCJP(310-065)精选笔记之-声明接口(Declare Interface)

一个接口就意味着一份合约。An interface is a contract.接口定义了这个类可以做什么,但是没有定义类具体会做什么。

2015-01-28 17:19:30 938

原创 OCJP(310-065)精选笔记之-声明类(Declare Class)

先来看看在一个代码源文件里各类声明规范类声明规范:一个文件只能有一个public class一个文件可以没有public class,但可以有多个nonpublic class文件名必须和唯一的public class名字相同如果没有public class,文件名可以另外取Import package必须在第一行如果有import class,它必须在import packa

2015-01-27 09:46:46 945

原创 OCJP(310-065)精选笔记之-Java语言编码规范(Code Conventions)

Sun公司(现在的Oracle)创建了一套Java的编码规范,命名为“Java Code Conventions”。你可以在Oracle的网站上找到(http://www.oracle.com/technetwork/java/codeconvtoc-136057.html)在OCJP考试中主要碰到的是命名规范("naming standards")

2015-01-27 09:37:13 537

原创 OCJP(310-065)精选笔记之-标识符(Identifiers)

标识符规则:必须以字母,$, 或者下划线_开头, 不能是数字!实际使用中,没有长度限制不能使用Java的关键字(Keyword)大小写敏感具体完整的Java关键字请参考下面这张表:

2015-01-27 09:35:57 436

原创 OCJP认证教程(310-065)精选笔记之-目录

OCJP全名是 Oracle Certified Professional, Java SE Programmer,就是原来的SCJP。我看的是《SCJP Sun Certified Programmer for Java 6(Exam 310-065)》这一本书。这仍然是一本入门全面掌握java的好书,虽然它不是给完全不懂Java的人准备的,而是为了让你通过这个认证准备的。这份笔记记

2015-01-27 09:33:20 559

原创 博客搬家

因为不会,也没时间倒腾我的WordPress独立博客,上线几个月了也只有垃圾评论。所以决定从今天开始把博客挪到这里,继续分享我自己总结的读书笔记,经验教训,工作札记等等。

2015-01-27 09:13:15 250

空空如也

空空如也

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

TA关注的人

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