MFC面试题
VCMFC试题复习题及答案

《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为( B )A、2B、3C、4D、52、对于类中定义的成员,其隐含访问权限为( B )A、protectedB、privateC、publicD、static3、一个类的友元函数或友元类能够通过成员操作符访问该类的( B )A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确的是(A )A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、下列语句的运行结果为( D )#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB的缺省构造函数和析构函数是( A )A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数的隐含类型是( A )A、intB、doubleC、voidD、char8、已知类A是类B的友元,类B是类C的友元,则( D )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下列说法中正确的是( B )A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员10、以下不属于成员函数的是( B )A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列的描述正确的是( D )A、在Windows中只有一个消息系统,即系统消息队列。
七个模块面试题目(3篇)

第1篇一、基础知识模块1. 请简述TCP/IP协议栈的主要组成部分及其功能。
2. 解释HTTP协议中的GET和POST方法的主要区别。
3. 描述数据库事务的ACID特性。
4. 请列举三种常见的排序算法及其时间复杂度。
5. 什么是缓存?简述缓存的作用和常见类型。
6. 解释什么是单例模式,并给出一个实现示例。
7. 请简述面向对象编程的三种基本特性。
二、编程能力模块1. 编写一个函数,实现将字符串中的数字替换为对应字符的ASCII码。
2. 编写一个函数,实现冒泡排序算法。
3. 编写一个函数,实现斐波那契数列的前N项。
4. 编写一个函数,实现判断一个整数是否为素数。
5. 编写一个函数,实现将一个整数转换为罗马数字。
6. 编写一个函数,实现两个栈的合并。
7. 编写一个函数,实现链表的逆序。
三、操作系统模块1. 解释进程和线程的区别。
2. 请简述操作系统中内存管理的几种常见算法。
3. 描述操作系统中文件系统的基本概念和原理。
4. 解释什么是死锁,并给出一个死锁的例子。
5. 请简述操作系统中进程调度算法的工作原理。
6. 解释虚拟内存的概念及其作用。
7. 描述操作系统中I/O管理的几种常见方法。
四、计算机网络模块1. 解释TCP和UDP协议的区别。
2. 描述DNS的工作原理。
3. 解释什么是防火墙,并简述其作用。
4. 请简述HTTP协议中的HTTPS工作原理。
5. 描述TCP三次握手和四次挥手的过程。
6. 解释什么是IP地址,并简述IPv4和IPv6的区别。
7. 描述DNS查询的流程。
五、数据库模块1. 描述SQL语句中的DML、DCL和DDL操作。
2. 解释数据库范式,并说明第一范式、第二范式和第三范式。
3. 请简述数据库索引的概念和作用。
4. 描述事务的特性,并解释什么是隔离级别。
5. 解释什么是数据库锁,并说明其作用。
6. 描述数据库的连接池,并说明其作用。
7. 解释什么是数据库分库分表,并说明其作用。
六、软件工程模块1. 解释软件开发生命周期模型,并列举常见的模型。
mfc面试题

