自己写的简历一定要百分之百了解透彻,不然就是埋坑埋自己。
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里面的数据结构类型
答:元组 列表 集合 字典