摘要:
背景 JPA+MongoDB查询,给定一段时间范围查询分页结果,要求时间范围包含。 Page<Log> findByCtimeBetweenOrderByCtime( LocalDateTime startTime, LocalDateTime endTime, Pageable pageable) 阅读全文
摘要:
一、背景 最近在写一个私有化部署脚本的时候频繁的使用了ls和grep的组合,但是插件ShellCheck却一直在给我标黄,我这该死的洁癖终于在今天受不了了,这个使用了这么多年的好搭档怎么就那么不讨喜呢! 二、ShellCheck的规范 很明显,提示告诉我们不要使用ls|grep的搭配,建议我们使用一 阅读全文
摘要:
现状 想注释一行或一个方法,//注释总是生成在行首: 修改对比 要修改的配置在这: 我们可以在注释后添加一个空格,就变成了: 最后 设置完了看下注释效果: 这看起来才舒服。 阅读全文
摘要:
背景 今天在使用logstash收集日志存储到mongodb的安装过程遇到了个错误,记录下来,错误就是下面这样: 配置文件很简单,由于是测试环境,命令行传入日志输入由ruby过滤一下内容,转换一个time属性的字符串日期为ISODate。 input { stdin { } } filter { r 阅读全文
摘要:
一、Visual block 加注释 1、首先按键盘上的ESC进入命令行模式 2、再按Ctrl+V进入VISUAL BLOCK模式 3、利用上下左右键调整需要注释多少行以及行的宽度 4、再按Shift+i或s进入插入模式 5、输入代表注释的符号,比如# 6、再次按ESC键,这时就可完成多行注释 可能 阅读全文
摘要:
一、概念 JVM中,单例对象只有一个实例存在。 二、饿汉式实现 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Si 阅读全文
摘要:
@ 背景 相信大部分人在看AQS的时候都能看到注释上有这么一段话: The wait queue is a variant of a "CLH" (Craig, Landin, and Hagersten) lock queue. 为了更好的理解AQS中使用锁的思想,所以决定先好好理解CLH锁。 在 阅读全文
摘要:
预备知识 Java线程的生命周期 概览 本文探究一下Java最基础的机制之一:线程同步 我们先讨论一些并发相关的术语和方法论,接着会提供一个简单例子来处理并发问题,可以帮助我们更好的理解wait()和notify()方法。 线程同步 多线程环境下,每个线程都可能去修改相同资源,如果线程没有被较好的管 阅读全文
摘要:
概览 Java语言中,多线程是由线程的核心概念驱动的,而线程的生命周期会经历以下的不同状态。 Java java.lang.Thread类包含了一个静态类State,它定义了线程的状态,在任意一个时间点上,线程只可能是其中的一个状态,我们接下来逐一讨论每个状态。 NEW 新创建且还未被执行的线程 在 阅读全文
摘要:
预备知识 可以先看下我的另一篇文章对于Java中的位掩码BitMask的解释。 1、一个整数在jvm中占用了4个字节,共32bits 2、最高位的bit代表符号位,0为正数、1为负,剩余的31bits则代表数字部分 3、反码加1即为补码 4、对于负数而言,是以补码的形式存储在内存中的。以-7(int 阅读全文
摘要:
JDK源码的使用 最近在JDK源码中闲逛,无意中看到了java.lang.reflect.Modifier这个类,这个类很简单,都是些常量定义和判断方法,于是扒了扒代码实现的含义,我们就看个isPublic方法吧: /** * Return {@code true} if the integer a 阅读全文
摘要:
背景 最近在很多JDK源码中都看到了Treiber stack这个单词。 比如CompletableFuture中的: volatile Completion stack; // Top of Treiber stack of dependent actions 比如FutureTask中的: /* 阅读全文
摘要:
今天早上旁边同事喊我看一个Sonar检测出的问题: 当时看了好几眼没觉得这个有太大问题,于是又看了下Sonar建议: 这是说Math.abs()方法使用在数字上面可能返回最小值,觉得这个挺有意思的,于是Google一下: 在Oracle docs: Integer Operations中有这么一段话 阅读全文
摘要:
准备 实体 @Data @Table(name = "task_apply") @Entity public class TaskApply { @Id @GeneratedValue @Column(name = "apply_id") private Long applyId; private 阅读全文
摘要:
一、前言 在我们的平常的项目中多多少少都会使用到缓存,因为一些数据我们没有必要每次查询的时候都去查询到数据库。 特别是高 QPS 的系统,每次都去查询数据库,对于你的数据库来说将是灾难。 今天我们不牵涉多级缓存的知识,就把系统使用到的缓存方案,不管是一级还是多级的都统称为缓存,主要是为了讲述使用缓存 阅读全文
摘要:
一、提前阅读 讨论这个问题之前可以先看下缓存模式(Cache Aside、Read Through、Write Through、Write Behind)这篇文章。 二、先更新缓存,再更新数据库 1、考虑并发操作:线程A写,线程B读 1、线程A发起一个写操作,第一步delete cache 2、此时 阅读全文
摘要:
1、介绍 本文我们将比较一下CyclicBarrier和CountDownLatch并了解两者的相似与不同。 2、两者是什么 当谈到并发,将这两者概念化的去解释两者是做什么的,这其实是一件很有挑战的事情。 首先,这两者都是管理多线程的工具。 其次,两者都具备让一个或多个线程等待执行的功能。 2.1、 阅读全文
摘要:
问题示例 List<Integer>[] intListArr = new ArrayList<Integer>[8]; // 编译时报错 能看到这么看似没啥问题的一个简单语句甚至连编译都不会通过,为了能理解这里面的缘由,我们先得了解变型(Variant)的概念 变型(variant) 协变(cov 阅读全文
摘要:
一、最简单的登陆 就是简单登陆一下主机,默认端口22 ssh @ ➜ Charles ssh root@192.168.21.218 Last login: Tue Aug 4 09:46:12 2020 from 172.31.254.239 [root@hubin ~]# 二、登陆+执行命令 连 阅读全文