0%

【Java】Java面试八股文随笔

面试八股文,
图片很多30多M,慎点

Java

javaguide

查找算法

实现

公式优化防止溢出


使用移位

排序

冒泡

冒泡实现


优化1,减少内置循环


优化2,减少冒泡次数

最终优化使用变量控制避免无效冒泡

认为最后一次交之后的元素均已达成排序条件

选择

实现

插入

实现

快速排序

单边快排

双边快排

ArrayList

扩容机制

  • 初始容量为0

  • (add)扩容容量都是上一次容量的1.5倍

    旧数组长+旧数组长度右移一位(除2)

  • (addAll)

    空数组时,addall 扩容 10 与 实际元素个数 之间的较大值
    非空数组时,addall 扩容 1.5倍原容量 与 实际元素个数 之间的较大值

迭代器

  • fail-fast 不允许在便利时修改list,

    若修改则会使迭代器立即报错

  • fail-safe 允许并发修改list,但会牺牲一致性

    添加新元素的时候会复制一边数组,读写分离

LinkedList

  • 读取
    arrylist 实现了 RandomAccess 接口

    所以可以直接可以使用get 获取元素, 效率比(LinkedList 沿着链表遍历找值 )高

  • 增删
    arrylist 增删会导致数据移动效率会降低,头尾插入没有问题
    LinkedList 只有头尾性能高

  • 空间占用
    arrylist 因为局部性原理,可以避免频繁的内存与缓存的读写

HashMap



单例

并发

常识



sleep | wait

lock | synchronize

volatile


悲观锁,乐观锁

Hashtable | ConcurrentHashMap

ThreadLocal

JVM


内存结构



JVM内存参数




垃圾回收



垃圾回收 | GC



三色标记

并发漏标



内存溢出




双亲委派




四种 引用对象

finalize





Java面向对象有哪些特征

继承、封装、多态、

ArrayList和LinkedList有什么区别

  • 一个数组,一个链表
  • 插入、删除、访问

Java中抽象类和接口有什么区别

  • 语义区别
    • 抽象类是一个抽象的概念:动物、食物、
    • 接口是一个共同事物的共同特征:会飞的、会发光的、

高并发的集合有哪些问题

  • 第一代,默认线程安全,效率很低
  • 第二代,非线程安全,ArrayList、HashMap,线程不安全但是效率比较高
  • 第三代,线程安全集合类。。。。。。

1.8的新特性有哪些?

Spring

refresh














spring bean











spring 事务失效



spring MVC





注解

spring boot 自动配置

spring 循环依赖