java面试题

Java 基础

1. JDK 和 JRE 有什么区别?

  • JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
  • JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。

2. final 在 java 中有什么作用?

  • final 修饰的类叫最终类,该类不能被继承。
  • final 修饰的方法不能被重写。
  • final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

3. 普通类和抽象类有哪些区别?

  • 普通类不能包含抽象方法,抽象类可以包含抽象方法。
  • 抽象类不能直接实例化,普通类可以直接实例化。

 4. 接口和抽象类有什么区别?

  • 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
  • 构造函数:抽象类可以有构造函数;接口不能有。
  • main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
  • 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
  • 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

5. ArrayList 和 LinkedList 的区别是什么?

  • 数据结构不同:ArrrayList底层的数据结构是数组,LinkedList底层是Link(链表)的数据结构。
  • 效率不同:对于查询,ArrayList比LinkedList的效率更高,对于增删改,LinkedList比ArrayList的效率更高。
  • 线程安全:ArrayList线程不安全,LinkedList线程安全。

7. HashMap 和 Hashtable 有什么区别?

  • hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。
  • hashMap允许空键值,而hashTable不允许。

8. throw 和 throws 的区别?

  • throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。而throw则是指抛出的一个具体的异常类型。

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

  • final 可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
  • finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
  • finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System的gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾。 

10. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

  • 会执行,在 return 前执行。 

简述 tcp 和 udp的区别?

  • TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
  • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
  • Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
  • UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
  • TCP对系统资源要求较多,UDP对系统资源要求较少。

String 和 StringBuilder 的区别

  • String是字符串常量。不可变,线程安全。
  • StringBuilder是可变的,线程不安全,效率比StringBuffer高。
  • StringBuffer是可变的,线程安全,效率比StringBuilder低。

& 和 &&的区别

  • &是位操作,&&是逻辑运算符.

重载和重写的区别

对多态性的体现不同:

    1.重载体现的是编译多态性

    2.重写体现的是运行多态性

规则不同:

          重载:

          对象:同一个类的不同方法中
         参数必须不同,可以是类型,也可以是顺序
         不规定返回值类型必须一样
         可以有不同的权限修饰符
        方法名必须一样,才能称方法与方法之间构成重载
        可以抛出任意大小的异常
重写:

前提:重写(覆盖)必须发生在子父类之间,且只能是子类对父类的方法进行重写
参数列表必须和父类的一样
返回值类型需一致
权限修饰符子类需大于或等于父类方法权限修饰
子类抛的异常需不能大于父类抛出异常
 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值