面试ABC_Java基础篇

Java 基础篇

1. jdk和jre的区别;

  • jdk(java develop kit) java开发环境, jre(java runtime environment) java运行环境
  • jdk包含jre, 同时包含编译器javac, 和一些其他的java调试和分析的工具;

2. == 和 equals的区别;

  • == 是符号运算符, equals是Object中的方法;
  • == 比较的是进本类型的值, 引用类型的地址值, equals比较的是地址值;
    equals可以被重写, equals是Object中的方法, 源码底层也是, 等号的比较
public boolean equals(Object obj) {
   return (this == obj);
}

但是可以被重写, Integer 和 String等对象就是进行了重写, 相当于值的比较
Integer.equals()

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

String.equals()

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

3. 两个对象的hashCode()相同, 则equals()也一定为true

  • 不一定, String中hashCode的计算, 是 s[0]*31^(n-1) + s[1]*31^(n-2) + … + s[n-1] 字符的asic码计算得来的, 可能会出现重复, 例如
System.out.println("ABCDEa123abc".hashCode());  // 165374702
System.out.println("ABCDFB123abc".hashCode()); //  165374702

public int hashCode() {
   int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

自定义的对象也可以重写hashCode和equals方法, 可能 hashCode相同, equals不同;

4. final在java中有什么作用

  • final添加到类上, 不能被继承;
  • 添加到方法上, 不能被重写;
  • 添加到变量上, 成为常量, 必须有初始化的值, 不能被修改

5. java中Math.round(-1.5)等于多少

  • 向右取整 为 -1;

6. String 是基础的数据类型吗

  • 不是基础数据类型不包含String
  • 基本数据类型包含
1个字节是8个2进制的字符组成

1024 byte = 1 kb

byte 	: 1 字节
char	: 2 字节
short	: 2 字节
int		: 4 字节
long	: 8 字节
fload 	: 4 字节
double	: 8 字节
boolean : 1bit (1/8 字节)

7. String str = “a” 与 String str = new String(“a”) 一样吗

  • 不一样的 new 是新创建了一个对象;
  • String str = “a” 是java虚拟机在常量中分配, 指向的是常量池中的地址值;
  • new String(“a”) 是在堆内存中分配内存, 指向的是堆内存中的地址值;

8. 如何将字符串反转

  • 使用StringBuffer 和 StringBuilder 的 reverse 方法;

9. BIO , NIO, AIO 有什么区别

  • BIO Block IO 同步阻塞式IO, 使用简单方便, 并发处理能力低;
  • NIO No Block IO 同步非阻塞式IO, 服务端和客户端使用channel(通道)来通行, 实现io多路复用, 只需要1一个线程, 提高了并发处理能力
  • AIO Asynchronous IO 异步非阻塞式IO, NIO的升级, 异步处理, 基于事件和回调处理;

10. java的Error,Exception的区别,试着举例几种RuntimeException

  • 全部继承 Throwable ;
  • Error只错误, 是系统级别的错误, 程序不必处理的异常, 当出现错误的时候, 程序没有办法处理虚拟机会抛出, 例如内存异常等;
  • Exception, 异常, 是需要程序处理的异常, 程序可以捕捉, 可以处理;
  • Exception 分为运行时异常RuntimeException 和 非运行时异常;
  • 常见的RunntimeException : NullPointException , IndexOutOfBoundsException, IllegalArgumentException;
  • 常见的非运行时异常 : IOException, NoSuchMethodException

11. TCP的三次握手

  • 第一次握手: 客户端向服务端发送syn(syn=j)包, 进入sync_send 状态, 等待服务端确认;
  • SYN:同步序列编号(Synchronize Sequence Numbers)
  • 第二次握手: 服务端接受客户端的syn包, 并进行确认(syn=j+1), 并发送syn包, 即syn+ack包, 并进入syn_recv状态;
  • 第三次握手: 客户端接收到服务端发送的包, 向服务端发送确认的ack包(ack=k+1), 发送完毕, 此时完成三次握手, 客户端服务端进入established(已建立)状态;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值