设为首页 加入收藏

TOP

C/C++面试问题分类大汇总(三)
2014-09-23 08:57:05 来源: 作者: 【 】 浏览:351
Tags:C/C 面试 问题 分类 汇总
p; 堆栈区

    new和malloc分配空间    堆区

  1. 进程间通信方式

管道(有名管道,无名管道),共享内存,消息队列,信号量,socket通信

  1. 线程同步方式

临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问

互斥量:为协调共同对一个共享资源的单独访问而设计

信号量(PV操作):为控制一个具有有限数量用户资源而设计

事件:用来通知线程有一些事件已

  1. 进程和线程的区别

资源:进程是拥有资源的一个独立单位,线程是不拥有资源。

调度:线程作为调度和分配的基本单位,进程是作为资源的基本单位

并发性:进程之间可以有并发性进行,同一个进程中的多个线程是可以并发执行

系统开销:进程在创建和撤销的时候,由于系统要分配和回收资源,导致系统的开销明显大于线程

一个进程可以拥有多个线程。

  1. 局部变量和全局变量能否重名

能,局部屏蔽全局。在C++里使用全局,需要使用”::”。在C语言里,extern

  1. 虚函数和纯虚函数的区别

虚函数必须实现,纯虚函数没有实现

虚函数在子类里可以不重载,但是纯虚函数必须在每一个子类里去实现

在动态内存分配的时候,析构函数必须是虚函数,但没有必要是纯虚函数

  1. 面向对象的三大特性(四大特性)

封装、继承、多态(抽象)

封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏

继承:子类可以拥有父类的属性和方法,但父类没有子类的属性和方法

多态:允许将子类类型的指针赋值给父类类型的指针

实现多态,有二种方式,覆盖,重载

覆盖,是指子类重新定义父类的虚函数的做法

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)

  1. vi编辑器打开时跳到指定的行

vi +5000 filename

  1. int型在Touble C里占多少个字节

2个字节

  1. 判断一个单链表是否有环

两个指针指向链表头,一个指针每次走一步,另一个指针每次走两步,若有一个指针先指向为NULL表示这个链表无环。若两个指针重合表示链表有环

  1. 刷新缓冲区方式

换行刷新缓冲区

printf(“\n”);

使用函数刷新缓冲区

fflush(stdout);

程序结束刷新缓冲区

return 0;

  1. 类和对象的两个基本概念什么?

对象就是对客观事物在计算机中的抽象描述。

类就是对具体相似属性和行为的一组对象的统一描述。

类的包括:类说明和类实现两大部分:

类说明提供了对该类所有数据成员和成员函数的描述。

类实现提供了所有成员函数的实现代码。

  1. 数据库三范式

第一范式:没有重复的列

第二范式:非主属的部分依赖于主属部分

第三范式:属性部分不依赖于其他非主属部分

  1. ASSERT( )是干什么用的

是在调试程序使用的一个宏,括号里面要满足,如果不满足,程序将报告错误,并将终止执行。

  1. 如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?

用内存映射或全局原子(互斥变量)、查找窗口句柄

FindWindow,互斥,写标志到文件或注册表,共享内存

  1. 如何截取键盘的响应,让所有的’a’变成’b’?

键盘钩子SetWindowsHookEx

  1. 网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别?

1.进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。

2.线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

两者都可以提高程序的并发度,提高程序运行效率和响应时间。

线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。

编程

字符串实现

strcat

char *strcat(char *strDes, const char *strSrc)

{

assert((strDes != NULL) && (strSrc != NULL));

char *address = strDes;

while (*strDes != ‘\0′)

++ strDes;

while ((*strDes ++ = *strSrc ++) != ‘\0′)

NULL;

return address;

}

strncat

char *strncat(char *strDes, const char *strSrc, int count)

{

assert((strDes != NULL) && (strSrc != NULL));

char *address = strDes;

while (*strDes != ‘\0′)

++ strDes;

while (count — && *strSrc != ‘\0′ )

*strDes ++ = *strSrc ++;

*strDes = ‘\0′;

return address;

}

strcmp

int strcmp(const char *s, const char *t)

{

assert(s != NULL && t != NULL);

while (*s && *t && *s == *t)

{

++ s;

++ t;

}

return (*s – *t);

}

strncmp

int strncmp(const char *s, const char *t, int count)

{

assert((s != NULL) && (t != NULL));

while (*s && *t && *s == *t && count –)

{

++ s;

++ t;

}

ret

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/11/11
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ 数据结构、算法笔试题 下一篇关于C++ Traints——网易09年笔试..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: