经典笔试
- extern 的作用。
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。
extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样)
详细参考:C/C++中extern关键字详解
- strsstr()函数的作用。
函数原型是char *strstr(char *str1,char *str2);作用是找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
这其实涉及了一个字符匹配算法问题。
- Windows 下线程优先级问题。
详细参考:Windows核心编程学习笔记--进程和线程的优先级
- 多方法交换x 与y 的值。
1. x ^=y y ^=x x ^=y
2. x=x+y y=x-y x=x-y
3. x=x-y y=y+x x=y-x
4. x=y-x y=y-x x=x+y
5.x=x*y y=x/y x=x/y
6.x=y/x y=y/x x=x*y
1. x ^=y y ^=x x ^=y
2. x=x+y y=x-y x=x-y
3. x=x-y y=y+x x=y-x
4. x=y-x y=y-x x=x+y
5.x=x*y y=x/y x=x/y
6.x=y/x y=y/x x=x*y
- 指针的自加与引用。
- 前置++与后置忡。
- inline 的作用。
- (二维数组的表示。
- ifndef 的作用。
- KMP 算法。
详细参考:字符串匹配的KMP算法
- 函数调用方式。
- 重载函数。
- 构造函数与析构函数。
- 合并两个有序链衰。
- 逻辑推理一智力题。
- 100 亿条记录的文本文件,取出重复数最多的前10 条.
- 设计一个双向链衰,并提供一个可根据值删除元素的函数。
- 二叉树的多种遍历算法实现。
- 有读和写两个线程和一个队列,读线程从队列中读数据, 写线程往队列中写数据。
- stack, heap, memory-pool 。
- TCP 的流量控制和拥塞控制机制。
详细参考:TCP的流量控制和拥塞控制
- 写一个函数,返回一个字符串中只出现一次的第一个字符。
- 求一个数组中第k 大的数的位置。
- 面向对象继承、多态问题,如多态的实现机制。
- 内联函数什么时候不展开?
- 成员初始化列表有什么作用? 什么必须在成员初始化列表中进行初始化?
- 指针与引用的区别。
- 创建空类时,哪些成员函数是系统默认的?
- 有lOw 个IP 段,这些IP 段之间都不重合,随便给定一个p, 求出属于哪个IP 段。
- 网络编程(网络编程范式,非阻塞connect )。
- TCP/IP 。
- Linux 的命令、原理以及底层实现。
- Linux 编程, 包括所有互斥的方法、多线程编程、进程间通信。
- 一个一维数轴上有不同的线段,求重复最长的两个线段。例如, a: I ~3, b: 2~7,C: 2斗, 最长重复是b 和C o
- 有向带权图最短路径。
- 内存溢出与内存泄露有什么区别?
- 利用互斥:量和条件变量设计一个消息队列,具有以下功能: 1 )创建消息队列(消息中所含的元素); 2 )消息队列中插入消息: 3 )取出一个消息〈阻塞方式); 4 )取出第一消息〈非阻塞方式)。注意,互斥量、条件变量和队列由系统给定。
- 用非递归方法完成二叉树的遍历。
- cnwap 和cnnet 的区别。
- 设计一个内存管理策略,要求可以保证多线程时的安全,防止内存越界等,效率不低于malloc( )/台ee()函数。
- 排列组合问题。
- 若有序衰的关键字序列为Cb, c, d斤, f, g, q,几5,心,则在二分查找关键字b 的过程中,先后进行比较的关键字依次是什么?
- 有一个虚拟存储系统,若进程在内存中占3 页〈开始时内存为空〉,若采用先进出(FIFO )页面淘汰算法,当执行如下访问序列后,口,3人刀,2,”,2,3人5 , 会发生多少缺页?
- 有一个顺序枝s,元素sl , s2 ,。, s4, s5, s6 依次进钱,如果6 个元素的出钱j顺序为s2 , s3, s4 ,而, s5. sl ,则顺序钱的容量至少应该有多少?
- (0,2, l ,4,3夕,5点6,7]是以数组形式存储的最小雄,删除雄顶元素。后的结果是多少?
- 某页式存储管理系统中,地址寄存器长度为24 位,其中号占14 位,则主存的分块大小是多少字节?
- 运算符重载。
- 各种排序算法的使用与比较。
- 一维数组默认初始化问题。
- const char* pl =”hello”; char* const p2 =”world”;有什么区别?
- struct 与class 有什么区别与联系?
- 函数指针与指针函数的区别。
- 指针数组与数组指针的区别。
- 大端小端。
- 虚函数问题。
- 如何判断单链表是否有环?
其他问题
死锁产生的原因及四个必要条件
产生死锁的原因主要是:(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要给予合理的规划
OSI七层结构
1.
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种
传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
4.
传输层:定义了一些传输数据的协议和
端口号(WWW端口80等),如:TCP(
传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(
用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
6.
表示层:可确保一个系统的
应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制
交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,
表示层会通过使用一种通格式来实现多种数据格式之间的转换。