??xml version="1.0" encoding="utf-8" standalone="yes"?>免费一级做a爰片久久毛片潮,亚洲国产成人精品91久久久,久久精品国产精品亚洲人人 http://www.shnenglu.com/threesh/zh-cnThu, 08 May 2025 17:04:53 GMTThu, 08 May 2025 17:04:53 GMT60[轉]七种武器—?NET工程师求职面试必杀技http://www.shnenglu.com/threesh/archive/2007/04/26/22884.htmlCpp FansCpp FansThu, 26 Apr 2007 08:01:00 GMThttp://www.shnenglu.com/threesh/archive/2007/04/26/22884.htmlhttp://www.shnenglu.com/threesh/comments/22884.htmlhttp://www.shnenglu.com/threesh/archive/2007/04/26/22884.html#Feedback0http://www.shnenglu.com/threesh/comments/commentRss/22884.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/22884.html
开发h员应该熟(zhn)?NET FrameWork体系l构和基本原理,熟?zhn)CLRQ公paq行Ӟ和MSIL(中间语言)Q熟(zhn)?NET框架中的委托、线E、序列化、集合、垃圑֛收机制、反等内容?

Q世界上l没有一U暗器能比孔雀更厉害Q也l没有一U武器能比孔雀更丽……孔雀娇的w躯中隐藏着巨大的威?#8230;….NET框架的博大精深,正如同孔雀一L丽而深不可。)

二、面向对象Y件开发(七种武器之霸王枪Q?

开发h员应该熟(zhn)面向对象Y件开?OOP)基本概念Q熟(zhn)面向对象Y件开发中的类、ѝ封装、多态等概念Q具备良好的面向对象软g开发思想和设计原则?

Q霸王,力拔山兮气盖世。枪Q百兵之是为枪……霸王枪是世上最霔R的兵器之一……正如面向对象软g开发,它大通吃Q不论是采用何种软g开发框Ӟq是使用不同的开发语aQ面向对象Y件开发在其中畅通无阻,霸气十。)

三、C# (七种武器之离别钩)

开发h员应该熟l掌握C#q门面向对象~程语言Q虽?NET框架支持多种~程语言Q但C#无疑是最z、用者最q泛和功能最强大的一U?

Q离别钩是一件武器,无论钩住人的M部位Q都能造成d……但用它的初衷却是ؓ了能够与所q人相?#8230;…C#是一门年ȝ语言Q它的出玎ͼ让更多的开发者爱上了C#Q脱MVB和ASP的阵营,造成d。)

四、ASP.NETQ七U武器之玉刀Q?

开发h员应该理解ASP.NET的页面生命周期、熟(zhn)配|文件的格式、熟(zhn)ASP.NET的各U服务器控g和数据控件、了解ASP.NET中的各种对象Q了解ASP.NET2.0新特性?

Q刀是最Ҏ(gu)上手的武器,也是使用最q泛的武?#8230;…ASP.NET技术在|站开发当中的应用Q正如同刀一样地使用频繁Q更何况是一把华丽的玉刀。碧玉刀本n也是实力的象征,如同ASP.NET在WEB开发中的位|。)

五、数据库(七种武器之长生剑)

开发h员需了解各种L数据库,熟?zhn)数据库的规范设计、精通SQL及存储过E、触发器的编写?

Q长生剑Q世上最锋利的剑Q剑气威力强大而又持箋不断、ľl不?#8230;…正如同数据库一P吸纳吞吐Q化大象于无形,强力支撑着软gpȝ。要惛_IT界获得长生,q你数据库的功底了。)

六、AJAX技?JAVASCRIPT和XML)(七种武器之多情环)

XML和JAVASCRIPT的跨q_Ҏ(gu),在实际Y件开发中的运用越来越q泛Q由于现代Y件对用户界面和WEB前端的日益重视,集JAVASCRIPT和XML技术于大成的AJAX正在行Q特别是在基于WEB2.0的网站开发中?

Q多情环是一U奇特的武器。无论套住了什么,立刻q紧地~住Q绝不会再脱手,像多情的恋Z?#8230;…JAVASCRIPT和XML技术已l出现多q_此前一直不痛不痒,但由于集JAVASCRIPT和XML于大成的AJAX技术的出现及其在互联网上的不断应用Q又重新焕发出生命活力,像多情的环一P众多的开发者牢牢系住,?006q红透了整个IT界,2007qAJAX技术将l箋U火。)

七、Y件体pL?招_)

优秀的Y件离不开优秀的Y件体pL构,作ؓ开发h员,要想在IT行业更进一步,需要具备系l的、良好的软g体系架构思维Q从而从更高层次军_软g的整体系l框架?

Q拳头也是一U武器。而且是无可替代的武器。当分散的五指握成拳_它的力量又岂仅仅是原来的五?#8230;…优良的Y件体pL构是整个软g开发体pȝ核心Q就如同招_一P它是直接而致命的。但有一点,不是每个人的招_都可以用做武器的。)

l束语:无论多可怕的武器Q也比不上hcȝ信心。所以hcL厉害的武器。便是自q信心。相信你自己Q做最好的自己Q你׃成功Q?

