1. 除构造函数外,还有哪几种创建对象的方式?

    • 通过new语句实例化一个对象
    • 通过反射机制动态创建对象
    • 通过clone()创建对象
    • 通过反序列化的方式创建对象
  2. ArrayList list = new ArrayList(20);中的list扩充几次
    答案:直接指定的容量,不会扩容

  3. 面哪些是对称加密算法()
    A DES B AES C DSA D RSA
    答案:A B

  4. 下面程序的运行结果是什么

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    class HelloA {
    {
    System.out.println("I'm A class");
    }

    static {
    System.out.println("static A");
    }

    public HelloA() {
    System.out.println("HelloA");
    }
    }

    public class HelloB extends HelloA {
    public HelloB() {
    System.out.println("HelloB");
    }

    {
    System.out.println("I'm B class");
    }

    static {
    System.out.println("static B");
    }

    public static void main(String[] args) {
    new HelloB();
    }
    }

答案:

1
2
3
4
5
6
static A
static B
I'm A class
HelloA
I'm B class
HelloB
  1. 下面程序的运行结果是什么
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class Example {
    String str = new String("good");
    char[] ch = {'a', 'b', 'c'};

    public static void main(String args[]) {
    Example ex = new Example();
    ex.change(ex.str, ex.ch);
    System.out.print(ex.str + " and ");
    System.out.print(ex.ch);
    }

    public void change(String str, char ch[]) {
    str = "test ok";
    ch[0] = 'g';
    }
    }

答案:

1
good and gbc
  1. java的8中基本数据类型和相应的包装类型时什么?
    答案:

    1
    2
    3
    4
    5
    6
    7
    8
    int Integer
    long Long
    boolean Boolean
    char Character
    float Float
    double Double
    byte Byte
    short Short
  2. 概括的解释下线程的几种可用状态

  • 新建(new)
    新创建了一个线程对象
  • 可运行(runnable)
    线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法,该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权
  • 运行(running)
    可运行状态(runnable)的线程获得了cpu时间片,执行程序代码
  • 阻塞(block)
    阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cpu的时间片,暂时停止运行,直到线程进入可运行(runnable)状态,才有机会再次获取cpu时间片转到运行(running)状态。
  • 死亡(dead)
    线程run(),main()方法执行结束,或者因为异常退出了run()方法,该线程结束生命周期。
  1. 下面程序的运行结果()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class Example {
    public static void main(String[] args) {
    Thread t = new Thread() {
    public void run() {
    pong();
    }
    };
    t.run();
    System.out.println("ping");
    }

    static void pong() {
    System.out.println("pong");
    }
    }

A. pingpong
B. pongping
C. pingpong和pongping都有可能
D. 都不输出

B

1
2
pong
ping
  1. 什么是守护线程?GC是否是守护线程?
    答案:守护线程用于服务用户自定义线程,如果用户自定义线程都执行完毕,连main线程也执行完毕,那么JVM就会退出,守护线程就停止执行。GC是守护线程。

  2. 写出你知道哪排序算法有哪些中?并写书其中一种的代码实现
    答案:冒泡,快排,插入,堆排

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class SearchDemo{
public static void main(String[] args){
int[] arr = new int[]{9,8,7,6,5,4,3,2,1,0};
quickSort(arr,0,arr.length-1);
}
private static void quickSort(int[] arr, int start, int end){
//边界检查
if(arr==null||arr.length<=0||start>=end){
return;
}
//获取基准数据正确的索引
int index = getIndex(arr,start,end);
//递归处理基准数据左右的数据区间
quickSort(arr,0,index-1);
quickSort(arr,index+1,end);
}
private static int getIndex(int[] arr,int start,int end){
//定义基准数据
int temp = arr[start];
while(start<end){
//从尾部迭代数据,当尾部数据大于等于基准数据,尾部指针前移
while(start<end&&arr[end]>=temp){
end--;
}
//当尾部数据小于基准数据,将尾部数据放在头指针位置处
arr[start] = arr[end];
//从头节点迭代数据,当头数据小于等于基准数据,头部指针后移
while(start<end&&arr[start]<=temp){
start++;
}
//当头数据大于基准数据,将头数据放在尾指针位置
arr[end] = arr[start];
}
//当头尾指针相等,则找到了基准数据的正确位置
arr[start] = temp;
return start;
}
}

tencent.jpg