面试|【面试题】Java基础

如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里

以下回答均为个人的一些理解和看法,本人才疏学浅,如有错误,恳请指出。
1.JDK 和 JRE 有什么区别? 【面试|【面试题】Java基础】JDK(Java Development Kit)Java开发工具集,JDK=JRE+开发工具包
JRE(Java Runtime Environment)Java 运行时环境,JRE=JVM+JavaSE类库
2.== 和 equals 的区别是什么?
//Object类中的equals方法 public boolean equals(Object obj) { return (this == obj); }

Object中,equals方法的本质就是 == ,即比较地址。
在没有重写的equals的类,equals比较的是地址。
StringDateFile等类重写了equals方法,所以比较的是内容(字面量)
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
//Object类中的hashCode方法 public native int hashCode(); //native为C/C++实现的方法

不一定,由于hash函数可能产生hash冲突,即不同的key通过hash(key)后得到的hash值相等。
4.final 在 java 中有什么作用? 修饰类,类不能被继承。
修饰方法,方法不能被重写。
修饰变量,变量为常量,初始化之后不能改变。
5.java中的 Math.round(-1.5) 等于多少? -1
在源码中,round函数为了效率,使用了很多位操作。
实际满足 (数字+0.5),然后进行向下取整。
如 -1.5+0.5=-1,-1向下取整后仍为-1
-1.4+0.5=-0.9,-0.9向下取整后为-1
1.5+0.5=2,2向下取整后为2
1.4+0.5=1.9,1.9向下取整后为1
6.String 属于基础的数据类型吗? 不属于。String为一个类(class),属于引用数据类型。
面试|【面试题】Java基础
文章图片

7.重载与重写的区别? 重载是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数表,对同名方法的名称做修饰。
对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。
Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
详细请见 重写与重载的本质区别
8.java 中操作字符串都有哪些类?它们之间有什么区别? 9.String str="i"与 String str=new String(“i”)一样吗? 不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。
10.如何将字符串反转? 11.String 类的常用方法都有那些? 12.面向对象和面向过程的区别? 世界是多维且复杂的,而多维矩阵能很好的抽象这个世界。
类也可以被看做多维矩阵,里面的变量多数是独立的,也就是线性无关的,也有一些线性相关的,如Vue中的计算属性,通过不同属性(向量)的线性组合来描述另外的属性。
而面向过程其实是一种更深层次的抽象,他将多维矩阵中的某个维度抽离出来,进行如工业流水线的组合,这种组合是基于任务性的。那么当然,效率会比面向对象高出很多,然而抽象的难度也会高出很多。如果人类具有对本质真理的最精确认知,那么面向过程肯定是更接近完成任务的,针对特定的任务,完成特定的需求。这用来完成某个特定的任务是足够的,比如计算某个数,完成任务。由于数学是人类描述客观规律最精简的语言,对于特定的任务,面向过程是更优的。
然而对于软件来说,软件最大的敌人是复杂性。复杂性的根本原因是系统性和藕合。这导致了软件系统最著名的“人月定律”困境和“巴别塔”问题。
因为,对任何一个复杂的,内部互相影响的系统,变化会导致混沌性产生(比如三体问题),由于混沌性本身的难以预测性和计算,直接就产生了一个软件一旦陷入混沌的”焦油坑“就产生了著名的人月现象:加人解决不了问题,减人解决不了问题,减需求解决不了问题,加需求解决不了问题,降低质量要求解决不了问题,增加质量要求同样解决不了问题,反而软件延期可能更厉害……因为任何变化对混沌系统都是难以预测的,甚至不变也未必是最好的——世界本身必然是变化的。
解决一个混沌系统的方式
面试|【面试题】Java基础
文章图片

而面向对象编程利用封装、继承、多态的特性来减低内部的自由度,构建相对隔离的子系统,以达到更高效率的编程。
其实,即使是用面向过程的C语言写的Linux,也是基于面向对象的思想来写的,用到了很多设计模式,只不过这种封装利用的是struct结构体来完成。
13.抽象类必须要有抽象方法吗? 不是
14.普通类和抽象类有哪些区别? 15.抽象类能使用 final 修饰吗? 不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。
16.接口和抽象类有什么区别? 接口:抽象面,对某一行为进行的抽象。
抽象类:抽象体,对某一类事物进行的抽象。
使用方面
17.java 中 IO 流分为几种? 18.BIO、NIO、AIO 有什么区别? 19.Files的常用方法都有哪些? 20.说一说值传递和引用传递的区别?

    推荐阅读