前言:前几天和人力资源部的去合肥招人,出了笔试题目,笔试、面试和最终签协议全程把关,录取了几个,结果还算满意。
下面是第二天在合肥工业大学的笔试题目:
1、论述C语言中含参数的宏与函数的区别和优缺点(6分)
点评:题目不难,但完全回答对的人其实并不多。
答案:
宏:不进行参数正确性检查,只进行简单的替换工作,占用了大量的空间。
函数:进行参数正确性的效验,占用了大量的时间。
2CC++的结构体有什么区别?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.0VC.NETBC5.1、和GCC答案不尽相同,而所谓的标准答案却和这几个编译器的结果都不同,反倒和C#JAVA的结果相同,因为这两个编译器严格规定了这种运算的先后顺序。我本以为没有人会回答“和编译器相关”,但让我意外的是居然有人就这样回答的,我如获至宝,但最终他的综合能力并不咋喋,还是没招进来。
4HeapStack有什么差别?(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……]请问28126中间那个数是什么?为什么?(8分)
点评:这是道不难的小学数学运算题,但错的人很多,唉,没几个数学学好的。
答案:
63
规律是n^3-1(n为偶数024)
n^3+1(n为奇数135)
8、在操作系统中,什么是死锁?如何解决死锁?(8分)
点评:对死锁的解释答全的不多,解决死锁策略就更没多少人回答对了,操作系统课学好的人还是少啊!
答案:
是两个或多个进程无止境地等候着永远不会成立的条件的一种系统状态
在两个或多个并发进程中,如果每个过程持有某中资源而又都等待着别的进程释放它或他们现在白吃的资源,否则就不能向前推进。
死锁产生原因:⒈系统资源不足⒉进程推进顺序非法
产生死锁的4个必要条件:
①互斥条件②不剥夺条件③部分分配④环路条件
解决死锁策略:
⒈采用静态分配方法来预防死锁(静态预防)
⒉采用有控分配方法来避免死锁(动态避免)
⒊当死锁发生时检测出死锁并设法修复
9、进程和线程的区别是什么?各有什么优点?(10分)
点评:搞不清进程和线程的大有人在,而回答全的就更只有10%。
10SQL试题(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
其中classnamechar类型,scoreinteger类型。
用一条SQL语句查询显示每个班级分数最高的人的班级,名字和分数
点评:这题相当难,我也不指望有人能做出来,主要是看回答的时候SQL语句如何写的,根据情况酌情给分。答案我就不说了,明年再出。
11、如何用两个栈实现一个队列的功能?要求给出算法和思路,可以用文字描述。(15分)
点评:数据结构学得还可以的人应该都没问题,但真正回答对的还不到1/3
答案:
2个栈为A,B, 一开始均为空.
入队:
将新元素push入栈A;
出队:
(1)判断栈B是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B
(3)将栈B的栈顶元素pop出;