校园招聘笔试题(B卷)

 
前言:前几天和人力资源部的去合肥招人,出了笔试题目,笔试、面试和最终签协议全程把关,录取了几个,结果还算满意。
下面是第二天在合肥工业大学的笔试题目:
1 、论述 C 语言中含参数的宏与函数的区别和优缺点( 6 分)
点评:题目不难,但完全回答对的人其实并不多。
答案:
宏:不进行参数正确性检查,只进行简单的替换工作,占用了大量的空间。
函数:进行参数正确性的效验,占用了大量的时间。
2 C C++ 的结构体有什么区别? C++ 中的类与结构体有什么区别?( 10 分)
第二个问题出得比较多,第一个出得不多。几十份卷子回答对的没几个,让我感到很失望。
答案:
C++ 中的结构体能够定义方法,继承和重载, C 语言中的不可以。
②结构体中的成员缺省是 public 的,而类中的成员缺省是 private 的,这是 C++ 中唯一的区别
3 、以下 C 程序, j 的最终结果是多少?( 6 分)
int i=1;
int j;
j=(++i)+(++i) +(i++)+(i++)+(++i);
点评:是 moto 曾经出过的题目,其实不难,一般 C 语言学得不差的都知道。但有一点要注意的是,其实标准答案并不对,因为 C 语言中并没有规定这种运算的先后顺序,所以不同编译器的答案不同, VC6.0 VC.NET BC5.1 、和 GCC 答案不尽相同,而所谓的标准答案却和这几个编译器的结果都不同,反倒和 C# JAVA 的结果相同,因为这两个编译器严格规定了这种运算的先后顺序。我本以为没有人会回答“和编译器相关”,但让我意外的是居然有人就这样回答的,我如获至宝,但最终他的综合能力并不咋喋,还是没招进来。
4 Heap Stack 有什么差别?( 8 分)
点评:很多人把 Heap 回答成 List 的特性了,什么先进先出,莫名其妙。
答案:
Heap 在程序中是用 malloc 函数分配的,需要手动清除。 Stack 是由程序自动分配、自动清除的。
5 、详细说明 TCP 建立连接的三次握手过程。( 10 分)
点评:大致的过程 90 %的人都知道,但真正把第一次握手发送的内容回答对的寥寥无几。
6 、请写出下面 C 语言程序的输出( 7 分)
int Calc(int iValue)
{
  static int iSum,iCount;
  iSum += iValue;
  iCount ++ ;
  return iSum/iCount;
}
int main()
{
  int iInput=Calc(Calc(3));
  printf("Calc(Calc(3))=%d",iInput);
  return 0;
}
点评:题目不难,也是网新出过的, 70 %的人回答对了,是 3
7 、一个数列 [-1,2,7,28,_ ,126 …… ] 请问 28 126 中间那个数是什么?为什么?( 8 分)
点评:这是道不难的小学数学运算题,但错的人很多,唉,没几个数学学好的。
答案:
63
规律是 n^3-1( n 为偶数 0 2 4)
n^3+1( n 为奇数 1 3 5)
8 、在操作系统中,什么是死锁?如何解决死锁?( 8 分)
点评:对死锁的解释答全的不多,解决死锁策略就更没多少人回答对了,操作系统课学好的人还是少啊!
答案:
是两个或多个进程无止境地等候着永远不会成立的条件的一种系统状态
在两个或多个并发进程中,如果每个过程持有某中资源而又都等待着别的进程释放它或他们现在白吃的资源,否则就不能向前推进。
死锁产生原因:⒈系统资源不足⒉进程推进顺序非法
产生死锁的 4 个必要条件:
①互斥条件②不剥夺条件③部分分配④环路条件
解决死锁策略:
⒈采用静态分配方法来预防死锁(静态预防)
⒉采用有控分配方法来避免死锁(动态避免)
⒊当死锁发生时检测出死锁并设法修复
9 、进程和线程的区别是什么?各有什么优点?( 10 分)
点评:搞不清进程和线程的大有人在,而回答全的就更只有 10 %。
10 SQL 试题( 12 分)
表名: test
class
name
score
1
a
75
1
b
91
1
c
54
2
d
66
2
e
75
2
f
39
2
g
42
3
h
23
3
i
98
3
j
85
其中 class name char 类型, score integer 类型。
用一条 SQL 语句查询显示每个班级分数最高的人的班级,名字和分数
点评:这题相当难,我也不指望有人能做出来,主要是看回答的时候 SQL 语句如何写的,根据情况酌情给分。答案我就不说了,明年再出。
 
 

drop table test

create table test
(class char(2) not null,
 name  char(10) not null,
 score int
)


insert into test values('1','a','75');
insert into test values('1','b','91');
insert into test values('1','c','54');
insert into test values('2','d','66');
insert into test values('2','e','75');
insert into test values('2','f','39');
insert into test values('2','g','42');
insert into test values('3','h','23');
insert into test values('3','i','98');
insert into test values('3','j','85');

 

select * from test where class ='1'  and score in (
select max(score) from test where class ='1' ) 
union
select * from test where class ='2'  and score in (
select max(score) from test where class ='2' )  
union
select * from test where class ='3'  and score in (
select max(score) from test where class ='3' ) 

 
 
 
 
 
11 、如何用两个栈实现一个队列的功能?要求给出算法和思路,可以用文字描述。( 15 分)
点评:数据结构学得还可以的人应该都没问题,但真正回答对的还不到 1/3
答案:
2 个栈为 A,B, 一开始均为空 .
入队 :
将新元素 push 入栈 A;
出队 :
(1) 判断栈 B 是否为空;
(2) 如果不为空,则将栈 A 中所有元素依次 pop 出并 push 到栈 B
(3) 将栈 B 的栈顶元素 pop 出;

你可能感兴趣的:(软件测试面试题)