1:本试卷为高难度试题,大部分摘自华为,中兴,腾讯,百度,阿里巴巴等试题
2:知识点涵盖Java基础,面向对象,异常,多线程,输入输出流,集合,数据结构与算法
3:注意本试卷分满分为100分,60分为及格分数线
4:本试卷分为以下部分:选择题,简答题,改错与分析题,编程算法题
5:本试卷时间为100分钟,请抓紧时间做题
一:选择题【有四个选项,只有一个选项正确,每道题1.5分,共20道,总计30分】
【 】1:下面的表达式错误的是
B: float f=1.0F
C: float f=(float)1.0F
D: float f=(int)(0.73+0.27);
【 】2:设x和y均为int型变量,则以下语句:x+=y,y=x-y;x-=y;的功能是
A:把x和y按从大到小排列
B:把x和y按从小到大排列
C:无确定结果
D:交换x和y中的值
【 】3:请写出下面程序运行的结果()
int y = 1;
int a = x++ + ++x;
int b = y– – –y;
System.out.println(++a + b++);
A:3 B:4 C:5 D:6
【 】4:选择下列程序运行的结果
for (int i = 0, j = 5; total < 10 || j > 3; ++i, –j) {
total += (i + j);
System.out.println(total );
}
A:结果为 5 ,因为一个i自加,一个j自减抵消等于没有自加
B:结果为 10,因为正常运算了
C:有语法错误,不能写多个变量
D:有语法错误,条件表达式不能写多个
【 】5:请问总共创建了多少个对象?
aa=”bb”;
b=”dd”+aa;
c=”cc”+b+aa;
StringBuffer d = new StringBuffer(c);
A: 4 B: 5 C: 7 D: 8
【 】6:接口A中有2个方法,接口B中有2个方法,以下正确的是 ( )
A:若接口C继承A,B两个接口,则C一定继承了四个方法
B:若类C实现接口A,B,则C中必须至少实现A、B中各一个方法
C:若类C要继承接口A,B,则必须要定义接口D来继承接口A、B,由类C实现接口D,才能达到目的
D:若抽象的接口C继承了接口A,B;抽象的D类实现C接口,此时必须要实现累加接口中的所有方法
【 】7:关于类,抽象,接口,继承综合说法错误的是?
A:类与类之间有关联,继承,聚合的关系;
B:抽象类可以继承实例类,抽象类可以实现接口,抽象接口可以继承多个接口
C:抽象类是类和接口的并集与接口继承的补集
D:在应用开发中,功能类的继承是平行结构,实现功能的接口是树型结构
【 】8:请判断下面程序运行的结果:
int num = 1;
public void change() {
num = 2;
}
public void change(int num) {
num = 3;
}
public void change(ParamTest pt) {
pt.num = 4;
}
public static void main(String[] args) {
ParamTest pt = new ParamTest();
int num = 5;
pt.change();
System.out.println(“1->:” + pt.num);
pt.change(num);
System.out.println(“2->:” + pt.num);
pt.change(pt);
System.out.println(“3->:” + pt.num);
}
A: B: C: D:
1->:1 1->:2 1->:2 1->:2
2->:5 2->:5 2->:2 2->:5
3->:4 2->:5 3->:4 3->:4
【 】9:下面方法不可以共存的是:()
class A {
public A() {
}
public void A() {
}
public void A(int x) {
}
}
class B extends A {
//填入一个方法
}
A:public void A(){}
B:public void A(int x, int y) {}
C:public int A(int x, char y) {
return x + y;
}
D:public String A(int x){
return “hello”+x;
}
【 】10:已知类Foo的定义如下:
int value;
Foo(int value) {
this.value = value;
}
}
运行下面程序段:
Foo[] a1 = { new Foo(1), new Foo(2), new Foo(3) };
Foo[] a2 = new Foo[a1.length];
System.arraycopy(a1, 0, a2, 0, a1.length);
System.out.println((a1 == a2) + “,” + (a1[1] == a2[1]));
控制台输出的结果是( )。
A. false,false B. false,true C. true,true D. true,false
【 】11:哪种说话阐明了垃圾收集和终结化机制锁承诺的行为?()
A 对象直到没有任何引用指向自己时才会立即被销毁
B 对一个对象调用的finalize()方法永远不会多于一次
C 适用于收集的对象会最终由垃圾收集器销毁
D 对象一但适用于垃圾收集,就再无法由存活线程访问了
【 】12:下面执行的结果是
System.out.print(c);
return true;
}
public static void main(String[] args) {
int i = 0;
for (loop(‘A’); loop(‘B’) && (i < 2); loop(‘C’)) {
i++;
loop(‘D’);
}
}
A. ABDCBDCB
B. ABCDABCD
C. Compilation fails[编译失败].
D. An exception is thrown at runtime[抛出一个运行例外].
【 】13:下面异常执行的结果是:
int x = 0;
float y = 0;
float z = x / y;
System.out.println(“11″);
try {
int a[] = new int[3];
a[3] = x;
System.out.println(“22″);
return;
} catch (Exception e) {
System.out.println(“33″);
return;
} finally {
System.out.println(“44″);
System.exit(0);
return;
}
} catch (ArithmeticException e) {
System.out.println(“55″);
return;
} finally {
System.out.println(“66″);
return;
}
A: B: C: D:
11 55 11 11
55 66 33 33
66 44 44
66
【 】14:阅读下面程序段:
byte b[] = new byte[a.length];
System.arraycopy(a, 1, b, 1, 2);
BufferedOutputStream bos;
bos = new BufferedOutputStream(new FileOutputStream(“C:\\file.txt”));
bos.write(b, 1, 2);
bos.flush();
bos.close();
假设file.txt原先不存在,运行该程序段后,文件file.txt的内容为( )。
A. 65 B. 65# C. A# D. A
【 】15:假设以数组A[n]存放循环队列的元素,其头、尾指针分别为head和end。若设定尾指针指向队列中的队尾元素,头指针指向队列中队头元素的前一个位置,则当前存于队列中的元素个数为
A:(end-head-1)%n B:(end-head)%n
C:(head-end+1)%n D:(end-head+n)%n
【 】16:对线性链表和线性表分析错误的是()
A:线性链表分为单链表、双向链表和循环链表
B:线性链表是一种物理存储单元上连续但非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接来实现的
C:线性表插入或删除的运算效率很低。在顺序存储的线性表中,插入或删除数据元素时需要移动大量的数据元素
D:线性表的顺序存储结构不便于对存储空间的动态分配
【 】17:以下属于java.util包中集合类具体实现类的是?
A:Map B:Collection C:TreeMap D:SortedMap
【 】18:下面对集合不能正确创建实例化是()
B:ArrayList
C:TreeSet
D:TreeSet
【 】19:下面可以删除list中所有的“java”的代码是:
list.add(“java”);
list.add(“aaa”);
list.add(“java”);
list.add(“java”);
list.add(“bbb”);
A:
for (int i = list.size() – 1; i >= 0; i–) {
if (“java”.equals(list.get(i))) {
list.remove(i);
}
}
B:
for (int i = 0; i < list.size(); i++) {
if (“java”.equals(list.get(i))) {
list.remove(i);
}
}
C:
Iterator i = list.iterator();
while (i.hasNext()) {
if ((i.next().toString()).equals(“java”)) {
i.removeAll();
}
}
D:
Iterator i = list.listIterator();
while (i.hasNext()) {
if (((String) i.next()).equals(“Java”))
i.remove();
}
}
【 】20:题示代码的功能为:将两个有序的ArrayList合并为一个有序的ArrayList。
内容分别为:list1:{1,3,4,6,8} 和 list2:{2,5,9}
合并后的list3: {1,2,3,4,5,6,8,9}
……
List
int size = list1.size() + list2.size();
for (int i = 0, j = 0, k = 0; k < size; k++) {
< 填入的代码 >
}
System.out.println(list3);
……
完成该功能应该填入的代码是( )。
if (j >= list2.size() || i > list1.size():&& list1.get(i) < list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
B.
if (j >= list2.size() || i < list1.size()&& list1.get(i) < list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
C.
if (j >= list2.size() || i < list1.size()&& list1.get(i) > list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
D.
if (j >= list2.size() || i < list1.size()|| list1.get(i) < list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
二:简答题【本环节中每道题3分,共5道,总计15分】
1:String 和StringBuffer有什么差别?在什么情况下使用它们?【3分】
答:
2:new一个类对象和使用类名创建一个对象有什么区别?二者使用时应该注意什么?【3分】
答:
3:在异常当中 throw和throws 有什么区别和联系?【3分】
答:
4:LinkList和ArrayList的区别?
如果是在集合的开头插入一个对象,使用哪种效率高些,在集合的末尾插入一个对象,使用哪种效率高些,为什么?【3分】
5:
介绍JAVA开发中常用的Collection FrameWork(写出Java集合的框架结构,加上必要的名称注释)? 【3分】
答:
三:改错与分析题【本环节中每道题3分,共7道,总计21分】
interface A{
int x = 0;
}
class B{
int x =1;
}
class C extends B implements A {
public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
请问哪一行有错?为什么?【3分】
答:
abstract class Animal {
public void saySomething() {
System.out.println(“你想说什么就说吧!”);
}
}
class Dog extends Animal {
public void saySomething() {
System.out.println(“我现在有了第二职业:捉耗”);
}
}
public class Test {
public static void main (String[] args) {
Animal ani=new Dog();
ani.saySomething();
}
}
请问哪一行有错?为什么?【3分】
答:
public class Test {
private static void printArray(int[] arr) {
for(int i=0;i< arr.length;i++)
System.out.print(arr[i]+”,”);
System.out.println(” “);
}
private static void changeValue(int value) {
value*=2;
}
private static void changeValue(int[] arr) {
for(int i=0;i
arr[i]*=2;
}
public static void main (String[] args) {
int[] arr={1,2,3,4,5};
changeValue(arr[0]);
printArray(arr);
changeValue(arr);
printArray(arr);
}
}
请问结果是什么?并详细解释原因【3分】
答:
public class A {
static {
System.out.println(“11″);
}
{
System.out.println(“22″);
}
public A() {
System.out.println(“33″);
}
public void deal() {
System.out.println(“44″);
}
}
public class B extends A {
static {
System.out.println(“55″);
}
{
System.out.println(“66″);
}
public B() {
System.out.println(“77″);
}
public void deal() {
System.out.println(“88″);
}
}
public class C {
public static void main(String[] args) {
A b=new B();
b.deal();
}
}
请问结果是什么?并详细分析原因【3分】
答:
public class Test{
public static void so(String[] name){
String temp=name[0];
Name[0]=name[1];
Name[1]=temp;
}
public static void so(String name0,String name1){
String temp=name0;
Name0=name1;
Name1=temp;’
}
public static void main(String[] wewe){
String[] name = new String[]{“mike”,”Lily”};
String name0 = “mike”;
String name1=”Lily“;
So(name);
System.out.println(name[0]+”,”+name[1]);
So(name0,name1);
System.out.println(name0+”,”+name1);
}
请输出结果?并详细解释为什么?【3分】
答:
public class Person {
static class User {
int id;
String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
class Student {
public void setid(int newId) {
id = newId;
}
public void setName(String newName) {
name = newName;
}
}
}
public void print(int id, String name) {
User user = new User(id, name);
System.out.println(user.getId() + “\t” + user.getName());
}
public static void main(String[] args) {
//…手写补充代码
}
}
要求:先对User进行创建实例化 学号为:1001 姓名为: 张三 之后进行修改 学号为: 1002 姓名为:李四 调用Person类的打印输出方法显示修改后的结果。【3分】
答:
<第七题>
列举几个你常去的IT技术型的网站,类型不限,个数不限,写中文名亦可,并解释为什么值得你去?【3分】
答:
四:编程算法题,将代码下在每道题的下面[共5道题,第一,二题为5分,第三题为6分,第四题为8分,第五题为10分,总计34分]
1:请用递归算法写一个方法求出两个数字的最大公约数和最小公倍数【5分】
【安徽科大讯飞2012届武汉大学校园招聘试题】
2:请将一个链表反序【5分】
【华为2011届华中科技大学校园招聘试题】
3:现在有一个有趣的游戏:称为杀人游戏!游戏规则是:输入参加的总人数,在输入一个基数,然后每个人依次报数,
当前选手报的数能被基数整除的话,就判为死亡出局,剩下的再继续数数,当数到最后一个时候,再接着从1开始从头数数。。。
一直到活下的人小于基数为止,整个游戏结束,打印最后存活选手的编号;【6分】
例子:总数:6 基数 2
M M M M M M
1 2 3 4 5 6
M X M X M X
1 2 3 4 5 6
M M M
1 2 3
M X M
1 2
M X
1
存活的人数是:1
存活的编号是:1
【微软,中兴的笔试题,要求不限制语言编写实现】
4:比较两个字符串,要求从字符串的最后一个元素开始逐个向前比较,如果两个字符串的长度不等,则只比较短长度字符串的元素。请编程实现下面给出的比较方法,并返回比较中发现的不相等元素的个数。【8分】
public int getDiffNum(int len1, String str1,int len2, String str2)
例如:len1=3 str1=”acd” len2=5 str2=”zhacd” 函数返回为 0
len1=3 str1=”acd” len2=6 str2=”zhacdv” 函数返回为 3
【华为2012届南京大学校园招聘试题】
5:任何一个自然数m的立方均可写成m个连续奇数之和。【10分】
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
请编程实现:输入一自然数n,求组成n^3的n个连续奇数,格式必须按照上面进行输出。