Java面试1--Java基础

持续补充中~~~

1.JDK和JRE的区别

JDK表示java development kit,java开发工具包,提供了java开发的环境运行环境

JRE表示java runtime environment java运行环境,为了java的运行环境

JVM表示Java Virtual Machine 把字节码解释成机器码指令执行,是实现平台无关性的关键

具体来说JDK其实包含了JRE,同时包含了编译java源码的编译器javac,还包含了很多java程序调试和分析工具。

JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib合起来就称为jre。JDK用来Java的开发,而JRE只能运行字节码文件,而不能编译.java代码。

2.==和equals的区别是什么?

== 对于基本数据类型和引用数据类型的作用效果不相同,对于基本数据类型,比较的是二者值是否相等,对于引用数据类型,则比较的是二者的引用是否相同

package com.interview;
​
public class 等于andEqueals {
    public static void main(String[] args) {
        String a = "abc";
        String b = "abc";
        System.out.println(a==b);//true
        System.out.println(a.equals(b));//true
        String c = new String("abc");
        System.out.println(a==c);//false
        System.out.println(a.equals(c));//true
        System.out.println(a.hashCode());//a b c的hashCode是相等的,因为三者互相equals
        System.out.println(b.hashCode());
        System.out.println(c.hashCode());
    }
}

equals equals的本质其实就是==,但是引用数据类型String Integer等重写了equals方法,把他变成了值得比较,所以一般情况下equals比较的是值是否相等。在比较基本数据类型,对象的时候,equals比较得还是引用类型

//Object里得equals方法就是比较得是引用对象是否相等
public boolean equals(Object obj) {
    return (this == obj);
}

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

不对,两个对象的hashCode()相同,equals()不一定为true.在散列表中,hashCode() 相等即两个键值对 的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。两个不同的键值对,如果哈希值相等,说明产生了哈希冲突

若要判断两个对象是否相等,除了要覆盖equals()之外,也要覆盖hashCode()函数。否则,equals()无效。

4.final在java中的作用

final修饰的叫做最终类,这个类不能被继承

final修饰的方法不能被重写

final修饰的变量叫做常量,常量必须初始化,初始化之后的值不能被修改

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

等于-1。Math.round()返回的是int(float)或者Long(double) 会选择四舍五入向右边取整

6.String属于基本数据类型吗?

String不属于基本数据类型 基本数据类型有8中 byte short int long float double boolean char,String 属于引用数据类型对象,他是被final修饰的

 

7.Java中操作字符串都有哪些类?他们之间有什么区别

String StringBuffer StringBuilder

String是被final修饰的,不可变对象,每次操作都会生成新的String对象 然后将指针指向新的String对象,而StringBuffer、StringBuilder可以在原有的对象基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String

StringBuffer、StringBuilder最大的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,但StringBuilder的性能却高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程情况下使用StringBuffer

8.String str = "i" 和 String str = new String("i")一样吗?

不一样,因为内存的分配方式不一样,String str = "i"的方式,java虚拟机会将其分配到常量池中;而String str = new Strng("i")则会分配到堆内存当中。

9.如何将字符串反转?

使用StringBuilder或者StringBuffer的reverse()方法

StringBuffer sb = new StringBuffer();
​
sb.append("abcd");
​
System.out.println(sb.reverse());//"dcba"

10.String类常用方法都有哪些

• indexOf():返回指定字符的索引。

• charAt():返回指定索引处的字符。

• replace():字符串替换。

• trim():去除字符串两端空白。

• split():分割字符串,返回一个分割后的字符串数组。

• getBytes():返回字符串的 byte 类型数组。

• length():返回字符串长度。

• toLowerCase():将字符串转成小写字母。

• toUpperCase():将字符串转成大写字符。

• substring():截取字符串。

• equals():字符串比较。

11.抽象类必须要有抽象方法吗?

不需要,抽象类可以有非抽象方法,也可以存在抽象方法。

abstract class apple{
    public void eat(){
        System.out.println("wonderful");
    }
​
    public abstract void cut();
}

12.普通类和抽象类有哪些区别?

  • 普通类不能包含抽象方法,抽象类可以包含抽象方法

  • 抽象类不能直接className cn = new className();实例化,需要重写抽象类里面的抽象方法,普通类可以直接实例化。

abstract class apple{
    public void eat(){
        System.out.println("wonderful");
    }
​
    public abstract void cut();
}
class apple1{
    apple a = new apple() {
        @Override
        public void cut() {
            System.out.println("cut apple");
        }
    };
}

13.抽象类可以被final修饰吗?

不能,抽象类就是为了让其他类继承并实现它的抽象方法,如果定义为final该类就不能被继承,这样彼此就会产生矛盾,所以final不能修饰抽象类

14.接口和抽象类有什么区别?

实现上:抽象类的子类使用extends继承,接口必须使用implements来实现接口

构造函数上:抽象类可以有构造函数,接口不能有构造函数

实现数量上:类只能继承一个抽象类,但可以实现多个接口

访问修饰符上:接口中的方法 默认使用public修饰;抽象类中的方法可以是任意访问修饰符

15.Java中IO流分为哪几种?

按功能上看:输入流input 输出流output

按类型上看:字节流和字符流

字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据

16.BIO、NIO、AIO有什么区别

Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。

同步与异步

  • 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。

  • 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。

同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。

阻塞和非阻塞

  • 阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。

  • 非阻塞: 非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。

BIO:Block IO同步阻塞式IO,就是我们平常使用的传统IO,他的特点是模式简单,使用方便,并发处理能力低。

NIO:Non IO同步非阻塞式IO,是传统IO的升级版,客户端和服务器通过Channel(通道)通讯,实现了多路复用。

AIO:Asynchronous IO是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制。

17.File的常用方法有哪些?

Files.exists():检测文件路径是否存在

Files.createFile():创建文件

Files.createDirectory():创建文件夹

Files.delete():删除一个文件或者目录

Files.copy():复制文件

Files.move():移动文件

Files.size():查看文件个数

FIles.read():读取文件

FIles.write():写入文件

18.Java容器都有哪些?

Java容器分为Collection和Map两大类,其下又分为很多子类

  • Collection

    • List

      • ArrayList

      • LinkedList

      • Vector

      • Stack

    • Set

      • HashSet

      • LinkedHashSet

      • TreeSet

  • Map

    • HashMap

      • LinkedHashMap

    • TreeMap

    • ConcurrentHashMap

    • HashTable

19.Collection和Collections有什么区别

  • Collection是一个集合的接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是他的子类比如List Set Map

  • Collections是一个包装类,里面包含了很多静态方法,不能被实例化,就像一个工具类,比如提供了排序方法Collections.sort(list);

20.List、Set、Map之间的区别

主要体现类元素是否有序,元素是否可以重复上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值