随笔-153  评论-235  文章-19  trackbacks-0
 
        加style="cursor:hand" ,firefox无效。
posted @ 2008-03-16 12:56 流浪汗 阅读(4134) | 评论 (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 流浪汗 阅读(353) | 评论 (0)编辑 收藏
    在HTML内头部加以下内容。

<link rel="shortcut icon" href="/images/my.ico" type="image/x-icon" />
posted @ 2008-03-16 12:32 流浪汗 阅读(315) | 评论 (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 流浪汗 阅读(958) | 评论 (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 流浪汗 阅读(955) | 评论 (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 流浪汗 阅读(2248) | 评论 (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 流浪汗 阅读(521) | 评论 (0)编辑 收藏


1.聚合关系也称"has-a"关系,组合关系也称"contains-a"关系

2.聚合关系表示事物的整体/部分关系的较弱情况,组合关系表示事物的整体/部分关系的较强的情况.

3.在聚合关系中,代表部分事物的可以属于多个聚合对象,可以为多个聚合对象共享,而且可以随时改变它所从属的聚合对象.代表部分事物的对象与代表聚合事物对象的生存期无关,一旦删除了它的一个聚合对象,不一定也就随即删除代表部分事物的对象.在组合关系中,代表整体事物的对象负责创建和删除代表部分事物的对象,代表部分事物只属于一个组合对象.一旦删除了组合对象,也就随即删除了相应的代表部分事物的对象.
posted @ 2008-01-15 22:02 流浪汗 阅读(2627) | 评论 (0)编辑 收藏
      oracle 用户SYS 和 SYSTEM的默认口令:TIGER
posted @ 2008-01-03 15:10 流浪汗 阅读(1479) | 评论 (0)编辑 收藏
.什么是pv
  PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。

  高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面。这里需要强调:同一个人浏览你网站同一个页面,不重复计算pv量,点100次也算1次。说白了,pv就是一个访问者打开了你的几个页面。

  PV之于网站,就像收视率之于电视,从某种程度上已成为投资者衡量商业网站表现的最重要尺度。

  pv的计算:当一个访问着访问的时候,记录他所访问的页面和对应的IP,然后确定这个IP今天访问了这个页面没有。如果你的网站到了23点,单纯IP有60万条的话,每个访问者平均访问了3个页面,那么pv表的记录就要有180万条。

    有一个可以随时查看PV流量以及你的网站世界排名的工具alexa工具条,安装吧!网编们一定要安装这个。

  .什么是uv
uv(unique visitor),指访问某个站点或点击某条新闻的不同IP地址的人数。

  在同一天内,uv只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数。独立IP访问者提供了一定时间内不同观众数量的统计指标,而没有反应出网站的全面活动。

  .什么是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 流浪汗 阅读(357) | 评论 (0)编辑 收藏
仅列出标题
共16页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 Last