Java面试题(一)部分题目
博主马上要面对几家公司的面试,故自己准备了点面试题,仅供参考!
1,线程的创建的方式:
答:1,继承Thread(注意,此类其实也是实现了Runnable接口的),2,实现Runnable接口
答:1,继承Thread(注意,此类其实也是实现了Runnable接口的),2,实现Runnable接口
2,1. 下面哪些是Thread类的方法()
A start() B run() C exit() D getPriority()
A start() B run() C exit() D getPriority()
答案:ABD
start();当前线程处理就绪状态,但并未开始。等CPU给你分配时间片
run():当前线程要执行的任务,写在这个方法中。
getPriority(),线程的优先级,1-10;
start();当前线程处理就绪状态,但并未开始。等CPU给你分配时间片
run():当前线程要执行的任务,写在这个方法中。
getPriority(),线程的优先级,1-10;
3, 下面关于java.lang.Exception类的说法正确的是()
A 继承自Throwable B Serialable CD 不记得,反正不正确
答案:A
4, 异常处理中,都有哪些关键字?
答:5
答:5
5,下面程序的运行结果是()
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
答案:false
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
答案:false
6, 下列说法正确的有()
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D.一个class只能定义一个constructor
答案:C
解析:这里可能会有误区,其实普通的类方法是可以和类名同名的,和构造方法唯一的区分就是,构造方法没有返回值。
7,数组是否有默认值?
有,字符串为null,整数为0
有,字符串为null,整数为0
8,如果定义的类的名称前加上了public ,问这个类名是否必须和这个类的文件名相同?
答:是。相反,则可以不相同。
答:是。相反,则可以不相同。
9,下面程序的运行结果:()
复制代码
public static void main(String args[]) {
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
pong();
}
};
t.run();
System.out.print("ping");
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}
复制代码
A pingpong B pongping C pingpong和pongping都有可能 D 都不输出
A pingpong B pongping C pingpong和pongping都有可能 D 都不输出
答案:B
解析:这里考的是Thread类中start()和run()方法的区别了。start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样的,已经失去线程的特性了。因此在启动一个线程的时候一定要使用start()而不是run()。
--------------------------------------
10,下列属于关系型数据库的是()
A. Oracle B MySql C IMS D MongoDB
答案:AB
解答:IMS(Information Management System )数据库是IBM公司开发的两种数据库类型之一;
一种是关系数据库,典型代表产品:DB2;
另一种则是层次数据库,代表产品:IMS层次数据库。
非关系型数据库有MongoDB、memcachedb、Redis等。
11,什么是关系型数据库?
所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织
12,什么是非关系型数据库?
不满足上面11题的。
不满足上面11题的。
13,nosql.
答:1,键值对(redis..),2,列模型(HBase..),3,文档模型(mongoDB..)
答:1,键值对(redis..),2,列模型(HBase..),3,文档模型(mongoDB..)
14,什么是GC?
垃圾回收(GC)机制
垃圾回收(GC)机制
15,GC线程是否为守护线程?()
答案:是
解析:线程分为守护线程和非守护线程(即用户线程)。
只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。
守护线程最典型的应用就是 GC (垃圾回收器)
守护线程最典型的应用就是 GC (垃圾回收器)
16,接口就是纯的抽象类。接口中的方法或常量,隐含了哪些关键字?抽象类不能new,接口不能new.
17,抽象类,类前面有abstract,方法可以有或没有abstract,方法有abstract则不能有代码体
18,下列说法正确的是()
A LinkedList实现自List
B AbstractSet继承自Set
C HashSet继承自AbstractSet
D WeakMap继承自HashMap
答案:AC
-----------------------
19, 存在使i + 1 < i的数吗()
答案:存在
解析:如果i为int型,那么当i为int能表示的最大整数时,i+1就溢出变成负数了,此时不就<i了吗。
20,0.6332的数据类型是()
A float B double C Float D Double
答案:B
解析:默认为double型,如果为float型需要加上f显示说明,即0.6332f
21,下面哪个流类属于面向字符的输入流( )
A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader
答案:D
22,Java接口的修饰符可以为()
A private B protected C final D abstract
答案:CD
------
23,接口默认修饰关键字:
23,接口默认修饰关键字:
接口的方法默认是public abstract;
接口中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。
所以接口的属性默认是public static final 常量,且必须赋初值。
注意:final和abstract不能同时出现。
------
24,不通过构造函数也能创建对象吗()
A 是 B 否
答案:A
解析:Java创建对象的几种方式(重要):
(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。
-------
25,ArrayList list = new ArrayList(20);中的list扩充几次()
A 0 B 1 C 2 D 3
答案:A
-------
26,下面哪些是对称加密算法()
A DES B AES C DSA D RSA
答案:AB
解析:常用的对称加密算法有:DES、3DES、RC2、RC4、AES
常用的非对称加密算法有:RSA、DSA、ECC
使用单向散列函数的加密算法:MD5、SHA
----
27,新建一个流对象,下面哪个选项的代码是错误的?()
A)new BufferedWriter(new FileWriter("a.txt"));
B)new BufferedReader(new FileInputStream("a.dat"));
C)new GZIPOutputStream(new FileOutputStream("a.zip"));
D)new ObjectInputStream(new FileInputStream("a.dat"));
答案:B
28,下面程序能正常运行吗()
public class Test {
public class Test {
public static void haha(){
System.out.println("haha");
}
public static void main(String[] args) {
((Test)null).haha();
}
System.out.println("haha");
}
public static void main(String[] args) {
((Test)null).haha();
}
}
/*
(Test)null相当于 Test t=null;
------
如果haha()方法为静态的,
Test t=null;
t.haha();
相当于
Test.haha();是可以调用的。
----------
所在下面这个
((Test)null).haha();
相当于Test.haha();是可以运行调用的。
*/
======
答案:能正常运行
/*
(Test)null相当于 Test t=null;
------
如果haha()方法为静态的,
Test t=null;
t.haha();
相当于
Test.haha();是可以调用的。
----------
所在下面这个
((Test)null).haha();
相当于Test.haha();是可以运行调用的。
*/
======
答案:能正常运行
解析:输出为haha,因为null值可以强制转换为任何java类类型,(String)null也是合法的。
但null强制转换后是无效对象,其返回值还是为null,
而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。
反过来,没有static修饰就只能用对象进行访问,
使用null调用对象肯定会报空指针错了。这里和C++很类似
但null强制转换后是无效对象,其返回值还是为null,
而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。
反过来,没有static修饰就只能用对象进行访问,
使用null调用对象肯定会报空指针错了。这里和C++很类似
29,代码执行顺序:
class HelloA {
class HelloA {
public HelloA() {
System.out.println("HelloA");
}
{ System.out.println("I'm A class"); }
static { System.out.println("static A"); }
System.out.println("HelloA");
}
{ System.out.println("I'm A class"); }
static { System.out.println("static A"); }
}
public class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{ System.out.println("I'm B class"); }
static { System.out.println("static B"); }
public static void main(String[] args) {
new HelloB();
}
}
public HelloB() {
System.out.println("HelloB");
}
{ System.out.println("I'm B class"); }
static { System.out.println("static B"); }
public static void main(String[] args) {
new HelloB();
}
}
结果:
static A
static B
I'm A class
HelloA
I'm B class
HelloB
static A
static B
I'm A class
HelloA
I'm B class
HelloB