FW : 程序员修身养性的十大原则

前些时候看过一篇文章,大概描述了自我修身养性的格式塔疗法,受益匪浅,决定从自身的行业与职业出发对十大原则进行重新阐述,希望对广大程序员的工作以及生活有一定的指导意义。

       生活在现在 我们大部分的烦恼来自于对过去的惦念与懊悔,过去的辉煌与暗淡占据了我们很多的回忆空间,我们经常为昨天的洋相与错误而长久地悔恨,其实也只有自己才会很在意自己过去的表现,对别人而言,你过去的表现很快就过眼云烟,因此我们不需要沉醉于过去的辉煌,也不需要沉沦于过去的不幸,我们要将精神集中在今天要做什么以及如何去做才最好,尤其像我们程序员这个职业,技术革新太快,稍微停留我们就会变得过时,昨天你所开发的产品或许不错,但明天可能很快就变得陈旧不堪,你需要在今天不断地吸取新技术,不断地创新,不断地完善,才能保持产品以及自身的竞争力,生活在现在是一种积极进取的人生态度,记住:过去的已过去,未来还不可靠,只有今天才是真实可靠的。

       生活在这里 搞IT的似乎注定要“飘来飘去”,人员流动性应是所有行业中最高的,毕业七年,服务过4家公司,算是比较稳定的人了,在有些公司工作一年多就成了老员工了,应该说有时是不太守职业道德的,当我发现所在的公司并非自己的理想时,我的心就开始先飘了,人在心不在,这种状况导致工作的效果与效率都不理想,离开只是时间问题,我相信很多朋友也有过这种情况,这是不负责的,对公司与自己都不好,我们尽力做到在那里工作一天就尽责尽力一天, 打工也好创业也好,都要不断提高自己,凡事尽力做到问心无愧,我们要记住,我们现在就生活在此处此地,而不是遥远的其他地方。

       停止猜想,面向实际 我们很多心理上的障碍,往往是没有实际根据的“想当然”造成的。面对问题,有些人喜欢猜想,而不是去调查事实与解决问题,比如项目经理早上因进度缓慢问题将你骂了一顿,然后你就因此而联想下去,心里在嘀咕,项目经理是不是对你有意见?是不是不看重你?这个项目如果做不好就完了等等诸如此类的猜想,其实项目经理只是就事论事,并不针对你个人,他是希望你去想方设法将进度跟上来,或加加班,或与同事一起互相帮助一下,而你却活在自己的猜测里久久不能摆脱,结果会越来越严重,所以无论面对任何困难或责备,你需要做的是面对实际,寻找问题所在,并设法解决问题,而不要去胡乱猜想。

       暂停思考,多去感受 我对这一点的理解就是要劳逸结合,我们这个职业属于重型脑力劳动,我们经常长时间地思考,经常长时间地coding,有时因为一个BUG,我们日日夜夜冥思苦想,有时为了能让项目按进度完成,日以继夜地加班,都快变成了一台没有情感的机器,我建议朋友们偶尔暂停一下思考,花一些时间去观赏美景或美女,多聆听悦耳美妙的音乐,多去感受大自然的花草树木,休假时出趟远门旅游,如果身体允许,下雨天去踢场足球,我们应尽力让生活变得丰富多彩。

       接受不愉快的情感 矛盾无处不在,再乐观的人也会有不愉快的时候,一个优秀的程序员应会处理各种各样的关系,工作上有与客户的关系,与市场人员的关系,与测试人员的关系,与客服人员的关系,与上司的关系,与同事的关系,生活中有与家人的关系,与朋友的关系,与陌生人的关系,我们无法要求所接触的每个人都是我们所想象的,在相处的过程中一定会产生不愉快的情绪,其实愉快与不愉快是相对而言的,同时也是相互存在的,恰当地处理便会相互转化,程序BUG出现了,你一时解决不了,测试人员会追着要你赶快搞定,你变得烦躁与恼火,不停地思索,不断地调试,终于结束了,这时你会有一种如释重负的感觉,心情也会变得愉快起来。

       不要随意下判断 我们往往容易在别人稍有差错或失败之时,就马上下结论,这种方式容易与别人产生摩擦与冲突,结果自己也会烦恼与苦闷。对他人的态度和处理人际关系的正确做法应是:先不要对人或事下判断,先要说出你是如何认为的。这样对方会容易接受,往往你说完自己的看法后,对方也自然而然地知道你的结论。

       不要盲目地崇拜偶像和权威 大多人都需要一个精神寄托的对象,这个对象的成就以及影响力也往往成为我们的追求目标,比如我曾崇拜周恩来,因为他的个人魅力,我曾崇拜张学友,因为他的歌唱得出神入化,我曾崇拜温伯格,因为他的书写得好,可见崇拜或喜欢一个人,总是有一个理由的,我们不能因为这个理由而全部肯定或接受这个对象的一言一语一举一动,那样会禁锢我们的头脑束缚我们的手脚,使我们失去独立思考的习性。

       我就是我 我听过余世维博士的讲座,在他的观点中有一点是强调以我或我们为主,不要去看他们做什么,不要总说别人怎么样,而要关注我们能做什么,我们怎么样,出错了要敢于承认是我或我们的错,而不要将责任推到别人的身上。余博士的这个观点以及所引用的例子让阿蒙受益无穷,决心从我做起,从现在做起,不再怨天尤人,充分发挥自己的潜能与优势,竭尽全力做好自己能做的事情。

       对自己负责 高考的成绩并不好,可以说与我要求的目标差得太远,大一的时候总活在不断地为自己辩护的状态之中,我有时认为失败的原因在家境不好,经济压力太大,使我不能专心学习,有时又将原因归于身体不好,影响学习……这是在逃避责任和现实,将自已的过错与失败都推到客观原因上,失败或错误的原因总是说也说不完,项目没有正常完成,是谁的错,是什么错?需求不明,设计不好,管理不佳,还是程序员的水平不高?有谁能站出来承担自己的那份责任?

       正确地自我估计 无论在工作中还是社会上,我们每个人都占据着一个特定的位置,所以我们需要按这个位置的要求,去履行我们的权利与义务。在一个项目中,如果你是一个系统设计工程师,那么你就全心全力地去完成系统的概要设计与详细设计,并处理好与项目经理、系统分析员、软件开发人员之间的关系,把自己摆在准确的位置上,如果你不按照项目一致规定和大家公认的规范去做,那你将会受到项目其他人员的谴责和反对,也会使项目的管理变得混乱。所以正确地自我评估是很重要的,它可以让我们始终保持冷静,不再好高骛远,也不会骄傲自满或过分自卑,它让我们脚踏实地做事,认认真真做人。

       十大终于写完了,感觉有一丝成就感,尽管有点教条主义的味道,但出发点应是好的,未来的程序员不应是只会埋头苦干的机器,我们需要生动有趣的生活来保持我们的创新能力。在此时抛出十大原则,目的是:当程序员朋友们从远方回来,从疯狂归来之时,能看到一些理性的思维与观点,并好好地自我评估,从我做起,从现在做起,去一步一个脚印地实现自己的梦想。

posted @ 2005-11-30 12:15 青蛙學堂 阅读(144) | 评论 (0)编辑 收藏

FW : 查看数据库的常用SQL

1、查看表空间的名称及大小

select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;

2、查看表空间物理文件的名称及大小

select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;

3、查看回滚段名称及大小