mfc面试题MFC(Microsoft Foundation Classes)是微软公司开发的一套C++类库,用于进行Windows应用程序的开发。
MFC面试题主要涉及MFC框架的基本概念、使用方法和相关编程技巧。
以下将以问题和答案的形式介绍几个常见的MFC面试题。
问题1:MFC是什么?它的作用是什么?答:MFC全称为Microsoft Foundation Classes,是微软在VisualC++中提供的一组类库。
它的作用是封装了Windows操作系统的API,简化了Windows应用程序的开发过程。
通过使用MFC,开发人员可以更加方便地创建图形界面、响应用户操作和调用系统功能。
问题2:MFC的架构是怎样的?答:MFC的架构可以分为三层:应用程序层、框架层和操作系统层。
应用程序层是开发人员编写的具体应用程序代码,包括窗口类、对话框类、消息处理函数等。
框架层是MFC提供的类库,包括CWinApp、CFrameWnd、CView等类,用于管理应用程序的生命周期、创建主窗口、处理消息等。
操作系统层是Windows操作系统提供的API,MFC通过封装这些API,以提供更高层次的抽象和易用性。
问题3:如何创建一个MFC应用程序?答:创建MFC应用程序的步骤如下:1. 打开Visual Studio,选择创建新项目。
2. 选择Visual C++ -> MFC -> MFC应用程序。
3. 输入项目名称,选择保存位置,点击确定。
4. 在向导中选择应用程序类型(单文档、多文档、对话框等)、界面风格和其他选项。
5. 点击完成,Visual Studio将自动生成一个基本的MFC应用程序框架。
问题4:如何处理MFC中的消息?答:MFC中的消息处理通过消息映射表和消息处理函数完成。
首先,需要在类声明中使用`DECLARE_MESSAGE_MAP()`宏来声明消息映射表。
然后,在类实现中使用`BEGIN_MESSAGE_MAP`和`END_MESSAGE_MAP`宏来定义消息映射表的起止位置。
阶段三MFC题库

一、单选题 (2)二、多选题 (2)三、填空题 (2)四、判断题 (3)五、简答题 (3)1..动态连接库的两种方式? (3)2.列举几种进程的同步机制,并比较其优缺点。
(3)3.进程之间通信的途径 (3)4. ASSERT()是干什么用的 (3)5.winsock建立连接的主要实现步骤? (4)6.MFC中CString是类型安全类么? (4)7.进程和线程的差别。
(4)8.请简述PeekMessage和GetMessage的区别。
(4)9.请列出你所知道的在Windows SDK平台上,实现计时功能的方法。
(5)10.程序什么时候应该使用线程,什么时候单线程效率高。
(5)11.使用线程是如何防止出现大的波峰。
(5)12.TCP/IP建立连接的过程?(3-way shake) (5)13.IP组播有那些好处? (5)14. CArray,CList,CMap分别是什么,他们的优缺点 (6)15.用什么函数开启新进程、线程。
(6)16.SendMessage和PostMessage有什么区别 (6)17.CMemoryState主要功能是什么 (6)18.windows消息系统由哪几部分构成? (7)19.什么是消息映射? (7)20.什么是UDP和TCP的区别是什么? (7)21.构成Win32 API 函数的三个动态链接库是什么? (7)22.创建一个窗口的步骤是? (7)23.模态对话框和非模态对话框有什么区别? (7)24.从EDIT框中取出数据给关联的变量,已经把关联的变量的数据显示在EDIT框上的函数是什么? (8)25.简单介绍GDI? (8)26.windows消息分为几类?并对各类做简单描述。
(8)27.如何自定义消息? (8)28.简述V isual C++ 、Win32 API和MFC之间的关系? (8)29. MFC中,大部分类是从哪个类继承而来? (8)六、编程分析题 (9)七、编程题 (9)1.写一个socket通讯程序 (9)2.定义一个CMyRect类{w宽度,h高度} 分别用CList。
C++MFC面试题

1. WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , sizeof(long) = __4__ 。
(3 分) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4; 2.请给出如下程序的结果 (2 分 )int a = 3;int b = a << 3; /// 00000011左移三位为00011000,即24a = __3__,b = __24__ 。
3.请给出如下程序的结果 (2 分 )int aaa = 0x01;htonl(aaa) = _16^6___。
/// 0x01000000 十六进制数,转换为十进制为16的6次方,即167772164.请给出如下程序的结果 (2 分)#define MAX_NUM 100+200int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心则 Temp = __2100__ 。
5.请给出如下程序的结果 (3 分 )char szTemp[1000] = "";int nLen1 = sizeof(szTemp);int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符'\0'strcpy(szTemp, "abc");int nLen3 = sizeof(szTemp);int nLen4 = strlen(szTemp);int nTemp[100];int *pTemp = nTemp;int nLen5 = sizeof(pTemp);///在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!char szResult[200] = "";sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4, nLen5);则 szResult = _ 1000,0,1000,3,04___ 。
Windows面试题

