离职后重新开始找工作,觉得该写写博客什么的,记录一些东西吧。收集一些常见的笔试面试题,再记录下找工作的一些经历,也可以作为自己的总结。一步步来吧~
一,选择题
1.下面关于Java的表述有错误的是__ 。
A. Java中没有sizeof操作符,所有数据类型的长度都是确定的,与平台无关。
B.在Java中,局部变量不会被自动初始化,需要显式的赋初值。
C. Java中的instanceof运算符,可以判断一个对象是否属于某个类的实例。
D.一个Java文件里可以有多个public类,但Java文件名必须和包含main方法的那个public类名精确一致。
答案:D
解析:考察基本知识点
A.java中没有sizeof操作符
所有数据类型的长度都是确定的,与平台无关,所以java需要运行在java虚拟机上,这大大方便了java的可移值性,使得java一次编写,随处运行。
B.很明显,需要进行初始化
C.instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
D.只能有一个public类
2.下面关于Java中垃圾回收(gc)的表述有错误的是_ 。
A.在String str1 = “Hello”;String str2 = str1;str1 = null;中,对象”Hello”不会被垃圾回收。
B.调用Runtime.getRuntime().gc()会立即启动垃圾回收线程对当前程序进行垃圾回收。
C.调用Systmer.gc()只是提示垃圾回收器进行垃圾回收操作,并不保证gc线程立即启动。
D.当垃圾回收器将要释放无用对象的内存时,先调用该对象的finalize()方法。
答案:B
解析:考察有关垃圾回收(GC)
A不清楚
C在网上查找,并不能保证GC线程立即启动,摘自:
Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,很多人来我公司面试时,我都会问这个问题的,70%以上的人回答的含义是回收对象,实际上这是不正确的。
System.gc()
Runtime.getRuntime().gc()
上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。
3.第十行的声明将调用哪些方法____。
class Person {
public void printValue(int i, int j) { }
public void printValue(int i) { System.out.println("执行第3行代码"); }
}
public class Teacher extends Person {
public void printValue() { }
public void printValue(int i) { System.out.println("执行第7行代码"); }
public static void main(String args[]) {
Person t = new Teacher();
t.printValue(10);
}
}
A.第2行的方法 B. 第3行的方法 C. 第6行的方法 D. 第7行的方法
答案:D
解析:不是很懂啊,本来以为选B,但是敲了行代码执行下来是第七行。
4.Java接口中方法的修饰符可以为___。
A private B protected C sychronized D abstract
答案:D
解析:有关接口,很重要
第14题
5.下面代码的运行结果为:_。
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
String s;
System.out.println("s=" + s);
}
}
A 代码得到编译,并输出“s=”
B 代码得到编译,并输出“s=null”
C 由于String s没有初始化,代码不能编译通过
D 代码得到编译,但捕获到 NullPointException异常
答案:C
解析:定义的基本类型需要进行初始化
二、填空题
1、面向对象程序设计的三大特征是:()、()、()。
答案:面向对象程序设计有三大特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。这三个单词很常见,大家还是记住为好!
拓展:
(1)封装(Encapsulation):类包含了数据和方法,将数据和方法放在一个类中就构成了封装。
(2)继承(Inheritance):Java是单继承的(这点和C++有区别),意味着一个类只能继承于一个类,被继承的类叫父类(或者叫基类,base class),继承的类叫子类。Java中的继承使用关键字extends。但是,一个类可以实现多个接口,多个接口之间用逗号进行分割。实现接口使用关键字implements。
(3)多态(Polymorphism):多态最核心的思想就是,父类的引用可以指向子类的对象,或者接口类型的引用可以指向实现该接口的类的实例。多态之所以是这样的是因为基于一个事实:子类就是父类!
2、对于byte型变量,内存分配()个字节。对于long型变量,内存分配()个字节。
3、()包是Java语言的核心类库,他包含了运行Java程序必不可少的驱动类。
答案:java.lang包:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
4、如果一个类的声明中没有使用extends关键字,这个类被系统默认为是 ()类的子类,该类中包含有哪些方法,请列举3个()、()、()。
答案:object类,包含方法有:
1.clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
2.getClass方法
final方法,获得运行时类型。
3.toString方法
该方法用得比较多,一般子类都有覆盖。
4.finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
5.equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
6.hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
7.wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
8.notify方法
该方法唤醒在该对象上等待的某个线程。
9.notifyAll方法
该方法唤醒在该对象上等待的所有线程。
三、简答题
- List、Set、Map三个存取数据时各自的特点是什么?
- 列出几种Java常见的异常以及其发生的原因。Java的异常处理共分为哪几种?他们之间的区别是什么?
- 请写出至少5个JSP的内置对象及其作用。
- 请阐述一下你对IOC和AOP的理解。
- XML有哪些解析技术?区别是什么?
五、编程和分析题
1.打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环进行循环判断分析,输出符合条件的数字。
public class FindDaffodilNumber {
public static List<Integer> getNumber(int number){
List<Integer> list = new ArrayList<Integer>();
list.add(number%10); //个位数
list.add(number/10%10); //十位数
list.add(number/100); //百位数
return list;
}
public static void main(String[] args) {
for(int i = 100; i<1000; i++){
List<Integer> list = getNumber(i);
int count = 0;
for (int j = 0; j < list.size(); j++) {
int cube = (int)Math.pow(list.get(j), 3);
count = count +cube;
}
if(count == i){
System.out.println("水仙花数为:" + i);
}
}
}
}
输出结果:
水仙花数为:153
水仙花数为:370
水仙花数为:371
水仙花数为:407
2.输入某年某月某日,判断这一天是这一年的第几天?
程序分析:
1,需要考虑闰年的情况,主要是二月份的天数
2,如果是2月,count= 31 + d;如果是3月,count = 31 + Feb + d;四月,count = 31 + Feb + 31
public class CalculateDates {
public static void main(String[] args) {
int y,m,d;
int sum = 0;
int feb = 28;
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
y = input.nextInt();
System.out.println("请输入月份:");
m = input.nextInt();
System.out.println("请输入几号:");
d = input.nextInt();
//判断是否为闰年
if((y%4 == 0 && y%100 != 0)|| y%400 == 0){
feb = 29;
}
//进行判断月份,根据月份来确定加几天
switch(m){
case 1:sum = d;
break;
case 2:sum = 31 + d;
break;
case 3:sum = 31 + feb + d;
break;
case 4:sum = 31 + feb + 31 + d;
break;
case 5:sum = 31 + feb + 31 + 30 + d;
break;
case 6:sum = 31 + feb + 31 + 30 + 31 + d;
break;
case 7:sum = 31 + feb + 31 + 30 + 31 + 30 + d;
break;
case 8:sum = 31 + feb + 31 + 30 + 31 + 30 + 31 + d;
break;
case 9:sum = 31 + feb + 31 + 30 + 31 + 30 + 31 + 31 + d;
break;
case 10:sum = 31 + feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + d;
break;
case 11:sum = 31 + feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + d;
break;
case 12:sum = 31 + feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + d;
break;
}
System.out.println(y + "年" + m + "月" + d + "日是今年的第" + sum + "天");
}
}