JAVA面试题积累(重要)【实时更新:2022/09/22】

本文整理了Java面试中常见的核心知识点,包括throws与throw的区别、集合类对比、线程相关概念、IO流、异常处理、反射机制、单例模式等,旨在帮助Java开发者准备面试,提升技能。
摘要由CSDN通过智能技术生成

目录

随时学,随时加 

 1.throws和throw的区别:

​编辑

2.代码块执行顺序:

 3.try ... catch、finally执行顺序:

4.三个字符串String  StringBuffer  StringBuilder的区别 : 

5.抽象类与接口的区别:

 6.this和super的区别:

7.方法重载和方法重写的区别:

8.Thread和Runnable的区别: 

9.sleep和wait的区别:

10. Collection和Map接口的区别:

11.ArraysList和LinkedList的区别:

12.ArrayList和Vector的区别:

13.List和Set的区别:

14.HashSet和LinkedHashSet和 TreeSet 三者的对比:

15.Hashtable和HashMap的区别:

16.Comparator和Comparable的区别:

Comparable和Comparator怎么选择?

17.当有哈希冲突时,HashMap是如何查找并确认元素的?

18.加载因子是来判断什么时候进行扩容

19.异常分类:

 20.IO流:

21.创建线程的几种方式:

22.线程的生命周期:

23.什么是守护线程

24.什么是Threadlocal变量?

25.volatile有什么用?能否用一句话说明下volatile的应用场景?

26. synchronized和 volatile的区别是什么?

27.什么是阻塞队列?

28.TCP三次握手:

 29.TCP四次挥手:

30.TCP和UDP的区别:

31.垃圾回收(守护线程)的三种算法:

32.什么是反射机制:

33.Java反射API(反射 API 用来生成 JVM 中的类、接口或则对象的信息)

34.获取Class对象的3种方法:

35.什么是单例模式:

36.单例模式的两种模式:

37.如何编译和运行Java文件?

 38. final、finally、finalize有什么区别?

 39.是否可以从一个static方法内部发出对非static方法的调用?

40.  Integer与int的区别?

 41.abstract的方法是否可同时是static、native和synchronized?

42. Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

43. Error和Exception有什么区别?

44. Java 中堆(heap)和栈(stack)有什么区别?

45. io流怎样读取文件的?

46.Java自动装箱与拆箱?

 47.Java线程池中submit()方法和execute()方法有什么区别?

48.  HTTP的长连接和短连接?

49.请求转发和重定向的区别:

50.GET请求和POST请求的区别:

 51.数据库的隔离级别:

52.MVC三层架构:

 53.Spring是什么?

54.Spring的优点?

55.什么是Mybatis

 56.#{}和${}的区别是什么?

 57.通常一个mapper.xml文件,都会对应一个Dao接口,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

58.Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?


随时学,随时加 

 1.throws和throw的区别:

         throws:在方法后边声明异常,其实就是自己不想对异常做出任何的处理,告诉别人自己可能出现的异常,交给别人处理,然别人处理

package com.xinkaipu.Exception;
class Math{
    public int div(int i,int j) throws Exception{
        int t=i/j;
        return t;
    }
}


public class ThrowsDemo {
    public static void main(String args[]) throws Exception{
        Math m=new Math();
   }
}

throw:  就是自己处理一个异常,有两种方式要么是自己捕获异常try...catch代码块,要么是抛出一个异常(throws 异常) 

package com.xinkaipu.Exception;
 
public class TestThrow
{
    public static void main(String[] args) 
    {
        try
        {
            //调用带throws声明的方法,必须显式捕获该异常
            //否则,必须在main方法中再次声明抛出
            throwChecked(-3);            
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        //调用抛出Runtime异常的方法既可以显式捕获该异常,
        //也可不理会该异常
        throwRuntime(3);
    }
    public static void throwChecked(int a)throws Exception
    {
        if (a > 0)
        {
            //自行抛出Exception异常
            //该代码必须处于try块里,或处于带throws声明的方法中
            throw new Exception("a的值大于0,不符合要求");
        }
    }
    public static void throwRuntime(int a)
    {
        if (a > 0)
        {
            //自行抛出RuntimeException异常,既可以显式捕获该异常
            //也可完全不理会该异常,把该异常交给该方法调用者处理
            throw new RuntimeException("a的值大于0,不符合要求");
        }
    }
}

2.代码块执行顺序:

