加style="cursor:hand" ,firefox无效。
posted @
2008-03-16 12:56 流浪汗 阅读(4141) |
评论 (2) |
编辑 收藏
收集于网络,自已小改动下。
有DrawImage(ImgD, width, height) 调整图像比例的javascript函数。
<script language="javascript">
<!--
var flag=false;
function DrawImage(ImgD, width, height){
var image=new Image();
var iwidth = width;
var iheight = height;
image.src=ImgD.src;
if(image.width>0 && image.height>0){
flag=true;
if(image.width/image.height>= iwidth/iheight){
if(image.width>iwidth){
ImgD.width=iwidth;
ImgD.height=(image.height*iwidth)/image.width;
}else{
ImgD.width=image.width;
ImgD.height=image.height;
}
ImgD.alt=image.width+""+image.height;
}
else{
if(image.height>iheight){
ImgD.height=iheight;
ImgD.width=(image.width*iheight)/image.height;
}else{
ImgD.width=image.width;
ImgD.height=image.height;
}
ImgD.alt=image.width+""+image.height;
}
}
}
//-->
</script>
<style type="text/css">
.pic_size {border:1px solid #CCCCCC;width:240px;height:200px;margin-top:5px;background:#FFF;}
</style>
<div class="pic_size"><table width="100%" height="100%"><tr><td style="text-align: center;vertical-align: middle;"><img src="my.jpg" onload = "DrawImage(this,240,200)"></td></tr></table></div>
posted @
2008-03-16 12:43 流浪汗 阅读(363) |
评论 (0) |
编辑 收藏
在HTML内头部加以下内容。
<link rel="shortcut icon" href="/images/my.ico" type="image/x-icon" />
posted @
2008-03-16 12:32 流浪汗 阅读(327) |
评论 (0) |
编辑 收藏
以前想用循环来System.in (或是其它输入方式老是达不预想的效果,第一次输入后回车,不会接收下一次用户的输入)。后来才发现readline() != null才能达到效果。
package net.blogjava.chenlb;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 重复接收用户输入一行命令
* @author chenlb 2008-3-11 下午09:24:50
*/
public class UserInput {
public static void main(String[] args) throws IOException {
System.out.println("说明: 输入QUIT退出");
System.out.print("\ninput>");
String inputStr = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((inputStr = br.readLine()) != null) {
if(inputStr.equals("QUIT")) {
System.exit(0);
}
System.out.println("你输入的是: "+inputStr); //处理你的逻辑
System.out.print("\ninput>");
}
}
}
posted @
2008-03-11 21:49 流浪汗 阅读(968) |
评论 (0) |
编辑 收藏
最近看下Lucene的东西,把它写下来可以看下。Lucene结构和工作原理我就不说了,网上好多。
我的环境是Lucene2.0
写一个简单使用Lucene的示例。此类首创建索引,然后显示索引文档的情况,最后搜索(只在content找,和在title或content里找)。
package net.blogjava.chenlb.lucene;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
/**
* Lucene简单使用
* @author chenlb 2008-3-8 下午11:42:55
*/
public class LuceneUse {
public static void main(String[] args) throws Exception {
LuceneUse liu = new LuceneUse();
//索引
IndexWriter iw = new IndexWriter("index", new StandardAnalyzer(), true);
//添加要索引的Lucene文档
Document doc = liu.createDoc("Lucene创建索引示例", "chenlb", "2008-03-08", "Lucene索引的内容在这里,这些内容不被存储.");
iw.addDocument(doc);
doc = liu.createDoc("文档2", "bin", "2007-10-03", "这是索引的另一个文档");
iw.addDocument(doc);
doc = liu.createDoc("学习内容", "chenlb", "2008-3-3", "要努力奋斗,祝网友们天天快乐");
iw.addDocument(doc);
iw.optimize(); //优化
iw.close();
//读
System.out.println("===========索引文档内容=============");
IndexReader reader = IndexReader.open("index");
for(int i=0; i<reader.numDocs(); i++) {
Document d = reader.document(i);
liu.printDoc(d);
}
System.out.println("===========以下是单域查找'天天'结果============");
//单域搜索
IndexSearcher searcher = new IndexSearcher("index");
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query q = parser.parse("天天");
long start = System.currentTimeMillis();
Hits hits = searcher.search(q);
long end = System.currentTimeMillis();
for(int i=0; i<hits.length(); i++) {
liu.printDoc(hits.doc(i));
}
System.out.println("共找到: "+hits.length()+" 个文档,花了:"+(end-start)+"ms");
//多域搜索
System.out.println("===========以下多域是查找'内容'结果============");
//从title或content找
q = MultiFieldQueryParser.parse("内容", new String[] {"title", "content"}, new BooleanClause.Occur[] {BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD}, new StandardAnalyzer());
start = System.currentTimeMillis();
hits = searcher.search(q);
end = System.currentTimeMillis();
for(int i=0; i<hits.length(); i++) {
liu.printDoc(hits.doc(i));
}
System.out.println("共找到: "+hits.length()+" 个文档,花了:"+(end-start)+"ms");
}
/**
* 显示文档内容
*/
private void printDoc(Document d) {
System.out.println("标题: "+d.get("title")+", 作者: "+d.get("author")+", 日期: "+d.get("date")+", 内容: "+d.get("content"));
}
/**
* 创建一个Lucene文档
*/
private Document createDoc(String title, String author, String date, String content) {
Document doc = new Document();
doc.add(new Field("title", title, Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("author", author, Field.Store.YES, Field.Index.NO));
doc.add(new Field("date", date, Field.Store.YES, Field.Index.NO));
doc.add(new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
return doc;
}
}
posted @
2008-03-09 00:47 流浪汗 阅读(964) |
评论 (0) |
编辑 收藏
这几天想用Java读富文档。用javax.swing.text和javax.swing.text.rtf包中的类读RTF文档时出现中文乱码问题(出现?号)。
幸好找到
ANGEL SKY 的博客。用ISO8859_1编码转换。
代码片断:
String bodyText = null;
DefaultStyledDocument styledDoc = new DefaultStyledDocument(); //javax.swing.text.Document的一个实例
try {
InputStream is = new FileInputStream(new File("data/java.swing.text读RTF文档测试.rtf"));
new RTFEditorKit().read(is, styledDoc, 0);
bodyText = new String(styledDoc.getText(0, styledDoc.getLength()).getBytes("ISO8859_1")); //提取文本
} catch (IOException e) {
throw new DocumentHandlerException("不能从RTF中摘录文本!", e);
} catch (BadLocationException e) {
throw new DocumentHandlerException("不能从RTF中摘录文本!", e);
}
System.out.println(bodyText);
posted @
2008-02-01 17:05 流浪汗 阅读(2270) |
评论 (0) |
编辑 收藏
这学期,应聘的时候有一些是线程相关的,虽然自己对线程编程有点概念,但没有写过经典的例子。放假了有点时候,就想写多线程的例子。
笔试的题目类似地:一个生产者一次生产10个,满了后通知消费者,然后等待。一个消费者产品有满了就消费。到空时通知生产者,然后等待。
那时对等待/通知机制没怎么写过,那次笔试应该写的大概对(想法对),但写的wait()和notifyAll()的位置不对。现在有时间就写了这个例子。
描述:生产者一次生产N个产品,池中达到M就等待,通知等待的消费者。消费者有产品就消费,到没有时就通知生产者,然后等待。
1.生产者:
package net.blogjava.chenlb.multithreaded;
import java.util.List;
/**
* @author chenlb
*
* 生产者.<br/>
* 默认产品池大小M=20,产品梯阶大小N=5.在生产过程中,池的大小会超过20,但池中最大应该是M+N-1.
*/
public class Producer implements Runnable {
/**
* 池默认大小
*/
public static final int DEFALUT_SIZE = 20;
/**
* 默认一次生产的数量
*/
public static final int DEFALUT_STEP_SIZE = 5;
private static int PRODUCER_ID = 0; //生产者号
private List<Product> pool = null;
private int size = DEFALUT_SIZE;
private int stepSize = DEFALUT_STEP_SIZE;
private String name = "Producer_"+(++PRODUCER_ID); //生产者名
private boolean isRun = true;
/**
* 默认产品池大小20, 默认产品增长梯阶大小5
*/
public Producer(List<Product> pool) {
this.pool = pool;
}
/**
* @param pool
* @param size 池大小
*/
public Producer(List<Product> pool, int size) {
this.pool = pool;
this.size = size;
}
/**
* @param pool
* @param size 池大小
* @param stepSize 一次生产多少
*/
public Producer(List<Product> pool, int size, int stepSize) {
this.pool = pool;
this.size = size;
this.stepSize = stepSize;
}
public void run() {
// TODO 生产者线程
//int pi = 0;
while(isRun) {//&& pi<10
//pi++;
synchronized (pool) { //同步产品池
if(pool.size() >= size) {
try {
System.out.println(name+" 等待!");
pool.wait(); //同步什么就等待什么,否则抛出java.lang.IllegalMonitorStateException
} catch (InterruptedException e) {
isRun = false;
System.out.println(name+" thread interrupt!");
}
} else {
for(int i=0; i<stepSize; i++) { //一次生产stepSize个产品
pool.add(product()); //生产产品
}
System.out.println("产品池中有: "+pool.size());
pool.notifyAll(); //通知等待的线程(主要用来通知消费者, 但生产者线程也会通知到)
}
}
try {
System.out.println(name+" 休息1秒!");
Thread.sleep(1000); //调试用
} catch (InterruptedException e) {
System.out.println(name+" sleep 1s thread interrupt");
}
}
System.out.println(name+" end! pool size: "+pool.size());
}
private static int P_ID = 0;
/**
* 生产产品
* @return 产品
*/
private Product product() {
String name = "product_"+(++P_ID);
System.out.println(this.name+" 生产了: "+name);
return new Production(name);
}
}
2.消费者:
package net.blogjava.chenlb.multithreaded;
import java.util.List;
/**
* @author chenlb
*
* 消费者
*/
public class Consumer implements Runnable {
private static int C_ID = 0; //消费者ID
private List<Product> pool = null;
private String name = "Consumer_"+(++C_ID);
private boolean isRun = true;
public Consumer(List<Product> pool) {
this.pool = pool;
}
public void run() {
// TODO 消费者线程
//int pi = 0;
while(isRun) {//&& pi<10
//pi++;
synchronized (pool) {
if(pool.size() < 1) {
try {
System.out.println(name+" 等待!");
pool.notifyAll(); //通知线程(主要是生产者,但也会通知到生产者线程)
pool.wait();
} catch (InterruptedException e) {
isRun = false;
System.out.println(name+" thread interrupt!");
}
} else {
Product p = pool.remove(0); //消费
printProduct(p);
}
}
try {
Thread.sleep(1000); //调试用
} catch (InterruptedException e) {
System.out.println(name+" sleep 1s thread interrupt");
}
}
System.out.println(name+" end! pool size: "+pool.size());
}
private void printProduct(Product p) {
System.out.println(name+" 消费了: "+p.getName());
}
}
3.Demo
package net.blogjava.chenlb.multithreaded;
import java.util.LinkedList;
import java.util.List;
/**
* @author chenlb
*
*/
public class Sale {
public static void main(String[] args) {
//链表产品池
List<Product> pool = new LinkedList<Product>();
//两个生产者
Producer p1 = new Producer(pool);
Producer p2 = new Producer(pool);
Thread tp1 = new Thread(p1);
Thread tp2 = new Thread(p2);
tp1.start();
tp2.start();
//两个消费者
Consumer c1 = new Consumer(pool);
Consumer c2 = new Consumer(pool);
Thread tc1 = new Thread(c1);
Thread tc2 = new Thread(c2);
tc1.start();
tc2.start();
}
}
注意:等待时候要用pool.wait()因为同步的是pool。否则会抛出java.lang.IllegalMonitorStateException
^_^
代码下载
posted @
2008-01-24 11:36 流浪汗 阅读(532) |
评论 (0) |
编辑 收藏
1.聚合关系也称"has-a"关系,组合关系也称"contains-a"关系
2.聚合关系表示事物的整体/部分关系的较弱情况,组合关系表示事物的整体/部分关系的较强的情况.
3.在聚合关系中,代表部分事物的可以属于多个聚合对象,可以为多个聚合对象共享,而且可以随时改变它所从属的聚合对象.代表部分事物的对象与代表聚合事物对象的生存期无关,一旦删除了它的一个聚合对象,不一定也就随即删除代表部分事物的对象.在组合关系中,代表整体事物的对象负责创建和删除代表部分事物的对象,代表部分事物只属于一个组合对象.一旦删除了组合对象,也就随即删除了相应的代表部分事物的对象.
posted @
2008-01-15 22:02 流浪汗 阅读(2637) |
评论 (0) |
编辑 收藏
oracle 用户SYS 和 SYSTEM的默认口令:TIGER
posted @
2008-01-03 15:10 流浪汗 阅读(1491) |
评论 (0) |
编辑 收藏
1.什么是pv
PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。
高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面。这里需要强调:同一个人浏览你网站同一个页面,不重复计算pv量,点100次也算1次。说白了,pv就是一个访问者打开了你的几个页面。
PV之于网站,就像收视率之于电视,从某种程度上已成为投资者衡量商业网站表现的最重要尺度。
pv的计算:当一个访问着访问的时候,记录他所访问的页面和对应的IP,然后确定这个IP今天访问了这个页面没有。如果你的网站到了23点,单纯IP有60万条的话,每个访问者平均访问了3个页面,那么pv表的记录就要有180万条。
有一个可以随时查看PV流量以及你的网站世界排名的工具alexa工具条,安装吧!网编们一定要安装这个。
2.什么是uv
uv(unique visitor),指访问某个站点或点击某条新闻的不同IP地址的人数。
在同一天内,uv只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数。独立IP访问者提供了一定时间内不同观众数量的统计指标,而没有反应出网站的全面活动。
3.什么是PR值
PR值,即PageRank,网页的级别技术。取自Google的创始人Larry Page,它是Google排名运算法则(排名公式)的一部分,用来标识网页的等级/重要性。级别从1到10级,10级为满分。PR值越高说明该网页越受欢迎(越重要)。
例如:一个PR值为1的网站表明这个网站不太具有流行度,而PR值为7到10则表明这个网站非常受欢迎(或者说极其重要)。
我们可以这样说:一个网站的外部链接数越多其PR值就越高;外部链接站点的级别越高(假如Macromedia的网站链到你的网站上),网站的PR值就越高。例如:如果ABC.COM网站上有一个XYZ.COM网站的链接,那为ABC.COM网站必须提供一些较好的网站内容,从而Google会把来自XYZ.COM的链接作为它对ABC.COM网站投的一票。
你可以下载和安装Google工具条来检查你的网站级别(PR值)。
详细看: http://www.skynuo.com/faq_qc7.htm
posted @
2007-12-31 13:51 流浪汗 阅读(365) |
评论 (0) |
编辑 收藏