1、编写者:魏娟审稿者:唐玺冬,邵学蛟编写时间:2008年2月20日星期三专 题 技 术 手 册达内金海洋外企软件工程师培训前 言编写目的本书是为参加达内技术培训的对象而编写的一套相关的技术手册。为了使得达内学员更能有效地掌握达内技术体系,更有条理地进行技术学习,提高学习效率和提升学习效果,能熟练地的掌握软件开发技术,制作了本手册。内容组成本手册是按照达内技术课程分科目,分技术专题来编写的技术知识和要点。内容主要包括unix,c+,java,ooad,xml,jdbc,hibernate,java Web开发技术,ejb,spring等等。读者范围本手册适合初学软件开发的读者和参加达内外企软件工程
2、师培训的对象。手册使用本手册中使用了一些符号来表示特殊内容,为了方便读者查阅,将符号说明如下:注意案例参考Unix常用命令系统命令登陆与登出telnet 主机IPtelnet 192.168.0.23login: 用户名passwd:密码退出系统exit:不同shell相互交换退出ctrl+D:结束终端输入ctrl+c:工作一半输出还要继续工作修改密码passwd(6-8个字符)old passwd: 原密码new passwd:新密码confirm passwd:确认密码目录命令改变当前工作目录cd:改变当前工作目录。后面可以是绝对路径也可以是相对路径cd :回到用户主目录cd 目录名:改变
3、当前目录到指定的目录cd . :改变当前目录到上一极目录cd . :回到当前目录显示当前工作目录pwd:显示当前工作目录列出指定目录下的文件和子目录ls:列出指定目录下的文件和子目录ls a 列出目录下的所有子目录,文件,隐藏文件(以.开头的文件)ls R 从当前目录开始列出所有的子目录结构,文件;并一层一层地往下显示ls t 以修改时间为序来列出文件、子目录、ls l 以长列表的形式列出文件,子目录信息 也就是他们的属性ls F 列出文件,子目录及文件类型(*可执行文件,软链接文件,/:目录,无:普通文件)权限控制文件:r打开文件来查看内容,如cat,more命令就需要读权限 w可以更改文件
4、内容,如cp,vi命令要求有写权限 x可以执行这个文件(必须是可执行文件*.sh)目录:r查看目录的内容,文件和子目录。如ls要求有读权限 w可以在该目录中创建,删除,移动子目录或文件。如touch,rm,rmdir,cp,mkdir要求有写权限 x你是否能进入这个目录 cd修改权限:chmod u/g/o +/- r/w/x 文件或目录名chmod nnn为数字 文件/目录名chmod u+r,g-w,o=x file1, chmod 655 file普通文件常用权限:644;目录常用的权限是:755创建目录创建目录:mkdirmkdir dir1 dir2 dir3 在当前目录中创建3个目
5、录 他们为同级目录mkdir dir9/dir4 在当前目录中dir9目录创建一个目录dir4,但是dir9目录必须存在mkdir /dir5 在用户主目录下创建dir5mkdir p dir6/dir7/dir8 在当前目录中创建一个目录结构 dir6存在不存在都可以文件命令创建文件创建文件:touch touch 文件名 文件存在,则更新该文件的最后一次修改时间 文件不存在,则创建一个新的空文件拷贝文件/目录拷贝文件/目录:cp cp sourcefile objectfile 拷贝源文件为目标文件 目标文件不存在则新建目标文件。把原文件的内容放到新建文件中 目标文件存在则用原文件的内容覆
6、盖目标文件的内容 cp i sourcefile objectfile 拷贝文件,但若目标已存在,则询问是否覆盖 如果是y则目标文件中放的是源文件的内容 如果是n则目标文件中的内容还是原来的内容 cp r sourcedir objectdir 拷贝源目录到目标目录 目标目录是否存在则它的拷贝内容是不一样的? 目标目录存在:源目录为目标目录的子目录 cp r wfx1 wfx2 wfx2存在目录结构为: wfx2 wfx1目标目录不存在:目标目录和源目录同级 wfx2不存在 则为 wfx1 wfx2移动文件/目录移动文件/目录:mv 源文件,源目录都不存在mv sourcefile objec
7、tfile 源文件内容覆盖目标文件,目标文件不存在,则源文件改名为目标文件(mv i 则覆盖时询问)mv sourcedir objectdir 目标目录存在则源目录移动到目标目录中成为子目录。目标目录不存在,则把源目录的名字改为目标目录的名字删除文件/目录删除文件/目录:rm rmdir rm rrm file:删除文件,rm i file询问是否删除文件rm file1 file2 file3 删除多个文件rmdir dir:删除目录,但dir必须是空目录rm r dir1:删除非空目录,会删除目录中所有的内容。这里会询问我们要不要删除rm rf dir3:删除非空目录,会删除目录中所有的
8、内容,不询问我们到底要不要删除。创建链接文件创建链接文件:ln ln s 被指向的源文件 建立的链接文件 :建立软链接 首先我们修改任何一个文件内容,另一个文件的内容也相应修改 删除源文件以后。链接文件就不可以在操作。我们把安装文件给删除了。快捷方式就没有用了 删除链接文件不会影响到源文件。源文件还可以操作 ln 被指向的源文件 建立的链接文件 :建立硬链接 首先我们要是修改任何一个文件中的内容,另一个文件也会相应的修改。删除源文件不会影响链接文件,删除链接文件不会影响源文件软链接:abc(l:表示是软链接文件)abc.txt(普通文件),abc文件中有abc.txt的inode号,abc指向
9、abc.txt,就向windows中的快捷方式一样,2个是不同的文件硬链接:abc与abc.txt都指向同一个inode的文件块,是同一个文件帮助命令帮助命令:man 命令名;man空格:向后翻屏,b:向前翻屏,回车:向后滚动一行,/字符串:查找字符串特殊字符*:通配0或多个字符 ls d*?:通配一个字符 ls d?.txt:通配一个范围中的任何一个字符 ls b-fb*;:命令的结束符,一次可执行多条命令 cd;pwd:输出重定向,将命令的执行结果重新输出到非标准输出,如文件。 cal 2 2002 file1 :输入重定向,不从我们键盘的标准输入,cat file2:以追加方式将命令的执
10、行结果输出到非标准设备 cal 7 2002calfile|:将前一个命令的的执行结果作为后一个命令的输入 cat /etc/passwd | more查找文件查找文件查找:findfind path name filename :按文件名查找find path user0 username :按文件的拥有者查找 user0为root用户 user1为soft用户find path atime +10/-10 : 按文件的访问时间来查找(+表示超过 表示不足)find path mtime +/-days : 按文件的访问时间来查找find path type f/d :按文件的类型来查找 f
11、:查找文件;d:查找目录find path perm 644/755 : 按文件的权限查找用户查找who:查看当前在线用户的详细信息用户名 终端号 登陆时间 登陆机器的本地IPwho am I 总是自己,即登陆时的自己用户名 终端号 登陆时间 登陆机器的本地IPwhoami 只查看用户名w:查看当前在线用户的更详细的信息USER(用户名) TTY(终端号) FROM(本地IP) LOGIN(登陆time) IDLE JCPU) PCPU( 累计使用cpu时间) WHAT(执行命令)过滤文件和目录grep 在命令结果或文件中进行过滤grep root /etc/passwd 在这个文件中找出有r
12、oot的行 ls al | grep -i sep 1 这里是忽略大小写 xargs:它是分隔开的意思, ls f* | rm 这样的写法是错误的。我们找到这些文件要一个一个删除 。因此 ls f* | xargs rm 才是正确的grep i 忽略大小写 grep v 反向过滤 去掉有grep这个单词的那一行统计文件或执行结果wc: 字符数,行数,单词数wc c 统计字符数 ls l | grep init | wc -cwc w 统计单词数wc l 统计行数进程启动或创建进程ps :列出当前终端启动的进程ps ef :列出当前系统中运行的进程,详细列表列出uid(用户Id) pid(进程I
13、d) ppid(父进程Id) c(标志位) stime(进程启动时间) tty(终端号) time(累计使用cpu的时间) cmd(进程执行的命令)ps ef | grep 用户名终止或结束进程Kill 进程号 ;ctrl+c 杀掉终止进程Kill -9 进程号 可以杀掉终止某些高级的进程Sleep:创建休眠进程Sleep 1000 &1(作业号) pid(进程号) sleep(休眠命令)fg%n(作业号):将进程放到前台bg%n :将进程放到后台stop%n 暂停进程;ctrl+z 把这个进程给挂起kill%n : 终止进程网络命令ftp:文件传输ftp 192.168.0.250lirui
14、 123456cd:改变远程服务器的当前目录lcd:改变本地的当前目录dir:查看远程机器的当前目录内容get:从服务器上下载一个文件(mget 多个文件名)put:从本地机器上传一个文件到服务器(mput)hash:开关变量(on/off)设置传输大文件过程中,每传输2k字节显示一个#prompt:开关变量,设置在传输多个文件时,是否给提示on /offls:查看远程当前目录内容文件的查看cat 不分屏查看文件内容;可以将多个文件连接成一个大文件cat filenamecat file1 file2 file3cat /dev/null /b.txt : b.txt存在,将这个文件清空; b
15、.txt不存在,则创建一个空文件more:分屏显示 more filename ls al |more空格:翻滚到下一屏,b:上一屏,f:下一屏,回车:下一行,/字符串tail -n(n是行数) 从尾行往上看head n 从首行看默认为10行文件编辑文件编辑:vivi的三种模式:命令模式,输入模式,最后行模式输入模式:i:在光标当前位置开始编辑 a:在当前位置之后编辑 o:在当前光标位置的下一行编辑光标移动:h:向左移动,l:向右移动,j:下移一行,k:上移一行 $:到行尾,:到行首,G:到最后一行,nG,1G文本操作:x:删除光标所在位置的一个字符 dw删除从标位置开始的一个单词 dd:删除
16、光标所在的一行 5dd:就是删除5行 :5,10d把5到行给删除 r:替换光标所在的字符 cw:替换光标开始的一个单词 cc:替换光标所在行 C:替换从光标到行尾 yw:拷贝光标开始的一个词 yy:拷贝光标所在的一行 p:在当前光标所在的行的下方粘贴、 :1,2co3把1.2行拷贝一份防到3行后面 :4,5m6把4,5行移动到6行之后 文件操作:q!:强制退出,wq!:保存文件并退出 ZZ :set nu 显示行号 :set nonu 把行号给去掉系统初始化文件与环境变量bsh:系统初始化文件 /etc/.profile 用户初始化文件 $HOME/.profilecsh:系统初始化文件 /e
17、tc/.login 用户初始化文件:$HOME/.cshrc .login .logout环境变量bash/bsh: set 变量名=value; export 变量名csh:setenv 变量名 value set 变量名=valueecho $变量名path:告诉系统在执行命令时,在哪个路径下找该命令的可执行文件。set path=( ) set path=($path newpath) which 命令名 :显示当前执行的命令所在的路径whereis 命令名:显示命令所在的各个路径JAVA_HOME:java(jdk)的安装目录CLASSPATH:Java 的类路ORACLE_SID:访
18、问oracle的idMANPATH:帮助手册shell脚本Shell脚本的编写:1vi 文件名.sh#!/bin/sh 说明命令的/bin/sh去执行下面的命令pwdcaldate2.增加执行权限Shell 脚本默认是没有执行权限的,所以使用chmod u+x 名字.sh3.运行shell 脚本./名字.sh 运行系统调度计划在特定时间调度系统中的某个程序执行,常常用于系统维护工作crontab l 查看当前系统中的调度计划crontab e 编辑当前系统中的调度计划 crontab -r 删除当前系统中的调度计划一般计划程序都是用shell脚本编写的,编写内容如下:15 16 12 * 3
19、a.sh15:分钟 0-59; 16:小时0-23;12:日期1-28/29/30/31 *:月份1-12 3:星期1-7 a.sh在当前目录下编好的shell脚本这个调度计划表示在每个月12号,并且那天是星期三的16:15分启动a.sh执行其他命令回显命令:echoecho $WTO:显示变量值;echo “$WTO”:“”表示显示变量值;echo $WTO 单引号括起的内容被作为字符串,显示$WTOecho $WTO $转义符 ,这样$就代表本身这个符号 结果为$WTO而不是WTO里的值历史记录命令:Historyset history=30 :设置系统自动保留前面的30条命令,设置系统自
20、动保留的历史记录数history :显示最近使用的命令,显示的命令个数由set history来决定history n :显示最近使用的n个命令!n 调用第n 条命令 ;! 调用上一次执行的命令执行替换命令:aliasalias 代替名 被替代的命令alias h history : h替代history命令 ; alias c clear c替代clear命令alias home cd;ls home 替代cd;ls命令组 alias 列出已经建立了的替代的命令列表unalias copy 取消建立的copy替代的命令core c+c+基础语法字符集字符集就是说可以出现在源程序中的东西 1:
21、26个大小写字母 2:0 1 2 3 4 5 6 7 8 9 3:_ 下划线 4:+ - * / % = 5:.,:? | ! # & 6: () 7:空格保留字c+给他们赋予了特殊的含义,我们要避免使用它!这样会发生冲突!我们也不必要死记 这些东西。平时注意一些就可以了变量和常量变量1、变量 常量都存储在内存中,不同类型的变量 常量的存储空间大小是不一样的 变量的值不可以超过他的取值范围.超过取值范围会发生溢出2、变量类型 变量名字;定义或是声明一个变量 变量名字=值;给变量赋值 int a; a=5; 变量类型 变量名字=值; 初始化 int b=6;常量 1、常量只能必须在定义它的时候给
22、它值。之后就不可以在以任何方式修改它的值 const 类型 常量名字=值; const int e=6; 类型 const 常量名字=值; int const f=8;命名 (1) 第一个字母必须是字母或是下划线 建议一般是以字母开头!临时变量的时候以_开头 (2) 只能使用字母或下划线 数字 (3) 中间不能有空格 (4) 不能是保留字,不能和数据类型同名 (5) 严格区分大小写 (6) 使用易懂的变量名 (7) 长度一般不要超过32个字符类型 类型的长度: sizeof(类型) 或 sizeof(变量名字) (1)整型 无符号:unsigned 最高为不是符号位。因为这样它放的数据会更大些
23、 默认为有符号类: int ,unsigned int ,signed int short int ,unsigned short int,signed short int long int ,unsigned long int ,signed long int (2)字符型 char,unsigned char ,signed char (3)实型 float double long double (4)逻辑型 bool 值为true 或 false (5)空类型 void 它是不确定类型,不能直接用来定义变量。因为变量定义的时候必须有确定的类型,才可以适当的分配空间 (6)字面值: 特殊常
24、量 例如直接的数字100 直接字符 A 直接字符串“good 直接的布尔值 true 和false (7)其他类型 enum 枚举类型 struct结构类型 array数组 相同类型变量集合 pointer 指针 保存各种变量地址 class 类3.5默认为double类型 。要为float则写3.5f 5默认为int类型。要为long则写5l运算符 0为假 1为真 运算符只是运算而不会修改变量原来的值 强转是暂时的。变量声明类型就是固定不变 运算符优先级 1: ()为最高优先级。当我们想按自己的想法去做!对优先级不是很清楚!就可以加() 下标运算符 数组 :域操作符 类 .取成员操作符 类
25、-指针取成员操作符 2: .*取成员指针操作符 -*指针取成员指针操作符 3: ! 逻辑非 按位取反 例如:-1的二进制 11111111 则(-1)为00000000 + 正号 - 负号 + 自增1 +i:表达式会加1 最后i也会加1 i+: 表达式不变 最后i会加1 - 自减1 -i:表达式会减1 最后i也会减1 i-:表达式不变 最后i会减1 &取变量地址 * 取指针指向的变量 (类型) 强制类型转换 sizeof()取数据类型长度 new 动态给变量分配空间 delete 释放动态分配空间 4: * 相乘 / 相除 % 相余 5: +相加 -相减 6: 非负数右移位缺的补0 。负数右移
26、位缺的补1 右移位 右移1位 除2 当然我们右移几位,就除几个2 7: 小于 大于 =大于或者等于 8: = 等于 != 不等于 9: & 按位相与 只要有0则为0 10: 按位异或 只要相同则为0不同为1 11: | 按位或 只要有1则为1 12: & 逻辑与 短路运算符 意思就是说只要最左边遇到了假那么后面的就不再判断整个为假 一般会和前加加 ,后加加 ,前减减 后减减连用 13: | 逻辑或 短路运算符 意思就是说只要最左边遇到了真那么后面的就不再判断整个为真 一般会和前加加 ,后加加 ,前减减 后减减连用 14: ?:条件运算符 三目运算符:两边的数据为相同类型 (表达式)?(数据1)
27、:(数据2) 表达式为真则取数据1,表达式为假则取数据215: = 赋值 *=自乘以 /=自除以 %=自求余 +=自增加 -=自减少 =自右移位 &=自按位相与 |=自按位相或 =自按位异或16: 逗号表达式 总是依次计算逗号分隔的各个部分的结果.最后一部分就是整个表达的结果 例如(a=1,b=a,c=a+b,d=c+5)=8 因为逗号表达式的结果为d 因为这样写是正确的 (a=0,b=a+5,b+2)=9这样写是错误的,因为逗号表达式的结果为两个数据和的临时值 不能做为左值.那就顺便说一下左值和右值 左值:就是放在等号左边。我们可以再给它赋值 赋值表达式就是左值。+a也是左值 (a=5)=6
28、; (+a)=5; 右值:就是放在等号右边。小的规则: 前三名 括号 成员 单目 后三名 逗号表达式 赋值 三目注释 1:单行注释 / 2:多行注释/* */ 多行注释里可以有单行注释、 但是不可以再有多行注释编译c+ 1: g+ -c hello.cc 会生成.o文件 hello.o 编译.cc文件 g+ -o hello hello.o 我们给可执行文件起了别名hello不在用a.out 连接 hello 执行可执行文件 2: g+ -o hello hello.cc 3: g+ hello.cc a.out头文件 #include 系统文件 #include 自己写的文件 我们自己写的文
29、件要遵守。c+中的语法。基本输入,输出语句 cin需要输入数据的变量。 在cin输入的时候,多个数据用(空格, 制表符Tab,回车)分隔 习惯上我们要在输入之前都会先输出提示信息提示用户输入数据 int a; couta; couta;特殊符号r:回车符 就是回到本行开头做输出。cout”abcdref”endl; 结果就是efcdn:换行符 cout”abns”endl; 结果: ab st:制表符 cout”atb”endl;结果就是 a b 就好象我们按Tab键a:小喇叭声响:为转义字符 cout”ascd”反转= +1 -1的二进制: 00000001 = 11111110 - 111
30、11111控制语句if语句 (1) if(条件) 一定要记住要写=. 不要写成=那就成了赋值只要条件不为0则就是真0为假那么if语句里的代码块就不执行0,false ,0ASCII为0,NULL这些在表达式中都是假0的ASCII为48语句块例如: if(score =0) coutinput ok!endl;(2) if(条件)语句块else语句块例如: if(choice=y) coutstart another game .endl; else cout3Q,bye!endl; (3) 级联使用if(条件)语句块else if(条件)语句块else if(条件)语句块else语句块例如:
31、if(score=100) / 这里判断相等用 = 不是=coutA=90) coutB=80)coutCendl;elsecoutDendl;for循环语句for 语句使用:一般我们都是在知道次数的时候使用格式:for(int i=0;i5;i+) / int i=0 是初始化 i5 是条件 i+ 是调整语句 语句块(循环体) / 条件为真,执行代码 执行过程: 先是for第一部分-初始化,再判断条件是否为真,若为真,进入循环体,执行代码,之后再回到for第三部分-改变i的值,再去条件判断,只要条件为真,一直如此循环。直到条件为假,跳出循环体,执行循环体以外的代码。如果第一次条件判断为假,直
32、接不进循环体,执行循环体以外的代码。注意:条件如果永远为真,则是死循环!i 变量只能在循环中使用。例如: int n=6;for(int i=0;in;i+)cout *6) n-; cout*; do语句块(循环体) / 不管条件为真还是假,都先执行代码 while(条件); /条件来决定是否再循环 这个地方不要少了分号switch多路选择语句switch 分支语句 switch(表达式) case n1: .break;case n2:.break; /表示退出分支。case n3:.break;default: / 如果没有case匹配入口,默认入口 它是可写可不写。.break;执行过
33、程:根据表达式的结果,来跟每个case 后的值相匹配,匹配上就执行这个分支的代码,执行完,由break退出,如果没有匹配的,执行默认的匹配入口。例如:switch(score/10)case 1:coutAendl;break;case 2: coutBendl;break;case 3:coutCendl;break;default:coutDendl;break;break/continue/return语句用在这些循环语句中的其他语句解说 break:跳出本层循环,执行后面的语句 continue:结束本次循环。进入下一次循环 return 是用来从函数中返回的,返回本函数执行以后的结果
34、其他数据类型BULE=201枚举 枚举 : 让数据含义更直观,便于理解,一种类型。 格式: enum color RED,GREEN,BLUE 或者RED=100,GREEn=200,BULE,CLACK=400; (1)大括号里的值,默认从0开始,依此递增。eg: RED=0,GREEN=1,BLUE=3 (2)变量的值只能是大括号里的值。 (3)定义类型是语句后面要加分号。 (4)一般,定义类型都要在main函数外面。 (5)我们可以指定其中若干个变量的值,然后就从指定的值开始递增 enum color RED,GREEN,BLUE,WHITE;int main()color c;cout
35、RED=REDendl;if(c=GREEN)coutGreen one!endl;return 0;输出 RED=0数组 一维数组:是若干相同类型变量的集合。定义:元素类型 数组名元素个数int a100; char b200; 1.用下标表示各个元素,以0开始。a0,a1,a2.a99; 2.定义时必须确定元素个数,且不能是变量。 3.数组初始化格式: int a5=2,3,8,4 /元素可少于元素个数,不足自动补0,但是不能多于个数 char b=a,b,c,d /自动根据初始数据确定元素个数 4.for循环数组时 sizeof(数组名)是得到的是数组占的字节数,不是元素个数。 5.传数
36、组时,把数组名传过去即可,不需要加。 6.不要数组越界。 7.整型数组与字符串数组区别: 8.整型数组名字,表示整个数组,数值上是指第一个元素下标地址 9.字符串数组名字 ,是指向整个字符串的第一个字符,也会带出整个字符串。 char y28; for(int i=0;iyi;/那我到时候句打印一下y看结果 二维数组:表示几行几列。int a46 4行6列划分开是:a00 a01 a02 a03 a04 a05 a10 a11 a12 a13 a14 a15 a20 a21 a22 a23 a24 a25 a30 a31 a32 a33 a34 a35 二维数组初始化: int arr3=1,2,3/行的个数可以省去,列则不可。表示有三行 (从初始数据可看出)有三列分别是 1 2 0 0 0 0 3 0 0 结构结构:把多种数据类型,组装放在一起,用一种数据类型来表示。自己定义类型,结构来实现。 1结构类型定义:struct 结构类型名成员类型 成员变量