1、写一个数组指针和指针数组;写一个函数指针和指针函数。
(1)数组指针:int (*p)[4];是一个指针,指向有4个整型元素的数组
(2)指针数组:int *p[4];是个有4个元素数组,每个元素是指向整型的指针
(3)函数指针:int *func(void);
(4)指针函数:int (*)func(void);
规则:(右左规则)首先从在最里面的括号标识符看起,然后往右看,再往左看。每当遇到圆括号,调转阅读方向。
2、中断时CPU在做什么?
当中断时,CPU暂停当前任务,做相应的处理,CPU需要判断中断源,保存现场(即寄存器值),以便恢复后执行。
过程 :
中断模式——保存当前PC,敏感数据入载——PC被赋值,中断起始位置——CPU跳到中断起始地址,处理中断——返回——恢复PC,数据出栈
3、合并两个链表,合并链表有序
struct ListNode
{
int m_nValue;
ListNode *m_pNext;
}
(1)1——2——3——4
(2)5——6——6——7——8
(3)1——2——3——4——5——6——7——8
思路:比较头节点的方式合并排序
代码:
ListNode *Merge(ListNode *pHead1, ListNode *pHead2)
{
if(pHead1 == nullPtr)
return pHead2;
else if(pHead2 == nullPtr)
return pHead1;
ListNode *pMergeHead = nullPtr;
if(pHead1->m_nValue < pHead2->m_nValue)
{
pMergeHead = pHead1;
pMergeHead->m_pNext = merge(pHead1->m_pNext, pHead2);
}
else
{
pMergeHead = pHead2;
pMergeHead->m_pNext = merge(pHead1, pHead2->m_pNext);
}
return pMergeHead;
}
4、C++中的static和const分别作用是什么?
static:
(1)静态成员变量不能再类内部初始化,只是声明,定义必须在类外
(2)类的静态成员函数,静态成员变量是和类相关的,而不是和类的具体对象相关。作用域仅在本文件中。
(3)static没有this指针
(4)不能为virtual
const:
(1)不能在类定义初始化,只能通过构造函数初始化
(2)主要防止成员函数修改对象的内容,不能改变成员变量值,但可以访问成员变量
5、C++数据共享的方法?全局变量和类的静态变量名各有什么优缺点?
(1)C++数据共享的方法:
1 >通过参数传递和返回值
2 >通过传递指针或者引用
3 >通过全局变量实现
4 >类相关的共享(类数据成员,类静态成员,友元函数)
(2)全局变量和类的静态成员变量各有什么特点?
全局变量作用域是整个项目,其优缺点如下:
优点:
1 >全局可视,任何一个函数都可访问和更改变量值
2 >内存地址固定,读写效率高
缺点:
1 >使用全局对象的函数依赖于全局对象的存在和类型,这使得在不同于上下文环境中重用该函数更加困难。
2 >如果程序必须被修改,则全局依赖增加了引入错误的可能性,而且即使只对局部做修改也要求程序员必须解释整个程序。
3 >如果全局对象得到一个不正确的值,则必须查找整个程序,以判断错误发生的位置。
4 >当一个函数使用全局对象时,递归更加难以正确完成,递归在程序调用自身时才发生。
5 >在线程存在的情况下,我们必须做特殊的编码,以便同步各个线程对于全局对象的读和写操作。
(3)静态成员:
优点:
1 >静态类能够使您的实现简单,迅速,因为不必创建对象就能调用其他方法
缺点:
1 >如果创建了该类的任何实例,不能使用实例来访问静态成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件。
6、TCP的拥塞方法:
慢启动、拥塞避免、快速重传、快速恢复
7、LInux创建线程和创建线程函数:
fork创建线程;PTHread_Create创建线程
8、数据库索引有什么作用?
可以利用索引快速访问数据库表中的特定信息。