现在的位置: 首页 > 综合 > 正文

自己总结的一点笔试题目

2013年08月25日 ⁄ 综合 ⁄ 共 2651字 ⁄ 字号 评论关闭

1、请描述一个你熟悉的设计模式

2C#C++除了语法上的差别以外,有什么不同的地方

   答:(1) c#有垃圾自动回收机制,不用担心对象的回收。(2)c#严禁使用指针,只能处理对象。如果希望使用指针,则仅可在unsafe 程序块中能使用指针。(3)c#只能单继承。(4)必须通过类名访问静态成员。不能像C++中那样,通过对象访问静态成员。(5)在子类中覆盖父类的虚函数时必须用关键字override,覆盖父类的方法要用关键字new(6)类型安全,不象C++可以强制类型转换。

3new delete malloc free 的区别

   答:用malloc 函数不能初始化对象,new 会调用对象的构造函数。Delete 会调用对象的destructor,而free 不会调用对象的destructor

4、有哪几种情况只能用intialization list 而非assignment

答:当类中含有constreference 成员变量;基类的构造函数都需要参数;类中含有其他类的成员对象,而该类的构造函数都需要参数。

5、一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序是怎样的
    答:先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的顺序依次执行),再执行成员对象的,最后执行自己的。

6描述内存分配方式以及它们的区别。

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

7(1)有四个同样的容器,里面装满了粒数相同的药丸,正常药丸的质量为m,变质药丸的质量为m+1,现在已知这四个容器中,有一个装的全是变质药丸,用电子秤只称一次,找出哪个容器装的是变质药丸 (2)101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。

答案:(1)把四个容器依次编号为1234,然后从中分别取出1234颗,称重,质量为10m+1则为1号,类推;

(2)先取2堆,3333,称重,第一次:若相等,则这66个为真,从中取35个与剩下的比;若不等,则将重的一堆拿下,再放另35个中的33,相等则假的重,若不等,则还是重,说明假的轻。

8、比较一下C++static_cast  dynamic_cast 的区别

   答:dynamic_casts在帮助你浏览继承层次上是有限制的。它不能被用于缺乏虚函数的类型上,它被用于安全地沿着类的继承关系向下进行类型转换。如你想在没有继承关系的类型中进行转换,你可能想到static_cast

9描述一下C++的多态

答:C++的多态表现为两部分:一为静态联编下的函数重载,运算符重载;一为动态联编下的虚函数、纯虚函数(抽象类)(constructor函数不能声明为虚函数)

10const常量有数据类型,编译器会对其进行类型安全检查。而#define则无数据类型,且只有字符替换;栈:存放局部变量、函数调用参数、函数返回值、函数返回地址;堆则由系统管理,运行时动态申请:newmalloc申请的内存就在堆上。指针则可随时指向任意类型的内存块。用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,4int一样),而不是所指的内存容量。

11、排序方法比较:

 

12写出float和指针型与“零”的比较

答:const EXPRESSION EXP = 0.000001

    If(a<EXP&&a>-EXP)

13、static的作用      

    答:1、函数体中一个被声明为静态的变量在这一函数被调用过程中维持其值不变;2、在模块内(函数体外),一个被声明的静态变量可以被模块中所有函数调用,但不能被模块外函数调用,是一个本地的全局变量。3、模块内的函数也是只可以由模块内的函数调用,即这个函数被限制在声明它的这个模块内使用。

a+++b等价于(a++)+b,(a++)+=a是不正确的,左侧不是有效变量,不能赋值,要改为(++a)+=aMFCCString不是类型安全类,因为其他类型变量可以用Format转换成CString

14、C++中为什么要用模版类

答:1、可用来创建动态增长和减小的数据结构;2、它是类型无关的,因此具有很高的可复用性;3、它在编译时而不是运行时检查数据类型,保证了类型安全;4、与平台无关,可移植性好;5、可用于基本数据类型。函数模版与类模版的区别:函数模版的实例化由编译程序在处理函数调用时自动完成的,而模版类的实例化必须由程序员在程序中显式的指定。

15、TCP/IP建立连接的过程

答:三次握手:第一次:建立连接,客户端发送syn包(syn=j)到服务端,并进入SYN_SEND状态,等待服务器确认;第二次:服务器接到syn包,确认客户的SYNack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次:客户端收到服务端的SYN+ACK包,向服务端发送确认包ACKack=k+1),此包发送完毕,二者同时进入ESTABLISHED状态,完成握手。     ICMP协议处于网络层

16、winsock建立连接的主要实现步骤

答:服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待端连接。客户端:accept发现有客户端连接,建立新的套接字,自身重新开始等待连接。该新产生的套接字用sendrecv函数写读数据,直至数据交换完毕,closesocket()关闭套接字。

17、引用和指针的区别

   答:1、引用需初始化,而指针不必;2、引用初始化后不再改变,指针可以改变所指的对象;3、不存在指向空值的引用,但存在指向空值的指针。

  全局变量(存于静态区)可以定义在被多个文件包含的文件中,但需要在这些文件中用static形式声明同名全局变量,而且只有一个文件中对变量赋值。

抱歉!评论已关闭.