反射
Java中反射是一种强大的工具,它能够创建灵活的代码,这些代码可以再运行时装配,无须在组件之间进行衔接。
它允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性。
传值与传引用
①对于基本类型变量,Java是传值的副本
②对于一切对象型变量,Java都是传引用的副本。
!String类型也是对象型变量。
!数组传值的本质是传地址值的副本。
序列化
实现Serializable接口。
先创建一个OutputStream,然后把它嵌进ObjectOutputStream,用writeObject()方法吧对象写入OutputStream。读的时候把InputStream嵌到ObjectInputStream中,然后再调用readObject()方法。
递归问题
面试题:把一个数组里的数组合全部列出,比如和列出来为1,2,12,21。
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class test {
public static void main(String[] args) {
String arr[] = new String[] {
"1", "2", "3", "4"
};
listAll(Arrays.asList(arr), "");
}
private static void listAll(List<String> candidate, String prefix) {
if(!prefix.equalsIgnoreCase("")) {
System.out.println(prefix);
}
for(int i = 0; i < candidate.size(); i++) {
List temp = new LinkedList(candidate);
listAll(temp, prefix + temp.remove(i));
}
}
}
面试题:试用递归的方法编程计算斐波那契数列的通项f(n),已知f1=1,f2=1,以后每项都是前面两项的和。
import java.util.Scanner;
public class fibonacci {
public static int k = 0;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
long a = input.nextLong();
System.out.println(fibonacci(a));
System.out.println("一共调用了" + k + "次递归");
}
public static long fibonacci(long m) {
if(m == 0 || m == 1) {
k++;
return m;
}else{
return fibonacci(m - 1) + fibonacci(m - 2);
}
}
}
时间复杂度
1.时间频度
一个算法中的语句执行次数被称为语句频度或时间频度,记T(n)。
2.时间复杂度
常数阶O(1)
对数阶O(log(2)n)
线性阶O(n)
线性对数阶O(nlog(2)n)
平方阶O(n^2)
立方阶O(n^3)
……
k次方阶O(n^k)
指数阶O(2^n)
3.算法的时间复杂度
O(1) < O(log(2)n) < O(n) < O(nlog(2)n) < O(n^2) < O(n^3) < O(2^n)
Java内存管理
垃圾回收机制:
gc,是指JVM用于释放那些不再使用的对象所占用的内存。
Java垃圾回收机制是为所有Java应用进程服务的,任何一个进程都不能命令垃圾回收机制做什么、怎么做或者做多少。
在JVM垃圾收集器收集一个对象之前,一般要求程序调用适当的方法释放资源,Java提供了默认机制终止化该对象来释放资源,这个方法是finalize()。
内存管理
对象的分配和释放问题。Java中,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间。对象的释放是由GC决定和执行的。
网友评论