【Java面试】第一天

请你说说java语言的特点

我认为Java语言有以下特点:
一、简单易学
二、面向对象
三、平台无关性,即"一次编译,处处运行"
四、安全可靠
五、支持多线程

请你说说面向过程和面向对象的区别

我认为,面向过程注重于解决问题的步骤实现细节,而面向对象则将问题分解成为各个对象,通过各个对象的行为去解决实际问题。另外,面向对象的程序,易扩展、易维护、易复用。

Java的8种基本数据类型以及对应的包装类

  1. boolean —> Boolean
  2. byte —> Byte
  3. char —> Character
  4. short —> Short
  5. int —> Integer
  6. long —> Long
  7. float —> Float
  8. double —> Double

请说说Java的自动装箱和自动拆箱

  1. 自动装箱指的是基本数据类型自动转换成包装类型。例如,int 转换成 Integer时,就会调用Integer类的valueOf实现自动装箱
  2. 同理,自动拆箱指的是包装类型自动转换成基本数据类型。例如,Integer转换成int时,就会调用Integer对象的intValue方法实现自动拆箱。

请你说说重写和重载的区别

我个人理解,重写是子类对父类原有方法的重新编写,被重写的方法必须与父类方法名一致,参数列表一致,访问修饰符必须大于等于父类方法,抛出异常必须小于等于父类方法;
而重载则发生在本类中,是对本类方法的多实现,重载方法要求方法名一致,参数列表不同,参数顺序不同,参数类型不同,返回值可以不同。

请你说说equals与==的区别

我个人理解, ==比较的是两个对象的地址,而equals比较的是两个对象的内容,equals方法可以根据业务逻辑进行重写,所有类的equals方法都继承自Object类,如果不进行重写,那么使用equals方法进行对象的比较,本质于 ==相同

请你谈谈HashCode的作用

在谈这个问题之前,我们先说以下它的使用场景,我们都知道Set集合是元素不可重复的集合,当我们需要插入新的元素时,就必须判断集合中该元素是否已经存在,如果使用传统的equals判断,一旦集合元素过多,那么效率将会十分低下。
然后就有人提出了使用哈希值来提高查询效率,Set集合就是通过哈希表来实现的(数组+链表),也就是将集合分为多个存储区域,一个对象对应一个哈希值,不同的对象可能拥有相同的哈希值,那么就把相同哈希值分为一个组,一个组对应一个存储区域。
HashCode的返回值则是一个经过计算的哈希值,那么Set集合通过调用这个方法,就可以快速定位到元素应该存放的存储区域,然后判断区域内是否有元素,没有就直接插入,若有则进行equals判断,相同则不加入元素,不相同则散列到其他地址(其实就是解决哈希冲突)

请你谈谈String、StringBuffer、StringBuilder区别

String,内部维护着一个以final修饰的字符数组,也就说String对象本身是不可变的,String的每一次操作都会产生一个新的String对象,值得注意的是,当String对象进行连接操作时,java会new一个StringBuilder对象,然后使用append方法将字符串追加到StringBuilder对象中。
StringBuffer创建的对象是可变的,它的每一次操作都是对本对象进行的操作,不会产生新的对象,StringBuilder也同理。StringBuffer和StringBuilder的区别在于StringBuffer是线程安全的,StringBuilder是线程不安全的。

请你谈谈ArrayList和LinkedList的区别

我认为,ArrayList和LinkedList的本质区别在于它们使用的数据结构不同,ArrayList內部使用的是一个动态数组,LinkedList内部使用的是一个双向链表。
我们知道,数组是有索引的,那么它的查询效率就会十分的快,但是它进行元素的插入和删除,会移动一些元素,那么当集合元素过多时,它的插入和删除效率就会非常低。而链表则是集合元素过多时,查询效率就会显著降低,它们两者有利有弊。

HashMap和Hashtable的区别

  1. 它们继承的父类不同。HashMap继承的是AbstractMap类,HashTable继承的是Dictionary类,但它们都实现了Map、Clonable、Serilaizable三个接口。
  2. 它们提供的方法不同。Hashtable多提供了elements()方法和contains()方法,elements()方法返回了一个value的枚举, 而contains()方法则是查询Hashtable中是否包含某个value。
  3. 它们的安全性不同。HashMap是线程不安全的,Hashtable是线程安全的。
  4. 它们对null的支持不同。Hashtable的key和value都不能为null,而HashMap的key和value都可以为null,这得益于HashMap中的key是以哈希表存储的,保证了key的唯一性。

java的强弱软虚四种引用

强引用,我们平时最常用的引用,被强引用指向的对象,就算内存不足,也不会被GC垃圾回收器回收。
弱引用,被弱引用指向的对象,只要被GC垃圾回收器发现,就会被立即回收。
软引用,被软引用指向的对象,是一种可有可无的对象,它只会在内存不足时被GC垃圾回收器回收。使用场景:做对象的缓存
虚引用,与弱引用相似,但是虚引用在被回收前,会加入ReferenceQueue引用队列。

java创建对象的几种方式

  1. 通过new关键字创建对象
  2. 通过反射机制创建对象
  3. 通过clone方法创建对象,被clone的类必须实现Clonable接口
  4. 通过序列化创建对象,序列化的类必须实现Serializable接口

你可能感兴趣的:(java,面试,开发语言)