Java基础面试题(下篇)


Java基础面试题(上篇):

20、访问修饰符 public,private,protected,以及不写(默认) 时的区别?

类的成员不写访问修饰时默认为 default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护 (protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。

21、接口有什么特点?

接口中声明全是public、static、final修饰的常量

接口中所有方法都是抽象方法

接口是没有构造方法的

接口也不能直接实例化

接口可以多继承

22、抽象类和接口的区别?

抽象类:

  • 抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。

  • 包含抽象方法的类,一定是抽象类。

  • 抽象类只能被继承,一个类只能继承一个抽象类。

接口:

  • 全部的方法都是抽象方法,属性都是常量

  • 不能实例化,可以定义变量。

  • 接口变量可以引用具体实现类的实例

  • 接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法

  • 接口之间可以多实现

  • 一个具体类可以实现多个接口,实现多继承现象

23、Hashcode 的作用

Java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不重复。当我们在set

中插入的时候怎么判断是否已经存在该元素呢,可以通过equals方法。但是如果元素太多,用这样

的方法就会比较满。

于是有人发明了哈希算法来提高集合中查找元素的效率。 这种方式将集合分成若干个存储区域,每

个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的

哈希码就可以确定该对象应该存储的那个区域。

hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当

集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理

位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如

果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相

同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。

24、普通类与抽象类有什么区别?

普通类不能包含抽象方法,抽象类可以包含抽象方法

抽象类不能直接实例化,普通类可以直接实例化

25、什么是接口?为什么需要接口?

接口就是某个事物对外提供的一些功能的声明,是一种特殊的java类,接口弥补了java单继承的缺点。

26、拷贝和浅拷贝的区别是什么?

浅拷贝

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。

深拷贝

被复制对象的所有变量都含有与原来的对象相同的值。而那些引用其他对象的变量将指向被复制过的新对象。而不再是原有的那些被引用的对象。换言之,深拷贝把要复制的对象所引用的对象都复制了一遍。

28、JDBC操作的步骤

1)装载相应的数据库的 JDBC 驱动并进行初始化:
 Class.forName("com.mysql.jdbc.Driver");

2)建立 JDBC 和数据库之间的 Connection 连接:

 Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8", "root", "123456");

3)创建 Statement 或者 PreparedStatement 接口,执行 SQL 语句。

4)处理和显示结果。

5)释放资源。

29、什么时候用assert

assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion 就是在程序中的一条语句,它对一个 boolean 表达式进行检查,一个正确程序必须保证这个 boolean 表达式的值为 true;如果该值为 false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion 用于保证程序最基本、关键的正确性。assertion 检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

30、数组有没有 length()这个方法? String 有没有 length()这个方法

数组没有length()这个方法,有length的属性。String有有length()这个方法。

31、String 和 StringBuilder、StringBuffer 的区别?

1、数据可变和不可变

1)String 底层使用一个不可变的字符数组 private final char value[]; 所以它内容不可变。

2)StringBuffer 和 StringBuilder 都继承了 AbstractStringBuilder 底层使用的是可变字符数组:char[] value;

2、线程安全

StringBuilder是线程不安全的,效率较高;而StringBuffer是线程安全的,效率较低。

通过他们的append()方法来看,StringBuffer是有同步锁,而StringBuilder没有:
@Override 
public synchronized StringBuffer append(Object obj) { 
    toStringCache = null; 
    super.append(String.valueOf(obj)); 
    return this; 
}

@Override public StringBuilder append(String str) { 
    super.append(str); 
    return this; 
}
3、相同点

StringBuilder与StringBuffer有公共父类AbstractStringBuilder。

操作可变字符串速度:StringBuilder > StringBuffer > String 。

32、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类 ,继承具体类的前提是该类必须有明确的构造函数。

33、一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

可以,但一个源文件中最多只能有一个公开类(public class),而且文件名必须和公开类的类名完全保持一致。

#面试题##面试题目##大数据开发工程师##java工程师##后端开发#
全部评论
点赞 回复 分享
发布于 2022-04-21 21:10

相关推荐

26牛牛不会梦到感谢信:羡慕离职了还能吃吗现在就赶回去
点赞 评论 收藏
分享
评论
9
40
分享

创作者周榜

更多
牛客网
牛客企业服务