反射
Java中反射是一種強大的工具,它能夠創(chuàng)建靈活的代碼,這些代碼可以再運行時裝配,無須在組件之間進行銜接溃卡。
它允許運行中的Java程序對自身進行檢查,并能直接操作程序的內(nèi)部屬性蜒简。
傳值與傳引用
①對于基本類型變量瘸羡,Java是傳值的副本
②對于一切對象型變量,Java都是傳引用的副本搓茬。
犹赖!String類型也是對象型變量。
垮兑!數(shù)組傳值的本質是傳地址值的副本冷尉。
序列化
實現(xiàn)Serializable接口。
先創(chuàng)建一個OutputStream系枪,然后把它嵌進ObjectOutputStream雀哨,用writeObject()方法吧對象寫入OutputStream。讀的時候把InputStream嵌到ObjectInputStream中私爷,然后再調(diào)用readObject()方法雾棺。
遞歸問題
面試題:把一個數(shù)組里的數(shù)組合全部列出,比如和列出來為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));
}
}
}
面試題:試用遞歸的方法編程計算斐波那契數(shù)列的通項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("一共調(diào)用了" + k + "次遞歸");
}
public static long fibonacci(long m) {
if(m == 0 || m == 1) {
k++;
return m;
}else{
return fibonacci(m - 1) + fibonacci(m - 2);
}
}
}
時間復雜度
1.時間頻度
一個算法中的語句執(zhí)行次數(shù)被稱為語句頻度或時間頻度工秩,記T(n)尸饺。
2.時間復雜度
常數(shù)階O(1)
對數(shù)階O(log(2)n)
線性階O(n)
線性對數(shù)階O(nlog(2)n)
平方階O(n^2)
立方階O(n^3)
……
k次方階O(n^k)
指數(shù)階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內(nèi)存管理
垃圾回收機制:
gc,是指JVM用于釋放那些不再使用的對象所占用的內(nèi)存助币。
Java垃圾回收機制是為所有Java應用進程服務的浪听,任何一個進程都不能命令垃圾回收機制做什么、怎么做或者做多少眉菱。
在JVM垃圾收集器收集一個對象之前迹栓,一般要求程序調(diào)用適當?shù)姆椒ㄡ尫刨Y源,Java提供了默認機制終止化該對象來釋放資源俭缓,這個方法是finalize()克伊。
內(nèi)存管理
對象的分配和釋放問題酥郭。Java中,程序員需要通過關鍵字new為每個對象申請內(nèi)存空間(基本類型除外)愿吹,所有的對象都在堆(Heap)中分配空間不从。對象的釋放是由GC決定和執(zhí)行的。