美文网首页
Java面试题整理

Java面试题整理

作者: 竹庭一米七 | 来源:发表于2017-09-17 22:45 被阅读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决定和执行的。

    相关文章

      网友评论

          本文标题:Java面试题整理

          本文链接:https://www.haomeiwen.com/subject/yzgmsxtx.html