快手一面-好歹讓我進二面啊!

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章