JAVA校招笔试题(JAVA研发岗)
一、单项选择题
1. A、B、C三个同学头上分别有三个数字a、b、c,他们看不到自己头上的数字,但可以看到其他两人的。比如B同学能看到a、c,但看不到b。已知1<=a,b,c<=9,并且各不相等。A、B、C三个人以此进行了如下发言:
A说:要么a不是b+c的约数,要么a=b+c
B说:我知道我头上数字了,c是a的倍数
C说:我也知道我头上数字了
那么a+b+c是_____。
A. 8
B. 9
C. 10
D. 11
E. 12
F. 7
3. 众所周知我们所处的宇宙的质能公式是E=mc2,其中c是真空中的光速,和我们的宇宙平行的另一个宇宙meta,研究显示他们使用的质能公式是E=(2+√3)m,当一个物体质量m很大的时候,对应的能量E非常大,数据也非常的长,但meta宇宙里面的智慧生物只愿意把E取整,然后记录对应的能量E的最后一位整数,比如m=0时,他们会记录1,m=1时,他们会记录3。m=2的时候,他们会记录3。现在请问当m=100时,他们会记录多少?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
4. 下列关于进程间通信的说法中错误的是:
A. 可以通过网络进行进程间通信
B. 信号量也可以用作进程间通信
C. 在Linux中则只能用管道做进程通信
D. 通过return返回值也可以在进程间通信
E. 在进程间共享一块内存可以做通信
F. 进程间通信效率通常比网络通信效率高
6. 多项式P(x)=a+bx+cx^2+dx^3
对于任意x,计算p(x)中最少需要用到乘法操作的次数是多少?
A. 3
B. 4
C. 5
D. 6
E. 1
F. 2
7. 甲乙两个人对赌,甲估计自己赢的概率为1/3,乙估计自己赢的概率为2/5,实际上双方赢的概率各为1/2。甲乙二人都知道双方各自估计的赢的概率,但并不清楚实际上赢的概率。甲乙两人同时亮出筹码,如果某一方觉得对方筹码太少可以退出游戏,获胜的人会赢取双方所处的筹码。以下命题中正确的是:
A. 甲赢钱的期望大于0
B. 乙赢钱的期望大于0
C. 不管双方各自估计自己赢的概率是多少,甲乙二人赢钱的期望都等于0
D. 甲乙两人赢钱的期望都小于0
E. 甲乙两人赢钱的期望都大于0
F. 甲乙二人必然会至少有一人退出比赛
16. 同时掷4个骰子,数字加起来和为22的概率为x/1296,x的值为?
A. 7
B. 8
C. 9
D. 10
E. 11
F. 12
17. 一个机器人玩抛硬币游戏,一直不停的抛一枚不均匀的硬币,硬币有A、B两面,A面概率为2/3,B面概率为1/3,问第一次出现连续的两个A面的时候,机器人抛硬币的次数的期望是多少?
A. 9/4
B. 11/4
C. 15/4
D. 4
E. 5
F. 9/5
18. 在一个二分类学习案例中,正负样本分别为10万和100万,这些样本中有5000个特征完全相同的正样本和负样本对,小张同学将这些样本对从样本集中删除。以下说法正确的是:
A. 由于删除的样本对特征相同,分类相反,因此可以完全抵消,训练出的模型不变。
B. 由于负样本较多,因此删除后负样本被错分到正样本的比例升高。
C. 这个做法可以显著降低运算量,因此可取
D. 这样只去除样本对中的负样本,效果可能更好
E. 样本的变更对于分类结果的比例影响可以忽略不计。
F. 以上答案都不对。
19. 在Android客户端中编码中,以下哪个行为是必要的:
A. bitmap使用后立即调用recycle方法
B. 在页面activity类的finalize方法中注销广播的监听
C. 在activity的onDestory方法中将成员变量值置为null
D. 在使用aidl接口时自己控制多线程安全
E. 在内部类增加public修饰符
F. 页面布局xml文件名和对应的Activity类名需相同
20. 以下是求一个数组最大值的代码,它的运算最差时间复杂度和最差空间复杂度是____
int Max(int arr[], int length)
{
if(length == 1){
return arr[0];
}
int mid=length/2;
int left=Max(arr,mid);
int right=Max(arr+mid,length-mid);
return (left>right?left:right);
}
A. 时间复杂度:O(n),空间复杂度:O(1)
B. 时间复杂度:O(n),空间复杂度:O(log(n))
C. 时间复杂度:O(n*log(n)),空间复杂度:O(1)
二、问答题
1、www.abc.com是一个视频点播网站,Arbergo是一个基础存储系统,它为该视频网站提供了基础服务描述如下:
该系统存储了全部需要下载的文件,并提供JAVA接口用于视频文件下载
接口允许指定1到n个文件名下载多个文件
接口返回的文件内容支持分片,例如file.part1,file.part2
接口定义时需考虑到异常情况
接口支持按照指定文件区间下载,例如,下载file1的第101个字节到文件末尾,下载file2的第1个字节到第100个字节。
该系统实现了基于SATA硬盘和SSD硬盘的混合存储。混合存储的特点是SATA硬盘的存储空间更大,但访问速度更慢,SSD硬盘存储空间较小,但访问速度更快。文件在两种磁盘类型中可以迁移。
问题1:请用java语言完成该系统中描述的对外提供的接口定义,并用注释说明该接口各个参数的含义以及取值范围。
问题2:针对Arbergo系统在#6中描述的混合存储特点,请用文字描述该系统的设计思路。设计思路可以包括但不限于文件在磁盘中的分布,文件在不同磁盘类型中的迁移规则,访问规则。
2、Maven的一个核心特征是依赖管理。他通过读取依赖项目文件(pom.xml中)来发现所有需要依赖的库。pom.xml中maven依赖定义类似:
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-core</artifactid>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupid>commons-collections</groupid>
<artifactid>commons-collections</artifactid>
<version>3.2.1</version>
</dependency>
其中每个artifactid又有自己的pom.xml,里面也有类似的依赖定义。
比如有一个java库A,依赖于其他库B,我们的项目引用A的时候,很可能也需要把B引入进来,maven就提供了这样的功能,可以管理各种间接的依赖。举个例子:一个项目依赖了A,B两个库,A又依赖了C,D,其中D又依赖了F;B依赖了E,他们的依赖树大概是这样的:
项目___|____A
| |_____C
| |_____D
| |_____F
|_____B
|_____E
maven在打包过程中会把依赖A,B,C,D,E,F都引入进来
但这个依赖很可能会有一些冲突的情况:
case1:我们在项目中分别引入了2个依赖A和B:A又依赖的C,C又依赖了D,B也依赖了D,但是这个时候C依赖的D和B依赖的D的版本是不同的:
项目----A---C----D
项目----B---D
也就是说,当前项目引入了2次D依赖,那么这时,Maven将采用第一原则:路径最近原则
case2:我们在项目中分别引入了2个依赖A和B,而A和B又都引入了C。但是,此时A依赖的C和B依赖的C版本是不一致的,那么这个时候Maven如何处理呢?
这时,第一原则已经不起作用了,在Maven2.0.9之后的版本中,制定了第二原则:第一声明者优先
请尝试用java代码描述maven的依赖关系建立过程,注意只能使用基本类型和数值(如用到map,list,set等需要自行实现)。
3、hotspot是sun.jdk默认虚拟机,堆内存结构主要分为新生代、老年代,新生代包含Eden空间、From Survivor空间、To Survivor空间、用JAVA程序模拟实现hotspot虚拟机的堆内存结构并且实现两个方法:
方法1:模拟实现创建一个新对象后堆内存分配过程
方法2:模拟实现垃圾回收过程(垃圾回收按分代回收算法,实现新生代和老年代的垃圾回收过程)
最后写一个主函数,通过调用方法1,从而出发方法2.