面试高级java要问的问题_java高级面试常问的21个基础问题

1、Java语言中,运算符==和某个类中的equals()方法的区别是什么?

(1):==

基本类型:比较的是数值是否相同

引用类型:比较的是地址值是否相同

(2):equals()方法

只能比较引用类型。默认情况下,比较的是地址值是否相同。

但是,我们可以根据自己的需要重写该方法。

2、Java语言中,字符串的特点有哪些?

(1):字符串一旦被赋值,就不能改变。这里指的是字符串的内容不能改变,而不是引用不能改变。

(2):字符串直接赋值方式,其底层实现是:先去字符串常量池里面去找,如果有就直接返回,如果没有,就创建并返回。

(3):字面值作为字符串对象和通过构造方法创建对象的不同,前者会创建1个对象,后者创建2个对象。

3、Java语言中,String,StringBuffer,StringBuilder的区别?

(1):String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。

(2):StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高。

4、简要说明Java语言中单例设计模式的实现步骤。

(1):使用private关键字私有化构造方法;

(2):在类的内部创建一个该类的实例对象,并使用私有的静态变量引用该对象;

(3):为了让类的外部能够获得类的实例对象,需要定义一个公有的静态方法,用于返回该类实例。

5、什么是集合,请列举集合中常用的类和接口?

为了使程序能方便的存储和操作数目不固定的一组数据,JDK提供了一套类库,这些类都位于java.util包中,统称为集合。

集合框架中包含3个接口,分别是List、Set、Map。

常用的类包括有ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap。

6、请简述TreeSet集合保证唯一性的两种方式

(1):使用自然排序:集合元素所在的类实现Comparable接口,并重写compareTo()方法。

(2):使用比较器排序:创建TreeSet时调用带参构造方法,其参数为Comparator接口对象,可定义一个比较器类实现Comparator接口并重写compare()方法。

7、Java语言中,List的实现类ArrayList、Vector、LinkedList特点?

ArrayList:

底层数据结构是数组,查询快,增删慢。

线程不安全,效率高。

Vector

底层数据结构是数组,查询快,增删慢。

线程安全,效率低。

LinkedList

底层数据结构是链表,查询慢,增删快。

线程不安全,效率高。

8、Java语言中,使用泛型有什么好处?

(1):限定了装入集合的元素类型,将运行时期的问题提前到了编译期间;

(2):避免了强制类型转换。

9、Hashtable和HashMap的区别?

(1):Hashtable:线程安全,效率低。不允许null键和null值;

(2):HashMap:线程不安全,效率高。允许null键和null值。

10、集合中的List、Set、Map有什么区别?

(1):List的特点是元素有序、不唯一。List接口的主要实现类有ArrayList和LinkedList。

(2):Set的特点是元素无序、唯一。Set接口的主要实现类有HashSet和TreeSet。

(3):Map的特点是存储的元素是键(Key)、值(Value)映射关系,元素都是成对出现的。Map接口的主要实现类有HashMap和TreeMap。

11、Java语言中,Map和Collection的区别是什么?

(1):Map 存储的是键值对形式的元素,键唯一,值可以重复。

(2):Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。

12、Java语言中,Collection和Collections的区别是什么?

(1):Collection 是单列集合的顶层接口,有两个子接口List和Set。

(2):Collections 是针对Collection集合进行操作的工具类,可以对Collection集合进行排序和查找等操作。

13、Java语言的I/O流中,close()方法和flush()方法的区别是什么?

(1):close()方法关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。

(2):flush()方法仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。

14、Java语言中,多线程有几种实现方案,分别是哪几种?

有3种多线程实现方案。

(1):继承Thread类;

(2):实现Runnable接口;

(3):实现Callable接口。

15、Java语言中,实现线程同步有几种方式? 分别是什么?

实现线程同步有3种方式。

(1):使用同步代码块;

(2):使用同步方法;

(3):使用同步锁。

16、Java语言中,启动一个线程是run()还是start()?它们的区别是什么?

启动一个线程是start()方法;

run():封装了被线程执行的代码,直接调用仅仅是普通方法的调用;

start():启动线程,并由JVM自动调用run()方法。

17、Java语言中,sleep()和wait()方法的区别是什么?

sleep():必须指定时间;不释放锁。

wait():可以不指定时间,也可以指定时间;释放锁。

18、在Java语言中,为什么wait(),notify(),notifyAll()等方法都定义在Object类中而不是Thread类中?

因为这些方法的调用是依赖于锁对象的,而同步代码块的锁对象是任意锁。

而Object类代表任意的对象,所以wait(),notify(),notifyAll()等方法就定义在Object类。

19、Java语言中,AWT与SWing的区别与联系是什么?

(1):java.awt:使用操作系统所提供组件风格来构建java的GUI组件,与系统关联较强,称为重量级控件。

(2):javax.swing:纯Java编写,与本地操作系统无关,具有平台无关性,称为轻量级控件。

(3):Swing 架构在 AWT 之上,是AWT的扩展而不是取代。

20、请简述适配器类的作用。

(1):JDK提供了一些适配器类,它们是监听器接口的默认实现类,这些实现类中实现了接口的所有方法,但方法中没有任何代码。

(2):可以在程序代码中定义一个类继承适配器类来达到实现监听器接口的目的。

21、简述如何实现GUI中的事件监听机制

(1):通过定义一个类实现XxxListener接口或者继承XxxAdapter类来得到一个事件监听器类,并对处理监听动作的方法进行重写;

(2):创建事件源对象和事件监听器对象;

(3):调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象。

本文地址:https://blog.csdn.net/qq_46144237/article/details/112648743

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值