Java游戏服务器端面试题整理(转载)

  一、选择题

1、既希望较快的查找又便于线性表动态变化的查找方法是?
A:顺序查找 B:折半查找 C:索引顺序查找 D:哈希法查找

ans:C
详细解释:
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。用关键字标识一个数据元素,查找时根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素。在计算机中进行查找的方法是根据表中的记录的组织结构确定的。
顺序查找也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。
二分查找要求线形表中的结点按关键字值升序或降序排列,用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
分块查找也称为索引顺序查找,把线形分成若干块,在每一块中的数据元素的存储顺序是任意的,但要求块与块之间须按关键字值的大小有序排列,还要建立一个按关键字值递增顺序排列的索引表,索引表中的一项对应线形表中的一块,索引项包括两个内容:① 键域存放相应块的最大关键字;② 链域存放指向本块第一个结点的指针。分块查找分两步进行,先确定待查找的结点属于哪一块,然后在块内查找结点。
哈希表查找是通过对记录的关键字值进行运算,直接求出结点的地址,是关键字到地址的直接转换方法,不用反复比较。假设f包含n个结点,Ri为其中某个结点(1≤i≤n),keyi是其关键字值,在keyi与Ri的地址之间建立某种函数关系,可以通过这个函数把关键字值转换成相应结点的地址,有:addr(Ri)=H(keyi),addr(Ri)为哈希函数。

2、分别以下列构造二叉排序树,与用其他三个序列所构造的结果不同的是?
A:(100,80,90,60,120,110,130)

B:(100,120,110,130,80,60,90)
C:(100,60,80,90,120,110,130)
D:(100,80,60,90,120,130,110)
ans:C
这道题我答错了,我选得B,回来一看应该选择C项,有余长时间没有看过操作系统了,好多东西我都忘记了,这道题真真的是蒙的。
详细解释:
一、二叉排序树的定义
二叉排序树或者是空树,或者是具有如下性质的二叉树:
1、左子树上所有结点的数据值均小于根结点的数据值;
2、右子树上所有结点的数据值均大于或等于根结点的数据值;
3、左子树、右子树本身又各是一棵二叉排序树。
二、叉排序树的构造
二叉排序树的构造过程实质上就是排序的过程,它是二叉排序树作媒介,将一个任意的数据序列变成一个有序序列。二叉排序树的构造一般是采用陆续插入结点的办法逐步构成的。具体构造的思路是:
1、以待排序的数据的第一个数据构成根结点;
2、对以后的各个数据,逐个插入结点,而且规定:在插入过程的每一步,原有树结点位置不再变动,只是将新数据的结点作为一个叶子结点插入到合适的位置,使树中任何结点的数据与其左、右子树结点数据之间的关系仍然符合对二叉排序树的要求。
所以有2可知,明显我们应该选择出C,因为只有C项的两个子树是以60,120为对应根节点的,其他的三个是以80,120作为子树根节点的。

3、实现发送到某个email链接的Html代码是【】?
A:< mail>xxx@yyy< /mail>
B:< mail href="xxx@yyy"/>
C:< a href="mailto:xxx@yyy">
D:< a href="xxx@yyy">
ans:C
详细解释:
^_^,这题我做对了,其实我不懂这个Html代码,我做到这道题的时候使用Html语言的逻辑猜的,看A和B,我使用排除法,要使A对,那么要是按照Html的逻辑,那么B也对,所以我知道A和B不对,另外对于D,明显是超链接的语句啊,所以我选得C,回来一看果然对了,蒙也要技术的。
或者自己使用dreamweaver的插入--电子邮件标签都看的到。 

二、填空题

1、多个线程互斥使用资源,对应的信号量的变化范围【 】?
ans:[0,1]
详细解释:一般信号量为0,1就可以了,若某个资源一次最多可以n个线程可以访问,那么信号量的范围就为【0~(n-1)】

2、对于资源静态分配法来避免死锁,主要是打破了死锁四个条件的那个【】?
ans:部分分配条件
详细解释:
死锁的条件
1、互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
2、请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
3、非剥夺条件(也称为部分分配条件)(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
4、循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源
死锁预防的方法:
(1)打破"不剥夺条件:强迫那些请求新资源而没有立即得到满足的进程,释放它已保持的其它资源。即一个进程已占用的资源在运行过程中可能要暂时释放。
(2)打破"部分分配"条件:对某进程所要求的资源一次性地分配完毕。这样,进程在运行过程中就不再需要新的资源。这种方法又称为预先静态分配法。但在做静态分配时,只要有一种资源不能满足,该进程就必需等待.
(3)打破"环路等待"条件:在资源的分配过程中,对资源的请求作出某种限制,使环路不可能出现--有序资源分配法

3、当一个进程独占处理器顺序执行的时候,具有两个特性【】和可再现性。
ans:封闭性
详细解释:
程序顺序执行的特征:
a.顺序性:每一操作必须在下一操作开始之前结束
b.封闭性:程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变,程序一旦执行,其结果不受外界影响
c.可再现性:程序执行环境和初始条件相同,重复执行时,结果相同
我开始写的是可预见性……我也不从哪里看到这个说法的……

4、中级表达式3+x*(2.4/5+6)所对应的后缀表达式为【】?
ans:3x2.45/6-*+
5、在一个带头节点的单循环链表中,P指向尾结点的直接前驱,则指向头结点的指针head可用P表示为head=【 】?
ans:P->next->next
6、有序表(12,18,30,43,56,78,82,95)中以此二分查找43和56元素时,其查找长度分别为【 】和【 】?
详细解释:这题要说难难在那里哪?就是二分法比较的时候,当数列个数是偶数的时候到底是应该去哪个值,也就是说第一次比较的值应该是43,还是56,如果是43,那么这题就是1,3这个结果,那么恭喜你,你答对了,要使56,那么这道题就是3,1.结果正好相反。像本篇日志所涉及的第一道题就讲到了查找方法:二分法,其中还提供一个链接:http://www.emcad.com/Teaching/DS-DB/Search.htm,其实这个链接中举的例子是错误的,因为在算法实现中(1+n)/2并不会四舍五入,因为c和c++都是取整的,也就是说本题(1+8)/2=4,也就是43而不是56!!!另外还有一种理解方法,有8个数(偶数),那么8/2=4,所以比较的是第四个数。这么理解也是对的。

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值