c/c++常考笔试面试题

来源:互联网 发布:php study下载 编辑:程序博客网 时间:2024/04/29 16:59

C/C++

1.判断一个机器的是32位还是64位?                                           int a = 0xffffffff; 判断a是否大于0。

2.斐波拉契数列

int fn(int n)

{    return (n>0&&n<3)? 1: fn(n-1)+fn(n-2);    }

3.#define max(a,b) (a)>(b)?(a):(b)        写一个和这个宏定义一样功能的函数,
template <class T>
inline T max(T a, T b)
{   return (a>b)? a: b;   }

5.n进制转换为10进制,10进制转换为n进制

6.数组中元素个数超过一半的数

7.数组中数据内旋、外旋从大到小输出

8.STL的MAP的实现机制?                                                              第一种hash_map由哈希表实现,第二种有红黑树实现。

9.子类与父类的内存关系图                                                             多重继承时子类继承了两个虚表,拥有两个虚表指针,虚表指针在最前面,子类虚函数在两个虚表的第一个虚表里。

10.虚函数定义时可以不用加virtual,静态成员函数,构造函数不能申明为虚函数,析构函数最好为虚函数

11.n个数字里找出最小的k个数字,找第k个最小的数字             bfprt算法

12.怎样检查内存泄露                                                                       1.程序快结束时调用函数_CrtDumpMemoryLeaks();2.重载new和delete函数,统计两个函数的调用个数。

13.找两个字符串的最长公共子串?

计算机网络

1.OSI七层体系结构,IP/TCP体系结构,五层体系结构。

2.HTTP协议,IP,TCP, UDP

3.玩游戏一般用的那种协议

数据结构

1.哈希表怎么存储,时间复杂度                           线性存储,时间复杂度为O(n)

2.希尔排序?                                                           按分的间隔将子序列排成续为止

3.双向链表删除, 插入一个节点                             三种情况: 头节点,中间节点,尾节点

4.图的最小生成树?                                               连通图的所有生成树中,各边的代价之和最小的的那棵生成树叫最小生成树

5.二叉搜索树,二叉树的用途?                           二叉搜索树左孩子<根,右孩子>根。   堆排,map的实现机制

7.哈夫曼树。                                                           带权树的路径长度最小的二叉树又叫最优二叉树,常用于编码技术上

8.各种排序的时间复杂度,空间复杂度,稳定性

9.排序只进行一两次的结果(希尔,归并,快排)

10.链表逆序,合并(递归与非递归)

11.二分法查找(递归与非递归)

操作系统
1.内存管理方式,换页的方式

2.什么时候使用多线程,如何实现
管道、队列、共享内存

3.内部碎片,外部碎片?

  外部碎片:是由于大量信息由于先后写入、置换、删除而形成的空间碎片。
  内部碎片:是由于存量信息容量与最小存储空间单位不完全相符而造成的空间碎片。

Linux

1.Linux的进程通信、makefiles
makefile:管理项目编译过程。一个工程的源文件不计其数,分别放在不同的目录中,makefile来指定那些文件先编译,后编译,重新编译
自动化编译

2.僵尸进程是怎么产生的?危害是什么?怎么避免?              

僵尸进程:子进程在父进程还未调用wait()或waitpid()的情况下先于父进程结束,但是父进程没有对子进程进行善后处理,包括获取进程的相关信息以及释放资源。

危害:浪费资源。

避免方法:

(1) fork两次:一个进程不想等待子进程终止,也不想子进程在父进程终止前都是僵尸进程,fork两次,第一个子进程会fork第二个子进程,然后第一个子进程退出,第二个子进程被init接管,父进程处理第一个子进程的退出状态,返回。

(2) 父进程调用wait或waitpid等待子进程的结束;但父进程可能会挂起。

(3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号

(4) 杀死父进程。

僵尸状态是每个子进程比经过的状态吗?

是的。任何一个子进程(init除外)exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个子进程在结束时都要经过的阶段。

3.孤儿进程

孤儿进程一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

 

MFC

1.双缓冲绘图之前为何闪屏?                                                                              ondraw函数被调用时,系统的背景画刷会将画布清除再执行画图命令

2.消息响应函数和ID的绑定是怎么实现的?                                                       消息映射表里存放消息ID和对应的消息函数

3.阻塞和非阻塞方式
阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如,程序执行一个读数据的函数调用时,在此函数完成读操作以前将不会执行下一程序语句。当服务器运行到accept语句时,而没有客户连接服务请求到来,服务器就会停止在accept语句上等待连接服务请求的到来。这种情况称为阻塞(blocking)。而非阻塞操作则可以立即完成。比如,如果你希望服务器仅仅注意检查是否有客户在等待连接,有就接受连接,否则就继续做其他事情,则可以通过将Socket设置为非阻塞方式来实现。

4.socket通信的原理

 

设计模式

1.观察者模式关系图?

2.简单工厂模式和工厂模式的区别? 一些经典的设计模式都有哪些

3.几种设计模式的类图,模型图

 

智力题

1.一个房间若干个人,只有黑色和白色两种帽子,黑色的大于等于一个,一个人只能看见别人的帽子,看不见自己的。如果认为自己头上的是黑色帽子,就在熄灯的时候拍自己脸一下。关第一次灯的时候没有声音,第二次还是没有声音,第三次有了声音,请问一共有几个黑色的帽子(3)
原创粉丝点击