4_JAVA+Oracle面试题(有答案)

基础测试题
卷面上不能出现任何的涂写文字,所有的答案要求写在答题纸上,考卷不得带走。
选择题
1、 What will happen when you attempt to compile and run the following code? (3)
public class Static {
static {
int x = 5; // 在static内有效
}
static int x, y; // 初始化为0
public static void main(String args[]) {
x--; // -1
myMethod();
System.out.println(x + y + ++x);
}
public static void myMethod() {
y = x++ + ++x; // y=-1+1 x=1
}
}
A. compiletime error B. prints: 1 C. prints: 2 D、 prints: 3 E、 prints: 7 F、 prints: 8
将以上的程序分步进行执行:
1、 static int x, y; ? x = 0 ; y = 0 ;
2、 x--; ? x = -1 ; y = 0 ;
3、 y = x++ + ++x; ? x = 1 ; y = 0 ;
4、 System.out.println(x + y + ++x); ? 3
2、 Given the following code, what will be the output? (3)
class Value {
public int i = 15;
}
public class Test {
public static void main(String argv[]) {
Test t = new Test();
t.first();
}
public void first() {
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);
}
public void second(Value v, int i) {
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);
}
}
A、 15 0 20 B、 15 0 15 C、 20 0 20 D、 0 15 20

