ConcurrentHashMap学习

概述 ConcurrentHashMap绝对是经典之作,里面的设计思想可以开拓我们的编程思路。想在高并发多线程环境使用一个Map的话,ConcurrentHashMap是首选,它不只性能高,还是线程安全的。 我们最常使用的HashMap是线程不安全的,可以参考HashMap多线程下发生死循环的原因 减小锁的粒度 HashTable虽然是线程安全的,但是所用的锁的粒度是...
阅读(606) 评论(2)

学习volatile关键字

volatile关键字要用好很难,使用它的场景也不多,但是在某些场景下,volatile变量是线程安全的,并且开销比synchronized关键字要低。 基础知识锁的两大特性”互斥” 与 “可见性”。 互斥是说,每次都得等先拿到锁的线程把锁释放了,其他线程才有资格访问共享资源,期间线程对共享资源时独占的。而可见性是指,一个线程修改了某个共享变量的值,其他线程能读取到最新的值,而不至于读取到脏数据。C...
阅读(527) 评论(2)

学习一下CAS

学习一下CAS...
阅读(622) 评论(0)

HashMap多线程下发生死循环的原因

概述 大神陈皓已经在疫苗:JAVA HASHMAP的死循环一文中详细描述了HashMap多线程下产生死循环的原因,我仔细研读了这篇大作,做了一些笔记,加上自己的一些理解 整理出一些信息,发出来与大家交流交流。 HashMap存储的数据结构 陈皓在Hash表数据结构这一节提到了HashMap的数据结构以及扩容问题,关于这一点我之前写过的 HashMap的put和get方法原理和HashMap扩...
阅读(1020) 评论(0)

HashMap扩容

`HashMap`的size大于等于(**容量*加载因子**)的时候,会触发扩容的操作,这个是个代价不小的操作。 为什么要扩容呢?`HashMap`默认的容量是16,随着元素不断添加到`HashMap`里,出现`hash`冲突的机率就更高,那每个桶对应的链表就会更长, 这样会影响查询的性能,因为每次都需要遍历链表,比较对象是否相等,一直到找到元素为止。 为了提升查询性能,只能扩容,减少`hash`冲突,让元素的`k...
阅读(827) 评论(0)

转载张龙老师一篇关于IntelliJ IDEA的介绍

IntelliJ IDEA...
阅读(314) 评论(0)

Dojo到底还有没有人用呢

哎。`DOJO`研究了一段时间了,但是问了周围的同事以及其他互联网公司的同事,都说没用`DOJO`。个人觉得如果是做后台应用的界面端的话,`DOJO`是个不错的选择,严格的面向对象,组件又多也很规范。但是目前大家宁愿选择jquery ui、easyui等等。搞不懂?? 搞得我都不想继续看`DOJO`了。...
阅读(587) 评论(1)

HashMap的put和get方法原理

概述JAVA中的数组,在添加或者删除元素的时候,都会复制一个新数组,比较耗内存。但是数组的遍历则是非常高效的。链表则是相反, 遍历慢(需要遍历数组,一直找到值相等的元素才算找到),而添加和删除元素代价低。有没有办法结合两者的特点,做到寻找元素快,插入元素或者删除元素代价低呢?答案是利用哈利表。HashMap put操作当使用HashMap的put方法的时候,有两个问题要解决:1、长度为16的数组中...
阅读(4052) 评论(3)

你去面试,需要准备什么知识点?

概述又是新的一年了,去年的绩效也出来了,总是几家欢乐几家愁。绩效好的机会多的老板信任的,在新的一年会更加有干劲。绩效不好的,老板不看好的,可能新的一年就会有离职的冲动。 如果你有离职的想法,那么还是需要花一些时间准备一下,毕竟现在外面好的互联网公司对程序员的要求还是蛮高的,需要你有各种能耐。下面这篇文章主要是介绍一下去好公司面试的时候,面试官可能会问到的一些知识点。后续会陆续的补充的。也欢迎网友补...
阅读(1461) 评论(24)

线程安全的CopyOnWriteArrayList介绍

证明CopyOnWriteArrayList是线程安全的先写一段代码证明CopyOnWriteArrayList确实是线程安全的。ReadThread.javaimport java.util.List;public class ReadThread implements Runnable { private List list; public ReadThread(...
阅读(6270) 评论(1)

Short类型的List contains(Byte.valueOf("1"))的问题

概述最近测试人员发现了一个bug,我找了半天,一直找不到bug的原因。后来debug代码的时候,才发现一个隐藏的bug。如下代码:private static List tempList = Arrays.asList(new Short [] {13,17,18,20});这个时候用如下代码判断某个数字是否在tempList中:if (tempList.contains(Byte.v...
阅读(433) 评论(0)

利用子查询找出某个属性存在A表而不存在B表的数据

概述假设有两张表,A表和B表A表: id name age 1 xxx 15 2 yyy 18 3 zzz 20 B表: id b_id age 1 1 15 2 2 18 其中B表的b_id字段引用了A表的id字段。现在有个查询需求: 给出已知的A表中的id,比如:id in (1,2,3),找出这些id在B表中没有...
阅读(991) 评论(5)

线程不安全的ArrayList

概述java.util.ArrayList不是线程安全的,当有多个线程并发读写ArrayList的时候,ArrayList会抛出如下异常java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819) at java.util....
阅读(581) 评论(0)

SQL计算timestamp的差值小技巧

概述有时候我们需要按照时间找出某些记录,比如说:算出离销售时间前1个小时的记录。 通常我们可以使用MYSQL的timestampdiff函数来做,但是这样没法使用到索引,如果数据量大的话,会造成慢查询。用代码计算出时间后再传给SQL我们可以利用JAVA代码,先把时间计算好,然后传给SQL语句,避免使用MYSQL的函数。public long xxxx(long sellTimeFrom){...
阅读(161) 评论(0)

照顾好应用的缓存-应付大流量

概述为了提升系统的响应速度,通常会系统中使用缓存,例如:中央缓存,本地缓存等。但是使用缓存有好有坏,坏处是,如果缓存数据是旧的,那么应用输出的数据便是错误的数据,可能造成严重的影响。本文介绍一些让缓存保持新鲜以及使用缓存的一些技巧。利用MQ实时刷新缓存一旦db数据发生变化,则可以发送一条mq消息,通知消费者,信息有变动,消费者感知到后,立刻调用刷新缓存的接口,把数据涮新到中央缓存里。这里有三个点要注...
阅读(991) 评论(0)
123条 共9页首页 上一页 1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:318791次
    • 积分:3484
    • 等级:
    • 排名:第9907名
    • 原创:118篇
    • 转载:5篇
    • 译文:0篇
    • 评论:163条
    博客专栏