4 燃烧杯

尚未进行身份认证

暂无相关简介

等级
TA的排名 4w+

利用clustersh在集群中执行shell脚本

引言本文将介绍一个叫做clustersh的命令行小工具。如果你想要在许多刚刚装完linux系统的服务器(可能有上百台)上统一执行某个shell脚本,那么clustersh就非常适合你。“刚刚装完linux操作系统”仅仅是为强调clustersh不需要在集群上安装任何东西,并不是clustersh运行的必要条件。如果你的集群中包含很多不同种类的Linux发行版系统,clustersh还...

2019-04-08 09:27:25

图解java.util.concurrent源码 (八)LinkedBlockingQueue

引言上一篇文章中分析了ArrayBlockingQueue的源码,说好这一篇文章中要继续分析LinkedBlockingQueue的源码并且对比他们的使用场景,在看这篇文章之前建议先看一下上一篇文章。LinkedBlockingQueue数据结构LinkedBlockingQueue底层是一个链表结构,入队时直接将节点连接在链表的后面,出队时直接将头结点剔除即可,核心的变量如下:ca...

2018-12-31 16:01:05

图解java.util.concurrent源码 (七)ArrayBlockingQueue

引言在并发编程中经常需要进行生产者消费者之间的同步,此时我们最经常使用的同步工具就是有界阻塞队列(BlockingQueue)了,这篇文章和下一篇文章将分别分析最经常使用的两个有界队列,ArrayBlockingQueue和LinkedBlockingQueue的原理,然后对比他们的性能以及使用场景。BlockingQueue接口BlockingQueue接口定义了juc中阻塞队列的标准...

2018-12-30 20:48:16

图解java.util.concurrent源码 (六)CyclicBarrier (循环栅栏)

引言上一篇文章提到,CountDownLatch不支持重置计数,如果你有反复重置计数的需求的话,最好使用CyclicBarrier。CyclicBarrier的中文名叫做"循环栅栏",能够让n个线程都到达同步点之后再让他们开始运行,之后CyclicBarrier就会重新计数,这个过程可以反复进行,甚至还可以在到达同步点与重新运行之间插入一段代码(叫做barrierAction)。Demo...

2018-12-25 00:58:57

图解java.util.concurrent源码(五) CountDownLatch

引言今天分享一个比较简短一些的源码,那就是concurrent包中我们经常使用的CountDownLatch同步器,"latch"在英文中也是锁的意思,翻译成中文就是“倒数锁”,当你调用了这个类型对象中的await方法后,必须要等待这个锁倒数到0,才能继续运行。这个类的源码非常短,因为其实它就是对AQS共享模式的一个简单实现而已,如果你还不理解AQS的话,可以去看看我这个系列的第一篇文章和第...

2018-12-23 21:38:17

提升并发程序性能(tps/qps)的几个技巧总结

引言之前参加中间件比赛,以及一些日常开发的经验,在这里总结了一些提升程序性能(qps/tps)的技巧,持续更新。一些只适用与比赛而不适合实际工程的技巧我会用斜体 (only race) 标注1、减小锁的粒度案例:ConcurrentHashMap采用分段锁提升了并发时map的性能SkipList(跳表):跳表相比红黑树的优势就是,红黑树的一次插入删除操作经常会导致全局的调整,导致整棵树...

2018-12-16 15:06:48

图解java.util.concurrent源码(四) 可重入读写锁(ReentrantReadWriteLock)

引言上一篇文章所讲述的ReentrantLock和Semophore分别是AQS在独占模式和共享模式的经典实现。而这次要分享的ReentrantReadWriteLock则是混合了独占共享模式的经典实现。在读这篇文章之前,你最好已经理解了AQS和ReentrantLock,如果你还不理解的话,可以分别见本系列的第一篇文章和第三篇文章读锁和写锁从一个ReentrantReadWriteL...

2018-10-07 01:42:58

图解java.util.concurrent源码(三) Reentrantlock && Semaphore

引言Reentrantlock和Semaphore分别是AQS在独占模式和共享模式下经典的实现,在理解AQS的情况下看这两个类的代码会感到非常简单,如果还没理解AQS的话,建议先读我这个系列的第一篇文章复习AQS回忆一下AQS,AQS中维护了一个state同步状态,它的子类只需要实现以下几个方法,并在方法中修改判断state的值即可:独占模式的同步器(比如Reentrantlock)需...

2018-09-24 14:03:38

图解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

图解java.util.concurrent源码(一)AbstractQueuedSynchronizer(AQS)

引言这个系列文章打算用图解的方式记录了自己阅读concurrent包的中一些类的大概流程,加深印象。什么是AbstractQueuedSynchronizerconcurrent包下的很多类都有一个叫做Sync的内部类(比如ReentrantLock,ThreadPoolExecutor等),并且很多功能会委托给这个内部类,而这个内部类实现了AbstractQueuedSy...

