`
wangleide414
  • 浏览: 606584 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

VC++面试题

 
阅读更多

1、如果用VC开发程序,常见这么几个错误,C2001,C2005,这些错误的原因是什么。
   答:在学习VC++的过程中,遇到的C2001错误的错误消息主要为:unresolved external symbol(不确定的外部“符号”)。如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。
   一般来说,发生该错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。
   编程中也经常能遇到C2005错误,即重复定义错误,其实LNK2005错误并不是一个很难解决的错误。

2、请说明虚函数的本质和实现机制
   答:虚函数的本质是通过基类访问派生类定义的函数。虚函数只能借助于指针或者引用来达到多态效果。

3、分别说出描述点对象、大小对象和矩形对象的类名称。
   答:CPoint类,CSize类和CRect类。

4、异步socket编程中,send不出数据的原因是什么,你是怎么处理的?
   答:异步socket编程中,send不出数据的原因共有两个,分别是:TCP下连接断开了和该socket处在阻塞状态(也就是说在发送数据中)。处理的办法就是记录下该SOCKET的状态,当状态为阻塞的时间,放入缓冲,当该SOCKET再次可写时,发送。
5、描述并比较以下对象:事件,信标,临界区,互斥对象。
   答:这些对象都是用于线程同步的对象。
   临界区:一种保证在某一时刻只有一个线程能访问数据的简便办法。它只可以在同一进程内部使用。主要API函数有,产生临界区:InitializeCriticalSection,删除临界区:DeleteCriticalSection,进入临界区:EnterCriticalSection,退出临界区:Le***eCriticalSection。
   互斥对象:互斥对象跟临界区相似,但它不仅仅能够在同一应用程序不同  线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享,当然下面两者也有这个特点。主要API函数有,创建互斥量: CreateMutex,打开一个存在的互斥量: OpenMutex,释放互斥量的使用权:ReleaseMutex,关闭互斥量: CloseHandle。
   信标:使用信号量(信标)最重要用途是:信号允许多个线程同时使用共享资源,它指出了同时访问共享资源的线程最大数目。它的API函数和使用方法都与互斥对象相似,如创建信号灯:CreateSemaphore,传入的参数可以指定信号灯的初始值。
   事件:用来通知其他进程/线程某件操作已经完成。API函数有创建,打开事件对象等,特殊点的是可以用函数SetEvent人工设置事件为有无信号状态,因此创建事件对象时可以有两种方式,一种为自动重置,一种为人工重置。只有人工重置方式创建的事件对象才能正确使用函数SetEvent。

6、异步IO和同步IO有什么区别?
   答:异步IO当函数返回时不一定就完成了IO操作,而同步IO已经完成了。所以异步IO需要有一个事件,当IO完成时会设置此事件,调用者在事件上等待。
7、分别描述类CDatabase和类CRecordset的用途。
   答:CDatabase类用于建立与数据源的连接,CRecordset类功能强大,可以将它看做数据源的一个记录集,其中封装了对记录集的各种操作,如:滚动,修改,增加,删除,查询等。

8、cdecl、stdcall、fastcall是什么?哪种可以实现个数不定的入口参数,为什么?
答:三者都是函数调用的约定。
   (1)fastcall:采用寄存器传递参数,特点就是快了。
   (2)cdecl:cdeclare的缩写,是C和C++程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,由调用者把参数弹出栈,对于传送参数的内存栈是由调用者来维护的,正因为如此,只有这种调用方式可实现个数不定的入口参数。
   (3)stdcall:是Pascal程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,被调用的函数在返回前清理传送参数的内存栈。 上两者的主要区别是前者由调用者清理栈,后者由被调用的函清理栈。当然函数名的修饰部分也是不同的。
  
9、如何查出内存泄漏和非法操作的BUG(在Release版本下)?
   答:使用map文件。

10、程序中的局部变量、全局变量和动态申请数据具体存在于什么位置?
   答:程序的局部变量存在于堆栈中,全局变量存在于静态区中,动态申请数据存在于堆中。
11、new delete 与malloc free的联系与区别?
   答:new delete 与malloc free都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete会调用对象的destructor,而free不会调用对象的destructor。

12、描述内存分配方式以及它们的区别?
   答:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
   (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
   (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new 申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。

13、指针和引用有什么区别?
   答:(1)引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值。
   (2)不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL。
   (3)引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象.给引用赋值并不是改变它和原始对象的绑定关系。

(4)引用的创建和销毁并不会调用类的拷贝构造函数。
  (5)语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换。

14、有一段文本,统计其中的单词数。例如:As a technology , "HailStorm"is so new that it is still only known by its code name.(注意:单词间的间隔不一定是一个空格。)
   答:假设该文本已存入text这个数组里,可执行程序代码如下:
void main(){
   char text[1000]={"As a technology,'HailStorm'is so new
   that it is still only known by its code name."};
   int i=0,count=0;
   bool flag=true;
   while (text&&i<1000){
      if (text==' '){
           flag=true;
      }else if (flag==true && ((text>='a'&&text<='z')
      ||(text>='A'&&text<='Z'))){?
           count++;flag=false;
      }
      i++;
   }
   cout<<count;
}

分享到:
评论
1 楼 pp9105 2014-03-10  
第14题做的不对啊,哥哥!
该题的关键在于判断前面的字符是否是字母,但是通过text==' '来判断,显然不正确。

相关推荐

    VC++笔试面试题

    ### VC++笔试面试题知识点详解 #### 一、估计算法与调研方法 **题目:** 估计一下广州有多少理发师,如果允许,你还需要哪些调研工作?并给出你的推导过程。你认为你的估算结果可信吗? - **知识点:** - 估计算法...

    vc+常见+面试题集

    vc+常见+面试题集

    非常不错的VC++笔试题

    【VC++笔试题详解】 1. STL(标准模板库)是C++中极其重要的部分,它包含容器(如vector)、算法和迭代器。STL的vector实际上是一个动态数组,能够根据需要自动扩展其容量。其内部机制是通过动态内存分配来增加数组...

    vC++、JAVA+、C+++、软件测试面试题.rar

    5. 面试题汇总:这个文件名暗示了这是一个综合性的面试题集,可能包含了各种类型的题目,如理论问题、编程题、案例分析等,旨在全面评估求职者的技能和经验。面试者应该准备回答各种难度和类型的题目,并能清晰地...

    vc面试题

    ### 面试题分析:经典虚拟函数调用 在描述中提到的“几道经典的面试题”,首先涉及的是虚拟函数调用的经典案例。在C++中,虚拟函数允许在派生类中重写基类中的函数,并在运行时通过指向基类的指针或引用调用时自动...

    面试题(VC++)

    本资料包聚焦于VC++的面试题,旨在帮助求职者应对各种公司面试中可能出现的难题。以下是一些重要的VC++知识点,结合《50个C、C++面试题.pdf》的题目,将深入探讨这些关键概念。 1. **内存管理**:面试中经常涉及到...

    vc c++ 面试题汇总

    《VC++面试题大全》是面向想要在C++与VC++领域找寻理想工作的人们的一份宝贵资源。这份资料汇总了大量常见的面试问题,旨在帮助求职者巩固基础,提高应对面试的能力。以下是对其中一些关键知识点的详细阐述: 1. **...

    JSP,Java,C面试题库

    JSP Web应用开发面试题 Struts面试题 Hibernate面试题 Spring面试题 Java EE面试题 C语言面试题 C++面试题 VC++面试题 C#面试题 UML面试题 Oracle面试题

    各大IT公司面试题集合

    │ C++面试题大全.doc │ c与c++面试题汇总.doc │ java面试题集.txt │ ├─C++笔试题 │ (1)C,C++经典问题,及面试笔试题 .txt │ (2)cc++.txt │ (3)笔试题2.doc │ (4)笔试题.doc │ (5)想成为嵌入式程序员应...

    c++,java面试题(综合)

    【标题】:“C++与Java面试题(综合)” 这篇资料集合了C++和Java两个主要编程语言的面试题目,适合准备技术面试的求职者。综合性的面试题库旨在覆盖这两个语言的基础概念、核心特性、高级用法以及编程实践。 ...

    java面试题以及技巧

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

    图像处理面试题

    本节将详细介绍图像处理面试题中涉及到的知识点,涵盖 Matlab 编程部分,包括读、写及显示图像的命令、Matlab 与 VC++混合编程的方式等。 一、 Matlab 中读、写及显示图像的命令 Matlab 提供了多种命令来读、写及...

    Mis软件工程师面试题

    ### Mis软件工程师面试题知识点解析 #### 一、面试题概览 根据提供的信息,“Mis软件工程师面试题”主要涉及了MIS(管理信息系统)领域内的面试题目,这些题目覆盖了多个方面,包括项目管理、数据库设计、软件工程...

    vc c++面试题精髓

    在VC++和C++软件工程师的面试中,深入理解编程语言特性和实践是至关重要的。以下是一些核心知识点,这些知识点通常会在面试中被考察,也是VC++和C++开发者必须掌握的基础和进阶技能。 1. **C++基础知识**: - **...

    经典C++面试题

    C++面试题总结 在 C++ 面试中,需要对 C++ 语言的各种知识点有着深入的了解和理解。下面是对 C++ 面试题的总结和分析。 一、STL 和 vector STL(Standard Template Library)是 C++ 中的一个标准模板库,由容器、...

    java面试题及技巧4

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

    java面试题及技巧3

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

    各种程序语言面试题大集合

    【标题】"各种程序语言面试题大集合"涵盖了多种编程语言和技术领域的面试问题,是准备技术面试者的重要参考资料。这份资源旨在帮助求职者全面了解不同公司对于C、C++、VC++、Java、J2EE、Struts、Oracle、C#、UML...

Global site tag (gtag.js) - Google Analytics