Java面试题整理

2017-09-17  本文已影响0人  竹庭一米七

反射

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决定和执行的。

上一篇下一篇

猜你喜欢

热点阅读