Android面试-Java篇

1、操作系统相关

1.1 什么是操作系统?

操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机管理程序,是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序,控制输入与输出设备,操作网络与文件管理等基本事务。同时,操作系统也提供一个操作界面供用户和系统进行交互。
OS的组成(4个部分):内核,驱动程序,接口库,外围

1.2 什么是线程?什么是进程?

线程:操作系统能够进行运算调度的最小单元,共用进程内的资源。
优缺点:资源保护要求不高,开销小,效率高。

进程:操作系统资源分配的最小单元,与其他进程资源相互独立。
优缺点:资源保护要求高,开销大,效率相对较低。

2、JDK,JVM,JRE是什么?区别?

2.1 JDK是什么?

JDK(Java Development Kit),Java开发工具包,包括了Java运行环境(Java Runtime Environment),Java工具(javac/java/jdb等)和Java基础类库。
JDK版本:
J2SE(standard edition 标准版),最为常用的版本
J2EE(enterprise edition 企业版),主要用于开发J2EE应用程序
J2ME(micro edition 移动版),主要用于开发移动设备、嵌入式设备应用程序

2.2 JVM是什么?

JVM(Java Virtual Machine)Java虚拟机,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。这也是Java语音能够实现“一次编译,到处运行”的原因。

2.3 JRE是什么?

JRE(Java Runtime Environment)Java运行环境,包含JVM和Java核心类库,是Java语言程序运行的必要组件。

2.3 三者的联系与区别?

-JDK //Java开发工具包,用于开发
	-JRE //Java运行环境,用于运行Java程序
		-bin //实际执行class文件的地方,相当于JVM
		-lib //运行class文件所需类库

联系:
JVM不能单独执行class文件,解释class的时候JVM需要调用所需类库lib。在JDK安装目录下,jre目录中包含两个文件夹bin和lib,可以认为bin就是JVM,lib是JVM工作所需类库,两者构成了JRE。
我们使用JDK完成Java程序的编写,通过javac工具讲写好的Java文件编译成class文件,然后在JRE上运行class文件,JVM调用所需类库解析class文件,并将其映射到CPU指令集或者OS调用。

区别:
JDK用于开发
JRE用于运行(JVM运行,lib提供所需类库)

3、面向过程和面向对象

3.1 什么是面向过程、面向对象,区别?

面向过程:
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用时按照次序依次执行即可。

面向对象:
面向对象就是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个对象在解决问题的整个步骤中的行为。

比如从面向过程的思想去分析一台电脑,应该考虑的是如何打开电脑,如何播放音乐,如何上网等操作。从面向对象的思想去分析,是以电脑为一个对象,其中CPU,屏幕,鼠标,键盘等是电脑的各个属性,做任何操作只要告诉电脑即可。

区别:

1、设计思路方面:
面向过程程序设计的重点是分析问题解决的步骤,明确每个步骤的输入和输出以及完成各步骤的流程,
是一种结构化的自上而下的程序设计方法。面向对象程序设计的重点是把构成问题的事务分解成对象,
从局部着手,通过迭代的方法逐步构建出整个程序,是一种以数据为核心,以类设计为主要工作的自下
而上的程序设计方法。
2、试用范围方面:
面向过程的程序性能更高,由于不涉及实例化对象等操作,系统开销更小,因此像嵌入式等对性能和资
源要求较高的系统大多采用面向过程的开发方式。面向对象由于其抽象、封装、集成、多态的特性,使
得系统具有更好的可扩展性、可复用性、可维护性,对于功能复杂且维护成本较高的系统大多采用面向
对象的开发方式。
3、代码复用方面
面向过程和面向对象虽然都可以实现代码复用,但是面向过程重用的是函数,而面向对象重用的是类。

3.2 重载和重写, 区别?

重载(Overload):
是一个类中多态性的表现,让类以统一的方式处理不同类型、不等数量的数据的一种方式。

重写(Override):
父类与子类之间多态性的表面,子类可对父类的方法进行重新定义,或可使用super关键字复用父类的方法。

区别:
重载方法名相同,参数类型、参数个数、返回类型可以不同。
重写方法名相同,参数类型、参数个数、返回类型跟随父类,不可更改。