Java基础面试题2020(35题)

前言:

作者:CodeCow · 阿牛,微信搜索公众号 “CodeCow ”,我们一起干“java

正文:

1、Java 的基础数据类型有几种 ?都是啥 ?

8 种
byte、short、int、long、float、double、char、boolean

2、String是最基本的数据类型吗 ? 是否可以继承String类 ?

不是 是引用数据类型
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类

3、①:short s1 = 1; s1 = s1 + 1;有错吗 ? ②:short s2 = 1; s2 += 1;有错吗 ?

①:有错(s1+1运算结果是int型,需要强制转换类型)、 ②:正确

分析①:
s1 = s1 + 1 做运算的时候,1 是 int 类型,s1 会被提升为int类型
s1+1 后的结果是 int类型,将结果在赋值会short类型时发生错误
short 内存 2 个字节,int 类型 4 个字节
必须将int强制转成short才能完成赋值

分析②:
**+=**是一个运算符,只运算一次,并带有强制转换的特点
也就是说 s2 += 1 就是 s2 = (short)(s2 + 1) ,因此程序没有问题编译通过,运行结果是2.

4、String s = new String(“CodeCow”); 创建了几个String Object?

两个

分析:
一个是 “xyz”,一个是指向 “xyz” 的引用对象 s

5、int 和 Integer 有什么区别 ?

Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类

扩展:
Java为每个原始类型提供了封装类。
原始类型——封装类

boolean——Boolean,
char——Character,
byte——Byte,
short——Short,
int——Integer,
long——Long,
float——Float,
double——Double

6、String,StringBuffer 与 StringBuilder 的区别 ?

String类提供了数值不可改变的字符串(既:String的值是不可变的,每次对String的操作都会生成新的String对象)
StringBuffer 和StringBuilder 提供的字符串可以进行修改(既:并且不产生新的未使用对象)
StringBuffer 之间的最大不同在于 StringBuilder 的方法是线程不安全的

扩展:
由于 StringBuilder 是线程不安全的 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

7、被 final 修饰的 类、方法、变量 有什么特点?

final 修饰的类,不能被继承
final 修饰的方法,不能被重写
final 修饰的变量,不能被重新赋值

8、Overload 和 Override 的区别。Overloaded的方法是否可以改变返回值的类型?

重写 (Overriding) :如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写
重载(Overloading):如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
Overloaded的方法是可以改变返回值的类型。

扩展:
方法的重写 Overriding 和 重载 Overloading 是Java多态性的不同表现
重写Overriding是父类与子类之间多态性的一种表现;
重载Overloading是一个类中多态性的一种表现。

9、final, finally, finalize的区别 ?

final 用于声明类,方法和变量,分别表示类不可继承,方法不可重写,变量不可重新赋值。
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

扩展:
和 finally 藕断丝连 的问题 ===》 看下面 十九

10、Collection 和 Collections的区别 ?

Collection 是单例集合的顶层接口,继承与他的接口主要有 Set 和 List.
Collections 是集合的工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

11、你所知道的集合类都有哪些?主要方法 ?

最常用的集合类是 List 和 Map。
List 的具体实现包括 ArrayList 、 Vector、 LinkedList
Map 的具体实现包括 hashMap、hashTable、treeMap

12、List、Map、Set 三个接口,存取元素时,各有什么特点 ?

List 以特定次序来持有元素,可有重复元素。
Set 无法拥有重复元素,内部排序。
Map 保存key-value值,value可多值。

总结:
List ===> 有序、重复
Set ===> 无序、不重复

13、说说 ArrayList,Vector, LinkedList 的存 储性能 和 特性 ?

ArrayList 和Vector都是使用数组方式存储数据,所以索引(查询)数据快 而 插入数据慢
Vector 由于使用了 synchronized 方法(线程安全),通常性能上较ArrayList 差
而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

总结:
ArrayList 和 Vector ====> 查询数据快、增加和删除数据 慢
LinkedList ====> 查询数据 慢、增加和删除数据 快

14、HashMap和Hashtable的区别 ?

HashMap 是非线程安全 ;Hashtable 是线程安全的,因此,效率上可能低于HashMap 。
HashMap 允许将 null 作为一个 entry 的 key 或者value,而Hashtable不允许

扩展:
它两最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

15、&和&&的区别 ?

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

16、List, Set, Map是否继承自 Collection 接口 ?

List,Set 是
Map 不是

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

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

18、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals() ? 它们有何区别 ?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否
equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

19、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后 ?

会执行
在return前执行。

扩展:
和 finally 藕断丝连 的问题 ===》 看上面 九

20、error 和 exception 有什么区别 ?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

21、同步和异步有何异同,在什么情况下分别使用他们?举例说明 ?

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

22、 给我一个你最常见到的runtime exception ?

NullPointerException
IndexOutOfBoundsException
SecurityException
SystemException
。。。。。。

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

接口可以继承接口。
抽象类可以实现(implements)接口
抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数

24、 说说数据连接池的工作机制是什么 ?

服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。
如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

25、 abstract 的 method 是否可同时是static ? 是否可同时是 synchronized ?

都不能

26、 构造器Constructor是否可被override ?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

27、 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对 ?

不对,有相同的hash code。

28、 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法 ?

不能
一个对象的一个synchronized方法只能由一个线程访问。

29、 线程同步的方法有哪些 ?

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

30、 多线程有几种实现方法,都是什么 ?

多线程有两种实现方法
分别是继承Thread类与实现Runnable接口

31、 同步有几种实现方法,都是什么 ?

同步的实现方面有两种
分别是synchronized , wait与notify

32、写一个Singleton出来 (不用考虑其他)?
public class MySingleton {
    private MySingleton(){}
    private static MySingleton INSTANCE = null;
    public static synchronized MySingleton getInstance() {
        if (null == INSTANCE){
            INSTANCE = new MySingleton();
            }
            return INSTANCE; 
        }
}
33、线程的基本概念、线程的基本状态以及状态之间的关系 ?

线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。
Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

34、synchronized 和 java.util.concurrent.locks.Lock的异同 ?

主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

35、 写个冒泡排序 ?

public static void bubbleSort(int arr[]) {
    for(int i =0 ; i<arr.length-1 ; i++) {
        for(int j=0 ; j<arr.length-1-i ; j++) {
            if(arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

后记

从Java基础—>SpringCloud面试题的详细答案,已经整理成PDF文档

在这里插入图片描述

★★ 小声BB ★★

若有需要PDF的小伙伴,可以微信搜索公众号 “CodeCow”,回复:2020青铜 小编直接发百度网盘

也可以加小编微信:CodeCow-6666 私信小编

坚持,因为我是阿牛

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值