Java相关
小妲己在王者峡谷
这个作者很懒,什么都没留下…
展开
-
Map与Bean的互相转换
实例类:package wsy.bean2map;import lombok.Getter;import lombok.Setter;import lombok.ToString;@Setter@Getter@ToStringpublic class Person { private String name; private int age; public Person() {} public Person(String name, int age)原创 2020-07-31 11:38:01 · 303 阅读 · 0 评论 -
HashMap实现原理
HashMap是平时开发经常用到的集合类,本文针对JDK1.7和1.8 HashMap源码来讲解其实现原理和区别。一、数据结构1、HashMap在1.7上的数据结构主要是用的:数组+链表,数组和链表节点的实现类是Entry类;2、HashMap在1.8里面主要是:数组+链表/红黑树,当链表长度大于8时则转化为红黑树;数组和链表节点的实现类是Node类;二、Hash值计算扰动函数目的...原创 2019-07-01 20:18:16 · 437 阅读 · 0 评论 -
ConcurrentHashMap实现原理
HashMap是线程不安全的,因此在并发问题上我们会想到Hashtable和SynchronizedMap,它们都是在方法上加Synchronized关键字来保证线程安全的,虽然能保证线程安全,但是锁的力度比较大,是对整个map同步,导致资源占用过多,并发度较低。下面将讲解一种锁力度更小的并发map—ConcurrentHashMap。一、数据结构上1、1.7采用的是由一个Segment(锁分...原创 2019-07-01 23:44:02 · 167 阅读 · 0 评论 -
HashMap、Hashtable、TreeMap、HashSet及ConcurrentHashMap的区别
基于JDK1.8分析HashMap:底层是数组+链表+红黑树实现,链表长度大于等于8时链表转换为红黑树,数组和链表结点的实现类是Node可以存储null键和null值,线程不安全初始size为16,扩容:newSize = 2*oldSize,size为2的n次幂插入后判断是否需要扩容,当Mao中的元素总数数组的超过75%触发扩容,以便减少链表长度(减少hash碰撞),元素分配更加均匀...原创 2019-07-02 11:30:56 · 157 阅读 · 0 评论 -
生产环境出现CPU占用高的分析思路和定位
1、先用top命令找出cpu占用高的进程PID2、ps -ef 或者jps进一步定位是哪个后台程序导致的ps -ef | grep PID | grep -v grep 或者 jps -l | grep PID3、定位具体的线程或代码ps -mp pid -o THREAD,tid,time-m — 显示所有线程-p — pid进程使用cpu的时间-o —该参数后是用户自定义格式...原创 2019-06-27 08:58:10 · 230 阅读 · 0 评论 -
redis实现分布式锁
redis实现分布式锁:public boolean tryLock(Jedis jedis, String keyLock, String requestId, String nx, String px, long expireTime){ try{ // set方法的nx和px参数保证加锁和设置超时时间的原子性 String result = jedis.s...原创 2019-07-17 17:20:50 · 82 阅读 · 0 评论 -
接口幂等性解决方案
幂等的概念:在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数。举几个例子:比如前端对同一表单数据的重复提交,后台应该只会产生一个结果比如我们发...转载 2019-09-30 17:38:27 · 467 阅读 · 0 评论