FF笔试题整理
一、选择题
1、怎样能唯一确定一颗二叉树?
【解析】
只要知道中序遍历顺序,再加上其余两个遍历中任意一个都可以唯一确定一个二叉树。如果不知道中序遍历顺序,则无法确定。
【反例】
A-B-C,A是跟,B是A的左孩子,C是B的左孩子;先序遍历是ABC,后序遍历是CBA; 而二叉树A是根,B是A的右孩子,C是B的右孩子,先序遍历和后序遍历跟上面那个一样
【扩展阅读】
二叉树序列:https://www.cnblogs.com/caozengling/p/5318504.html
2、UML的( B )表示消息源发出消息后必须等待消息处理过程完毕并返回处理结果后,消息源才可继续执行后续操作。
A.简单消息 B.同步消息 C.异步消息 D.返回消息
【解析】
Unified Modeling Language (UML)又称统一建模语言或标准建模语言。UML定义的消息类型有3种:简单消息(Simple Message)表示简单的控制流,用于描述控制如何在对象间进行传递,而不考虑通信的细节。同步消息(Synchronous Message)表示嵌套的控制流,操作的调用是一种典型的同步消息,调用者发出消息后必须等待消息返回,只有当处理消息的操作执行完毕后,调用者才可继续执行自己的操作。异步消息(Asynchronous Message)表示异步控制流,当调用者发出消息后不用等待消息的返回即可继续执行自己的操作,异步消息主要用于描述实时系统中的并发行为。
3、有一家咖啡店为了提高效率打算开发一套咖啡订购系统,用户可以根据清单选择咖啡和咖啡所加的配料,系统可以自动的计算总价格,用什么设计模式好?
【解析】
装饰模式(Decorator)
【扩展阅读】
设计模式(九)装饰模式(Decorator):http://blog.csdn.net/xingjiarong/article/details/50131743
A.11001011 B.11010110 C.11000001 D.11001001
【解析】
答案是D。因为字符码第一位是校验位,由于D的真值有三个1,所以校验位写成1凑成偶数,这也叫偶校验。虽然题目没有明确是奇校验还是偶校验,但由于是单选题,可推出只有是偶校验才会有唯一正确。
5、关于视图,下列说法中正确的是(D)
A对视图的使用与表一样,也可以进行插,查,删,改操作
B试图只能从表中导出
C视图与表一样,也存储着数据
D对视图的操作,是最终都要转化成对基本表的操作
【解析】
D正确.D与A矛盾.视图可以来自其他视图.视图不存数据.
6、解决哈希冲突的链地址算法中,关于插入新的数据项的时间表述正确的是(D )
A. 和数组已占用单元的百分比成正比
B. 和链表数目成正比
C. 和哈希表中项数成正比
D. 随装填因子线性增长
【解析】
参考答案:D
散列表的装填因子定义为:α=填入表中的元素个数/散列表的长度
α是散列表装满程度的标志因子。由于表长是定值,α与“填入表中的元素个数”成正比,所以,α越大,填入表中的元素较多,产生冲突的可能性就越大;α越小,填入表中的元素较少,产生冲突的可能性就越小。
7、下面关于二叉排序树的说法错误的是( A )
A. 在二叉排序树中,完全二叉树的查找效率最低
B. 对二叉排序树进行中序遍历,必定得到节点关键字的有序序列
C. 二叉排序树的平均查找长度是O(log2n)
D. 二叉排序树的查找效率与二叉树的树形有关
【解析】
参考答案:A 。在二叉排序树中,完全二叉树的查找效率最高
8、TCP套接字函数中( )不会产生阻塞。
A. accept
B. bind
C. write
D. Read
【解析】
参考答案:B
9、在一个请求分页系统中,采用NUR页面置换算法时,假如一个作业的页面走向为1,2,1,5,4,2,4,3,2,4。当分配给该作业的物理块数为3时,访问过程中命中的次数为( )
A. 3
B. 4
C. 5
D. 6
【解析】
参考答案:B
主要的页面置换算法有:OPT、LRU、LFU、NUR以及FIFO。
FIFO:先进先出算法。
OPT:最佳置换算法。
LRU:最近最久未使用算法。
LFU:最近最少使用算法。
NUR:最近未使用算法。
二、编程题
1、在字符串中找出连续最长的数字串
输入描述:
输入一个字符串。
输出描述:
输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度
输入
abcd12345ed125ss123058789
输出
123058789,9
【解析】
/** *在字符串中找出连续最长的数字串 * https://www.nowcoder.com/questionTerminal/2c81f88ecd5a4cc395b5308a99afbbec */ import java.util.*; public class MaxNumberLength { public static void main(String[] args) { Scanner scan = new Scanner(System.in); while (scan.hasNext()) { String str1 = ""; String str = scan.nextLine(); for (char ch : str.toCharArray()) { //将不是数字的字符全部变成a if (ch >= '0' && ch <= '9') { str1 += ch; } else { str1 += "a"; } } //按a分割 String[] strs = str1.split("a"); //找最长数字串的长度 int max = 0;//记录最长的连续数字串的长度 for (int i = 0; i < strs.length; i++) { max = strs[i].length() > max ? strs[i].length() : max; } //打印最长数字串 for (int i = 0; i < strs.length; i++) { if (strs[i].length() == max) System.out.print(strs[i]+","); } System.out.println(max); } } }
2、求n阶乘末尾0的个数
【解析】
import java.util.Scanner; /** * 求n阶乘末尾0的个数 * http://blog.csdn.net/zyh2525246/article/details/53697136 * Created by Administrator on 2018/3/12. */ public class nFactorial { public static void main(String[] args) { System.out.print("请输入阶乘数:"); Scanner scan= new Scanner(System.in); while(scan.hasNext()){ int count = 0; int a = scan.nextInt(); for (; ; ) { a = a / 5; if (a == 0) { break; } else { count += a; } } System.out.println("阶乘结果后面的零的个数为:" + count); } scan.close(); } }
----------------------------------