Java程序员面试题(基础篇)(一)

1、方法修饰符访问级别

  • public > default > protected > private

2、修饰符的使用范围

3、常见Java容器类型区别

4、接口和抽象类的相同和不同点

相同点:

  • 都不能被实例化
  • 只有在实现或继承后实现类或子类才能实例化

不同点:

  • 关键字:实现接口implements;继承抽象类 extends。
  • 关系:接口可以有多个实现类;抽象类只能有一个继承类。
  • 成员变量:接口只能是public static final修饰的,且必须赋初值;抽象类可以是public,default,protected,private修饰的。
  • 成员方法:接口只能public abstract修饰的;抽象类可以是public abstract的抽象方法,也可以是其他正常方法。

5、Object类中方法

6、原始类型 (8种)

  • 浮点型:float,double(包装类:Float,Double)
  • 布尔型:boolean(包装类:Boolean)
  • 字符型:char(包装类:Character)
  • 数值型:byte,short,int,long(包装类:Byte,Short,Integer,Long)

7、实现多线程的方法

  • 继承Thread类,重写run方法
  • 实现Runnable接口,实现run方法
  • 实现Callable接口,重写call方法

8、什么是不可变量类,包括哪些

  • 不可变类:是指创建实例之后,就不允许修改它的值,只允许读操作
  • 基本类型的包装类:Short, Integer, Long, Float, Double, Byte, Character, Boolean
  • 此外String类等

参考资料: https://www.cnblogs.com/jaylon/p/5721571.html https://www.zhihu.com/question/20618891

9、关键字功能介绍

static

  • 为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。
  • 在不创建对象的情况下,可以通过类来直接调用方法或使用类的属性。
  • 被static修饰的属性(方法)是类的属性(方法),不属于任何对象。

synchronized

  • 主要用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块时,同一时刻最多只有一个线程执行这段代码。

serialize

  • 序列化,将对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
  • 在网络上传送对象的字节序列。

对象的序列化指的是把对象转换为字节序列的过程。 对象的反序列化指的是把字节序列恢复为对象的过程。

transient

  • 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
  • transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
  • 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

volatile

  • 保证变量对所有的线程的可见性,即当一个线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。
  • 禁止编译器 指令重排优化。

final

  • 修饰类,表明这个类不能被继承(断子绝孙类)。
  • 修饰方法,这个方法不能被子类重写。
  • 修饰变量,如果是基本数据类型的变量,则其数值一旦被初始化之后便不能更改,如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

supper

  • 调用父类的构造方法、父类的方法和属性

this

  • 调用当前对象的某个方法或某个成员时

10、构造方法

  • 类中的构造方法是可以省略的,当省略的时候,编译器会提供一个默认的构造方法以供使用。
  • 构造方法必须与类名相同。
  • 构造方法可以重载,一个类可以定义多个构造方法。
  • 当一个对象被 new的时候必定会调用构造方法。

发表评论