• 大数据_面试题_Java篇集锦


    Java基础语法

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

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

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

    	&和&&的区别是什么?
    	当运算符左边的结果为true时&和&&右边的式子都会执行。
    	当运算符左边的结果为false时(右边的值不能影响最终结果)
    		&右边的式子要执行
    		&&右边的式子不会执行
    		
    	|和||的区别是什么?
    	当运算符左边的结果为false时&和&&右边的式子都会执行。
    	当运算符左边的结果为true时(右边的值不能影响最终结果)
    		|右边的式子要执行
    		||右边的式子不会执行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    面向对象

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

    final修饰类(最终的类)-太监类:该类不能被继承。(比如:String StringBuilder,....)
    final修饰方法(最终的方法):不能被重写
    final修饰的变量 :值不能被修改
    
    final修饰的属性:没有默认值要求必须赋值
        赋值的方式 :①显示赋值 ②代码块赋值 ③构造器赋值-
        一定要保证无论调用哪个构造器都可以给该变量赋值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    常用类

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

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

    [面试题] 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个对象在堆中
    
    • 1
    • 2

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

    			String s2 = s1.intern();
    
    • 1

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

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

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

    集合

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

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

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

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

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

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

    [面试题] 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

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

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

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

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

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

  • 相关阅读:
    【技巧】Windows 11 如何安装日文语言包和日文系统
    Hyperledger Fabric搭建测试网络
    原版畅销36万册!世界级网工打造TCP/IP圣经级教材,第5版终现身
    获取商品历史价格返回值说明
    Vue3---uni-app--高德地图引用BUG
    Vue3 setup语法糖、Composition API全方位解读
    everything项目测试篇
    左神算法(二)
    2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建
    对比度增强方法
  • 原文地址:https://blog.csdn.net/Saniana/article/details/137887123