﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-独立小桥风满袖</title><link>http://www.blogjava.net/seaflower/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:01:07 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:01:07 GMT</pubDate><ttl>60</ttl><item><title>关于杀人游戏</title><link>http://www.blogjava.net/seaflower/archive/2005/01/21/537.html</link><dc:creator>独立小桥风满袖</dc:creator><author>独立小桥风满袖</author><pubDate>Fri, 21 Jan 2005 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/seaflower/archive/2005/01/21/537.html</guid><wfw:comment>http://www.blogjava.net/seaflower/comments/537.html</wfw:comment><comments>http://www.blogjava.net/seaflower/archive/2005/01/21/537.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/seaflower/comments/commentRss/537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/seaflower/services/trackbacks/537.html</trackback:ping><description><![CDATA[<P>现在好像很流行，特别是在聚会的时候，似乎是唯一的选择。不过我还没玩过，呵呵。土了。</P>
<P>现在把一些规则记下：</P>
<P>一、杀人游戏规则（这好像是第一代的）<BR><BR>　　游戏概述：<BR><BR>　　这是一个锻炼表达能力、判断力、观察力、思维能力和表演能力…的游戏。每一个曾经参与游戏的人都会被它深深的吸引住。游戏的基础是彼此的诚实和信任，以及对游戏的认真。<BR><BR>　　游戏特点：<BR><BR>　　1.简单易学：任何人只要明白规则或看别人玩过一盘，马上就会玩了。<BR><BR>　　2.参与性强：只要认真对待所扮演的角色，无论是老朋友还是第一次见面的新朋友，马上会“杀”成一片。<BR><BR>　　游戏环境：<BR><BR>　　室内室外均可，最好大家围坐一起。光线暗一点效果更好。<BR><BR>　　游戏人物：<BR><BR>　　法官：控制游戏进程的人。明确每个人的身份，要做到绝对公正。<BR><BR>　　杀手：白天隐藏在好人中间；黑夜出来杀人。被杀后没有遗言，并不得再发言。<BR><BR>　　好人：白天和大家一起抓出坏人；黑夜闭眼，对杀手行凶完全不知；被杀后有遗言，然后不得再发言。<BR><BR>　　游戏规则：<BR><BR>　　以9人为例<BR><BR>　　1、根据人数准备好9张牌，按照不同的花色事前规定好法官1人、杀手2人、好人6人。<BR><BR>　　2、每人取一张牌，明确自己的身份，除法官外，不要让任何人知道。<BR><BR>　　3、法官宣布：所有人闭上眼睛，杀手睁眼相互认识。<BR><BR>　　4、法官知道谁是杀手后，宣布：杀手闭眼，所有人睁眼。<BR><BR>　　5、下面开始个人发表意见，按照座位顺序依次发言，相互指正，找出坏人。<BR><BR>　　6、所有人发言完毕后，被指正最多的人有一次为自己申辩的机会。<BR><BR>　　7、申辩完毕后，大家举手投票决定是否处决这个人。没过半数则该人存活。(接9)<BR><BR>　　8、得票过半则处决，法官宣布亮牌，让大家明确是成功抓到一个杀手，还是错杀一个好人。如错杀好人则有最后的遗言，杀手则没遗言。<BR><BR>　　9、法官宣布天黑，所有人闭眼，杀手出来杀人。杀手用眼神相互交流，统一杀害的目标，并用眼神告诉法官杀谁。<BR><BR>　　10、杀手杀人完毕后闭眼，所有人睁眼。法官宣布哪个好人被杀。被害人遗言。<BR><BR>　　11、继续新一轮的讨论。因为大家都发过言了，并且也有人被指正，被杀害，因此线索会越来越多……思维会更活跃，讨论会更激烈。<BR><BR>　　12、如此重复，直到好人将杀手全部抓出，则好人获胜；如好人全部被害，则杀手获胜。<BR><BR>　　游戏技巧：<BR><BR>　　好人：没别的，长双慧眼吧……错杀好人和放过坏人都等于自杀。<BR><BR>　　坏人：<BR><BR>　　坏人秘技1：<BR><BR>　　出卖同伙。不等你的同伙暴露，就毫不手软的指正并杀害，这样在以后为自己辩论的过程中就多了一条很有说服力的依据。<BR><BR>　　坏人秘技2：<BR><BR>　　隐藏。俗话说，枪打出头鸟。虽然你很想误导大家错杀某个好人，但在表决时你不要举手，光指正不杀害，会很好的隐藏起自己的。<BR><BR>　　坏人秘技3：<BR><BR>　　嫁祸。往往2个相互指正的人都会是好人，充分利用好他们之间的对峙，始终让他们去吸引大家的注意吧。<BR><BR>　　另外，还有试探、排除异己、拉拢大众、据理力争、博得同情这些技巧，也许，这就是杀人游戏的魅力所在吧。 <BR></P>
<P>二、<STRONG>杀人游戏规则(335)（这是第二代的）<BR><BR></STRONG>1、参加游戏人数共12人，选1人做法官。法官准备11张扑克牌，其中3张A，5张为普通牌，3张K。众人坐定后，法官将洗好的11张牌交由大家抽取。抽到普通牌的为良民，抽到A的为杀手，抽到K的为警察。不要让别人知道你抽到的是什么牌。<BR>　 2、抽牌结束后，法官开始主持游戏，众人要听从法官的口令，不要作弊，作弊的结果只能使你自己得不到游戏的乐趣，而不会影响大家。 </P>
<P></P>
<P>　 3、法官说：黑夜来临了，请大家闭上眼睛睡觉了。此时只有法官一人能看到大家的情况。</P>
<P>　　4、法官又说：杀手睁开眼睛，出来杀人。听到此令，只有抽到A牌的三个杀手睁眼互相认识一下，成为本轮游戏中最先达成同盟的群体。任意一位杀手示意法官，杀掉在座的任意一位。</P>
<P>　　5、法官看清楚后说：杀手闭眼，警察睁开眼睛。抽到K牌的警察相互认识后，可以怀疑闭眼的任意一位为杀手，同时，法官向警察示意怀疑对象是否杀手。</P>
<P>　　6.完成后，法官说：所有人闭眼；稍后说：天亮了，大家都可以睁开眼睛了。</P>
<P>　　7、法官宣布谁被杀了，此良民为第一个被杀之人。被杀者可以留下遗言，说罢，被杀者在本轮游戏中将不能够再发言。法官主持众人从被杀者下一个人开始顺时针挨个陈述自己的意见，提出自己的怀疑对象。<BR>　　<BR>　　8、陈述毕，会有几人被怀疑为杀手。然后由法官主持大家按顺序举手表决被怀疑为杀手的人，杀掉票数最多的那个人。被杀者发表遗言。<BR>　　<BR>　　9、在聆听了遗言后，新的夜晚来到了。又是杀手出来杀人，然后警察确认身，然后又都在新一天醒来，又有一人被杀。继续讨论和杀掉新的被怀疑对象。如此往复，杀手杀掉全部的警察即可获胜；杀手被全部投票杀死,警察获胜。<BR>&nbsp;</P>
<P>还有第三代的，据说又加了个医生角色</P><img src ="http://www.blogjava.net/seaflower/aggbug/537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/seaflower/" target="_blank">独立小桥风满袖</a> 2005-01-21 13:56 <a href="http://www.blogjava.net/seaflower/archive/2005/01/21/537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>细说Java之util类</title><link>http://www.blogjava.net/seaflower/archive/2005/01/18/461.html</link><dc:creator>独立小桥风满袖</dc:creator><author>独立小桥风满袖</author><pubDate>Tue, 18 Jan 2005 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/seaflower/archive/2005/01/18/461.html</guid><wfw:comment>http://www.blogjava.net/seaflower/comments/461.html</wfw:comment><comments>http://www.blogjava.net/seaflower/archive/2005/01/18/461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/seaflower/comments/commentRss/461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/seaflower/services/trackbacks/461.html</trackback:ping><description><![CDATA[关键字     java util collection list map set hashmap 集合 链表 哈希 <BR>　　线性表，链表，哈希表是常用的数据结构，在进行Java开发时，JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述，向读者阐述各个类的作用以及如何正确使用这些类。 
<P>Collection <BR>├List <BR>│├LinkedList <BR>│├ArrayList <BR>│└Vector <BR>│　└Stack <BR>└Set <BR>Map <BR>├Hashtable <BR>├HashMap <BR>└WeakHashMap </P>
<P>Collection接口 <BR>　　Collection是最基本的集合接口，一个Collection代表一组Object，即Collection的元素（Elements）。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类，Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 <BR>　　所有实现Collection接口的类都必须提供两个标准的构造函数：无参数的构造函数用于创建一个空的Collection，有一个Collection参数的构造函数用于创建一个新的Collection，这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。 <BR>　　如何遍历Collection中的每一个元素？不论Collection的实际类型如何，它都支持一个iterator()的方法，该方法返回一个迭代子，使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下： <BR>　　　　Iterator it = collection.iterator(); // 获得一个迭代子 <BR>　　　　while(it.hasNext()) { <BR>　　　　　　Object obj = it.next(); // 得到下一个元素 <BR>　　　　} <BR>　　由Collection接口派生的两个接口是List和Set。 </P>
<P>List接口 <BR>　　List是有序的Collection，使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引（元素在List中的位置，类似于数组下标）来访问List中的元素，这类似于Java的数组。 <BR>和下面要提到的Set不同，List允许有相同的元素。 <BR>　　除了具有Collection接口必备的iterator()方法外，List还提供一个listIterator()方法，返回一个ListIterator接口，和标准的Iterator接口相比，ListIterator多了一些add()之类的方法，允许添加，删除，设定元素，还能向前或向后遍历。 <BR>　　实现List接口的常用类有LinkedList，ArrayList，Vector和Stack。 </P>
<P>LinkedList类 <BR>　　LinkedList实现了List接口，允许null元素。此外LinkedList提供额外的get，remove，insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈（stack），队列（queue）或双向队列（deque）。 <BR>　　注意LinkedList没有同步方法。如果多个线程同时访问一个List，则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List： <BR>　　　　List list = Collections.synchronizedList(new LinkedList(...)); </P>
<P>ArrayList类 <BR>　　ArrayList实现了可变大小的数组。它允许所有元素，包括null。ArrayList没有同步。 <BR>size，isEmpty，get，set方法运行时间为常数。但是add方法开销为分摊的常数，添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 <BR>　　每个ArrayList实例都有一个容量（Capacity），即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加，但是增长算法并没有定义。当需要插入大量元素时，在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 <BR>　　和LinkedList一样，ArrayList也是非同步的（unsynchronized）。 </P>
<P>Vector类 <BR>　　Vector非常类似ArrayList，但是Vector是同步的。由Vector创建的Iterator，虽然和ArrayList创建的Iterator是同一接口，但是，因为Vector是同步的，当一个Iterator被创建而且正在被使用，另一个线程改变了Vector的状态（例如，添加或删除了一些元素），这时调用Iterator的方法时将抛出ConcurrentModificationException，因此必须捕获该异常。 </P>
<P>Stack 类 <BR>　　Stack继承自Vector，实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法，还有peek方法得到栈顶的元素，empty方法测试堆栈是否为空，search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。 </P>
<P>Set接口 <BR>　　Set是一种不包含重复的元素的Collection，即任意的两个元素e1和e2都有e1.equals(e2)=false，Set最多有一个null元素。 <BR>　　很明显，Set的构造函数有一个约束条件，传入的Collection参数不能包含重复的元素。 <BR>　　请注意：必须小心操作可变对象（Mutable Object）。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。 </P>
<P>Map接口 <BR>　　请注意，Map没有继承Collection接口，Map提供key到value的映射。一个Map中不能包含相同的key，每个key只能映射一个value。Map接口提供3种集合的视图，Map的内容可以被当作一组key集合，一组value集合，或者一组key-value映射。 </P>
<P>Hashtable类　　Hashtable继承Map接口，实现一个key-value映射的哈希表。任何非空（non-null）的对象都可作为key或者value。 <BR>　　添加数据使用put(key, value)，取出数据使用get(key)，这两个基本操作的时间开销为常数。 <BR>Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大，这会影响像get和put这样的操作。 <BR>使用Hashtable的简单示例如下，将1，2，3放到Hashtable中，他们的key分别是”one”，”two”，”three”： <BR>　　　　Hashtable numbers = new Hashtable(); <BR>　　　　numbers.put(“one”, new Integer(1)); <BR>　　　　numbers.put(“two”, new Integer(2)); <BR>　　　　numbers.put(“three”, new Integer(3)); <BR>　　要取出一个数，比如2，用相应的key： <BR>　　　　Integer n = (Integer)numbers.get(“two”); <BR>　　　　System.out.println(“two = ” + n); <BR>　　由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置，因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object，如果你用自定义的类当作key的话，要相当小心，按照散列函数的定义，如果两个对象相同，即obj1.equals(obj2)=true，则它们的hashCode必须相同，但如果两个对象不同，则它们的hashCode不一定不同，如果两个不同对象的hashCode相同，这种现象称为冲突，冲突会导致操作哈希表的时间开销增大，所以尽量定义好的hashCode()方法，能加快哈希表的操作。 <BR>　　如果相同的对象有不同的hashCode，对哈希表的操作会出现意想不到的结果（期待的get方法返回null），要避免这种问题，只需要牢记一条：要同时复写equals方法和hashCode方法，而不要只写其中一个。 <BR>　　Hashtable是同步的。 </P>
<P>HashMap类 <BR>　　HashMap和Hashtable类似，不同之处在于HashMap是非同步的，并且允许null，即null value和null key。，但是将HashMap视为Collection时（values()方法可返回Collection），其迭代子操作时间开销和HashMap的容量成比例。因此，如果迭代操作的性能相当重要的话，不要将HashMap的初始化容量设得过高，或者load factor过低。 </P>
<P>WeakHashMap类 <BR>　　WeakHashMap是一种改进的HashMap，它对key实行“弱引用”，如果一个key不再被外部所引用，那么该key可以被GC回收。 </P>
<P>总结 <BR>　　如果涉及到堆栈，队列等操作，应该考虑用List，对于需要快速插入，删除元素，应该使用LinkedList，如果需要快速随机访问元素，应该使用ArrayList。 <BR>　　如果程序在单线程环境中，或者访问仅仅在一个线程中进行，考虑非同步的类，其效率较高，如果多个线程可能同时操作一个类，应该使用同步的类。 <BR>　　要特别注意对哈希表的操作，作为key的对象要正确复写equals和hashCode方法。 <BR>　　尽量返回接口而非实际的类型，如返回List而非ArrayList，这样如果以后需要将ArrayList换成LinkedList时，客户端代码不用改变。这就是针对抽象编程。 <BR></P><img src ="http://www.blogjava.net/seaflower/aggbug/461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/seaflower/" target="_blank">独立小桥风满袖</a> 2005-01-18 20:34 <a href="http://www.blogjava.net/seaflower/archive/2005/01/18/461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The entire history of software engineering is that of the rise in levels of abstraction</title><link>http://www.blogjava.net/seaflower/archive/2005/01/18/460.html</link><dc:creator>独立小桥风满袖</dc:creator><author>独立小桥风满袖</author><pubDate>Tue, 18 Jan 2005 12:26:00 GMT</pubDate><guid>http://www.blogjava.net/seaflower/archive/2005/01/18/460.html</guid><wfw:comment>http://www.blogjava.net/seaflower/comments/460.html</wfw:comment><comments>http://www.blogjava.net/seaflower/archive/2005/01/18/460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/seaflower/comments/commentRss/460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/seaflower/services/trackbacks/460.html</trackback:ping><description><![CDATA[“The entire history of software engineering is that of the rise in levels of abstraction.”<BR>－Grady BoochThe limits of Software, September 2002 <img src ="http://www.blogjava.net/seaflower/aggbug/460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/seaflower/" target="_blank">独立小桥风满袖</a> 2005-01-18 20:26 <a href="http://www.blogjava.net/seaflower/archive/2005/01/18/460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CMM 和 TOEFL GRE</title><link>http://www.blogjava.net/seaflower/archive/2005/01/18/459.html</link><dc:creator>独立小桥风满袖</dc:creator><author>独立小桥风满袖</author><pubDate>Tue, 18 Jan 2005 12:23:00 GMT</pubDate><guid>http://www.blogjava.net/seaflower/archive/2005/01/18/459.html</guid><wfw:comment>http://www.blogjava.net/seaflower/comments/459.html</wfw:comment><comments>http://www.blogjava.net/seaflower/archive/2005/01/18/459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/seaflower/comments/commentRss/459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/seaflower/services/trackbacks/459.html</trackback:ping><description><![CDATA[曾经有一位朋友在MSN上问对于国内软件企业通过CMM究竟有没有多大意义？我当时的感觉就是国内的企业大多是为了过CMM而CMM去的，真正利用CMM/CMMI来提升企业内力的估计不多。就像中国学生考Tofle或者GRE一样。对于软件外包的企业显得更为重要。
<P>        James Bach的“The Immaturity of CMM”一文中，提到了CMM的种种不足，Weinberg也是对CMM提出质疑的重要一方。CMM来源于DOD对承包企业的一个资质评价。因为双方要做生意，但互相之间又不了解，我想请人来做这块软件，首先要对这几个候选者能否做好有一个大致的评判，怎么评判呢，以什么标准评判呢？作为一个研究机构，SEI来给出这个评判标准非常合适。CMM作为一套评判企业软件开发过程能力的问卷，应该是非常成功的，SEI提供的各种成功的CASE数据可以作为证据。因此CMM也获得了空前的成功和流传。<BR>但“CMM只是一套试卷”这个最初的出发点导致了James Bach一文中提到的CMM的众多不足：<BR><BR>1)  has no formal theoretical basis<BR>2)  has only vague empirical support<BR>3)  reveres process, but ignores people<BR>4)  reveres institutionalization of process for its own sake<BR>5)  contains very little information on process dynamics<BR>6)  encourages displacement of goals from the true mission of improving process to the artificial mission of achieving a higher maturity level.</P>
<P>CMM只是一个过程评价模型，而并不是过程实施的指导模型。应该说，SEI已经认识到CMM在可操作性上的不足， Humphery主持开发的团队软件过程TSP（Team Software Process）和个人软件过程PSP（Personal Software Process）是面向开发小组和开发个人对CMM进行的过程的微观优化，对CMM的实施提供了很好的帮助，但是，TSP和PSP只是对过程进行细化，并没有解决CMM与工程过程相结合的问题。另外，SEI还曾制定了SPF（Software Process Framework），希望提供一个设计、分析、评审软件过程的指南，以保证过程符合CMM的要求，效果也并不理想。<BR></P><img src ="http://www.blogjava.net/seaflower/aggbug/459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/seaflower/" target="_blank">独立小桥风满袖</a> 2005-01-18 20:23 <a href="http://www.blogjava.net/seaflower/archive/2005/01/18/459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OptimalJ：模型驱动开发如何提高生产力</title><link>http://www.blogjava.net/seaflower/archive/2005/01/18/457.html</link><dc:creator>独立小桥风满袖</dc:creator><author>独立小桥风满袖</author><pubDate>Tue, 18 Jan 2005 11:54:00 GMT</pubDate><guid>http://www.blogjava.net/seaflower/archive/2005/01/18/457.html</guid><wfw:comment>http://www.blogjava.net/seaflower/comments/457.html</wfw:comment><comments>http://www.blogjava.net/seaflower/archive/2005/01/18/457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/seaflower/comments/commentRss/457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/seaflower/services/trackbacks/457.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍：OptimalJ是一个高级的企业级应用开发环境，它使用成熟的模式(Pattern) 直接从可视化模型生成全面的、可运行的J2EE应用系统，实现了最好的实践经验并基于J2EE规则编写代码。使用OMG的模型驱动架构标准，OptimalJ帮助简化开发，使架构师、设计人员和开发人员快速开发可靠的应用系统。OptimalJ以五个关键基础概念为特性，将在一系列的技术白皮书进行讨论它们。１、模...&nbsp;&nbsp;<a href='http://www.blogjava.net/seaflower/archive/2005/01/18/457.html'>阅读全文</a><img src ="http://www.blogjava.net/seaflower/aggbug/457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/seaflower/" target="_blank">独立小桥风满袖</a> 2005-01-18 19:54 <a href="http://www.blogjava.net/seaflower/archive/2005/01/18/457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>