主题 | 链接 |
---|---|
Java基础知识 | 面试题 |
Java集合容器 | 面试题 |
Java并发编程 | 面试题 |
Java底层知识 | 面试题 |
Java常用框架 | 面试题 |
计算机网络 | 面试题 |
数据库 | 面试题 |
RabbitMQ | 面试题 |
Redis | 面试题 |
Elasticsearch | 面试题 |
Zookeeper | 面试题 |
系统设计 | 面试题 |
面向对象
什么是面向对象?什么是面向过程?
- 面向过程就是分析出实现需求所需要的步骤,通过函数一步一步实现这些步骤,接着依次调用即可。
- 面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为
- 面向对象是将每一个步骤抽象为行为,便于复用和扩展
面向对象的三大基本特征是什么?
- 封装就是隐藏对象的属性和实现细节,封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节
- 继承机制允许创建分等级层次的类。继承就是子类继承父类的特征和行为。
- 多态是指一个对象的相同方法在不同情形有不同表现形式。
多态存在的三个必要条件:
- 继承
- 重写(子类继承父类后对父类方法进行重新定义)
- 父类引用指向子类对象
面向对象的五大基本原则是什么?
- 单一职责原则(SRP):一个类应该有且只有一个去改变它的理由,是指一个类的功能要单一
- 开放封闭原则(OCP):对象或实体应该对扩展开放,对修改封闭。软件实体(类,模块,函数等等)应该是可扩展的,但是不可修改。因为修改程序有可能会对原来的程序造成错误。不能修改,但是可以添加功能,尽可能的在外边添加新的类。
- 里氏替换原则(LSP):子类应当可以替换父类并出现在父类能够出现的任何地方。
- 依赖倒置原则(DIP):高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。简单来说,解决耦合。一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度。
- 接口隔离原则(ISP):接口端不应该依赖它不需要的接口,接口要尽量的小,实现类不必实现不需要的方法。
什么是JVM、JDK、JRE
- JDK:Java Development Kit,是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境。
- JRE:Java Runtime Environment,是JAVA程序运行时需要的运行环境,就是只为了运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。
- JVM:Java Virtual Machine,JDK、JRE内部都包含JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
为什么Java是跨平台的?
Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种中间码——字节码。然后不同的硬件平台上安装有不同的Java虚拟机,由JVM来把字节码再翻译成所对应的硬件平台能够执行的代码。
因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。
Java的平台无关性是建立在Java虚拟机的平台有关性基础之上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。
值传递、引用传递的区别
java中方法参数传递方式是按值传递。
- 如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
- 如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。
访问修饰符public、private、protected,以及不写(默认)时的区别?
抽象类与抽象接口
抽象类和普通类的区别:
在Java语言中使用abstract class来定义抽象类,抽象类中并不是只能有抽象方法,和普通类一样,同样可以拥有成员变量和普通的成员方法
- 抽象方法的访问修饰符必须为public和protected;
- 抽象类不能被实例化;
- 如果一个类继承于抽象类,则子类必须实现父类的抽象方法,如果子类没有实现父类的抽象方法,则子类必须也一个抽象类。
抽象类和接口区别:
- 抽象类内部可以有方法的实现细节,而接口中只能存在public abstract方法;
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
- 接口中不能含有静态代码块以及静态方法,而抽象类中可以有静态代码旷和静态方法;
- 一个类只能继承一个抽象类,而一个类可以实现多个接口。
重写与重载的区别
- 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
- 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
基本数据类型
Java的基本数据类型有哪些
整型:byte, short, int, long
字符型:char
浮点型:float, double
布尔型:boolean
Java中最小的计算单元为字节,1字节=8位(bit)