http://blog.csdn.net/liu_005/article/details/52267538
一个字符串比较
http://blog.csdn.net/hp910315/article/details/50865168
基础部分
main方法被声明为private会怎么样?
编译时没有错误,运行时错误。错误: 在类 day01.HomeWork 中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)。对于这个问题核心卷有详细的阐述,从1.4开始必须是public,1.4以前可以是其他修饰符。
基本类型指什么,有哪些?
8种,详见于此
输出语句输出值是多少?
int a =4;
double num;
System.out.print( false ? 9.9:9);
输出值是9.0,因为三目表达式中,后面两个表达式的类型必须一样,9.9是double类型,所以9向上变量提升,变为9.0.
switch可以和那些数据类型配合?
Unlike if-then and if-then-else statements, the switch statement can have a number of possible execution paths. A switch works with the byte, short, char,and int primitive data types. It also works with enumerated types (discussed in Enum Types),the String class, and a few special classes thatwrap certain primitive types: Character,Byte, Short, and Integer。(截止JDK 8)
Only convertible int values, strings or enum variables are permitted
switch语句需要注意添加break关键字,break只能用于switch和loop语句,continue只能用于loop语句。
一个很坑爹的字符串的题
String a = " abd ";
String aTrim = a.trim();
String b = "abc";
String bTrim = b.trim();
System.out.print(a==aTrim);
System.out.print(b==bTrim);
请问输出
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Integer ia = 100;
Integer ib = 100;
Integer ic = 200;
Integer id = 200;
int im = 10;
Integer in = 10;
System.out.println(ia==ib);
System.out.println(ic==id);
System.out.println(im==in);
}
}
这个题的考点主要在:第一、二输出语句是基本数据类型的缓存机制,Integer默认缓存了-128到127的对象,当自动包装的时候回返回缓存中的对象,如果超出了缓存区间的值,则返回新创建的。第三个输出语句im是基本类型,逻辑比较的时候,包装类会自动拆装。
位移操作>>、>>>、<<的区别?
>>是右移动,用符号位填充;>>>也是右移用0填充;<<左移用0填充。
下列数组声明语句中,错误的是:
int[] arrayA = new int[]{};
//int[] arrayB = new int[];//Variable must provide either dimension expressions or an array initializer
int[] arrayC = {};
int[][] arrayD = new int[2][];
解释一下代码点和代码单元的概念。
http://blog.csdn.net/hp910315/article/details/50865168
equals()和hashcode()
http://blog.csdn.net/lijiecao0226/article/details/24609559
try catch finally 与return混用
throw对象和return都会在整个try catch finally语句执行完成后在决定是return还是throw,finally语句中的return语句会覆盖前面的异常,finally语句中的异常会覆盖前面的异常。
final关键字
http://www.importnew.com/7553.html
枚举类
对象析构与finalize方法。
为什么用数组存储密码比String存储密码要安全?
见此
在java核心卷一中就提到了这个问题,1.6为了解决Scanner输入密码时不可隐藏的问题,引入了Console。接受密码java就是用的字符串数组。
import java.io.Console;
public class Main {
public static void main(String[] args) {
Console console = System.console();
String str = console.readLine("User name:");
char[] passwd = console.readPassword("Password:")
}
}
如何拼接字符串? 使用“+”拼接字符串的缺点
可以通过String的concat()函数,也可以用+号拼接,也可以用StringBuilder(异步)、StringBuffer(异步)append()函数进行拼接。用+号拼接每一次都会重新开辟一个新的字符串空间,把新的字符串赋给这块新的空间。字符串如果很大,循环次多又多,那么浪费了很多时间和空间的开销。因为StringBuilder和StringBufffer每次都是在已有的内存空间追加的字符串,初始空间是16字节长度,如果空间不足的话会重新开辟2(size+1)个字节长度的空间,然后把新的字符串存过来,所以尽可能的初始化一个预估的值。
下面这段代码的输出结果?
public class Beautiful {
public static void main(String... args) {
System.out.println("12343" == "123" + "43");
System.out.println("12343" == "123" + new String("43"));
}
}
false
返回值是多少?
static int m(){
int a =90;
try{
throw new Exception();
}catch(Exception e){
return ++a;
}finally {
a=900;
}
}
面向对象
下题目的输出
public class Test {
public static void main(String[] args) {
Aoo aoo = new Aoo(5);
System.out.println(aoo.num);
}
}
class Aoo {
int num;
public Aoo(int num) {
num = num;
}
}
这个题的输出0,该分代码是可以编译通过的,num=num这行代码执行的是变量自己赋值给自己。对象的变量num根本没有参与。
super()和this()函数是否可以同时出现在构造函数中?
不可以
该题的整体思路是,父类的初始化必须先于子类完成。所以如果super()和this()同时出现在构造函数中,那么就会造成this会触发父类中的构造函数又被触发一次。造成初始化过程的紊乱,所以jvm不允许这种情况出现。
下列说法正确的有( )
A.class中的constructor不可省略
B.constructor必须与class同名,但方法不能与class同名
C.constructor在一个对象被new时执行
D.一个class只能定义一个constructor
解析:省略写构造函数后,会有一个默认构造函数;方法也可以与类同名,只是这样不符合规范,类名通常首字母大写;一个类明显可以定义多个,重载;
JAVA多态的调用
方法的调用规则:首先根据引用变量的类型,确定此时应该出发引用变量的哪一个函数。然后根据引用变量指向的对象的函数重写情况来看实际调用的那个具体的函数体,如果这里存在隔代继承,还要考虑中间继承类的重写情况。
变量和静态方法不存在多态机制。
http://blog.csdn.net/qq_27258799/article/details/51194598
http://blog.csdn.net/simon901/article/details/25078397
子类可以重载父类的方法么?
当然可以,只是为了满足里氏替换原则,必须满足输入参数类型的范围扩大,返回参数类型的范围缩小。注意:这里的替换接口也需要替换。
Comparable和Comparator的区别?
if(username.equals(“zxx”){
}
int x = 1;
return x==1?true:false;
集合
讲解一下HashMap的原理?
http://www.importnew.com/20386.html
解决Hash冲突的办法有哪些?
http://www.cnblogs.com/novalist/p/6396410.html
10大集合面试题http://blog.csdn.net/w369033345/article/details/52187411
为什么一定要实现Iterable接口,为什么不直接实现Iterator接口呢?
看一下JDK中的集合类,比如List一族或者Set一族,都是实现了Iterable接口,但并不直接实现Iterator接口。
仔细想一下这么做是有道理的。
因为Iterator接口的核心方法next()或者hasNext() 是依赖于迭代器的当前迭代位置的。 如果Collection直接实现Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。 当集合在不同方法间被传递时,由于当前迭代位置不可预置,那么next()方法的结果会变成不可预知。 除非再为Iterator接口添加一个reset()方法,用来重置当前迭代位置。 但即时这样,Collection也只能同时存在一个当前迭代位置。 而Iterable则不然,每次调用都会返回一个从头开始计数的迭代器。 多个迭代器是互不干扰的。
多线程
可重入锁的原理?
http://www.cnblogs.com/xrq730/p/4979021.html
什么是守护线程(Daemon 线程)?什么情况可以用守护线程?
可以通过t.setDaemon(true);将线程转换为守护线程(daemon thread)。这样一个线程没有什么神奇。守护线程的唯一用途是为其他线程提供服务。只剩下守护线程时,虚拟机就退出了。守护线程永远不要去访问 固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。
解释一下interrupt()、interrupted()、isInterrupted()的区别?
如何确保一段代码同时最多只允许有MaxNum个线程执行?
见此文
锁的原理
http://www.cnblogs.com/javanerd/p/4504482.html
有synchronize,为啥Java还要提供Lock框架?
synchronize的局限性主要有:不能中断一个正在试图获得锁的线程;试图获得锁时不能超时;每个锁仅有单一条件可能是不够的(wait() notify() notifyAll())。在代码中应该使用哪一种?Lock和Condition对象还是同步方法?下面是一些建议
进程与线程之间的区别,以及JAVA的线程生命周期?
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。
分别说一下java多线程的同步器:信号量、倒计时门栓、障栅、交换器、同步队列。
税友集团面试题
http://blog.csdn.net/jianfpeng241241/article/details/49445521