面试题-Java基础(一)

1、JDK和JRE的区别?
JDK:Java开发工具包,提供了Java的开发和运行环境
JRE:Java运行环境

2、== 和equals的区别?
== 是关系运算符: 
      基本类型,比较的是值;
      引用类型,比较的是地址;
equals是方法,来自基类Object公共方法
       来自Object的equals方法,比较的是地址。一般子类会通过反写进行内容的比较。
面试相关问题:String类型对象使用equals和==比较结果一致吗?不一致,String类中重写了equals方法,使其用于比较字符串的内容,而==是用来比较是否指向同一个地址。

3、两个对象的hashCode相同,equals一定返回true吗? 
不一定;
hashCode:基类返回的hash值是对象的内存地址。但是可以通过重写,使得hash值来自对象的内容。这样如果hash值相同,可能是内容一致的两个对象,未重写的equals比较的是两个对象的地址,就会不返回true。因此重写hashCode就必须重写equals方法

4、final在Java中有什么作用? 详解
final在Java中

  • 修饰基本数据类型变量,则该变量初始化后数值就不可以改变了;
  • 修改引用类型变量的时候,该引用类型的地址就不可以改变了,但是地址内存放的内容可以改变;
  • 修饰常量,常量会在编译阶段放进常量池;
  • 修饰方法,使得所有子类都不可以重写该方法。
  • 修饰类,该类不可以被继承。String 类就被final修饰的,因而不可以被继承。

5、String 属于基本数据类型吗?
String 是引用类型,不属于基本类型。
基本类型包括 byte,short,char,int ,long,double,float,boolean。
Java内存模型(JMM)保证除long 和 double 以外的基础数据类型的读写操作是原子性的。

面试相关问题:int类型可以强制转换成boolean类型?不可以

面试相关问题:引用类型与基本类型的区别?举例说明:答案

6、Java中操作字符串有哪些,之间的区别是什么?
String ,StringBuffer,StringBulider
String 是字符串常量,无法改变字符串的内容,如果改变则创建一个新对象指向修改后的内容。所以经常改变的字符串变量不适合用String,StringBuffer和StringBuild是字符串变量,区别就在于 StringBuffer是线程安全的 ,StringBuilder不是线程安全的。但StringBuilder的效率高于StringBuffer

7、String s1= "abc" 和 String s2 = new String("abc") 一样吗? 
String类型 的 享元模式的应用
不一样。内存分配方式不一样,前者分配到常量池中,后者分配到堆中。jvm内存相关
String s1 = "abc" :Java虚拟机会将其分配到常量池中。
在栈中创建一个s1的变量的引用,如果String池中没有"abc"存在,就在常量池中创建一个String类型的"abc"对象,有就直接将"abc"的地址赋给s1;
String s2 = new String("abc"):会被分配到堆内存中。
在栈中创建一个s2的变量的引用,如果String池中没有abc的存在,就在常量池中创建一个String类型的"abc",然后通过new关键字在堆中创建一个String对象。并将new创建的对象的地址赋值给s2。

8、如何将字符串反转
可以使用StringBulider 或者 StringBuffer 的 reverse() 方法。源码如下:

9、String 类中常用的方法有哪些?
      答案

10、抽象类必须有抽象方法吗?
不一定,抽象类不一定非要有抽象方法。

11、抽象类和普通类有什么区别?
普通类不包含抽象方法,抽象类可以包含抽象方法。
普通类可以直接实例化,抽象类不可以直接实例化。

12、 抽象类能使用final修饰吗?
不可以,定义抽象类是为了让其他类继承,但是final修饰的类是不可以被继承的。

13、抽象类和接口有什么区别?
       答案

14、Java中的IO流分几种?
按照功能分:输入流和输出流
按照类型分:字节流和字符流,字节流按照8位传输以字节为单位输入输出数据,字符流按照16位传输以字符为单位输入输出。

15、BIO,NIO,AIO有什么区别?

  • BIO 同步阻塞式IO,就是传统IO,并发能力差
  • NIO 同步非阻塞式IO,BIO的升级,客户端和服务器端通过channel通讯,实现多路复用
  • AIO 异步非阻塞式IO,NIO的升级,异步IO的操作基于事件和回调机制。

16、同步和异步的区别

同步:就是事情必须一件一件的做,一件做完了才可以做下一件,在进程中的表现就发出一个功能调用,未得到结果之前,该请求不可以返回。

异步:只要发布请求即可,无需等待结果返回。线程池和消息队列就是为了达到该目的。

 

下一节-容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值