蘑菇街2015校招 Java研发笔试题 详解,2015java
1. 对进程和线程描述正确的是( )
A. 父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间。
B. 改变进程里面主线程的状态会影响其他线程的行为,改变父进程的状态不会影响其他子进程。
C. 多线程会引起死锁,多进程则不会。
D. 以上都不对。
解析:A错,进程拥有独立的地址空间;B错,主线程和子线程是并行关系的时候,并没有依赖关系。父进程和子进程中,子进程是父进程的一个副本,创建子进程后,子进程会有自己的空间,然后把父进程的数据拷贝到子进程的空间里。运行时,谁先运行是不确定的,这由系统决定;C错,多线程和多进程都会引起死锁,一般说的死锁指的是进程间的死锁。
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。
2. 数据库里面建索引的常用数据结构是()
A.单向链表 B.栈 C.B+树 D.队列
解析:索引是对记录按照多个字段进行排序的一种方式。对表中的某个字段建立索引会创建另一种数据结构,其中保存着字段的值,每个值又指向与它相关的记录。这种索引的数据结构是经过排序的,因而可以对其执行二分查找。索引的缺点是占用额外的磁盘空间。因为索引保存在数据库中,所以如果为同一个表中的很多字段都建立索引,那这个文件可能会很快膨胀到文件系统规定的上限。
在数据库系统的使用过程当中,数据的查询是使用最频繁的一种数据操作。最基本的查询算法当然是顺序查找(linear search),遍历表然后逐行匹配行值是否等于待查找的关键字,其时间复杂度为O(n)。但时间复杂度为O(n)的算法规模小的表,负载轻的数据库,也能有好的性能。 但是数据增大的时候,时间复杂度为O(n)的算法显然是糟糕的,性能就很快下降了。好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)、二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。索引是对数据库表中一个或多个列的值进行排序的结构。与在表中搜索所有的行相比,索引用指针指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,有助于更快地获取信息。通常情 况下,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引将占用磁盘空间,并且影响数据更新的速度。但是在多数情况下,索引所带来的数据检索速度优势大大超过它的不足之处。目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构。
3. 蘑菇街公司里面随便找四名员工。那么这四名员工里面,至少有两个人的生肖是相同的概率是()
A.41/96 B.55/96 C.72/128 D.90/128
解析:P(A)=1-12*11*10*9/12^4=41/96。
4. 蘑菇街是一家拥有500名员工的年轻富有活力的公司,小侠们(男性员工)诚实可靠,只说真话。而小仙们(女性员工)调皮可爱,只说假话。某一天一位客户来公司参观,就问公司的员工,你们公司有几个小仙呀?公司的员工们很热心的一一做了回答,第一个员工说一个,第二个员工说二个...第五百个员工说五百个。请问蘑菇街到底有几个小仙?
A.1 B.250 C.499 D.500
解析:首先,只可能有一个员工说的对,其他都说的是错的,不可能两个人都说的对。那么男的只有一个,剩下的499都是女的。
5. IP地址131.53.12.71是一个()类IP地址?
A.A B.B C.C D.D
解析:A类网络的IP地址范围为1.0.0.1-127.255.255.254;B类网络的IP地址范围为:128.1.0.1-191.255.255.254;C类网络的IP地址范围为:192.0.1.1-223.255.255.254。由于A类地址的特点是网络标识的第一位二进制数取值必须为“0”。所以网段号到127,后面是具体的主机号的分配。
6. 如果某系统12*5=104成立,则系统采用的是()进制?
A.6 B.7 C.8 D.9
7. 编程实现一个函数,输入为一个给定的由英文单词组成的字符串,按照英文单词的顺序反转输出。例如,给定的字符串是"hi welcome to mogujie", 那么输出为"mogujie to welcome hi"?
public class InterruptString { public static void main (String args[]){ String str = "hi welcome to mogujie"; for(int i = inverse(str).length - 1; i >= 0 ; i--){ System.out.print( inverse(str)[i]+" "); } } public static String[] inverse(String str){ String strArray[] = str.split(" "); return strArray; } }
8. 输入一个整型数组,数组里面有正数也有负数,数组中连续的一个或多个整数组成子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如,输入的数字为:1,-2,3,10,-4,7,2,-5,则和最大的子数组为3,10,-4,7,2.和为18.
public class SonArray { public static void main(String args[]){ Integer[] arrayIntegers = {1,-2,3,10,-4,7,2,-5}; String[] str = sonArray(arrayIntegers).split(" "); System.out.println("The Big Sum is:" + str[0]); } static String sonArray(Integer[] array){ int sum = 0, max = 0; for(int i = 0; i < array.length; i++){ sum += array[i]; if(sum < 0){ sum = 0; } max = sum > max?sum:max; } return max+" "; } }
9. 给定一串字符串(英文段落),用户输入某个单词,求该单词出现的总次数,和出现在第几个位置上。
// Java语言是先编译后执行
import java.util.ArrayList;
public class DivString {
public static void main(String args[]){
String str = "i love china i china china love love love xu";
String strArray[] = str.split(str);
ArrayList<String> arrayList = new ArrayList<String>();
for(int i = 0; i < strArray.length; i++){
if(strArray[i])
arrayList.add(strArray[i]);
}
}
}