【面试笔录】java基础知识

1、什么是面向对象?

面向对象是一种编程的思想。对象就像一个生命体,有自己的属性和方法,可以让对象存储信息和完成特定的任务。那么面向对象就是彼此之间的交互是在对象的层面上的。
拿今天这场面试举个例子,贵公司需要吸收懂java的人,而我恰好是懂一点点Java的,那么面试官您只需要和我这个对象打交道,而不是和我会写代码打交道,您直接调用“我会写代码”这个方法就行了。

2、面向对象的三个基本特征。

面向对象的三个基本特征分别是:封装、继承、多态。
封装:将数据和方法等封装在一个集合中(我们称之为类),我们再提供访问这些数据或方法的接口给外部使用,因此外部是通过对象来访问数据和方法的,避免了我们对数据的无意破坏。
继承:继承主要是为了实现代码的重用,节省开发的时间。在子类中我们可以直接调用父类的方法,而不需要写两次一样的代码,实现代码的简洁。
多态:实现同一操作的不同实现方式。多态的实现需要三个条件:

  • 子类继承父类
  • 子类重写父类的方法
  • 父类引用指向子类对象
    重载(overload)和重写(override)是实现多态的两种形式。

3、重载(overload)、重写(override)、隐藏(hide)三者的区别。

重载(overload)
方法名相同,但是参数不同的多个同名方法
(1)参数不同指参数个数、参数类型、参数顺序中的至少一种不同
(2)返回值类型不同、异常不同、修饰符不同不能作为重载的条件
(3)重载出现较多的是构造函数的重载。main方法也可以被重载。
重写(或称覆盖,override)
子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同。
隐藏(hide)
父类和子类拥有相同名字的属性或者方法时,父类的同名的属性或者方法形式上不见了,实际是还是存在的。

  • 方法隐藏只有一种形式,就是父类和子类存在相同的静态方法
  • 属性只能被隐藏,不能被覆盖

4、final的用法

final可以用来修饰类、方法、变量。

  • 使用final修饰的类不能被继承。
  • 父类的final方法是不能被子类重写,但是可以重载。
  • final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
  • 当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;
  • 如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。

5、进程和线程

进程是程序在执行过程中调度和分配资源的基本单位,线程是进程的一个执行单元,也成为轻量级的进程。
一个程序中至少含有一个进程,一个进程中至少含有一个线程。
两者的区别:
1)地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
2)资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
3)一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
4)执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5)线程是处理器调度的基本单位,但是进程不是。
6)两者均可并发执行。
何时使用多进程,何时使用多线程?
对资源的管理和保护要求高,不限制开销和效率时,使用多进程。
要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

你可能感兴趣的:(【面试笔录】java基础知识)