个人觉得笔记的知识点记得太多不是太好,首先自己并不会认真的去看,其次就是自己的表达能力并不一定到位,有可能会过段时间之后就记不住了。反而只将知识点记录下来,会勾起脑细胞去回忆知识点并尝试将其串起来。
集合
基础知识
- 请用Iterable实现一个随机序列产生器
- Collection和Set的区别
- Map是不是Collection?
- TreeMap和HashMap的区别?
- HashMap vs HashTable
- 实现Key-Value的LRU缓存
- Map的本质
- HashMap是什么
- TreeSet是什么
数据结构
- 链表的表示
- 增删改查?相关复杂度
- 合并两个链表的操作
- 反转链表
- 用链表实现队列、栈
- 判断链表中是否有环
- 和CAS Loop结合
- 栈和队列的基本概念:什么是栈什么是队列
- 栈和队列的实现和基本操作接口
- 栈实现队列?队列实现栈
- 括号匹配问题
- 表达式解析问题
- 树的表示?
- 反转二叉树
- 计算树的深度?
- 广度优先算法和深度优先算法
- 树遍历的序?如何判断二叉树是不是二叉搜索树?
- 关于对平衡二叉树的认知
- HashTable的原理
- 说一个hash函数
- Java的HashMap是如何实现的?
- 除了哈希表还有哪些适合存key value的数据结构
- ConcurrentHashMap是怎么回事?什么时候用(有版本区别)
- Java的Object的hashcode是如何计算的
源码分析
源码分析
- 什么是反射
- 写一个关于XXX反射的程序
- 解释下为什么要面向切面编程
- 为什么Proxy.newProxyInstance要传入ClassLoader
- 手写一个AOP
并发
线程
- 进程和线程的区别
- 为什么要有线程
- 为什么要减少线程切换
- 进程开销为什么比线程大
- Java线程有什么状态?如何转换
- Java线程是内核级还是用户级
cas
同步器
- 什么是同步
- 简述下java有哪些同步器
- synchronized是如何实现的
- ReentrantLock和synchronized的区别
- 为什么需要AbstractQueuedSynchronizer
- 偏向锁、轻量级锁、重量级锁是什么回事
- AbstractQueuedSynchronizer可以用来做什么
- 简述AbstractQueuedSynchronizer如何工作的
- 手写程序:如何用AbstractQueuedSynchronizer实现Mutex
- AQS如何保持公平性
- CAS在AQS中的作用是什么
- AQS内部的CLH算法工作原理是什么
- synchronized和ReentrantLock的区别
- 什么场景下需要锁可重入
- 什么场景下用CountDownLatch
- 什么场景下用Semaphore
- Phaser是怎么实现的
- 什么场景下用Exchanger
- ArrayBlockingQueue和LinkedBlockingQueue的区别
- add/offer/put区别?remove/poll/take的区别?
- DelayQueu的应用场景
- SynchronousQueue的应用场景?
- LinkedTransferQueue和SynchronousQueue有什么异同
- LinkedBlockingDeque和SynchronousQueue工作原理一样吗
- 说说ArrayBlockingQueue和LinkedTransferQueue的最大区别?以及使用场景
- 什么是有界队列?什么是无界队列
函数式编程Monad
- 讲讲JVM的内存布局
- JVM中的对象都有哪些数据
- JVM运行时数据区有哪些
- 讲讲JVM的内存布局
- JVM中的对象都有哪些数据
- JVM运行时数据区有哪些
GC
- 为什么要GC
- STW(Stop the world)是什么?
- 图和提高Throughput(吞吐量)
- 引用计数有什么问题?
- java中有哪几种引用
- 为什么需要三色标记而不是双色?
- 三色标记算法如何处理mutation(变动)?
- java堆分成哪些部分?
- 新生代、老年代、存货代、永久代是什么?如何工作的?
- 什么时候发生复制整理
垃圾收集器
- 都有哪些那几收集器?
- G1、CMS、Serial、ParNew、Z、Parallel
- Minor GC、Major GC、Full GC
- GC Rooting的根节点有哪些?
Java对象头
- 说一下Object在内存中的格式
- 说一下初始化一个类的过程
- 空的Object多大
- Class Header里都有什么
- Object有哪些方法
JVM调试工具
- JMeter 压力测试
- jps java应用程序查看
- jstat JVM统计监控工具
- jmap
- jinfo 查看修改虚拟机配置
- jhat Java堆分析工具
- jstack 打印Java的Stack
- jconsole
java版本新特性
java8
- Lambda、Function Interface
- 方法引用操作符::
- Stream(Monad函数式编程)
- Optional
- 接口的方法(static、default、private)
- Java8 Nashorn JavaScript
- 本地化日期处理升级
- 内置Base64工具
java9
- 模块系统
- 交互式编程环境(JShell)
- HTTP2.0 Clinet
- 改进Javadoc
- 支持multirelease jar 包
- 集合的工厂方法
- Stream新增API(takeWhile、dropWhile、itreate、ofNullAble)
- 钻石操作符语法优化<>
- try-with-resource改进
java10
- 局部变量类型推断
- JDK代码仓库整理