Maven命令更新子父项目的pom版本
Q:一个maven项目,有多个子module,在顶级父pom.xml里设置1.0.0-SHAPSHOT,在子pom.xml里都用了
父pom:
1234<groupId>com.fp</groupId><artifactId>test</artifactId><version>1.0.0.SNAPSHOT</version><packaging>pom</packaging>
各子pom:
123456<parent><artifactId>test</artifactId><groupId>com.fp</groupId><version>1.0.0-SHAPSHOT</version></parent><packaging>jar</packaging>
如果有10个子pom来这样定义父pom.一般修改了父Pom.手动去改子pom,那多累
A:
在父pom下 ...
Java并发(三)——Synchronized关键字和锁升级
一、Synchronized使用场景Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchronized关键字就是用于代码同步。什么情况下会数据不安全呢,要满足两个条件:一是数据共享(临界资源),二是多线程同时访问并改变该数据。
例如:
123456789101112131415161718192021222324252627public class AccountingSync implements Runnable{ //共享资源(临界资源) static int i=0; /** * synchronized 修饰实例方法 */ public synchronized void increase(){ i++; } @Override public void run() { for(int j=0;j<1000000;j++){ increase(); ...
Java并发(二)——CountDownLatch原理分析
使用示例CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在使用线程池的情况下提交任务的情况下,我们无法使用线程的join()方法,这就需要选择使用CountDowConLatch了。示例代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940import java.util.concurrent.CountDowConLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CountDownLatchTest { // 创建一个CountDownLath实例 private static CountDownLatch countDownLatch = new CountDownLatch(2); public static void main(Strin ...
Java并发(一)——AQS原理分析
AQS 简单介绍AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。
AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。
AQS原理AQS原理概览AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。
CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例, ...
Java实现滑动时间窗口限流
直接上代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455package demo;import java.time.LocalDateTime;import java.util.LinkedList;import java.util.Random;/** * @author weylan */public class SlideWindow { static LinkedList<long> timeWindow = new LinkedList<>(); /** * 滑动时间窗口限流算法 * 在指定时间窗口,指定限制次数内,是否允许通过 * * @param windowSize 时间窗口大小,单位 秒 * @param count 允许通过的次数 * @return 是否允许通过 */ public stati ...
QPS和并发数,究竟是何种关系?
一个开放性问题:
假设超市每分钟有10个人走出来,请估算超市里面有多少人?
是不是感觉手足无措呢?嗯,可能如此。其实,这个问题没有标准答案,关键还是考查思路。
我们先看一个有趣的定律,即Little’s Law,如下:
在一个稳定的系统中,设长时间观察到的平均顾客数量为L,长时间观察到的有效到达速率为λ,平均每个顾客在系统中花费的时间是W,则有如下关系式:
L = λW
Little’s Law的理解假设有一水管,横截面积为2平方米,水速为5米/秒,即水的流量速度是10立方米/秒,很显然:
在长度100米的水管内,水量为200立方米,每滴水从流入到流出,耗时20秒,而水的流量速度是10立方米/秒。
也就是说,在这段水管中:
水量= 耗时 * 流量速度
这就是Little’s Law. 虽然很早就意识到了这一关系式,但毕业后才第一次听说Little’s Law.
Little’s Law的应用Little’s Law模型很通用,因此,在很多场景中都能得到应用,比如工业界和计算机界,都会有意或无意用到该定律。
先看一个最好 ...
Windows修改wsl2存储路径
1.关闭WSL
1wsl --shutdown
2.查看系统信息
1wsl -l --all -v
显示如下:
1234 NAME STATE VERSION* docker-desktop Stopped 2 Ubuntu Stopped 2 docker-desktop-data Stopped 2
3.导出系统,示例如下:
1wsl --export Ubuntu D:\ubuntu.tar
4.删除系统,示例如下:
1wsl --unregister Ubuntu
出现“正在注销…”即成功
5.导入系统,指定新的位置 ,示例如下:
1wsl --import Ubuntu D:\Ubuntu D:\ubuntu.tar
6.ubuntu.tar文件不需要的话可以删掉了
7.问题解决!
WSL2 使用 Windows 代理上网
WSL 2 配置代理在 Windows 上设置好代理,连上了谷歌开开心心,但是 WSL 2 不能共享 Windows 的代理策略,如果在 WSL 上再装一个代理软件那可太麻烦了,所以得想想办法。
其实办法还挺简单的,可能有的同学不知道,在一个局域网下如果有一台机器配置好了代理,那么这个代理是可以共享给这个局域网下的其他设备的,比较类似软路由哈!
具体方法如下:
Windows 端这里以 Clash 为例,打开 Allow LAN 选项,如下图所示。如果你使用其他软件,那可能是叫「网关模式」、「允许来自局域网的链接」或者其它的什么,都是一个东西,打开就好了,注意打开这个选项后你的电脑就可以代理整个局域网内的机器了,虽然其他的机器还需要额外的配置,但也还是注意安全。
对于 Clash 来说,这个选项是一次性的,下次开机它就关了,不过可以在配置文件里改,通常文件的开头就是。如下图,改成 true 就行。
开启这个选项后,仔细找找,你会找到一个 IP 地址和一个端口号,IP 其实就是本机 IP 啦,这两个数一会有用。
Clash 这个端口 http 和 socks 通用
注意如果后文配置 ...
k3d学习笔记
1. 安装k3d1brew install k3d
2. 启动docker3. 创建集群1k3d cluster create test-cluster
4. 安装仪表盘4.1 部署仪表盘1kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
4.2 仪表板 RBAC 配置
重要提示:在本指南中创建的 admin-user 将在仪表板中拥有管理权限。
创建以下资源清单文件:
dashboard.admin-user.yml
12345apiVersion: v1kind: ServiceAccountmetadata: name: admin-user namespace: kubernetes-dashboard
dashboard.admin-user-role.yml
123456789101112apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRol ...
细说Mmongo ES 数据过期机制
数据过期在redis上非常容易实现,mongo中可使用TTL索引实现类似的功能。
Mongo数据过期TTL索引TTL是mongo 中的一种特殊的单字段索引,可以支持文档在一定时间之后自动删除,字段类型必须是 ISODate类型或者包含有ISODate类型的数组,创建TTL索引和创建普通索引的方法一样,只是多加了一个属性而已:
12db.collection(集合).createIndex({create_time(ISODate类型字段):1(正序),{expireAfterSeconds:过期时间,单位秒},{backgroud(后台执行):true}})
TTL索引包含以下特点:
_id字段不支持TTL索引
如果索引字段是数组,并且字段中多个日期值,则mongo使用数组中最早的日期值来计算到期阈值
如果文档中的索引字段不是ISODate 类型或者不包含ISODate 类型的数组,则文档不会过期
如果某个字段已经存在非TTL索引,则无法在同一字段上创建TTL索引
另外一点,如果想实现如同redis一样动态设置过期时间 ...