
1.( BC )在vi中,那些命令可以保存退出vi(2分)
A、q! B、wq C、x D、q
2.( A )下面的那写命令可以用来修改文件的权限(2分)
A、chmod B、chown C、chgrp D、chkey
3.( ACDE )以下那些函数是共享内存的相关函数(2分)
A.shmget B. shmop C. shmdt D. shmat E. shmctl
4.( BCE )关于vi的编辑命令,下列说法是正确的(2分)
A.i和I可以在光标处插入资料,区别在于插入资料位置分别在光标前和光标后
B.a在光标后加入资料,A在行末加入资料
C.o在该行之下新增一行用于输入,O在该行之上新增一行用于输入
D.d删除光标处字符,D删除光标前一个字符
E.x删除光标所在字符,X删除光标所在前一个字符
5.( ABCDE )可通过如下命令查看系统cpu负载、内存使用、磁盘I/O情况(2分)
A.w B. sar C. up D.vmstat E.iostat
6.( B )FTP、TELNET服务的默认端口分别为(2分)
A.25,108 B.21,23 C.21,25 D.25,23
7.( D )下面的命令可以列出当前操作系统所支持的信号(2分)
A.kill -9 B.kill –s C.kill -16 D.kill –l
8.在vi的非编辑状态,如何实现如下功能,请简单描述。(20分)
(1)光标到某一行 :n
(2)光标到该行尾 $
(3)光标到该行首 ^
(4)到文档最后一行 G
(5)把光标所在行及其下一行连接为一行 J(大写j)
(6)拷贝光标所在行开始的连续10行到文档最后 10yy, G, p
(7)查找文档中光标以后含有MAPS或者maps字符串的地方 :set ic; /maps
(8)使用vi过程中由于系统管理员发送广播消息,使屏幕换面混乱,请恢复到接收消息前的画面 Ctrl + L
(9)显示当前光标所在行 Ctrl + G 或者 :set nu(num/number)
(10)放弃对文件所作的修改并且退出 :q!
9.用相应的命令,完成如下功能。(45分)
(1)建立一个组test
group add test
(2)建立用户test,属于组test,登陆目录为/export1/home/test,使用ksh。
useradd –d /export1/home/test –m –g test –s /bin/ksh test
(3)设定test用户的密码为test。
passwd test
(4)用test用户登录,在当前目录下创建空文件test。
touch test 或者 vi test(保存退出)
(5)假设test用户主目录下有目录mp3,请在test用户主目录下列出mp3目录下所有文件,按照文件修改时间降序排列,把结果输入到文件test中。
ls –lt mp3 >./test
(6)不使用vi,查看test文件。
cat test 或者 more test
(7)假设test用户主目录下有bin目录,bin目录下有可执行程序dance,请设定环境变量,使得test用户在主目录下也能直接调用dance程序。
PATH=$PATH:$HOME/bin
export PATH
(8)列出test用户主目录以及所有子目录下文件名中含有maps字符串的文件。
find . –name *maps* -print
(9)对test用户主目录下的mp3目录进行打包、压缩。
tar cvf name.tar mp3;compress ma3 或者 tar zcvf name.tar.gz mp3
(10)查询dance程序的进程号(假定为后台运行)。
ps –ef |grep dance
(11)列出test用户所有后台运行的进程。
jobs
(12)中止后台进程号为1的进程运行。
kill -9 %1
(13)列出当前系统上的所有登陆用户。
finger或者who
(14)列出最近100条登录系统的记录。
last –n 100
(15)删除test文件。
rm test
10.把test用户设为超级用户,并且进行设置,使得test用户登录后直接执行/export1/home/test/test.sh程序,退出test.sh后就退出登录状态。(10分)
方法一:更改/etc/passwd文件
方法二:更改用户主目录下的 .profile 文件,增加sh 控制
11.简单描述标准输入、标准输出、标准错误。(6分)
标准输入是程序可以读取其输入的位置。缺省情况下,进程从键盘读取 stdin。
标准输出是程序写入其输出的位置。缺省情况下,进程将 stdout 写到终端屏幕上。
标准错误是程序写入其错误消息的位置。缺省情况下,进程将 stderr 写到终端屏幕上。
12.列出当前系统下各个分区及其空间大小状况;列出/export1/home/test/mp3整个目录总占用了多少空间。(5分)
df –h/-k/-v
du –sk /export1/home/test/mp3
第二部分 数据库
本部分试题答案略,第1题10分,后面每题5分,总分70分。
1.建一个员工信息表employee,表中id(员工代码)、sex(员工性别)、name(
姓名)、departmentid(部门代码)、address(住址)、birthdate(生日)、postcode(邮编)、salary(薪水)、workdate(入职日期)、remark(备注信息)。其中postcode、remark可以为空,薪水需为number类型,生日、入职日期为date型。以员工代码作为主键。
Create table employee(
PRIMARY KEY(ID)
);
2.插入两条记录,id分别为0023、1023,其余信息自己编造。
INSERT INTO employee VALUES(‘0023’,’0’,’Harris’,’A0000001’,’guangzhou’,’1980-01-01’,’510018’,’5000.00’,’2008-01-01’,’’);
INSERT INTO employee VALUES(‘1023’,’0’,’Harris’,’A0000002’,’guangzhou’,’1980-10-01’,’510018’,’5000.00’,’2008-01-01’,’’);
3.查询员工总数、薪水总额。
SELECT COUNT(*),COUNT(salary) FROM employee
4.查询出各部门的最小年龄、最大年龄。
SELECT MAX(birthdate) AS MIN_AGE,MIN(birthdate) AS MAX_AGE FROM employee GROUP BY departmentid
5.统计每个部门的男女人数,按照部门代码排序。
SELECT count(sex) FROM employee GROUP BY sex
6.创建入职日期(workdate)索引employee_idx。
CREATE INDEX employee_idx ON employee(worddate)
7.修改id为0023的员工的入职日期为2007-12-31。
UPDATE employee SET workdate = ‘2007-12-31’ where id = ‘0023’
8.删除id为1023的员工信息。
‘1023’
9.使前面所做的修改、删除生效(假定数据库设置不是自动生效)。
Commit
10.假定有一表结构和employee完全一样的表employee_bak,把employee表的数据完全导入employee_bak表。
INSERT INTO employee_ bak
SELECT *
FROM employee
11.假设还有一表duty,其记录为员工的级别level,也是以员工id为主键。根据表employee、duty查询出级别在10级以上的所有员工详细信息。
SELECT * FROM employee a, duty b
WHERE a.id = b.id and b.level > 10
12.不区分部门查询出入职日期最早的10位员工信息。
DB2 数据库表示
SELECT * FROM employee
ORDER BY workdate ASC
FETCH FIRST 10 ROWS ONLY
SQL SERVER表示
SELECT top 10 * FROM employee ORDER BY workdate ASC
13.删除索引employee_idx。
DROP INDEX employee_idx
第三部分 Java
本部分试题和第四部分的C/C++任选一部分作答。
一、选择题(30分)
1.( C )关于运算符>>和>>>描述正确的是
A.>>执行移动 执行翻转
C. >>执行有符号左移,>>>执行无符号左移 D.>>执行无符号左移,>>>执行有符号左移
2.( CD )选出Java语言中的关键词
A.NULL B.sizeof C.implements D.extends
3.(BCD )现有下述代码,选择出能够打印出”Test2”的数字
switch(x){
case 1:
System.out.println("Test1");
case 2:
case 3:
System.out.println("Test2");
break;
}
System.out.println("Test3");
}
A.0 B.1 C.2 D.3 E.4
4.( B )字符(char)的整型表示范围为
A.0—32767 —6—2—32767
5.(A D E )选择Java语言中的基本数据类型(多选)
A.byte B.Integer C.String D.char E.long
6.( C D )从下列选项中选择正确的Java表达式(多选)
A.int k=new String(“aa”)
B.String str=String(“bb”)
C.char c=74;
D.long j=8888;
7.( A D )Java网络程序设计中,下列正确的描述是(多选)
A. Java网络编程API建立在Socket基础之上
B. Java网络接口只支持TCP以及其上层协议
C. Java网络接口只支持UDP以及其上层协议
D. Java网络接口支持IP以上的所有高层协议
8.( A C )关于线程设计,下列描述正确的是(多选)
线程对象必须实现Runnable接口
启动一个线程直接调用线程对象的run()方法
提供对多线程同步提供语言级的支持
9.( A )Java I/O程序设计中,下列描述正确的是
用于写操作
用于写操作
库不支持对文件可读可写API
10.( A B )下列描述中,那些符合Java语言的特征(多选)
支持跨平台(Windows,Linux,Unix等)
自动垃圾回收),提高了代码安全性
支持类C的指针运算操作
不支持与其它语言书写的程序进行通讯
11.( B )下述代码的执行结果为
public class foo {
static String s;
public static void main (String[]args) {
system.out.printIn (“s=” + s);
}
}
A.代码能够编译,打印出“s=”
B.代码能够编译,打印出“s=null”
C.代码不能够编译,因为String s 没有初始化
D.代码能够编译,但是当调用toString()时抛出NullPointerException 异常
12.( B )下述代码的执行结果是
class Super {
public int getLength() {return 4;}
}
public class Sub extends Super {
public long getLength() {return 5;}
public static void main (String[]args) {
Super sooper = new Super ();
Super sub = new Sub();
System.out.printIn(sooper.getLength()+ “,” + sub.getLength() };
}
}
A. 4, 4 B. 4, 5 C. 5, 4 D. 5, 5 E. 代码不能被编译
13.( B )下述程序的执行结果为
int index = 1;
String [] test = new String[3];
String foo = test[index];
A. foo 的值为 “”
B. foo 的值为 null
C. 抛出一个异常
D. 程序不能够被编译
14.( A B D )关于Java语言,下列描述正确的是(多选)
A. switch 不能够作用在String类型上
B. List, Set, Map都继承自Collection接口
C. Java语言支持goto语句
D. GC是垃圾收集器,程序员不用担心内存管理
15.( A B C )关于异常(Exception),下列描述正确的是(多选)
A. 异常的基类为Exception,所有异常都必须直接或者间接继承它
B. 异常可以用try{ . . .}catch(Exception e){ . . .}来捕获并进行处理
C. 如果某异常继承RuntimeException,则该异常可以不被声明
D. 异常可以随便处理,而不是抛给外层的程序进行处理
二、是非题(判断写法是否正确,如果错误,请指名具体错误)(15分)
1.aa.java:
public abstract class aa {}
bb.java:
public class bb{
public static void main(String[] args) {
aa obj= new aa();
System.out.println(“hello”);
}
}
aa类是abstract类故不可以实例化。
2.public class Something {
public int addOne(final int x) {
return ++x;
}
}
int x被修饰成final,意味着x不能在addOne method中被修改。
3.aa.java:
public final class aa {}
bb.java
public class bb extends aa {
aa类是final类故不可以继承。
三、问答题(15分)
1.简述int和integer的区别。
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。
2.数组的length和String的length有什么区别?
数组的length是属性,String的length是方法。
3.写出以下程序的输出。
public class test {
public static void main(String[] args) {
System.out.println(test.doSomething());
}
public static String doSomething()
{
try {
System.out.println("aa");
return "dd" ;
} catch (Exception e) {
System.out.println("bb");
}
finally
{
System.out.println("cc");
}
return "ff" ;
}
}
aa
cc
dd
四、编程题(请在背面作答或者另附纸作答)
1.写一个线程,每隔10秒钟标准输出到屏幕上一个”hello world” , 打印10次以后退出。(10分)
public class ThreadTest implements Runnable {
}
2.写一个接口,包含 public String doTest(Object obj) 这个方法,然后再写一个类并实现这个接口。(10分)
public interface MyInterface {
}
public class Myimpl implements MyInterface {
}
五、附加题(请在背面作答或者另附纸作答)
1.写一个Singleton出来,保证这个类只有一个实例。(10分)
public class SingletonTest {
}
2.1~100共一百个自然数,放入一个99个元素的数组a[99],要求写出一个尽量简单的方案,找出没有被放入数组的这个数。(10分)
第四部分 C/C++
本部分试题和第三部分任选一部分作答。
一、填写BOOL , float, 指针变量 与“零值”比较的 if 语句。
“零值”可以是0, 0.0 , FALSE 或者“空指针”。例如 int 变量 n 与“零值”
比较的 if 语句为:if ( n == 0 ) 或者 if ( n != 0 )
以此类推。
请写出 BOOL flag 与“零值”比较的 if 语句:
if(flag == FALSE)
if(flag != FALSE)
请写出 float x 与“零值”比较的 if 语句:
if(x==0.00)
if(x!=0.00)
最准确,任何编译器都没歧义的表达
if(x==(float)0.00)
if(x!=(float)0.00)
请写出 char *p 与“零值”比较的 if 语句:
ANSI C编译器
if(p == NULL)
if(p != NULL)
C 编译器
if(p==(void *)0)
if(p!=(void *)0)
二、以下为32 位C程序,请计算sizeof 的值。
char str[] = “Hello” ;
char *p = str ;
int n = 10;
请计算
sizeof (str ) = 6
sizeof ( p ) = 4
sizeof ( n ) = 4
void Func ( char str[100])
{
请计算
sizeof( str ) = 4
}
void *p = malloc( 100 );
请计算
sizeof ( p ) = 4
三、简答题
1、头文件中的 ifndef/define/endif 干什么用?
预编译时防止头文件被重复包含,而产生“重复定义”等预编译错误
2、#include #include #include “filename.h” 在 C 文件当前目录搜索。 注:GNU C 两者没有太大区别。都是从全部包含路径中搜索。 3、const 有什么用途?(请至少说明两种) 1. 修饰变量,防止变量被修改 2. 修饰函数指针参数,防止指针被修改 3. C++修饰函数本身,函数不能修改类成员。 4、在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明? C++对函数名、变量名会加入protocol编码(即:根据参数类型、参数个数加一些修饰,如 void MyFunc(int a) 成为 __GCRT_MyFuncqqvya@4) 加上了 extern “C” 声明,表示让编译器去掉C++ protocol编码功能。这样才能正确调用C写的API。 5、请简述以下两个for 循环的优缺点: // 第一个 // 第二个 for (i=0; i if (condition) for (i=0; i else } DoOtherthing(); else } { for (i=0; i } 优点: 优点: 在循环中condition发生变化,会调用 逻辑严谨,没有实时运行的歧义 不同的方法。冗余代码少。 缺点: 缺点: For中加if效率低,condition会产生 冗余代码多。 歧义效果 四、思考题 1.void GetMemory(char *p) { { } v { void Test(void) } } 请问运行Test 函数会有什么样的结果? 请问运行Test 函数会有什么样的结果? 答: 答: 1段错误(Segmentation fault) 任意值,取的是临时栈地址 2内存溢出 V { } v { 2( } 请问运行Test 函数会有什么样的结果? 请问运行Test 函数会有什么样的结果? 答: 答: 1. 正常输出 hello 1.在单进程测试程序中 输出 world 2. 内存泄漏 2.在多线程中输出任意值 五.编程题(请在背面作答或者另附纸作答,后2题为可选) 1.对n个数进行排序,要求输出排序前后的结果。 2.编写strcpy 函数。 已知strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串。 (1)不调用C++/C 的字符串库函数,请编写函数 strcpy char *strcpy(char *strDest, const char *strSrc) { while ( *strDest++ = *strSrc++); } (2)strcpy 能把strSrc 的内容复制到strDest,为什么还要char * 类型的返回值? 用作函数嵌套调用 如 trim(strcpy(dest,src)); 3.1~100共一百个自然数,放入一个99个元素的数组a[99],要求写出一个尽量简单的方案,找出没有被放入数组的这个数。 int s ; int r ; s = 0 ; r = 0 ; for (int i = 0 ; i < 99 ; i++) { s = s + a[i]; } r = 5050 - s;
