Java面试题——基础篇

这篇博客详细探讨了Java面试中常见的基础问题,包括JDK、JRE、JVM的区别,equals与"=="的差异,以及hashCode的使用。还深入讲解了String、StringBuffer和StringBuilder的特性和选择,线程安全的实现方式如接口与抽象类的对比,以及并发编程中的锁机制。此外,还涵盖了IO流、多线程、HashMap和TreeMap的区别以及线程池的相关知识。通过这些内容,帮助读者巩固Java基础,为面试做好准备。
摘要由CSDN通过智能技术生成

1.JDK,JRE,JVM

JDK:java开发工具包,偏向程序员

JRE:java运行环境,偏向用户

JVM:java虚拟机,用于编译解释

2.equals与“==”

equals本质上就是==,因为java.lang.String类重写了equals方法,所以如果两个字符串对象包含有相同的内容它就返回true,但是==只有他们的引用地址相同时才返回true。

3.hashcode相同,equals也不一定相同

1.hashcode用来储存地址,他的存在用于查找的快捷,如hashMap

2.如果两个对象相同,就是适用于equals方法,那么两个对象的hashcode一定要相同

3.如果equals方法被重写,那么hascode也尽量重写,并且产生hashcode使用的对象,一定要和equals方法中使用的一致,否则就会违反第二点。重写hashcode和equals可保证hashMap键唯一性

4.两个对象的hashcode相同,并不一定代表对象就相同,也就不一定适用于equals方法,只能够说明这两个对象再散列存储结构中,如hashtable,他们“存放在同一个篮子里”

4.String,StringBuffer,StringBuilder的区别

String声明的是不可变对象,其他两个是可变的(String源码可知用final修饰)

StringBuffer:同步,线程安全,性能低,建议多线程使用

StringBuilder:异步,线程不安全,性能高,建议单线程使用

常见的字符串拼接应选择StringBuilder,比String快千百倍。

5.String str = “i” 与 String str = new String(“i”)

String str = “i” Java虚拟机将其分配到常量池中

String str = new String(“i”)会被分配到堆内存中,创建了两个对象,但如果再执行一遍就是创建一个对象,因为常量池中已经有了。

6.接口与抽象类的区别

1.抽象类可以有默认的方法实现,接口不能有默认的方法实现

2.抽象类可以有构造函数,接口不能有构造函数

3.抽象类可以有main(),接口不能有

4.抽象类中的方法可以是任意访问修饰符,接口默认是pubilc

5.可以多实现,不能多继承(假设A类和B类都有t方法,且具体实现不一样。C类继承A类和B类,当C类调用t方法时,会出现歧义。因为,A类和B类都有t方法,但具体实现不一样。可以多实现是因为,接口中的方法没有具体实现。继承多个接口,就算两个接口中有相同的方法,也不会出现矛盾。)

7.IO流的分类

按类型(传输单位)来分:字节流和字符流

按功能(流向)来分:输入流和输出流

字节流: 它处理单元为1个字节(byte),操作字节和字节数组,存储的是二进制文件,如果是音频文件、图片、歌曲,就用字节流好点(1byte = 8位);

字符流: 它处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是关系到中文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值