搜集的华三面试题及答案整理.pdf

上传人:小** 文档编号:88953107 上传时间:2019-05-14 格式:PDF 页数:7 大小:153.29KB
返回 下载 相关 举报
搜集的华三面试题及答案整理.pdf_第1页
第1页 / 共7页
搜集的华三面试题及答案整理.pdf_第2页
第2页 / 共7页
搜集的华三面试题及答案整理.pdf_第3页
第3页 / 共7页
搜集的华三面试题及答案整理.pdf_第4页
第4页 / 共7页
搜集的华三面试题及答案整理.pdf_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《搜集的华三面试题及答案整理.pdf》由会员分享,可在线阅读,更多相关《搜集的华三面试题及答案整理.pdf(7页珍藏版)》请在金锄头文库上搜索。

1、1、什么是死锁,产生的原因,如何避免死锁 死锁是指多个进程因竞争资源而造成的一种僵局, 若无外力作用这些进程将永远不可能向前 推进。 原因:竞争资源,进程推进顺序非法。必要条件:互斥条件,请求和保持条件,不剥夺条件, 环路等待条件。 处理死锁:预防死锁,避免死锁,检测死锁,解除死锁 如何避免:如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低;避免事务 中的用户交互;保持事务简短并在一个批处理中。 2、什么是大端什么是小端字节序?网络字节序是大端还是小端的? 小端:低地址存放低字节,高地址存放高字节; 大端:高地址存放低字节,低地址存放高字节; 网络字节序是:大端。 3、哈希表原理

2、根据关键码值直接进行访问的数据结构, 也就是说, 它通过把关键码值映射到表中某一个位 置来访问记录,以加快查找的速度;这个映射函数叫做散列函数,存放记录的数组叫做散列 表。 哈希表是一个以空间换取时间的数据结构,理想情况下的时间复杂度为 O(1)。 散列函数的构造方法: (1)直接定址法 取关键字或关键字的某个线性函数值为散列地址;即 H(key)=key 或 H(key) = akey + b,其中 a 和 b 为常数(这种散列函数叫做自身函数) 。 (2)数字分析法 (3)平方取中法 (4)折叠法 (5)随机数法 (6)除留余数法 拉链法创建散列表 4、函数 memset 的实现 原型:

3、void *memset(void *buffer, int c, int count); 功能:把 buffer 所指内存区域的前 count 个字节设置成字符 c。 void *memset(void *src, int c, size_t count) assert(src!=NULL); char *tmpsrc=(char*)src; while(count-) *tmpsrc+ =(char)c; return src; 5、双链表插入节点 /= / 语法格式:insert(TYPE * head,TYPE * pi) / 实现功能:将新申请的节点加入到指定链表中,并按照 num

4、进行从小到大排序 / 参数:head:待插入链表 /pi:带插入节点 / 返回值:插入指定节点后的新链表首址 /= TYPE * insert(TYPE * head,TYPE * pi) TYPE *pb=head ,*pf; if(head=NULL)/如果为空就建立,空间在传入前申请好 head=pi; pi-prior=head; pi-next=head; else while(pi-num pb-num)/pf 指向前,pb 指向后 pb=pb-next; /节点后移 if(pi-num num)/找到所要插入节点位置,插到 pb 的前面 if(head=pb) /在第一结点之前插

5、入 pi-next = pb; pi-prior = head-prior; pb-prior-next = pi;/尾节点 pb-prior = pi; head=pi;/保存头节点 else pf-next = pi;/在中间位置插入 pb-prior = pi; pi-next = pb; pi-prior = pf; else pb-next = pi;/在表末插入 pi-next = head; pi-prior = pb; head-prior = pi;/头始终指向新插入的节点 return head; 6、排序问题 (1)冒泡法 其原理为从 a0开始,依次将其和后面的元素比较,

