Java基础总结基础概念多线程/并发集合框架网络编程netty场景题经典面试题总结Java基础面试主要分为4个版块基础概念面向对象、多线程/并发、集合框架以及网络编程。基础概念这部分没啥需要记录的就面向对象那些直接背。 重点在Java8、11、17、21的新特性。面试题链接[https://www.mianshiya.com/bank/1787463103423897602]多线程/并发线程的生命周期、synchronize锁升级、volatile的用法与缺点、JMM抽象模型、cas无锁机制、线程池核心参数、如何排查死锁、synchronize与reentryLock的区别、ThreadLocal原理以及内存泄漏风险面试题链接https://www.mianshiya.com/bank/1789249312885223425集合框架ArrayList以及HashMap底层结构、扩容机制与时间复杂度currentHashMap并发实现与线程安全策略HashMap在Java1.7与1.8的实现区别红黑树算法哈希冲突。面试题链接https://www.mianshiya.com/bank/1788408712975282177网络编程nettyBIO|NIO|AIO的区别与应用、NIO三大组件channel、selector、buffer、零拷贝与mmap原理、netty为什么用nio、reatctor模式的单/多线程实现、netty粘包拆包问题。面试题链接https://www.mianshiya.com/tag/Netty这里不记录具体的面试题可以各大网站去刷ddkk、面试鸭、github场景题基本上就是考察基础知识积累以及源码阅读。经典面试题hashmap1.7和1.8的区别currenthashmap1.7和1.8区别版权声明以下内容为CSDN博主「Insist Every Day」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。原文链接https://blog.csdn.net/m0_51769717/article/details/135738022JDK1.7 中hashmap 1、使用entry数组来存数据然后通过hash取模的方法将数据分散存到不同的格子里面这些key会形成一个链表 2、使用头插法 JDK1.8 中hashmap 1、hashmap在数组到达64格链表大于8时会将连别变成红黑树提升效率 2、使用尾插法避免在并发编程的时候出现循环列表问题将头插法改成尾插法 currentHashmap 底层加锁机制: 在JDK1.7中segments数组HashEntry数组链表。一个ConcurrentHashMap中有一个Segments数组一个Segments中存储一个HashEntry数组每个HashEntry是一个链表结构的元素。segment继承自ReentrantLock锁。首先将数据分为一段一段的存储然后给每一段数据配一把锁当一个线程占用锁访问其中一段数据时其他段的数据也能被其他线程访问实现了真正的并发访问。 在JDK1.8中摒弃了Segment而是采用synchronizedCAS红黑树来实现锁的粒度也从段锁缩小为结点锁 put的流程不同 在JDK1.7中要进行两次定位先对Segment进行定位再对内部的数组下标进行定位。定位之后会采用自旋锁锁膨胀的机制进行加锁也就是自旋获取锁当自旋次数超过64时会发生膨胀直接陷入阻塞状态等待唤醒。并且再整个put期间都持有锁 在JDK1.8中只需要一次定位并且采用CASsynchronized的机制。如果对应下标处没有结点说明没有发生哈希冲突此时直接通过CAS进行插入若成功直接返回。若失败则使用synchronized进行加锁插入Java8、11、17、21新特性Java8 1.元空间替代永久代 2.lambda表达式 3.函数式接口FunctionInterface 4.新的日期时间apiLocalDate、LocalTime 5.Stream API 6.CompletableFuture 是Java 8引入的异步编程工具解决了老版Future 的两个痛点:一是get 方法会阻塞线程二是没法 把多个异步任务串起来。 CompletableFuture 支持链式调用可以用 thenApply、thenCompose这些方法把多个异步操作像流水线一样串起来前 一个任务完成自动触发下一个不用手动阻塞等结果。 基本用法是这样的: 1)用supplyAsync提交一个有返回值的异步任务或者runAsync提交一个无返回值的任务 2)用thenApply 对结果做转换thenAccept消费结果thenRun单纯执行后续动作 3)用 exceptionally 或 handle 处理异常 4)用thenCombine合并两个任务的结果用allOf等待多个任务全部完成 Java11 1.标准化HTTP客户端API 2.String类方法增强 3.Files类简化文件读写writingString()/readString() 4.Optional新增isEmpty() java17: 1.Sealed密封类 2.增强的伪随机数生成器 3.强封装JDK内部API java21: 1.Virtual Threads虚拟线程重点可以详细了解一下适配AI 2.Switch模式匹配 3.Record模式 4.分代ZGC未完待续