本文首发于cartoon的博客
转载请注明出处:cartoonyu.github.io/cartoon-blo…
java
- sleep与wait的区别
- 作用对象
- sleep是Thread类的静态方法,作用于当前线程
- wait是Object类的成员方法,作用于对象本身
- 作用
- 调用sleep方法,线程进入休眠状态
- 调用wait方法,线程进入阻塞状态
- 锁的释放
- sleep不会释放持有的锁
- wait会释放锁
- 唤醒
- 自然唤醒或者显式调用interrupt方法
- 调用notify或者notifyAll方法
- 调用
- sleep不需要在同步代码中调用
- wait需要在同步代码中调用,否则抛出IllegalMonitorStateException
- 使用场景
- sleep作用于周期性任务的执行
- wait作用于互斥资源的使用
- 作用对象
- hashMap的扩容机制
- 相关成员属性
- HashMap是JAVA集合框架的一个存储key-value对的实现类,有关于扩容机制的成员属性主要有三个
- 默认值为16的capicity
- 默认值为0.75的loadFactory
- 默认值为0的size
- HashMap是JAVA集合框架的一个存储key-value对的实现类,有关于扩容机制的成员属性主要有三个
- 触发时机
- 插入元素时
- 实现
- JDK 1.7
- 传入newCapicity参数
- 新建newCapicity长度的Entry数组
- 将原数组元素重新hash放入新数组
- 将原有数组引用指向新数组
- JDK 1.8之后
- 如果节点的链表元素个数大于8时,原有的数组链表会转换成数组红黑树的逻辑结构进行使用
- 如果当前size大于loadFactory*capicity的阈值,触发扩容机制
- 新建一个newCap的int变量,大小为2*oldCapicity
- 新建一个大小为newCap的数组
- 原数组元素索引进行2次幂的计算放入新数组
- 将newCap赋值给原有的capicity
- 返回新数组
- JDK 1.7
- 相关成员属性
- ReentantLock的了解
- 存在位置
- ReentantLock是JDK的一个显式锁的API,具体通过AQS队列实现功能
- 锁的种类
- ReentantLock是可重入的锁,内部通过判断state当前占有线程进行重入的判断
- ReentantLock可以实现公平锁以及非公平锁,在构造对象时显式传入fair
- 同步机制
- ReentantLock是同步非阻塞式的,采用乐观并发策略
- ReentantLock需要显式控制锁的获取与释放,而且可以响应中断
- 存在位置
- List实现类的比较
- 底层实现
- Arraylist为数组
- LinkedList为链表
- 线程安全
- ArrayList,LinkedList为线程不安全
- Vector为线程安全
- 实现时间
- ArrayList,LinkedList为JDK1.2开始实现
- Vector为JDK1.1开始实现
- 底层实现
- NIO的了解
- NIO是java中用于实现数据的输入/输出的API,是同步非阻塞式的
- 核心对象
- selector,选择器,用于对channel的选择
- channel,通道,用于连接java程序与对象的通道
- buffer,缓冲区,用于数据的暂时存放
- 工作步骤
- java程序与操作对象建立channel
- 数据放入buffer中
- selector轮询channel,监控IO状况,控制输入输出
- ConcurrentHashMap同步的实现(JDK1.7 1.8)
- JDK1.7实现
- ConcurrentHashMap中数据存放在Segment(默认为16个)中
- ConcurrentHashMap为区域锁,锁定对象是Segment
- 在写数据时,会经过计算得出使用的Segment,并检查是否持有Segment的锁
- JDK1.8实现
- ConcurrentHashMap中数据存放在数组链表/红黑树中
- ConcurrentHashMap是行级锁,锁定对象是链表的头结点或者红黑树的根结点
- 在写数据,计算访问的数据索引,检查锁,访问链表或者红黑树
- JDK1.7实现
JVM
- G1的工作流程
- 初始标记
- 并发标记
- 最终标记
- 筛选回收
- CMS的工作流程
- 初始标记(stw现象)
- 并发标记
- 重新标记(stw现象)
- 并发清理
- 重置线程
Spring
- spring bean的生命周期
- 对象被实例化
- Spring进行IOC的注入
- 可选
- 传入对象
- 实现BeanNameAware接口,传入bean的ID
- 实现ApplicationFactoryAware接口,传入Spring工厂
- 实现ApplicationContextAware接口,传入Spring上下文
- 初始化
- 实现BeanPostProcessor接口,对bean内容进行修改
- 传入对象
- 使用
- 清理
网络
- 输入域名到返回页面的过程
- 浏览器部分
- 利用DNS进行域名解析
- 检查本地host文件
- 组装http报文
- http报文经过OSI底层包装发送请求
- http请求在第三次tcp握手上发送
- 传输
- 路由器根据IP进行选择转发到目标主机
- 目标主机
- 后端进行报文的拆解获取真实请求
- 根据请求返回相应页面
- 传输
- 路由器根据IP进行选择转发到目标主机
- 源主机
- 拆解报文,获取实部数据
- 交给浏览器渲染页面
- 浏览器部分
算法
- 两数之和(leetcode 1)