- 浏览: 71462 次
- 性别:
- 来自: 北京
最新评论
-
shihengli2010:
赞!!!!
XSL Formatting Objects Tutorial (二) -
calosteward:
感谢楼主分享,我找的不是java代码,刚刚找到C# PDF c ...
PDF转图片
文章列表
http://www.ibm.com/developerworks/library/j-jtp0730/index.html
线程池的原理:
1. 内部维护若干个线程,这些线程一直保持运行/阻塞状态;
2. 维护一个队列,通过锁的方式让这些线程从队列中取任务;
3. 如果队列没有任务,则阻塞当前请求任务的线程;
4. 当有新的任务加入到任务队列时,唤醒与锁绑定的等待集中的线程
这就是线程池最基本的原理!
package thread;
import java.util.LinkedList;
public class WorkQueue {
p ...
Java core (上篇)
- 博客分类:
- Java
Java中的8种基本数据类型:
整型:byte (1字节),short(2字节),int(4字节),long(8字节)
浮点型:float(4字节),double(8字节)
字符型:char
布尔型:boolean
注意:
浮点数值不适用于禁止出现舍入误差的金融计算中!
如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类
常量
关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了!
如果希望某个常量可以在一个类中的多个方法中使用,则声明为静态的。
(public) static final int PI = ...
JPA---标准
EntityManager---实体管理器
Playframework 底层通过Hibernate对数据库进行操作,但是她对Hibernate进行了封装,提供了更好用的API。
大批量数据插入,关键:及时flush(刷新数据到数据库),接着clear(情况内存,防止溢出)
往数据库插入2W多条数据,基本上也就1分钟时间。
如果没有使用flush和clear,耗时会成倍增加。小心~
for(DvdRateConfig rate : set) {
System.out.println(i++);
if(i%200==0 ...
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>1.8.6</version>
</dependency>
先转换成多张图片,然后合并成一张。
package org.apache.pdf;
import java.awt.image.BufferedImage;
import java.io.File;
import ...
Quick Response
- 博客分类:
- Java
http://javapapers.com/core-java/java-qr-code/
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
< ...
BlockingQueue+线程池
- 博客分类:
- Java
A.使用阻塞队列存储任务:Runnable,Callable,FutureTask
B.线程池从队列取任务执行:put(),take()
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.Execution ...
一个方法不仅需要告诉编译器将要返回什么值,还要告诉编译器有可能发生什么错误。
异常处理正确的做法:
低层次的方法抛出异常,让高层次的方法去捕获异常并通告用户发生了错误
未检查(unchecked)异常:
派 ...
【Play】异常处理
- 博客分类:
- Play! Framework
【异常一、始终无法启动测试单元】
对Play而言,她只允许一个Java文件中包含1个类,或者嵌套类
如果1个Java文件中出现2个以上的类,就会报以下异常:
这可能跟Play及时编译源码运行有关
如果是app目录下某个Java文件中包含2个以上的类,则启动应用就会抛异常
如果是test目录下某个Java文件中包含2个以上的类,则启动测试单元就会抛异常
解决办法:
将类独立出来,不要放在1个Java文件中。
http://play.lighthouseapp.com/projects/57987/tickets/1379-unexpectedexcept ...
【设计模式】命令模式
- 博客分类:
- Design Pattern
命令模式:
通过订单实现服务员与厨师的完全解耦
服务员不关心订单的具体内容是什么,只需要将订单交给厨师即可
角色划分
订单:Command
服务员:Invoker
厨师:Receiver
使用命令模式可以实现工作队列,将接收到的命令放到BlockingQueue中
任务执行者从BlockingQueue中获取任务即可
package pattern.command;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlo ...
【设计模式】单例模式
- 博客分类:
- Design Pattern
* 一些场景需要确保只有唯一的对象存在,如:线程池、网络连接、缓存等
package pattern.singleton;
//饥饿式-多线程环境下仍然安全
public class Eager {
public static Eager instance = new Eager();
private Eager(){}
public static Eager getInstance() {
return instance;
}
}
//懒汉式-多线程环境下:每次方法调用都需要同步
class Lazy {
public sta ...
【设计模式】工厂模式
- 博客分类:
- Design Pattern
工厂模式
最核心的功能就是完成对象的创建;
该模式可以避免直接使用new操作符在客户端创建对象;
找出会变化的地方,将其从不变的代码中分离出来!
工厂模式的应用主要分以下4种:
一、静态工厂
通过静态方法返回对象。静态方法可以接收参数,然后根据传入的参数决定返回的对象。
二、简单工厂
将工厂组合到客户端,由客户端调用工厂来获取对象。
* 简单工厂与静态工厂的区别:
静态工厂的行为不会改变,而简单工厂则可以再派生出子类来覆盖创建对象的行为!
三、工厂方法
将对象的创建委托给子类某个方法,父类通过顶层接口引用该方法返回的实例对象。
...
【设计模式】装饰模式
- 博客分类:
- Design Pattern
装饰模式:
动态的将责任附加到对象上
对于扩展性而言,装饰模式比继承更具有弹性,因为装饰模式利用组合关系
关键地方:
让装饰者与被装饰者实现同一个接口,或者继承同一个抽象类,目的是为了让它们具有统一的类型
类型统一了,方法就可以接收所有的子类型,然后在运行时动态绑定到具体的子类对象上
===》接口:让装饰者与被装饰者具有统一的类型
package pattern.decorator;
public interface Food {
String description();
double cost();
}
package pattern.de ...
【设计模式】观察者
- 博客分类:
- Design Pattern
观察者模式:
当某个事件发生时,通知客户端进行响应,如监听器的原理,即可采用此模式来实现。
观察者对主题中某些属性的改变感兴趣,或者对某个事件的发生感兴趣。
这些变化将由主题通知观察者。
观察者需要先注册到主题中,只要注册到主题中,当事件发生时就会得到通知。
当不关心事件是否发生时,可以取消注册。
===》主题
package pattern.observer;
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer o ...
【设计模式】策略模式
- 博客分类:
- Design Pattern
策略模式
为了满足不同子类具有不同的行为而设计
而且,它可以提供行为/算法的互换,使行为具有可变性
而且,支持扩展新的行为而不影响原有的代码
Sample1:
package pattern.strategy;
/**
* 策略模式
* 实现一组可相互切换的行为类/算法簇
*/
public class StrategyExample {
public static void main(String[] args) {
int a = 1, b = 2;
Strategy originalStrategy = new Add();
...
【设计模式】一般性指导原则
- 博客分类:
- Design Pattern
使用某个设计模式先问自己3个问题:
1. 这个模式是干什么用的?
2. 不使用这个模式我会怎么做?
3. 用了这个模式我又会怎么做?可以带来哪些好处?
针对接口编程,而不是针对具体编程;
针对接口编程,利用多态,可以在运行时与任何(新)实现类进行绑定,以此达到“对修改关闭”的目的。
变化的地方使用接口进行引用,在运行时动态绑定到某个子类上;
多用组合,少用继承。
组合:持有基类引用,利用多态的特性在运行时动态绑定到具体子类上;
非公有的行为不要定义到基类中,而应该定义为接口,由需要的子类去实现;
由于接口不能提供代码复用,因此,可以预先 ...