3、 What will happen when you attempt to compile and run the following code? (3)
class MyParent {
int x, y;
MyParent(int x, int y) {
this.x = x;
this.y = y;
}
public int addMe(int x, int y) {
return this.x + x + y + this.y;
}
public int addMe(MyParent myPar) {
return addMe(myPar.x, myPar.y);
}
}
class MyChild extends MyParent {
int z;
MyChild(int x, int y, int z) {
super(x, y);
this.z = z;
}
public int addMe(int x, int y, int z) {
return this.x + x + this.y + y + this.z + z;
}
public int addMe(MyChild myChi) {
return addMe(myChi.x, myChi.y, myChi.z);
}
public int addMe(int x, int y) {
return this.x + x + this.y + y;
}
}
public class MySomeOne {
public static void main(String args[]) {
MyChild myChi = new MyChild(10, 20, 30);
MyParent myPar = new MyParent(10, 20);
int x = myChi.addMe(10, 20, 30);
int y = myChi.addMe(myChi);
int z = myPar.addMe(myPar);
System.out.println(x + y + z);
}
}
A、 300 B、 240 C、 120 D、 180 E、 compile error F、 none of the above
class MyParent {
int x, y;
MyParent(int x, int y) { // 10 20
this.x = x;
this.y = y;
}
public int addMe(int x, int y) {
return this.x + x + y + this.y;
}
public int addMe(MyParent myPar) {
return addMe(myPar.x, myPar.y);
}
}
class MyChild extends MyParent {
int z;
MyChild(int x, int y, int z) { // 10 20 30
super(x, y);
this.z = z;
}
public int addMe(int x, int y, int z) {
return this.x + x + this.y + y + this.z + z;
// 10 10 20 20 30 30 --> 120 + 120
}
public int addMe(MyChild myChi) {
return addMe(myChi.x, myChi.y, myChi.z);
}
public int addMe(int x, int y) {
return this.x + x + this.y + y;
}
}
public class MySomeOne {
public static void main(String args[]) {
MyChild myChi = new MyChild(10, 20, 30);
MyParent myPar = new MyParent(10, 20);
int x = myChi.addMe(10, 20, 30); // 120
int y = myChi.addMe(myChi); // 120
int z = myPar.addMe(myPar); // 60
System.out.println(x + y + z);
}
}
4、 What will happen when you attempt to compile and run the following code? (3)
interface MyInterface {
}
public class MyInstanceTest implements MyInterface {
static String s;
public static void main(String args[]) {
MyInstanceTest t = new MyInstanceTest();
if (t instanceof MyInterface) {
System.out.println("I am true interface");
} else {
System.out.println("I am false interface");
}
if (s instanceof String) {
System.out.println("I am true String");
} else {
System.out.println("I am false String");
}
}
}
A、 compile time error
B、 runtime error
C、 prints: “I am true interface” followed by “I am true String”
D、 prints: “I am false interface” followed by “I am false String”
E、 prints: “I am true interface” followed by “I am false String”
F、 prints: “I am false interface” followed by “I am true String”
只有当一个对象实例化之后才有可能知道其具体的类型。
5、 What results from attempting to compile and run the following code? (3)
public class Ternary {
public static void main(String args[]) {
int a = 5;
System.out.println("Value is - " + ((a < 5) ? 9.0 : 9)); ? 数据类型的自动转换
}
}
A、 print:Value is -9 B、 print:Value is -5 C、 Compilation error D、 None of these
6、 What will be the result of executing the following code? (3)
public static void main(String args[]) {
char digit = 'a';
for (int i = 0; i < 10; i++) {
switch (digit) {
case 'x': {
int j = 0;
System.out.println(j);
}
default: {
int j = 100;
System.out.println(j);
}
}
}
int i = j;
System.out.println(i);
}
A、 100 will be printed 11 times.
B、 100 will be printed 10 times and then there will be a runtime exception
C、 The code will not compile because the variable i cannot be declared twice within the mani() method.
D、 The code will not compile because the variable j cannot be declared twice within the switch statement.
E、 None of these.
7、 Which of the following collection classes from java.util package are Thread safe? (3)
A、 Vector B、 ArrayList C、 HashMap D、 Hashtable
8、 What will happen when you attempt to compile and run the following code? (3)
class MyThread extends Thread {
public void run() {
System.out.println("MyThread: run()");
}
public void start() {
System.out.println("MyThread: start()");
}
}
class MyRunnable implements Runnable {
public void run() {
System.out.println("MyRunnable: run()");
}
public void start() {
System.out.println("MyRunnable: start()");
}
}
public class MyTest {
public static void main(String args[]) {
MyThread myThread = new MyThread();
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
myThread.start();
thread.start();
}
}
A、 prints: MyThread: start() followed by MyRunnable: run()
B、 prints: MyThread: run() followed by MyRunnable: start()
C、 prints: MyThread: start() followed by MyRunnable: start()
D、 prints: MyThread: run() followed by MyRunnable: run()
E、 compile time error
F、 None of the above
9、 Which of the following will output -4.0?(3)
1、 System.out.println(Math.floor(-4.7));
2、 System.out.println(Math.round(-4.7));
3、 System.out.println(Math.ceil(-4.7));
4、 System.out.println(Math.min(-4.7));
10、 What will happen if you attempt to compile and run the following code?(3)
Integer ten=new Integer(10);
Long nine=new Long (9);
System.out.println(ten + nine);
int i=1;
System.out.println(i + ten);
1、 19 followed by 20
2、 19 followed by 11
3、 Error: Can’t convert java lang Integer
4、 10 followed by 1
问答题
1、 请写出Java中的数据类型划分及默认值。(5)
数据类型分为|:
? 基本数据类型:
|- 数值型:byte、short 、int、long,默认是0
|- 浮点型:float、double,默认是0.0
|- 字符:char,默认是“\n0000”
|- 布尔:boolean,默认是false
? 引用数据类型:默认值是null
|- 数组:
|- 类:
|- 接口:
2、 Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?(5)
? OverLoad:在一个类中出现的,方法名称相同,参数的类型或个数不同,没有权限要求
? Override:在继承类中出现的,方法名称,参数的类型或个数相同,注意访问权限不能更加严格
? OverLoad只是根据参数的类型或个数来确定的,与返回值类型无关。
3、 请详细解释String类的特点?StringBuffer类的特点?并列举出十个String的相关操作方法。(5)
1、 String类特点:
? 一个字符串就是一个String的匿名对象
? 有两种赋值方式,一种是直接赋值,另外一种是采用关键字new完成的,第一种方式性能高,只会开辟一个堆空间,而第二种会开辟两个堆空间
? String的地址比较使用==,内容比较使用equals()
? String的内容一旦声明则不可改变,改变的是其内存地址的指向
2、 StringBuffer:内容可以改变
3、 方法:split()、matches()、replaceAll()、charAt()、getBytes()、substring()、indexof()、toLowerCase()、toUpperCase()、startsWith()、endsWith().
4、 abstract class和interface的区别?(5)
? 抽象类:包含一个抽象方法的类就是抽象类,抽象类要使用abstract关键字声明,抽象类必须有子类,而且通过对象多态性可以直接为父类对象进行实例化,一个抽象类可以包含任意的东西,包括构造方法、普通方法、抽象方法、属性、全局常量等等,可以包含内部接口或抽象类,模板设计
? 接口:由抽象方法和全局常量组成的特殊类称为接口,接口可以被实现,一个类可以同时实现多个接口,但是一个接口只允许继承其他接口,通过接口可以实现多继承的关系,一个接口中可以包含其他的内部接口或内部类。代理、工厂。
5、 请写出异常处理的主要流程。(5)
如果程序中没有任何的异常处理语句,则将交给JVM进行处理,一旦出现了异常之后程序将退出执行
如果程序中存在了异常的处理语句,则出现异常之后,在try中进行捕获,之后与catch中的异常类型进行匹配,如果匹配成功,则可以进行处理
不管如何处理异常,只要是加入了finally关键字,则肯定都要执行此出口。
一旦出现了异常之后,抛出的就是一个异常类的实例化对象。
6、 详细解释Java中垃圾收集的主要流程。(5)
垃圾收集主要有两种形式:手工、自动
自动会不定期进行回收,以释放无用的空间
手工调用的是System类中的gc()方法,此方法实际上调用的是Runtime类中的gc()方法,当一个对象被回收之前将调用类中的finlalize()方法,此方法为 Object类所提供,表示对象回收前的收尾工作。即使出现了异常,也不影响程序的执行,而且此方法抛出的是Throwable,表示可能是异常也可能是错误。
编程题
1、 编写一个Singleton。(5)
class Singleton{
public static Singleton instance = new Singleton() ;
private Singleton(){}
public static Singleton getInstance(){
return instance ;
}
}
Runtime、Class都采用了此类形式。
2、 使用JDBC + Oracle完成一个dept表的查询操作,可以根据关键字显示出全部的查询结果。(10)
import java.sql.* ;
public class JDBC{
public static void main(String args[]) throws Exception {
String sql = "SELECT deptno,dname,loc FROM emp " ;
Class.forName("oracle.jdbc.driver.OracleDriver") ;
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:MLDN","scott","tiger") ;
PreparedStatement pstmt = conn.prepareStatement(sql) ;
ResultSet rs = pstmt.executeQuery() ;
while(rs.next()){
int deptno = rs.getInt(1) ;
String dname = rs.getString(2) ;
String loc = rs.getString(3) ;
System.out.println(dno + " --> " + dname + "," + loc) ;
}
rs.close() ;
pstmt.close() ;
conn.close() ;
}
}
3、 输入一个email地址,之后使用正则表达式验证该email地址是否正确。(5)
public class JDBC{
public static void main(String args[]) throws Exception {
String str = "aa@aa.com" ;
System.out.println(str.matches("\\w+@\\w+\\.\\w+")) ;
}
}

