本文首发于cartoon的博客
转载请注明出处:https://cartoonyu.github.io/c...java
java
-
sleep与wait的区别git
-
做用对象github
- sleep是Thread类的静态方法,做用于当前线程
- wait是Object类的成员方法,做用于对象自己
-
做用算法
- 调用sleep方法,线程进入休眠状态
- 调用wait方法,线程进入阻塞状态
-
锁的释放spring
- sleep不会释放持有的锁
- wait会释放锁
-
唤醒后端
- 天然唤醒或者显式调用interrupt方法
- 调用notify或者notifyAll方法
-
调用api
- sleep不须要在同步代码中调用
- wait须要在同步代码中调用,不然抛出IllegalMonitorStateException
-
使用场景数组
- sleep做用于周期性任务的执行
- wait做用于互斥资源的使用
-
hashMap的扩容机制浏览器
-
相关成员属性安全
-
HashMap是JAVA集合框架的一个存储key-value对的实现类,有关于扩容机制的成员属性主要有三个
- 默认值为16的capicity
- 默认值为0.75的loadFactory
- 默认值为0的size
-
触发时机
- 插入元素时
-
实现
-
JDK 1.7
- 传入newCapicity参数
- 新建newCapicity长度的Entry数组
- 将原数组元素从新hash放入新数组
- 将原有数组引用指向新数组
-
JDK 1.8以后
- 若是节点的链表元素个数大于8时,原有的数组链表会转换成数组红黑树的逻辑结构进行使用
-
若是当前size大于loadFactory*capicity的阈值,触发扩容机制
- 新建一个newCap的int变量,大小为2*oldCapicity
- 新建一个大小为newCap的数组
- 原数组元素索引进行2次幂的计算放入新数组
- 将newCap赋值给原有的capicity
- 返回新数组
-
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是行级锁,锁定对象是链表的头结点或者红黑树的根结点
- 在写数据,计算访问的数据索引,检查锁,访问链表或者红黑树
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)