Java笔试中遇见奇怪问题积累篇
2017-03-14 16:41
246 查看
1:接口可以使用abstract方法修饰
2:我们在实现一个比较时候一般实现Comparator接口,然后编译器强制我们实现compare方法,但是我们强制要求我们实现equals方法,但是看Comparator源码你会发现有两个方法声明:
因为Java中所有的类都是Object的子类(接口也不例外),所以equals方法默认使用使用的Object的equals方法
3:使用null调用方法竟然不报空指针异常:
我个人分析:应该虽然nl对象是null,但是nl对象有类型信息,可以获取class字节码信息然后调用static方法
4:引用类型为null时候自动拆箱为报空指针异常
5:使用Integer的方法直接转成固定进制数
String source = "0100";
int d = Integer.parseInt(a, 2);
讲解:Integer.parseInt(source , 2)是将a转成2进制,这里面输出结果默认就是十进制!输出的进制不可以指定。
int source =8;
System.out.println(Integer.toString(source, 2));
讲解:将指定数转换成2进制,输出结果是指定的进制,输入数是默认10进制,不可以指定
以后自己写代码实现可以参考JDK源码实现!
6:已知一个数列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,用递归法求f(10)的值.
耍小聪明直接交换左右两项得:f(n)=f(n+2)-2*f(n+1),然后不假思索的就开始写算法,结果运行一看,栈内存溢出。刚开始怀疑是递归调用层次较深导致的,后来求f(3)溢出秒懂了!递归没有出口!!!
正确实现:可以推到出f(n)=2*f(n-1)+f(n-2)就有出口了,然后实现即可。
public abstract interface HelloWorld { boolean sayHello(); }
2:我们在实现一个比较时候一般实现Comparator接口,然后编译器强制我们实现compare方法,但是我们强制要求我们实现equals方法,但是看Comparator源码你会发现有两个方法声明:
public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); }
因为Java中所有的类都是Object的子类(接口也不例外),所以equals方法默认使用使用的Object的equals方法
3:使用null调用方法竟然不报空指针异常:
public class Null { public static void print() { System.out.println("Null ... "); } public static void main(String[] args) { Null nl = null; nl.print(); } }
我个人分析:应该虽然nl对象是null,但是nl对象有类型信息,可以获取class字节码信息然后调用static方法
4:引用类型为null时候自动拆箱为报空指针异常
public class IntegerNull { // 引用类型为null时候自动拆箱为报空指针异常 static Integer i; public static void main(String[] args) { System.out.println(i == 5); } }
5:使用Integer的方法直接转成固定进制数
public static void main(String[] args) { // 将十进制8转成2进制数 System.out.println(toString(8, 2)); System.out.println(toString(14, 7));//20 //7进制20转10十进制:7的0次幂*1+7的1次幂*2=14 // 将十进制1000转成2进制 System.out.println(Integer.toString(1000, 2)); // 将十进制1000转成6进制 System.out.println(Integer.toString(1000, 6)); // static String toBinaryString(int i) // 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 System.out.println(Integer.toBinaryString(8)); // static String toHexString(int i) // 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 System.out.println(Integer.toOctalString(8)); // static String toOctalString(int i) // 以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 System.out.println(Integer.toHexString(15)); System.out.println("--------------将给定数字转成任意进制-----------------"); String a = "0100"; int d = Integer.parseInt(a, 2); // 2进制 int o = Integer.parseInt(a, 8); // 8进制 System.out.println(d); System.out.println(o); }
String source = "0100";
int d = Integer.parseInt(a, 2);
讲解:Integer.parseInt(source , 2)是将a转成2进制,这里面输出结果默认就是十进制!输出的进制不可以指定。
int source =8;
System.out.println(Integer.toString(source, 2));
讲解:将指定数转换成2进制,输出结果是指定的进制,输入数是默认10进制,不可以指定
以后自己写代码实现可以参考JDK源码实现!
6:已知一个数列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,用递归法求f(10)的值.
耍小聪明直接交换左右两项得:f(n)=f(n+2)-2*f(n+1),然后不假思索的就开始写算法,结果运行一看,栈内存溢出。刚开始怀疑是递归调用层次较深导致的,后来求f(3)溢出秒懂了!递归没有出口!!!
public static long ferror(int n) { if (n == 0) return 1; else if (n == 1) return 4; else if (n == 2) return 19; else return ferror(n+2)-2*ferror(n+1); }
正确实现:可以推到出f(n)=2*f(n-1)+f(n-2)就有出口了,然后实现即可。
相关文章推荐
- 笔试中经常遇见的台阶问题(java版本)
- Java笔试时可能出现问题及其答案
- 应聘Java笔试时可能出现问题
- [转] 应聘Java笔试时可能出现问题及其答案(第一部分)
- [转] 应聘Java笔试时可能出现问题及其答案(第六部分)
- [转] 应聘Java笔试时可能出现问题及其答案(第五部分)
- 应聘Java笔试时可能出现问题及其答案
- [转] 应聘Java笔试时可能出现问题及其答案(第十部分)
- 应聘Java,jsp,j2ee软件工程师笔试中可能出现的问题
- 有感:应聘Java笔试时可能出现问题及其答案 huij
- [转] 应聘Java笔试时可能出现问题及其答案(第八部分)
- 有感:应聘Java笔试时可能出现问题及其答案[转贴]
- 有感:应聘Java笔试时可能出现问题及其答案(第二版part two)
- 有感:应聘Java笔试时可能出现问题及其答案(第二版Part one)
- 应聘Java笔试时可能出现问题(答案不一定正确)
- [ZT]应聘Java笔试时可能出现问题及其答案
- 应聘Java笔试时可能出现问题及其答案
- 有感:应聘Java笔试时可能出现问题及其答案(第二版part four)
- [转] 应聘Java笔试时可能出现问题及其答案(第三部分)
- [转] 应聘Java笔试时可能出现问题及其答案(第九部分)