笔试题若干,请指点

caterpilarchong 2009-01-02 11:21:15
-------------------------------------------------
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%,则实际传输中平均延迟和延迟变化怎样?
-------------------------------------------------
以上问题,求前辈指点,请讲解的尽量。
...全文
658 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr FF 2009-12-30
  • 打赏
  • 举报
回复
上海的服务器,北京ping那题怎么没人做啊?
hearoequal 2009-01-04
  • 打赏
  • 举报
回复
老子看到第2题就不想看了

老子最TM烦

对类和对象进行 memset的了

上个项目就遇到在构造函数memset this的

老子查BUG查疯了

不是说题出得不好

考察这个很好

只是自己看到不舒服
长安宁 2009-01-04
  • 打赏
  • 举报
回复
9、
一共有1G的内存,win32操作系统,现在操作系统已经扎据内存512M,问还可以分配给应用程序多少内存?
由于系统是32位的,至少,16位的程序,不能够运行,所以 得减去 2^16=64k的内存用不了;
elegant87 2009-01-04
  • 打赏
  • 举报
回复
第一题就是汇编语言中那个逻辑左移和右移!
左移相当于除以2;
右移相当于乘以2
BeHardOnSelf 2009-01-04
  • 打赏
  • 举报
回复
mark
sungoco2 2009-01-04
  • 打赏
  • 举报
回复
mark
dumeifang 2009-01-04
  • 打赏
  • 举报
回复
楼主输出结果不一样我才觉得奇怪呢~
dumeifang 2009-01-04
  • 打赏
  • 举报
回复
第一题我运行了一下
输出的结果是一样的呀!
-128 -128
-64 -64
dghh159 2009-01-04
  • 打赏
  • 举报
回复
马克。
kingsomg 2009-01-04
  • 打赏
  • 举报
回复
mark
waguju 2009-01-04
  • 打赏
  • 举报
回复
学习了
tianjiao85 2009-01-04
  • 打赏
  • 举报
回复
mark ,以后看。
就呆在云上 2009-01-03
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 yangkunhenry 的回复:]
第10题
C/C++ code
#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *p=new char[10*1024*1024];
long len=_msize(p);
cout<<"p allocate memory "<<len<<endl; //10M
delete []p;
char *q=(char*)malloc(10*1024*1024);
len=_msize(q);
cout<<"q allocate memory "<<len<<end…
[/Quote]


终于有人说出了10m了,40m无稽之谈!
jixingzhong 2009-01-03
  • 打赏
  • 举报
回复
1 请区分算术移位和逻辑移位
caterpilarchong 2009-01-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hairetz 的回复:]
2  为什么能正常输出,但程序却要崩溃?或者既然程序崩溃,为什么还能正常输出?
你在析构函数前delete了,析构函数没执行到哦。
[/Quote]
析构函数里并没有显示的去释放任何资源呀?
我觉得4楼和15楼说的比较有道理,我也这么认为
只是有一点没有考虑透彻,就是15楼说的如果不是虚函数,将放在全局区域

————————————————————
谢谢您帮我考虑!
caterpilarchong 2009-01-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hairetz 的回复:]
1.  01000000乘以2和右移1位有什么区别,请详细解释
没有区别,你这样打印printf(“\n%d---- %d”,ch1,ch2); 加多个空格久能看出是一样了.

[/Quote]
还是有区别的,
我运行程序的输出结果是
-128 128
-64 64
所以我问,为什么
char类型的01000000
乘以2

左移2位
然后
以%d输出,会得出不同的结果
————————————
谢谢您帮我考虑!
caterpilarchong 2009-01-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tangshuiling 的回复:]
关于第一题我的说两句了,不管是面试的有意还是搂主的无心,这种迷惑自己的程序本来就是一种蛊惑,----和-号融合在一起纯属欺骗的性质
-128 -128就是正确的答案,只不过后面的-号和----融合了,下面的答案一样
[/Quote]
中间的----是我添加的,是为了把输出结果分隔开,没想到到出了乱子
我的问题的主旨是:
为什么程序会输出
-128 128
-64 64
(这是我运行程序得到的结果)
————————————
感谢您帮我考虑!
yndfcd 2009-01-03
  • 打赏
  • 举报
回复
这些题目完全都是垃圾:

看下面的这两题
11、
静态库a.lib中定义一个全局变量x。b.exe和c.dll都访问a.lib。b.exe先把a.lib中的x设置为1,接着c.dll读取a.lib的x,则读取的值为多少?
-------------------------------------------------
1.啥叫b.exe和c.dll都访问a.lib?是访问保存在磁盘上的a.lib文件吗?
2.静态库不是可以加载到内存中运行的程序,它里面只包括供编译器链接程序时的一些信息,那么,我要问下出题者,啥叫把a.lib中的x设置为1?如果他说的磁盘上的文件,那么可能跟本没有一个叫做x的变量在里面,怎么设置1呀?
3.就算,出题者说的x是指从.lib文件中链接到exe或dll中的变量,那么这个.lib中的代码是由哪个模块来加载的呢?都没有说清楚。

12、
c.dll又一个全局变量x=1。现在a.exe先访问c.dll,并把x设为0,接着b.exe又读取x,则读取的值是多少?
又是这种东西,按题目的意思,x的值绝对应该是1.为什么不是1,有任何理由能证明x变化过吗?如果你说不是1,那只能说明你所访问的x不是c.dll中x。

可能题目的本来意是说,两个exe都加载同一个dll。但是,他都没有必要的一些条件说清楚,还要故作高深,拿个自己都没有理解的东西来考别人,只能说很肤浅。

这个垃圾题目,不看也罢。
naziace 2009-01-03
  • 打赏
  • 举报
回复
pass
hityct1 2009-01-03
  • 打赏
  • 举报
回复
我的答案,欢迎批评

1)char 表示范围-128 ~ 127,溢出为-128
2)将虚拟函数表的指针也给写了,导致delete p;出错。
vc6.0下:sizeof(A)=8,如果析构函数去掉 virtual,sizeof(A)=4
3)多态
4)
不懂
5)my name is [一个随机数]
不知道printf的具体实现。
6)C
++x等价于 x=x+1 汇编有Add,Push两个命令;x++类似
7)A
8)sprintf
其他两个需要较慢的io操作
9)2G? 加上虚拟内存
10)
char *p = new char[10*1024*1024]; //10mb
char *q = (char*)malloc(10*1024*1024); //20mb
memset(p,0,10*1024*1024); //20mb
memset(q,0,10*1024,1024); //20mb

11)0
全局变量默认初始为0,进程间一般不共享空间,copy on write
12)1
进程间一般不共享空间,copy on write
13)?
可能一直等待?哪位解释解释。
14)?
不懂
加载更多回复(42)

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