大数据_面试题_Java篇集锦

发布于:2024-04-25 ⋅ 阅读:(25) ⋅ 点赞:(0)

Java基础语法

[面试题]:下面的区别是什么?

short s = 3;
//s = s + 3;//不可以因为short会自动类型提升为int
s += 3;// 可以:不会改变原来的数据类型-底层做了强转的处理。

[面试题]&和&&的区别是什么?|和||的区别是什么?

	&和&&的区别是什么?
	当运算符左边的结果为true时&和&&右边的式子都会执行。
	当运算符左边的结果为false时(右边的值不能影响最终结果)
		&右边的式子要执行
		&&右边的式子不会执行
		
	|和||的区别是什么?
	当运算符左边的结果为false时&和&&右边的式子都会执行。
	当运算符左边的结果为true时(右边的值不能影响最终结果)
		|右边的式子要执行
		||右边的式子不会执行

面向对象

[面试题]请简述final关键字

final修饰类(最终的类)-太监类:该类不能被继承。(比如:String StringBuilder,....)
final修饰方法(最终的方法):不能被重写
final修饰的变量 :值不能被修改

final修饰的属性:没有默认值要求必须赋值
    赋值的方式 :①显示赋值 ②代码块赋值 ③构造器赋值-
    一定要保证无论调用哪个构造器都可以给该变量赋值

常用类

[面试题] : equals和==的区别?(Object类)

       == :
            如果运算符两边是基本数据类型比较的是具体的值
            如果运算符两边是引用数据类型比较的是地址值。
       equals :
            如果类中不重写equals方法那么调用的是Object中的equals方法那么比较的是地址值。
            如果类中重写了equals方法其本上都是比较内容(看重写方法中做了什么)。

[面试题] final、finally、finalize的区别(Object类)

final是一个修饰符可以修饰类,方法,变量。
finally是try-catch-finally中的一个关键字。finally中的代码一定会执行。
finalize :finalize是一个方法名,它是Object类中声明的一个方法,
它是由GC垃圾回收器在回收垃圾对象之前用于释放该对象在JVM以外占用的内存和资源。

比如调用了native方法 native方法调用的是c程序。
c程序用的不是JVM的内存GC无法对该内存区域进行管理
再通过代码去清理JVM以外的内存(不清理就会导致内存泄露-该内存一直在被占用)

[面试题] String s = “a” + “b” + “c” 创建了几个对象 ?(String类)

1个-字符串常量池

[面试题] String s = new String(“abc”) 创建了几个对象 ?(String类)

            如果字符串常量池中没有abc 那么会创建2个对象 1个在字符串常量池 1个在堆中
            如果字符串常量池中已经存在abc 那么会创建1个对象在堆中

[面试题] String s1 = new String(“hello”);(String类)

			String s2 = s1.intern();

[面试题] StringBuffer和StringBuilder的区别?(String类)

String:         不可变的字符序列   线程安全
StringBuffer:   可变的字符序列     线程安全
StringBuilder:  可变的字符序列     线程不安全
补充效率方面:StringBuilder > StringBuffer > String

结论:如果需要频繁进行字符串的拼接可以使用StringBuilder和StringBuffer

集合

[面试题] ArrayList的底实现?(List接口实现类)

    当我们通过ArrayList的空参构造器创建对象时底层会创建一个长度为0的Object[]。
    当我们第一次向该对象中添加元素时底层会扩容 扩容的长度为10(原来的长度是0).
    当我们向该对象中添加第11个元素时底层会再次扩容扩容为原来的1.5倍。
    并且将原来的数组中的元素copy到当前数组中。

[面试题] ArrayList和LinkedList的区别?(List接口实现类)

    ArrayList底层是数组,LinkedList底层是双向链表
    ArrayList和LinkedList都不是线程安全的

[面试题] ArrayList和Vector的区别?(List接口实现类)

    1.ArrayList和Vector底层都是Object[]
    2.ArrayList是线程不安全的,Vector是线程安全的。
    3.ArrayList空参构造器创建的是一个长度为0的数组,
    	Vector空参构造器创建的是一个长度为10的数组
        ArrayList扩容为原来的1.5倍。Vector默认扩容为原来的2倍(也可以指定扩容大小)

[面试题] ArrayList,LinkedList,Vector的区别?(List接口实现类)

1.ArrayList和Vector底层都是数组。LinkedList底层是双向链表
2.ArrayList和LinkedList是线程不安全的。Vector是线程安全的。

[面试题]HashMap和Hashtable的区别?(List接口实现类)

    1.HashMap是线程不安全的 Hashtable是线程安全的 (重要)
    2.HashMap和Hashtable底层都是Hash表
    3.HashMap的空参构造器中只给加载因子赋值0.75 
    	(第1次创建的数组长度为16-Node[] 阈值是12)
      Hashtable的空参构造器中创建了一个长度为11的Entry[]  加载因子0.75  阈值是8
    4.Hashtable中的key,value不能是null (重要)
      HashMap中的key,value可以是nulll
    5.HashMap扩容为原来的2倍。Hashtable扩容为原来的2倍+1

[面试题] : Collection和Collections的区别?(List接口实现类)

Collections工具类 : 用来对集合做一些操作
Collection是一个接口

[面试题]继承Thread和实现Runnable有什么区别?(多线程)

    1.实现接口和继承类 - 实现接口更灵活因为可以多实现。
    2.线程安全
        同步代码块 :
            继承Thread : 锁不可以是this
            实现Runnable : 锁可以是this
        同步方法
            继承Thread : 同步方法要使用静态同步方法--锁是当前类的运行时类(类信息)
            实现Runnable : 同步方法不是静态的 - 锁是this
    3.共享数据
         继承Thread : 如果共享数据是在Thread子类中声明的该共享数据需要使用static修饰
         实现Runnable : 如果共享数据是在Runnable接口的实现类中声明的
         	共享数据不需要使用static修饰

[面试题]sleep和wait的区别?(多线程)

(1)sleep()不释放锁,wait()释放锁
(2)sleep(时间)指定休眠的时间,wait()/wait(时间)可以指定时间也可以无限等待直到notify或notifyAll
(3)sleep()在Thread类中声明的静态方法,wait方法在Object类中声明


网站公告

今日签到

点亮在社区的每一天
去签到