Windows面试题Windows面试题问MainFrm,CDocument和CView类之间的关系,MainFrm为框架类,包含应用程序外框所包含部分。
CView为视图类,用于显示数据的空白区域窗口。
CDocument为文档类。
MFC提供了文档/视类结构,采用数据本身和显示分离的机制。
其中文档类CDocument用于数据的存储和加载,视类CView用于数据的显示与修改。
Dialog和ModuelDialog不同用法1)类型不同MoudleDialog 模态对话框,属于垄断对话框,例如打开对话框,点击打开后不能再执行其他操作,会发出“嘟嘟嘟”的声音;非模态对话框,属于非垄断对话框,利用查找对话框,点击查找同时可以执行其他操作;即:非模态不垄断;模态垄断。
2)用法不同CDialog::Create :to create amodelessdialog boxCDialog::DoModal :Call thismember function to invoke the modal dialog box andreturn the dialog-box resultwhen done windows消息系统由哪几部分构成?答:由一下3部分组成:1.消息队列:操作系统负责为进程维护一个消息队列,程序运行时不断从该消息队列中获取消息、处理消息;2.消息循环:应用程序通过消息循环不断获取消息、处理消息。
3.消息处理:消息循环负责将消息派发到相关的窗口上使用关联的窗口过程函数进行处理。
什么时候必须重写拷贝构造函数?答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。
什么是消息映射?答:消息映射就是让程序员指定MFC类(有消息处理能力的类)处理某个消息。
然后由程序员完成对该处理函数的编写,以实现消息处理功能。
如何定义和实现一个类的成员函数为回调函数?答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。
图像处理算法求职面试题

图像处理算法求职面试题图像处理算法求职面试题(篇1)1、请问sizeof(char), sizeof(short), sizeof(int), sizeof(long),sizeof(longlong)分别是多少?不同平台时哪些会有变化。
2、程序的局部变量存在于( )中,全局变量存在于( )中,代码存在于( )中常量存与( )中,动态申请数据存在于( )中,3、请指出下面程序的.错误void GetBuffer(char p){p=(char )malloc(100);}void Test(void){char str=NULL;GetBuffer(str);strcpy(str,hello world);printf(str);}4. 以下代码的输出是int main() {int a[10]={0, 1, 2, 3, 5, 4, 6, 7, 9, 8};int ptr=(int)(a+1);printf(%d,%d,%d,%d , (a+1), (ptr-1), (a+1)[5], sizeof(a) );}嵌入式系统开发1、相对于PC软件开发,嵌入式软件开发有什么不同?2、常见设备接口中,串口、USB、SPI通常需要几根线,分别是什么线。
使用时,典型速度是多少?有哪些差异?3、嵌入式系统中,驱动是什么?请说明其作用。
4、嵌入式Linux系统中,有哪些同步机制?这些同步机制的优缺点是什么?算法优化1、给一个int型递增数组Data,写一个二分查找函数,并设计对该函数进行单元测试的测试用例。
2、嵌入式软件中,某代码if( sqrt( + yy ) R ) { //后续耗时计算 } ,该语句需执行19201080次判断,发现其中浮点sqrt比较慢,需要优化:a) x,y,R均为浮点数。
怎么使用预先判断的优化方法?b) x,y为BYTE类型数据,R为浮点数,有什么优化方法?3、某识别比对系统,一次比对产生1百万条比对分值,分值为0~1000的float浮点数,请选出分值最大的前 1万条数据,同分按原顺序从前往后取,取满为止。
华为C++MFC面试题(附上个人答案不当之处请指正)

