1、介绍一下c++11的东西
回答:最重要的就是容器和模板的引入,另外就是一些新的智能指针,像shared,weak等,除此之外还有
一些新的关键字,比如default等
2、那你说说智能指针的作用和实现
3、哈希表怎么实现的,怎么确定初始容量,多久需要增长
4、堆栈速度不同的区别
5、TCP三次握手和四次挥手
6、如果客户端发送断开请求,但是服务端没收到怎么办
7、进程、线程区别
8、说说进程的通信
9、线程中一个锁没释放,但是这个线程结束了,这个锁会释放吗
10、线程中堆栈是共享的吗?
11、设计一个cache,假设为100,对其中任何一个get和set操作都会改变其访问时间,当满了再进的时候
,要把最老的那个给删除
答:用一个链式队列来实现,任何访问都会讲其中那个元素拉到末尾,当满的时候就出队
正确答案:用双向链表+hash表,以满足访问时间是o(1)
12、编程:合并两个有序链表 链表中的重复元素要去掉
struct Node
{
int val;
Node* next;
};
Node* func(Node* pHead1,Node*pHead2)
{
if (pHead1==nullptr)
{
return pHead2;
}
if (pHead2==nullptr)
{
return pHead1;
}
Node* newPHead = nullptr;
Node* curNode = nullptr;
if (pHead1->val<pHead2->val)
{
newPHead = pHead1;
pHead1 = pHead1->next;
}
else
{
newPHead = pHead2;
pHead2 = pHead2->next;
}
curNode = newPHead;
//Node* newPHead = (pHead1->val<pHead2->val)?pHead1:pHead2;
while (pHead1!=nullptr&&pHead2!=nullptr)
{
if (pHead1->val<pHead2->val)
{
if (pHead1->val==curNode->val)
{
pHead1 = pHead1->next;
}
else
{
curNode->next = pHead1;
pHead1 = pHead1->next;
curNode = curNode->next;
}
}
else
{
if (pHead2->val==curNode->val)
{
pHead2 = pHead2->next;
}
else
{
curNode->next = pHead2;
pHead2 = pHead2->next;
curNode = curNode->next;
}
}
}
if (pHead1==nullptr)
{
while (pHead2!=nullptr)
{
if (pHead2->val==curNode->val)
{
pHead2 = pHead2->next;
}
else
{
curNode->next = pHead2;
}
}
}
if (pHead2==nullptr)
{
while (pHead1!=nullptr)
{
if (pHead1->val==curNode->val)
{
pHead1 = pHead1->next;
}
else
{
curNode->next = pHead1;
}
}
}
return newPHead;
}