![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
聊聊技术
文章平均质量分 87
技乐书香
这个作者很懒,什么都没留下…
展开
-
Redis 底层数据结构大揭秘:五张图看透Redis数据结构
Redis的数据结构从用户层面看就是普通的字典,列表。但是其实在不同的情况下,Redis 会使用不同的底层数据结构进行优化,本文通过五张流程图对其进行了总结。原创 2023-03-03 23:33:32 · 170 阅读 · 0 评论 -
TiDB的分布式事务原理探究
TiDB 分布式事务原理探究原创 2023-03-02 22:45:33 · 469 阅读 · 0 评论 -
Redis网络层源码阅读
Redis 离用户最近的就是网络层了,网络层不负责命令的具体执行,只负责网络数据的收发,虽然它不负责具体的功能实现,却是Redis单线程,高性能的核心。原创 2023-02-27 23:42:22 · 157 阅读 · 0 评论 -
使用CLion调试Redis源码的超详细步骤
因为我本人主要是写Java的,有强烈的IDE依赖症,不喜欢使用文本编辑器或者命令行这样的工具,所以选择使用CLion搭建一个IDE环境来辅助 Redis 源码阅读。原创 2023-02-15 23:16:37 · 944 阅读 · 0 评论 -
你真的需要防腐层吗?DDD 系统间的7种关系梳理与实践
当提到系统间交互的时候,人们都会想到大名鼎鼎的防腐层,用来防止其他系统的模型变更对本系统造成影响。但是在实践这个模式的过程中,我们常常会遇到问题。此时我们也应该考虑下其他的系统交互方式。原创 2023-02-14 23:52:11 · 811 阅读 · 0 评论 -
五分钟看懂Java字节码:极简手册
字节码新手很容易被厚厚的 JVM 书籍劝退,即使我看过相关书籍,工作真正用到时也全忘了,还得现学。本文将真正地删繁就简,总结核心知识,让读者快速入门,学得会,用得上。原创 2023-02-11 15:19:57 · 810 阅读 · 1 评论 -
敢问“度”在何方?:谈谈软件设计中的“适度原则”
中国人讲究 “中庸”,“过犹不及”,凡事都要把握一个 “度”。而软件工程正是一个没有银弹,处处要把握度的地方。原创 2023-02-05 12:19:14 · 148 阅读 · 0 评论 -
利用clustersh在集群中执行shell脚本
引言本文将介绍一个叫做clustersh的命令行小工具。如果你想要在许多刚刚装完linux系统的服务器(可能有上百台)上统一执行某个shell脚本,那么clustersh就非常适合你。“刚刚装完linux操作系统”仅仅是为强调clustersh不需要在集群上安装任何东西,并不是clustersh运行的必要条件。如果你的集群中包含很多不同种类的Linux发行版系统,clustersh还...原创 2019-04-08 09:27:25 · 910 阅读 · 0 评论 -
图解java.util.concurrent源码 (八)LinkedBlockingQueue
引言上一篇文章中分析了ArrayBlockingQueue的源码,说好这一篇文章中要继续分析LinkedBlockingQueue的源码并且对比他们的使用场景,在看这篇文章之前建议先看一下上一篇文章。LinkedBlockingQueue数据结构LinkedBlockingQueue底层是一个链表结构,入队时直接将节点连接在链表的后面,出队时直接将头结点剔除即可,核心的变量如下:ca...原创 2018-12-31 16:01:05 · 340 阅读 · 0 评论 -
图解java.util.concurrent源码 (七)ArrayBlockingQueue
引言在并发编程中经常需要进行生产者消费者之间的同步,此时我们最经常使用的同步工具就是有界阻塞队列(BlockingQueue)了,这篇文章和下一篇文章将分别分析最经常使用的两个有界队列,ArrayBlockingQueue和LinkedBlockingQueue的原理,然后对比他们的性能以及使用场景。BlockingQueue接口BlockingQueue接口定义了juc中阻塞队列的标准...原创 2018-12-30 20:48:16 · 246 阅读 · 0 评论 -
图解java.util.concurrent源码 (六)CyclicBarrier (循环栅栏)
引言上一篇文章提到,CountDownLatch不支持重置计数,如果你有反复重置计数的需求的话,最好使用CyclicBarrier。CyclicBarrier的中文名叫做"循环栅栏",能够让n个线程都到达同步点之后再让他们开始运行,之后CyclicBarrier就会重新计数,这个过程可以反复进行,甚至还可以在到达同步点与重新运行之间插入一段代码(叫做barrierAction)。Demo...原创 2018-12-25 00:58:57 · 328 阅读 · 2 评论 -
提升并发程序性能(tps/qps)的几个技巧总结
引言之前参加中间件比赛,以及一些日常开发的经验,在这里总结了一些提升程序性能(qps/tps)的技巧,持续更新。一些只适用与比赛而不适合实际工程的技巧我会用斜体 (only race) 标注1、减小锁的粒度案例:ConcurrentHashMap采用分段锁提升了并发时map的性能SkipList(跳表):跳表相比红黑树的优势就是,红黑树的一次插入删除操作经常会导致全局的调整,导致整棵树...原创 2018-12-16 15:06:48 · 4928 阅读 · 0 评论 -
Java随机打乱(shuffle)数组
引言偶尔会有随机打乱数组的需求,在jdk没有找到可以直接调用的函数,去网上也没有找到足够优雅的实现,所以决定自己写一个方便以后使用,用这个思路只要5行代码即可实现。思路从数组的最后一个位置(假设下标是n)开始向前扫描,然后随机生成一个0到n之间的随机数,假设该随机数是r1,然后将数组最后一个位置(下标n)与r1位置互换,之后开始扫面下一个数(下标为n-1),然后随机生成一个...原创 2018-05-13 23:02:07 · 28927 阅读 · 4 评论 -
基于Vue-Echarts的地图渐热效果实现
简介基于Element-ui, Vue和Vue-echarts的地图渐热效果实现。效果展示地址:https://dqinyuan.github.io/mapvisual/index.html (因为是托管在github上的页面,国内访问速度可能会比较慢,请耐心等待)展示的内容是从1994年至2018年大陆金融业和房地产行业的发展情况(当地的相关企业越多则热度越大),数据全部是从猎...原创 2018-07-29 21:45:21 · 2939 阅读 · 0 评论 -
用机器学习检测Android恶意代码
参考资料 本代码是参考乌云上的一篇文章实现的,链接如下:http://wooyun.jozxing.cc/static/drops/mobile-13428.html ,实现了它关于特征提取的想法,如果有理解的不妥的地方,请大家帮忙指出。 代码的github地址(其实这篇博文就是该仓库中的README): https://github.com/DQinYuan/AndroidMalwa...原创 2018-08-05 19:39:22 · 5537 阅读 · 26 评论 -
探索HyperLogLog算法(含Java实现)
引言HyperLogLog算法经常在数据库中被用来统计某一字段的Distinct Value(下文简称DV),比如Redis的HyperLogLog结构,出于好奇探索了一下这个算法的原理,无奈中文资料很少,只能直接去阅读论文以及一些英文资料,总结成此文。介绍HyperLogLog算法来源于论文《HyperLogLog the analysis of a near-optimal...原创 2018-08-22 17:15:27 · 2203 阅读 · 2 评论 -
图解java.util.concurrent源码(二)ThreadPoolExecutor
JDK版本我这里依据的JDK版本如下:java version "1.8.0_73"Java(TM) SE Runtime Environment (build 1.8.0_73-b02)Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)如果你的版本和我不同,看到的源码可能有细微的不同。基础...原创 2018-09-08 21:49:23 · 284 阅读 · 0 评论 -
图解java.util.concurrent源码(一)AbstractQueuedSynchronizer(AQS)
引言这个系列文章打算用图解的方式记录了自己阅读concurrent包的中一些类的大概流程,加深印象。什么是AbstractQueuedSynchronizerconcurrent包下的很多类都有一个叫做Sync的内部类(比如ReentrantLock,ThreadPoolExecutor等),并且很多功能会委托给这个内部类,而这个内部类实现了AbstractQueuedSy...原创 2018-09-06 01:24:08 · 768 阅读 · 0 评论 -
图解java.util.concurrent源码(三) Reentrantlock && Semaphore
引言Reentrantlock和Semaphore分别是AQS在独占模式和共享模式下经典的实现,在理解AQS的情况下看这两个类的代码会感到非常简单,如果还没理解AQS的话,建议先读我这个系列的第一篇文章复习AQS回忆一下AQS,AQS中维护了一个state同步状态,它的子类只需要实现以下几个方法,并在方法中修改判断state的值即可:独占模式的同步器(比如Reentrantlock)需...原创 2018-09-24 14:03:38 · 368 阅读 · 0 评论 -
图解java.util.concurrent源码(四) 可重入读写锁(ReentrantReadWriteLock)
引言上一篇文章所讲述的ReentrantLock和Semophore分别是AQS在独占模式和共享模式的经典实现。而这次要分享的ReentrantReadWriteLock则是混合了独占共享模式的经典实现。在读这篇文章之前,你最好已经理解了AQS和ReentrantLock,如果你还不理解的话,可以分别见本系列的第一篇文章和第三篇文章读锁和写锁从一个ReentrantReadWriteL...原创 2018-10-07 01:42:58 · 241 阅读 · 0 评论 -
HashMap到底是插入链表头部还是尾部
引言同学去面试京东,被问了一个问题:我们都知道,HashMap是由Entry链表组成的数组,当HashMap要在链表里插入新的Entry时,到底是插入头部还是尾部呢?我通过查看自己电脑上的jdk1.8的源码,发现是插入尾部的,但是我同学告诉我面试官告诉他答案是插入头部,这篇文章就从源码角度一探究竟。先说结论在jdk1.8之前是插入头部的,在jdk1.8中是插入尾部的。...原创 2018-04-14 12:31:11 · 27593 阅读 · 17 评论