Java面试题整理

反射

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自 www.jianshu.com/p/bd1bfc0c34b8 作为一个程序员,在找工作的过程中,都会遇到笔试...
    灬黑客灬阅读 4,438评论 1 118
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,160评论 0 8
  • 【威哥说】面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结最新的2016年面试题,让大家在找工作...
    威哥爱编程阅读 1,695评论 1 18
  • 【威哥说】面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结最新的2016年面试题,让大家在找工作...
    磨砺营阅读 5,018评论 0 12
  • 推窗春暖。 看汉光如幻。 天际远, 云帘卷。 素娥眉紧锁, 明镜人生怨。 孤只影、 画楼凭倚思归燕。 古巷无人探。...
    刘小地阅读 299评论 3 24