4、 从键盘输入文件的内容和要保存的文件名称,之后根据输入的名称创建文件,并将内容保存到文件之中。(5)
import java.io.* ;
public class JDBC{
public static void main(String args[]) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)) ;
String fileName = null ;
String content = null ;
System.out.print("请输入文件路径:") ;
fileName = buf.readLine() ; // 接收内容
System.out.print("请输入文件内容:") ;
content = buf.readLine() ;
PrintStream out = new PrintStream(new FileOutputStream(new File(fileName))) ;
out.println(content) ;
out.close() ;
}
}
数据库
1、 显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列。(3)
SELECT job,SUM(sal) sum
FROM emp
WHERE job<>'SALESMAN'
GROUP BY job HAVING sum>5000
ORDER BY sum ;
2、 列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数。(3)
SELECT job,COUNT(empno)
FROM emp
GROUP BY job HAVING MIN(sal)>1500 ;
3、 列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级。(3)
SELECT e.empno,e.ename,d.dname,m.ename,s.grade
FROM emp e,dept d,emp m,salgrade s
WHERE sal>(SELECT AVG(sal) FROM emp) AND e.mgr=m.empno AND d.deptno=e.deptno(+) AND e.sal BETWEEN s.losal AND s.hisal ;
4、 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。(3)
SELECT e.ename,e.sal,d.dname FROM emp e,dept d
WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30) AND e.deptno=d.deptno;
5、 列出所有部门的详细信息和部门人数。(3)
SELECT d.dname,d.loc,dt.count
FROM dept d,(SELECT deptno,COUNT(*) count FROM emp GROUP BY deptno) dt
WHERE d.deptno=dt.deptno ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值