面试题-烽火卷(烽火通信科技股份有限公司 )
一、填空题(每空2分,共26分)
1.Java类的种类有 class、 interface和 ---enum--- 。 2.字符串 String类中使用 ---charAt(int index)--- 函数来取得某一个下标位置的字符(只需写出函数名称)。 3.在子类构造函数中使用 ---super--- 关键字来调用父类的构造函数。 4.Java中回收垃圾的方法名是 ---System.GC()---。 5.异常类 Exception的父类名是 ---Throwable--- 。 6.使用 ---static--- 修饰符定义的类成员,可以通过类直接访问而不需要创建对象后再访问. 7.在Java中,如果需要对对象的序列化进行深度控制,需要实现---Serializable---接口,并且需要实现---writeObject()---和---readObject()---方法。 序列号反序列化 8.启动Java线程的方法名是---start()--- 9.按照标准I/0模型,Java提供3种标准输入或输出,分别是System.out、System.in 和---System.err---方法。 10.若a,b为int型变量且已分别赋值为8,10。表达式(a++)+(++b)+a*b的值是 118。
二、单项选择题(每题2分,共20分)
1.下列四个不同数制表示的数中,数值最大的是(B)
(A)二进制数1101101 (B)八进制数334 (C)十进制数219 (D)十六进制数DA
2.以下关于进程和线程叙述正确的是(D)
(A)同一进程中的两段代码不能够同时执行 (B)线程问是独立的 (c)进程是属于线程的 (d)线程处于进程空间内
3.汉字国际码规定,每个汉字用(B)个字节表示。
(A)1 (B)2 (C)3 (D)4
4.下面哪个SQL语句描述了每一个部门的每个工种的工资最大值?(b)
(a) select dept _, job cat, max(salary) from employees where salary>(salary) (b) select dept id, job cat, max(salary) from employees group by dept id, job cat (c) select dept _ ,job cat, max (salary) from employees group by dept id (d)select dept id , job cat, max (salary) from employees group by dept id, job cat salary
5.下列不可作为java语言修饰符的是 (c)
(A)a1 (B)$1 (C)_1 (D)11
6. Character流与Byte流的区别是(c)
(A)每次读入的字节数不同 (B)前者带有缓冲,后者没有 (C)前者是字符读写,后者是字节读写 (D)二者没有区别,可以互换使用
7.指出下列程序运行的结果(b)
public class example String str = new string( “good”); char[] ch = {'a','b','c'}; public static void main(string args[]){ Example ex= new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + “and”); System.out.print(ex.ch); } public void change(string str, char ch[]){ str= “test ok”; ch[0] = ‘g’; } } (A)good and abc (B)good and gbc (C)test ok and abc (D)test ok and gbc
8.ArrayList list = New ArrayList(20);中的List扩充了几次(A)
(A)0 (B)1 (C)2 (D)3
9.以下代码运行输出是(c)
public class person{ private string name = “Person”; int age=0; } public class Child extends person{ public string grade; public static void main((String[] args){ Person p = new child(); Systen out. println(p.name); (A)Person (B)没有输出 (C)编译出错 (D)运行出错
10.Java中的集合类包括 Arraylist、linkedlist.、hashmap等类,下列关于集合关描述错误的是(D)
(A) ArrayList和LinkedList均实现了List接口 (B) ArrayList的访问速度比LinkedList快 (C) HashMap实现Map接口,它允许任何类型的键和值对象,并允许Null作为键或值 (D) 添加和删除元素时,ArrayList的表现更佳。
三、判断题(每题2分,共20分)
1.Java程序中的起始类名称必须与存放该类的文件名相同。( √ ) 一个文件中可以有多个类,如果没有public类,则可以与任意类名相同,如果有public类则文件名必须与此类名相同,因为一个文件中只能有一个public类。如果文件中只有一个类,则文件名必须与类名相同 2.原生类中的数据类型均可任意转换。( × ) 基本数据类型(或叫做原生类、内置类型) 四类八种间的转换限制 (例如:boolean类型数据和其他七种不能互相转换 ) 3.final修饰的方法不能被重载。( × ) 被final修饰的类不能继承。被final修饰的方法不能重写。被final修饰的变量为常量,值不能改变(实际上是值的引用不能改变 如stringBuilder)。 4.GC线程是守护线程。( √ ) 守护线程最典型的应用就是 GC (垃圾回收器)。 5.声明为final的方法不能在子类中重载。(√ ) 被final修饰的方法不能重写,子类又如何重载? 6.不通过构造函数也能创建对象。( √ ) 百度4种方法创建对象 clone new reflect 反序列化 7.Java中所有的类都是java.lang的子类。( × ) 虽然object在java.lang中 8.Java语言中的接口可以继承,一个接口通过关键字 extends可以继承另一个接口。一个JAVA的类可以有多个接口,它们通过关键字 implements来实现。( 对 ) 9.每个try块都必须至少有一个catch块与之相对应。( × ) try块后面不一定需要跟着catch块,可以只跟着finally块,catch和finally不能同时忽略 10. abstract是抽象修饰符,可以用来修饰类及其属性和方法。( × ) abstract 不能修饰属性
四.程序改错题(每题5分,共10分)
1、下面的程序不能正常编译,请改正程序中的错误,并说明理由。(注意:不改动程序的结构,不得增行或删行)
interface A{ int x = 0; } Public class B { int x = 1; } Public class C extends B implenets A { public void pX() { System.out.print(x); } //报错 Reference to 'x' is ambiguous, both 'B.x' and 'A.x' match public static void main(String[] args){ new C().pX(); } }
**解:** Reference to 'x' is ambiguous, both 'B.x' and 'A.x' match 这里只谈调用 输出语句里打印x 更换为super.x 明确指定调用父类 或者将A.x 明确指定调用接口(接口的属性默认隐含为 public static final) 或者将接口或者父类的变量名改掉
2、下面的程序是打印所有的 Integer整数是否是奇数,请改正下面的程序使它得到正确结果。(注意:不改动程序的结构)
public class question1 { /** *判断是否为奇数 *@param i *@Return true为奇数 false为偶数 */ public static boolean isOdd ( int i){ return i%2==1; } /** *@param args */ public static void mai(string[] args) { for(int i=Integer.MIN_VALUE;i<=Integer.MAX_VALUE;++i){ boolean isOdd=isOdd(i); System.out.println(String.format("i=%d,isOdd=%b", i, isOdd)); } }
1、for语句是死循环; i++ 2、判断int型是否为奇数return i%2==1错误,应该为:return i%2!=0;
五、简答题(每题6分,共24分)
1. 有一个学生成绩表SCORE,请写出一条SQL语句查询出每门课都大于80分的学生的姓名?
NAME | SUBJECT | score |
---|---|---|
张三 | 语文 | 81 |
张三 | 数学 | 75 |
李四 | 语文 | 76 |
李四 | 数学 | 90 |
王五 | 语文 | 81 |
王五 | 数学 | 100 |
王五 | 英语 | 90 |
最低分不低于80: SELECT NAME FROM SCORE GROUP BY NAME HAVING MIN(score)>=80 同姓名不存在低于80分 select name from stu group by name having name not in ( select name from stu where score <80) 自连接 将三个科目全都补上 粗暴 SELECT D.name FROM ( SELECT S.name,S.score AS ITEM1,S1.score AS ITEM2,S2.score AS ITEM3 FROM Student S INNER JOIN Student S1 ON S.name = S1.name AND S.course != S1.course INNER JOIN Student S2 ON S.name = S2.name AND S2.course NOT IN (S.course,S1.course) WHERE S.score>=80 AND S1.score>=80 AND S2.score>=80 ) D GROUP BY D.name
2. 编程实现字符串中单词的反转。假设所有的单词均有空格分隔且标点符号当做字母处理。如“welcome to Innovation works.”变换成“works.Innovation to welcome”.
public static String change(String string){ //根据空格分隔 String[] splitArray = string.split(" "); //通过Collections来反转 Collections.reverse(Arrays.asList(splitArray)); //创建stringbuffer来组成新字符串 StringBuilder stringBuilder = new StringBuilder(); for (String s : splitArray) { System.out.println("s = " + s); stringBuilder.append(s); stringBuilder.append(" "); } return stringBuilder.toString(); }
3.请用递归算法打印出斐波那契数列(从第三个数开始每个数等于它前面的两个数相加)。如:1,1,2,3,5,8,13,21。。。。
斐波那契数列又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。
//建立一个函数,用于计算数列中的每一项 public static int fib(int num) { //判断:是否是第一个数和第二个数 if(num == 1 || num == 2) { return 1; }else { //循环调用本函数 return fib(num - 2) + fib(num - 1); } } //主函数(程序入口) public static void main(String[] args) { //建立一个for循环,用于打印第一个至第十个数字 for(int i = 1;i <= 20;i++) { //调用函数进行打印 System.out.print(fib(i) + "\t"); } }
4. 编写一段java代码,求两个字符串StringA和StringB的最长公共子串。
public static String iQueryMaxCommString(String stringA, String stringB) { if(stringA==null || stringB==null){ return null; } if(stringA.length()<1 || stringB.length()<1){ return ""; } if (stringA.contains(stringB)) { return stringB; } else if (stringB.length() == 1) { return ""; } String leftSerach = iQueryMaxCommString(stringA, stringB.substring(0, stringB.length() - 1)); String rightSerach = iQueryMaxCommString(stringA, stringB.substring(1, stringB.length())); return leftSerach.length() >= rightSerach.length() ? leftSerach : rightSerach; }