6、若 a0ai,则交换它们,一直比较 到 an。同理对 a1,a2,.an-1处理,即完成排序。 void bubble(int *a,int n)/*定义两个参数:数组首地址与数组大小*/ int i,j,temp; for(i=0;iaj) temp=ai; ai=aj; aj=temp; 冒泡法原理简单,但其缺点是交换次数多,效率低。 (2)选择法 选择法循环过程与冒泡法一致, 它还定义了记号 k=I, 然后依次把 ak同后面元素比较, 若 akaj,则使 k=j。最后看看 k=i 是否还成立,不成立则交换 ak,ai,这样就比冒 泡法省下许多无用的交换,提高了效率。 void chois

7、e(int *a,int n) int i,j,min,temp; for(i=0;iaj) min=j;/*是 k 总是指向最小元素*/ if(i!=min) /*当 k!=i 是才交换,否则 ai即为最小*/ temp=ai; ai=amin; amin=temp; (3)插入法 插入法是一种比较直观的排序方法。 它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。 把数组元素插完也就完成了排序。 void insert(int *a,int n) int i,j,temp; for(i=1;i= 0 /* 从右到左找比 k 小的元素*/ if(mi) quick(a,i,n)

8、; 7、折半查找(二分法) 分析:首先得从小到大排好序,二分再比较,不等则继续二分,直到高低碰头遍历结束 /二分法对以排好序的数据进行查找 int binary_search(int array,int value,int size) int low=0,high=size-1,mid; while(low arraymid) /每查找一次,就判断一次所要查找变量所在范围,并继续二分 low=mid+1; /如果大小中间值,下限移到中间的后一个位,上限不变,往高方向二分 else high=mid-1;/上限移到中间的前一个位,往低方向二分 return -1; 8、字符串反转 char* r

9、everse(const char* str) int len = strlen(str); char* tmp = new charlen + 1; strcpy(tmp,str); for (int i = 0; i len/2; +i) char c = tmpi; tmpi = tmplen i - 1; tmplen i - 1 = c; return tmp; 9、Static 作用 1)在函数体内, 一个被声明为静态的变量在这一函数被调用过程中维持其值不变 (该变量存 放在静态变量区) 。 2) 在模块内(但在函数体外) ,一个被声明为静态的变量可以被模块内所用函数访问,但不 能

10、被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个 函数被限制在声明它的模块的本地范围内使用。 10、Strcat 的实现. 11、进程、线程区别 一个程序至少有一个进程,一个进程至少有一个线程; 进程在执行过程中拥有独立的内存单元,而多个线程共享内存; 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行 资源分配和调度的一个独立单位,线程是进程的一个实体,是 CPU 调度和分派的基本单位, 它是比进程更小的能独立运行的基本单位。 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

11、 进程有独立的地址空 间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不 同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死 掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费 资源较大,效率要差一些。 对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 12、数组和链表区别 数组是将元素在内存中连续存放, 由于每个元素占用内存相同, 可以通过下标迅速访问 数组中任何元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。 链表恰好相反, 链表中的元素在内存中不是顺

12、序存储的, 而是通过存在元素中的指针联 系到一起。但是增加和删除一个元素对于链表数据结构就只要修改元素中的指针就可以了。 如果应用需要经常插入和删除元素你就需要用链表数据结构了。 13、Tcp、udp 区别基于包,基于流 ? 1:用户数据报协议(UDP),UDP 协议是面向无连接的不可靠服务,在传输数据之前不需 要先建立连接。远地主机的运输层收到 UDP 报文后,不需要给出任何确认,传输数据快,不 能广播。 2:传输数据报协议(TCP),TCP 则提供面向连接的可靠服务。在传输数据前必须先建立 连接,数据传输完毕后要释放连接,传输数据慢,能广播。 14、 epoll epoll 是 Linux 下多路复用 IO 接口 select/poll 的增强版本,它能显著提高程序在大 量并发连接中只有少量活跃的情况下的系统 CPU 利用率, 因为它会复用文件描述符集合来传 递结果而不用每次等待事件之前都必须重新准备要被侦听的文件描述符集合, 另一点原因就 是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核 IO 事件异步 唤醒而加入 Ready 队列的描述符集合。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号