摘要: 产生背景: 电脑中除了CPU和内存,其他都是IO设备,IO有性能瓶颈。 一开始有磁盘和内存,磁盘速度是ms毫秒,带宽是G/M级别,磁盘存储数据有IO缓存区,磁道,磁道有扇区,一个扇区分多少字节,查找数据是根据扇区查询的,扇区越小,查询的次数越多,现在系统一般都是4K扇区。 内存速度us微秒,带宽很大 阅读全文
posted @ 2018-01-25 23:25 ppjj 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 1、ArrayList插入删除一定慢么? 取决于你删除的元素离数组末端有多远,ArrayList拿来作为堆栈来用还是挺合适的,push和pop操作完全不涉及数据移动操作。 2、ArrayList的遍历和LinkedList遍历性能比较如何? 论遍历ArrayList要比LinkedList快得多,A 阅读全文
posted @ 2018-01-25 23:09 ppjj 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 本文介绍Redis的字典(是种Map)扩容与ConcurrentHashMap的扩容策略,并比较它们的优缺点。 (不讨论它们的实现细节) 首先Redis的字典采用的是一种‘’单线程渐进式rehash‘’,这里的单线程是指只有一个线程在扩容, 而在扩容的同时其他的线程可以并发的进行读写。 Redis系 阅读全文
posted @ 2018-01-25 23:04 ppjj 阅读(744) 评论(0) 推荐(0) 编辑
摘要: 1、HashMap的结构是怎样的? 二维结构,第一维是数组,第二维是链表 2、Get方法的流程是怎样的? 先调用Key的hashcode方法拿到对象的hash值,然后用hash值对第一维数组的长度进行取模,得到数组的下标。来看一下 hash 方法的源码(JDK 8 中的 HashMap): stat 阅读全文
posted @ 2018-01-25 22:59 ppjj 阅读(462) 评论(0) 推荐(0) 编辑
摘要: ① 高并发、任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换。 ② 并发不高、任务执行时间长的业务要区分开看: 假如是业务时间长集中在I/O操作上,也就是I/O密集型的任务,因为I/O操作并不占用CPU,所以不要让所有的CPU闲下来,可以加大线程池中的线程数目,让CP 阅读全文
posted @ 2018-01-25 22:27 ppjj 阅读(312) 评论(0) 推荐(0) 编辑