主要是利用baidu搜索的到的结果,然后从页面中抽取歌曲的链接和与歌曲相关的其他信息,
然后利用这些链接进行下载.
感觉实用性还挺强的,虽然下载速度和迅雷没法比,貌似比直接下载.
Matcher类:
使用Matcher类,最重要的一个概念必须清楚:组(Group),在正则表达式中
()定义了一个组,由于一个正则表达式可以包含很多的组,所以下面先说说怎么划分组的,
以及这些组和组的下标怎么对应的.
下面我们看看一个小例子,来说明这个问题
引用\w(\d\d)(\w+)
这个正则表达式有三个组:
整个\w(\d\d)(\w+) 是第0组 group(0)
(\d\d)是第1组 group(1)
(\w+)是第2组 group(2)
我们看看和正则表达式匹配的一个字符串x99SuperJava,
group(0)永远都是匹配整个表达式的字符串的那部分x99SuperJava ...
Berkely DB对于高并发、要求速度快的应用来说是个不错的选择,mysql就是用BDB实现的(mysql的后台) ,mysql快,BDB比mysql还要快N倍。BDB是一种嵌入式的、非关系数据库,它与其他的关系数据库RMDBS不同,它没有提供SQL,而是提供了自己的访问接口。作为一种嵌入式的数据库,它是进程内模式的,也就是说它和应用程序在同一内存空间运行,所以速度要高很多,与嵌入式的数据库如Derby、HSQLDB(都是RMDBS的)相比,它效率更高,使用方法也有很大的不同。现在BDB以被Oracle收购。Berkely DB提供的文档Getting Started with Berkel ...
Spring2.5 Annotation-based-configration大大简化了配置,用一个经典的HelloWorld程序来体验一下:
package edu.jlu.fuliang;
import org.springframework.stereotype.Component;
@Component
public class MessageProvider {
private String message = "Hello World!";
public String getMessage() {
return message;
}
...
今天帮同学调试程序,发现许多同学初写GUI程序共同的毛病,不能够构建反映灵敏的界面,
并由此导致一些问题的出现。或许今天遇到的问题,再加上Java GUI在循环中调用repaint的问题分析能够对初学Java GUI编程同学有所帮助。
我同学写的程序,把有问题那部分抽离出来,表述为下面一段代码:
package edu.jlu.fuliang;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax. ...
一博友问我有没有以前学SSH2做的入门例子,找了两个放上去,有需要的可以下来看看.
我的CSDN博客有这个例子的介绍
DWR+Spring+hibernate的增删改查的例子
Spring+hibernate+DWR整合
Struts2+Spring+hibernate的增删改查的例子
Ajax+Struts2+Spring+Hibernate整合
附件上有这两个的源码
今天一同学做东西要用这个东东,就帮他写了一个,先转化成后缀表达式,然后再
计算.当然也可以直接计算中缀表达式,考虑到要多位数,就没那么做.
支持多位数的带括号的整数的加减乘除.
package edu.jlu.fuliang;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Eval {
public int eval(String exp){
List<String> list = infixExpToPostExp(e ...
Liskov替换原则
我们前面说了开闭原则OCP,其背后的主要机制是抽象和多态,但在静态语言中(如c++,java),支持抽象和多态的关键机制之一便是继承,正是有了继承,我们才能够
抽象出接口/基类,然后在子类中实现继承而来的抽象方法,或覆写基类已实现的方法
来定制子类。这样我们才能只通过扩展来实现新增的功能。
但是按照什么规则,我们才能设计出最佳的继承层次呢,以及什么样才是最佳的继承体
系呢?Liskov替换原则回答了这个问题。
下面我们就看看什么是Liskov替换原则(LSP):
LSP:子类型必须能够替换成它们的基类型。
LSP的重要性是不言而喻的,例如:
void f(BaseTy ...
- 20:47
- 浏览 (190)
- 评论 (0)
- 分类: Design Pattern
正则表达式在处理文本方面用处非常大,最早像在Perl和awk语言中,提供了这种机制,Java在Java 2中也增加了正则表达式这个包java.util.regex。这个包为用户使用正则表达式,提供了易用而全面的支持。我的研究方向是web挖掘。从网页中提取内容,处理文本,当然需要正则表达式这个强大的工具了。
一、首先我们看一下怎么使用正则表达式的一个例子:
A Matcher examines the results of applying a pattern.
我们希望从这句话中找到所有开头为a的单词。
当然这只是一个简单的例子,你可以使用String提供的split方法,得到单词数组,然后
...
开-闭原则:
任何软件在其生命周期内都会发生变化,如果我们期望开发出来的系统不会在第一版之后就被抛弃,就必须面对需求的变化而保持相对稳定.开-闭原则(The open-close principle)为我们提供了指引.
那什么是开-闭原则呢?
软件实体(模块,类,方法等)应该是可以扩展的,但是不可修改的.
这句话说出了软件实体应该具备的两个特征:
1、对扩展式开放的(Open for extension)
当需求变化时,我们可以对模块进行扩展,使其具有满足新需求的新行为。
2、对于更改时封闭的(Closed modification)
对模块进行扩展时,不能修改已有的源代码或二进制代码。
这两 ...
- 17:17
- 浏览 (166)
- 评论 (0)
- 分类: Design Pattern
单一职责原则
这个原则描述了内聚性:一个模块组成元素的功能相关性。单一职责原则描述了引起类变化的原则只有一个,而职责就是变化的原因,如果你能够想到多于一个动机去改变类,那么这个类就具有多于一个职责。
例如
class Rectangle{
public void draw();
public double area();
}
如果这个类为两个不同的应用程序所使用:计算几何学方面的,它只需要提供计算面积的方法,图形绘制方面的,它可能只需要在屏幕上绘制自己。那么这个类就有了两个职责,这种设计违反了单一职责原则。当我们在计算几何学方面方面需要新的功能时我们需要修改这个类,
当 ...
- 18:45
- 浏览 (178)
- 评论 (0)
- 分类: Design Pattern
一、一些拙劣的设计症结
说起面向对象的原则,不得不提一些拙劣的一些设计症结,和代码的Bad Smell类似,但他们处于更高的层次,是整个软件结构的Bad Smell.
这些症结主要有:
僵化性(Rigdity):设计难于改变。
很难对系统进行改动,因为每个改动会迫使许多对系统的其他部分做改动,这往往是系统耦合性太高.
脆弱性(Fragility):设计易于遭到破坏。
在一次改动时,程序的许多地方都会出问题,而且常常出新问题的地方和改动的地方并没有概念上的联系.这些模块不断的修改,然而你越是修改他们,他们就变的更糟.
牢固性(Immobility):设计难于重用。
设计中包含了许多对其他系统有用 ...
- 17:18
- 浏览 (181)
- 评论 (0)
- 分类: Design Pattern
搞搜索引擎的公司貌似都是在Linux下开发,c,c++,perl和Linux/unix系统编程.似乎Java学的再好对于这个方向的工作都没有太大的帮助,当然Java有大量开源的源代码是它的优势.今天向baidu投了2008招聘实习生的简历,搜索核心开发的岗位都要求c,c++和linux.最后投了平台工程部-Java工程师,基本是一个辅助的开发部门.虽然c,c++底子还行,但Linux系统编程基本没有接触,希望这半年能把linux编程和算法搞好.
刚搞到一本不错的Linux高级编程这本电子的E文书,感觉相当不错.有需要的可以下来看看
这学期开面向对象的方法课程,可以趁机总结一下以前面向对象的开发经验,以及课程的心得,打算从面向对象的原则、模式、语言及框架方面总结,貌似是一个很大的题目。
今天听了面向对象的课,主要是讲软件复用与组件技术,以及面向对象建模技术。今天讲了COM组件,微软帝国大厦的基石。COM组件虽然已是昨日黄花,但对于组件和组件复用的理念还是有很好的诠释的,用C++编COM组件从老师讲的例子来看,貌似很费劲的东东,需要实现
IUnknown接口的QueryInterface、AddRef和Release方法。需要用户自己维护引用计数貌似是个很容易出问题的东东,如果多Release一次,问题不是内存泄露的问题了, ...
- 19:21
- 浏览 (194)
- 评论 (0)
- 分类: Design Pattern
本来打算昨天总结这部分的,一方面昨天上了一天课,另一方面,这部分想理清全部的思路
并不那么容易.看《Java nio》那本书,差点没看崩溃,洋洋洒洒写了近三百大页介绍java nio,写的太散太细,反而觉得很乱,理不清思路了。那本书用起来作为参考手册还行,想很快上手这本书还真不适合。
今天打算总结和Socket异步通信相关的内容。
传统的Socket是阻塞,像ServerSocket在调用accept方法后便处于阻塞状态等待Client端的连接,所以一般会在Server端使用许多线程,对每一个Socket连接分配一个线程。充分利用并发特性来提高性能。
但这样会带来许多问题:
1、Server端 ...
一、读文件:
前面我们介绍了通过获得FileChannel来写文件,现在我们再看看读操作。
其实读操作和写操作基本是对应的。
首先与写操作类似从文件中获得流,读操作要获得输入流FileInputStream
,再从这个流中得到FileChannel对象,然后进行读操作。
文件通道的读操作有三个read()方法:
int read(ByteBuffer buf);
从文件中读取buf.remaining()[即limit-position]个字节到缓冲区buf,从缓冲区的当前位置开始存取
int read(ByteBuffer[] buffers);
从文件中读到多个缓冲区中
int ...
一、各种缓冲区:
所有的缓冲区都继承了Buffer,Buffer类定义了所有缓冲区共有的基本特征,缓冲区存储了制定类型的元素序列有:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer。
我们需要知道这些基本类型占用存储空间与Byte的对应关系:
char 2 bytes,int 4 bytes,double 8 bytes
二、我们看看Buffer三个重要的概念以及他们之间的关系:
capacity 所能存方特定类型值得最大数量
limit 第一个不能读取或写入的索引位置
positio ...
jdk1.4提供了java.nio包,为从根本上改善I/O的性能提供了可能,但是nio要比以前的I/O要复杂,提供了更底层的操作和更细的api。学起来并不是那么快就上手,有专门一本书
介绍nio的。我希望通过总结更好的梳理整个nio框架各个类之间的关系,从而能够灵活的使用nio包。
nio通常需要涉及到三个对象:
1、数据源:从文件中获得的FileInputStream/FileOutputStream、从socket中获得的输入输出流等
2、缓冲区对象(buffer):nio定义了一系列buffer对象,最基本的是ByteBuffer,其他还有各种基本数据类型除了boolean类型外,所对应 ...
以前一直用ANT,不过一直也懒得好好学ant脚本,今天checkout一个源代码,用Maven管理的,只好用Maven构建这个项目了。
下载Maven:
http://maven.apache.org/start/download.html
把下载的文件(如apache-maven-2.0.8-bin.zip)解压到一个目录下。
我的是:D:\maven2.0.8
配置一下环境变量:
设置MAVEN_HOME=D:\maven2.0.8
设置path=%MAVEN_HOME%\bin
然后再命令行输入mvn,看看好不好用
装eclipse的插件:mavenide
使用eclipse的updat ...
- 17:40
- 浏览 (124)
- 评论 (1)
- 分类: Develope Tools
- 浏览: 50656 次
- 性别:

- 来自: 长春

- 详细资料
搜索本博客
我的相册
RSS Reader1
共 6 张
共 6 张
链接
最新评论
-
使用Struts2+Hibernate+Sp ...
很好很强大
-- by andy54321 -
Java Persistence with Hi ...
昨天买的, 不错
-- by lklkdawei -
使用Struts2+Spring+Hiber ...
不过整个工程都没有一条注释啊。。。 这个比较郁闷,万一以后你写了个框架,那下面 ...
-- by yyphzc -
使用Struts2+Spring+Hiber ...
总体感觉还行,不过部分代码需要优化为好 1.DAO既然使用泛型,那就干脆点。想想 ...
-- by yeshucheng -
使用Struts2+Spring+Hiber ...
这儿有个好同志: http://www.javaeye.com/topic/12 ...
-- by drinkjava






评论排行榜