沉默的背影 X-Pacific

keep learning

摘要: HashMap中哈希算法的关键代码 HashMap的细节我们不谈,只看这个哈希算法的细节(h = key.hashCode()) ^ (h >>> 16) ^按位异或运算,只要位不同结果为1,不然结果为0;>>> 无符号右移:右边补0 为什么要无符号右移16位后做异或运算 根据上面的说明我们做一个简 阅读全文
posted @ 2019-07-18 12:02 乂墨EMO 阅读(6327) 评论(7) 推荐(3) 编辑
摘要: 又拿出这道String str1 = new String("abc");创建几个对象的面试题梳理了一下常量池与方法区的关系,希望能把这两者的关系通过这道面试题说明白 方法区是什么 简单说方法区用于存储jvm加载的类的信息、常量、静态变量、编译后的代码 方法区、永久代与元空间的关系 下文都以HotS 阅读全文
posted @ 2019-06-25 15:46 乂墨EMO 阅读(1084) 评论(0) 推荐(0) 编辑
摘要: 后面考虑通过netty做一个真正意义的简约版RPC框架,今天先尝试通过正常调用逻辑调用netty构建的nio服务端并同步获得返回信息。为后面做铺垫 服务端实现 我们先完成服务端的逻辑,逻辑很简单,把客户端请求的内容加上服务器时间戳一并返回 服务端用了LineBasedFrameDecoder,以防止 阅读全文
posted @ 2019-06-20 17:17 乂墨EMO 阅读(2167) 评论(0) 推荐(0) 编辑
摘要: 之前在工作中写过一些Socket客户端与服务端的代码,但是当时没有时间仔细研究,只能不报错先过的态度,对其细节了解不深,写的代码有各种问题也浑然不知,只是业务量级以及对接方对接代码没有出现出格的情况所以问题不得暴露。 首先通过单线程Socket做服务端是一种BIO的做法,这种做法会导致服务端只能同时 阅读全文
posted @ 2019-06-04 11:56 乂墨EMO 阅读(735) 评论(0) 推荐(0) 编辑
摘要: keepAliveTime含义 看了很多文章觉得都不能把keepAliveTime的意思说的很明白,希望通过自己的理解把keepAliveTime说的明确一些 先引用一句我觉得相对说的比较明白的含义:当线程空闲时间达到keepAliveTime,该线程会退出,有两个疑问:1、线程为什么会空闲 2、线 阅读全文
posted @ 2019-05-29 11:24 乂墨EMO 阅读(21657) 评论(3) 推荐(4) 编辑
摘要: CopyOnWriteArrayList主要可以解决的问题是并发遍历读取无锁(通过Iterator) 对比CopyOnWriteArrayList和ArrayList 假如我们频繁的读取一个可能会变化的清单(数组),你会怎么做? 一个全局的ArrayList(数组),修改时加锁,读取时加锁 读取时为 阅读全文
posted @ 2019-05-27 16:11 乂墨EMO 阅读(772) 评论(0) 推荐(0) 编辑
摘要: 先上一张图看一下ThreadLocal的内部结构,每个Thread对象内部都维护了一个ThreadLocal.ThreadLocalMap 我们在上图看到的就是三个Thread对象内部格子的ThreadLocalMap 这里要说的不是ThreadLocal,是ThreadLocal为什么要用Weak 阅读全文
posted @ 2019-05-21 16:56 乂墨EMO 阅读(3131) 评论(2) 推荐(1) 编辑
摘要: 可以通过join的特性控制方法的执行时间 join :当我们调用某个线程的这个方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行。 注意是调用thread.join();的线程挂起(不是thread挂起),等着thread调用完毕后当前线程才继续,看一下源码 通过join的 阅读全文
posted @ 2019-05-19 12:08 乂墨EMO 阅读(697) 评论(0) 推荐(0) 编辑
摘要: ReentrantReadWriteLock的规则是: 多线程情况下:读-写互斥、写-读互斥、写-写互斥、读-读共享 验证“读-写互斥、写-读互斥、写-写互斥、读-读共享” ReentrantReadWriteLock使用场景 对于数据比较敏感的场景, 读锁:在读取数据时是不能出现多次读取不一致的情 阅读全文
posted @ 2019-05-16 15:53 乂墨EMO 阅读(2898) 评论(0) 推荐(1) 编辑
摘要: 常见的的序列化反序列方式的效率: protoBuf(PB) > fastjson > jackson > hessian > xstream > java 数据来自于:https://github.com/eishay/jvm-serializers/wiki 所以我选择了java方式、jackso 阅读全文
posted @ 2019-05-15 17:38 乂墨EMO 阅读(6650) 评论(0) 推荐(0) 编辑
摘要: 最早读《深入理解java虚拟机》对于volatile部分就没有读明白,最近重新拿来研究并记录一些理解 理解volatile前需要把以下这些概念或内容理解: 1、JMM内存模型 2、并发编程的三问题:原子性、一致性、有序性 3、先行发生原则 然后我们结合上面的几个知识点来看volatile如何使用 J 阅读全文
posted @ 2019-05-11 14:19 乂墨EMO 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 多线程运行程序的目的一般是提高程序运行效率并且能够提高硬件的利用率比如多核CPU,但是如果我们只有单核CPU并发运行程序会怎样呢? 我以两个环境作为对比: 环境A(我本机8c) 环境B(我的云服务器1c) 分别运行并发、串行需要CPU参与的代码 这里需要注意,如果我运行Thread.sleep这种代 阅读全文
posted @ 2019-05-06 11:53 乂墨EMO 阅读(1095) 评论(0) 推荐(0) 编辑
摘要: 上一篇文章通过redis实现的抢红包通过测试发现有严重的阻塞的问题,抢到红包的用户很快就能得到反馈,不能抢到红包的用户很久(10秒以上)都无法获得抢红包结果,起主要原因是: 1、用了分布式锁,导致所有的操作只能顺序排队,而后面没有抢到红包的需要等待前面抢红包的同学完事后他才能去看自己是否已经抢到红包 阅读全文
posted @ 2019-05-05 16:28 乂墨EMO 阅读(1716) 评论(1) 推荐(0) 编辑
摘要: 建议结合下一篇一起看 下一篇 数据结构+基础设施 数据结构 这里通过spring-data-jpa+mysql实现DB部分的处理,其中有lombok的参与 REDIS数据结构 REDIS对于一个红包存储3部分信息: 1、KEY:红包ID+_TAL_PACKET VALUE:红包剩余数量 2、KEY: 阅读全文
posted @ 2019-05-01 10:42 乂墨EMO 阅读(1718) 评论(0) 推荐(0) 编辑
摘要: 首先,一致性哈希是对经典哈希的一个改造 经典的哈希方法使用哈希函数来生成伪随机数,然后除以内存空间的大小,将随机标识符转变成可用空间内的一个位置 location = hash(key)mod size 在经典哈希方法中,我们总是假设:内存位置的数量是已知的,而且这个数永远不变 但是这种哈希处理模型 阅读全文
posted @ 2019-04-28 21:30 乂墨EMO 阅读(1110) 评论(0) 推荐(0) 编辑