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;
}