码迷,mamicode.com
首页 > 编程语言 > 详细

每日三省Java

时间:2019-04-09 20:35:51      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:http   避免   阻塞队列   网络编程   动态   insert   href   网络   equals   

1、集合

  • ArrayList,基于数组Object[] elementData实现,因为是连续内存,所以使用native方法System.arraycopy执行扩容操作,1.5倍扩容
  • 迭代器模式,定义Iterable接口表示“可迭代”,Collection extends Iterable,List、Set等实现类各自实现Iterable定义的iterator()方法,实现从外部迭代Collection
  • HashMap,基于Node<K, V>数组,通过hash算法直接找到数据进行读写操作,put/get的时间复杂度都是O(1),如果hash结果相同但equals结果不同,则判定为发生了hash冲突,用链地址法解决hash冲突,1.8新增了红黑树,2倍扩容,触发rehash后原数组不释放,实际占用内存会是3倍,所以应尽量避免触发rehash
  • LinkedHashMap,按插入顺序有序的HashMap,extends HashMap,内部的Entry也是继承了HashMap.Node,增加before、after两个指针,put逻辑复用了HashMap的put逻辑,额外实现了afterNodeInsertion来操作before、after,put/get的时间复杂度也都是O(1)
  • TreeMap,基于红黑树实现,通过root节点 Entry<K,V> root 来操作树,put/get的时间复杂度都是O(logN),按key值大小有序,优先使用TreeMap的成员变量comparator做key值比较,comparator为空的时候使用key的compareTo方法做比较,如果key对象没有实现Comparable将会报错
  • ConcurrentHashMap,并发安全的HashMap,1.7使用分段Lock,1.8使用CAS+synchronized,Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

2、多线程&锁

  • 引入多线程的原因,CPU和内存、磁盘的性能差异较大,为了尽可能的挖掘CPU的性能,引入多线程
  • 多线程操作同一个数据会导致更新丢失等线程安全问题,引入锁解决线程安全问题
  • Java线程的生命周期,waiting和block、sleep的区别
  • synchronized,JVM实现,可重入、非公平,基于Object的monitor,不需要额外的释放锁操作
  • Lock,JDK实现,CAS乐观锁,可重入,默认非公平,基于AQS,策略可选,基于Condition实现wait/notify机制,一个锁可以创建多个Condition,更灵活
  • volatile,

3、线程池

框架图,ThreadPoolExecutor, Future, Executors等

 

ThreadPoolExecutor的构造参数:

corePoolSize, 核心线程数
maximumPoolSize, 最大线程数,任务队列也满员之后才会按此限制继续创建线程
workQueue, 任务的阻塞队列。若线程池已经被占满,则该队列用于存放无法再放入线程池中的Runnable
keepAliveTime, 线程存活时间。当线程数大于core数,那么超过该时间的线程将会被终结
threadFactory, 创建线程的工厂类
handler, 队列满载后的抛弃策略

4、JVM

  • 堆区,存放Object实例,Object头部记录了对象的age、monitor等信息,整个堆区划分为Old+Young(Eden+S1+S2),有各自的GC策略
  • 栈区,一个线程一个栈,栈帧描述的是方法的执行信息,局部变量表、方法返回地址等信息,线程太多会导致OOM
  • 方法区,存放class信息、静态变量、常量。类加载机制:装载(双亲委派ClassLoader)、链接、初始化(静态变量、常量)
  • 程序计数器,唯一没有规定OOM的区域,每个线程有自己的程序计数器

5、spring

IOC、AOP,反射原理,jdk动态代理、cglib的动态代理的原理

spring启动过程,bean的生命周期,filter和intercept的区别,factorybean和beanfactory,事务的传播机制与隔离级别,事务实现原理

6、网络编程

NIO,同步/异步、阻塞/非阻塞,

netty,

thrift,

 

11、MySQL

 

12、Redis

 

13、Zookeeper

CAP原则,zookeeper在CAP中的取舍,消息的读写原理、选举机制、适用场景;

14、kafka

 

每日三省Java

标签:http   避免   阻塞队列   网络编程   动态   insert   href   网络   equals   

原文地址:https://www.cnblogs.com/morningao/p/10523586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!