2018-09-06 01:24:08

探索HyperLogLog算法(含Java实现)

引言HyperLogLog算法经常在数据库中被用来统计某一字段的Distinct Value(下文简称DV),比如Redis的HyperLogLog结构,出于好奇探索了一下这个算法的原理,无奈中文资料很少,只能直接去阅读论文以及一些英文资料,总结成此文。介绍HyperLogLog算法来源于论文《HyperLogLog the analysis of a near-optimal...

2018-08-22 17:15:27

用机器学习检测Android恶意代码

参考资料  本代码是参考乌云上的一篇文章实现的,链接如下:http://wooyun.jozxing.cc/static/drops/mobile-13428.html,实现了它关于特征提取的想法,如果有理解的不妥的地方,请大家帮忙指出。代码的github地址(其实这篇博文就是该仓库中的README):https://github.com/DQinYuan/AndroidMalwa...

2018-08-05 19:39:22

基于Vue-Echarts的地图渐热效果实现

简介基于Element-ui, Vue和Vue-echarts的地图渐热效果实现。效果展示地址:https://dqinyuan.github.io/mapvisual/index.html (因为是托管在github上的页面,国内访问速度可能会比较慢,请耐心等待)展示的内容是从1994年至2018年大陆金融业和房地产行业的发展情况(当地的相关企业越多则热度越大),数据全部是从猎...

2018-07-29 21:45:21

天池第四届中间件比赛第一题本地开发环境搭建笔记

引言参加了阿里天池第四届中间比赛,官方给的环境搭建文档含糊不清,无奈只能自己去读官方给的测评脚本的源码,然后在自己本地折腾一个差不多的环境,方便开发与debug,过程记录如下。我的本地环境为Win10,用的IDE是IntelliJ。这篇文章的目标是在本地将官方的agent-demo跑通并且可以在源码级别进行debug。本文的JVM启动参数都是从官方的测评脚本中摘录,鉴于本地内存资源可能有限...

2018-05-16 20:52:43

Docker与Dockerfile极简入门文档

引言参加阿里天池中间件大赛,需要使用docker部署测评环境,队里可能会有一些同学不是非常熟悉docker,自己折腾docker也算有一段时间了,所以写一个文档帮助大家快速入门docker。docker的安装docker的安装我就不多说,建议按照docker的官方安装文档一步一步来https://docs.docker.com/install/。需要注意的是,Docker的...

2018-05-15 10:45:25

Java随机打乱(shuffle)数组

引言偶尔会有随机打乱数组的需求,在jdk没有找到可以直接调用的函数,去网上也没有找到足够优雅的实现,所以决定自己写一个方便以后使用,用这个思路只要5行代码即可实现。思路从数组的最后一个位置(假设下标是n)开始向前扫描,然后随机生成一个0到n之间的随机数,假设该随机数是r1,然后将数组最后一个位置(下标n)与r1位置互换,之后开始扫面下一个数(下标为n-1),然后随机生成一个...

2018-05-13 23:02:07

在Windows上使用CLion练习openMP

引言最近课程设计需要用到openMP进行C++并行编程,我在windows上使用的IDE是CLion,CLion中配置的编译环境是MinGW3.2第一步:配置-fopenmp编译参数在CMakeLists.txt中添加如下配置:set(CMAKE_CXX_FLAGS "-fopenmp")这一步的作用是增加一个”-fopenmp”的编译选项,如果只进行第一步就尝...

2018-04-27 23:55:10

HashMap到底是插入链表头部还是尾部

引言同学去面试京东,被问了一个问题:我们都知道,HashMap是由Entry链表组成的数组,当HashMap要在链表里插入新的Entry时,到底是插入头部还是尾部呢?我通过查看自己电脑上的jdk1.8的源码,发现是插入尾部的,但是我同学告诉我面试官告诉他答案是插入头部,这篇文章就从源码角度一探究竟。先说结论在jdk1.8之前是插入头部的,在jdk1.8中是插入尾部的。...

2018-04-14 12:31:11

美团内推面试记录

找学姐内推的美团java后台开发岗位。刚投两天就收到了面试通知,相当猝不及防。本文主要是记录一些面试题目,面试题相关的知识在网上大多都查得到,我就写得稍微简略一点

2018-03-23 11:44:21

总结一类编程题--数组的n项和为M的存在性问题

最近春招,同学都在各种面试和各种刷题,面试完之后常常互相分享在面试过程中遇到的题目,在分享过程中,我发现有些题目之间有雷同之处,所以总结一下

2018-03-21 15:42:34

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!