    代码块执行顺序:静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块
    继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器

 3.try ... catch、finally执行顺序:

                finally永远是在最后执行的
                如果在try ... catch语句中有return,        
                catch可以写多个异常(可以捕获多个异常)
                顺序问题:先写小的,再写大的

4.三个字符串String  StringBuffer  StringBuilder的区别 : 

5.抽象类与接口的区别:

  1. 抽象类是半抽象的,接口时完全抽象的
  2. 抽象类中有构造方法,接口没有构造方法
  3. 接口与接口之间支持多继承,类与类之间只支持单继承
  4. 一个类可以实现多个接口,但一个抽象类只能继承一个类
  5. 接口中只允许有常量和抽象方法(java7之前)

 6.this和super的区别:

1.属性的区别:
this访问本类中的属性,如果本类没有此属性则从父类中继续查找。super访问父类中的属性。
2.方法的区别:
this访问本类中的方法,如果本类没有此方法则从父类中继续查找。super访问父类中的方法。
3.构造的区别:
this调用本类构造,必须放在构造方法的首行。super调用父类构造,必须放在子类构造方法首行。
4.其他区别:
        this表示当前对象。super不能表示当前对象
        A、this. 变量和super.变量
                this.变量 调用的当前对象的变量;
                super.变量 直接调用的是父类中的变量。
        B、this(参数)和super(参数)方法
                this(参数) 调用(转发)的是当前类中的构造器;
                super(参数) 用于确认要使用父类中的哪一个构造器。

7.方法重载和方法重写的区别:

区别点            重载方法        重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
范围 在一个类中 发生在继承类中

8.Thread和Runnable的区别: 

如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

实现Runnable接口比继承Thread类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源

2):可以避免java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立

4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类

9.sleep和wait的区别:

二者都会让线程进入阻塞状态,有以下区别:

  1. wait是Object的方法 sleep是Thread的方法
  2. wait会立即释放锁 sleep不会释放锁
  3. wait后线程的状态是Watting sleep后线程的状态为 Time_Waiting
  4. sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常(终端异常

     5.

  • Thread.sleep只会让出CPU,不会导致锁行为的改变
  • Object.wait不仅让出CPU,还会释放已经占有的同步资源锁

10. Collection和Map接口的区别:

Map没有继承Collection接口

        Collection接口,包含list和set子接口
        Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字键值对。
        在Map对象中,每一个关键字最多有一个关联的值。

11.ArraysList和LinkedList的区别:

        1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)

        2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。

        3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。

12.ArrayList和Vector的区别:

        1. ArrayList 是线程不安全的,Vector 是线程安全的

        2.ArrayList 使用默认构造器创建对象时是在调用 add() 方法时对 ArrayList 的默认容量进行初始化的,Vector 在调用构造器时就对容量进行了初始化

        3. ArrayList 存储数据的 Object 数组使用了 transient 关键字,Vector 的 Object 数组没有

        4. ArrayList 和 Vector 的扩容机制不同

13.List和Set的区别:

(1)重复对象
list方法可以允许重复的对象,而set方法不允许重复对象
(2)null元素
list可以插入多个null元素,而set只允许插入一个null元素
(3)容器是否有序
list是一个有序的容器,保持了每个元素的插入顺序。即输出顺序就是输入顺序,而set方法是无序容器,无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序

14.HashSet和LinkedHashSet和 TreeSet 三者的对比

         1、HashSet、LinkedHashSet 和 TreeSet 都是 Set 接口的实现类,都能保证元素唯一,并且都不是线程安全的。

        2、HashSet、LinkedHashSet 和 TreeSet 的主要区别在于底层数据结构不同。

HashSet 的底层数据结构是哈希

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值