select segment_name, tablespace_name, r.status,
(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
max_extents, v.curext CurExtent
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name ;

4、查看控制文件

select name from v$controlfile;

5、查看日志文件

select member from v$logfile;

6、查看表空间的使用情况

select sum(bytes)/(1024*1024) as free_space,tablespace_name
from dba_free_space
group by tablespace_name;

SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

7、查看数据库库对象

select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;

8、查看数据库的版本 

Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';

9、查看数据库的创建日期和归档方式

Select Created, Log_Mode, Log_Mode From V$Database;

posted @ 2005-11-30 11:55 青蛙學堂 阅读(172) | 评论 (0)编辑 收藏

青蛙學堂--------青蛙報到處

yide

posted @ 2005-11-28 13:29 青蛙學堂 阅读(190) | 评论 (2)编辑 收藏

FW: Efficeon与奔腾M性能大对决

256Bit VLIW指令处理引擎及1MB L2缓存令性能大幅提升

  Transmeta的Efficeon处理器与上一代的Crusoe相比,对其微结构进行了大幅的改良,主要包括以下几方面:

  8组个32Bit Atom,可进行256Bit的VLIW指令处理(Crusoe只是128Bit);

  演算单元增加到11个(Crusoe为5个);

  128KB L1指令缓存+64KB L1数据缓存(Crusoe是64+64KB);

  最大1MB L2缓存(Crusoe最大支持512KB);

  整合AGP控制器(4X模式,Crusoe并不支持);

  系统总线采用Hyper Transport(Crusoe仍是PCI总线);

  支持DDR400的内存控制器(Crusoe只支持到SDRAM及DDR266)。

  旧款的Crusoe采用了4组32Bit的指令处理(Transmeta称之为atom),共128Bit VLIW结构;与此相比,Efficeon使用了8组指令,可进行256Bit的VLIW数据处理,同时Efficeon的演算单元增加到11组,增加了缓存的容量,整合的AGP控制器实现了GPU的AGP连接,增加了Hyper Transport系统总线的支持,实力不容忽视!从指令集方面看,Crusoe和Efficeon使用了称为Code Morphing Software:CMS的构造,把x86指令转换成atom形式进行处理,Crusoe采用4.x版的CMS,而Efficeon升级到5.0版,还新增了对SSE、SSE2的支持,以往的Crusoe只支持MMX,因此在这方面改进的作用是最为明显的。

  低功耗的实现

  今次测评使用的机器分别是Mebius MURAMASA PC-MM2-5NE(TM8600 1GHz)、Mebius MURAMASA PC-MM1-H5W(TM5800 1GHz)、SONY VAIO 505extreme(超低电圧版Pentium M 1GHz)三款,通过对比令大家对三款处理器有更深刻的了解。

  同时列举的数据还包括以往测试过的使用10.4英寸液晶屏的笔记本,与Mebius MURAMASA PC-MM2-5NE尺寸相近的也包括在内,数据上可能会有一定的偏差。首先进行的是大家最关心的处理能力和电池驱动时间的测试,电池驱动时的处理能力及驱动时间的测试使用了BAPCo的MobileMark2002。MobileMark2002可以通过自动运行Microsoft Office XP及Photoshop等软件,测试笔记本在电池驱动下PC反应速度等处理能力(以Performance Rating表示时把移动Pentium III 1GHz的测试值作为标准值100),重复运行直到电池电量耗尽。另外在测试过程中使用了简易测量仪对各个产品的液晶屏亮度进行了测量,把亮度设定在60-70左右,尽量减少亮度对电池性能的影响。


MobileMark2002(性能得分)


MobileMark2002(电池使用时间)

  MobileMark2002的测试结果(Performance Rating)如图一所示。可见TM8600 1GHz的性能大幅超前于Crusoe TM5800 1GHz,基本与搭载超低电压版Pentium M 900MHz的VAIO TR持平。但这款VAIO TR的性能在众多使用超低电压版Pentium M 900MHz的机器中并非十分出色,与其他产品相比有一定的差距。因此测试结果表明了TM8600 1GHz的性能稍稍落后于超低电压版Pentium M 900MHz,但却比TM5800 1GHz提高了60%,性能得到大幅提升。在驱动时间方面,如图二所示,由于电池容量比其他机器要低得多,所以使用TM8600 1GHz的PC-MM2-5NE的驱动时间相当的不理想。PC-MM2-5NE使用了容量只有19.98Wh的小容量电池,这也是其在测试中驱动时间不尽人意的重要原因。


平均功耗


每1W的处理能力(MobileMark2002 Performance Rating÷平均功耗)

  把电池容量除以其所能达到的驱动时间,得出机器消耗电量的平均值—“平均功耗”,借此来衡量机器的省电水平。根据表一的电池容量除以图2的驱动时间,结果如图3所示。由图3可以知道搭载TM8600 1GHz的PC-MM2-5NE的平均功耗为8.33W,比搭载TM5800 1GHz的PC-MM1-H5W的8.81W更低,在节能方面取得了更大的成效。Efficeon的平均功耗也只是比SONY X505(使用超低电压版Pentium M 1GHz)及松下CF-R2(超低电压版Pentium M 900MHz)稍高,而小于其他3款产品(VAIO TR、LOOX T、InterLink XP7),处于中上水平。

  一般来说使用超低电压版Pentium M的产品,其在MobileMark2002中的平均功耗大约在8-9W之间,单就处理器来讲Efficeon至少要和超低电压版Pentium M旗鼓相当,综合其他条件的话有可能实现更出色的低功耗。图4是把平均功耗(图3)除以MobileMark的得分(图1),计算出每1W所能提供的处理能力。换而言之,该图能体现出到底哪部机器能在消耗在最少电量的同时提供更高的性能。图中可以看出与Crusoe相比,Efficeon的效率要高得多,基本与搭载超低电压版Pentium M的两台机器持平,甚至高于二者。

  SSE及SSE2的支持对提高Efficeond处理能力作用明显

  接下来是机器外接AC电源时的性能比较。测试中使用了BAPCo SYSmark2002中的Internet Contents Creation及Office Productivity两个测试项目、TMPGEnc Plus Version 2.51、FutureMark 3DMark2001 Second Edition(Build330)。结果如图5-8所示,为作参考还附带了之前PCMark04的测试结果。

  但是搭载TM5800 1GHz的PC-MM1-H5W只使用了SMI的Lynx 3DM+显示芯片,并不支持3DMark2001、PCMark04所要求的DirectX 7,因此图中并没有3DMark2001的测试结果,而且PC-MM1-H5W也无法完成SYSmark2002的测试。


SYSmark2002/Office Productivity


SYSmark2002/Internet Contents Creations

  值得注意的是SYSmark2002中的Internet Contents Creation测试结果(图6)。搭载TM8600 1GHz的PC-MM2-5NE居然领前于搭载超低电压版Pentium M的X505、VAIO TR和CF-R2。Internet Contents Creation是使用SSE及SSE2比较多的测试程序,Efficeon新增对SSE、SSE2的支持起到非常重要的作用。同时在TMPGEnc Plus Version 2.51中的MPEG-1格式转换测试(图7)中也是如此。实际上,搭载不支持SSE、SSE2的TM5800 1GHz处理器的PC-MM1-H5W在该测试中只能达到4.41fps,而搭载TM8600 1GHz的PC-MM2-5NE能达到8.13fps,有接近一倍的性能提升, 可直接与超低电压版Pentium M匹敌。



TMGPEnc Plus Version 2.51(单位:fps)


3DMark2001 Second Edition(Build330)

  3DMark2001 Second Edition主要是对GPU性能的测试,基本上能对GPU性能的优劣程度有比较准确的判断。PC-MM2-5NE搭载的Mobile Radeon(16MB)属于相当旧式的GPU,并不支持硬件T&L引擎,性能上落后于Intel 855GM内置的显示芯片。


PCMark04

  VAIO PCG-X505(Pentium M 1GHz-ULV) Mebius MURAMASA PC-MM1-H5W(Crusoe TM5800 1GHz) Mebius MURAMASA PC-MM2-5NE(Efficeon TM8600 1GHz)
File Compression 1.3 MB/sec 1.2 MB/sec 1.2 MB/sec
File Encryption 10.3 MB/sec 11.8 MB/sec 11.4 MB/sec
File Decompression 9.1 MB/sec 5.5 MB/sec 8.5 MB/sec
Image Processing 4.1 MPixels/s 2.2 MPixels/s 4.9 MPixels/s
Grammar Check 1.9 KB/sec 1.3 KB/sec 1.5 KB/sec
File Decryption 22.3 MB/sec 20.5 MB/sec 23.5 MB/sec
Audio Conversion 1027.5 KB/sec 540.8 KB/sec 710.9 KB/sec
WMV Video Compression 17.3 FPS 7.2 FPS 14.3 FPS
DivX Video Compression 22.7 FPS 7.4 FPS 18.2 FPS
Raw Block Read - 8 MB 1649.6 MB/sec 630.7 MB/sec 3775.6 MB/sec
Raw Block Read - 4 MB 1711.1 MB/sec 631.3 MB/sec 3835.3 MB/sec
Raw Block Read - 192 KB 3458.3 MB/sec 1731.6 MB/sec 7516.3 MB/sec
Raw Block Read - 4 KB 5362.6 MB/sec 3951.7 MB/sec 19815.7 MB/sec
Raw Block Write - 8 MB 1065.6 MB/sec 233.4 MB/sec 553.0 MB/sec
Raw Block Write - 4 MB 1055.7 MB/sec 232.3 MB/sec 556.2 MB/sec
Raw Block Write - 192 KB 3009.0 MB/sec 1591.3 MB/sec 1780.7 MB/sec
Raw Block Write - 4 KB 6054.3 MB/sec 3929.5 MB/sec 5193.4 MB/sec
Raw Block Copy - 8 MB 747.0 MB/sec 233.4 MB/sec 714.5 MB/sec
Raw Block Copy - 4 MB 811.1 MB/sec 231.9 MB/sec 725.7 MB/sec
Raw Block Copy - 192 KB 2231.6 MB/sec 1374.1 MB/sec 1382.4 MB/sec
Raw Block Copy - 4 KB 4291.5 MB/sec 2656.2 MB/sec 3212.5 MB/sec
Random Access - 8 MB 990.9 MB/sec 602.6 MB/sec 539.1 MB/sec
Random Access - 4 MB 983.7 MB/sec 604.7 MB/sec 547.8 MB/sec
Random Access - 192 KB 2432.4 MB/sec 1414.5 MB/sec 1608.8 MB/sec
Random Access - 4 KB 3275.6 MB/sec 2644.7 MB/sec 3325.6 MB/sec
Transparent Windows 62.2 Windows/sec 0.0 120.6 Windows/sec
Graphics Memory - 16 lines 238.3 FPS 0.0 260.3 FPS
Graphics Memory - 32 lines 238.3 FPS 0.0 242.8 FPS
3D - Fill Rate Single Texturing 187.7 MTexels/sec 0.0 47.1 MTexels/sec
3D - Fill Rate Multitexturing 334.4 MTexels/sec 0.0 110.0 MTexels/sec
3D - Polygon Throughput Single Light 2.7 MTriangles/sec 0.0 1.8 MTriangles/sec
3D - Polygon Throughput Multiple Lights 1.9 MTriangles/sec 0.0 1.2 MTriangles/sec
XP Startup 3.6 MB/sec 3.6 MB/sec 3.9 MB/sec
Application Loading 2.7 MB/sec 2.7 MB/sec 2.7 MB/sec
File Copying 8.1 MB/sec 8.1 MB/sec 7.9 MB/sec
General HDD Usage 2.2 MB/sec 2.2 MB/sec 2.1 MB/sec

  使用的1.8英寸硬盘表现不俗

  最后还对和Efficeon关系不大的硬盘作一点介绍。PC-MM2-5NE使用的是HGST日立1.8英寸的硬盘,体积上较一般的2.5英寸盘要薄,而接口一样。这款硬盘的型号为DK14FA-20,容量为20GB。为测试该款硬盘的性能,使用了WinBench 2.0里面的Disk Inspection Tests,是测试数据传输效能(Disk Transfer Rate)的软件。结果如下图所示。


PC-MM2-5NE(HGST DK14FA-20搭载、1.8英寸/4,200rpm)


PC-MM1-H5W(东芝 MK2004GAL)


VAIO X505(东芝 MK2004GAL)


HGST HTS548080M9AT00


HGST IC25N080ATMR04-0

  比较的对象包括同是使用了东芝1.8英寸硬盘的PC-MM1-H5W和VAIO X505,另外还有5400rpm(型号为HTS548080M9AT00、80GB、ThinkPad T40所采用)与4200rpm(型号为IC25N080ATMR04-0、80GB、搭载于ThinkPad T30)两款2.5英寸HGST硬盘的较量。结果如下图所示,与使用了8MB缓存的2.5英寸盘相比,1.8英寸盘自然败于下风,但两款1.8英寸盘之间的差异十分微小,使用HGST DK14FA-20的PC-MM2-5NE在速度上稍微占优。

  具备与超低电压版Pentium M较量的实力,期待有更多搭载Efficeon的机型出现

  综上所述,搭载Efficeon TM8600 1GHz的PC-MM2-5NE与使用超低电压版Pentium M 1GHz的机器相比仍有所不及,但完全具备和超低电压版Pentium M 900MHz抗衡的能力,甚至在某些测试项目领先。Efficeon作为一款新推出的产品,实在是令人刮目相看。

  特别是使用过旧款Crusoe的用户应该深有体会吧,操作时的顿错感已减轻了不少。实际使用过PC-MM1-H5W后再去试Efficeon TM8600 1GHz的PC-MM2-5NE,感觉更是耳目一新,打开Windows窗口几乎是一气呵成,感觉上速度和超低电压版Pentium M的机器相差无几。

  现时为止还没有搭载Efficeon最高频率1.1GHz的机器推出,倘若搭载1.1GHz的产品推出的话,性能上应该等同于超低电压版Pentium M1GHz,而且这次测评只使用了单单一家厂家的产品,不得不说是一个遗憾。希望今后会有更具性价比的Efficeon产品出现,也希望会有更多厂家乐于使用Efficeon处理器。


posted @ 2005-11-28 13:18 青蛙學堂 阅读(387) | 评论 (0)编辑 收藏

FW : 系统资源泄漏的问题和对策

一、系统资源

  谈到Windows时,有一个必说的话题--系统资源(System Resource),但系统资源到底是什么,有人说是指CPU,有人说是指硬盘空间,有人说是指内存……

  当应用程序在Windows中运行时,Windows必须实时"跟踪"该应用程序的运行,并保留与之相关的许多信息,如按钮、光标、菜单的位置和位图、窗口的状况等,这些信息由Windows保留在一种叫堆的内存块中,堆的英文为Heap。简单地说,堆是采用特殊机制管理的内存块。由Windows的一个系统内核User.exe管理的堆叫作User资源堆(User Resource Heap),由另一个系统内核Gdi.exe管理的堆叫作GDI资源堆(Graphical Device Interface Resource Heap,简称GDI Resource Heap),User资源堆和GDI资源堆合称为系统资源堆(System Resource Heap),习惯上就把它们叫作系统资源(System Resource)。

  微软将Windows的系统资源(堆)分为五个堆,其中User资源堆为三个,而GDI资源堆为两个。

  三个User资源堆分别是:16位的用户堆(User Heap,64KB);32位的窗口堆(Windows Heap,2MB);32位的用户菜单堆(User Menu Heap,2MB)。

  两个GDI资源堆分别是:16位的GDI堆(GDI Heap,64KB);32位的GDI堆(GDI,2MB)。

  从这里的系统资源分类和大小我们应该明白,不管CPU是P4还是486,内存是8M还是1G,所有Windows的用户都拥有同样大小的系统资源(堆),用户不能自己增加或减少系统资源的大小,这是由操作系统决定的,与硬件档次没有任何关系。

  Windows的User资源堆和GDI资源堆的可用(Free)空间称为可用 User资源和可用GDI资源,Windows中以百分数表示它们,用户可以选择 "开始/附件/系统工具/资源状况"(见图),来实时查看它们的大小。注意,"资源状况"不是Windows的默认安装组件,使用典型安装的用户需自己添加上去。

  二、为什么可用系统资源不断减少

  当一个应用程序在Windows中被加载时,Windows自动地将可用User资源堆和可用GDI资源堆中的一部分空间分配给它,而当应用程序退出时,这部分空间也应该由Windows收回以交给别的应用程序使用。但实际上几乎所有的Windows 用户都发现:一个应用程序加载前和退出后可用系统资源的值是不相等的,而且随着应用程序的不断加载和退出,随着Windows使用时间的增加,附图中资源状况显示的可用系统资源也在不断减少。

  微软的正式解释是:

  * 系统初始化

  Windows在启动时要进行系统初始化(System Initialization)的过程, Windows的系统初始化属于延时初始化。例如,Windows在启动时只初始化当前使用的字体,以后当应用程序要使用到尚未被初始化的字体时, Windows才会初始化该字体,这种由应用程序根据需要提出要求而发生的初始化服务就是所谓的延时初始化。对于属于延时初始化的服务, Windows还采用了特别的管理方式,当向Windows提出延时初始化服务的应用程序退出后,与延时初始化服务相关的系统资源(例如上面提到的与新字体有关的系统资源)不会随着应用程序的退出而马上释放,这是造成应用程序加载前和退出后可用系统资源的值不相等的原因之一。Windows不马上收回与延时初始化服务,是为了防止该应用程序或别的应用程序以后又向系统提出同样的初始化服务而导致系统不断重复服务而浪费时间。例如对于加载同一应用程序,第二次加载的时间会明显少于第一次,显然延时初始化功不可没。

  * 兼容性

  在Windows中运行的所有16位应用 程序共享相同的地址空间,当其中某一个16位应用程序正常退出或出现错误而被关闭时, Windows 9X并不马上收回这个应用程序所占用的系统资源,这也是造成一个应用程序加载前和退出后可用系统资源的值不相等的又一个原因。只有当所有的16位应用程序全部退出后,Windows才能安全地收回被这些程序占用的系统资源,此时可用系统资源才会恢复到原值。之所以这样设计,主要是考虑到要让Windows 9X能继续运行大量的16位应用程序。

  * 资源泄漏

  按上述解释,可用系统资源的不断减少是正常的,这是 Windows的设计目的之一。但是许多程序员在实际工作中还发现在其他一些情况下Windows也会不能完全收回系统资源,这也导致可用系统资源不断减少,程序员们称这种现象为资源泄漏(Resource Leak)。微软开始并未承认,但是随着证据的不断增加,最后还是不得不承认其中的一些现象是存在的。

  比如一个程序还未完成其加载过程时(即还没有启动完毕)就关闭它会造成资源泄漏,而且只有重新启动才能回收。

  另外一些应用程序退出后Windows并不马上收回分配给它的系统资源,而是保持15分钟左右,到Windows完全肯定不再需要时才将它们收回,这可以看作是延时初始化的一种延伸。

  用户使用"Ctrl+Alt+Del"强制性地关闭一些应用程序会造成资源泄漏,因此用户应该尽量使用应用程序本身的关闭功能退出应用程序,只有实在没办法时才使用这种关闭方法。因为这种强制关闭应用程序的方法往往只能关闭主程序,而不能关闭应用程序的一些子程序,因此会导致一些系统资源发生泄漏。

  一些编写不善的应用程序会造成资源泄漏。一个应用程序在运行中往往会因出现意外而崩溃,若程序员在编写应用程序时没有考虑到这种意外情况的出现,并在应用程序中有相应的代码处理这种意外,那么当该应用程序非正常关闭后,该应用程序所占用的系统资源就不能由Windows收回。

  还有一些应用程序,即使是正常关闭也不会释放它所占用的系统资源,这样的应用程序被程序员称为"垃圾",计算机用户绝对不要使用这样的软件。

  还有一些实际存在而微软也没有给予解释的情况。比如用户上网结束后关闭拨号网络中的网络连接,然后按Ctrl+Alt+Del看看,一定会发现有一个名为rnaap(英文版)或者rnaapp(中文版)的程序还在运行,这是什么东西?其实这是拨号网络用来拨通ISP的远程网络访问程序(Remote Network Access Application Program),在用户登录网络的时候这个程序被运行,但是在用户从网络注销后它本身并未退出。这不免让人产生这样一个疑问:在这样一个庞大的Windows系统中,到底还有多少这样那样的例外存在呢?

  三、系统资源泄漏的对策

  关于系统资源泄漏的问题还有许多,由于篇幅所限,笔者只好省略掉对它们的详细分析和解释,而直接给出如何解系统的秘密决的结论。

  1.准确地来讲,Windows中并不存在一个有着实际意义的系统资源。可用系统资源一定等于可用User资源和可用GDI资源中值较小的那一个。

  2.Windows的可用User资源是根据所有User资源堆中可用空间最小的那个资源堆计算出来的;可用GDI资源的计算方法也是一样。为了保持与16位应用程序的兼容性, Windows 9X的大量数据都要使用16位64KB资源堆,这导致总是16位64KB的资源堆首先被大量消耗,因此在 Windows 9X中,限制系统资源使用的是64KB的资源堆而不是2MB的资源堆。

  3.系统资源是用来跟踪应用程序的运行而不是用来运行应用程序的,就像公路上车多车少,并不是车稍微多点就没有办法开车了。因此可以肯定地说,影响计算机系统性能的是计算机系统其他的因素,而绝不会是可用系统资源的大小。当用户计算机系统性能明显降低时,应该从别的方面去查找原因,而不要马上怀疑到系统资源身上。从硬件方面来看,内存太小导致系统不得不频繁使用虚拟内存是影响系统性能的主要原因之一;从软件方面来看,因为Windows是一个多任务的操作系统,大家都习惯同时运行多个应用程序而不管当时是否实际需要。而编写和调试这些应用程序的程序员一般只考虑其在单任务环境下的运行,而没有过多的精力从多任务环境来考虑和调试,因此许多应用程序间往往不能很好地协同工作,同时运行多个这样的应用程序会因它们彼此之间发生冲突而导致系统性能下降。当然,Windows 9X多任务管理机制的不完善也是造成这个问题的主要原因之一。

  4.虽然可用系统资源的减少不会对系统的性能有任何影响,但是其值最好不要小于10%,小于此值带来的直接后果是可能不能再加载新的应用程序,而副作用是系统崩溃的可能性大大增加。

  5.Windows本身也要占用系统资源,因此绝对没有哪个Windows用户的可用系统资源会是百分之百,要保持有更多的可用系统资源的方法是不要同时运行太多的应用程序。Windows和它的许多应用程序都有一个不经用户同意就自动加载东西的坏毛病,大家可以运行Msconfig.exe来关闭一些没有必要自动加载的应用程序,如ICQ、电子词典和超级解霸的自动播放伺服器等。

  6.不要将系统资源和CPU资源(CPU使用率)相混淆,硬盘、光驱、软猫的数据处理、显卡的3D图像处理、声卡的3D音效处理占用的都是CPU时间(即消耗CPU资源),而不是系统资源,这些硬件设备的先进与否与占用系统资源的多少根本没有任何关系,可至今许多人还是将它们混为一谈。按习惯,谈到硬件的资源占用一般是指其CPU资源的占用,而软件的资源占用既包括CPU资源占用又包括系统资源(堆)占用,但计算机用户关心的一般是后者,因此谈到软件的资源占用时一般是指其对系统资源的占用。

  最后说明一点,本文所提到的与系统资源有关的各种问题只适用于Windows 3.X、Windows 9X和Windows Me,而不适用于Windows NT、Windows 2000和Windows XP,因为它们设计和管理系统资源的机制是不同的。

posted @ 2005-11-28 11:58 青蛙學堂 阅读(169) | 评论 (0)编辑 收藏

FW : SiS 655FX与VIA PT880性能大比拼

价格合理的双通道DDR400:SiS 655FX与VIA PT880

  高性能的台式机所使用的CPU、硬盘或
显卡都与其它计算机不同。不过,这一两个月以来,有一项因素已成为不变的定理:要达到最高性能就必须使用双通道DDR内存。

  这个原因很简单:因为目前并没有其它选择。虽然DDR内存能够提供比标准的SDRAM更高的带宽,但是目前尚未开发出比DDR内存更优秀的解决方案。产业需要更高的带宽,现在这个需求终于获得解决了–同时使用两个64位的内存通道。

  最初双通道内存平台是以DDR266(PC2100)内存为基础,但是部分制造商随即推出DDR333(PC2700)。不过Intel决定在推出800 MHz的Pentium 4之前,继续使用双通道DDR266。显然为了将内存频率提升到双通道DDR333就必须付上无法使用同步RAM操作模式的代价,如此不仅增加了硬盘的负担,同时也无法提高太多性能。


  由于两条200 MHz(PC3200)双通道内存可有效地达到800 MHz的频率与FSB800,因此Intel的865PE与875P芯片组非常适用同步内存。SiS与VIA的芯片也支持此概念,不过它们提供了其它内存频率模式,让用户能够执行一些假性同步设置,例如拥有双通道DDR333内存的FSB400处理器。这些设置对于以升级为诉求的用户非常有用。如果他们已经有两条同样的内存模块,他们就不需要购买新的DDR内存。

  SiS与VIA花了些时间开发出在技术方面尚合乎标准的产品:SiS655FX整合了新的南桥芯片SiS964。它提供了8个USB 2.0口与2个SATA口。VIA的PT880芯片乍看之下与SiS相同,但是它有更多功能。我们稍后将会提到。

  不过,最重要的问题是:新芯片是否符合我们的期望?由于这两家台湾芯片厂商比Intel有更充裕的时间推出双通道芯片,我们认为至少在性能方面,这两家厂商的产品应该不至于差太多。我们测试的VIA PT880主板是Soltek(硕泰克)提供的工程样本,而SiS655FX则是由SiS直接提供的。现在就让我们进入重头戏吧!



SATA的时代终于来临了

下表可让你大致了解4款适用于DDR400与Intel Pentium 4处理器的双通道芯片组。





  新芯片组中有一个功能,我们认为比其它性能因素更重要:SATA控制器的整合。大部分的人都知道这种post-UltraATA标准。

  由于目前的硬盘传输率仍不到UltraATA100 MB/s,更不用说SATA的150 MB/s,因此这个技术对于提升整体系统性能的作用并不大。不过它的优点深具意义,而且非常方便:使用的电缆线长度可高达一公尺,而且不会影响计算机内部空气的对流。此外,他们很小、很容易使用。由于每个接头只可连接一个磁盘驱动器,因此就不会有主/从磁盘驱动器的问题了。

  由于开发过程都是可控制的,加上量产吸收掉所有相关的成本,因此SATA控制器的整合也意味着你不需要再花其它的费用。整合此功能对磁盘驱动器厂商的影响甚钜,因为他们能够获得更多可轻易使用他们磁盘驱动器的系统。

Gigabit Ethernet

  高端用户必须常将Gigabit Ethernet这个因素谨记在心。虽然大部分的控制器都能够达到每秒100MB的传输率(33 MHz频率时的最大传输达132MB/s),但是只要它们必须与其它设备共享带宽(事实上,这种情况并不罕见),PCI总线便会大大削减它们的传输率。

  Intel有个方法可解决这个问题,就是CSA或通讯串流架构(Command Streaming Architecture)。它可用每秒266 MB的网络芯片直接连接到北桥上(MCH或82875P),以免拖慢南桥芯片的速度。

  不幸的是,必须向Intel付专利费才能使用此通讯协议。这或许也是SiS与VIA不愿妥协的原因。但是这无法解释他们为何迟迟未推出避免网络速度被拖慢的类似产品。虽然这两款新芯片组都无法解决最高性能的需求,但是此功能的重要性是绝不容忽视的。


VIA PT880 aka SL-PT880E-RL



  由于以前VIA没有生产Pentium 4芯片组的授权,导致失去大量的市场,让VIA遭受相当大的打击。


 PT880使用VIA最新开发的双通道内存接口,未来针对AMD处理器所推出的芯片组也会使用此技术。由于针对Athlon 64开发内存接口没什么意义,因此你可以预测未来会发生什么事。

  相较于SiS,VIA决定让芯片尽量拥有最多的功能,并支持ECC内存以及8个记忆库。此外它还支持8GB的RAM。Intel与SiS只支持4GB,这也是一个32-bit处理器最多能处理的量。虽然在Pentium 4台式机上配备数GB的内存有点浪费,不过保持多样性的升级途径总是好的。

  虽然VIA的芯片仍不支持DDR2内存,但是它的技术规格提到此芯片支持单/双通道的4倍带宽内存,因此等到DDR2内存问世后,我们可能就会看到支持DDR2的VIA主板。

  除了这些新功能外,PT880还包含所有芯片组共同的功能,包括支持AGP 8X接口、2个UltraATA/133接口、6声道音效控制器、网络控制器、6个PCI槽与8个USB 2.0口。


我想直接看芯片组的图片会比文字叙述来的有趣些,因此我就此打住。



  Soltek即将推出使用VIA PT880芯片的主板。我们收到了一个主板样本。虽然这是工程版的主板,不过作业状况已经非常稳定。



  此款芯片组搭配VT8237南桥芯片。

它的功能与8235相同,并增加支持的USB口与SATA控制器。



  除了原有的两个口以外,你可以使用VIA的SATAlite接口轻松地增加另外两个口。


自己试试看吧!



  它的包装并不是最终定案的版本,不过Soltek的商标倒不会有什么变化。



  Soltek的工程版样本已经非常成熟了。它整合了所有该有的接口,包括串行端口与并行端口。


SiS 655FX:SiS主板的参考设计



  此款芯片组的功能与Intel或VIA的芯片差不多:
AGP 8x、双UltraATA/133接口、网络接口、6声道音效控制器、8个USB 2.0口与两个支持RAID 0、1或0+1的SATA口。

  由于655FX并未整合ECC支持或Gigabit Ethernet接口等功能,因此SiS主打高性能台式机的低阶市场。



  左边是SiS的侦错口。在北桥芯片上有一个风扇,该风扇设计了不同颜色的LED,我们不知道为何工程用的主板上会有这些设计,或许这也是产品研发的概念之一吧。


这就是SiS最新款的芯片组,代号为964


免费的SATA支持。SiS964南桥芯片可提供两个SATA口


这是SiS专属的工程版连接端口。我们在量产的主板上从未看过这种接头。



USB、Ethernet、LAN、音效等等


计算机玩家一定会爱死主板上的这些按钮。它们可让你轻松地开/关与重设计算机,而不需要连接任何电缆。



测试环境



性能测试结果

OpenGL Benchmarks



DirectX9 Benchmarks



Video Benchmarks




Application Benchmarks




Synthetic Benchmarks



Synthetic Benchmarks






结论:875P性能最高、VIA紧追在后、SiS价格合理

  在这些性能测试中,SiS与VIA各有所长,不过如果你愿意不计代价获得最高性能,Intel 875P仍是最理想的选择。不过它与SiS和VIA芯片之间的性能差距并不会很大,因此如果你不想花大钱却换来有限的性能提升,劝你还是三思吧!

  VIA一直试图研发出支持最高内存带宽的产品,现在,VIA最新款的内存接口终于让他们实现梦想了。不过它在这次性能测试中只拿到5个冠军,仅次于Intel的875P。SiS在编码与显示性能测试(例如XMPEG与Lam)方面则领先其它芯片。由于这方面的性能测试主要需要快速的CPU,因此只要对频率稍动手脚便可影响其性能。目前只有SiS主板频率为3210 MHz,其它主板都只有3200 MHz或不到3200 MHz。

  VIA芯片组在性能和功能方面都与Intel棋逢敌手,但是价格较低廉。SiS继今年春季推出销售不佳的SiS655后再接再厉,推出改良版的SiS655FX。这款芯片组的性能也非常接近875P。在功能方面,SiS坚守最重要的原则:一般家庭用户并不需要ECC,而且目前很少有人需要用到1GB的内存。或许VIA应该考虑使用PT880制造便宜的Xeon平台,这样提供4GB以上的内存支持就合理多了。

  最后,我们似乎得到了一个不分胜负的局面。这3款芯片组的性能相当,不过Intel芯片组的性能仍比其它两款优秀一些。VIA以功能取胜,SiS则以价格来吸引消费者。不过,究竟哪一款会是最后赢家还必须取决于主板厂商以及他们目前使用的芯片组。如果VIA的价格够低,他们便可在今年圣诞节假期抢走865P与SiS的市场,否则高性能台式机市场的大饼很可能落入SiS的口袋中,毕竟655FX本身条件也不差。




posted @ 2005-11-28 08:38 青蛙學堂 阅读(548) | 评论 (1)编辑 收藏

FW : ORACLE函数

SQL中的单记录函数
1.ASCII
返回与指定的字符对应的十进制数;
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

A A ZERO SPACE
--------- --------- --------- ---------
65 97 48 32

2.CHR
给出整数,返回对应的字符;
SQL> select chr(54740) zhao,chr(65) chr65 from dual;

ZH C
-- -
赵 A

3.CONCAT
连接两个字符串;
SQL> select concat('010-','88888888')||'转23' 高乾竞电话 from dual;

 

4.INITCAP
返回字符串并将字符串的第一个字母变为大写;
SQL> select initcap('smith') upp from dual;

UPP
-----
Smith

5.INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
SQL> select instr('oracle traning','ra',1,2) instring from dual;

INSTRING
---------
9

6.LENGTH
返回字符串的长度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;

NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾竞 3 北京市海锭区 6 9999.99 7

7.LOWER
返回字符串,并将所有的字符小写
SQL> select lower('AaBbCcDd')AaBbCcDd from dual;

AABBCCDD
--------
aabbccdd

8.UPPER
返回字符串,并将所有的字符大写
SQL> select upper('AaBbCcDd') upper from dual;

UPPER
--------
AABBCCDD

9.RPAD和LPAD(粘贴字符)
RPAD 在列的右边粘贴字符
LPAD 在列的左边粘贴字符
SQL> select lpad(rpad('gao',10,'*'),17,'*')from dual;

LPAD(RPAD('GAO',1
-----------------
*******gao*******
不够字符则用*来填满

10.LTRIM和RTRIM
LTRIM 删除左边出现的字符串
RTRIM 删除右边出现的字符串
SQL> select ltrim(rtrim(' gao qian jing ',' '),' ') from dual;

LTRIM(RTRIM('
-------------
gao qian jing

11.SUBSTR(string,start,count)
取子字符串,从start开始,取count个
SQL> select substr('13088888888',3,8) from dual;

SUBSTR('
--------
08888888

12.REPLACE('string','s1','s2')
string 希望被替换的字符或变量
s1 被替换的字符串
s2 要替换的字符串
SQL> select replace('he love you','he','i') from dual;

REPLACE('H
----------
i love you

13.SOUNDEX
返回一个与给定的字符串读音相同的字符串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values('weather');
SQL> insert into table1 values('wether');
SQL> insert into table1 values('gao');

SQL> select xm from table1 where soundex(xm)=soundex('weather');

XM
--------
weather
wether

14.TRIM('s' from 'string')
LEADING 剪掉前面的字符
TRAILING 剪掉后面的字符
如果不指定,默认为空格符

15.ABS
返回指定值的绝对值
SQL> select abs(100),abs(-100) from dual;

ABS(100) ABS(-100)
--------- ---------
100 100

16.ACOS
给出反余弦的值
SQL> select acos(-1) from dual;

ACOS(-1)
---------
3.1415927

17.ASIN
给出反正弦的值
SQL> select asin(0.5) from dual;

ASIN(0.5)
---------
.52359878

18.ATAN
返回一个数字的反正切值
SQL> select atan(1) from dual;

ATAN(1)
---------
.78539816

19.CEIL
返回大于或等于给出数字的最小整数
SQL> select ceil(3.1415927) from dual;

CEIL(3.1415927)
---------------
4

20.COS
返回一个给定数字的余弦
SQL> select cos(-3.1415927) from dual;

COS(-3.1415927)
---------------
-1

21.COSH
返回一个数字反余弦值
SQL> select cosh(20) from dual;

COSH(20)
---------
242582598

22.EXP
返回一个数字e的n次方根
SQL> select exp(2),exp(1) from dual;

EXP(2) EXP(1)
--------- ---------
7.3890561 2.7182818

23.FLOOR
对给定的数字取整数
SQL> select floor(2345.67) from dual;

FLOOR(2345.67)
--------------
2345

24.LN
返回一个数字的对数值
SQL> select ln(1),ln(2),ln(2.7182818) from dual;

LN(1) LN(2) LN(2.7182818)
--------- --------- -------------
0 .69314718 .99999999

25.LOG(n1,n2)
返回一个以n1为底n2的对数
SQL> select log(2,1),log(2,4) from dual;

LOG(2,1) LOG(2,4)
--------- ---------
0 2

26.MOD(n1,n2)
返回一个n1除以n2的余数
SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;

MOD(10,3) MOD(3,3) MOD(2,3)
--------- --------- ---------
1 0 2

27.POWER
返回n1的n2次方根
SQL> select power(2,10),power(3,3) from dual;

POWER(2,10) POWER(3,3)
----------- ----------
1024 27

28.ROUND和TRUNC
按照指定的精度进行舍入
SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;

ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
56 -55 55 -55

29.SIGN
取数字n的符号,大于0返回1,小于0返回-1,等于0返回0
SQL> select sign(123),sign(-100),sign(0) from dual;

SIGN(123) SIGN(-100) SIGN(0)
--------- ---------- ---------
1 -1 0

30.SIN
返回一个数字的正弦值
SQL> select sin(1.57079) from dual;

SIN(1.57079)
------------
1

31.SIGH
返回双曲正弦的值
SQL> select sin(20),sinh(20) from dual;

SIN(20) SINH(20)
--------- ---------
.91294525 242582598

32.SQRT
返回数字n的根
SQL> select sqrt(64),sqrt(10) from dual;

SQRT(64) SQRT(10)
--------- ---------
8 3.1622777

33.TAN
返回数字的正切值
SQL> select tan(20),tan(10) from dual;

TAN(20) TAN(10)
--------- ---------
2.2371609 .64836083

34.TANH
返回数字n的双曲正切值
SQL> select tanh(20),tan(20) from dual;

TANH(20) TAN(20)
--------- ---------
1 2.2371609

35.TRUNC
按照指定的精度截取一个数
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;

TRUNC1 TRUNC(124.16666,2)
--------- ------------------
100 124.16

36.ADD_MONTHS
增加或减去月份
SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

TO_CHA
------
200002
SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

TO_CHA
------
199910

37.LAST_DAY
返回日期的最后一天
SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;

TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;

LAST_DAY(S
----------
31-5月 -04

38.MONTHS_BETWEEN(date2,date1)
给出date2-date1的月份
SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual;

MON_BETWEEN
-----------
9
SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;

MON_BETW
---------
-60

39.NEW_TIME(date,'this','that')
给出在this时区=other时区的日期和时间
SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time
2 (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;

BJ_TIME LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32

40.NEXT_DAY(date,'day')
给出日期date和星期x之后计算下一个星期的日期
SQL> select next_day('18-5月-2001','星期五') next_day from dual;

NEXT_DAY
----------
25-5月 -01

41.SYSDATE
用来得到系统的当前日期
SQL> select to_char(sysdate,'dd-mm-yyyy day') from dual;

TO_CHAR(SYSDATE,'
-----------------
09-05-2004 星期日
trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒
SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,
2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00

42.CHARTOROWID
将字符数据类型转换为ROWID类型
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;

ROWID ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

43.CONVERT(c,dset,sset)
将源字符串 sset从一个语言字符集转换到另一个目的dset字符集
SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual;

conver
------
strutz

44.HEXTORAW
将一个十六进制构成的字符串转换为二进制

45.RAWTOHEXT
将一个二进制构成的字符串转换为十六进制

46.ROWIDTOCHAR
将ROWID数据类型转换为字符类型

47.TO_CHAR(date,'format')
SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2004/05/09 21:14:41

48.TO_DATE(string,'format')
将字符串转化为ORACLE中的一个日期

49.TO_MULTI_BYTE
将字符串中的单字节字符转化为多字节字符
SQL> select to_multi_byte('高') from dual;

TO
--

50.TO_NUMBER
将给出的字符转换为数字
SQL> select to_number('1999') year from dual;

YEAR
---------
1999

51.BFILENAME(dir,file)
指定一个外部二进制文件
SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));

52.CONVERT('x','desc','source')
将x字段或变量的源source转换为desc
SQL> select sid,serial#,username,decode(command,
2 0,'none',
3 2,'insert',
4 3,
5 'select',
6 6,'update',
7 7,'delete',
8 8,'drop',
9 'other') cmd from v$session where type!='background';

SID SERIAL# USERNAME CMD
--------- --------- ------------------------------ ------
1 1 none
2 1 none
3 1 none
4 1 none
5 1 none
6 1 none
7 1275 none
8 1275 none
9 20 GAO select
10 40 GAO none

53.DUMP(s,fmt,start,length)
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值
SQL> col global_name for a30
SQL> col dump_string for a50
SQL> set lin 200
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;

GLOBAL_NAME DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

54.EMPTY_BLOB()和EMPTY_CLOB()
这两个函数都是用来对大数据类型字段进行初始化操作的函数

55.GREATEST
返回一组表达式中的最大值,即比较字符的编码大小.
SQL> select greatest('AA','AB','AC') from dual;

GR
--
AC
SQL> select greatest('啊','安','天') from dual;

GR
--

56.LEAST
返回一组表达式中的最小值
SQL> select least('啊','安','天') from dual;

LE
--

57.UID
返回标识当前用户的唯一整数
SQL> show user
USER 为"GAO"
SQL> select username,user_id from dba_users where user_id=uid;

USERNAME USER_ID
------------------------------ ---------
GAO 25

58.USER
返回当前用户的名字
SQL> select user from dual;

USER
------------------------------
GAO

59.USEREVN
返回当前用户环境的信息,opt可以是:
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA 查看当前用户是否是DBA如果是则返回true
SQL> select userenv('isdba') from dual;

USEREN
------
FALSE
SQL> select userenv('isdba') from dual;

USEREN
------
TRUE
SESSION
返回会话标志
SQL> select userenv('sessionid') from dual;

USERENV('SESSIONID')
--------------------
152
ENTRYID
返回会话人口标志
SQL> select userenv('entryid') from dual;

USERENV('ENTRYID')
------------------
0
INSTANCE
返回当前INSTANCE的标志
SQL> select userenv('instance') from dual;

USERENV('INSTANCE')
-------------------
1
LANGUAGE
返回当前环境变量
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
返回当前环境的语言的缩写
SQL> select userenv('lang') from dual;

USERENV('LANG')
----------------------------------------------------
ZHS
TERMINAL
返回用户的终端或机器的标志
SQL> select userenv('terminal') from dual;

USERENV('TERMINA
----------------
GAO
VSIZE(X)
返回X的大小(字节)数
SQL> select vsize(user),user from dual;

VSIZE(USER) USER
----------- ------------------------------
6 SYSTEM

60.AVG(DISTINCT|ALL)
all表示对所有的值求平均值,distinct只对不同的值求平均值
SQLWKS> create table table3(xm varchar(8),sal number(7,2));
语句已处理。
SQLWKS> insert into table3 values('gao',1111.11);
SQLWKS> insert into table3 values('gao',1111.11);
SQLWKS> insert into table3 values('zhu',5555.55);
SQLWKS> commit;

SQL> select avg(distinct sal) from gao.table3;

AVG(DISTINCTSAL)
----------------
3333.33

SQL> select avg(all sal) from gao.table3;

AVG(ALLSAL)
-----------
2592.59

61.MAX(DISTINCT|ALL)
求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次
SQL> select max(distinct sal) from scott.emp;

MAX(DISTINCTSAL)
----------------
5000

62.MIN(DISTINCT|ALL)
求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次
SQL> select min(all sal) from gao.table3;

MIN(ALLSAL)
-----------
1111.11

63.STDDEV(distinct|all)
求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差
SQL> select stddev(sal) from scott.emp;

STDDEV(SAL)
-----------
1182.5032

SQL> select stddev(distinct sal) from scott.emp;

STDDEV(DISTINCTSAL)
-------------------
1229.951

64.VARIANCE(DISTINCT|ALL)
求协方差

SQL> select variance(sal) from scott.emp;

VARIANCE(SAL)
-------------
1398313.9

65.GROUP BY
主要用来对一组数进行统计
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;

DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
10 3 8750
20 5 10875
30 6 9400

66.HAVING
对分组统计再加限制条件
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;

DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400
SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;

DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400

67.ORDER BY
用于对查询到的结果进行排序输出
SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;

DEPTNO ENAME SAL
--------- ---------- ---------
10 KING 5000
10 CLARK 2450
10 MILLER 1300
20 SCOTT 3000
20 FORD 3000
20 JONES 2975
20 ADAMS 1100
20 SMITH 800
30 BLAKE 2850
30 ALLEN 1600
30 TURNER 1500
30 WARD 1250
30 MARTIN 1250
30 JAMES 950

posted @ 2005-11-25 20:39 青蛙學堂 阅读(398) | 评论 (1)编辑 收藏

FW : 为一台机器设置两个IP地址

--  为一台机器设置两个IP地址
一般情况下只能为一个网络适配器配置一个IP地址,但通过修改系统注册表,却可以为一个网卡配置多个IP地址:运行注册表编辑器,找到HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\Class\\NetTrans,在此目录中可以看到多个名为0000、0001、0002……的目录,它们用于记录协议的安装情况。在它们中间找到DriverDesc为“TCP/IP”的目录,修改IPAddress和IPMask两个键。其中IPAddress为用逗号隔开的多个IP地址,IPMask是对应的子网掩码。例如设置IPAddress为“192.168.0.1,192.168.0.2”,IPMask为“255.255.255.0,255.255.255.0”时,表示为系统设置了两个IP地址:192.168.0.1和192.168.0.2。


*****************************************************************

好像不用修改注册表也可以为同一网卡设置两个IP地址吧?在本地连接属性中找到TCp/IP。查看其属性,然后点击“高级”。再点击“IP地址”下的添加,输入地址和掩码即可。关闭各个对话框后,在命令行中输入"ping 新增的IP地址",也可以ping通。

不过,添加了两个IP地址后,好像对一个连接只能使用IP吧?记得那个“使用下面的IP地址”项吗?

********************************************

这是设置两个地址后的PING测试(192.168.1.50为新增加的地址)

C:\\Documents and Settings\\fxm>ping 192.168.1.50

Pinging 192.168.1.50 with 32 bytes of data:

Reply from 192.168.1.50: bytes=32 time<1ms TTL=64
Reply from 192.168.1.50: bytes=32 time<1ms TTL=64
Reply from 192.168.1.50: bytes=32 time<1ms TTL=64
Reply from 192.168.1.50: bytes=32 time<1ms TTL=64

Ping statistics for 192.168.1.50:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

下面是去掉192.168.1.50后ping的结果:

C:\\Documents and Settings\\fxm>ping 192.168.1.50

Pinging 192.168.1.50 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 192.168.1.50:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

********************************************************


posted @ 2005-11-25 20:36 青蛙學堂 阅读(272) | 评论 (0)编辑 收藏

拜祭胡耀邦網址--------------------有心思的去看看吧!!!

http://cn.netor.com/m/box200104/m5679.asp?BoardID=5679

posted @ 2005-11-20 11:05 青蛙學堂 阅读(168) | 评论 (0)编辑 收藏

共和国历史珍贵记忆:“小平您好”这样诞生的

共和国历史珍贵记忆:“小平您好”这样诞生的
http://www.rednet.com.cn 2004-8-11 10:41:23 红网 


(“小平您好”是这样诞生的)

  本报北京8月10日电

  在今天开幕的《世纪伟人邓小平———纪念邓小平诞辰一百周年展览》入口处,1984年国庆游行北京大学学生打出“小平您好”横幅的黑白照片用一块巨幅展板展出。20年前,天安门前游行队伍中,北大学生突然打出了一个意外的横幅———“小平您好”,此画面瞬间传遍世界,成为共和国历史上一段珍贵的记忆。“小平您好”,对于现任北京市海淀区委副书记、时任北京大学游行总指挥兼领队的彭兴业来说,这四个字太熟悉了。他回忆道:1984年的国庆节,北大游行队伍出发时,有几个学生告诉领队的他,游行时将有“秘密武器”亮相。看着学生们真诚的面孔,彭兴业笑着说:“你们只要不给学校惹麻烦就行。”

  电视画面记录的那个历史瞬间是这样出现的:站在天安门城楼上的胡耀邦最先看见了什么,微笑了起来,然后倾斜过身子对着神色庄重的邓小平说了一句话,同时手指向长安街上的游行队伍,小平的脸上露出了难得的笑容。这时,电视镜头及时转向了游行队伍中间,在一群欢乐的年轻大学生的队伍中,一幅绿底黑字的大型横幅在天底下飘动。于是,全世界都看见了“小平您好”这个著名的口号。

  彭兴业至今记得那一幕,北大队伍旁有人想冲进队伍夺下这个未经批准就打出来的横幅,但被边上的北大学生手挽手地拦住,无法冲进去。后来,彭兴业了解到,这是北大生物系的几个学生的杰作。

  当年参加游行的北大生物系1981级学生张誌,现在是北京一家制药公司的董事长。回忆起20年前的那段往事,他仍很激动。

  9月30日晚上9时多,同学郭庆滨、李禹等在一起商议:光喊口号、挥舞花束,不能充分表达自己对祖国的深厚感情,他们要制作一幅横幅来表达心意。这时同学常生、毛小洪等出于同样的目的找来纸笔,大家想到了一起。

  写什么标语呢?有人说“教育要改革”,有人说“改革要加速”……但大家都觉得,这些标语不能集中、充分地表达大家共同的愿望。

  大家想到了邓小平同志,想到邓小平同志领导的改革大业以及小平同志的拨乱反正。于是,有人脱口而出:“就写‘小平同志万岁’”。但“万岁”两字立即被否定了。

  经过反复琢磨,大学生们终于得出一致结论:“邓小平同志你好”。大家认为,这句话最能亲切地表达对邓小平同志的敬意,最能表达对党中央的领导、对党的十一届三中全会以来的路线方针政策的衷心拥护。

  但这7个字显得不够亲切,于是有人提出写“小平你好”,这一方案获得大多数同学的认同,只是觉得把“你”换成“您”更完美些,于是一条让大家都满意的横幅产生了。

  李禹拿来自己的塑料床单做衬,“小平您好”几个大字由常生执笔,写在了4张绿色大纸上,然后贴在了床单上。写好后,大家小心翼翼地把横标裹起来,外面绕以彩带,顶端缀以纸花,横标变成了一把高大的花束。

  10月1日4时多,大家怀着激动的心情,护卫着这把“花束”进入了游行的“行列”。游行队伍到金水桥边时,郭庆滨、常生、于宏实等同学一下子打开横幅,一个经典场面就这样诞生了。

  张誌说,“小平您好”这句话感情真挚,就像是对亲朋,像是对自己最热爱、最熟悉的家人的问候,真真实实地表达了人民群众内心深处对邓小平同志的由衷祝愿和朴素、深厚的爱戴之情。

posted @ 2005-11-20 10:29 青蛙學堂 阅读(166) | 评论 (0)编辑 收藏

仅列出标题
共43页: First 35 36 37 38 39 40 41 42 43 
<2020年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