笔试题若干,请指点
-------------------------------------------------
1、下面程序输出结果是什么?
void main(){
char ch1 = 64;
char ch2 = 64;
ch1 *= 2;
ch2 <<= 1;
printf(“\n%d----%d”,ch1,ch2);
ch1 /= 2;
ch2 >>= 1;
printf(“\n%d----%d”,ch1,ch2);
}
答案:
-128----128
-64----64
疑惑:
01000000乘以2和右移1位有什么区别,请详细解释
-------------------------------------------------
2、
#include <stdio.h>
#include <string.h>
class A{
public:
A(){m_a = 5;}
virtual ~A(){}
void print(){printf("\na \t%d",m_a);}
protected:
int m_a;
};
int main(){
A *p = new A;
memset(p,0,sizeof(A));
p->print();
delete p;
return 0;
}
答案:
程序输出:a 0
程序最后崩溃。
疑惑:
为什么能正常输出,但程序却要崩溃?或者既然程序崩溃,为什么还能正常输出?
-------------------------------------------------
3、
#include <stdio.h>
class A{
public:
void func(){
print();
}
virtual void virtualFunc(){
print();
}
virtual void print(){
printf("\nAAAAAAA");
}
};
class B : public A{
public:
virtual void virtualFunc(){
print();
}
virtual void print(){
printf("\nBBBBBBBB");
}
};
int main(){
B *pb = new B;
A *pa = pb;
pa->func();
pa->virtualFunc();
pb->func();
pb->virtualFunc();
return 0;
}
输出结果:
BBBBBBBB
BBBBBBBB
BBBBBBBB
BBBBBBBB
疑惑:
func()不是虚函数,为什么pa->func()调用的是B的print();
-------------------------------------------------
4、
#include <stdio.h>
void func(int a, int *p){
int c;
printf("\n&a\t=\t%p\n&p\t=\t%p\np\t=\t%p\n&c\t=\t%p",&a,&p,p,&c);
}
int main(){
int a=0,b=0;
func(a, &b);
return 0;
}
比较&a,&p,p,&c的大小
答案:
p>&p>&a>&c
&a = 0012FF24
&p = 0012FF28
p = 0012FF78
&c = 0012FF18
疑惑:
除了栈的生长方向,应该还考变量定义的顺序,是不是?请把详细过程解释一下?顺便说说栈生长方向的问题(上下哪头是大地址)。
-------------------------------------------------
5、
#include <stdio.h>
#include <string.h>
int main(){
int age = 22;
char *name = "my name is ";
printf("%s%d",name);
return 0;
}
答案:
my name is [一个随机数]
疑惑:
%d所取的是不是地址0的数据?不是的话,那这个随机数怎么来的,机理是什么,请解释。
-------------------------------------------------
6、
全局变量 int x, 多线程操作下不需要线程锁进行同步的操作是:
a、++x b、x++ c、x=0
答案:
不知道。
疑惑:
请解释,最好把机理说说,我没有多线程的经验,只曾纸上谈兵
-------------------------------------------------
7、
同一个进程的现线程不共享的是:
a、栈 b、静态变量 c、全局变量 d、new出的新对象 e、代码段
答案:
不知道。
疑惑:
我想选a,可又舍不得d,题目是单选啊。到底哪一个?请给出答案,并解释。
-------------------------------------------------
8、
printf,fprintf,sprintf哪一个执行的最快?
答案:
不确定。
疑惑:
我选printf,我的理解是,sprintf要写内存,fprintf写内存,还要写回磁盘,而printf直接输出显示。
-------------------------------------------------
9、
一共有1G的内存,win32操作系统,现在操作系统已经扎据内存512M,问还可以分配给应用程序多少内存?
答案:
不确定。
疑惑:
请给出答案,并给出理由。(依据是32位的寻址孔家的大小,还是操作系统分配的交换区的大小。若为后者,交换区怎么分配,请解释。或者还有其他依据?)
-------------------------------------------------
10、
char *p = new char[10*1024*1024];
char *q = (char*)malloc(10*1024*1024);
memset(p,0,10*1024*1024);
memset(q,0,10*1024,1024);
问:四个语句四个阶段,每个阶段执行后,操作系统分配的内存数量是多少?
-------------------------------------------------
11、
静态库a.lib中定义一个全局变量x。b.exe和c.dll都访问a.lib。b.exe先把a.lib中的x设置为1,接着c.dll读取a.lib的x,则读取的值为多少?
-------------------------------------------------
12、
c.dll又一个全局变量x=1。现在a.exe先访问c.dll,并把x设为0,接着b.exe又读取x,则读取的值是多少?
-------------------------------------------------
13、
阻塞的socket,不设置任何选项,在接收数据过程中,对方掉电,则结果怎样?
-------------------------------------------------
14、
上海的服务器,北京ping,ping的平均延迟是200ms,丢包率是5%,则实际传输中平均延迟和延迟变化怎样?
-------------------------------------------------
以上问题,求前辈指点,请讲解的尽量。