自己寫的簡歷一定要百分之百了解透徹,不然就是埋坑埋自己。

1.集線器 交換機 路由器 分別工作在哪一層?

答:集線器工作在物理層,交換機工作在數據鏈路層,路由器工作在網絡層
2.用C語言寫出中序遍歷

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef struct _tree_node{
    char data;
    struct _tree_node * left;   ##左孩子
    struct _tree_node * right;  ##右孩子
    struct _tree_node * father;   ##父親
}tree_node;

void createTree(tree_node * root);
void inorderTraverseTree(tree_node * pRoot);

int main()
{
    tree_node root;
    memset(&root, 0 , sizeof(tree_node));
    printf("Please create the tree: \n");
    createTree(&root);
    printf("The inorder traverse result is: \n");
    inorderTraverseTree(&root);
    return 0;
}

void inorderTraverseTree(tree_node * pRoot)
{
    tree_node * pCur = pRoot;
    if(pCur != NULL)
    {
        if(pCur->left != NULL)
        {
            inorderTraverseTree(pCur->left);
        }
        else
        {
            printf("%c ", pCur->data);
            return;
        }
        printf("%c ", pCur->data);

        if(pCur->right != NULL)
        {
            inorderTraverseTree(pCur->right);
        }
    }
}

void createTree(tree_node * pRoot)
{
    char ch = 0;
    tree_node * pCur = pRoot;
    while((ch = getchar())!= 'e')
    {
        //printf("%c" , ch);
        tree_node * pNewNode = (tree_node *)malloc(sizeof(tree_node));
        pNewNode->left = NULL;
        pNewNode->right = NULL;
        pNewNode->father = NULL;
        if(ch == 'L')
        {
            //printf("Input L\n");
            pNewNode->data = getchar();
            pNewNode->father = pCur;
            pCur->left = pNewNode;
            pCur = pNewNode;
        }
        else if(ch == 'R')
        {
            //printf("Input R\n");
            pNewNode->data = getchar();
            pNewNode->father = pCur;
            pCur->right = pNewNode;
            pCur = pNewNode;
        }
        else if(ch == 'B')
        {
            //printf("Input B\n");
            free(pNewNode);
            if(pCur->father != NULL)
                pCur = pCur->father;
            else
                printf("It's the top\n");
        }
    }
}

3.怎麼根據子網掩碼和IP分辨出主機號?

答:網絡號:將兩個二進制數做按位與(&)運算後得出的結果即為網絡部分

        主機號:將子網掩碼取反再與IP地址按位與(&)後得到的結果
4.ARP協議

答:第1步:根據主機A上的路由表內容,IP確定用於訪問主機B的轉發IP地址是192.168.1.2。然後A主機在自己的本地ARP緩存中檢查主機B的匹配MAC地址。

第2步:如果主機A在ARP緩存中沒有找到映射,它將詢問192.168.1.2的硬件地址,從而將ARP請求幀廣播到本地網絡上的所有主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網絡上的每台主機都接收到ARP請求並且檢查是否與自己的IP地址匹配。如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。

第3步:主機B確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中。

第4步:主機B將包含其MAC地址的ARP回覆消息直接發送回主機A。

第5步:當主機A收到從主機B發來的ARP回覆消息時,會用主機B的IP和MAC地址映射更新ARP緩存。本機緩存是有生存期的,生存期結束後,將再次重複上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B發送IP通信了。

5. 死鎖是怎麼形成的,怎麼預防死鎖

答:死鎖:如果一組進程中的每一個進程都在等待僅由該組進程中的其它進程才能引發的事件

死鎖形成的條件:

(1)互斥條件:一個資源每次只能被一個進程使用,即在一段時間內某資源僅為一個進程所佔有。此時若有其他進程請求該資源,則請求進程只能等待。

(2)請求與保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求時,該資源已被其他進程佔有,此時請求進程被阻塞,但對自己已獲得的資源保持不放。

(3)不可剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能由獲得該資源的進程自己來釋放(只能是主動釋放)。

(4)循環等待條件: 若干進程間形成首尾相接循環等待資源的關係。
預防死鎖:

(1)破壞請求和保持條件:在系統中不允許進程在已獲得某種資源的情況下,申請其他資源,即要想出一個辦法,阻止進程在持有資源的同時申請其它資源。

(2)破壞不可搶佔條件:允許對資源實行搶奪

(3)破壞循環等待條件

6.棧和隊列的區別

答:(1)隊列先進先出,棧先進後出。

(2)對插入和刪除操作的"限定"不同。

棧是限定只能在表的一端進行插入和刪除操作的線性表。     

隊列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。  

(3)遍歷數據速度不同。

棧只能從頭部取數據,也就最先放入的需要遍歷整個棧最後才能取出來,而且在遍歷數據的時候還得為數據開闢臨時空間,保持數據在遍歷前的一致性。

隊列則不同,它基於地址指針進行遍歷,而且可以從頭或尾部開始遍歷,但不能同時遍歷,無需開闢臨時空間,因為在遍歷的過程中不影像數據結構,速度要快的多

7.如何查看CPU佔用情況

答:top

8.測試微信點贊評論功能

答:(1)功能測試:考慮功能是否符合預期

(2)接口:考慮各內部和外部的接口,比如朋友圈客户端和服務端的交互接口的功能。朋友圈點贊功能和消息提示功能的接口(點了贊之後對應的朋友收到提示信息)

(3)平台:手機版 pad版 web版

(4)用户操作場景:測試用户常用場景,比如:用户打開微信看到十條消息提示,點擊後進入朋友圈界面顯示了“誰誰誰點了贊”

(5)速度、延遲

(6)性能測試:模擬一些多用户併發操作的場景

(7)安全

9.python裏面的數據結構類型

答:元組 列表 集合 字典