• Java SE 常见问题


    1、HashMap 扩容对性能有何影响?

    每次扩容都需要对旧的数据重新计算 hash 值,影响性能,所以如果预期知道目标集合大小的话,直接初始化一个比较大的map,一定程度可以提高性能。

    HashMap 默认容量达到 0.75(装载因子)时进行扩容。

    2、HashMap 底层结构是怎样的?

    HashMap 底层使用 数组 + 单链表 实现的

    3、java 中线程创建的方式有哪些?

    • 继承 Thread 重写 run 方法

    • 实现 runnable 接口,重写 run 方法

    • 实现 callable 接口,重写 call 方法,使用线程池提交任务

    4、线程安全的集合有哪些?

    • HashTable

      使用 synchronized 对整个对象加锁,性能消耗很大

    • Vector

      使用 synchronized 对整个对象加锁,性能消耗很大

    • ConcurrentXXX

      使用 synchronized 对单节点加锁,性能消耗小

    5、线程的生命周期

    线程新建、线程就绪、线程堵塞、线程运行、线程死亡

    6、线程中 sleep 和 wait 的区别?

    wait:释放对象的锁,进入阻塞状态,被唤醒后进行竞争,竞争成功后进入运行状态

    sleep:可以模拟网络延迟,但是不会释放对象的锁

    7、线程同步与线程通信之间的区别?

    线程同步:线程同步是不同线程的共享资源的同步

    线程通信:线程通信是不同线程之间业务的交流

    8、== 和 equals 的区别

    == :基本数据类型用于比较值,引用类型用于比较内存地址

    equals:引用类型若不重写该方法则也是比较内存地址,一般重写后用于比较内容

    9、JDK 1.8新特性有哪些?

    • Lambda表达式

    • stream API

    • 函数式接口

    • LocalDate、LocalTime、LocalDateTime新时间

    • Optional 工具类

    • 方法引用和构造引用

    • 接口中默认方法和静态方法

    10、接口和抽象类的区别

    语法层次:

    • 接口多继承、抽象类单继承

    • 接口实现,抽象类继承

    • 接口不能有方法体,抽象类有方法体

    • 接口定义变量只能是静态常量,抽象类则是普通变量

    思想层面:

    • 接口:自上向下

      不需要考虑子类实现

    • 抽象类:自下向上

      考虑子类共同特点,抽取共同特点生成抽象类

    语义层面:

    • 接口:主要用于描述特征

    • 抽象类:主要用于描述概念

  • 相关阅读:
    Oracle 11g+PLSQL Developer安装及环境配置
    Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务
    java 各种架构图汇总
    解读CryptoPunks的新版知识产权授权许可协议
    Spring Cloud 生态2020
    辛普森一家,有趣的句子
    Qt 学习(四) —— QCheckBox复选框
    indiegogo/kickstarter海外众筹是什么
    手动扩缩容 Kubernetes 上的 TiDB 集群
    1.2、Python基础-函数
  • 原文地址:https://blog.csdn.net/qq_42151956/article/details/127107718