??xml version="1.0" encoding="utf-8" standalone="yes"?> 今天我同学的电脑Q开始运?#8220;cmd regedit msconfig” q三个命令都不行 Q提C?找不到文?。可是文件明明在ѝ?/p>
直接q行system32目录下的cmd也不行,照样提示"找不到文?。把cmd改名为cmd1p够运?/p>
我的处理q程Q?/p>
开始我怀疑是中病毒了Q是病毒E序在监听哪个程序标题ؓ“cmd”Q发现就l束?/p>
首先用卡巴扫了一下启动项Q没发现病毒。又用冰刃查了一下启动项Q进E,都没问题?/p>
想了想会不会中了rootkit U的马儿Q可用冰刃仔l看了看内核Q没有显C红色的阿,刚才杀毒Y件也没报Q是的可能性就不怎么大了?/p>
那会不会是这个文仉病毒感染了,我最讨厌感染型的蠕虫病毒了。我从我自己的电脑上把才cmd.exe拯q来了,用Y件比较了下(光看大小不行的)Q一L?/p>
---------------------------------------------------------------------------- 文g: C:WINDOWSsystem32cmd.exe ----------------------------------------------------------------------------- 后来l过询问前几天中q病毒,会不会是上次病毒修改了注册表什么地方,虽然病毒是被杀了,但是修改的地方仍然没有改q来的呢。结果证明,q个判断是正的?/p>
具体处理ҎQ?/p>
用冰刃的修改注册表,或者将windeows目录下的regedit.exe修改一下名字,比如叫regedit1.exeQ修Ҏ册表?/p>
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options 里面?/p>
cmd.exe 删除可以了?/p>
典型?映像劫持?/p>
q只是处理病毒后遗症Q具体的处理病毒的方法没有写Q因为有很多病毒都会造成q种状况Q具体病毒具体对待?/font> 1 .from 下面是作者对设计模式的理解ƈ自以为所对应的实?br>一 Q?单例模式(Singleton) ?Q?命o模式QCommandQ?br> Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1227902 Jive是一个开攄Java源代码项目。其目标是徏设一个开攄构的Q强壮的Q易于扩展的ZJSP的论坛。在其设计目标的指导下,其结构设计得非常得好Q融合了很多新的观念Q比如Design PatternQ可更换的SkinQ可插入Plug{等。详l解d源代码对于理解这些新的设计上的概忉|很有裨益的。如果你对Design Pattern和Java语言有一定的了解Q但是还是会时常qh于其中的话,不妨研究研究Jive源代码,一定会对其中的很多概念有更深入的理解。这文章源于我的Jive源代码研I笔讎ͼ希望能够提纲挈领Q带领大家进入到q个好的世界。当Ӟ如果没有旉仔细地看源代码的话,看看q篇文章Q我想也是会有一些帮助的?/p>
再开始之前,需要指出的是,Jive中对Design Pattern的应用,q没有拘CgGOF书中所l出的实现方法,而是有许多变通的地方。一斚wQ我x׃具体的实际需要,另一斚wQ我惌也是设计观念q化的结果吧。因而,q些变通的地方Q将是我讲解的重炏V?/p>
Z一个OO的设计原则:面向接口~程Q而不是针对实现编E。Jive在设计的时候,把其大部分的基本对象都设计ؓ接口或者抽象类。在Jive中,基本的接口有ForumQForumMessageQForumThreadQGroupQUserQAuthorization和Query。我们可以很Ҏ的从q些接口的名字来知道他们的功用,下面的类囄Zq些cM间的一些静态关p: 你可能会有疑问,Z么会都是接口呢?q是Z扩展性考虑的。在Jivel出的实CQ所有的q些接口QForumQForumMessageQUser{等Q都使用数据库来实现的,一条消息,或者一个用户对应于数据库中的一条消息Jive使用了DbForumQDbForumMessageQDbUser{类来实现这些接口,通过JDBC来操作数据库Q之作坛的底层支撑?/p>
然而,有时候,或许我们q不想用数据库Q比如我们想只是使用文gpȝ来作坛的底层支撑Q这时候,我们需要做的只是编码实CForum{等接口的诸如FileFroumQFileForumMessage{对象,然后嵌入Jive中即可,原有的Q何代码都可以不用改变Q!Q这是面向接口~程的威力了Q?/p>
下面来看看具体的设计和编码?br> 如果要实现较好的可扩展性,AbstractFactory模式实是一件利器。如上面所_如果要创建的Forum接口的不同实玎ͼ而又不想更改代码的话Q就需要用到抽象工厂了。再Jive中,AuthorizationFactorycL一个抽象类Q用来创建Authorization对象。这是一个抽象工厂,可以通过不同的子cL创徏不同的Authorization对象。这个工厂的实现Ҏ是: 在AuthorizationFactory中用一个private static变量factoryQ用来引用具体的抽象工厂的实例: 用一个private static的StringQ来指明具体的抽象工厂的子类cdQ? 然后是用一个private static的loadAuthorizationFactoryҎ来给q个factory变量赋|生成具体的抽象工厂类Q?br> 在static的getAuthorizationҎq回一个Authorization的过E中Q先初始化工厂类factory变量Q然后用factory的createAuthorizationҎ来创建: 不同的子cL不同的createAuthorizationҎ的实现。比如在DbAuthorizationFactoryq个AuthorizationFactory的数据库实现子类中,createAuthorizationҎ是这样实现的Q?/p>
在这个类中,可以看到抽象cd具体的子cM间的关系Q它们是如何协作的,又是如何划分抽象Ҏ和非抽象Ҏ的,q都是值得注意的地斏V一般的Q抽象方法需要子cL实现Q而抽象类中的非抽象方法应该所有子cL能够׃n的,或者可是说Q是定义在抽象方法之上的较高层的Ҏ。这实是一个抽象工厂的好例子!虽然实现的方法已l和GOF中给出的实现相差较远了,但思想没变Q这儿的实现Q也实是要巧妙的些?/p>
q有是静态方法的使用Q得这个类看v来有些Singleton的意呟뀂这使得对于AbstractFactory的创建变得简单?/p>
下面的类囄Zq个AbstractFactory的实现的M情况Q?/p>
在AuthorizationFactory中定义的其它ҎQ涉及到具体的如何创建AuthorizationQ都是作为abstractҎ出现Q具体实现留l子cL完成?/p>
q样Q在需要生成一个Authorization的时候,只需要调用AuthorizationFactory的静态方法getAuthorization可以了Q由子类实现了具体的l节?/p>
其它的,如同上面讲到的,在创建Forum的时候用的ForumFactoryQ具有同上面一L实现Q这是模式之所以称为模式的所在了?/p>
Proxy模式的功能有很多Q比如远E代理,用来l远E对象提供一个本C表;虚代理,用来为创建开大开销的对象提供缓Ԍ{等。在Jive中用的是保护代理,保护的对象提供权限控制?/p>
我们都知道在一个论坛中Q权限的控制是必ȝQ否则论坛就很可能会被搞得一团糟。Jive中引入Proxy对象QAuthorization接口以及权限描叙属类来提供对论坛的保护?/p>
以ForumFactoryZQ一个额外的ForumFactoryProxy来处理权限认证的工作Q它为某一个ForumFactory提供了一个代理,保证只有授权的用h能够存取ForumFactory的某些操作。实际上ForumFactory在这儿不仅仅只是一个生成Forum的类的,它更像是一个Forum的管理类。提供了dQ删除,枚D{等一pd的功能,而有些功能不是什么样的h都可以用的Q因而引入了另外的一个代理类来处理权限的问题?/p>
当然Q代理类需要承ForumFactoryQ以使方法签名一_ 在它的构造方法中Q就提供了一个ForumFactory对象Q这是需要被代理的对象;一个Authorization对象Q提供用户信息;q有一个ForumPermissionsQ提供认证信息: 一般的代理q程都是q样的,在访问某个方法之前,必须接受权限的检查,以createForumZQ?/p>
下面l出q个模式的类图: q个模式的实现基本上和GOF中所l出的实C致。在Jive中,几乎所有的接口QForumQForumMessageQForumThread{等Q都会有一个相应的Proxy对象来进行权限控制。而在创徏具体的对象的时候,都是用相应的Proxy对象来代替原有的对象q回的。例如在ForumFactory的getInstance()Ҏ中需要返回一个Forum的时候,Jive是这样做的: 因而,所有被创徏的对象实际上都是Proxy对象Q抽象工厂保证了没有权限验证的对象根本不会客h得到Q它们只会在Proxy的内部扮演角Ԍ而永q不会被外部对象所存取Q这P׃Ҏ上保证了论坛的安全?/p>
一般的在OO设计中,而外功能的添加是通过l承来实现的Q但是承有的时候不够灵z,而且当功能的l合很多的时候,l承的子cd会成几何U数增长Q得类多的难以控制。正是基于这L考虑QDecorator模式得以诞生?/p>
Decorator模式相当于封装了某个特定的操作,当某个对象需要这个操作的时候,加上q个Decorator卛_。ƈ且,多个Decoratorq可以组合,以提供更多的功能?/p>
在Jive中,Decorator模式应用在一些过滤器QFilterQ中。Filter提供对ForumMessage对象内容的重新构造。比如,当一个ForumMessage对象过一个名为FilterCodeHighlight的过滤器后,存在于消息中的所有Java源代码文本,会被重新构造ؓh语法高亮昄的消息。在比如Q当l过了语法高亮修饰的消息再流q一个名为FilterHtml的过滤器后,消息中的HTML片断会被注释可以在HTML内部昄文本Q这样就防止了用戯入了HTML控制标签后,使得面昄不正常的问题?/p>
Jive中,所有的qo器承于一个抽象类ForumMessageFilterQ而ForumMessageFilter又实CForumMessage接口。也是_每一个过滤器实际上也是一个ForumMessage对象?/p>
ForumMessageFilter中还装一个ForumMessage对象。进行过滤的Ҏ很简单,使用的是getBody()Q比如在FilterCodeHighlightq个cMQ?/p>
highlightCode是一个privateҎQ实施具体的qo的细节。getBody()Ҏ实际上是定义在ForumMessage接口中的Q当调用qo器的getBody()ҎӞp够得到结构重整后的ForumMessage对象了。这个对象可以被其他客户引用Q也可以在传递给另外的过滤器Q实施进一步的操作?/p>
在实C个具体的消息的过滤的时候,在Forum中有addForumMessageFilter()QapplyFilters()ҎQ用来实现对qo器的应用?/p>
对一个ForumQ用addForumMessageFilter()Ҏd一个Filter的时候,q没有指定一个具体的MessageQ而只是一个规则(Filter中封装了qo规则Q,然后applyFilter()Ҏ中,实施q些规则Q?/p>
qo器的clone()ҎQؓqo器复制消息体。这个方法的使用Q分M在过滤器中对于消息体和过滤规则的初始化过E,q也是一个值得借鉴的技巧! 下面l出Decorator模式的类? 我们可以看到Decorator模式实际上和Proxy模式是很相近的,但是它们代表两个不同的功能含义。Proxy模式提供一个对象的控制Q而Decorator模式则是为对象提供额外的功能?br> Iterator模式和论坛的览erator模式用来分离数据l构和遍历算法,降低两者之间的耦合度,以得同一个数据结构用不同的算法遍历时Q仍能够h相同的接口,另一斚wQIterator模式使得当改换遍历算法后Q不需要更改程序的代码?/p>
在Java的JDK中本w就定义有一个Iterator接口Q在Iterator接口中仅仅定义了三个ҎQhasNext()判断是否遍历完最后一个元素,next()Ҏq回要遍历的数据l构中一个对象,remove()则删除当前对象。Jive中用IteratorProxy抽象cȝ承了q一接口。这儿Proxy的含义和上面一P也就是说Q这个IteratorProxyZ会实现Iterator的遍历功能外Q还会有代理权限控制的功能?/p>
对于论坛中的基本对象ForumQForumThreadQForumMessageQGroupQUser都有相应的遍历器。比如对应于Forum接口有ForumIteratorProxy对象。这个ForumIteratorProxy遍历器就相当于一个封装了一pdForum对象的集合类Q通过定义好的接口hasNext()和next()可以方便的遍历这个集合,而ƈ不需要知道是如何遍历q个集合的。遍历的法可能很简单,也可能很复杂Q但是对于外部的客户而言Q这q没有Q何的区别?/p>
而对于论坛中具体的遍历方法,q取决于具体的实玎ͼ在Jive中给出的是数据库的实现?/p>
我们׃MessageIteratorProxyZQ来讲解Iterator模式的用法?/p>
DbThreadIterator对象实现了Iterator接口Q是对于一个Thread中所有Message的遍历器Q我们来看看它是如何实现的?/p>
hasNext()判断在这个Thread中是不是q有下一条MessageQ?/p>
next()Ҏ从数据库中取Z在这个Thread中的下一条MessageQ?/p>
q样Q通过Ҏ据库的操作,DbThreadIterator实现了对一个Thread中所有Message遍历的方法?/p>
再ForumThread接口中有messages()ҎQ返回在q个Thread中的所有Message的一个遍历器QIteratorQ,实际上也是q回了一个Message的集合: 在DbForumThread中实Cq个ҎQ? 从DbForumThread的messages()Ҏ中所q回的就是这个Thread中所有Message的一个遍历器Q通过q个遍历器,我们可以访问Thread中的所有的Message了。当Ӟ事情q没有完Q由于权限的问题Q我们还需要构造这个遍历器的Proxy对象Q然后通过q个Proxy对象来访问遍历器?/p>
下面的类囄Z在Jive中Iterator模式的实现方法: 在Jive中,因ؓ在一个Thread之下QMessage是按树Şl构l织的,因而,当需要层U表CZ个Thread中的Message之间的关pȝ时候,仅仅用上面讲到的U性的Iterator是不够的。这时候,对Iterator的概念进行推q,引入了TreeWalker接口?/p>
思义QTreeWalker提供了遍历一个树和存取树上节点的ҎQ?/p>
TreeWalker只是Iterator的简单推q,q没有Iterator应用的那么广泛,而且Q也可以很容易的在TreeWalker上面在套一层Iterator的借口Q让它在某些情况下行使Iterator的职责。这儿就不再多讨Z?/p>
再此QJive设计中所有涉及到的设计模式的地方Q基本上都讲完了Q看完了之后Q是不是对设计模式有了更q一步的了解了呢Q?/p>
下一部分的内容,会涉及到具体的~码Q深入到JSP的内部,我们会看到Jive中是如何实现可更换的Skin的,q会涉及Tag Library的一些内宏V好了,q次到q儿了。下ơ再见?/p>
q行cmd regedit msconfig提示找不到文?/strong>
作? W嘻?nbsp;
Hash.zip (28.61 KB , 下蝲:6?
大小: 470528 字节
文g版本: 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
修改旉: 2005q?2?5? 8:00:00
MD5: 722A247ACB86960A708528120759266D
SHA1: A859B7173FB0B1786BE07B01F779725EDF9043E7
CRC32: 15544920
msconfig.exe
regedit.exe
regedit32.exe
做共享Y件是有利可图的,q是真的Q?999q?月以前我q不信,可是l过一q多?
研究和实践下来,我已l每月能?万多金了,比某些大公司总裁q多。但是,
我敢_80%以上的共享Y件作者ƈ不成功,实际上,他们q远没有赚到他们本来可以
赚到的收入?
软g׃n发行销售(先试后买Q是一U市销手段Q和其他所有市销手段一P
是有学问的,要想通过软g׃n发行获得成功Q就必须掌握q些学问?
今天Q我来脓上第一技术文章,攉的办?
在几q以前,Internetq没有流行的时候,׃n软g的作者只能靠从邮件中收到用户的支和现金的方法来赚钱,而用户寄出支后,q要{上一周或更多的时间得到来自作者的注册码。注?当以下几U情况发生时QY件作者的生意做不成?
1Q用L支票本刚好用完,{他买回新支本Ӟ消费冲动已经没有?
2Q用L邮票刚好用完Q他q不得不M邮局买邮,转念一惻IqY件我也不?
非买不可Q算?
3Q用h法忍受要{好多天才能拿到注册?
一句话Q太不方便了
现在好了Q有了InternetQ有了电子商务,用户可以在最想买你的软g的一刚w_q速的用他的信用卡在网上买下你的YӞq后悔的旉都没有,׃n软g发胦的日子到来乐?
那么Q如何在|上收取信用卡呢Q?
如果你拥有一个公司,在美国银行有信用卡商号帐?又购C银行的GATEWAY软g,在自q|站上开发了信用卡收费系l当然很?但对于广大共享Y件作者来?q很不现?有简单的办法Q就是找一家信用卡收款代理公司Q让他们替你收款Q你只要每个月等他们l你寄一张总额的支?他们会提取一定比例的佣金)p?
q样的代理公司网站有Q?
WWW.QWERKS.COM 提成 15-20% Q服务极好,是我的服务商Q?
WWW.Shareit.COM
WWW.REGNOW.COM
WWW.REGSOFT.COM
WWW.Kagi.com
对于׃国内的共享Y件作者,q要做的一件事是M国银行开个户_北京中行的活期一本通就很好?,如果你打让信用卡公司把q汇给?你还要知道银行的英文名字,地址,帐户?
帐号,转帐的SWIFT Code(可以从银行职员那里问?
C用卡代理公司的网站上开户非常简单,通常认它们的一个在U协议,填入一些个Z息和产品信息Q几分钟OK?
q里面有一个值得注意的地方,是Q当用户付了ƑQ注册码怎么l的问题Q你可以选择׃来给Q每收到一份订单,他们会给你发一email,包含用户资料和emailQ,׃生成注册码emaill用P也可以把注册码生成代码给信用卡公司,让他们编C们的pȝ里去Q用h了订单后自动发出注册码,也可以由你一ơ性生成几百个注册码给他们Q他们每收到一份订单时用掉一个注册码?
我个人的意见是,q几个信用卡服务商信誉都非常好,一ơ给他们几百个注册码是最单的办法Q对服务商来说操作简单,对用h说快Q交完钱马上得到注册码?
当你完成作者和产品在信用卡服务商那里的登记后,׃得到一个URLq接Q你把这个连接加C的主上?标上一?#8220;Buy Now”Q用Lq里可以用信用卡付ƾ了Q当Ӟ你也可以把这个连接做C的Y件界面里去,q样用户在试用你的Y件时Q随时想买都可以点击q个q接上网购买
具体实例可以参考我的网站和软g
http://www.zy2000.com
MP3 CD Maker
对于一些Internet软gQ如断点l传的下载YӞq有另外一U赚钱方法,是对用户免费,而在软g界面上登一个bannerq告赚取q告贏V最有名的广告代理商?
www.radiate.com
他的q告付费是每CPM 2-5元Q也是_如果一天里?0万个用户使用了你的Y件一ơ的话,你就得到200-500元。这家公司声Uͼ著名的下载工兯Y件Gozilla!落户Radiate后,每月从Radiate那里赚到22万美?我们著名的NetAnt是不是该赶快行动了?
我们也不反对用户用支和现金购买软gQ事实上Q信用卡服务商都提供支票和现金收ƾ业务,我们可以在网中提供信用卡服务商的地址和服务热U电话,具体例子可以参考我的网中 FAQ 一늚内容
1.1单表查询
from eg.cat as cat.其中Qcat只是一个别名,Z用其他子语句的时候书写简?br>
1.2多表查询
from eg.Cat,eg.Dog
from eg.Cat as cat,eg.Dog as dog
2 join相关
(inner) join
left (outer) join
right (outer) join
full join
HQL同样对SQL中的q些Ҏ支?br>下面插播一个小话题Q关于上边的那些Ҏ,我一直都没怎么用,今天既然说到q里Q就?br>把上边的几个Ҏ的用法说一下,也算对自q一个补充:
假设有两个表Q部门、员工,下面列D一些数据:
员工(Employee)Q?br>ID Name DepNo
001 Jplateau 01
002 Jony 01
003 Camel 02
部门(Department)Q?br>ID Name
01 研发?br>02 营销?br>
在Hibernate中我们操U늚都是对象Q所以我们操U늚是部门类和员工类
1).(inner) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee join Department as department on employee.DepNo=
department.ID (注意到条件语句我用on 没有用where)
那么执行l果是什么呢Q?br>id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发?br>002 Jony 01 研发?br>
2).left (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee left join Department as department on employee.DepNo=
department.ID
那么执行l果又该是什么呢Q?br>id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发?br>002 Jony 01 研发?
003 Camel null null
{是说此时我要已W一个表的记录多ؓ准,W二个表中没有相应纪录的时候填充null}
3). right (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID
那么执行l果又该是什么呢Q?br>id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 研发?br>002 Jony 01 研发?
null null 02 营销?
{是说此时我要已W二个表的记录多ؓ准,W一个表中没有相应纪录的时候填充null}
3 大小写敏?br>
4。select语句
是要确定你要从查询中返回哪些对象或者哪些对象的属性。写几个例子吧:
select employee form Employee as employee
select employee form Employee as employee where employee.Name like 'J%'
select employee.Name form Employee as employee where employee.Name like 'J%'
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID
select elements(employee.Name) from Employee as employee
Q不明白elements到底是做什么用的?望给于说明)
{等
5。数学函?br>JDO目前好像q不支持此类Ҏ?br>avg(...), sum(...), min(...), max(...)
count(*)
count(...), count(distinct ...), count(all...)
其用法和SQL基本相同
select distinct employee.name from Employee as employee
select count(distinct employee.name),count(employee) from Employee as employee
6。polymorphism (暂时不知道如何解释?)
from com.test.Animal as animal
不光得到所有Animal得实例,而且可以得到所有Animal的子c(如果我们定义了一个子cCatQ?br>一个比较极端的例子
from java.lang.Object as o
可以得到所有持久类的实?br>
7。where语句
定义查询语句的条Ӟ丑և个例子吧Q?br>from Employee as employee where employee.Name='Jplateau'
from Employee as employee where employee.Name like 'J%'
from Employee as employee where employee.Name like '%u'
在where语句?#8220;=”不光可以比较对象的属性,也可以比较对象,如:
select animal from com.test.Animal as animal where animal.name=dog
8。表辑ּ
在SQL语句中大部分的表辑ּ在HQL中都可以使用Q?br>mathematical operators +, -, *, /
binary comparison operators =, >=, <=, <>, !=, like
logical operations and, or, not
string concatenation ||
SQL scalar functions like upper() and lower()
Parentheses ( ) indicate grouping
in, between, is null
JDBC IN parameters ?
named parameters :name, :start_date, :x1 Q这U应该是另一U??"的变通解x法)
SQL literals 'foo', 69, '1970-01-01 10:00:01.0'
Java public static final constants eg.Color.TABBY
其他不必解释了,在这里我只想Ҏ询中的参数问题说明一下:
大家知道在SQL中进行传递参数进行查询的时候,我们通常用PreparedStatementQ在语句中写一大堆?#8220;Q?#8221;Q?br>在hql中也可以用这U方法,如:
List mates = sess.find(
"select employee.name from Employee as employee " +
"where employee.Name=? ",
name,
Hibernate.STRING
);
(说明Q上面利用Session里的findҎQ在hibernate的api Session中重载了很多findҎQ它可以满你多UŞ式的查询)
上边是一个参数的情ŞQ这U情况下紧接着引入参数和定义参数的cdQ当为多个参敎ͼ调用另一个findҎQ它的后两个
参数都是数组的Ş式?br>
q有另外一U方法来解决上边的问题,JDO也有q样的方法,不过和hibernate的表现Ş式上有差别,但他们两个骨子里却是
一LQ如Q?br>Query q = sess.createQuery("select employee.name from Employee as employee where employee.Name=:name");
q.setString("name", "Jplateau");
//当有多个参数的时候在此逐一定义
Iterator employees = q.iterate();
9。order 语句
和sql语句没什么差别,如:
select employee.name from Employee as employee where employee.Name like 'J%' order by employee.ID desc (或者asc)
10。group by 语句
同样和sql语句没什么差别,如:
select employee.name,employee.DepNo from Employee as employee group by employee.DepNo
select foo.id, avg( elements(foo.names) ), max( indices(foo.names) ) from eg.Foo foo group by foo.id
{Note: You may use the elements and indices constructs inside a select clause, even on databases with no subselects.}
谁帮我解释一下上边两句,谢过Q?br>
11。子查询
hibernate同样支持子查询,写几个例子:
from eg.Cat as fatcat where fatcat.weight > ( select avg(cat.weight) from eg.DomesticCat cat )
账本c:1 单一实例 2 l多个对象共?3 自己创徏。网计数器
二:{略模式(Strategy)
使用QQ泡MM时用外?nbsp; 客户?QME 抽象c: 外挂 具体Q策略(囄Q笑话,名h名言Q?br>图书销售算法(不同书本折扣的算法)
三:原型模式(Prototype)
复印技术: 1 不是同一个对?2 属同c?
短消息(转发Q?1-n个MM
四:门面模式(Façade)
Facade典型应用是数据库JDBC的应用和Session的应?br>ME---àMM---à(father,mum,sister,brother)
五:备忘录模?Memento)
备䆾pȝ时?
GHOST
MMQ客LQ?-àMEQ请求者)--à命o角色--àQ具体命令)-à代理处(接收者)--àMM
上网 IE 输入 http地址 发送命?br>
七: 解释?Interpreter)
~译原理之编译器
文言文注释:一D|a文,它译成白话文
八:调停者模?Mediator)
法院和原告,被告的关p?br>九:责Q链模?CHAIN OF RESPONSIBLEITY)
喝酒旉过成语接龙军_谁喝?马到成功Q功不可没-没完没了)
十:工厂模式QFactoryQ?br>
水果园—〉(葡萄园,Ҏ园)--〉(葡萄Q苹果)Q各自生产)
十一Q抽象工厂模式(Abstract FactoryQ?br>
奛_造h---〉(_阻I--〉(人,兽)----〉(男hQ女人,公兽Q母兽)(人和兽属于不同的产品c?
十二Q徏造模式(BuilderQ?br>
汽R刉?br>
十三Q合成模式(CompositeQ?br>
windows的目录树Q文件系l)
十四Q装饰模式(DECORATORQ?br>
在visio中文件可以用背景进行装?br>变废为宝
十五Q设计模式之Adapter(适配?
充电器(手机?20V电压Q?br>jdbc-odbc?br>十六Q桥梁模式(BridgeQ?br>
jdbc驱动E序
十七Q代理模式(ProxyQ?br>
用代理服务器q接出网
销售代理(厂商Q律师代理(客户Q?br>foxmail
枪手
十八Qn元模式(FlyweightQ?br>
字体?6个字母和各自的斜体等
十九Q状态模式(StateQ?br>
人心情不同时表现不同有不同的行ؓ
~钟
dlogin logout
二十Q观察者模式(ObserverQ?br>
公司邮gpȝeveryone@sina.com的应用。当公司员工向这个邮发邮g时会发给公司的每一个员工。如果设|了Outlook则会及时收到通知?br>接收到短消息
二十一Q模板方法模式(TemplateQ?br>
使用|页设计时用的模板架构|页Q骨Ӟ 法的各个逻辑pȝ
二十二:讉K者模式(VisitorQ?br>
电脑销售系l: 讉K者(自己Q?--〉电脑配|系l(LQCPUQ内存。。。。。。)
二十三:q代子模式(IteratorQ?br>
查询数据库,q回l果集(mapQ?listQ?setQ?br>
下面的参考文献是MW记的全部参考文献。这里不一定用到的?br>参考文献:
http://blog.csdn.net/airhand/
http://blog.csdn.net/bloom121/
http://blog.csdn.net/laurecn/
http://blog.csdn.net/legendinfo/
http://www-128.ibm.com/developerworks/cn/java/l-struts1-1/
《Design Patterns?br>《Java与模式?br>《设计模式:可复用面向对象Y件的基础?/p>
?QJive整体关系
private static AuthorizationFactory factory = null;
private static String className ="com.coolservlets.forum.database.DbAuthorizationFactory";
private static void loadAuthorizationFactory() {
if (factory == null) {
synchronized(className) {
if (factory == null) {
String classNameProp = PropertyManager.getProperty(
"AuthorizationFactory.className"
);
if (classNameProp != null) {
className = classNameProp;
}
try {
Class c = Class.forName(className);
factory = (AuthorizationFactory)c.newInstance();
}
catch (Exception e) {
System.err.println("Exception loading class: " + e);
e.printStackTrace();
}
}
}
}
}
public static Authorization getAuthorization(String username,
String password) throws UnauthorizedException
{
loadAuthorizationFactory();
return factory.createAuthorization(username, password);
}
public Authorization createAuthorization(String username, String password)
throws UnauthorizedException
{
if (username == null || password == null) {
throw new UnauthorizedException();
}
password = StringUtils.hash(password);
int userID = 0;
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(AUTHORIZE);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
if (!rs.next()) {
throw new UnauthorizedException();
}
userID = rs.getInt(1);
}
catch( SQLException sqle ) {
System.err.println("Exception in DbAuthorizationFactory:" + sqle);
sqle.printStackTrace();
throw new UnauthorizedException();
}
finally {
try { pstmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
return new DbAuthorization(userID);
}
?QAbstractFactory模式的实现类?/strong>
回页?/font>
ForumFactoryProxy extends ForumFactory
public ForumFactoryProxy(ForumFactory factory, Authorization authorization,
ForumPermissions permissions)
{
this.factory = factory;
this.authorization = authorization;
this.permissions = permissions;
}
public Forum createForum(String name, String description)
throws UnauthorizedException, ForumAlreadyExistsException
{
if (permissions.get(ForumPermissions.SYSTEM_ADMIN)) {
Forum newForum = factory.createForum(name, description);
return new ForumProxy(newForum, authorization, permissions);
}
else {
throw new UnauthorizedException();
}
}
?QProxy模式的类?/strong>
public static ForumFactory getInstance(Authorization authorization) {
......
ForumFactoryProxy proxy = new ForumFactoryProxy(factory,authorization, factory.getPermissions(authorization));
return proxy;
}
回页?/font>
public String getBody() {
return highlightCode(message.getBody());
}
public ForumMessage applyFilters(ForumMessage message) {
//Loop through filters and apply them
for (int i=0; i < filters.length; i++) {
message = filters[i].clone(message);
}
return message;
}
?QDecorator模式的类?/strong>
public boolean hasNext() {
if (currentIndex+1 >= messages.length) {
return false;
}
return true;
}
public Object next() throws java.util.NoSuchElementException {
ForumMessage message = null;
if (nextMessage != null) {
message = nextMessage;
nextMessage = null;
}
else {
message = getNextMessage();
if (message == null) {
throw new java.util.NoSuchElementException();
}
}
return message;
}
public Iterator messages();
public Iterator messages() {return new DbThreadIterator(this);}
?QJive中Iterator模式的实?/strong>
public interface TreeWalker {
public ForumMessage getRoot();
public ForumMessage getChild(ForumMessage parent, int index);
public int getChildCount(ForumMessage parent);
public int getRecursiveChildCount(ForumMessage parent);
public int getIndexOfChild(ForumMessage parent, ForumMessage child);
public boolean isLeaf(ForumMessage node);
一Q?Input和Output
1. stream代表的是M有能力出数据的数据源,或是M有能力接收数据的接收源。在Java的IO中,所有的streamQ包括Input和Out
streamQ都包括两种cdQ?/font>
1.1 以字节ؓ导向的stream
以字节ؓ导向的streamQ表CZ字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种cdQ?br>1) inputstreamQ?br>1) ByteArrayInputStreamQ把内存中的一个缓冲区作ؓInputStream使用
2) StringBufferInputStreamQ把一个String对象作ؓInputStream
3) FileInputStreamQ把一个文件作为InputStreamQ实现对文g的读取操?br>4) PipedInputStreamQ实Cpipe的概念,主要在线E中使用
5) SequenceInputStreamQ把多个InputStream合ƈZ个InputStream
2) Outputstream
1) ByteArrayOutputStreamQ把信息存入内存中的一个缓冲区?br>2) FileOutputStreamQ把信息存入文g?br>3) PipedOutputStreamQ实Cpipe的概念,主要在线E中使用
4) SequenceOutputStreamQ把多个OutStream合ƈZ个OutStream
1.2 以Unicode字符为导向的stream
以Unicode字符为导向的streamQ表CZUnicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面?/font>
U类型:
1) Input Stream
1) CharArrayReaderQ与ByteArrayInputStream对应
2) StringReaderQ与StringBufferInputStream对应
3) FileReaderQ与FileInputStream对应
4) PipedReaderQ与PipedInputStream对应
2) Out Stream
1) CharArrayWriteQ与ByteArrayOutputStream对应
2) StringWriteQ无与之对应的以字节为导向的stream
3) FileWriteQ与FileOutputStream对应
4) PipedWriteQ与PipedOutputStream对应
以字Wؓ导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如
CharArrayReaderQ和ByteArrayInputStream的作用都是把内存中的一个缓冲区作ؓInputStream使用Q所不同的是前者每ơ从内存中读取一?/font>
字节的信息,而后者每ơ从内存中读取一个字W?br>1.3 两种不现导向的stream之间的{?br>InputStreamReader和OutputStreamReaderQ把一个以字节为导向的stream转换成一个以字符为导向的stream?br>2. streamd属?br>2.1 “为streamd属?#8221;的作?br>q用上面介绍的Java中操作IO的APIQ我们就可完成我们想完成的Q何操作了。但通过FilterInputStream和FilterOutStream的子c,我们可以
为streamd属性。下面以一个例子来说明q种功能的作用?br>如果我们要往一个文件中写入数据Q我们可以这h作:
FileOutStream fs = new FileOutStream(“test.txt”);
然后可以通过产生的fs对象调用write()函数来往test.txt文g中写入数据了。但是,如果我们惛_?#8220;先把要写入文件的数据先缓存到内存
中,再把~存中的数据写入文g?#8221;的功能时Q上面的API没有一个能满我们的需求了。但是通过FilterInputStream和FilterOutStream?/font>
子类QؓFileOutStreamd我们所需要的功能?br>2.2 FilterInputStream的各U类?br>2.2.1 用于装以字节ؓ导向的InputStream
1) DataInputStreamQ从stream中读取基本类型(int、char{)数据?br>2) BufferedInputStreamQ用缓冲区
3) LineNumberInputStreamQ会记录input stream内的行数Q然后可以调用getLineNumber()和setLineNumber(int)
4) PushbackInputStreamQ很用刎ͼ一般用于编译器开?br>2.2.2 用于装以字Wؓ导向的InputStream
1) 没有与DataInputStream对应的类。除非在要用readLine()时改用BufferedReaderQ否则用DataInputStream
2) BufferedReaderQ与BufferedInputStream对应
3) LineNumberReaderQ与LineNumberInputStream对应
4) PushBackReaderQ与PushbackInputStream对应
2.3 FilterOutStream的各U类?br>2.2.3 用于装以字节ؓ导向的OutputStream
1) DataIOutStreamQ往stream中输出基本类型(int、char{)数据?br>2) BufferedOutStreamQ用缓冲区
3) PrintStreamQ生格式化输出
2.2.4 用于装以字Wؓ导向的OutputStream
1) BufferedWriteQ与对应
2) PrintWriteQ与对应
3. RandomAccessFile
1) 可通过RandomAccessFile对象完成Ҏ件的d操作
2) 在生一个对象时Q可指明要打开的文件的性质QrQ只读;wQ只写;rw可读?br>3) 可以直接跛_文g中指定的位置
4. I/O应用的一个例?br>import java.io.*;
public class TestIO{
public static void main(String[] args)
throws IOException{
//1.以行为单位从一个文件读取数?br>BufferedReader in =
new BufferedReader(
new FileReader("F:\\nepalon\\TestIO.java"));
String s, s2 = new String();
while((s = in.readLine()) != null)
s2 += s + "\n";
in.close();
//1b. 接收键盘的输?br>BufferedReader stdin =
new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter a line:");
System.out.println(stdin.readLine());
//2. 从一个String对象中读取数?br>StringReader in2 = new StringReader(s2);
int c;
while((c = in2.read()) != -1)
System.out.println((char)c);
in2.close();
//3. 从内存取出格式化输入
try{
DataInputStream in3 =
new DataInputStream(
new ByteArrayInputStream(s2.getBytes()));
while(true)
System.out.println((char)in3.readByte());
}
catch(EOFException e){
System.out.println("End of stream");
}
//4. 输出到文?br>try{
BufferedReader in4 =
new BufferedReader(
new StringReader(s2));
PrintWriter out1 =
new PrintWriter(
new BufferedWriter(
new FileWriter("F:\\nepalon\\ TestIO.out")));
int lineCount = 1;
while((s = in4.readLine()) != null)
out1.println(lineCount++ + "Q? + s);
out1.close();
in4.close();
}
catch(EOFException ex){
System.out.println("End of stream");
}
//5. 数据的存储和恢复
try{
DataOutputStream out2 =
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("F:\\nepalon\\ Data.txt")));
out2.writeDouble(3.1415926);
out2.writeChars("\nThas was pi:writeChars\n");
out2.writeBytes("Thas was pi:writeByte\n");
out2.close();
DataInputStream in5 =
new DataInputStream(
new BufferedInputStream(
new FileInputStream("F:\\nepalon\\ Data.txt")));
BufferedReader in5br =
new BufferedReader(
new InputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
}
catch(EOFException e){
System.out.println("End of stream");
}
//6. 通过RandomAccessFile操作文g
RandomAccessFile rf =
new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");
for(int i=0; i<10; i++)
rf.writeDouble(i*1.414);
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
for(int i=0; i<10; i++)
System.out.println("Value " + i + "Q? + rf.readDouble());
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
for(int i=0; i<10; i++)
System.out.println("Value " + i + "Q? + rf.readDouble());
rf.close();
}
}
关于代码的解释(以区为单位)Q?br>1ZQ当d文gӞ先把文g内容d~存中,当调用in.readLine()Ӟ再从~存中以字符的方式读取数据(以下U?#8220;~存字节d?/font>
?#8221;Q?br>1bZQ由于想以缓存字节读取方式从标准IOQ键盘)中读取数据,所以要先把标准IOQSystem.inQ{换成字符导向的streamQ再q行
BufferedReader装?br>2ZQ要以字W的形式从一个String对象中读取数据,所以要产生一个StringReadercd的stream?br>4ZQ对String对象s2d数据Ӟ先把对象中的数据存入~存中,再从~冲中进行读取;对TestIO.out文gq行操作Ӟ先把格式化后的信
息输出到~存中,再把~存中的信息输出到文件中?br>5ZQ对Data.txt文gq行输出Ӟ是先把基本类型的数据输出屋缓存中Q再把缓存中的数据输出到文g中;Ҏ件进行读取操作时Q先把文
件中的数据读取到~存中,再从~存中以基本cd的Ş式进行读取。注意in5.readDouble()q一行。因为写入第一个writeDouble()Q所以ؓ?/font>
正确昄。也要以基本cd的Ş式进行读取?br>6区是通过RandomAccessFilecd文gq行操作?/font>