Java 基础面试题 真正的 offer 偏方 Java 基础 Java 高级 Java 基础面试题 真正的 offer 偏方 Java 基础 Java 高级一、参考资料【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p46share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b4528二、笔记总结01、fail-safe 机制与 fail-fast 机制【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p46share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452802、HashMap 是怎么解决 Hash 冲突的Hash 算法就是把任意长度的输入通过散列算法变成固定长度的输出这个输出叫做散列值。Hash 表又叫散列表它是通过 key 直接访问到内存存储位置的数据结构。在具体实现上通过 Hash 函数把 key 映射到表中的某个位置获取这个位置的数据从而加快数据的查找。Hash 冲突是由于 Hash 算法计算的数据是无限的而计算结果的范围是有限的所有可能存在不同的数据计算结果相同。HashMap 使用链式寻址法解决 Hash 冲突简单理解就是把存在冲突的 key 以单向链表的方式进行存储。03、受检异常和非受检异常的理解受检异常表示在编译时要强制检查的异常这种异常需要显式的 try catch 捕获或 throws 抛出去否则程序无法通过编译。非受检异常表示编译器不需要强制检查的异常这种异常不需要显式处理。Java 中所有的异常都要继承 Throwable 类Throwable 有两个直接的子类Error 和 Exception。Error 表示程序底层的错误这种错误和代码本身没有什么关系比如 OOM 内存溢出异常。Exception 表示代码本身的异常比如空指针异常。Exception 派生了两种类型RuntimeException 和 其它RuntimeException 运行时异常属于非受检异常。除了 Error 和 RuntimeException 及其派生异常其它异常都属与受检异常。04、JDK 动态代理为什么只能代理有接口的类Java 中类是单一继承接口是多继承。跟JDK 动态代理的底层实现有关JDK 动态代理会在程序运行期间动态生成一个代理类这个动态生成的代理类会继承 Proxy 类同时还要去实现被代理类的接口。Java 类是不支持多继承的每个动态代理类都继承了 Proxy 类所以代理 JDK 动态代理只能代理接口。【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p49share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452805、说一下对象的创建过程【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p50share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452806、new String(abc) 到底创建了几个对象如果 abc 这个字符串常量不存在则创建两个对象分别是 abc 这个字符串常量以及 new String 这个实例对象。如果 abc 这个字符串常量存在则只创建一个对象。07、HashMap 是如何解决 Hash 冲突的同 02【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p52share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452808、String、StringBuffer、StringBuilder 区别可变性方面String 内部的 Value 值是 final 修饰的所以 String 是不可变的每次修改值都会产生新的对象。StringBuffer 和 StringBuilder 是可变类字符串的变更不会产生新的对象。线程安全性方面String 是不可变类所以是线程安全的。StringBuffer 也是线程安全的因为 StringBuffer 中的方法加了 Synchronized 关键字。StringBuilder 不是线程安全的所在在多线程环境下操作字符串应该使用 StringBuffer。性能方面String 性能最低因为不可变做字符串拼接或修改时需要重新创建新的对象以及分配内存。StringBuffer 比 String 性能高因为是可变的字符串可以直接被修改。StringBuilder 的性能最高因为 StringBuffer 加了同步锁影响性能。存储方面String 存储在字符串常量池内StringBuffer、StringBuilder 存储在堆内存空间。09、为什么两个 Integer 对象不能使用 比较Integer 是 int 的包装类Integer 使用了享元模式的设计对 -128 到 127 做了缓存如果不超过这个范围就返回缓存中的对象否则就创建新的对象。这样设计的好处是减少频繁创建 Integer 对象减少内存消耗从而提升性能。10、讲一下 ArrayList 的自动扩容机制ArrayList 是一个数组结构的存储容器默认情况下数组的长度是 10也可以在构建 ArrayList 对象时指定初始长度。ArrayList 的扩容流程首先创建一个新的数组长度是原来的 1.5 倍。然后使用 ArrayList.copyof 方法把老数组里面的数据拷贝到新数组里面。扩容完成以后再把当前需要添加的元素添加到新的数组里面。11、什么是深拷贝和浅拷贝深拷贝和浅拷贝描述的是引用数据类型的复制场景浅拷贝只复制某一个对象的指针而不复制这个对象本身意味着两个指针指向同一块内存地址。深拷贝是完全创建一个一模一样的新对象新对象和老对象不共享任何内存对新对象的修改不影响老对象。12、HashMap 中的 Hash 方法为什么要右移动 16 位异或【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p58share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452813、HashMap 啥时候扩容为什么扩容【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p59share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452814、强引用、软引用、弱引用、虚引用区别【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p60share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452815、Java 有几种文件拷贝方式哪一种效率最高使用 java.io 包下的 FileInputStream 和 FileOutputStream使用 java.nio 包下的 transferTo 和 transfFrom使用 Files.copy文件拷贝的效率和操作系统和配置的情况有关系传统的文件 io 都是调用操作系统底层的标准函数。transferTo 和 transfFrom 性能上表现比较好16、聊聊你知道的设计模式设计模式分为创建型模式、结构型模式、行为型模式。创建型模式工厂模式、单例模式、构建器模式、原型模式结构型模式桥接模式、适配器模式、装饰器模式、代理模式、组合模式、外观模式、享元模式行为型模式策略模式、解释器模式、命令模式、观察者模式、迭代器模式、模板方法模式、访问模式17、finally 块一定会执行吗finally 语句块两种情况在不会执行程序还没有进入 try 语句块就因为异常导致程序终止在 try 或 catch 语句块中执行 System.exit(0) 导致 JVM 退出18、在 Java 中实现单例模式有哪些方法三种方式实现单例双重检查锁的方式线程安全并且延迟实例化的方式但是因为加锁会有性能上的影响。使用静态内部类的方式实现也是延迟实例化由于是静态内部了所以只会在使用时加载一次不存在线程安全问题。使用枚举类的方式实现即使线程安全的又能防止反序列化导致破坏单例的问题。19、Java SPI 是什么有什么用Java SPI 是 Java 提供的接口扩展机制把标准定义和接口实现分离实现功能的扩展更好的满足定制化需求。20、Integer 和 int 区别Java 为什么设计封装类Integer 和 int 区别Integer 的初始值是 nullint 的初始值是 0。Integer 存储在堆内存int 类型存储在栈空间。Integer 是对象类型封装了很多属性和方法使用时更加灵活。Java 本身是面向对象的语言一切操作都是以对象作为基础的比如集合中存的元素也只支持 Object 类型。21、Integer a1 100 Integer a2 100 a1 a2 的结果及原因a1 a2 的执行结果是 true原因是 Integer 内部用到了享元模式的设计也就是针对 -128 到 127 之间的数字做了一个缓存。使用 Integer a1 100 赋值时Java 默认会进行装箱操作从而触发了缓存操作使得 a1 和 a2 指向同一个内存地址。22、HashMap 与 HashTable 的区别【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p68share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452823、Java 反射的优缺点【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p69share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452824、为什么重写 equals 方法就一定要重写 hashCode 方法如果只重写 equals 方法不重写 hashCode 方法可能会导致 a.equals(b) 这样一个表达式成立hashCode 却不同。在使用散列集合存储这个对象的时候就会出现问题因为散列集合是使用 hashCode 计算 key 的存储位置如果存储两个相同的对象hashCode 却不同就会导致这两个对象存储在 hash 表不同位置破坏大家约定俗成的规则使得程序出现不可预料的错误。25、介绍一下策略模式和观察者模式【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p71share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452826、谈谈什么是零拷贝【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p72share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452827、SortedSet 和 List 异同点相同点都可以存储一组有序的元素都支持随机访问和按照索引位置插入元素都是派生自 Collection 接口不同点SortedSet 是一个有序集合不允许元素重复。List 是有序列表允许元素重复。SortedSet 可以自定义排序规则List 只能按添加顺序排序。元素添加删除的时间复杂度不同因为 List 需要移动其它元素的位置。SortedSet 可以方便的查询某个区间范围的元素List 只能通过遍历实现。28、为什么阿里 Java 手册禁止使用存储过程【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p74share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b452829、为什么阿里巴巴强制使用包装类型定义属性【25年新版Java面试场景题八股文真正的offer偏方跳槽面试你一定用得上Java面试丨Java场景题丨Java丨Java基础丨Java高级】 https://www.bilibili.com/video/BV1w44y1w7Zh/?p75share_sourcecopy_webvd_source855891859b2dc554eace9de3f28b4528