Skip to content

Latest commit

 

History

History
113 lines (81 loc) · 5.02 KB

面试题.md

File metadata and controls

113 lines (81 loc) · 5.02 KB

面试题库

基本数据类型

类型 字节数 范围 默认值 封装类
byte 1 字节(8位) -128 ~ +127 (byte)0 Byte
short 2 字节(16位 ) -2^15 ~ +2^15-1 (short)0 Short
int 4 字节(32位) -2^31 ~ +2^31-1 0 Integer
long 8 字节(64位) -2^63 ~ +2^63-1 0L Long
char 1 字节 '\u0000' Character
float 4 字节(32位) 0.0f Float
double 8 字节(64位) 0.0d Double
boolean 1位 true/false false Boolean
/**
 * 编译器:idea
 * 字符集:utf-8
 */
public class Test {

    public static void main(String[] args) throws UnsupportedEncodingException {
        char c1 = 'a'; // 合法
//        char c2 = 'ab'; // 不合法
        char c3 = '中'; // 合法
        char c4 = '\u0000'; // 合法

        byte b1 = 'a'; // 合法
//        byte b2 = 'ab'; // 不合法
//        byte b3 = '中'; // 不合法

        String s1 = "a";
        System.out.println(s1 + " default=" + s1.getBytes().length); // 1
        System.out.println(s1 + " gbk=" + s1.getBytes("gbk").length); // 1
        System.out.println(s1 + " gb2312=" + s1.getBytes("gb2312").length); // 1
        System.out.println(s1 + " utf-8=" + s1.getBytes("utf-8").length); // 1
        System.out.println(s1 + " unicode=" + s1.getBytes("unicode").length); // 4

        System.out.println();

        String s2 = "ab";
        System.out.println(s2 + " default=" + s2.getBytes().length); // 2
        System.out.println(s2 + " gbk=" + s2.getBytes("gbk").length); // 2
        System.out.println(s2 + " gb2312=" + s2.getBytes("gb2312").length); // 2
        System.out.println(s2 + " utf-8=" + s2.getBytes("utf-8").length); // 2
        System.out.println(s2 + " unicode=" + s2.getBytes("unicode").length); // 6

        System.out.println();

        String s3 = "中";
        System.out.println(s3 + " default=" + s3.getBytes().length); // 3
        System.out.println(s3 + " gbk=" + s3.getBytes("gbk").length); // 2
        System.out.println(s3 + " gb2312=" + s3.getBytes("gb2312").length); // 2
        System.out.println(s3 + " utf-8=" + s3.getBytes("utf-8").length); // 3
        System.out.println(s3 + " unicode=" + s3.getBytes("unicode").length); // 4

    }
}

Object 类

参考:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

  • equals() —— 其他对象是否与该对象是否“相等”
  • hashCode() —— 一个对象的 hash code 值
  • toString() —— 返回该对象的字符串表示
  • clone() —— 复制一个对象
  • finalize() —— 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
  • getClass() —— 返回此 Object 的运行时类
  • wait() —— 线程等待,如果在当前线程等待通知之前或者正在等待通知时,任何线程中断了当前线程,则抛出 InterruptedException 异常
  • notify() —— 唤醒在此对象监视器上等待的单个线程
  • notifyAll() —— 唤醒在此对象监视器上等待的所有线程

Thread#sleep() 方法异常

参考:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。

如果任何线程中断了当前线程。当抛出 InterruptedException 异常,当前线程的 中断状态 被清除。

Java 中栈和堆

  • 栈:存储局部变量和方法调用;堆:存储 Java 中的对象,成员变量、局部变量、类变量,他们指向的对象都存储在堆内存中
  • 栈内存中没有可用空间时,抛出 StackOverFlowError 错误;堆上没有可用空间时,抛出 StackOverFlowError

排序算法时间复杂度

n*log(n) —— log(n) 次划分,每次划分中需要计算 n 次

递归与非递归

  • 递归:代码比较清晰;但递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。
  • 非递归:效率比较高,避免了一系列函数调用和返回中所涉及到的参数传递和返回值的额外开销。循环上可能不容易理解。

hashcode 31?

根据 Joshua Bloch's Effective Java 书中,31 是一个奇素数,素数的特性(只有1和自己是因子)能够使得它和其他数相乘后得到的结果比其他方式更容易产成唯一性,也就是hash code值的冲突概率最小。

多态

  • 重写、重载
  • 动态绑定;父类引用指向子类的对象

加密算法

  • Base64 内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式(编码格式)
  • MD5、SHA 以及 HMAC 是单向加密,任何数据加密后只会产生唯一的一个加密串,通常用来校验数据在传输过程中是否被修改

压缩算法