华为C++MFC面试题(附上个人答案不当之处请指正) pS:答案是本人随笔所写,可能不全甚至错误!请不要盲目将其作为标准答案,不当之处,请指正,谢谢。
C++/MFC 试题一.填空题 (26 分 )1 . WIN32 平台下, sizeof(short) = __2__ ,sizeof(int) = __4__ , sizeof(long) =__4__ 。
(3 分 ) /// sizeof(char)=1;sizeof(double) = 8;sizeof(float) = 4;2 .请给出如下程序的结果 (2 分 )int a = 3;int b = a << 3; ///00000011左移三位为00011000,即24a = __3__ ,b =__24__ 。
3 .请给出如下程序的结果 (2 分 )int aaa = 0x01;htonl(aaa) = _16^6___ 。
/// 0x01000000十六进制数,转换为十进制为16的6次方,即167772164 .请给出如下程序的结果 (2 分)#define MAX_NUM 100+200int nTemp = MAX_NUM*10;///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心则 Temp = __2100__ 。
5 .请给出如下程序的结果 (3 分 )char szTemp[1000] = "";int nLen1 = sizeof(szTemp);int nLen2 = strlen(szTemp);///strlen的计算结果不包含结束符\\\0\strcpy(szTemp, "abc");int nLen3 = sizeof(szTemp);int nLen4 = strlen(szTemp);int nTemp[100];int *pTemp = nTemp;int nLen5 = sizeof(pTemp);///在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!char szResult[200] = "";sprintf(szResult, "%d,%d,%d,%d,d.", nLen1, nLen2, nLen3, nLen4,nLen5);则 szResult = _1000,0,1000,3,04___ 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++/MFC试题一.填空题(26分)1 .WIN32 平台下,sizeof(short) = __2__ ,sizeof(int) = __4__ ,sizeof(long) = __4__ 。
(3 分) /// sizeof(char) = 1;sizeof(double) = 8;sizeof(float) = 4;2 .请给出如下程序的结果(2 分)int a = 3;int b = a << 3; /// 00000011左移三位为00011000,即24a = __3__ ,b = __24__ 。
3 .请给出如下程序的结果(2 分)int aaa = 0x01;htonl(aaa) = _16^6___ 。
/// 0x01000000 十六进制数,转换为十进制为16的6次方,即167772164 .请给出如下程序的结果(2 分)#define MAX_NUM 100+200int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心则Temp = __2100__ 。
5 .请给出如下程序的结果(3 分)char szTemp[1000] = "";int nLen1 = sizeof(szTemp);int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符'\0'strcpy(szTemp, "abc");int nLen3 = sizeof(szTemp);int nLen4 = strlen(szTemp);int nTemp[100];int *pTemp = nTemp;int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!char szResult[200] = "";sprintf(szResult, "%d,%d,%d,%d,%02d.", nLen1, nLen2, nLen3, nLen4, nLen5);则szResult = _1000,0,1000,3,04___ 。
6 .MFC 中,大部分类是从哪个类继承而来(CCmdTarget 、CObject 、CWinApp 、CWnd )?(2 分)__CObject __7 .内存是进程范围or 线程范围;__进程__ /// 进程有独立的内存,是线程的管理者,线程是进程的执行者CPU 调度时,针对进程or 线程;__线程__ /// 线程才是执行者函数调用堆栈,针对进程or 线程。
_进程___(3 分) /// 进程才有独立内存,堆栈属于内存的一部分8 .调用函数bbb 后,输出是什么(4 分)void ccc(int x) /// 参数为数值传递,不是引用传递char szTemp[10] = "";x = 2;sprintf(szTemp, "%d,", x);afxDump << szTemp; /// afxDump表示输出信息到MFC调试(Debug)窗口if(x = 3) ///注意这里不是"=="而是"=",所以if条件是成立的{int x = 4;sprintf(szTemp, "%d,", x);afxDump << szTemp;}sprintf(szTemp, "%d,", x);afxDump << szTemp;}void bbb()char szTemp[10] = "";int x = 7;ccc(x);sprintf(szTemp, "%d,", x);afxDump << szTemp;}二.改错题(总共15分,每题5分)。
1 .下面代码有何错误void func1(){int *pa = NULL;func2(pa); /// 函数返回后pa仍然是空指针delete pa; /// pa仍然是空指针,pb申请的空间并没有被delete掉}void func2(int *pb){pb = new int(5); /// pb重新申请了堆空间}2 .下面代码有何错误void func2(int *value){*value = 2; /// value为空指针,不能被取值,所以*value是错误的}void func1(){int *p = 0;func2(p);}3 .int func1(int& b) /// 参数b的类型的整型{return 0;}void func2(){int bbb = 3;func1(&bbb); /// 函数参数的引用调用不需要用符号"&"func1(bbb);}func2 中有何错误,func1 的参数b 的类型是什么。
三.简答题(64 分)PS:以下答案是随笔所写,请读者做进一步的深入了解。
1. 请简述C 、C++ 、VC 、MFC 在概念上的区别(4 分)答:C是面向过程编程的语言;C++是面向对象编程的语言;VC是微软提供的方便于开发C++程序的一套开发工具。
MFC(Microsoft Function Class),是微软提供的一套函数类库,里面封装了许多Windows API函数,方便开发者调用。
2 .请写一个函数重载的简单例子(4 分)答:int add(int a,int b){return (a + b);}函数重载:/// 函数重载是指函数名相同,但参数类型或返回值可能不同的函数。
float add(float a,float b){return (a + b);}3. 用什么函数开启新进程、线程。
(4 分)答:CreateProccess()创建进程;CreateThread()创建线程MFC中还提供了_beginthread()与_beginthreadex()函数创建线程4.SendMessage 和PostMessage 有什么区别(4 分)答:SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。
PostMessage:发送消息后不等待消息处理即继续执行自身的程序。
5.WaitForSingleObject 有何作用;m_pThrd 的类型是CWinThread* 时,WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用。
(4 分)答:WaitForSingleObject是表示等待线程的一个函数。
参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。
6. __stdcall 、__cdecl 、__pascal 在什么方面有所不同。
(4 分)答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。
简单列表如下:Directive Parameter order Clean-up Passes parameters in registers?pascal Left-to-right Routine Nocdecl Right-to-left Caller Nostdcall Right-to-left Routine No7 .请把下述代码加上异常处理。
(6 分)int MyWriteFile(CString strFileName, CString strText){int nRet = 0;CFile myFile;myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);int nLen = strText.GetLength();myFile.Write((char*)(LPCSTR)strText, nLen);myFile.Close();return nRet;}答:int MyWriteFile(CString strFileName, CString strText){int nRet = 0;CFile myFile;__try{nRet = myFile.Open(strFileName,\CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);if(!nRet){/// 输出异常信息__leave;/// 结束try块,跳到__finaly代码块int nLen = strText.GetLength();nRet = myFile.Write((char*)(LPCSTR)strText, nLen);if(!nRet){/// 输出异常信息__leave;/// 结束try块,跳到__finaly代码块}}__finaly{myFile.Close();}return nRet;}8 .请解释“ func ”为何种类型,这种类型的作用什么,变量ttt 的值是多少?(6 分) typedef int (*func)(int, int*);int xxx(int a, int *p){return a + *p;}int dowork(func aaa, int bbb, int *ccc){return aaa(bbb, ccc);}int sss = 4;int ttt = dowork(&xxx, 3, &sss);答:func表示一个函数指针,它指向参数为int,int*,返回值为int的函数。
ttt的值为79 .请问下述代码中: int operator+(… )起什么作用?this 是什么?ccc 的值最终为多少?(6 分)class Fruit{public:Fruit(){weight = 2;}Fruit(int w){weight = w;}int operator+(Fruit f){return this->weight * f.weight;}private:int weight;};Fruit aaa;Fruit bbb(4);int ccc = aaa + bbb;答:int operator+(… )表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。