当前位置:   article > 正文

敖丙复习指南_敖丙 代码

敖丙 代码

敖丙

集合

HashMap

  • 1.7

    • 数组+链表
    • 头插
  • 1.8

    • 数组+链表+红黑树
    • 尾插
  • 扩容机制

    • LoadFactory 默认0.75

    • 创建一个空数组重新Hash

      • Hash公式跟长度有关
  • 线程不安全

  • 2的幂次

    • 方便位运算
    • 均匀分布
  • 重写equals必须重写HashCode

ConcurrentHashMap

  • 安全失败

  • 1.7

    • 数组+链表

    • segment分段锁

      • 继承了reentranLock
      • 尝试获取锁存在并发竞争 自旋 阻塞
    • get高效 volatile修饰 不需要加锁

    • volatile修饰节点指针

    • HashEntry

  • 1.8

    • 数组+链表+红黑树

    • CAS+synchronized

      • cas失败自旋保证成功

        • 再失败就sync保证
    • node

ArrayList

  • 数组
  • 查找 访问速度快 增删效率低 线程不安全

LinkedList

  • 双向链表
  • 适合插入删除频繁的情况 内部维护了链表的长度

基础

UDP

  • 语音
  • 视频
  • 直播

TCP

  • 三次握手

    • syn seq
    • syn ack seq
    • ack seq
    • 为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
  • 四次挥手

    • fin ack seq
    • ack seqfin ack seq
    • ack seq
  • 场景

    • 网络会话
    • 文件传输
    • 发送接收邮件
    • 远程登录
  • 如何保证可靠

HTTP

HTTPS

  • 为啥安全

BIO

  • 阻塞等待链接
  • 阻塞等待数据
  • 开线程处理并发
  • 耗资源

NIO

  • 非阻塞IO
  • epoll

粘包/拆包

  • 在报文末尾增加换行符表明一条完整的消息,这样在接收端可以根据这个换行符来判断消息是否完整。将消息分为消息头、消息体。可以在消息头中声明消息的长度,根据这个长度来获取报文(比如 808 协议)。规定好报文长度,不足的空位补齐,取的时候按照长度截取即可。

多路复用

  • select

    • 单个进程可监视的fd数量被限制,即能监听端口的大小有限。
    • 对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低:
    • 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大
  • poll

    • 大量的fd的数组被整体复制于用户态和内核地址空间之间,而不管这样的复制是不是有意义
    • poll还有一个特点是“水平触发”,如果报告了fd后,没有被处理,那么下次poll时会再次报告该fd。
  • epoll

    • 没有最大并发连接的限制,能打开的FD的上限远大于1024(1G的内存上能监听约10万个端口);
    • 效率提升,不是轮询的方式,不会随着FD数目的增加效率下降。
    • 内存拷贝,利用mmap()文件映射内存加速与内核空间的消息传递;即epoll使用mmap减少复制开销。

neetty 非异步 阻塞 response trse id 感觉

序列化

多线程

synchronized

  • 对象

    • 对象头(Header)

      • Mark Word(存储对象的HashCode,分代年龄和锁标志位信息。)

      • Klass Point(对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。)

      • Monitor

        • EntryList
        • Owner(会指向持有 Monitor 对象的线程)
        • WaitSet
    • 实例数据

    • 对其填充

  • 方法

    • ACC_SYNCHRONIZED
  • 代码块

    • monitorenter

    • monitorexit

    • 程序计数器 count

      • 加减
  • 锁膨胀

    • 无锁

    • 偏向锁

      • mark Word 中有线程信息 cas 比较
    • 轻量级

      • 复制了一份mark work 叫 Lock record 也是cas尝试改变指针
    • 自旋

      • 死循环
    • 重量级

  • 特性保证

    • 有序性

      • as-if-serial
      • happens-before
    • 可见性

      • 内存强制刷新
    • 原子性

      • 单一线程持有
    • 可重入性

      • 计数器
  • 重锁

    • 用户态内核态切换
  • sync 和 Lock的区别

    • synchronized是关键字,是JVM层面的底层啥都帮我们做了,而Lock是一个接口,是JDK层面的有丰富的API。synchronized会自动释放锁,而Lock必须手动释放锁。synchronized是不可中断的,Lock可以中断也可以不中断。通过Lock可以知道线程有没有拿到锁,而synchronized不能。synchronized能锁住方法和代码块,而Lock只能锁住代码块。Lock可以使用读锁提高多线程读效率。synchronized是非公平锁,ReentrantLock可以控制是否是公平锁。

    • 劣势

      • 锁升级不可逆

ThreadLocal

  • 内存泄露
  • session

Lock

  • ReentrantReadWriteLock

    • ReadLock
    • WriteLock
  • ReentrantLock

    • NonfairSync

      • tryAcquire
      • acquireQueued
      • CAS
    • FairSync

      • hasQueuedPredecessors
      • 如果是当前持有锁的线程 可重入
    • AbstractQueuedSynchronizer

      • 入队 出队

      • 头结点设计

      • 共享和独享的实现

      • CAS

        • 实际应用

        • 存在的问题

          • cpu开销

          • 只能保证一个共享变量原子操作

            • AtomicReference
          • ABA

            • 标志位 时间戳
  • StampedLock

volatile

  • MESI

    • 当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,因此当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存行是无效的,那么它就会从内存重新读取

    • 锁bus

    • volitale会一直嗅探 cas 不断循环无效交互 导致带宽达到峰值

      • 总线风暴
  • Java内存模型JMM

    • 高速缓存
  • 可见性

    • 嗅探机制 强制失效

      • 处理器嗅探总线
  • 有序性

    • 禁止指令重排序

      • lock 前缀指令 内存屏障

        • 源代码->编译器优化重排序->指令级并行重排序->内存系统重排序->最终执行的指令序列
    • happens-before

      • volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。
    • as-if-serial

  • AtomicInteger

  • 跳出死循环

线程池

  • newFixedThreadPool

  • newCacheThreadPool

    • SynchronousQueue
  • newSIngleTheadExecutor

  • newScheduledThewadPool

    • DelayedWorkQueue
  • newWorkStealingPool

  • ThreadPoolExecutor

  • 参数意义

    • 核心线程数

      • 默认没线程等任务来了才调用 除非调用了 预创建线程 一个或者全部
    • 最大线程数

    • 空闲时间&单位

      • 没有执行任务多久会终止 当线程池的线程数大于核心线程才会起作用 调用allowCoreThreadTimeOut会起作用
    • 缓冲队列

      • LinkedBlockingQueue

        • 无界 当心内存溢出
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/720958
推荐阅读
相关标签
  

闽ICP备14008679号