我是靠谱客的博主 无限大炮,最近开发中收集的这篇文章主要介绍java面试问题及答辩题_Java基础面试题2020(35题)——答案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

4f50fa0fa9346259005d088cc278ec40.png

前言:

此为上篇文章《一文助你打天下,您可信?赠予正在Java面试的你(2020青铜篇)》 中“Java基础面试题2020(35题)”答案

正文:

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

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

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

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

三、①: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.

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

两个

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

五、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

六、String,StringBuffer 与 StringBuilder 的区别 ?

String类提供了数值不可改变的字符串(既:String的值是不可变的,每次对String的操作都会生成新的String对象)。StringBufferStringBuilder提供的字符串可以进行修改(既:并且不产生新的未使用对象)。

StringBuffer 之间的最大不同在于 StringBuilder 的方法是线程不安全的。

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

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

final 修饰的,不能被继承

final 修饰的方法,不能被重写

final 修饰的变量,不能被重新赋值

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

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

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

九、final, finally, finalize的区别 ?

final用于声明类,方法和变量,分别表示类不可继承,方法不可重写,变量不可重新赋值。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

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

十、Collection 和 Collections的区别 ?

Collection是单例集合的顶层接口,继承与他的接口主要有 Set 和 List。

Collections是集合的工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

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

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

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

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

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

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

ArrayList和Vector都是使用数组方式存储数据,所以索引(查询)数据快 而 插入数据慢。

Vector由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差。

而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

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

十四、HashMap和Hashtable的区别 ?

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

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

十五、&和&&的区别 ?

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

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

List,Set 是
Map 不是

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

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

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

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否

equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

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

会执行
在return前执行。

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

二十、error 和 exception 有什么区别 ?

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

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

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

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

NullPointerException
IndexOutOfBoundsException
SecurityException
SystemException
。。。。。。

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

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

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

服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。

如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

二十四、 abstract 的 method 是否可同时是static ? 是否可同时是 synchronized ?

都不能

二十五、 构造器Constructor是否可被override ?

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

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

不对

有相同的hash code。

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

不能

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

二十八、 线程同步的方法有哪些 ?

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

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

多线程有两种实现方法

分别是继承Thread类与实现Runnable接口

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

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

三十一、写一个Singleton出来 (不考虑其他)?

public class MySingleton {
    private MySingleton(){}
    private static MySingleton INSTANCE = null;
    public static synchronized MySingleton getInstance() {
        if (null == INSTANCE){
            INSTANCE = new MySingleton();
            }
            return INSTANCE; 
        }
}

三十二、线程的基本概念、线程的基本状态以及状态之间的关系 ?

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

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

主要相同点:Lock能完成synchronized所实现的所有功能

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

三十四、 写个冒泡排序 ?

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;
            }
        }
    }
}

后记

已整理成PDF,如下图

56641e0478a5042b5eb11bc2e8790c55.png

小声BB

  • 中国传统文化,先仔细看,若有用,再点赞 or 收藏, 给自己一点思考的时间

最后

以上就是无限大炮为你收集整理的java面试问题及答辩题_Java基础面试题2020(35题)——答案的全部内容,希望文章能够帮你解决java面试问题及答辩题_Java基础面试题2020(35题)——答案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部