使用java.util.concurrent.ThreadFactory类创建线程
工厂设计模式是Java中最常用的设计模式之一。它是一种创建型设计模式,能够用于创建一个或多个类所需要的对象。有了这个工厂,我们就能集中的创建对象。
继续阅读 »
之前看龙书的时候,龙书提到可以在编译器里用动态的生成的NFA自动机来动态匹配自己的输入串,NFA的简单实现其实写起来非常简单,但是我是实际凭感觉写完之后,却觉得并不是非常的好用,在处理自己已经输入过的串,如果还要处理空串和一个符号对应多种路径就势必涉及回溯,所以我就动态生成了一个DFA,应该不是最简的,但是也能满足需求。
DFA状态
``` java
package sample;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Dfa 状态
*
* @author
继续阅读 »
本文给出了五种自然段落的组合方式,具体形式参见底部给出的链接,无积分下载,不管各个段落形式如何,只要段落之间存在换行分隔,该程序即可正确运行。在此提供两种切分段落的方法,分别见下面的法一和法二。
法一:
```java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
ClassName SplitParagr
继续阅读 »
Lock是java.util.concurrent.locks包下的接口。
Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题。
锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂。因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字(这说的是Java 5之前的情况)。
自Java 5开始,java.util.concurrent.locks包中包含了一些锁的实现,因此你不用去实现自己的锁了。但是你仍然需要去了
继续阅读 »
前几天去一个公司参加面试遇到这个问题,Java中Collection和Collections的区别,当时不会,回来从网上找到,现在记录一下。
1、java.util.Collection 是一个 集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack└Set
2、java.util.Collections 是一个包装类。它包含有各
继续阅读 »
这里介绍一些gulp比较常用的插件,包括util工具类、stream相关、inject相关、Angular相关、压缩工具类、server相关、特定语言相关等。
more
util工具类
这个分类下主要介绍一些辅助工具类的插件。
继续阅读 »
java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型。
Java.io.BufferedReader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本。
下面是两个类的不同之处:
当nextLine()被用在nextXXX()之后,用Scanner类有什么问题
尝试去猜测下面代码的输出内容;
// Code using Scanner Class
import java.util.Scanner;
class Differ
{
public static void main(String args[])
{
继续阅读 »
使用git的同学是不是经常纠结于在开发过程中是应该频繁提交,
还是仔细构造提交点之后再提交?
前者可以让开发更流畅,不必打断思路,但会造成提交历史无法浏览;
后者可以构造漂亮易懂的提交历史,但码码时停下来考虑commit message
怎么造句是不是太影响情绪了。
继续阅读 »
很高兴,阿里开源了其内部的Java开发手册,简单点说这是一本Java开发规范,比方说以前我一直在纠结工具类的命名到底是以utils结尾还是以util结尾,那同样地,工具类的包名是以utils结尾还是以util结尾呢?在这本电子书里就给出了很好的说明。再比如定义数组的时候,我们可以这样String strs[] = new String[5];也可以这样String[] strs = new String[5];,到底哪种方式更好呢?显然是后一种,后一种明确的指定了我们所定义的变量是String[]类型。也许你会说,这些都是小问题并不影响我开发,是的,问题不大,但是规范漂亮的代码看起来难道不是更加的赏心悦目吗?把每一次阅读代码的过程看
继续阅读 »
重新翻看看ioloop的源码, 以前只读到ioloop是tornado所有网络服务的基础,比如tcpserver, iostream都是将自己对应的callback通过ioloop挂载在对应的epoll事件上,
以达到非阻塞的效果。
这里总结下ioloop类的构建过程。
ioloop它有一个基类: Configurable定义在util.py文件内,这个Configurable类重定义了new工厂函数, 据源码里的描述是为了形成一个使用new函数来作为构造函数基类,
看这个new方法代码:
继续阅读 »