面试题目 VC(c++)
1 dll,lib处理实现 .lib文件中包含什么? dll在内存中被多个函数共享,有几个拷贝?
2 template<double>,template<int>等编译的时候作为几个类
3 struct ,class的区别,联系
4 MAcro,inline区别,实现.编译运行时
5 进程与线程区别
6 hdc-cdc区别联系
7 model dialog,modeless dialog,从创建到销毁全过程具体描述
8 各个线程new的内存,别的线程是否可以使用?
9 RUNTIME_CLASS, is what??
问题点数:100、回复次数:50Top
1 楼orbit(走了走了)回复于 2005-10-26 12:49:43 得分 2
不会还是和大家分享?Top
2 楼teli_eurydice(哭泣的仙人掌。。。。)回复于 2005-10-26 12:53:27 得分 2
upTop
3 楼i_noname(晚九朝五)回复于 2005-10-26 13:00:07 得分 2
这个面试看来我可以通过了Top
4 楼AntonlioX(做人要厚道)回复于 2005-10-26 13:02:48 得分 0
shareTop
5 楼AntonlioX(做人要厚道)回复于 2005-10-26 13:05:33 得分 0
是我前面在网上看到的autodesk面试题Top
6 楼AntonlioX(做人要厚道)回复于 2005-10-26 13:05:47 得分 0
赫赫Top
7 楼Jarrylogin(正经事情我不会,歪门邪道样样行)回复于 2005-10-26 13:25:17 得分 2
UP, 汗,寻求答案Top
8 楼kenskens(☆☆☆☆☆☆)回复于 2005-10-26 13:29:43 得分 2
只会一半,唉,看来还要努力!Top
9 楼lichaowang()回复于 2005-10-26 13:35:22 得分 2
呵呵,楼主最好把答案也列出来。有些概念比较模糊Top
10 楼angel_rabbit(zj_rabbit)回复于 2005-10-26 13:39:33 得分 2
studying..Top
11 楼pomelowu(羽战士)回复于 2005-10-26 13:44:23 得分 2
:)还是比较基础的Top
12 楼holyeagle(一杯清茶)回复于 2005-10-26 14:26:50 得分 10
1 dll,lib处理实现 .lib文件中包含什么? dll在内存中被多个函数共享,有几个拷贝?
简单说,lib里面只有符号,dll里面才是具体的实现.dll在内存中被函数共享有几个拷贝??比较奇怪的问题,dll是在进程空间,所以每个进程有一份dll的copy,可以用GetModuleHandle去判断是否dll已经被load进进程地址空间.
2 template<double>,template<int>等编译的时候作为几个类
如果没有记错,是两个.模板都是编译时产生代码,所以会出现两个类.如果程序中的类型较多,就会展开比较大的代码,但是速度会快.
3 struct ,class的区别,联系
只是成员变量或者函数默认的属性,struct默认是public,class是private
4 MAcro,inline区别,实现.编译运行时
准确来说,内联要更加安全.使用内联,参数需要精确地进行一次求值,参数类型被检查,并且被正确地进行必要的转换,避免了宏的一些问题.也方便调试.简单说,内联更加像函数.
5 进程与线程区别
很多书上都有介绍,一般来说,进程是不活泼的,是线程的容器;线程是在进程里面创建的,执行代码的.
6 hdc-cdc区别联系
cdc是一块空间,保存一定的数据,hdc是放在进程的句柄表里面,用来标示所代表的cdc的
7 model dialog,modeless dialog,从创建到销毁全过程具体描述
模式的是CDialog的DoModal调用CreateIndirect创建对话框,然后通过一个循环自己处理消息的分发;无模式的是通过create创建,类似于一般窗口
8 各个线程new的内存,别的线程是否可以使用?
不可以,因为线程new的空间是在自己的进程空间,别的进程是得不到的.
9 RUNTIME_CLASS, is what??
建议看一下深入浅出mfc
有些地方只是自己的想法,楼下继续,呵呵
Top
13 楼nkwesley(江南丝竹)回复于 2005-10-26 14:42:12 得分 2
看看,研究下Top
14 楼yjjbmk(天涯浪人(软件设计师))回复于 2005-10-26 14:43:56 得分 3
问:
1. .lib文件中包含什么?dll在内存中被多个函数共享,有几个拷贝?(是否只有一个拷贝?)
2。template<double>,template<int>等编译的时候作为几个类(是否作为1个类?)
4. MAcro,inline区别,实现.编译运行时?
8.各个线程new的内存,别的线程是否可以使用?
这几个问题没有把握,或者不会望各位大侠指点。
Top
15 楼pomelowu(羽战士)回复于 2005-10-26 15:26:53 得分 10
8 各个线程new的内存,别的线程是否可以使用?
不可以,因为线程new的空间是在自己的进程空间,别的进程是得不到的.
清茶把题目审错了。呵呵~Top
16 楼xqk(夏乾坤)回复于 2005-10-26 15:50:34 得分 0
一杯清茶,在下对您的景仰就像滔滔江水,连绵不绝!Top
17 楼AntonlioX(做人要厚道)回复于 2005-10-26 15:54:20 得分 0
漏贴了一题
10 How to do " Multiple view with one doc? Multiple doc with one view???"Top
18 楼xiao_xiao_zi(笑小子)回复于 2005-10-26 16:08:11 得分 1
面试应届毕业生的吧?
都是基础题和概念题Top
19 楼phoenix96_2000(Arcrest)回复于 2005-10-26 16:09:25 得分 9
1. 这里讲得很详细http://www.microsoft.com/china/community/program/originalarticles/techdoc/dll.mspx
5 进程与线程区别: 最主要: 线程是执行代码的,CPU调度的单元,进程是个资源的容器
8. 同一进程内的线程之间共享进程的地址空间和所有资源Top
20 楼kulongus(公司会计说:零钱太少了,你还是半年领一次工资吧)回复于 2005-10-26 16:37:34 得分 2
一杯清茶,在下对您的景仰就像滔滔江水,连绵不绝!Top
21 楼nZAI(喃样)回复于 2005-10-26 16:47:17 得分 6
我感觉很多面试题目的确有模棱两可的解释,我就遇到过,不过我想这可能也是用人单位的一种策略吧,只有答案不一致才不容易抄袭,更容易区分吧Top
22 楼wangrb(阿布)回复于 2005-10-26 16:51:27 得分 1
要学习东西还很多Top
23 楼Featured(我握着爱情的门票静静排队……)回复于 2005-10-26 16:55:48 得分 10
清茶讲得挺好挺全了,但我想探讨两点:
1 dll并不是拷贝到每一个调用者的进程空间,而是只在内存中保留一份拷贝。通过引用计数的方式控制其卸载。
但是dll中的全局变量是要被拷贝到每一个调用者的进程空间的
2 对于第八题,new的内存是在系统中的,虽然它会随着创建进程的消失而被自动回收,但是,还是可以将指针作为参数传递给别的线程或者进程,虽然这种做法不被推荐使用。
但是,如果如本题所说,在同一个进程种的线程,是否可以传递堆的指针,我觉得是可以的,而且没有风险。
Top
24 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-10-26 17:12:46 得分 2
清茶好久不见了啊Top
25 楼jiang_xiao(原来秋天)回复于 2005-10-26 21:57:10 得分 0
markTop
26 楼advancedchan(try)回复于 2005-10-27 09:51:08 得分 3
9:RUNTIME_CLASS returns a pointer to a CRuntimeClass structure for the class specified by class_name. Only CObject-derived classes declared with DECLARE_DYNAMIC, DECLARE_DYNCREATE, or DECLARE_SERIAL will return pointers to a CRuntimeClass structure.
Top
27 楼holyeagle(一杯清茶)回复于 2005-10-27 09:57:13 得分 5
呵呵,那个new看错题目了,惯性思维,嘿嘿.
to Featured,
thanks 你的提醒,呵呵.关于dll,代码是放到了RAM中,其他进程都可以通过静态或者动态映射到其地址空间,共享该分页,任何对该dll的使用会引起计数器加一.之前和hookapi有点混了.
那个指针传递给别的进程,好像不能直接用.必须分配的空间是在别的进程,这样的指针在别的空间才用效,好像要用到VirtualAllocEx分配虚拟空间,对于进程间的WM_SetText这类消息,指针里面的数据也是被复制到了对应进程的空间才有效,呵呵.举个例子,a空间里面的0x12345678标示字符串"ABC",但是b空间0x12345678也许是"efg",所以a给b里面传这个指针是不能用的.但是同一个进程里面的线程是可以使用别的线程分配的空间的.
对于第十个问题,是Doc/view框架里面的,可以通过设定view和doc之间的映射,那个单文档多视图做过,不过单视图多文档没有做过,可能需要动态调整各个文档在视图里面的位置吧,没有实践就没有发言权,就此打住,哈哈.
我是经常来的,不过只是在费技术里面灌水,哈哈...有点小无耻,bs一下自己
Top
28 楼gao_ming77(小明)回复于 2005-10-27 10:07:09 得分 0
8回答错了。对于在堆上和全局栈上分配的内存是所有线程共享的,当然都能访问啦。
6也不是太准确。hdc是windows分配的GDI对象的句柄,属于内核对象。而CDC只是MFC的类,是对windows内核的封装。CDC还提供了一系列方便的函数。Top
29 楼yyxc306()回复于 2005-10-27 10:17:03 得分 0
nan
Top
30 楼Aspist(边城浪子)回复于 2005-10-27 10:29:25 得分 0
简单说,lib里面只有符号,dll里面才是具体的实现.
-----------------------------------------------
这句话也有问题,lib有两种,你说的是其中的一种。还有一种静态连接的Lib,里面既有符号也有实现。传统的c/c++里面的运行时库都是这种情况。Top
31 楼mywand(简单生活)回复于 2005-10-27 10:55:16 得分 0
呵呵,不错,有收获!Top
32 楼yayaniuniu502(老唐)回复于 2005-10-27 11:13:42 得分 0
好东西Top
33 楼holyeagle(一杯清茶)回复于 2005-10-27 11:49:37 得分 0
GDI对象不属于内核对象,cdc是对显示设备的属性的封装,内核对象可以存在的比创建他的进程时间长,但是GDI对象好像不(这点有点忘了),GDI对象和内核对象的储存地方也不一样.
对了静态lib,其实在连接的时候,已经把lib里面的代码插入到了调用程序里面,所以,静态连接的文件较大.CRT库应该不一样,它的dll已经提供给了系统,这点我还要再去学习,呵呵.吃饭了Top
34 楼hdqqq(小西瓜)回复于 2005-10-27 13:16:19 得分 0
都一颗星了,这种问题应该不会很难吧. 看来,我也可以去autodesk 了.Top
35 楼pottichu(拉拉是头猪)回复于 2005-10-27 13:22:58 得分 0
只会一半。回去继续努力。Top
36 楼Featured(我握着爱情的门票静静排队……)回复于 2005-10-27 13:28:29 得分 0
那个指针传递给别的进程,好像不能直接用.必须分配的空间是在别的进程,这样的指针在别的空间才用效,好像要用到VirtualAllocEx分配虚拟空间,对于进程间的WM_SetText这类消息,指针里面的数据也是被复制到了对应进程的空间才有效,呵呵.举个例子,a空间里面的0x12345678标示字符串"ABC",但是b空间0x12345678也许是"efg",所以a给b里面传这个指针是不能用的.但是同一个进程里面的线程是可以使用别的线程分配的空间的.
===
正解Top
37 楼Featured(我握着爱情的门票静静排队……)回复于 2005-10-27 13:40:35 得分 0
回答这类问题,第一个回答的难,后面的人挑刺和完善相对简单Top
38 楼wzhystar(毛毛雨)回复于 2005-10-27 14:23:29 得分 0
清茶好厉害!
顶!
学到不少知识!
Top
39 楼holyeagle(一杯清茶)回复于 2005-10-27 15:31:03 得分 7
嘿嘿,大家高抬我来,我也是一知半解,差的好远,对这些看上去很基础的东西理解的模棱两可,模模糊糊,其实这还是基本功太差.
一起学习,在批判中学习会更快,在教训里面提高,哈哈.
后面大家继续完善,观看中....
Top
40 楼vagrantman(流浪者)回复于 2005-10-27 15:40:06 得分 0
我也过来学习学习Top
41 楼WuOu(天堂*蓝珀湖*仰音*诚彦)回复于 2005-10-27 17:06:09 得分 0
MarkTop
42 楼waterczh(三十年河东三十年河西,我TMD是掉到河里了)回复于 2005-10-27 21:20:10 得分 1
我怎么连答案都看的不是很懂
markTop
43 楼42252343(大跃进的猪)回复于 2005-10-27 22:33:18 得分 1
看来 holyeagle(一杯清茶) 对Win32 sdk和MFC还不是很熟悉啊 呵呵Top
44 楼wenyongjie(我们的目标是:没有蛀牙!!)回复于 2005-10-27 23:17:55 得分 1
看来俺 要从基础学起Top
45 楼AntonlioX(做人要厚道)回复于 2005-10-31 22:35:15 得分 0
upTop
46 楼J3ames(挪威的森林)回复于 2005-10-31 23:00:27 得分 0
真是感受良多啊,以后每天都来看看Top
47 楼freebird001(自由鸟)回复于 2005-11-03 13:41:03 得分 0
带星的水平就是高!Top
48 楼dragonfly001(I want to fly!)回复于 2005-11-03 13:46:09 得分 0
模糊中....:(Top
49 楼xqk(夏乾坤)回复于 2005-11-03 13:55:06 得分 0
呱唧呱唧Top
50 楼bobob(静思)回复于 2005-11-03 15:25:48 得分 10
那个指针传递给别的进程,好像不能直接用.必须分配的空间是在别的进程,这样的指针在别的空间才用效,好像要用到VirtualAllocEx分配虚拟空间,对于进程间的WM_SetText这类消息,指针里面的数据也是被复制到了对应进程的空间才有效,呵呵.举个例子,a空间里面的0x12345678标示字符串"ABC",但是b空间0x12345678也许是"efg",所以a给b里面传这个指针是不能用的.但是同一个进程里面的线程是可以使用别的线程分配的空间的.
===========》
这个说的是进程间的概念,题目问的是线程。从技术角度讲,线程之间谁new的东西别的线程(必须属于同一个进程)都可以使用,甚至delete,但是不提倡delete不是自己new的东西。
羽战士已经提醒了,清茶把题目审错了~~呵呵
hdc-cdc区别联系
这个题目完全可以等同于hwnd和cwnd区别和联系。hxx就是xx的句柄,几乎所有的api都是针对句柄操作的;cxx就是把几乎所有关于hxx的api封装成一个类,方便使用而已。所以,从这个角度讲,有了hxx,一定能够构造cxx,但是反过来不行。
大家继续
Top




