搜索
您的当前位置:首页笔试答案及评分标准

笔试答案及评分标准

来源:智榕旅游
第一部分 Unix/Linux

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( id char(12) NOT NULL, sex char(1), name varchar2(60), departmentid char(8), address varchar2(60), birthdate date, postcode char(8),

salary char(17), workdate date,

remark varchar2(60), 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的员工信息。

DELETE FROM employee WHERE id = ‘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.>>执行移动 B. >>执行翻转

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 B.0—65535 C.-256—255 D.-32768—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 )关于线程设计,下列描述正确的是(多选) A. 线程对象必须实现Runnable接口

B. 启动一个线程直接调用线程对象的run()方法 C. Java提供对多线程同步提供语言级的支持 9.( A )Java I/O程序设计中,下列描述正确的是 A. OutputStream用于写操作 B. InputStream用于写操作

C. I/O库不支持对文件可读可写API 10.( A B )下列描述中,那些符合Java语言的特征(多选) A. 支持跨平台(Windows,Linux,Unix等) B. GC(自动垃圾回收),提高了代码安全性 C. 支持类C的指针运算操作

D. 不支持与其它语言书写的程序进行通讯 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. 异常可以随便处理,而不是抛给外层的程序进行处理

二、是非题(判断写法是否正确,如果错误,请指名具体错误)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 {

15分)(

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 { private int count = 0; public static void main(String[] args) {

ThreadTest test = new ThreadTest(); Thread thd = new Thread(test); thd.start(); try { thd.join(); } catch(InterruptedException e) { e.printStackTrace(); } System.out.println(\"over\"); } public void run() { while(count++ < 10) { System.out.println(\"hello world\"); try { Thread.sleep(10000); } catch(InterruptedException e) { break; } } } }

2.写一个接口,包含 public String doTest(Object obj) 这个方法,然后再写一个类并实现这个接口。(10分)

public interface MyInterface { public String doTest(Object obj); }

public class Myimpl implements MyInterface { public String doTest(Object obj) { if (obj instanceof byte[]) { return new String((byte[])obj); } else { return obj.toString(); } } }

五、附加题(请在背面作答或者另附纸作答)

1.写一个Singleton出来,保证这个类只有一个实例。(10分) public class SingletonTest { static SingletonTest sng; static Object obj; private String prtData; public static SingletonTest getInstance() { if (sng != null) { synchronized(obj) { if (sng != null) { sng = new SingletonTest(); } }

} return sng; } private SingletonTest() { prtData = \"***\"; } }

2.1~100共一百个自然数,放入一个99个元素的数组a[99],要求写出一个尽量简单的方案,找出没有被放入数组的这个数。(10分) public int find(int[] arr) { byte[] tag = new byte[arr.length]; for (int i = 0; i < arr.length; i++) { if (arr[i] > arr.length - 1 || arr[i] <= 0) { throw new IllegalArgumentException(); } tag[arr[i] - 1] = 1; } for (int i = 0; i < tag.length; i++) { if (tag[i] != 1) { return i + 1; } } return -1; }

第四部分 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)

C89 编译器

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 “filename.h” 有什么区别? #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优点: 优点: 在循环中condition发生变化,会调用 逻辑严谨,没有实时运行的歧义 不同的方法。冗余代码少。

缺点: 缺点: For中加if效率低,condition会产生 冗余代码多。 歧义效果

四、思考题

1.void GetMemory(char *p) char *GetMemory(void) { { p = (char *)malloc(100); char p[] = \"hello world\"; } return p; void Test(void) } { void Test(void) char *str = NULL; { GetMemory(str); char *str = NULL; strcpy(str, \"hello world\"); str = GetMemory(); printf(str); printf(str); } } 请问运行Test 函数会有什么样的结果? 请问运行Test 函数会有什么样的结果? 答: 答: 1段错误(Segmentation fault) 任意值,取的是临时栈地址 2内存溢出

Void GetMemory2(char **p, int num) void Test(void) { { *p = (char *)malloc(num); char *str = (char *) malloc(100); } strcpy(str, “hello”); void Test(void) free(str); { if(str != NULL) char *str = NULL; { GetMemory2(&str, 100); strcpy(str, “world”); strcpy(str, \"hello\"); printf(str); printf(str); } } } 请问运行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++) { }

r = 5050 - s;

s = s + a[i];

因篇幅问题不能全部显示,请点此查看更多更全内容

Top