Cpp Fans 2007-04-26 16:01 发表评论
]]>
PL/SQL单行函数和组函数详解http://www.shnenglu.com/threesh/archive/2007/03/26/20595.htmlCpp FansCpp FansMon, 26 Mar 2007 03:04:00 GMThttp://www.shnenglu.com/threesh/archive/2007/03/26/20595.htmlhttp://www.shnenglu.com/threesh/comments/20595.htmlhttp://www.shnenglu.com/threesh/archive/2007/03/26/20595.html#Feedback0http://www.shnenglu.com/threesh/comments/commentRss/20595.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/20595.html

 函数是一U有零个或多个参数ƈ且有一个返回值的E序。在SQL中Oracle内徏了一pd函数Q这些函数都可被UCؓSQL或PL/SQL语句Q函C要分Z大类Q?/p>

   单行函数

   l函?/p>

  本文讨论如何利用单行函C及用规则?/p>

  SQL中的单行函数

  SQL和PL/SQL中自带很多类型的函数Q有字符、数字、日期、{换、和混合型等多种函数用于处理单行数据Q因此这些都可被l称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY{子句中Q例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX{单行函数?/p>

SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)

  单行函数也可以在其他语句中用,如update的SET子句QINSERT的VALUES子句QDELET的WHERE子句,认证考试特别注意在SELECT语句中用这些函敎ͼ所以我们的注意力也集中在SELECT语句中?/p>

  NULL和单行函?/p>

  在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了 NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ他能直接处理NULL|NVL有两个参敎ͼNVL(x1,x2),x1和x2 都式表达式,当x1为null时返回X2,否则q回x1?/p>

  下面我们看看emp数据表它包含了薪水、奖金两,需要计ȝ补偿

column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2

  不是单的薪水和奖金加v来就可以了,如果某一行是null值那么结果就是nullQ比如下面的例子Q?/p>

update empset salary=(salary+bonus)*1.1

  q个语句中,雇员的工资和奖金都将更新Z个新的|但是如果没有奖金Q即 salary + null,那么׃得出错误的结论,q个时候就要用nvl函数来排除null值的影响?/p>

所以正的语句是:

update empset salary=(salary+nvl(bonus,0)*1.1

单行字符串函?/p>

  单行字符串函数用于操作字W串数据Q他们大多数有一个或多个参数Q其中绝大多数返回字W串

  ASCII()

  c1是一字符Ԍq回c1W一个字母的ASCII码,他的逆函数是CHR()

SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM empBIG_A BIG_z65 122

  CHR(QiQ?[NCHAR_CS]

  i是一个数字,函数q回十进制表C的字符

select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B

  CONCAT(,)

  c1,c2均ؓ字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓnullQ则q回null。他和操作符||q回的结果相?/p>

select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda

  INITCAP()

  c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?/p>

select INITCAP('veni,vedi,vici') Ceasar from dualCeasarVeni,Vedi,Vici

  INSTR(,[,QiQ[,]])

  c1,c2均ؓ字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ1.

select INSTR('Mississippi','i',3,3) from dualINSTR('MISSISSIPPI','I',3,3)11select INSTR('Mississippi','i',-2,3) from dualINSTR('MISSISSIPPI','I',3,3)2

  INSTRB(,[,i[,j])

  与INSTRQ)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()

  LENGTH()

  c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?/p>

select LENGTH('Ipso Facto') ergo from dualergo10

  LENGTHb()

  与LENGTH()一Pq回字节?/p>

  lower()

  q回c的小写字W,l常出现在where子串?/p>

select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'COLORNAMEWinterwhite

  LPAD(,QiQ[,])

  c1,c2均ؓ字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空|参见RPAD?/p>

select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe

  LTRIM(,)

  把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃会改变?/p>

select LTRIM('Mississippi','Mis') from dualLTRppi

  RPAD(,QiQ[,])

  在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空?其他与LPAD怼

  RTRIM(,)

  把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃会改变?/p>

  REPLACE(,[,])

  c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?/p>

select REPLACE('uptown','up','down') from dualREPLACEdowntown

  STBSTR(,QiQ[,])

  c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓj的子字符Ԍ如果j为空Q则直到串的N?/p>

select SUBSTR('Message',1,4) from dualSUBSMess

  SUBSTRB(,QiQ[,])

  与SUBSTR大致相同Q只是I,J是以字节计算?/p>

  SOUNDEX()

  q回与c1发音怼的词

select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dualDawes Daws DawsonD200 D200 D250

  TRANSLATE(,,)

  c1中与c2相同的字W以c3代替

select TRANSLATE('fumble','uf','ar') test from dualTEXTramble

  TRIM([[]] from c3)

  c3串中的第一个,最后一个,或者都删除?/p>

select TRIM(' space padded ') trim from dual TRIMspace padded

  UPPER()

  q回c1的大写,常出现where子串?/p>

select name from dual where UPPER(name) LIKE 'KI%'NAMEKING

单行数字函数

  单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数?/p>

  ABS()

  q回n的绝对?/p>

  ACOS()

  反余玄函敎ͼq回-1?之间的数。n表示弧度

select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0

  ASIN()

  反正玄函敎ͼq回-1?Qn表示弧度

  ATAN()

  反正切函敎ͼq回n的反正切|n表示弧度?/p>

  CEIL()

  q回大于或等于n的最整数?/p>

  COS()

  q回n的余玄|n为弧?/p>

  COSH()

  q回n的双曲余玄|n 为数字?/p>

select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847

  EXP()

  q回e的nơ幂Qe=2.71828183.

  FLOOR()

  q回于{于N的最大整数?/p>

  LN()

  q回N的自然对敎ͼN必须大于0

  LOG(,)

  q回以n1为底n2的对?/p>

  MOD()

  q回n1除以n2的余敎ͼ

  POWER(,)

  q回n1的n2ơ方

  ROUND(,)

  q回舍入数点右边n2位的n1的|n2的缺省gؓ0Q这回将数Ҏ(gu)接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?/p>

select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54

  SIGN()

  如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.

  SINQ?

  q回n的正玄?n为弧度?/p>

  SINH()

  q回n的双曲正玄?n为弧度?/p>

  SQRT()

  q回n的^Ҏ(gu),n为弧?/p>

  TANQ?

  q回n的正切?n为弧?/p>

  TANH()

  q回n的双曲正切?n为弧?/p>

  TRUNC(,)

  q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时会将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/p>

  单行日期函数

  单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?/p>

  ADD_MONTHS(,QiQ?

  q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会截去数点后面的部分?/p>

  LAST_DAY()

  函数q回包含日期d的月份的最后一?/p>

  MONTHS_BETWEEN(,)

  q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则会返回的l果包含一个分数?/p>

  NEW_TIME(,,)

  d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?/p>

  NEXT_DAY(,)

  q回日期d后由dowl出的条件的W一天,dow使用当前会话中给出的语言指定了一周中的某一天,q回的时间分量与d的时间分量相同?/p>

select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004

  ROUND([,])

  日期d按照fmt指定的格式舍入,fmt为字W串?/p>

  SYADATE

  函数没有参数Q返回当前日期和旉?/p>

  TRUNC([,])

  q回由fmt指定的单位的日期d.

单行转换函数

  单行转换函数用于操作多数据类型,在数据类型之间进行{换?/p>

  CHARTORWID()

  c 使一个字W串Q函数将c转换为RWID数据cd?/p>

SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA')

  CONVERT(,[,])

  c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓdset字符集,sset的缺省设|ؓ数据库的字符集?/p>

  HEXTORAW()

  x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?/p>

  RAWTOHEX()

  x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ16q制的数据类型?/p>

  ROWIDTOCHAR()

  函数ROWID数据cd转换为CHAR数据cd?/p>

  TO_CHAR([[,)

  x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及货币W号?/p>

NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"

  TO_DATE([,[,Q?/p>

  c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?/p>

  TO_MULTI_BYTE()

  c表示一个字W串Q函数将c的担子截字符转换成多字节字符?/p>

  TO_NUMBER([,[,)

  c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?/p>

  TO_SINGLE_BYTE()

  字W串c中得多字节字W{化成{h(hun)的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/p>

  其它单行函数

  BFILENAME(

,)

  dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?/p>

  DECODE(,,[,,,[])

  x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?/p>

  DUMP(,[,[,[,]]])

  x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?/p>

  EMPTY_BLOB()

  该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?/p>

  EMPTY_CLOB()

  该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?/p>

  GREATEST()

  exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>

  LEAST()

  exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>

  UID

  该函数没有参敎ͼq回唯一标示当前数据库用L整数?/p>

  USER

  q回当前用户的用户名

  USERENV()

  Zoptq回包含当前会话信息。opt的可选gؓQ?/p>

  ISDBA    会话中SYSDBA脚色响应Q返回TRUE

  SESSIONID  q回审计会话标示WENTRYID   q回可用的审计项标示W?/p>

  INSTANCE  在会话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?/p>

  LANGUAGE  q回语言、地域、数据库讄的字W集?/p>

  LANG    q回语言名称的ISO~写?/p>

  TERMINAL  为当前会话用的l端或计机q回操作pȝ的标C符?/p>

  VSIZE()

  x是一个表辑ּ。返回x内部表示的字节数?/p>

SQL中的l函?/p>

  l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.

  l(多行Q函?/p>

  与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?/p>

  AVG([{DISYINCT|ALL}])

  q回数值的q_倹{缺省设|ؓALL.

SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413

  COUNT({*|DISTINCT|ALL} )

  q回查询中行的数目,~省讄是ALL,*表示q回所有的行?/p>

  MAX([{DISTINCT|ALL}])

  q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?/p>

  MIN([{DISTINCT|ALL}])

  q回选择列表目的最倹{?/p>

  STDDEV([{DISTINCT|ALL}])

  q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?/p>

  SUM([{DISTINCT|ALL}])

  q回选择列表目的数值的d?/p>

  VARIANCE([{DISTINCT|ALL}])

  q回选择列表目的统计方差?/p>

  用GROUP BYl数据分l?/p>

  正如题目暗示的那L函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ一cR?/p>

select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982

  在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?/p>

select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982

  用HAVING子句限制分组数据

  现在你已l知道了在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:

错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk

  q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ(gu)是用HAVING语句Q?/p>

SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;

  嵌套函数

  函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可l承的执行过E。但函数的优先权只是Z位置Q函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODEq样的能被用于逻辑判断语句IF....THEN...ELSE的函数?



Cpp Fans 2007-03-26 11:04 发表评论
]]>
[转]学习C++的一点体?/title><link>http://www.shnenglu.com/threesh/archive/2007/01/28/18104.html</link><dc:creator>Cpp Fans</dc:creator><author>Cpp Fans</author><pubDate>Sat, 27 Jan 2007 16:52:00 GMT</pubDate><guid>http://www.shnenglu.com/threesh/archive/2007/01/28/18104.html</guid><wfw:comment>http://www.shnenglu.com/threesh/comments/18104.html</wfw:comment><comments>http://www.shnenglu.com/threesh/archive/2007/01/28/18104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/threesh/comments/commentRss/18104.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/threesh/services/trackbacks/18104.html</trackback:ping><description><![CDATA[ <p>我从d11月䆾开始自学C++Q本人现在做C#开发)Q现在把我这10来个月学习体会写出来和大家分享?/p> <p>1。关于要不要学习C++Q(l论Q要学,一定要学!Q?br />如今在网上很多ؓ要不要学C++争的不可开交,因ؓ现在JAVAQC#Q。NET都炒的很火,特别是JAVAQ大有炸q_山,停止地球转动之势。用林锐同志的话_其实JAVA只是C++外甥Q跑到舅舅n上撒了一泡尿而已。首先,我们从JAVA 的来历上来说QJAVA的设计初h用来l家用电(sh)器设计程序用的Q最初设计者想用C++Q但觉得C++太复杂,在C++的基上做了一些简化,设计ZJAVAQ它的设计思想是跨q_Q所以必d在运行^C安装虚拟机,然后把源E序~译成中间语a在运行。这是一个优点,但我们说L优点都是建立在缺点上的,JAVA的缺点就是运行速度慢,q对于某些系l来说是致命q。况且,JAVA中没有指针,对于制作pȝ软g来说Q这更是无法饶恕的。再来看C++。C++产生于美国贝实验室Q就是发明电(sh)话那个公司。设计初h用来改进C的开发效率,C是面向过E的语言Q开发效率底Q贝实验室有大量的CE序员,所以只要在开发效率上提高一点点Q就可以节约数目庞大的成本。C是什么东西?是用来代替汇~编写操作系l的语言Q用C++代替CQ可以得Z个结论:W一QC++必须h同C相当的执行速度Q第二,C++必须比Ch较高的开发效率。执行速度斚wQC++的设计者的思想是在改q开发效率的同时量不增加C++的系l开销Q当然有些地斚w增加开销不可Q也把开销控制在最程度内。具非权威研I报告,C++比C的执行开销多出不到10%。开发效率方面,C++引进了面向对象机Ӟ库机Ӟ最大程度上实现了代码重用,q是软g开发h员的音。C++在改qC的开发效率的同时Q对C的缺陷做了一些修补。C的优点在C++中都得到了很好的保留QC的缺点在C++中都有了改进Q有了更好的解决办法。而且Qؓ了现有的大量CE序l护QC++q全面兼容了C。纵观当今程序语a家族Q我觉得只有C可以C++相提q论Q门当户对,其它语言都无法和C++相提q论。无Z什么角度来_C++都算的上语言中的老大?br />如今Q网上有很多关于C++的争论,其实争论的h都是一些不知情的hQ绝大多数是学校里的学生Q我也曾l这栗在学校里的时候,不知道究竟应该学习什么,要是遇到好的老师q可以,遇到垃圾老师Q垃圑֭校那更p糕。如今,什么MCSEQCCNAQCIW{等认证漫天飞,把h搞的昏头昏脑Q其实这都是认证公司炒的。社会上需要的是有真才实学的hQ而不是需要证书?br />我从大二开始学习编E,一开始学习VBQ后来学习DELPHIQ再后来学习C#Q再后来学习C++Q绕了个大圈子,最后还是绕回来了。而且重新学习数据l构Q操作系l,学习软g工程Q学习大学本U的基本评Q重新读外国的程序设计名著,而这些以前在大学是不屑一儡。劝如今q在学校的师弟师妹们Q努力学习C++?/p> <p>2。ؓ什么要学习学习C++<br />1QC++的程序员wh(hun)普遍较高Q当Ӟ前提是你必须是高手。我所在的城市Q那些公司根本就招不到合格的C++E序员,一斚wC++E序员要求高Q学习C++的h来少了。当Ӟ怀着q个目的Q你或许永远无法成ؓC++高手Q但我把q个原因攑֜最前面Q可以给大家一个很明确的激励,当你接触C++后,发现从学习中获得乐趣比高的工资更有动力;<br />2QC++的优势是用来开发大型YӞ从中可以学到很多优秀的Y件设计思想。C++不是软g开发的首选工P一般说来,大多人更愿意学习和用VBQؓ什么,单。简单的另一个方面是功能的局限。微软公司恨不的所有h都学VBQ只有他一家会C++。容易上手,大家都喜Ƣ学Q喜Ƣ用Q很多h拿一?00늚书,看个两三个星期,p得自己是个程序员了,可以开发Y件了Q而且觉得做出来的东西很不错。当软g规模大到一定程度的时候,其他语言p来越无法NQ这时C++的优势就体现出来了。你说做个成l管理系l,Z查询pȝQ用VBQDELPHIQC#QJAVA都行Q但是例如银行,?sh)信Q保险,操作pȝQ数据仓库,囑Ş处理Q编译系l,较底层的软gӞ其他工具几乎是无法完成的。就说C++的指针,JAVA没有Q在遇到数据量交大的数据排序Q搜索,动态内存分配时Q它?yu)没有办法了。所以说Q学习C++Q不仅仅是学到的一U语aQ还学习了优U的Y件设计思想?br />3Q学习C++可以学习到计机底层的理论,即不是用C++开发,对计机q行机制的理解,对徏制稳定的pȝQ对q用其他语言Q也是一U促q。这一点,我是在学习过E中体会到的Q所以,要说Z大家可以接受的理由来较难Q大家以后学习就知道了?/p> <p>3。怎样学习C++Q?br />首先Q我们必L认,学习要讲I方法,有捷径。其ơ,我们q得承认Q学习要下苦功,要务实。上学的时候,书上有个故事Q是关于王o之学习书法的Q王献之问他父亲王o之,学习书法的秘诀是什么,他父亲把他带到后院,指着18口大水_你如果把q里的水都写完了Q就知道书法的秘诀在那里了。这个故事相信很多h都还记得。前几天看梁肇新Q豪杰公司老板Q的《高手箴a》,他说如果你如果愿意利?q时间来成ؓ高手Q那么你只要两三q就会成为高手,如果你想一q成为高手,那么?q也成不了高手。学习要切忌躁Q要脚踏实地。我曄很Qw,l果一直呆在菜鸟堆里,当半q前我静下心来学习C++Q才感觉有真正的q步。现在做WEB开发,虽然我从来不看WEB开发的书,但是我的同事遇到问题Ӟ我经常能一下说出问题的所在。因Z看问题的角度变了。所以,学习C++的第一个方法是Q切忌Qw。其实学M东西都一PƲ速则不达。从基本数据cd看vQ从基本程控制语句写v?br />其次Q教材很重要Q要看经典名著?br /><br />其次Q教材很重要Q要看经典名著,而且如果p好,最好看原版英文教材?br />l典之所以成为经典,是因为经历了考验沉淀(wn)下来的东ѝ去q?月䆾Q当我打{向C++的时候,曑֐我一位同事咨询,他向我推荐了《C++~程思想》,q说叫我一定要诅R当我读完前面三到四章的时候,发觉自己找C感觉。接下来Q我一口气d了整本书Q当然其中很多东西还是无法真正理解,q是一本很深邃的书。废话少_我现在把我自qq的C++参考书c列出来Q?/p> <p>1Q《C++入门l典》,原名《The C++ Language Begeining?作者Ivor Horton 此书显易懂极适合入门Q书中包括最基本的程序设计知识,例如基本数据cdQ流E控制语句,函数设计。即使没有Q何程序设计基的hQ看着也不觉得累。书中一些很有特色的事例Q能促进和加p者的理解。但此书的代码风格实在有些糟p?/p> <p>2Q《C++~程思想?原名《Thinking in C++?作者Bruce Eckell, 此书的名气就不在q里说了.此书最新版?W三?开头部分增加了几章讲C语言的部?然后把读者逐渐引向C++,在讨a的一个特性时,往往L先讲解在C中的解决Ҏ(gu),然后讨论q中Ҏ(gu)的局限和不之处,再讨论C++中的解决Ҏ(gu).据我的感?此书作者的初衷是引导CE序员走向C++,但后来发现大多数新生代程序员,非美国的E序员不一定懂C,于是在W三版中加入了介lC的部? 此书最大的特点? 作者善于透过语言现象,看看屏风后面I竟发生了什?例如,昄出生成的汇编语言).消化好这本书QC++水^上一个大台阶Q?/p> <p>3Q《C++高效~程》,原名《Effect C++》。此书重Ҏ(gu)讨C++的一些技术死角,我只看过其中很少的一些章节,在此不作q多评论Q?/p> <p>4Q《C++ Primer》,作者Stanley B.LippmanQ此书还没有读过Q接下来读这本书。我在网上找了一点对此书特点的描qͼ对C++基本概念和技术全面而且权威的阐qͼ对现代C++~程风格的强调,使本书成为C++初学者的最x南;对于中高U程序员Q本书也是不可或~的参考书。第4版不再强调低层编E技术,而把中心转向标准库的使用。书中很早就开始介l标准库Q示例也已经重新改写Q充分利用了标准库设施。我们也对语a主题叙述的先后次序进行了重新~排Q讲解更加畅Q?/p> <p>5Q《C++~程语言》,原名《C++ Program Language》,作者乃C++的发明者被誉ؓC++之父的Bjarne StroustrupQ此书我只读了一部分Q说实话Q有些难。此书的作者就是C++的创始hQ发明者,知识非常渊博Q其思想深度q远在前面几位之上。如果你想知道C++I竟能做什么,C++那些希奇古怪的Ҏ(gu)ؓ什么那栯计,那你去参考这本书。另外,阅读此书Ӟ你还会ؓ作者那U深邃的思想Q博大的胸怀感觉CU发自内的快乐,舒畅。书中还讲到了很多大型系l设计的Ҏ(gu)和技巧。MQ不L书,是作为程序员的一大遗憾。我先阅诅RC++~程思想》,再参考此书。因为《C++~程思想》的作者说Q他写这本书的目的就是ؓ了大家能够参考《C++~程语言》这本书Q?/p> <p>6Q《C++高质量编E》,作者林锐。此书不属于l典名著Q但我也比较推荐q本书。作者不象国内其他作者那栯腐功利,而是从一个程序员的角度,介绍他在以往开发过E中遇到的问题和U篏的经验,q本书很薄,但其中的思想Ҏ(gu)很有用。且语句诙谐q默Q阅读v来很LQ?/p> <p>M一本书Q都有他的可取之处;M一本书Q都无法解决在学习中遇到的所有问题;M一本书Q都无法替代人的智慧和经验。但是好的教材,可以起到好的指导效果Q可以学习走弯\。但我不怎么看比较薄Q?00以下)的书Q因为对于C++来说Q这L幅Ҏ(gu)p不清楚,也不看国内作者的教材Q你发现大多是从上面所说的书中抄下来的?/p> <p>4。C++和VC的区?br />目前我们所说的C++Q通常意义上指标准C++Q就是美国C++标准委员会发布的C++。它定义了一些基本的语言规范语言Ҏ(gu),定义了一个框Ӟq有一个标准库。虽然生于UNIX下,但它不属于某一个^収ͼ某一个厂商,某一个编译器。它是一U统Uͼ一U概cVC是微软公司在WINDOWSq_下的一U开发工P本质上和VBQC#没有什么区别,只是较之底层一些。VC支持标准C++Q但不百分之百支持。一般来_学习C++可以使用VC的编译环境,但是必须要用标准库。还有其他一些C++~译器例如C++ BUIDERQ就是Borland公司生的WINDOWS下的C++~译器,GCC是LINUX下的常用的C++~译器。估计在Ҏ(gu)Z也有相应的C++~译器,因ؓC++处理囑Şpȝ是其牚w?/p> <p>要学习C++Q就不要从VC学vQ学习VC无法学到真正的C++~程思想Q而你只是学会了用类库而已。C++的特性是什么?C++本质是什么?C++的精华是什么?我觉得ȝ成一句话Q利用面向对象的思想Q解军_型系l的开发问题?/p> <p>5。学习C++的重?br />如果你学习过C或者了解CQ那么在学习C++的时候更Ҏ(gu)受C的媄响,CQC是面向过E的语,C++是面向对象的语言。如果你学习qCQ那么学习C++的重Ҏ(gu)掌握C++的新Ҏ(gu),C与C++的区别,C++的面向对象特性,试用C++的风格去~写E序Q用C++的技术去解决问题。或怽认ؓC很不错,但在C++可能有更好的解决办法Q?/p> <p>如果你学习过JAVAQC#或DELPHIQ那么你应该寚w向对象机制很熟?zhn)。但是,C++中的面向对象机制和上q几U语a有所区别Q例如多重ѝ最好尝试在没有用户界面的环境下~写E序Q还有,指针是C++的精华之一Q所以必L握;</p> <p>如果你没有编E基Q那q接从C++学vQ这样就没有其他语言的干扰和影响。祝ZQ一开始就接触了这样一U伟大的语言Q?/p> <p>我觉得,C++的重点可以用三个词来描述Q指针,面向对象Q标准库?/p> <p>最后,在这里同所有学习C++的程序员共勉Q不要担心学习C++会被淘汰Q我所在的单位q有大量的InformixE序员,而且日子q的很舒服。我时候学书法Q老师常对我说一句话是Q字写的好,哪怕拿一根筷子在嘴巴里咬几下Q都写的好看Q而不在于用什么笔。用C++之父Bjarne Stroustrup的话来说Q只要你在用电(sh)脑,你就直接或间接用了C++?/p> <p>让我们共同学习,共同q步Q相互交,怺促进?/p> <img src ="http://www.shnenglu.com/threesh/aggbug/18104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/threesh/" target="_blank">Cpp Fans</a> 2007-01-28 00:52 <a href="http://www.shnenglu.com/threesh/archive/2007/01/28/18104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个研I生毕业以后的h生规?http://www.shnenglu.com/threesh/archive/2006/12/26/16875.htmlCpp FansCpp FansTue, 26 Dec 2006 08:51:00 GMThttp://www.shnenglu.com/threesh/archive/2006/12/26/16875.htmlhttp://www.shnenglu.com/threesh/comments/16875.htmlhttp://www.shnenglu.com/threesh/archive/2006/12/26/16875.html#Feedback0http://www.shnenglu.com/threesh/comments/commentRss/16875.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/16875.html 一个研I生毕业以后的h生规划(转自天虚拟C֌Q?br />
我今q?9岁了Q?25岁研I生毕业Q工?4q_回头看看Q应该说C不少的弯?
Q有一?

l验和教训。现在开一个小公司Q赚的钱刚够dp口的。看看这些刚毕业的学生,对前
景也很迷茫,x砖引玉,谈谈自己的看法,局限于理工U的学生Q我Ҏ(gu)U的不懂Qn
边的朋友也没有这一cd的?

  91q研I生毕业Q那时出路就?U:留在北京的国营单位,搞一个北京户口,q是最
好的选择。到后来??q内Q户口落定了Q又分成4条出路:

  1?上国内的大企业,如:华ؓ

  2?自己做公司,做品开发;

  3?上外企,比如Q爱立信、诺Z

  4?自己做公司,做买卖;

  5?UL加拿?

  我想Q首先要看自己适合做什么?做技术还是做买卖?

  做技术,需要你Ҏ(gu)术感兴趣。我掰着C一遍,我们研究生班?0来号人,实际?
Q适合做技术的Q大概只??个hQ这几个人,1个现在还在华为,3个移民加拿大了,
现在q?个hLq可以,在华为的同学也移民加拿大了,他在华ؓ呆了6q_在华为奖?
工资加v来大?0万吧Q还有华为的股票Q再q几q_华ؓ的股一上市Q也能g100?
200万。要是一毕业去华ؓQ那现在q对不是这个数字了?

  要是做技术,最好的是上大公司Q国内的大型企业Q象华ؓ中兴肯定是首选,能学
到很多东ѝ华然篏Q但是,q轻Z能怕篏Q要是到老了Q还需要去打拼Q那才是
真的累啊?

  在外企,我想他们主要是技术支持和销售,但是技术是学不到的Q当然不能一概?
论,我指的是象爱立信和诺ZQ真正的研发不会在中国做的,学到的也不如在华为多Q?
其它的中兴我不是很了解,我想应该也不错啊?

一个h都有一技之长Q有傍n之技Q那是最好的Q走到哪里,都能有一口饭吃,q吃的不
错,q是传统的观炏V?

  M技术都是要在某个行业去应用Q这个行业市大当然越好;要在一个领域之?
Q做深做_,成ؓl对的专Ӟq是走技术道路的人的选择。不要蟩来蟩去,在中国,?
的行业你要做精׃Q都可以产生很大的利润?

  研究生刚毕业的时候,做品开发的有不hQ都是自己拍拍脑子,觉得q个产品?
市场Q就自己出来做。现在看来,我的q些同学Q做产品开发的成功的没有一例,Z?
Q资源不?

  1Q?资金Q刚毕业的学生啊Q就是没钱;没钱Q也意味着你开发的东西都是品;
而且只能哥几个自׃Q研发、生产、销售都是一个h或者几个h自己来,没有U篏Q什
么都是重新来q?

  2Q?QQ何一个行业,要想q去Q需要有很深的h脉,否则Q谁会用你的东西?
Q谁敢用你的东西啊?

  我看到的Q我q个班上开发品的Q自p在坚持的Q只剩下一个h了,说实在的Q?
到现在,没有自己的汽车,也没有自q房子Q؜的挺惨的。现在出国的不说了,在外?
、在华ؓQ至都是几十万的年薪了Q还有各U福利,是产品开发成功了Q又能如何?
也就是这样了Q但是以前那些年Q都没有金钱的积累,{于白干?

  我n边的一个自动化pȝ研究生班的同学,能靠自己开发品活得还可以的,也只?
2个h。说明这条\不是那么好走的啊?

  其次是上外企。我?个同学,一个上了爱立信Q一个先到爱立信后到诺基亚,都؜
的不错。到诺基亚的后来利用在诺Zl识的h脉(是哪些?sh)信的头头脑脑)Q自己开
了公司,也赚了不的钱?

  外企最大的好处是除了能学到比较规范的理外,q能l你的职业生涯镀金。到?
一个外企外Q再到同行业的外企我惛_很容易了。而且外企的收入高啊?

  自己做公司,做买卖,一开始有3?个h走这条\Q但是真正发财的只有一个hQ其
他h后来上外企了。做买卖Q还是要有一定的天赋Q还有机遇。要有对金钱的赤裸裸的欲
望,要有商业上的头脑。后来我们同学在一赯Q说Q我们即使给自己q个机遇Q也未必
能做的好。何况当旉个同学看好的产品Q做一个台湾品的代理Q,我们大家都没有看
好,说明Q真理还是掌握在数人手里?

  到后来,同学们纷UL民移民加拿大?

  UL加拿大对搞技术的人来_q是一个不错的选择Q但是要早Q练了几q的技?
Q就赶紧出去Q大概是?996q走了不?0个,现在都还可以Q买了房子和车了。要是晚
了,语言再学也难了,而且在国内都Lq可以了Q也没有必要出M?

我自己呢Q先是在国营的研I所混了4q_后来C家公司干?q_2002q出来自己做?
司,现在也就是؜了一个温饱吧Q算是有房有车,有点U蓄Q但是不多,q有一个可q
奛_。回首这10来年Q有一些经验和教训?

  1Q?要有一个职业生涯的规划。首先需要定位自己做什么合适,是做买卖q是做技?
Q一条\走到黑;当然Q做了技术,后来改行也行Q?

  2Q?做技术,是要做_ց深,成ؓq个行业的这个技术的专家Q最好就是去国内?
大公司,才能全面学到东西Q能够给你培训的ZQ如果大公司q不去,先到公司练技
术,找机会再到大公司去镀金,学高q技术。千万不要自己做产品Q要做也是对q个?
业熟(zhn)了Q再d?

  3Q?U极争取Z。积极争取学习和q步的机会。比如,做技术,需要多ȝQ多
学习Q来提高自己的水q뀂一门技术,只要有机会去学习Q都能学的会Q要是没有机会,
天才也没有办法学到这个技术。柳传志pQ杨元庆是“哭着喊着要进步”,实际上,
是争取自己的机会;当然Q这U强烈的q步Ʋ望Q也是领导看重的地方。每一步都走在
前面Q积?0q_你就有了比其他h更多的机会了?

  4Q?U篏个h的信誉。从你的职业生的第一天,p按照诚信的原则办事。要做到
Q当Z提v你的名字的时候,_q哥们还不错Q做事还行?

  5Q?注意利用资源。如果你有有q亲戚、成功的长辈或者朋友,可以充分利用q些
ZQ得到更加顺利的发展前景?

  6Q?注意财富的不断积累。h生要惛_到自由,财富是很关键的。否则,永远Ch?
息,永远看h脸色。h都是势利眹{今后的家庭、职业生涯,金钱的积累很重要Q没有钱
Q永q不能开张自q事业Q得到更多的ZQ胦富要做到逐年U篏Q你才能家庭生活q?
。没有钱是不可能有幸的家庭的?

  7Q?注意的积累。最l,事业要靠在社会上的h脉的资源。要注意认识在你q个
行业的hQ结交他们,最l他们会成ؓ你事业上的助力?

  8Q?L贵h相助。要扑֤老板来帮助你Q得到大老板的赏识。想想看Q大蛋糕Q切
一点就够了Q小蛋糕Q都l你也吃不饱啊?

  9Q?多听听成功的前辈和成功的朋友的意见。注意少听家里长辈的意见Q尤其是都已
l退休的长辈Q他们对C会的认识还停留在很久以前,而这个社会已l发生很大的变化?
。最重要的是Q长辈有时候会强求你做一些事情,但是Q最l的l果他们是不负责的。只
有你才能对自p责?



Cpp Fans 2006-12-26 16:51 发表评论
]]>
[转蝲]ORACLE数据库开发经?http://www.shnenglu.com/threesh/archive/2006/12/04/15974.htmlCpp FansCpp FansMon, 04 Dec 2006 07:09:00 GMThttp://www.shnenglu.com/threesh/archive/2006/12/04/15974.htmlhttp://www.shnenglu.com/threesh/comments/15974.htmlhttp://www.shnenglu.com/threesh/archive/2006/12/04/15974.html#Feedback0http://www.shnenglu.com/threesh/comments/commentRss/15974.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/15974.html http://www2.ccw.com.cn/tips/9911/110402_04.asp

岭澳核电(sh)有限公司
黄福?
---- ORACLE数据库作为大型数据库理pȝQ近q来一直占有世界上高端数据库的最大䆾额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不断努力,一直成为IT业界瞩目的焦炏V岭x늫的数据库q_采用了ORACLE7.3作ؓ后端q_Q前端选择了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作ؓ开发工P采用了目前流行的CLIENT/SERVER模式。本人在ORACLEpȝ的开发中Q就O(jin)RACLE的整套开发工hZ些自q体会Q供同行参考?

---- 一. ORACLE SQL PLUS 使用技?

---- ①查N复记?

SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);
---- 执行上述SQL语句后就可以昄所有DRAWING和DSNO相同且重复的记录?
---- 删除重复记录:

DELETE FROM EM5_PIPE_PREFAB
WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5
_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND
EM5_PIPE_PREFAB.DSNO=D.DSNO);
---- 执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录?
---- ?快速编译所有视?

---- 当在把数据库倒入到新的服务器上后(数据库重?Q需要将视图重新~译一遍,因ؓ该表I间视图到其它表I间的表的连接会出现问题Q可以利用PL/SQL的语aҎ(gu),快速编译?

SQL >SPOOL ON.SQL
SQL >SELECT ‘ALTER VIEW ‘||TNAME||?br />COMPILE;?FROM TAB;
SQL >SPOOL OFF
然后执行ON.SQL卛_?br />SQL >@ON.SQL
当然Q授权和创徏同义词也可以快速进行,如:
SQL >SELECT ‘GRANT SELECT ON ?br />||TNAME||?TO USERNAME;?FROM TAB;
SQL >SELECT ‘CREATE SYNONYM
‘||TNAME||?FOR USERNAME.’||TNAME||??FROM TAB;

?用外联接提高表连接的查询速度
在作表连?常用于视?Ӟ怋用以下方法来查询数据:
SELECT PAY_NO, PROJECT_NAME
FROM A
WHERE A.PAY_NO NOT IN (SELECT PAY_
NO FROM B WHERE VALUE >=120000);
---- 但是若表A?0000条记录,表B?0000条记录,则要用掉30分钟才能查完Q主要因为NOT IN要进行一条一条的比较Q共需?0000*10000ơ比较后Q才能得到结果。该用外联接后,可以~短?分左右的旉:
SELECT PAY_NO,PROJECT_NAME
FROM A,B
WHERE A.PAY_NO=B.PAY_NO(+)
AND B.PAY_NO IS NULL
AND B.VALUE >=12000;
---- ?怎样d文本型操作系l文?
---- 在PL/SQL 3.3以上的版本中QUTL_FILE包允许用户通过PL/SQLd操作pȝ文g。如下:

DECALRE
FILE_HANDLE UTL_FILE.FILE_TYPE;
BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN(
‘C:\?’TEST.TXT?’A?;
UTL_FILE.PUT_LINE(FILE_HANDLE,?br />HELLO,IT’S A TEST TXT FILE?;
UTL_FILE.FCLOSE(FILE_HANDLE);
END;
---- 相关UTL_FILE数据库包详细信息可以参见相关资料?br />

---- ?怎样在数据库触发器中使用列的新g旧?

---- 在数据库触发器中几乎L要用触发器的列|如果某条语句需要某列修改前的|使用:OLD可以了Q用某列修改后的新|?NEW可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO?

---- ?ORACLE DEVELOPER 2000使用技巧:

---- ?改变FORM(FMX模块)q行时的Runform4.5的题?

---- DEVELOPER2000中FMX默认题头为:Developer/2000 Forms Runtime for Windows 95 / NT 你可以改己定义的标题,

---- 1. 在FormU触发器中添加触发WHEN-NEW-FORM-INSTANCE

---- 2. 在此触发器中写如下代码:

set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT
SYSTEM Ƣ迎使用');
---- ?如何隐藏菜单中的window选项:
---- 在创q菜单Ӟ最后选项Lwindow,下面介绍如何L?

---- 1. 创徏一个Menu

---- 2. 在Menu中徏立一个Item,命名为WINDOW?

---- 3. 讄该Item属性如?

----

Menu Item Type:Magic
Command Type:Null
Magic Item:Window
Lable:为空

---- ?怎样创徏动态下拉列表List
---- Developer 2000 中的列表是通过讄相关属性而完成数据项的列表设|的Q但那只是静态的Q有时你惌某项成ؓ动态的列表Q随输入数据的改变而改变,需要动手去~个程序。下面详l介l怎样d:

---- 有块EBOP_CABLE_ACCOUNTQ下有SPECIFICATION数据,当一q入该模块时Q就SPECIFICATION在数据库中存储的值动态显C出来,先在Form4.5中徏立一个PRCEDUREQ命名ؓDYN_LIST:

PROCEDURE DYN_LIST IS
CURSOR C1 IS
SELECT DISTINCT(SPECIFICATION)
FROM EBOP_CABLE_ACCOUNT;
CNT NUMBER;
i NUMBER;
TNAME EBOP_CABLE_
ACCOUNT.SPECIFICATION%TYPE;
BEGIN
CLEAR_LIST('EBOP_CABLE_
ACCOUNT.SPECIFICATION');
SELECT COUNT(DISTINCT
(SPECIFICATION)) INTO CNT FROM EBOP
_CABLE_ACCOUNT;
open C1;
FOR i IN 1..CNT LOOP
FETCH C1 INTO TNAME;
EXIT WHEN C1%NOTFOUND
OR C1%NOTFOUND IS NULL;
ADD_LIST_ELEMENT
('EBOP_CABLE_ACCOUNT
.SPECIFICATION',i,TNAME,TNAME);
END LOOP;
DELETE_LIST_ELEMENT
('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);
CLOSE C1;
END;
然后在FORM的WHEN-NEW
-FORM-INSTANCE触发子中加入一行:
DYN_LIST;
---- q样一q入该FMXQ就会动态刷新该列表。除此之外,SPECIFICATION数据Ҏ(gu)为列表项?
---- ?当显C多条记录且数据特别多Ӟ如何l织录入及显C界?

---- 如上图所C,PRN代码及设备代码在d1(CONTENT?上,其它数据在d2(STACK?上,所有数据项Z个表的列或一个块的数据项。在拉动水^滚动条时或用TAB或敲回R键时Q将看到全部数据V这U排布方法适用于数据项特别多又xC多条记录时用。主要制作顺序ؓQ先建立两个dQ画?(CONTENT?Q画?(STACK?Q然后徏立块Q选画布时用画?Q这h有项都显C在d1上,然后选中除PRN代码及设备代码之外的所有数据项Q选TOOLS菜单下的PROPERTIES选项Q将q些数据的CANVAS属性选ؓd2(STACK?Q然后调整整体位|就可以了?

---- ?如何在FORM的受限触发子中提交保存数?

---- 在FORM中很多触发子是不能用COMMIT WORK语句的,当你在该触发子中使用了UPDATEQDELETE{操作ƈ想立卛_盘时Q就需要COMMIT WORK语句了。首先在服务器端建立DB_SQL_COMMITq个q程(采用ORACLE7.3数据?Q?

PROCEDURE DB_SQL_COMMIT IS
source_cursor integer;
ignore integer;
V7 NUMBER :=2;
BEGIN
source_cursor:=dbms_sql.open_cursor;
dbms_sql.parse(source_cursor,'COMMIT WORK',V7);
ignore:=dbms_sql.execute(source_cursor);
DBMS_SQL.CLOSE_CURSOR(source_cursor);
END;
---- 然后在FORM中该触发子中调用q程DB_SQL_COMMIT;可以了Q当然你可以Ҏ(gu)自己需要将该过E加入参敎ͼq样通过参数可以得到执行DML语句的权限?br />
 ?如何在FORM中实现某数据自动按记录序号加一操作

---- 讑֝名ؓVO,要操作的数据ؓVO_ID,在该块中建立块触发子WHEN-CREATE- RECORDQ加入如下代码:

:VO_ID:=:System.Trigger_Record;
---- q样每当生成新记录时VO_ID׃自动加一了?
---- ?如何在一个FORM中调用另一个FORMQ或在一个块中调用另一个块时显C特定的记录有时用户会要求在调用另一个FORMӞ只显C相关的记录QD例如下,在一个FORM的块中有一个按钮,在按钮触发子中加入如下代码:

DECLARE
PM
PARAMLIST;
BEGIN
PM:=GET_PARAMETER_LIST('PM');
IF NOT ID_NULL(PM) THEN
DESTROY_PARAMETER_LIST('PM');
END IF;
PM:=CREATE_PARAMETER_LIST('PM');
......................
ADD_PARAMETER(PM,'THE_WHERE',
TEXT_PARAMETER,'EM_NAME=''EM4''
AND EM_PROJECT_NAME=''支架预制''');
OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);
ENDQ?br />---- 其中EM_NAMEQEM_PROJECT_NAME为本F(xin)ORM某块的数据项QPAYMENT调用的FORM模块。这样通过传递参数列表就可以得到惌的结果。在FORM PAYMENT.FMB中,建立一参数THE_WHEREQCHAR型,?000Q然后在PAYMENT.FMB中徏立FORMU触发子WHEN-NEW-FORM-INSTANCEQ在该触发子中加入以下语句:
IF :PARAMETER.THE_WHERE IS NOT NULL THEN
SET_BLOCK_PROPERTY('PAYMENT',
DEFAULT_WHERE,:PARAMETER.THE_WHERE);
END IF;
---- 其中PAYMENT昄的块Q这样通过参数传递就得到惌的某些特定条件的数据了?
---- ?在FORM中当有主从块Ӟq箋输入记录如何避免被不断的提示保存Q?

---- 每输入一条主记录和若q条该主记录的从记录后,此时再导航到d输下一条记录,FORM׃提示你是否要保存记录Q而你q不希望FORM提示Q让它自动保存,此时你可以到Program Units中找到过EPROCEDURE Clear_All_Master_DetailsQ然后在q个q程中找到语?

Clear_Block(ASK_COMMIT);
---- 其改ؓClear_Block(DO_COMMIT);可以了?
---- ?在Report开始时选择排序?

---- 在报表开始的Parameter Form中选择报表按哪个数据项排序Q?

---- 1. 先在USER PARAMETER 中创建SORT参数Qؓ字符型,?0?

---- 2. 初始值选’责L?然后这四个D入到DATA SELECTION中,形成列表?

---- 3. 然后处理QUERY中的SQL语句:

select CHARGER,FCO_NO,EM_NAME,FCO
_NO,DESCRIPTION, FCR_POINT
from FCR_MAIN
ORDER BY DECODE(:SORT,'责Q?,CHARGER,'FCO?,
FCO_NO,'FCR?,FCR_NO,'FCR?,EM_NAME)

---- ?在Developer 2000中如何读写操作系l文?
---- 在用Developer 2000的开发工具开发应用程序时Q经常碰到需要读写外部文件的问题Q可以用ORACLE 带的包TEXT_IO来完成这w求。例?

DECLARE
IN_FILE TEXT_IO.FILE_TYPE;
OUT_FILE TEXT_IO.FILE_TYPE;
LINE_BUFER VARCHAR2(80);
/*若不用IN_FILE,可以各字段联接在一赯值给此变?/
BEGIN
IN_FILE:=TEXT_IO.FOPEN
(‘C:\TEMP\TEST1.TXT?’r?;
OUT_FILE:=TEXT_IO.FOPEN
(‘C:\TEMP\TEST2.TXT?’w+?;
LOOP
TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);
TEXT_IO.PUT(LINE_BUFER);
TEXT_IO.NEW_LINE;
TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);
END LOOP;
EXCEPTION
WHEN no_data_found THEN
TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....?;
TEXT_IO.FCLOSE(IN_FILE);
TEXT_IO.FCLOSE(OUT_FILE);
END;
---- ?数据库管?

---- ?在删除一个表中的全部数据ӞM用TRUNCATE TABLE 表名;因ؓ用DROP TABLEQDELETE * FROM 表名ӞTABLESPACE表空间该表的占用I间q未释放Q反复几ơDROPQDELETE操作后,该TABLESPACE上百兆的I间p耗光了?

---- ?数据库文件的UdҎ(gu)

---- 当想数据库文gUd到另外一个目录下Ӟ可以用ALTER DATABASE命o来移?比ALTER TABLESPACE适用性强)Q?

---- 1. 使用SERVER MANAGER关闭实例.

SVRMGR > connect internal;
SVRMGR > shutdown;
SVRMGR >exit;
---- 2. 使用操作pȝ命o来移动数据库文g位置(假设q里操作pȝ为SOLARIS 2.6). 在UNIX中用 mv命o可以把文件移动到新的位置Q?

#mv /ora13/orarun/document.dbf /ora12/orarun
---- 3. 装蝲数据库ƈ用alter database命o来改变数据库中的文g?
SVRMGR > connect internal;
SVRMGR > startup mount RUN73;
SVRMGR > alter database rename file
> ? ora13/orarun/document.dbf?br />> ? ora12/orarun/document.dbf?
---- 4. 启动实例.

SVRMGR > alter database open;
---- (huangfutong@china.com)

---- ORACLE数据库开发经验ȝ



Cpp Fans 2006-12-04 15:09 发表评论
]]>
E序?N你该跟在C#的后?http://www.shnenglu.com/threesh/archive/2006/11/23/15571.htmlCpp FansCpp FansThu, 23 Nov 2006 00:53:00 GMThttp://www.shnenglu.com/threesh/archive/2006/11/23/15571.htmlhttp://www.shnenglu.com/threesh/comments/15571.htmlhttp://www.shnenglu.com/threesh/archive/2006/11/23/15571.html#Feedback1http://www.shnenglu.com/threesh/comments/commentRss/15571.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/15571.html C++、DELPHI、JAVA……这些耀眼的名字不仅占据了程序员的生z,而且g已经成ؓ了某U信仰。这世界上好像没有什么比~程工具更能牵动E序员的心了?/font>


微YQ这头已被法官和黑客们折腑־既疲惫又恼怒的狮子Q发誓要保住它头上的王冠。于是拼全力,拿出了看家的本事—?NET战略。而作?.NET的核心开发语aQC#顺理成章地出了水面?/font>

  有选择有痛苦Q程序员Q你选择跟在谁的后面Q?/font>

  要找出答案就不得不来作一番比较和预测Q?/font>

  先除M切非技术方面的因素不议QC# 无疑是自盘古开天以来这个hcd球上最好的~程语言Q它几乎集中了所有关于Y件开发和软g工程研究的最新成果。面向对象、组件技术、类型安全、版本控制、跨q_异常处理、自动内存管理、代码安全管理……你不可能在另外的一U语a中找到所有这些特性。也许的也许Q这Ӟ你想CJAVAQ然而,C# 实是走得更q?br /> 
  回顾历史Q非技术的因素好像往往更能军_一个品的未来Q尤其在计算Y件的历史上?/font>

  技术卓的产品Q如OS/2、Mac OS、UNIX{,都|在了Windows那漂亮的脸蛋儿下。而这一ơ,微Y的角色好像从一个赤手空拳的革命者变成了仗势Zh的老地主,如果真是要变天,那C# q孩子岂不是投错了胎Q也可能情Şq如此p糕Q毕竟瘦ȝ骆驼比马大,而且C# 已经提交l了一个标准化l织Q一旦成了国际标准,说不准真有哪个大侠(也有可能是微软自己)l移植到Linux 和别的^C?/font>

  要是那样的话QJAVA弟可就惨了。因为JAVA的用户主要是|络服务的开发者和嵌入式设备Y件的开发者,嵌入式设备Y件不是C# 的用武之圎ͼ而在|络服务斚wQC# 的即时编译和本地代码CacheҎ(gu)比JAVA虚拟机更hl对的性能优势。何况C# 一旦成Z个像C++ 一L公共的标准,软g开发商既可以省去JAVA的许可证费用Q也不必担心成ؓ微Y的奴Ӟ那些反微软的人士和主张厂商独立的人士可能也不会有什么意见。这可能正是微Y所期待的?/font>

  再看QC# 和传l通用快速开发工具—VB、DELPHI{的较量Q又是地地道道的白刃战。可能到时最惨的E序员就是VBE序员,在微软,VB像MQ的克林顿Q不但失M所有的光辉Q而且׃~n。想惛_QVB6写的目必须用{换工兯{换成Z.NET的代码才能在VB7中调入,几乎面目全非。由于VB7遵@?NET而徏立的通用语言规范QCLSQ,几乎把所有原来只在C++、JAVA{语a中可以运用的Ҏ(gu)统l加了进来,只是语法和原来兼宏V如果你是第一ơ在VB7中看到自q旧VB6目转换之后的代码,一定要当心你的心脏Q所以,努力吧,别告诉我你将此退休。DELPHI的状况也好不到哪里去Q原来的看家本领是做起应用来又快又好Q可现在看看最新的VS.NET Beta 1, 你会感到如此熟?zhn)Q众多的属性列表、组件……,唉,只有感叹的䆾了!  最后,我们l品品,其实在编E语a中真正的怸多年来一直就是C++Q所有的操作pȝ和绝大多数的商品软g都是用C++作ؓ主要开发语a的。JAVA的程序员l大多数也是C++的爱好者,PHP的成功里面也有类似C++的语法的功劳。在操作pȝ、设备驱动程序、视频游戏等领域QC++在很长的旉内仍占据主要地位,而在数量最大的应用软g的开发上QC# 很可能取代C++的位|?/font>

  首先QC# 和JAVA一P直就是照搬了C++的部分语法,因此Q对于数量众多的C++E序员学习v来很Ҏ(gu)上手Q另外,对于新手来说Q比C++要简单一些。其ơ,Windows是目前占垄断C的^収ͼ而开发Windows应用Q当然微软的声音是不能忽略的。最重要的是Q相对于C++Q用C# 开发应用Y件可以大大羃短开发周期,同时可以利用原来除用L面代码之外的C++代码?/font>

  人无完hQ编E语a它也是如此,C# 也有q?/font>

  首先Q在大量的现有Windowsq_上,C# 的程序还不能q行Q因为C# E序需?.NETq行库作为基Q?.NETq行库将作ؓC代的WindowsQWhistlerQ的一部分发行Q?或以Service Pack的Ş式提交给Windows Me ?Windows 2000用户。所以在q期QC# 会主要在服务器上得到应用。其ơ,C# 能够使用的组件或库还只有 .NET q行库等很少的选择Q没有丰富的W三方Y件库可用Q这需要有一个过E,同时各Y件开发商的支持也很重要。第三,JAVA的成功因素里有一些是反微软阵营的Ҏ(gu)Q虽然“只写一ơ,到处q行”只是一句口P但毕竟已l是一U成熟的技术。而C# 的鼓吹者目前只有名C佳的微YQ且只能q行在Windows上。实际上q两U语a都不是不可替代的Q理智的_对Y件开发商而言Q什么用的最熟什么就是最好的工具。尤其对C++的用者,C# 没有带来MC西,因ؓ.NETq行库在C++中也可以使用Q没有要换的l对的理由?/font>

  据以上分析,我们可以理所当然地得出结论:q几q_C# 不可避免地崛vQ在Windowsq_上成Z角,而JAVA在UNIX、Linux{^C成ؓ怸QC++ l在pȝ软g领域大展拌。非常有意思的是,q些语言的语法极其接q,因ؓJAVA和C# 都是由C++发展而来的。其他的开发工具当然还会在相当长的旉里l他们的旅程Q不q在市场份额上,不可避免地受到冲击?/font>



Cpp Fans 2006-11-23 08:53 发表评论
]]>
PeopleSoft的前景及ERP的未?Q{载) http://www.shnenglu.com/threesh/archive/2006/11/20/15470.htmlCpp FansCpp FansMon, 20 Nov 2006 11:50:00 GMThttp://www.shnenglu.com/threesh/archive/2006/11/20/15470.htmlhttp://www.shnenglu.com/threesh/comments/15470.htmlhttp://www.shnenglu.com/threesh/archive/2006/11/20/15470.html#Feedback0http://www.shnenglu.com/threesh/comments/commentRss/15470.htmlhttp://www.shnenglu.com/threesh/services/trackbacks/15470.html
Oracle收购PeopleSoftq不会给CIO们带来什么恐慌,q只意味着传统ERP时代的结束。对于你的业务来_它也许带来了降低成本增加收益的机会?br />
d二月QCorning业务程架构的负责hRick BeersQ汇聚了来自Bausch & Lomb公司、Harris公司、Leggett & Platt 公司以及其它5家世界五癑ּ公司的CIO们在亚特兰大举行了一ơ特别的C。大家分享了世界上最大的几家PeopleSoft用户的特炏VBeers召集q次会议的目的就是解决目前摆在他们面前的NQ如何通过应用增加企业l效?br />
换句话说Q当拥有13000家用LPeopleSoft被Oracle?03亿美元的h收购后,q些大型公司所头疼的已l不是所谓的恶意收购事g了,而是如何使这些应用lؓ企业提高l效?br />
Beers的峰会在收购以前的几个月开始计划了Q收购成功与否ƈ不会影响C议的q程。不媒体和其他CIO们怎样看待q个问题Q这八家公司的观点就如Reers所说的“Oracle和PeopleSoft的交易ƈ不会改变很多”?br />
Beers{h早已明白Q他们目前的企业应用模型Q在Oracle采取收购行动之前已l出C问题?br />
Beers_“我在这里想要说的就是,大家应该注意我们现在的处境了Q如果我们不能围l业务模型来架构我们的ERPQ那么我们最l会因ؓ互操作性而不得不攑ּ一些系l。W效应该是通过集成现有应用来体现的Q而不是简单单的几个新Ҏ(gu)就能满的Q如果是那样的我们将在ERP上得不到太多的收益。?br />
在这文章,我们针对用PeopleSoft或J.D. Edwards的用P向CIO们介l如何通过短期的战略性调整来应对Beers{h所意识到的长期复杂性的变化?br />
现在的企业应用市场的两大巨头是SAP和Oracle。兼qPeopleSoft后的Oracle目前所拥有的客户已l可以和SAP有所竞争了。这也就是这ơ兼q的闪亮炏V现在的Oracle是百事可乐Q而SAP如同可口可乐。同时用两套^台的用户好比是同时饮用两种饮料的消费者一栗这两大巨头都在努力劝说他们的用P说自己才是是“真正的”企业应用?br />
他们之间的拉锯战已经开始了。SAP最q收购了一家支持PeopleSoft产品的Y件公司TomorrowNowQ同时承诺“先是支持,然后可以升到SAP”来劝说PeopleSoft用户dOracle。而Oracle的回馈是提供“比其它公司更长的服务保障”。Oracle的承诺是保留原PeopleSoft?0%的技术h员,PeopleSoft的Y件可以升U到W九(ji)版本Q同时对PeopleSoftq_支持?013q。Oralceq通过10城市的E演来安抚CIO们。Oracle的CEO Phillips_“我们花?00亿美元不是想让这些客戯掉”。“我们非常有信心让客h意,你们之前什么时候听到过Oracle如此的对客户承诺Q?br />
有些分析家们谈刎ͼPeopleSoft用户得到的优厚待遇以让那些Oracle的用户嫉妒了?br />
其实在Oracle和SAP向PeopleSoft的用LDh的同Ӟ其它独立供应商也开始出来争夺市ZQ他们劝说客戯那些维护费用高昂的大供应商。处于第二梯队的企业应用供应商如Microsoft、Lawson{,也给CIO们的选择增加了难度。Microsoft刚刚和一个公司合作推ZZWeb的用于高{教育的应用pȝQ很明显q是瞄准了由PeopleSoft所掌控的教育市场。外包服务供应商业也会参和进来,他们热情的说刎ͼ现在该是时候把业务外包出去了?

“我被那些想要我q人包围了”,Decorative Concepts公司的CIOq样说道Q“他们不停的打电(sh)话过来,今天我已l接C个了”。Decorative Conceptsq行的是J.D. Edwardspȝ?br />
Oracle许诺对PeopleSoftq_支持Q同时还为CIO们做了详l的安排Q告诉他们下步该怎么走?br />
W一步:定角色?br />
当Oracle购买PeopleSoft后,你们公司的应用^台将会出CU情况,“要么不变,要么变动”?br />
A. 如果选择“不变”。说明你的系l运行的很顺畅,业务程也不会发生太大的变化?br />
q样的话Q你只要专注于内部就行了?br />
你只要对你的应用q_做一个今后一q、三q或五年的风险估价就行了。考虑你到底打支付多,会出C么等U的革新Q是q行一个ERPq_q是多个Q或者你是不是只打算在内部用?br />
Oracle的承诺是以客户ؓ中心

Oracle的CEO Phillips_“我们花?00亿美元不是想让这些客戯掉”。“我们非常有信心让客h意,你们之前什么时候听到过Oracle如此的对客户承诺Q?br />
在这L情况下你的日子将非常好过。IDC的分析家Evan Quinn_“对于已l运行了PeopleSoft的那些用Pq种情况是再好不q了。Oracle作了长期的安排,接下来就只是执行p了”?br />
David GrayQ马萨诸塞州大学的CIOQ选择的就是“不变”。他希望他们的PeopleSoft应用可以延箋20q。“PeopleSoft很多产品的市场都要比Oracle的好Q我们希望Oracle能够看到q一炏V就此我们计划同Oracle来一ơ会议。我们不会问到太多的l节Q但是希望得到更多的收益。?br />
B. 如果是“变动”。那意味着你打整合、升U或增加新的应用Q同时你的业务流E也会有大的变动?br />
q时你就要往外看了?br />
你要招待q些供应商,同时看着他们在那里互相竞争。同时你不的不进行一pd的整合,q要Z的整合做一个预。你也许会有8个胦务系l,4个是PeopleSoft的,一个是SAP的,一个是Oracle的,一个是Lawson的,q有一个是Microsoft的。这时你必要保证它们不会出现问题。每合同都需要出C些额外的需求?br />
基本上,你就在也不可能安E了Q你要在众多的被选方案中选出最佳的。但是,你必要考虑如何解决目前的问题?br />
一个大型保险公司的pȝ理员,打算引进新的pȝQ那么这属于“变动”了。他不得不认真评价供应商。他_“我们D行了两次同样的讨论,以方便供应商介绍他们的方案”。“我们大U选择?0多家相关的企业应用Y件供应商来展CZ们的Ҏ(gu)。我们的重点主要集中在集成上?br />
Quinn认ؓ你可以用六个月到一q的旉来决定你的供应商?br />
Oracle需要你Q?br />
Oracle承诺对PeopleSoft的支持将持箋?013q_q做hq不难,因ؓOracle知道在接下来?q应该做什么。Oracle最担心的是PeopleSoft客户的流失,因ؓOralce?03亿美元的h购买PeopleSoftq当于?90,000元的h(hun)DC?3000家用P那么每少一个客户都会一定程度上降低其投资回报率?br />
如果Oracle惌保留PeopleSoft的用P那么他就要在短期内给x案,q个拖的久不利。尽Oracle愿意提供8q维护支持,但是没有哪家公司是愿意同时维护两套品的。通常软g供应商所l出的品生命周期是18个月Q但Oracle的Phillips_“这没有M冲突Q品本w是有活力的Q我们不会要求Q何h改变什么。?br />
目前QPelpleSoft每年可以从客户那里拿?亿美元的许可费用Q但q和Oracle100亿美元的Zh(hun)q是有段距离的。目前Oracleq不可能很快拿出Ҏ(gu)实现其“一站式服务”,即一点登陆实现对其它软g的端到端操作。最后,Oracle肯定{不?q就会要求他的客户向Oracle应用或数据库转移Q如果不那样的话l护费用׃相当大。这两种情况也许会同时发生?br />
Oracle的发a人Karen Tillman解释道,“很明显Q我们做q次收购交易部分原因是想推销我们自己的品,但这q不意味我们的客户非要那样做?br />
W二步:下一步怎么赎ͼ

对于PeopleSoft用户q里?个方向?br />
A.耐心{待。你也许是属于上面讨论的“不变”的那一c,q时你将相当LQ只要静静的享用ERP所带了价值就好了?br />
Umass公司的Gray认ؓcM于这L实施是“较E_的”。同时他又补充说Q“很明显我们不想有太多的变动”,“但qƈ不代表就没有压力了,按照我的l验来看Q我们不会因为Oracle的承就此拥有太多的Ҏ(gu)待遇”?br />
对于Gray来说Q“耐心{待”ƈ不代表什么都不用做了。他打算同Oracle来一ơ会面,以了解Oracle如何处理PeopleSoft的代码。同时他q准备派几个职员d加Oracle在内华达州的一个会议,讨论Oracle来的h(hun)格和创新。面对市场激烈的竞争Q他不得不考虑如何去降低成本来相应客户的需求?br />
“你必须要让你的l织E_Q业务功能要q行畅?Gray_“我们必要弄清楚供应商的解x案,以及为此我们要支付的费用?br />
表面上看hQ选择“耐心{待”的Gray不需要Q何的变动。Grayl箋q行他的PeopleSoftpȝQ支持h员还是原来那些,最多只是换个工作牌而已。唯一的风险就是维护费用可能增加。Gray同时q提到“在向Oracle转变的过E中q是有一些摩擦的Q一些关于支持的问题没能及时的得到回{。同时还存在q渡点,在这些点上我们也不知道出了问题该找谁负责”。Gray认ؓq主要是因ؓ物理上的合ƈ造成的。尽现在还有很多问题没有得到回刎ͼ但比刚开始的时候稳定多了?br />
qƈ不会lGray带来太多的麻烦,他可以选择l持原样Q如果有必要的话也可以在今后对ERP模型做一些改动?br />
Gray_“很明显Q这q留有很大的余地”?br />
B、寻求第三方支持。不你在第一步里选择的是“变动”还是“不变”,从经的角度来开Qؓ了节U成本,你有可能改变目前的维护、支持模式?br />
Big Lots的副总裁兼CIO John Zavada在两q前看到了PeopleSoft的维护合同,发现在过ȝ五年里成本竟然上升到了原来的两倍?br />
PeopleSoft升?.3是相当痛苦的Q他回忆道。这卌费了旉也花费了不少的钱Q整整经q一q的旉pȝ才达到稳定。据Zavada的透漏Q他们之所以必dU系l仅仅是因ؓ合同的强制规定?br />
“我们再也不会因为维护而受C们的责备Q我们宁愿去l护一Ҏ(gu)务,我们要寻求新的方式”,John Zavadaq样向PeopleSoft说?br />
q种新的方式是由TomorrowNow提供的第三方支持QTomorrowNow负责今?0q对目前版本的PeopleSoft的支持,成本要比依靠软g供应商低的多。Zavada_“我们再也不需要升U了Q不停的升只能l我们带来维护上的痛苦,带来的收益却是微呼甚微”?br />
目前来说Q虽然TomorrowNow在二月䆾被SAP收购了,但所有的一切都q行的比较顺利?br />
John Zavada说他的ROI比两q前了Q如果他们五q前决定上新的ERPpȝ的话Q那会节约很多钱。“我不知道道业界能不能理解CIO们看到的q种差别?John Zavada_“我们对一家又一家的软gq行评估Q同旉我们自己是否能在Ml护上有所节约”?br />
选择W三Ҏ(gu)持是个很不错的选择。你Zl护pȝ需要支付费用,而支持合同又规定要进行系l升U,q样你有不得不寻求更多的支持。Bridgestone Europe的CIO Joe O'Neill之所以选择W三方供应商Q是因ؓPeopleSoft一q的l护费用?0万美元,Oracle 的是22万美元,而如果你选择W三方的话只需?.9万美元?br />
选择W三Ҏ(gu)持的CIO是把ERP看成了商品。他们认Y件最好不要有太多的革斎ͼ升也是不必要的Q因为在升上所q费用是不值的?br />
C.升到Oracle的企业应用^台。你也许在第一步里选择则的是“变动”,那么你也学正在计划升U或是更换。你q是觉得ERP有很多可以革新的地方?br />
Steve SutherlandQ商业房C评估公司CB Richard Ellis的CIO。当他被问到Oracle收购PeopleSoft会给他们公司的PeopleSoft ERP带来什么媄响时Q他首先l我们看了一电(sh)子邮Ӟ

1.PeopleSoft的咨询将会得到提高,因ؓOracle的咨询更专业些?br />
2.h会更透明?br />
3.从长期来看,q更有利于胦务应用与数据库之间的集成?br />
像Sutherlandq样的CIO之所以选择OracleQ是因ؓ他们正处在升U的q程中。他们的PeopleSoft实施处在q样一个情形“我们现在正在实施HR模块Q我们已l有了胦务模块,同时我们也购CCRMQƈ很快运行v来”,对CIO们来说简单就是美Q最好的方式是只有一家供应商Q一个许可证?br />
“对我们q样的公司来_我不x变我们目前的模式?Sutherland_“如果把每年的维护费用同自己内部开发的费用相比Q我们是决不会那样做的,支付l护费用Ҏ(gu)们来说划的多。?br />
Sutherland认ؓQ“我们不希望Oracle撤销掉那些我们认为是重要的一些资源。因此我告诉他们我们惌保留什么。目前来_他们的支持现在更强大了。?br />
一些CIO担心QPeopleSoft的精华,如友好和E_的h力资源和财务pȝQ将会在向Oracle的过渡中消失掉。但是Sutherland却不q么认ؓQ他认ؓ“我们已l看Cq两者结合后的力量,q两块的优势只能让这家公司收益,因此他们是不会就q么消亡的。”?br />
W三步,来怎么办?

Oracle认ؓ企业应用软g一定要整合h。而对于Oracle本n来说Q现在要做的是三家的代码Q包括PeopleSoft和J.D. EdwardsQ整合在一个^CQ这个^台将以Oracle数据库和应用服务器ؓ中心Qƈ使用Z面相服务的架构SOA。目前Oracleq没有花太大的精力在q块市场上。SAP推出的基于SOA的ERPUCؓNetWeave。一些其它的W三方供应商如IBM也提供了工具和服务来帮助企业建立自己的SOA架构Q因此这q那些惌dOracle和SAP的用h供了更多的选择?br />
当Rick Beers召集CIO们在亚特兰大开会时Q他p虑CSOA?br />
SOA的原理很单:所有的技术实CCؓ一个业务流E,例如Q“信用检查”,是一个服务,它不像ERP应用那么秘。服务由不同的应用组合在一赗他们通过标准的接口与其它的服务和应利用进行通信?br />
在SOA世界里,伴随着业务的是应用,例如SAP的胦务系l可以访问PeopleSoft的HRpȝ。SOA作ؓ集成层可以避免只能只用单一ERPpȝ的情形出现。通过使用集成层,我们再也不用为繁琐的l护头疼Q而尽情的体验ERP带来的收益。如果你在不同的供应链上理了多个业务流E,那么你也许最需要的是在不同的q_上进行业务流的通信?br />
对于Innovation 的CEO Stephanie Race 来说QSOA的概念已l是十几q前的了。Innovation曄在多家大公司工作q,q也包括Corning。用SOA来代替ERP听v来似乎有些新Q但是它已经是一个相当热的话题了?br />
其实除了SOAQ业务流E外包(BPOQ也是一个新的发展。对于那些把ERP作ؓ常用功能的用PBPO可以让他们远dU、支持和l护。让IBM、埃哲或其它厂商来理q些业务功能Qƈ应对那些软g供应商。SAP和Oracle目前也在抢夺外包市场。Phillips_目前只有“几百个”客L订了他们的随需应变Qon-demandQ业务,但Oracle的目标是在五q之内要?5%的客户选用外包模式?br />
ERP的今天和明天?br />
其实q两U前景是可以l合h的。服务公怹可以利用SOA来管理业务流E。同时客户也许只需一些最基本的ERP功能外包出去Q如薪资理{,而将那些E复杂的功能保留在企业里。Bridgestone Europe公司的O'Neill正在准备那些标准的、变化不大的应用转移出去Q这样他可以把_֊集中在那些需要革新的领域?br />
q将会有两方面的影响?br />
W一Q大的ERP会分解开来。一些复杂的功能如供应链理、CRMl保留,其它的如薪资理、税务报表等会分离出去?br />
W二Q目前的q种pȝl护、支持模式将会改变。这也就意味着CIO们不用在那些通用的流E上做无谓的升了,他们可以腑և手来x那些需要革新的地方。以前他们需要自己打水来zMQ而在外包或SOA世界里是不需要的?br />
但是Q新的定h式将是怎么L呢?“它是更依赖于服务还是更依赖于架构呢Q”Corning?Beersq样问到。“这个行业将会向哪里发展Q如果没有维护合同来支持Q系l如何进行革斎ͼ?br />
Beers好像要让CIO们想的更q?br />
目前的ERP模式p消亡QBeers问到Q“我们如何来l持革新Q我们如何来创造h(hun)|?br />
“下一代企业应用架构到底是怎么个样子??br />
让我们好好考虑考虑吧?/span>



Cpp Fans 2006-11-20 19:50 发表评论
]]>
[转]你的定位Q你的一?-解读ITZ业方?/title><link>http://www.shnenglu.com/threesh/archive/2006/11/16/15264.html</link><dc:creator>Cpp Fans</dc:creator><author>Cpp Fans</author><pubDate>Thu, 16 Nov 2006 14:26:00 GMT</pubDate><guid>http://www.shnenglu.com/threesh/archive/2006/11/16/15264.html</guid><wfw:comment>http://www.shnenglu.com/threesh/comments/15264.html</wfw:comment><comments>http://www.shnenglu.com/threesh/archive/2006/11/16/15264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/threesh/comments/commentRss/15264.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/threesh/services/trackbacks/15264.html</trackback:ping><description><![CDATA[ <p>关于企业计算方向 <br />企业计算(Enterprise Computing)是稍旉较好听的名词Q主要是指企业信息系l如QERP 软g(企业资源规划)、CRM 软g(客户关系理)、SCM 软g(供应铄理,即物Y?Q银行证券Y件胦务Y件电(sh)子商?政务(包括各种|站)Q数据仓库,数据挖掘Q商务智能等企业信息理pȝ?</p> <p>企业计算领域对h才的需求显然永q是数量最大的因ؓq是计算机应用最多的领域。搞q方面的好处? </p> <p>(1)人才需求量极大从事企业计算的公司在IT企业中占了大多数。除非在专业上一无特长一般在q一领域总能扑ֈ工作?</p> <p>(2)q方面的入门门槛相对较低(如果你的软g功底不是很深可考虑q一领域) </p> <p>(3)q方面的大公司较多大公司要赚大钱所以多精力花在企业计业务上Q如与正规高校Y件学院同学目前实习的CitiCorp、HP、IBM、SAP、NEC{公叔R属这一领域的公司。如果将来想到大公司找一份相对稳定的工作Q从事这斚wZ要大很多?</p> <p>但从事这一领域的缺点也是明昄: </p> <p>׃q方面的入门门槛相对较低Q虽然这斚w的h才需求量是最大的Q但来竞争Ҏ(gu)会较多。?zhn)会发玎ͼ即他原不是学IT专业的hQ也总H击几个月后Q做得照样像模像栗特别是当?zhn)q纪渐大后,(zhn)可能会发现Q后面的q轻人可能很Ҏ(gu)q上你的水^。如果?zhn)来到国外去工作Q你可能会发C事这领域的h更多且高手如云。当Ӟ若?zhn)在这一领域l过多年企业l验Q达到较高境?如能设计软g架构)Q则wh(hun)永远是高的。国内在q方面h才领域的主要问题是,有经验的高手太少Q皮毛了解的人太多?</p> <p>从事企业计算领域Q最重要的技能型技术课E是 </p> <p>(1) J2EE架构与程序设?/p> <p>(2) 大型数据库系l?如Oracle)</p> <p>(3) ZUML的系l分析与设计?br />如果说还有什么重要的技能,q可XML与Web Service技术包含进来,若?zhn)在这几个领域掌握较好Q则不愁找不到工作。其中尤其以J2EE最为重要,目前J2EE已成Z业计Y件开发的最主要q_Q也是正规高校Y件学院的最重要评之一?/p> <p>管该课E只能作为选修课,我们希望正规高校软g学院同学无论来想从事何U方向,都应学一下J2EE评Q至可为将来找工作备一手关键功夫。包括想从事嵌入式或其它领域的同学,也是很有必要学一下J2EE的,毕竟J2EE是目前最重要的^C一Q即使?zhn)来不想从事企业计算领域Q了解一下J2EE也是必要的,像一门常识课E一栗?/p> <p>其它与企业计关p较密切的技能还包括: Dot Net架构与程序设计、Y件测试技术、Y仉|管理,该领域较高层ơ的技能包括数据仓库技术、构件与中间件技术、设计模式等。像通信协议分析与网l程序设计,Unixpȝ理{也属有些关pȝ评?2U本学期开讄企业计算评不多Q主要是J2EE、Oracle/MSSQL、UML{企业计领域的最关键技能型技术课E都已学完了?/p> <p>(zhn)应在空余时间将J2EEQDB、UML{技术再深入地钻研下去,一定要在某个领域有深入的掌握。只是跟着听课Q即使学了再多课E也是没用处的,自己ȝ下去才是最重要的。只一个J2EE便是博大_深的,_你啃下去的,ȝ下去Q?zhn)会发Cq要学的相关知识q有很多(包括EJB、XML、Web Service、Design Pattern{??</p> <p>虽然从事企业计算的h才很多,但以下企业计领域无论国内外都属E~Zh? </p> <p>(1) 掌握大型ERPpȝQ主要是SAPpȝQ包括SAP Basis(pȝ理)或SAP ABAP(~程)或SAP功能模块实施(特别是胦务模块FI的实?。SAPNwh(hun)是最高的Q而且非常难找。其它大型ERPpȝQ掌握PeopleSoft、Oracle Finacial、J.D.Edward、Siebel{大型ERP软gpȝ的h也很值钱。这斚w的h之所以n价奇高,主要是因些Y件很专业Q特别大Q很难有D版可学习Q只有特大企?如世?00强,90以上使用SAP)才用得vQ而且必须有实际工作经验才能掌握。如果是一个个Zh都很Ҏ(gu)有机会接触的软gQ那么这斚w的h通常׃会稀~。如果大家将来有Z接触学习q些大型ERP软gpȝ的机会,毫不犹U地抓住,那将捧上一辈的金饭?/p> <p>在国外,会SAP的h特别值钱。物以稀Q这永远是颠扑不破的真理。SAP的h(hun)g仅是因ؓ他是一个ERP软gQ?而是其中体现的现代企业管理理?如根据订货需求自动安排原料采购和生计划{?。一?00强公司绝不会像国内很多企业那P用J2EE从头设计企业的ERPpȝ(卛_是怎样的h力投入,而且设计出来的系l怎么可能是完善的)Q一定都会用SAPq样成熟的ERP软g。用不vSAP的公司可能会用J2EE设计ERPpȝ?</p> <p>(2) 掌握IBM大型机技术的人,如S/390LQMVS操作pȝQJCL作业控制语言QCOBOLE序设计语言QDB2关系数据库或IMS层次数据库,CISC中间件交易控制系l等IBM大型Z用技术。国内五大银行,以及国外l大多数银行的后台系l用的都是以上q_。IBM大型机号U永不宕且q_相对闭(q样最安全)Q所以这些要求在24*7环境中连l运行的关键应用(术语叫mission critical applications)都采用IBM大型机?/p> <p>q方面的人才之所以稀~,是因Z大型机的人都是老h(90q代以前搞IT的h)Q全世界新毕业的IT毕业生不可能再去学IBM大型?q是一U相对“古老“的技?没有Ch补上而银行的pȝ必须l持下去而且银行q要不断开发新业务(如新的存Ƒ֓U?虽然对IBM大型Zh才的l对需求量不很大但相对恒定银行到哪里找q方面的Ch很难扑ֈ. 若好找花旗Y件也不会花那么大的代价去培训我们的实习同学了(d培训20多个人听说公司就׃数十万元培训?. 如果(zhn)将来到国外扑ַ作会IBM大型机可能是最好找工作的领域之一了而且保证扄都是大银行等好工作我以前教过的计机专业90-94U的一些同学凡是毕业后从事大型机开发的现多在国外一些很好的公司工作(有几位同学在各国各公司蟩来蟩ȝ直如履^?.</p> <p>其实我觉得我们最q福的同学就是在花旗软g做IBM大型机银行Y件的同学q样的机会太隑־?正规高校软g学院00U?2班一位同学当初放弃保研看准在花旗软g做大型机q且非常努力q未毕业公司便派她到国外参加一个项目的开发成了项目骨q我觉得她当初选择是完全正的Q?1U一位女同学刚刚也自愿放弃了保研Z去花旗做大型机,我们愿她将来也能有好的前景。其实像花旗软gd安排q励员工读在职研究生,q样开明的公司目前q不多的Q在职读研也是一U不错的选择Q又不会失去自己喜欢的实习工作机会,能兼?M的最l目地还是ؓ了工? 如果(zhn)将来在国外扑ַ作根本没人管(zhn)是什么文凭国外企业绝不会花冤枉钱只会招有领域工作l验能立即上手的人用最的钱在限定的时间完成项? 而在国内因ؓ人力成本较低公司招聘一很多高学历的人才管可能Ҏ(gu)用不到这么高的学历但国内的h力太便宜了ؓ什么不高消费一下h才呢q样公司的门面还要好看些?</p> <p>(3) 其它如掌握数据仓库技术的人在国内也很? 目前最L的数据仓库^台应是ORACLE的数据仓库工? 在国外会一些特D数据仓库的人如NCR/TEREDATA的h非常难找. </p> <p>q轻人充满热情喜Ƣ追逐一些热门技术,q当然正的毕竟学习SAP和大型机的机会毕竟不多毕业时先能扑ֈ一份工作是重要? 但我怿随着q纪的增长大家将来慢慢都会思考的掌握一竞争对手较?yu)的l技的重要性将来如果自己到国外工作什么技术最好找工作(Ҏ(gu)软g的h到国外工作或UL是最Ҏ(gu)的也许?zhn)现在不想但我怿工作多年以后很大一部分同学可能惛_国外闯荡一?你要考虑你今后一生的\什么样的绝技是最E_最L最高收入的. 搞Y件的人当q纪大些时?zhn)可能更向住像搞医学h的那栯更多靠经验吃饭而不L天像q轻人那样不得不去追逐不断出现的软g新技术这个时候也许?zhn)也许会发现如果(zhn)在SAP或大型机{方面有些绝技(zhn)会有很大优势因些较偏的领域其技术变化是相对很缓慢的. </p> <p>我还记得?002q时我曾在业余时间与一位d国h合作面试一些IT人才到d国去那时h各公司发来的需求有很多是SAP和IBM大型机的我们在众多应聘者中最后也未找C个在q方面有l验甚至是有一点经验的. 相反掌握行技术的人因太多而不很值钱. </p> <p>扑ַ作时不仅要盯着国内市场q要有一U放眼全球的眼光Q对搞Y件的人?zhn)来完全可能到其它国家去工? 其是在Ƨ美、日本、新加坡{国Ӟ对SAP(包括IBM大型?人才的需求是很大的。毕竟比同学见得多些提醒同学来多留意有学习q些l技的机会一旦有Z当仁不让. 国内的h才市场可讉K<a ><u><font color="#0000ff">www.51job.com</font></u></a>Q国外的IT人才需求可讉K<a ><u><font color="#0000ff">www.hotjobs.com</font></u></a>?a ><u><font color="#0000ff">www.workopolis.com</font></u></a>?a ><u><font color="#0000ff">www.monster.com</font></u></a>{著名网站。应l常讉Kq些|站Q以了解市场对h才的具体需求,早做准备?<a ><u><font color="#0000ff">www.uiok.net</font></u></a></p> <p>以上对企业计领域的观点供大家参?虽然观点未必正确但确是直a不讳. M每个人的脑袋都长在自p子上每个人都应有自己的判? </p> <p>q要注意我以上纯_Ҏ(gu)从将来就业的角度谈问? 如果(zhn)将来准备到国外M则应重视基础译փCAssemblyOOPDiscrete MathData StructureOpeating SystemDatabase PrincipleNetworkSoftware EngineeringCompilerDigital CircuitComputer GraphicsComputer Component and Architecture{基译֜国外大学IT专业中一般都能找到相同课E若国内学过到国外读书时一般可甌免修一部分. 但我也想提醒同学如果(zhn)将来毕业时万一甌国外大学不成不得不去扑ַ作时Q若只将_֊花在q些IT专业学生都会的基课上(传统IT教育模式) 未掌握一些像J2EE{技能型技术是不容易找C份工作的我们已有同学有这L教训。从扑ַ作的角度Ԍ企业兛_的不是?zhn)学过什么课E,而是兛_(zhn)能做什么,有什么技能,能做什么项目?/p> <p>二、关于嵌入式pȝ方向 </p> <p>嵌入式系l无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式pȝ用在一些特定专用设备上Q通常q些讑֤的硬件资?如处理器、存储器{?非常有限Qƈ且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电(sh)的智能化Q嵌入式更显重要。像我们q_常见到的手机、PDA、电(sh)子字典、可视电(sh)话、VCD/DVD/MP3 Player、数字相?DC)、数字摄像机(DV)、U-Disk、机盒(Set Top Box)、高清电(sh)?HDTV)、游戏机、智能玩兗交换机、\由器、数控设备或仪表、汽车电(sh)子、家?sh)刂葡低场⒁搅埔瞧鳌⒑教旌娇丈璞傅鹊榷际堑湫偷那度胧较低?</p> <p>嵌入式系l是软硬l合的东西,搞嵌入式开发的人有两类?</p> <p>一cL学电(sh)子工E、通信工程{偏g专业n的hQ他们主要是搞硬件设计,有时要开发一些与g关系最密切的最底层软gQ如BootLoader、Board Support Package(像PC的BIOS一P往下驱动硬Ӟ往上支持操作系l?Q最初的硬仉动程序等。他们的优势是对g原理非常清楚Q不x他们更擅长定义各U硬件接口,但对复杂软gpȝ往往力不从心(例如嵌入式操作系l原理和复杂应用软g{??</p> <p>另一cL学Y件、计机专业n的hQ主要从事嵌入式操作pȝ和应用Y件的开发。如果我们学软g的h对硬件原理和接口有较好的掌握Q我们完全也可写BSP和硬仉动程序。嵌入式g设计完后Q各U功能就全靠软g来实CQ嵌入式讑֤的增值很大程度上取决于嵌入式软gQ这占了嵌入式系l的最主要工作(目前有很多公司将g设计包给了专门的g公司Q稍复杂的硬仉交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发YӞ因ؓ公司都知道,嵌入式品的差异很大E度在Y件上Q在软g斚w是最有“花头“可做的)Q所以我们搞软g的h完全不用担心我们在嵌入式市场上的用武之地Q越是智能设备越是复杂系l,软gv关键作用Q而且q是目前的趋ѝ?</p> <p>从事嵌入式Y件开发的好处? </p> <p>(1) 目前国内外这斚w的h都很E~。一斚wQ是因ؓq一领域入门门槛较高Q不仅要懂较底层软g(例如操作pȝU、驱动程序软g)Q对软g专业水^要求较高(嵌入式系l对软g设计的时间和I间效率要求较高)Q而且必须懂得g的工作原理,所以非专业IT人员很难切入q一领域另一斚wQ是因ؓq一领域较新Q目前发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作pȝ、MPEG技术、无UK信协议{?Q掌握这些新技术的人当然很找。嵌入式人才E~,wh(hun)自然高Q越有经验h(hun)格就高。其实嵌入式人才E根本原因可能是大多Ch无条件接触这需要相应的嵌入式开发板和Y件另外需要有l验的hq行指导开发流E?</p> <p>(2) 与企业计等应用软g不同Q嵌入式领域人才的工作强度通常低一?但收入不?。搞企业应用软g的IT企业Q这个用Lpȝ搞完了,又得L下一个用LQ而且每个用户的需求和完成旉都得按客戯求改变,往往疲于奔命Q重复劳动。相比而言Q搞嵌入式系l的公司Q都有自q产品计划Q按自己的节奏行事。所开发的产品通常是通用的,不会因客L不同而修攏V一个品型号开发完了,往往有较长一D늩闲时?或只是对软gq行一些小修补)Q有旉q行充电(sh)和休整。另外,从事嵌入式Y件的每个人工作范围相对狭H,所涉及的专业技术范围就是那?ARM、RTOS、MPEG?02.11{?Q时间长了这些东西会搞有l验Q卖卖老本Q几句指g够让那些初入道者琢半q的。若搞应用YӞ可能下一个客戯换成一个完全不同的软g开发^収ͼ那就苦了?</p> <p>(3) 哪天若想创业Q搞自已的品,那么嵌入式是一个不错的LQ这可不像应用Y仉样容易被盗版。土木学院有一个叫启明星的公司开发出一个好象叫“工Ee”的掌上PDAQ施工技术h员用该PDA可当行土木概预算和其它土木计,据说销路特好。我认识的某大学老师Q他开发的饭馆用的点菜PDA(WinCEq_Q可无线q网和上|?Q据他说销路不错,饭馆点点PDA让客L菜,多显z֤档次。当q有一l同学在学WindowsE序设计评时用VC设计了一个功能很强的点菜pȝ做ؓ评目Q当时真惛_议他们将q个软g做成PDAQ估计会有些销?上v火R站南q场的Macdonald便用很漂亮的PDAl用L食品Q像摸像L)。这些PDA的硬件设计一般都是请其它公司l订?q叫“脓(chung)牌?OEM)Q都是通用的硬Ӟ我们只管设计软g变成自q产品了?</p> <p>从事嵌入式Y件开发的~点? </p> <p>(1) 入门L较高Q所用到的技术往往都有一定难度,若Yg基础不好Q特别是操作pȝUY件功底不深,则可能不适于此行?</p> <p>(2) q方面的企业数量要远于企业计算cM业。特别是从事嵌入式的企业数量较?企业要搞自q产品创业)Q知名大公司较少(搞嵌入式的大公司主要有Intel、Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半g、Microtek、研华、华为、中兴通信、上q电(sh){制造类企业)。这些企业的习惯思维方式是到?sh)子、通信{偏专业找人。由于正规高校Y件学院以前毕业生以企业计ؓ主,所以正规高校Y件学院与q些企业联系相对较少。正规高校Y件学院正U极努力Q目前已与其中部分公司徏立了联系Q争取今后能有正规高校Y件学院同学到q些企业中实习或׃?</p> <p>(3) 有少数公司经常要士以上的h搞嵌入式Q主要是Z嵌入式的隑ֺ。但大多数公怹q无此要求,只要有经验即可?</p> <p>正规高校软g学院同学若学习嵌入式Q显然应偏重于嵌入式软gQ特别是嵌入式操作系l方面,应是我们的强V对于搞嵌入式Y件的人,最重要的技术显然是(实际上很多公司的招聘q告上就是这样写?: </p> <p>(1) 掌握L嵌入式微处理器的l构与原?</p> <p>(2) 必须掌握一个嵌入式操作pȝ </p> <p>(3) 必须熟?zhn)嵌入式Y件开发流Eƈ臛_做过一个嵌入式软g目?</p> <p>正规高校软g学院在嵌入式软g斚w最重要的课E包? </p> <p>(1) 嵌入式微处理器结构与应用:q是一门嵌入式g基础评Q正规高校Y件学院用q门译֏代了传统的“微机原理与接口”课E?目前国内已有部分高校IT专业q样做了Q因x86微机原理与接口很难找到实际用处,只ؓ教学而已)。我们说q,嵌入式是软硬件结合的技术,搞嵌入式软g的h应对ARM处理器工作原理和接口技术有充分了解Q包括ARM的汇~指令系l?/p> <p>若不了解处理器原理,怎么能控制硬件工作,怎么能写省内存又q行高速的最优代?嵌入式Y件设计特别讲I时I效?Q怎么能写出驱动程?驱动E序都是与硬件打交道?很多公司招聘嵌入式Y件h员时都要求熟(zhn)ARM处理器,来若同学到公司中从事嵌入式软g开发,公司都会l你一本该讑֤的硬件规D明书 (xxx Specification)Q?zhn)必须能看懂其中的内存分布和端口用等最基本的说?像x86汇编一?Q否则怎么设计软g。有些同学觉得嵌入式处理器课E较枯燥Q这主要是硬件课E都较抽象的原因Q等我们的嵌入式实验?0月䆾建好后,(zhn)做了一些实验后׃觉得看得见摸得着。还有同学对ARM汇编不感兴趣Q以为嵌入式开发用C语言p够了。其实不应仅是将汇编语言当成一个程序设计语aQ学汇编主要是ؓ了掌握处理器工作原理的。一个不熟?zhn)汇编语言的hQ怎么能在该处理器写出最优的C语言代码?/p> <p>在嵌入式开发的一些关键部分,有时q必d汇编Q如Bootloader{?可能q包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和囑փ解压~?Q目前主要还要靠汇编写程?我看到过很多公司是这样做?。当(zhn)在一个嵌入式公司工作Ӟ在查看描q原理的手册Ӟ可能很多都是用汇~描q的(我就遇到q?Q这是因为很多硬件设计h员只会写或者喜Ƣ用汇编描述Q此时?zhn)必ȝ懂汇~程序,否则软硬件h员可能就无法交流。很多嵌入式职位招聘旉要求熟?zhn)汇编?</p> <p>(2) 嵌入式操作系l类评 </p> <p>除了WinCE的实时性稍差外Q大多数嵌入式操作系l的实时性都很强所以也可称为实时操作系lReal Time Operating System.从事嵌入式的须掌握一个嵌入式操作pȝ(当然掌握两个更好)q在嵌入式的所有技术中是最为关键的了。目前最重要的RTOS主要包括: </p> <p>W一cR传l的l典RTOS:最主要的便?Vxworks 操作pȝQ以及其Tornado开发^台。Vxworks因出现稍早,实时性很?据说可在1ms内响应外部事件请?Qƈ且内核可极微(据说最可8K)Q可靠性较高等Q所以在北美QVxworks占据了嵌入式pȝ的多半疆山。特别是在通信讑֤{实时性要求较高的pȝ中,几乎非Vxworks莫属。Vxworks的很多概念和技术都和Linux很类|主要是C语言开发。像Bell-alcatel、Lucent、华为等通信企业在开发品时QVxworks用得很多。但Vxworks因h(hun)格很高,所以一些小公司或小产品中往往用不赗目前很多公叔R在往嵌入式Linux?听说华ؓ目前正在q样?。但无论如何QVxworks在一D长旉内仍是不可动摇的。与VxworkscM的稍有名的实时操作系l还有pSOS、QNX、Nucleus{RTOS?</p> <p>W二cR嵌入式 Linux 操作pȝ:Linux的前途除作ؓ服务器操作系l外Q最成功的便是在嵌入式领域的应用Q原因当然是免费、开源、支持Y件多、呼拥者众Q这样嵌入式产品成本会低。Linux本n不是一个ؓ嵌入式设计的操作pȝQ不是微内核的,q且实时性不强。目前应用在嵌入式领域的Linuxpȝ主要有两c?一cL专ؓ嵌入式设计的已被裁减q的LinuxpȝQ最常用的是uClinux(不带MMU功能)Q目前占较大应用份额Q可在ARM7上跑另一cL跑在ARM 9上的Q一般是Linux 2.4.18内核UL在其上,可用更多的Linux功能(当然uClinux更可跑在ARM 9??/p> <p>很多人预,嵌入式Linux预计占嵌入式操作系l的50以上份额Q非帔R要。缺Ҏ(gu)熟?zhn)Linux的h太少Q开发难度稍大。另外,目前我们能发现很多教材和很多大学都以ucOS/II为教学用实时操作pȝQ这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系l原理,但由于ucOS/II功能有限Q实用用得较?yu),所以正规高校Y件学院不其作ؓ教学重点Q要学习应学直接实用的Q比?uClinux很实用。况且熟(zhn)了Linux开发,不仅在嵌入式领域有用Q对开发Linux应用软gQ对加深操作pȝ的认识也有帮助,可谓一丑֤得。据我所知,目前Intel、Philip都在大搞ARMLINUX的嵌入式开发,Fujitum则是在自q处理器上大搞Linux开发。目前在嵌入式Linux领域Q以下几个方面的人特别难找,一是能LinuxUL到某个新型号的开发版上二是能写Linux驱动E序的h三是熟?zhn)Linux内核裁减和优化的人。正规高校Y件学院在该嵌入式Linux斚w的课E系列是:本科生操作系l必修课Q然后是LinuxE序设计选修课,最后是嵌入式Linuxpȝ选修课。正规高校Y件学院在Linux斚w目前已有较强力量Q魏老师和张老师熟?zhn)Linux开发,金老师和唐老师熟?zhn)Linuxpȝ理?</p> <p>W三cR?Windows CE 嵌入式操作系l?Microsoft也看准了嵌入式的巨大市场QMS永远是最厉害的,WinCE出来只有几年旉Q但目前已占据了很大市场份额Q特别是在PDA、手机、显CZA表等界面要求较高或者要求快速开发的场合QWinCE目前已很行(据说有一家卖工控机的公司板子卖得太好Q以x不及为客戯减WinCE)。WinCE目前主要?.2?.NET)Q开发^C要ؓWinCE Platform BuilderQ有时也用EVC环境开发一些较上层的应用,׃WinCE开发都是大家熟(zhn)的VC环境Q所以正规高校Y件学院学qWindowsE序设计评的同学都不会有多大难度,q也是WinCEҎ(gu)被h们接受的原因Q开发环境方便快速,微Y的强大技术支持,WinCE开发难度远低于嵌入式Linux?/p> <p>对于急于完成Q不x嵌入式Linux冒险的开发场合,WinCE是最合适了(扑ֵ入式Linux的h可没那么好找?Q毕竟公怸能像学生学习那样试试看,保证开发成功更重要。根据不同的侧重?QWinCEq有两个Ҏ(gu)版本Q一个是MS PocketPC操作pȝ专用于PDA?掌上?sh)?Q另一个是MS SmartPhone操作pȝ用于手机?带PDA功能的手?Q两者也都属于WinCEq_?/p> <p>在PDA和手机市ZQ除WinCE外,著名的PDA嵌入式操作系l还有Palm OS(因出现很早,很有?、Symbian {,但在WinCE的强劲冲MQPalm和Symbian来日q能有多长正规高校Y件学院可能是全国高校中唯一一家开设专门的“Windows CE嵌入式操作系l“课E的学校Q这主要是基于以下原?正规高校软g学院本n前面便有WindowsE序设计评Q同学学qVC后再学WinCE非常方便自然Q通过学习WinCE同样也可了解嵌入式Y件的一般开发过E,对Linux有惧怕心理的同学也很合适?/p> <p>  很显Ӟ嵌入式Linux永远不可能替代WinCEQ而且来谁占份额大还很难Ԍ毕竟很多人更愿意接受MS的^収ͼ像各国政府都在大力推LINUX已好长时_但?zhn)能看到几个在PCZ真正使用LINUX的用h我观察目前在嵌入式^CLINUX是叫得最响但q是WinCE实际用得更多.嵌入式LINUX可能更多地是一些有长远产品计划的公ؓ降低成本而进行长q考虑 二是微Y亚洲研究院对正规高校软g学院WinCE评的支持计划,我们也很希望来正规高校软g学院能有同学通过微Y的面试去实习。WinCE和多媒体(如MPEG技?是微软亚z工E院目前做得较多的项目领域之一他们很需要精通WinCE的h?</p> <p>ȝ关于嵌入式操作系l类评Q若(zhn)觉得自己功底较׃能钻研下去,则可d嵌入式Linux若?zhn)觉得自己VC功底较好且想短^快地学嵌入式开发,则正规高校Y件学院的WinCE评是最好的选择?</p> <p>(3) 嵌入式开发的其它相关软g评 </p> <p>搞嵌入式若能熟?zhn)嵌入式应用的一些主要领域,q样的h更受企业Ƣ迎。主要的相关领域包括: </p> <p>A、数字图像压~技?q是嵌入式最重要最热门的应用领域之一Q主要是应掌握MPEG~解码算法和技术,如DVD、MP3、PDA、高_(sh)视、机盒{都涉及MPEG高速解码问题。ؓ此,正规高校软g学院已预订了一位能开设数字图像处理课E的博士?</p> <p>B、通信协议及编E技?q包括传l的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式讑֤都要q入局域网或InternetQ所以首先应掌握TCP/IP协议及其~程Q这是需首要掌握的基本技术其ơ,无线通信是目前的大趋势,所以掌握无UK信协议及编E也是是很重要的。无l通信协议包括无线局域网通信协议802.11pdQBluetoothQ以及移动通信(如GPRS、GSM、CDMA{??</p> <p>C、网l与信息安全技?如加密技术,数字证书CA{。正规高校Y件学院有q方面的选修课?</p> <p>D、DSP技?DSP是Digital Signal Process数字信号处理的意思,DSP处理器通过g实现数字信号处理法Q如高速数据采集、压~、解压羃、通信{。数字信号处理是?sh)子、通信{硬件专业的评Q对于搞软g的h若能了解一下最好。目前DSP人才较缺。如果有信号与系l、数字信号处理等评基础Q对于学习MPEG~解码原理会有很大帮助?</p> <p>(4) 嵌入式开发的相关g基础 </p> <p>对于软g工程专业的学生,从事嵌入式Y件开发,像数字电(sh)路、计机l成原理、嵌入式微处理器l构{硬件课E是较重要的。另外,汇编语言、C/C、数据结构和法、特别是操作pȝ{Y件基课也是十分重要的。我们的主要目地是能看懂g工作原理Q但重点应是在嵌入式软gQ特别操作系l软gQ那是我们的优ѝ?</p> <p>我们的研I生里有些是学电(sh)子、通信cM业过来的Q有较好的模拟电(sh)路和单片机基Q学嵌入式非常合适。嵌入式本n是从单片机发展q来的,只是单片Z带OSQ而现在很多嵌入式应用来复杂,以至不得不引入嵌入式操作pȝ。另外,求更高速的信号处理速度Q现在在一些速度要求较高的场合,有不公司是一些DSP法Q如MPEG压羃解压~算法等用硬件来实现Q这涉及到HDL数字?sh)\设计技术及其FPGA/IP核实现技术,q方面的人目前市Z也很~?</p> <p>(5) 题外?</p> <p>另外Q能写驱动程序的人目前是非常紧缺?驱动E序也可归于嵌入式范?Q包括桌面Windows中的DDK开发环境和WDM驱动E序。公司每时每刻都要推出新产品Q每一个新产品出来了,要能被操作系l所使用Q是必须写驱动程序的。写驱动E序必L握操作系l?如Windows或Linux)的内部工作原理,q涉及到量g知识Q难度较大,所以这斚w的h很难找。想成ؓ高手的同学,也可从驱动程序方面获得突破?/p> <p>我可说一下自ql历Q三q前我曾短暂地在一家公司写qWinCE驱动E序(正是因ؓ知道q方面的人紧~,所以才要做q方面的?Q尽那以前从未做过驱动E序Q应聘那个职位时正是看准了公司是很难招聘到这斚w的hQ既焉找不ChQ驱动还得有人做Q这正是可能有机会切入这一领域的大好机会。面试时大讲自己写过多少万行汇编E序Q对计算机工作原理如何清楚,历中又写着我曾阅读完两本关于Windows Driver Model的两本英文原版书Q写q几个小型的驱动E序l习E序(其实Ҏ(gu)没写q,我们的同学将来千万不要像我这P早练?yu)׃q硬功夫Q就不至于落到我这{地步,׃用像我那样去“欺骗”公怺Q我q是一个典型的反面教材)Q居然一切都PASS(当然最重要的是W试和面试问题还说得q去)Q这只能说明q一领域找h的困隄度。公司本未指望扑ֈ搞过驱动的hQ找个有相关基础的hq不错了。做了以后,发现也ƈ不是怎样隄。其实搞驱动E序的工作是很舒服的Q搞完一个版本就会空一D|_只有{公司新的芯片推出或新的OS出现后,才需要再d发新一版驱动,那时有将q一个月旉I闲着在等WinCE .NET Beta版推出,准备驱动程序升U到CE .NET上,现在在Y件学院工作整日忙Q无限怀念那D|闲时光?</p> <p>很y合,最q本人无意中再次体会C嵌入式的qh之处。上周我那用?q的手机l于不能WORK了。此ơ更斎ͼ除要求有手机常见功能外,最好有MP3功能(现在很多p听力都有MP3文g)Q最好有英汉词典Q最好还能读WORD文档。最后选了个满以上条件的最便宜的手机DOPOD 515(斩了?.2KQ但xq也自己对嵌入式事业的支持Q这样便也想开?Q算得上最低档的智能手Z。回来一查,手机的about昄Q本手机Processor是ARMQ其OS是MS Smartphone(即WinCE .NET 4.2)Q这么y合,直可做ؓ学习嵌入式课E的产品案例?{我们的WinCE评开得有声有色后Q希望能从微软研I搞些Smartphone来开发开?。有OS的手机果然了得,金山词霸、WORD、EXCEL、REGEDIT{居焉有smartphone版的QPC上的MP3、DOC{居然在download旉可被自动转换成smartphone格式Q真是爽。完全可用Windows CE自己开发一些需要的E序download到自q手机上。现在市面销售PDA手机火爆QMSL财源滚滚。但我已发现国的ARMLINUX手机出现在市面上Qh(hun)格只1.2K?</p> <p>在GOOGLE|上能搜索太多的关于嵌入式系l的讨论了,我刚发现一个http:www.embyte.com 非常不错Q有很多有经验者谈自己的体会投入到其中的论坛中Q你会切w感到嵌入式学习的热潮?</p> <p>要么走ARMWinCEQ要么走ARMLINUXQ要么走ARMVXWORKS。每个搞嵌入式的人都可选一条\Q条条大路通罗马?/p> <p>三、关于游戏Y件方?</p> <p>游戏Y件h才称为数字媒体Y件h才可能更好听些,包括游戏软g{划(最~游戏策划的?、游戏Y件美术设计、游戏Y件程序设计等多方面的人才Q对软g学院Q游戏Y件程序设计当然是最合适的了?</p> <p>游戏软g人才的确目前很缺Q听说很多游戏Y件公司苦于没Ch才补充,特别是没有高手补充,不得不相互挖人才Q以臛_游戏软g人才wh(hun)抬高。网上说日本教育部刚刚批准成立了日本W一家专门培dq制游戏软g人才的本U大学。其实国内很多大学,特别是Y件学院都有搞游戏软g人才的设惻I但目前很有做成的,主要原因是找不到能上游戏软g评教师Q听说有个学校只能花很大的h(hun)׃Korea找老师来上课,果真~到此等地步 </p> <p>已有很多青少q沉湎于|游而颓废的实例Q好在还不至于上升到刉精鸦片的高度Q所以开发游戏Y件的Z不必每日惭?zhn)?但开发儿童益智类游戏软g的h是不需惭?zhn)?Q如果想惌是ؓ发展民族软g产业做A献,那反倒是一件有意义的事情了。不q听一家游戏Y件公司的老板Ԍ搞游戏Y件开发是非常辛苦的?</p> <p>若想自己创业Q搞搞游戏Y件是不错的主意。现在网上网站或公司都在收购游戏软g(特别是手机游戏YӞ因ؓ手机游戏用户可选从|站上download到手ZQ不像网渔R么复?Q按downloadơ数分成或一ơ性收购的都有。我们的同学在校期间是否也可发点胦搞得好,说不定可卖到国外|站Q直接挣$$$呢?</p> <p>大致游戏分成以下几类: </p> <p>(1) PCcL戏,包括单机和网游。这cL戏开发^台基本上都是ZVC和DitrectX(如DirectShowQDirectDrawQD3D{,DirectX资料可直接到MS|站上查)。DirectX和OpenGL是两个主要的囑Ş标准QOpenGL跨^?Unix/Windows上都可跑)Q尽很多搞研究的h对OpenGL赞不l口Q将DirectX骂得一文不|但事实是Q在Windowsq_上,DirectX是最快最方便的,所以在Windowsq_上的游戏q是DirectX当家?</p> <p>(2) 手机游戏:目前手机游戏主要开发^台有两类: </p> <p>W一cL机游戏是 J2ME q_(Java 2 Micro Edition)QJ2ME本是为嵌入式q_设计的JavaQ但׃Java生来需要Java虚拟?JVM)来解释,所以在嵌入式品很用J2ME(太慢太耗内?。但在手机游戏中J2ME倒有用武之地Q我惌可能主要是Java可跨OSq_的原因,因ؓ手机的OS是千奇百怪的。我对J2ME完全外行Q但上次听Square Enix 公司的h_J2ME与我们同学学q的J2EEq是有较大差别的。据我所知,目前手机中用的较多的是KJava语言QKJava是运行在一U叫K Java Virtual Machine的解释器?K JVM是SUN早期为演CJ2ME在嵌入式pȝ应用而开发的一个虚拟机)Q所以将在K JVM上运行的J2ME叫KJava。尽SUN说今后不保证支持K JVMQ将开发新的更高性能的J2ME虚拟机取而代之,但由于KJava出现较早Q很多早期的手机游戏软g都将K JVM假想成J2ME虚拟机的标准了,所以目前有大量的KJava手机游戏软g存在Q而且q在用KJaval箋开发。特别是日本的手机游戏Y件由于开发较?像叫什么docomi的日本最大的?sh)信q营商手机游戏搞得很?Q多是基于KJava的。所以目前市Z在招聘手机游戏Y件h才时Q很多要求掌握KJava。有关J2ME请到Sun的网站上找资料?</p> <p>另一cL机游戏是 BREW q_QBREW是美国高通公?QualcommQCDMA核心技术都是该公司开发的Q有无数Ud通信技术专?发明的,据说可编译成二进制代码,那当然快了。主要的开发语a是C/C。但q于被指责ؓ较封闭的压力Q目前Qualcomm已推出BREWq_上的J2ME虚拟?但可惛_那将是怎样慢的速度)。Qualcomm搞定了很多手机制造商{֮BREW授权许可协议Q最狠的是Qualcomm与中国联通绑在一起大堆基于BREW的手机游戏,所以有些公司招聘时要求掌握BREW也就不奇怪了?</p> <p>d00U?2班毕业答辩时Q有一位同学讲的是在公司做的KJava游戏(那是一家日本游戏Y件公?Q还一位同学讲的是另一家公司做的BREW游戏Q看来不同的公司有不同的选择。将来谁会更火,我估计随着手机g资源的不断提高,不会在乎一个JVM的开销QJ2ME应更有前途,毕竟它是更开攄?</p> <p>(3) 专用游戏?如电(sh)视游戏,XBOXQPS2{?</p> <p>从著名游戏公司发来的对网游和手机游戏的h才需求,很有代表性。从中我们可看出Q游戏公司对人才的需求主要是以下技? </p> <p>(1) 计算机图形学Q特别是3D~程与算法,包括DirectX ?OpenGL。开发^台是 VC/DIRECTX ?KJAVA?</p> <p>(2) 公司_手机游戏因手源有限,必须对图像进行压~,所以若有一些图像压~算法知识比较好。像若能有MPEG压羃法较好Q手Z采用的是比MPEG压羃得更狠的一些特D算法,但触cL通?</p> <p>(3) TCP/IP Socket~程是搞|游开发的人必L握的?</p> <p>(4) 人工知识:复杂游戏可能需要一些AI法?</p> <p>(5) |络与信息安全知? |游要防外挂?</p> <p>一般游戏公司的|游服务器是Z Linux q_的,所以还提出了对游戏服务器端软g工程师的技术需?_NMSSQL、ORACLE、MYSQL{数据库Q精通Linux ProgrammingQ特别是Socket~程)。还有对l护游戏、网站h才需?ASP.NET和数据库)。注意一条,最好有自己的游戏Y件作品,若?zhn)应聘时能带一?DirectX 作品Q那有多强的竞争力Q所以最重要的是现在p行动Q实践,实践Q再实践?/p> <img src ="http://www.shnenglu.com/threesh/aggbug/15264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/threesh/" target="_blank">Cpp Fans</a> 2006-11-16 22:26 <a href="http://www.shnenglu.com/threesh/archive/2006/11/16/15264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Oracle的入门心?/title><link>http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html</link><dc:creator>Cpp Fans</dc:creator><author>Cpp Fans</author><pubDate>Tue, 07 Nov 2006 01:59:00 GMT</pubDate><guid>http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html</guid><wfw:comment>http://www.shnenglu.com/threesh/comments/14766.html</wfw:comment><comments>http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/threesh/comments/commentRss/14766.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/threesh/services/trackbacks/14766.html</trackback:ping><description><![CDATA[        Oracle的体pd庞大了,对于初学者来_隑օ会有些无从下手的感觉Q什么都惛_Q结果什么都学不好,所以把学习l验׃n一下,希望让刚刚入门的人对Oracle有一个M的认识,走一些弯路? <p><strong>        一、定?/strong></p><p>        Oracle分两大块Q一块是开发,一块是理。开发主要是写写存储q程、触发器什么的Q还有就是用Oracle的Develop工具做form。有点类gE序员,需要有较强的逻辑思维和创造能力,个h觉得会比较辛苦,是青春饭Q管理则需要对Oracle数据库的原理有深ȝ认识Q有全局操纵的能力和紧密的思维Q责任较大,因ؓ一个小的失误就会down掉整个数据库Q相对前者来_后者更看重l验?</p><p>        因ؓ数据库管理的责Q重大Q很公司愿意请一个刚刚接触Oracle的hȝ理数据库。对于刚刚毕业的q轻人来_可以先选择做开发,有一定经验后转型Q去做数据库的管理。当Ӟq个q是要看Z的实际情冉|定?/p><p><strong>       二、学习方?/strong></p><p>       我的Ҏ(gu)很简单,是Q看书、思考、写W记、做实验、再思考、再写笔记?/p><p>        看完理论的东西,自己静下心来xQ多问自己几个ؓ什么,然后把所学和所想的知识点做个笔讎ͼ在想不通或有疑问的时候,做做实验,x怎么会这P同样的,把实验的l果C来。思考和做实验是Z深入的了解这个知识点。而做W记的过E,也是理清自己思\的过E?</p><p>        学习的过E是使一个问题由模糊到清晎ͼ再由清晰到模p的q程。而每ơ的改变都代表着你又学到了一个新的知识点?</p><p>        学习的过E也是从点到U,从线到网Q从|到面的q程。当点变成线的时候,你会有总豁然开朗的感觉。当|到面的时候,你就是高手了?/p><p>         很多|友Q特别是初学的hQ一到问题拿到论坛上来问Q在问前Q你有没有查q书Q自己有没有研究q,有没有搜索一下论坛?q就叫思维惰性。由别h来回{你的问题,会让你在短时间内不费劲地弄懂q个知识点,然而通过自己的努力去研究它,不但会更深入的了解这个知识点Q更重要的是在研I的q程会提高你解决问题和分析问题的能力。ȝ来说Q没有钻研的学习态度Q不学什么东西,都不会成功的?</p><p>        当然Q初学的人很多时候是因ؓ遇到问题Ӟ无从下手Q也不知道去哪里找资料,才会到论坛上提问题的。但我认为,在提问的时候,是不是可以问别h是如何分析这个问题?从哪里可以找到相关的资料Q而不是这个问题的{案是什么?授h以鱼不如授h以渔?/p><p>        下面我讲下我处理问题的过E?/p><p>        首先要知道Oracle的官方网站:www.oracle.com q里有Oracle的各U版本的数据库、应用工具和权威的官Ҏ(gu)档。其ơ,q要知道http://metalink.oracle.com/q里是买了Oracle服务或是oracle的合作伙伴才可以q去的,里面有很多权威的解决Ҏ(gu)和补丁。然后就是一些著名网站:asktom.oracle.com www.orafaq.net, www.dbazine.com。这里有很多l验之谈?/p><p>        遇到问题了。如果是概念上的问题Q第一旉可以找tahiti.oracle.comQ这里会l你最详细的解释。如果在q行的过E中Z什么错误。可以去metalink看看。如果是想知道事务的处理的经验之谈。可以去asktom。当然。这里只是相对而言?/p><p><strong>       三、Oracle的体p?/strong><br />        Oracle的体pd庞大Q要学习它,首先要了解Oracle的框架。在q里Q简要的讲一下Oracle的架构,让初学者对Oracle有一个整体的认识?/p><p>     1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成) </p><p>        控制文gQ包含维护和验证数据库完整性的必要信息、例如,控制文g用于识别数据文g和重做日志文Ӟ一个数据库臛_需要一个控制文?</p><p>        数据文gQ存储数据的文g.</p><p>        重做日志文gQ含Ҏ(gu)据库所做的更改记录Q这样万一出现故障可以启用数据恢复。一个数据库臛_需要两个重做日志文?</p><p>        参数文gQ定义Oracle例程的特性,例如它包含调整SGA中一些内存结构大的参数.</p><p>        归档文gQ是重做日志文g的脱机副本,q些副本可能对于从介质失败中q行恢复很必要?</p><p>       密码文gQ认证哪些用h权限启动和关闭Oracle例程.</p><p><br />        2、逻辑l构Q表I间、段、区、块Q?/p><p>        表空_是数据库中的基本逻辑l构Q一pd数据文g的集合?br />        D:是对象在数据库中占用的空?<br />        区:是ؓ数据一ơ性预留的一个较大的存储I间.<br />        块:ORACLE最基本的存储单位,在徏立数据库的时候指?</p><p><br />       3、内存分配(SGA和PGAQ?/p><p>        SGAQ是用于存储数据库信息的内存区,该信息ؓ数据库进E所׃n。它包含Oracle 服务器的数据和控制信?它是在Oracle服务器所ȝ的计机的实际内存中得以分配Q如果实际内存不够再往虚拟内存中写?</p><p>        PGAQ包含单个服务器q程或单个后台进E的数据和控制信息,与几个进E共享的SGA 正相反PGA 是只被一个进E用的区域QPGA 在创E时分配在终止进E时回收.</p><p>        4、后台进E(数据写进E、日志写q程、系l监控、进E监控、检查点q程、归档进E、服务进E、用戯E)</p><p>        数据写进E:负责更改的数据从数据库~冲区高速缓存写入数据文?<br />        日志写进E:重做日志缓冲区中的更改写入在线重做日志文g <br />        pȝ监控Q检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢?br />        q程监控Q负责在一个Oracle q程p|时清理资?<br />        查点q程Q负责在每当~冲区高速缓存中的更Ҏ(gu)久地记录在数据库中时,更新控制文g和数据文件中的数据库状态信息?<br />       归档q程Q在每次日志切换时把已满的日志组q行备䆾或归?<br />       服务q程Q用戯E服务?<br />       用户q程Q在客户端,负责用LSQL语句传递给服务q程Qƈ从服务器D|回查询数据?</p><p>        5、Oracle例程QOracle例程由SGA内存l构和用于管理数据库的后台进E组成。例E一ơ只能打开和用一个数据库?</p><p>        6、SCN(System ChangeNumber)Q系l改变号Q一个由pȝ内部l护的序列号。当pȝ需要更新的时候自动增加,他是pȝ中维持数据的一致性和序恢复的重要标志?/p><p><strong>       四、深入学?</strong></p><p>        理Q可以考OCP证书Q对Oracle先有一个系l的学习Q然后看Oracle Concepts、Oracle online document,对oracle的原理会有更深入的了解,同时可以开始进行一些专题的研究如:RMAN、RAS、STATSPACT、DATAGUARD、TUNING、BACKUP&RECOVER{等?/p><p>        开发:对于惛_Oracle开发的Q在了解完Oracle基本的体pȝ构之后,可以重点xPL/SQL及Oracle的开发工兯一部分。PL/SQL主要是包括怎么写SQL语句Q怎么使用Oracle本n的函敎ͼ怎么写存储过E、存储函数、触发器{?Oracle的开发工具主要就是Oracle自己的Developer SuiteQOracle Forms Developer and Reports Developerq些Q,学会如何熟练使用q些工具?br /></p><p><br /></p><img src ="http://www.shnenglu.com/threesh/aggbug/14766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/threesh/" target="_blank">Cpp Fans</a> 2006-11-07 09:59 <a href="http://www.shnenglu.com/threesh/archive/2006/11/07/14766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[轉]C语言E序设计基础之文?/title><link>http://www.shnenglu.com/threesh/archive/2006/10/27/14273.html</link><dc:creator>Cpp Fans</dc:creator><author>Cpp Fans</author><pubDate>Fri, 27 Oct 2006 03:03:00 GMT</pubDate><guid>http://www.shnenglu.com/threesh/archive/2006/10/27/14273.html</guid><wfw:comment>http://www.shnenglu.com/threesh/comments/14273.html</wfw:comment><comments>http://www.shnenglu.com/threesh/archive/2006/10/27/14273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/threesh/comments/commentRss/14273.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/threesh/services/trackbacks/14273.html</trackback:ping><description><![CDATA[ <font size="2"> 所谓“文件”是指一l相x据的有序集合?q个数据集有一个名Uͼ叫做文g名?实际上在前面的各章中我们已经多次使用了文Ӟ例如源程序文件、目标文件、可执行文g、库文g (头文?{。文仉常是驻留在外部介质(如磁盘等)上的Q?在用时才调入内存中来。从不同的角度可Ҏ(gu)件作不同的分cR从用户的角度看Q文件可分ؓ普通文件和讑֤文g两种?<br /><br />  普通文件是指驻留在盘或其它外部介质上的一个有序数据集Q可以是源文件、目标文件、可执行E序Q?也可以是一l待输入处理的原始数据,或者是一l输出的l果。对于源文g、目标文件?可执行程序可以称作程序文Ӟ对输入输出数据可UC数据文g?br /><br />  讑֤文g是指与主机相联的各种外部讑֤Q如昄器、打印机、键盘等。在操作pȝ中,把外部设备也看作是一个文件来q行理Q把它们的输入、输出等同于对磁盘文件的d写?通常把显C器定义为标准输出文Ӟ 一般情况下在屏q上昄有关信息是向标准输出文件输出。如前面l常使用的printf,putchar 函数是q类输出。键盘通常被指定标准的输入文gQ?从键盘上输入意味着从标准输入文件上输入数据。scanf,getchar函数属于这c输入?<br /><br />  从文件编码的方式来看Q文件可分ؓASCII码文件和二进制码文g两种?br /><br />  ASCII文g也称为文本文Ӟq种文g在磁盘中存放时每个字W对应一个字节,用于存放对应的ASCII码。例如,?678的存储Ş式ؓQ?br />ASC码:  00110101 00110110 00110111 00111000<br />     ?    ↓    ?   ?br />十进制码Q?5     6    7    8 共占?个字节。ASCII码文件可在屏q上按字W显C, 例如源程序文件就是ASCII文gQ用DOS命oTYPE可显C文件的内容?׃是按字符昄Q因此能L文g内容?br /><br />  二进制文件是按二q制的编码方式来存放文g的?例如Q??678的存储Ş式ؓQ?00010110 00101110只占二个字节。二q制文g虽然也可在屏q上昄Q?但其内容无法L。Cpȝ在处理这些文件时Qƈ不区分类型,都看成是字符,按字节进行处理?输入输出字符的开始和l束只由E序控制而不受物理符?如回车符)的控制?因此也把q种文gUC“流式文件”?br /><br />  本章讨论式文g的打开、关闭、读、写?定位{各U操作。文件指针在C语言中用一个指针变量指向一个文Ӟ q个指针UCؓ文g指针。通过文g指针可对它所指的文gq行各种操作?定义说明文g指针的一般Ş式ؓQ?FILE* 指针变量标识W; 其中FILE应ؓ大写Q它实际上是ql定义的一个结构, 该结构中含有文g名、文件状态和文g当前位置{信息?在编写源E序时不必关心FILEl构的细节。例如:FILE *fpQ?表示fp是指向FILEl构的指针变量,通过fp 卛_扑֭放某个文件信息的l构变量Q然后按l构变量提供的信息找到该文gQ?实施Ҏ(gu)件的操作。习惯上也笼l地把fpUCؓ指向一个文件的指针。文件的打开与关闭文件在q行d操作之前要先打开Q用完毕要关闭?所谓打开文gQ实际上是徏立文件的各种有关信息Q?q文g指针指向该文Ӟ以便q行其它操作。关闭文件则断开指针与文件之间的联系Q也q止再对该文gq行操作?br /><br />  在C语言中,文g操作都是由库函数来完成的?在本章内介l主要的文g操作函数?br /><br />  文g打开函数fopen<br /><br />  fopen函数用来打开一个文Ӟ其调用的一般Ş式ؓQ?文g指针?fopen(文g名,使用文g方式) 其中Q“文件指针名”必L被说明ؓFILE cd的指针变量,“文件名”是被打开文g的文件名?“用文件方式”是指文件的cd和操作要求。“文件名”是字符串常量或字符串数l。例如: <br /><br /></font> <table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"> <tbody> <tr> <td>FILE *fpQ?br />fp=("file a","r");</td> </tr> </tbody> </table> <br />  其意义是在当前目录下打开文gfile aQ?只允许进行“读”操作,qfp指向该文件?br /><br />  又如Q?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>FILE *fphzk<br />fphzk=("c:\\hzk16',"rb")</td></tr></tbody></table><br />  其意义是打开C驱动器磁盘的根目录下的文件hzk16Q?q是一个二q制文gQ只允许按二q制方式q行L作。两个反斜线“\\ ”中的第一个表C{义字W,W二个表C根目录。用文件的方式共有12U,下面l出了它们的W号和意义?<br /><br />文g使用方式        ??br />“rt”      只读打开一个文本文Ӟ只允许读数据 <br />“wt”      只写打开或徏立一个文本文Ӟ只允许写数据<br />“at”      q加打开一个文本文Ӟq在文g末尾写数?br />“rb”      只读打开一个二q制文gQ只允许L?br />“wb”       只写打开或徏立一个二q制文gQ只允许写数?br />“ab?      q加打开一个二q制文gQƈ在文件末ֆ数据<br />“rt+”      d打开一个文本文Ӟ允许d?br />“wt+”      d打开或徏立一个文本文Ӟ允许d<br />“at+”      d打开一个文本文Ӟ允许读,或在文g末追加数 ?br />“rb+”      d打开一个二q制文gQ允许读和写 <br />“wb+”      d打开或徏立一个二q制文gQ允许读和写<br />“ab+?     d打开一个二q制文gQ允许读Q或在文件末q加数据<br /><br />  对于文g使用方式有以下几点说明:<br /><br />  1. 文g使用方式由r,w,a,t,bQ?六个字符拼成Q各字符的含义是Q?br /><br />  r(read): ?br />  w(write): ?br />  a(append): q加<br />  t(text): 文本文gQ可省略不写<br />  b(banary): 二进制文?br />  +: d?br /><br />  2. 凡用“r”打开一个文件时Q该文g必须已经存在Q?且只能从该文件读出?br /><br />  3. 用“w”打开的文件只能向该文件写入?若打开的文件不存在Q则以指定的文g名徏立该文gQ若打开的文件已l存在,则将该文件删去,重徏一个新文g?br /><br />  4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文g。但此时该文件必L存在的,否则会出错?br /><br />  5. 在打开一个文件时Q如果出错,fopen返回一个空指针值NULL。在E序中可以用q一信息来判别是否完成打开文g的工作,q作相应的处理。因此常用以下程序段打开文gQ?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>if((fp=fopen("c:\\hzk16","rb")==NULL)<br />{<br />printf("\nerror on open c:\\hzk16 file!");<br />getch();<br />exit(1);<br />}</td></tr></tbody></table><br />  q段E序的意义是Q如果返回的指针为空Q表CZ能打开C盘根目录下的hzk16文gQ则l出提示信息“error on open c:\ hzk16file!”,下一行getch()的功能是从键盘输入一个字W,但不在屏q上昄。在q里Q该行的作用是等待, 只有当用户从键盘敲Q一键时Q程序才l箋执行Q?因此用户可利用这个等待时间阅d错提C。敲键后执行exit(1)退出程序?br /><br />  6. 把一个文本文件读入内存时Q要ASCII码{换成二进制码Q?而把文g以文本方式写入磁盘时Q也要把二进制码转换成ASCII码,因此文本文g的读写要p较多的{换时间。对二进制文件的d不存在这U{换?br /><br />  7. 标准输入文g(键盘)Q标准输出文?昄?)Q标准出错输?出错信息)是由pȝ打开的,可直接用。文件关闭函敎ͽClose文g一旦用完毕,应用关闭文g函数把文件关闭, 以避免文件的数据丢失{错误?br /><br />  fclose函数<br /><br />  调用的一般Ş式是Q?fclose(文g指针)Q?例如Q?br /><br />  fclose(fp); 正常完成关闭文g操作Ӟfclose函数q回gؓ0。如q回非零值则表示有错误发生。文件的dҎ(gu)件的d写是最常用的文件操作?<br /><br />  在C语言中提供了多种文gd的函敎ͼ <br /><br />  ·字符d函数 Qfgetc和fputc<br /><br />  ·字符串读写函敎ͼfgets和fputs<br /><br />  ·数据块读写函敎ͼfreed和fwrite<br /><br />  ·格式化读写函敎ͼfscanf和fprinf<br /><br />  下面分别予以介绍。用以上函数都要求包含头文件stdio.h。字W读写函敎ͽgetC和fputC字符d函数是以字符(字节)为单位的d函数?每次可从文gd或向文g写入一个字W?br /><br /><p></p>  <strong>一、读字符函数fgetc</strong><br /><br />  fgetc函数的功能是从指定的文g中读一个字W,函数调用的Ş式ؓQ?字符变量=fgetc(文g指针)Q?例如Qch=fgetc(fp);其意义是从打开的文件fp中读取一个字Wƈ送入ch中?br /><br />  对于fgetc函数的用有以下几点说明Q?br /><br />  1. 在fgetc函数调用中,d的文件必L以读或读写方式打开的?br /><br />  2. d字符的结果也可以不向字符变量赋|例如Qfgetc(fp);但是d的字W不能保存?br /><br />  3. 在文件内部有一个位|指针。用来指向文件的当前d字节。在文g打开Ӟ该指针L指向文g的第一个字节。用fgetc 函数后, 该位|指针将向后Ud一个字节?因此可连l多ơ用fgetc函数Q读取多个字W?应注意文件指针和文g内部的位|指针不是一回事。文件指针是指向整个文g的,dE序中定义说明,只要不重新赋|文g指针的值是不变的。文件内部的位置指针用以指示文g内部的当前读写位|,每读写一ơ,该指针均向后UdQ它不需在程序中定义说明Q而是ql自动设|的?br /><br />  [?0.1]d文ge10-1.cQ在屏幕上输出?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />main()<br />{<br />FILE *fp;<br />char ch;<br />if((fp=fopen("e10_1.c","rt"))==NULL)<br />{<br />printf("Cannot open file strike any key exit!");<br />getch();<br />exit(1);<br />}<br />ch=fgetc(fp);<br />while (ch!=EOF)<br />{<br />putchar(ch);<br />ch=fgetc(fp);<br />}<br />fclose(fp);<br />}</td></tr></tbody></table><br />  本例E序的功能是从文件中逐个d字符Q在屏幕上显C?E序定义了文件指针fp,以读文本文g方式打开文g“e10_1.c”, qfp指向该文件。如打开文g出错Q?l出提示q出程序。程序第12行先d一个字W,然后q入循环Q?只要d的字W不是文件结束标?每个文g末有一l束标志EOF)把该字W显C在屏幕上,再读入下一字符。每Mơ,文g内部的位|指针向后移动一个字W,文gl束Ӟ该指针指向EOF。执行本E序显C整个文件?br /><br />  <strong>二、写字符函数fputc</strong><br /><br />  fputc函数的功能是把一个字W写入指定的文g中,函数调用?形式为: fputc(字符量,文g指针)Q?其中Q待写入的字W量可以是字W常量或变量Q例如:fputc('a',fp);其意义是把字Wa写入fp所指向的文件中?br /><br />  对于fputc函数的用也要说明几点:<br /><br />  1. 被写入的文g可以用、写、读写,q加方式打开Q用写或d方式打开一个已存在的文件时清除原有的文g内容Q写入字W从文g首开始。如需保留原有文g内容Q希望写入的字符以文件末开始存放,必须以追加方式打开文g。被写入的文件若不存在,则创文g?br /><br />  2. 每写入一个字W,文g内部位置指针向后Ud一个字节?br /><br />  3. fputc函数有一个返回|如写入成功则q回写入的字W, 否则q回一个EOF。可用此来判断写入是否成功?br /><br />  [?0.2]从键盘输入一行字W,写入一个文Ӟ 再把该文件内容读出显C在屏幕上?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />main()<br />{<br />FILE *fp;<br />char ch;<br />if((fp=fopen("string","wt+"))==NULL)<br />{<br />printf("Cannot open file strike any key exit!");<br />getch();<br />exit(1);<br />}<br />printf("input a string:\n");<br />ch=getchar();<br />while (ch!='\n')<br />{<br />fputc(ch,fp);<br />ch=getchar();<br />}<br />rewind(fp);<br />ch=fgetc(fp);<br />while(ch!=EOF)<br />{<br />putchar(ch);<br />ch=fgetc(fp);<br />}<br />printf("\n");<br />fclose(fp);<br />}</td></tr></tbody></table><br />  E序中第6行以d文本文g方式打开文gstring。程序第13行从键盘d一个字W后q入循环Q当d字符不ؓ回RW时Q?则把该字W写入文件之中,然后l箋从键盘读入下一字符?每输入一个字W,文g内部位置指针向后Ud一个字节。写入完毕, 该指针已指向文g末。如要把文g从头dQ须把指针移向文件头Q?E序W?9行rewind函数用于把fp所指文件的内部位置指针Ud文g头?W?0?5行用于读出文件中的一行内宏V?br /><br />  [?0.3]把命令行参数中的前一个文件名标识的文Ӟ 复制到后一个文件名标识的文件中Q?如命令行中只有一个文件名则把该文件写到标准输出文?昄?中?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />main(int argc,char *argv[])<br />{<br />FILE *fp1,*fp2;<br />char ch;<br />if(argc==1)<br />{<br />printf("have not enter file name strike any key exit");<br />getch();<br />exit(0);<br />}<br />if((fp1=fopen(argv[1],"rt"))==NULL)<br />{<br />printf("Cannot open %s\n",argv[1]);<br />getch();<br />exit(1);<br />}<br />if(argc==2) fp2=stdout;<br />else if((fp2=fopen(argv[2],"wt+"))==NULL)<br />{<br />printf("Cannot open %s\n",argv[1]);<br />getch();<br />exit(1);<br />}<br />while((ch=fgetc(fp1))!=EOF)<br />fputc(ch,fp2);<br />fclose(fp1);<br />fclose(fp2);<br />}</td></tr></tbody></table><br />  本程序ؓ带参的main函数。程序中定义了两个文件指?fp1 和fp2Q分别指向命令行参数中给出的文g。如命o行参C没有l出文g名,则给出提CZ息。程序第18行表C如果只l出一个文件名Q则使fp2指向标准输出文g(xC器)。程序第25行至28行用循环语句逐个d文g1中的字符再送到文g2中。再ơ运行时Q给Z一个文件名(׃10.2所建立的文?Q?故输出给标准输出文gstdoutQ即在显C器上显C文件内宏V第三次q行Q给Z二个文g名,因此把string中的内容dQ写入到OK之中。可用DOS命otype昄OK的内容:<br /><br /><p></p>  <strong>字符串读写函数fgets和fputs</strong><br /><br />  一、读字符串函数fgets函数的功能是从指定的文g中读一个字W串到字W数l中Q函数调用的形式为: fgets(字符数组名,nQ文件指?Q?其中的n是一个正整数。表CZ文g中读出的字符串不过 n-1个字W。在d的最后一个字W后加上串结束标?\0'。例如:fgets(str,n,fp);的意义是从fp所指的文g中读出n-1个字W送入字符数组str中?br /><br />  [?0.4]从e10_1.c文g中读入一个含10个字W的字符丌Ӏ?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />main()<br />{<br />FILE *fp;<br />char str[11];<br />if((fp=fopen("e10_1.c","rt"))==NULL)<br />{<br />printf("Cannot open file strike any key exit!");<br />getch();<br />exit(1);<br />}<br />fgets(str,11,fp);<br />printf("%s",str);<br />fclose(fp);<br />}</td></tr></tbody></table><br />  本例定义了一个字W数lstr?1个字节,在以L本文件方式打开文ge101.c后,从中d10个字W送入str数组Q在数组最后一个单元内加?\0'Q然后在屏幕上显C出str数组。输出的十个字符正是?0.1E序的前十个字符?br /><br />  对fgets函数有两点说明:<br /><br />  1. 在读出n-1个字W之前,如遇C换行W或EOFQ则dl束?br /><br />  2. fgets函数也有q回|其返回值是字符数组的首地址?br /><br />  二、写字符串函数fputs<br /><br />  fputs函数的功能是向指定的文g写入一个字W串Q其调用形式为: fputs(字符Ԍ文g指针) 其中字符串可以是字符串常量,也可以是字符数组名, 或指?变量Q例如:<br /><br />fputs(“abcd“,fp)Q?br /><br />  其意义是把字W串“abcd”写入fp所指的文g之中。[?0.5]在例10.2中徏立的文gstring中追加一个字W串?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />main()<br />{<br />FILE *fp;<br />char ch,st[20];<br />if((fp=fopen("string","at+"))==NULL)<br />{<br />printf("Cannot open file strike any key exit!");<br />getch();<br />exit(1);<br />}<br />printf("input a string:\n");<br />scanf("%s",st);<br />fputs(st,fp);<br />rewind(fp);<br />ch=fgetc(fp);<br />while(ch!=EOF)<br />{<br />putchar(ch);<br />ch=fgetc(fp);<br />}<br />printf("\n");<br />fclose(fp);<br />}</td></tr></tbody></table><br />  本例要求在string文g末加写字W串Q因此,在程序第6行以q加d文本文g的方式打开文gstring ?然后输入字符Ԍ q用fputs函数把该串写入文件string。在E序15行用rewind函数把文件内部位|指针移到文仉?再进入@环逐个昄当前文g中的全部内容?br /><br /><p></p>  <strong>数据块读写函数fread和fwrite</strong><br /><br />  C语言q提供了用于整块数据的读写函数?可用来读写一l数据,如一个数l元素,一个结构变量的值等。读数据块函数调用的一般Ş式ؓQ?fread(buffer,size,count,fp); 写数据块函数调用的一般Ş式ؓQ?fwrite(buffer,size,count,fp); 其中buffer是一个指针,在fread函数中,它表C存放输入数据的首地址。在fwrite函数中,它表C存放输出数据的首地址?size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文g指针?br /><br />  例如Q?br /><br />fread(fa,4,5,fp); 其意义是从fp所指的文g中,每次?个字?一个实?送入实数lfa中,q箋?ơ,卌5个实数到fa中?br /><br />  [?0.6]从键盘输入两个学生数据,写入一个文件中Q?再读两个学生的数据显C在屏幕上?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />struct stu<br />{<br />char name[10];<br />int num;<br />int age;<br />char addr[15];<br />}boya[2],boyb[2],*pp,*qq;<br />main()<br />{<br />FILE *fp;<br />char ch;<br />int i;<br />pp=boya;<br />qq=boyb;<br />if((fp=fopen("stu_list","wb+"))==NULL)<br />{<br />printf("Cannot open file strike any key exit!");<br />getch();<br />exit(1);<br />}<br />printf("\ninput data\n");<br />for(i=0;i<2;i++,pp++)<br />scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);<br />pp=boya;<br />fwrite(pp,sizeof(struct stu),2,fp);<br />rewind(fp);<br />fread(qq,sizeof(struct stu),2,fp);<br />printf("\n\nname\tnumber age addr\n");<br />for(i=0;i<2;i++,qq++)<br />printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);<br />fclose(fp);<br />}</td></tr></tbody></table><br />  本例E序定义了一个结构stu,说明了两个结构数lboya?boyb以及两个l构指针变量pp和qq。pp指向boya,qq指向boyb。程序第16行以d方式打开二进制文件“stu_list”,输入二个学生数据之后Q写入该文g中, 然后把文件内部位|指针移到文仉Q读Z块学生数据后Q在屏幕上显C?br /><br /><p></p>  <strong>格式化读写函数fscanf和fprintf</strong><br /><br />  fscanf函数Qfprintf函数与前面用的scanf和printf 函数的功能相|都是格式化读写函数?两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和昄器,而是盘文g。这两个函数的调用格式ؓQ?fscanf(文g指针Q格式字W串Q输入表?Q?fprintf(文g指针Q格式字W串Q输?Q?例如Q?br /><br />  fscanf(fp,"%d%s",&i,s);<br />  fprintf(fp,"%d%c",j,ch); <br /><br />  用fscanf和fprintf函数也可以完成例10.6的问题。修改后的程序如?0.7所C?br /><br />  [?0.7]<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />struct stu<br />{<br />char name[10];<br />int num;<br />int age;<br />char addr[15];<br />}boya[2],boyb[2],*pp,*qq;<br />main()<br />{<br />FILE *fp;<br />char ch;<br />int i;<br />pp=boya;<br />qq=boyb;<br />if((fp=fopen("stu_list","wb+"))==NULL)<br />{<br />printf("Cannot open file strike any key exit!");<br />getch();<br />exit(1);<br />}<br />printf("\ninput data\n");<br />for(i=0;i<2;i++,pp++)<br />scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);<br />pp=boya;<br />for(i=0;i<2;i++,pp++)<br />fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp-><br />addr);<br />rewind(fp);<br />for(i=0;i<2;i++,qq++)<br />fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr);<br />printf("\n\nname\tnumber age addr\n");<br />qq=boyb;<br />for(i=0;i<2;i++,qq++)<br />printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age,<br />qq->addr);<br />fclose(fp);<br />}</td></tr></tbody></table><br />  与例10.6相比Q本E序中fscanf和fprintf函数每次只能d一个结构数l元素,因此采用了@环语句来d全部数组元素?q要注意指针变量pp,qq׃循环改变了它们的|因此在程序的25?2行分别对它们重新赋予了数l的首地址?br /><br />  文g的随?br /><br />  前面介绍的对文g的读写方式都是顺序读写, 卌写文件只能从头开始,序d各个数据?但在实际问题中常要求只读写文件中某一指定的部分?Z解决q个问题可移动文件内部的位置指针到需要读写的位置Q再q行dQ这U读写称为随写?实现随机d的关键是要按要求Ud位置指针Q这UCؓ文g的定位。文件定位移动文件内部位|指针的函数主要有两个, ?rewind 函数和fseek函数?br /><br />  rewind函数前面已多ơ用过Q其调用形式为: rewind(文g指针)Q?它的功能是把文g内部的位|指针移到文仉?下面主要介绍<br />fseek函数?br /><br />  fseek函数用来Ud文g内部位置指针Q其调用形式为: fseek(文g指针Q位U量Qv始点)Q?其中Q“文件指针”指向被Ud的文件?“位U量”表C移动的字节敎ͼ要求位移量是long型数据,以便在文仉度大?4KB 时不会出错。当用常量表CZU量Ӟ要求加后~“L”。“v始点”表CZ何处开始计位U量Q规定的起始Ҏ(gu)三种Q文仉Q当前位|和文g?br /><br />  其表C方法如?0.2?<br /><br />起始?   表示W号    数字表示<br />──────────────────────────<br />文g?   SEEK—SET    0<br />当前位置   SEEK—CUR    1<br />文g末尾   SEEK—END     2<br /><br />  例如Q?br /><br />  fseek(fp,100L,0);其意义是把位|指针移到离文g?00个字节处。还要说明的是fseek函数一般用于二q制文g。在文本文g中由于要q行转换Q故往往计算的位|会出现错误。文件的随机d在移动位|指针之后, 卛_用前面介l的MU读写函数进行读写。由于一般是d一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机d?br /><br />  [?0.8]在学生文件stu list中读出第二个学生的数据?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#e6e4dd" border="1"><tbody><tr><td>#include<stdio.h><br />struct stu<br />{<br /> char name[10];<br /> int num;<br /> int age;<br /> char addr[15];<br />}boy,*qq;<br />main()<br />{<br /> FILE *fp;<br /> char ch;<br /> int i=1;<br /> qq=&boy;<br /> if((fp=fopen("stu_list","rb"))==NULL)<br /> {<br />  printf("Cannot open file strike any key exit!");<br />  getch();<br />  exit(1);<br /> }<br /> rewind(fp);<br /> fseek(fp,i*sizeof(struct stu),0);<br /> fread(qq,sizeof(struct stu),1,fp);<br /> printf("\n\nname\tnumber age addr\n");<br /> printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age,<br /> qq->addr);<br />}</td></tr></tbody></table><br />  文gstu_list已由?0.6的程序徏立,本程序用随机d的方法读出第二个学生的数据。程序中定义boy为stucd变量Qqq为指向boy的指针。以Mq制文g方式打开文gQ程序第22行移动文件位|指针。其中的igؓ1Q表CZ文g头开始,Ud一个stucd的长度, 然后再读出的数据即ؓW二个学生的数据?br /><br />  文g函?br /><br />  C语言中常用的文g函数有以下几个?br /><br />  一、文件结束检函数feof函数调用格式Q?feof(文g指针)Q?<br /><br />  功能Q判断文件是否处于文件结束位|,如文件结束,则返回gؓ1Q否则ؓ0?br /><br />  二、读写文件出错检函数ferror函数调用格式Q?ferror(文g指针)Q?<br /><br />  功能Q检查文件在用各U输入输出函数进行读写时是否出错?如ferrorq回gؓ0表示未出错,否则表示有错?br /><br />  三、文件出错标志和文gl束标志|?函数clearerr函数调用格式Q?clearerr(文g指针); <br /><br />  功能Q本函数用于清除出错标志和文件结束标志,使它们ؓ0倹{?br /><br />  C库文?br /><br />  Cpȝ提供了丰富的pȝ文gQ称为库文gQC的库文g分ؓ两类Q一cL扩展名ؓ".h"的文ӞUCؓ头文Ӟ 在前面的包含命o中我们已多次使用q。在".h"文g中包含了帔R定义?cd定义、宏定义、函数原型以及各U编译选择讄{信息。另一cL函数库,包括了各U函数的目标代码Q供用户在程序中调用?通常在程序中调用一个库函数Ӟ要在调用之前包含该函数原型所在的".h" 文g?br /><br />  在附录中l出了全部库函数?br /><br />ALLOC.H    说明内存理函数(分配、释攄)?br />ASSERT.H    定义 assert调试宏?br />BIOS.H     说明调用IBM—PC ROM BIOS子程序的各个函数?br />CONIO.H    说明调用DOS控制台I/O子程序的各个函数?br />CTYPE.H    包含有关字符分类及{换的名类信息(?isalpha和toascii{??br />DIR.H     包含有关目录和\径的l构、宏定义和函数?br />DOS.H     定义和说明MSDOS?086调用的一些常量和函数?br />ERRON.H    定义错误代码的助记符?br />FCNTL.H    定义在与open库子E序q接时的W号帔R?br />FLOAT.H    包含有关点q算的一些参数和函数?br />GRAPHICS.H   说明有关囑Ş功能的各个函敎ͼ囑Ş错误代码的常量定义,正对不同驱动E序的各U颜色|及函数用到的一些特D结构?br />IO.H      包含低I/O子程序的l构和说明?br />LIMIT.H    包含各环境参数、编译时间限制、数的范围等信息?br />MATH.H     说明数学q算函数Q还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的Ҏ(gu)l构?br />MEM.H     说明一些内存操作函?其中大多C在STRING.H 中说??br />PROCESS.H   说明q程理的各个函敎ͼspawn…和EXEC …函数的l构说明?br />SETJMP.H    定义longjmp和setjmp函数用到的jmp bufcdQ?说明q两个函数?br />SHARE.H    定义文g׃n函数的参数?br />SIGNAL.H    定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL帔RQ说明rajse和signal两个函数?br />STDARG.H    定义d数参数表的宏?如vprintf,vscarf函数)?br />STDDEF.H    定义一些公共数据类型和宏?br />STDIO.H    定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的cd和宏。还定义标准I/O 预定义流Qstdin,stdout和stderrQ说?I/O子E序?br />STDLIB.H    说明一些常用的子程序:转换子程序、搜? 排序子程序等?br />STRING.H    说明一些串操作和内存操作函数?br />SYS\STAT.H   定义在打开和创建文件时用到的一些符号常量?br />SYS\TYPES.H  说明ftime函数和timebl构?br />SYS\TIME.H   定义旉的类型time[ZZ(Z] [ZZ)]t?br />TIME.H     定义旉转换子程序asctime、localtime和gmtime的结构,ctime?difftime?gmtime?localtime和stime用到的类型,q提供这些函数的原型?br />VALUE.H    定义一些重要常量, 包括依赖于机器硬件的和ؓ与Unix System V相兼容而说明的一些常量,包括点和双_ֺ值的范围?br /><img src ="http://www.shnenglu.com/threesh/aggbug/14273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/threesh/" target="_blank">Cpp Fans</a> 2006-10-27 11:03 <a href="http://www.shnenglu.com/threesh/archive/2006/10/27/14273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.gjvthsj.cn" target="_blank">˾þþƷһ </a>| <a href="http://www.syggzy.org.cn" target="_blank">þAV</a>| <a href="http://www.gangzheng.net.cn" target="_blank">þù¶ƷӰ</a>| <a href="http://www.duopudz.cn" target="_blank">Ʒѿþþ㽶</a>| <a href="http://www.kong-ya-ji-wang.com.cn" target="_blank">þòþüƵ7</a>| <a href="http://www.30ww.cn" target="_blank">þѾƷav</a>| <a href="http://www.tvauto.cn" target="_blank">AV12þ</a>| <a href="http://www.showfans.com.cn" target="_blank">ݺݾƷþþĻ</a>| <a href="http://www.kbsfrp.cn" target="_blank">޾ƷƷþ99 </a>| <a href="http://www.uhpd.cn" target="_blank">Ʒþþþù</a>| <a href="http://www.kuaixiansou.cn" target="_blank">ŮƷþþ</a>| <a href="http://www.3-gold.cn" target="_blank">þó18վ</a>| <a href="http://www.denlight.com.cn" target="_blank">ݾþþù</a>| <a href="http://www.zghzmj.com.cn" target="_blank">˾þô߽ۺվ</a>| <a href="http://www.bbdhtex.cn" target="_blank">99þֻƷ</a>| <a href="http://www.yizhangguan.cn" target="_blank">þ99Ʒþ99С˵</a>| <a href="http://www.cn0513.cn" target="_blank">ҹþþӰԺ</a>| <a href="http://www.bxdlcd.cn" target="_blank">þþþƷ鶹</a>| <a href="http://www.cfgcurn.cn" target="_blank">þСƵ</a>| <a href="http://www.dmc-dz.cn" target="_blank">?VþþƷ </a>| <a href="http://www.juruse.com.cn" target="_blank">һþ㽶߿ۿ </a>| <a href="http://www.ahgmxy.com.cn" target="_blank">þþƷ˵</a>| <a href="http://www.tnbzjrzhl.cn" target="_blank">޹ƷþþþþԻ </a>| <a href="http://www.dabage.cn" target="_blank">þAV</a>| <a href="http://www.hkjiajiao.com.cn" target="_blank">þɫۺҹž</a>| <a href="http://www.xzxms.cn" target="_blank">Ưޱ˾þþƷ</a>| <a href="http://www.t421.cn" target="_blank">ھƷþþþþþþ</a>| <a href="http://www.cdhjym.cn" target="_blank">þAVĻ</a>| <a href="http://www.rljps.cn" target="_blank">www.þ.com</a>| <a href="http://www.tvjay.cn" target="_blank">ŷѹۿþ</a>| <a href="http://www.cz27b1.cn" target="_blank">һþ㽶߿ۿ</a>| <a href="http://www.jbuz.cn" target="_blank">ŷҹƷþþþþ˳</a>| <a href="http://www.yjtrade.cn" target="_blank">Ʒþþþþ</a>| <a href="http://www.520king.cn" target="_blank">Ʒþþþ9999</a>| <a href="http://www.03caiji.cn" target="_blank">þƬѹۿ</a>| <a href="http://www.nmbm.com.cn" target="_blank">þþƷavպ</a>| <a href="http://www.9503miwang.cn" target="_blank">þ99þëƬһ</a>| <a href="http://www.netcacd.cn" target="_blank">þһ</a>| <a href="http://www.epfb.cn" target="_blank">ۺϾƷþ</a>| <a href="http://www.ylssmedia.cn" target="_blank">99þ99þþþƷ</a>| <a href="http://www.jp3.com.cn" target="_blank">þþֻоƷձ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>