持续输出面试题系列之综合面试题(一)

选择题

在Java 中,负责对字节代码解释执行的是
A. 应用服务器
B. 虚拟机
C. 垃圾回收器
D. 编译器

解析: B,Java程序从源文件创建到程序运行要经过两个步骤:
①编译:源文件由编译器编译成字节码(ByteCode)
②运行:字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language)。

一个栈的输入序列为 1 2 3 4 5, 则下列序列中不可能是栈输出的序列的是
A. 5 4 1 3 2
B. 2 3 4 1 5
C. 1 5 4 3 2
D. 2 3 1 4 5

解析: A,栈的特点是先进后出,比较笨的方法是一个个的试:
B:先进1和2,2出栈进入3,3出栈,进入4,4出栈,1再出栈,5进,5出栈,即23415
C:1进,1出,2345进,然后5432出,就是15432
D:进1和2,2出栈进入3,3出栈,进入4,在进入5,5出,4在出,就是23145

下列那一个选项按照顺序包括了OSI 模型的 7个层次
A. 物理层 数据链路层 传输层 网络层 会话层 表示层 应用层
B. 物理层 数据链路层 会话层 网络层 传输层 表示层 应用层
C. 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
D. 网络层 传输层 物理层 数据链路层 会话层 表示层 应用层

解析: C

当客户度关闭一个从连接池中获取的连接, 会发生下面哪一种情况
A. 连接不会关闭, 只是简单地归还给连接池
B. 连接被关闭 , 但又被重新打开并归还给连接池
C. 连接永久性关闭

解析:A

在UML 提供的图中 , 用于按数据顺序描述对象间的交互的是: C
A. 协作图
B. 网络图
C. 序列图
D. 状态图

解析: C

简答题:

MySQL中的varchar和char有什么区别?

  • char是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容。该字段都占用10个字符
  • varchar是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间。

在检索效率上来讲,char > varchar,因此在使用中,如果确定某个字段的值的长度,可以使用char,否则应该尽量使用varchar。例如存储用户MD5加密后的密码,则应该使用char。

编程题:

用 1,2 , 2 ,3, 4 ,5 这 6 个数字, 用 Java写一个main 函数, 打印出所有不同的排列,
如:512234, 412345 等, 要求: “4” 不能在第三位, “ 3” 与” 5” 不能相连

package com.hcx.security.core.validate.code;

import java.util.Iterator;
import java.util.TreeSet;

public class NumberRandom {
    String[] stra = { "1", "2", "2", "3", "4", "5" };
    int n = stra.length;
    boolean[] visited = new boolean[n];
    String result = "";
    TreeSet<String> ts = new TreeSet<String>();
    int[][] a = new int[n][n];

    private void searchMap() {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j) {
                    a[i][j] = 0;
                } else {
                    a[i][j] = 1;
                }
            }
        }
        // 3 和 5 不能相连
        a[3][5] = 0;
        a[5][3] = 0;
        // 开始遍历
        for (int i = 0; i < n; i++) {
            search(i);
        }
        Iterator<String> it = ts.iterator();
        while (it.hasNext()) {
            String str = it.next();
            // 4 不能在第三位
            if (str.indexOf("4") != 2) {
                System.out.println(str);
            }
        }
    }

    private void search(int startIndex) {
        visited[startIndex] = true;
        result = result + stra[startIndex];
        if (result.length() == n) {
            ts.add(result);
        }
        for (int j = 0; j < n; j++) {
            if (a[startIndex][j] == 1 && visited[j] == false) {
                search(j);
            } else {
                continue;
            }
        }
        // 一个 result 结束后排掉最后一个,寻找别的可能性,若没有的话,则继续向前排掉当前最后一个
        result = result.substring(0, result.length() - 1);
        visited[startIndex] = false;
    }

    public static void main(String[] args) {
        new NumberRandom().searchMap();
    }
}