自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

青烟绕指柔的博客

欢迎来到 AR 的博客!

  • 博客(1402)
  • 收藏
  • 关注

原创 cgroups 实践

在 /sys/fs/cgroup/cpu 下面创建自己的 cgroups 测试目录,该目录会自动创建一些文件,对进程或者线程的控制都可以通过修改这些文件内容自动完成。tasks:被 cgroup 管理的进程cpu.cfs_period_us:时间周期cpu.cfs_quota_us:在时间周期内能使用的 CPU 时间cpu.shares:设置 cgroup 的相对值,如果有多个 cgroup 根据此值平均分配。

2023-04-19 22:58:26 610 1

原创 Kubernetes Informer

【代码】Kubernetes Informer。

2023-03-27 22:05:06 188

原创 kubebuilder实践

初始化 kubebuilder 项目创建 operator api在集群中创建出 CRD 和 CR自定义 CRD 资源生成 CRD yaml 和填写 CR生成 CRD :填写 CR:

2023-02-01 23:19:28 242

原创 Pod跨AZ高可用

在很多情况下,如果不对 Pod 进行限制,那么可能存在一个节点多个同一个 Deployment 的所有 Pod,那么在这种情况下,如果机器宕机了,整个 Deployment 可能就不存在可用的 Pod,导致整个服务挂掉。同理,如果 AZ 故障(地震、火灾等)了,一个 Deployment 的所有 Pod 都在同一个 AZ当中,也是会产生服务不可用的情况,所以我们在大多数情况下,都需要将 Pod 跨 AZ 以实现服务的高可用。Pod 跨 AZ 使用 Kubernetes 中的反亲和性就可以完成。

2022-10-24 23:58:41 635

原创 Ansible-Playbook使用Python脚本

在某些情况下,我们可能需要在不同类型的机器上面做不同的事情,但是这个事情又有很多逻辑,使用 shell 脚本不易完成,所以我们需要使用 python 完成逻辑的执行。使用的时候可以将 python 的执行结果注册到 ansible 的变量当中,执行的时候可以传递 ansible-playbook 的参数。使用的时候根据 ansible register 的结果使用即可。

2022-10-04 23:26:17 1079 1

原创 docker 跨平台 build

就可以跨平台了,因为我们是 build 一个 golang 镜像,golang 也需要跨平台,所以编译的时候需要设置。因为 mac m1 是 arm64 ,Linux 是 amd64,所以需要跨平台 build。在 docker build 的时候使用。

2022-08-24 01:17:05 710

原创 Influxdb Docker安装和常见语法

influxdb 安装如果使用官方的docker镜像需要自己配置很多东西,所以我们使用非官方的镜像: tutum/influxdb然后就是使用docker run一个容器,这个不需要我们配置各种环境变量,使用默认的即可。如果需要挂载 volume 可以自己设置。docker run -d -p 8086:8086 --name influxdb-0 tutum/influxdb然后我们使用 exec 命令进入到容器中docker exec -it influxdb-0 bin/bash接下来

2022-04-27 20:15:57 2418

原创 Docker配置Kafka集群

使用docker-compose创建kafka集群因为 kafka 需要用到 zookeeper(3.0之后就可以使用 kraft 而不用 zookeeper 了),并且还要创建多个 kafka 容器,这里为了方便使用 docker-compose 去创建。version: '3.8'services: zookeeper: container_name: zk-0 # 容器名称 image: wurstmeister/zookeeper # 镜像 restart: alw

2022-02-18 16:35:31 2469 2

原创 Docker配置Consul集群做服务发现

在Consul中,分为Server和Client两种节点,Server节点保存数据,Client节点负责健康检查以及转发数据到Server。这里我们配置一个3个Server节点和1个Client节点的Consul集群。这里我们如果为了数据的持久化、方便配置文件的修改可以选择volume挂载。这里只是做测试就不挂载文件了。创建集群docker run -d --name=s1 -p 8500:8500 consul agent --server=true --bootstrap-expect=3 --

2022-01-29 18:20:30 2173 1

原创 Docker配置Redis Cluster集群模式

Cluster集群细节可见官方文档:官方文档因为docker里面的redis是不自带redis.conf文件的,所以我们需要自己使用volume的方式加进去。然后为了数据的持久化,所以我们数据也要使用volume。Cluster最少需要6个节点,也就是三主三从,所以我们直接定义6个节点即可。一、创建volume以及编写redis.conf文件可以使用如下shell脚本:for ((port=1;port<=6;port++)); \do \mkdir -p ~/my-docker/r

2022-01-25 18:31:39 1185 2

原创 Golang JWT双Token策略

为什么使用JWT?因为在只需要存前端,后端无需存储。为什么使用双Token?因为Token只能定时失效,所以时间不能太长,为了用户体验以及考虑服务器压力,所以使用双Token,用一个refreshToken来做刷新,只要未失效,就可以返回新的双Token。例子:package mainimport ( "errors" "fmt" "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" "strings" "time")

2022-01-18 14:49:54 1392 1

原创 Junior Mathematician

题目链接:Junior Mathematician不难想到可以数位dp去做。但是直接令状态为前 i 位,当前数位和为 j ,数字值为 k ,f(x)的值为 l 的个数复杂度过高。我们可以发现数字值和 f(x)的值可以一起计算,然后减少一维状态即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace

2021-11-30 22:06:17 200

原创 [KSN2021] Binary Land

题目链接:[KSN2021] Binary Land我们可以发现,如果一个数字最高位之后有一个0,那么是可以连向某个对应位置最高位为1的数字。然后这个不难想到可以对每一个二进制位建立虚点。我们发现如果这个虚点有作用,那么一定是某个数字最高位是这个,并且某个数字最高位之后某个0是这个。然后并查集维护连通性即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define

2021-11-29 16:35:11 745

原创 小 A 的卡牌游戏

题目链接:小 A 的卡牌游戏考虑 “2pick” 问题,可以贪心,假设全部选a,然后按照 b - a 的差值,从大到小来选择剩下的。同理,现在变成了 “3pick” 问题,所以我们可以控制c的选或者不选,然后附带一个有关c选择个数的 dp 即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace st

2021-11-15 17:06:41 3387

原创 廊桥分配

题目链接:廊桥分配显然我们只需要对每一个飞机计算出降落在廊桥需要的廊桥个数。然后对于前后缀max进行枚举计算即可。具体的计算,其实我们就是去假设每个飞机来的时候会停在编号最小的廊桥,那么我们也就是停在廊桥的时候,通过编号计算出个数了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;

2021-10-27 15:16:51 798

原创 制造游戏币

题目链接:制造游戏币这个其实就是有多条链的关系。所以我们肯定是提前先把物品拿到合法:也就是对于一条链来说,先拿 0 1 2 3 4 …个。然后每次就相当于可以拿一个后缀的所有物品。然后背包dp即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e5+10

2021-10-24 20:33:27 1855

转载 NoSQL总结

NoSQL历史:随着用户内容的增长,所生成、处理、分析和归档的数据的规模快速增大,类型也快速增多。此外,一些新数据源也在生成大量数据,比如传感器、全球定位系统(GPS)、自动追踪器和监控系统。这些大数据集通常被称为大数据。数据不仅仅快速增长,而且半结构化和稀疏的趋势也很明显。这样一来,预定义好数据库的组织和结构,和利用关系型引用的传统数据管理技术就受到了挑战。在探索海量数据和半结构化数据相关问题的过程中,诞生了一系列新型数据库产品,其中包括列族数据库(column-oriented data store)

2021-09-01 14:24:51 939

原创 布隆过滤器和hyperloglog

1.布隆过滤器:对每个存在的值,映射到一张哈希表中,可以设置多个哈希方法,然后我们对得到的多个值都存到哈希表中,那么对于一个需要判断的值,我们按照相同的哈希算法,只有得到的每个哈希值在哈希表中,才是有可能出现的。只要有一个不存在,就可以过滤掉。我们可以增加哈希方法的个数,以及哈希表的大小来增加准确性,但是我们会损失时间和空间的开销。2.hyperloglog重点:利用抛硬币概率的思想,假设我们抛硬币抛到正面就结束,第四次结束的抛硬币轮数为 x ,那么我们期望抛硬币的次数为: x = 2 ^ 4利用

2021-07-27 11:09:14 553 1

原创 JUC学习二

Semaphore代码实践:package com.company;import java.util.*;import java.util.concurrent.*;public class Main { public static void main(String[] args) { Semaphore semaphore = new Semaphore(5); for (int i = 1; i <= 10; i++) {

2021-07-13 21:24:10 206 1

原创 JUC学习一

线程之间通信问题:synchronized使用wait和notify等待和唤醒其他线程:代码实践:package com.company;import java.util.*;import java.util.concurrent.*;import java.util.concurrent.locks.Lock;public class Main { public static void main(String[] args) { Opt opt = new Op

2021-07-12 20:24:34 145 1

原创 qko的爱情

题目链接:qko的爱情显然我们只需要没有人的点考虑。对于没有人的点,我们肯定是要使得整个子树向上移动,其实可以看出深度最大的点移动到这里。然后就可以用线段树维护区间最大的深度然后计算答案。我们要注意,计算的时候应该先递归子树,然后对当前没有人的点计算答案,因为对于两颗不同的子树,移动之后最大深度是会发生变化的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#de

2021-07-05 14:46:57 208

原创 文文的摄影布置

题目链接:文文的摄影布置维护左边的最大 A[i] - B[j] ,后右边最大的 A[k] - B[j] ,然后线段树区间合并的时候利用这个和某个区间的max更新答案即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=5e5+10,inf=5e8;int n,

2021-07-04 23:28:57 159

原创 City Brain

题目链接:City Brain显然两条路径之间,相交的部分一定是一段连续的路径。所以我们可以枚举连续的路径,然后剩下4段不连续的路径。我们可以预处理两点之间的最短路,然后算出分别的和,然后三分即可。但是复杂度是 n * n * log 的。但是我们可以发现,对于枚举连续的相同长度的路径我们只需要知道4段不连续路径的最小值,然后复杂度就变成 n * n + n * log 了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#in

2021-07-04 13:16:33 345

原创 GT考试

题目链接:GT考试设 dp[i][j] 为第一个串到位置 i ,第二个串到位置 j 的方案数。然后:dp[i][j] = dp[i][k] * g[k][j] g数组 g[i][j] 表示,从i位置到j的方案数。然后这个可以ac自动机或者kmp预处理,然后做一个矩阵快速幂即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long lo

2021-07-04 09:19:03 412

原创 TRESNJA

题目链接:TRESNJA每次数位dp的时候,维护总和以及总个数。然后对每一位枚举当前要选某个数字,然后数字选择的个数即可算出增加的贡献。为了避免重复,当前选择的数字一定要和之前不同。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=20;int a[N],l,r

2021-07-02 23:01:19 86

原创 Commuter Pass

题目链接:Commuter Pass显然我们一定会走 s 到 t 的一条路径,正着走或者反着走。所以可以在最短路上dp,当前没走过上面的路径,正这正着走,正在反着走,已经走完了。4个状态的最短路。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+10,M=4

2021-07-02 19:17:18 237

原创 圣剑护符

题目链接:圣剑护符能不能异或出相同的数,其实就是看每个数字加入线性基的时候,如果加入不进去,那么肯定能被异或出来。因为线性基最多31个,所以暴力加入判断即可。然后区间异或用树剖+线段树维护即可。AC代码:#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1e5+10;int n,q,a[N],pos[N],bl[N],dep[N],f[N],sz[N],son[N],cn

2021-06-30 23:52:36 161

原创 最大收益

题目链接:最大收益假设我们选择了一个集合的物品,为了使得价值最大,我们肯定是按照 R 从小到大选择。然后我们可以先按照R从小到大sort。考虑dp,dp[i][j] 前 i 个物品选择了 j 个的最大值。但是我们发现转移是有后效性的,因为不知道后面选择了多少个,但是我们从后往前dp,就知道当前的转移了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define in

2021-06-28 15:23:08 124

原创 佳佳的魔法药水

题目链接:佳佳的魔法药水看成一瓶药水要另一个药水的最短路,然后边权也是药水即可。因为要求方案数,所以我们更新的时候,保证作为边权的药水已经是最短的即可。然后要注意两瓶相同药水合成的情况。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=1010;int n,

2021-06-28 13:01:31 211

原创 No Time to Dry P

题目链接:No Time to Dry P考虑对每个右端点维护左端点的答案。如果加进来的这个数字,上一次出现的位置到现在的位置都没有小于本身数字的,那么可从上一次涂的时候移动过来,所以 L 大于上一次的位置才需要重新涂,也就是区间 [上一次的位置+1 , i ]+1否则全体都需要重新涂,也就是总体+1所以离线fenwick或者在线主席树即可。因为主席树区间加比较麻烦,需要标记永久化,所以我们先差分一下。AC代码:#pragma GCC optimize("-Ofast","-funroll-

2021-06-27 17:29:25 187

原创 JABUKE

题目链接:JABUKE这种两维信息,不难想到维护一维,枚举一维。所以我们可以维护每个点左右最近的苹果树的位置,然后暴力枚举上下的位置更新即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=510;int n,m,q,dp1[N][N],dp2[N][N];

2021-06-26 11:26:40 150

原创 Reboot from Blue

题目链接:Reboot from Blue考虑最短路,每个点只会连左右第一个小于本身的点。然后用单调栈维护即可。AC代码:#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+10,M=N*2;int n,ss,tt,pos,pos1,dp[N],deg[N];pair<int,int> a[N];int head[N],nex[M],to[M],w[M],

2021-06-25 12:01:04 93 1

原创 Video Game G

题目链接:Video Game G用AC自动机优化状压dp,然后记得统计一下fail树上的值。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=3010;int n,m,dp[1010][N],res; char str[N];int ed[N],fail[N

2021-06-23 19:51:28 96

原创 SZA-Template

题目链接:SZA-Template首先我们可以发现,答案一定是整个串的一个border。什么border是合法的呢?就是可以覆盖到所有点。我们用border树考虑,也就是每个节点相邻的最大差值要小于等于当前border长度。所以我们可以建树之后,从根节点一直向点n跑,直到存在一个合法的border,对于删除操作,我们使用链表维护即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h

2021-06-22 19:24:10 241

原创 [NOI2014] 动物园

题目链接:[NOI2014] 动物园维护一个border 树,然后对于每个点,继承父亲的答案,暴力向下跳即可。因为由于border树的性质,跳到的全是当前点的border为了方便向下跳,我们维护一个根节点到当前节点的节点栈AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const

2021-06-22 13:28:28 223

原创 Border树

题目链接:失配树就是把kmp求失配数组的时候,点 i 的父亲为 fail[i]然后这个树有几个性质:点的所有祖先一定是本身的border任意两个点的lca的任意祖先是共同的border没有祖先关系的两个点没有border关系所以求一求lca即可,记得判断lca的位置。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long long

2021-06-22 12:48:59 373

原创 Byfibonacci

题目链接:Byfibonacci这个题有一个trick,就是每个数字,不可能不由小于本身的最大两个fib组成。然后我们每次就枚举整个序列最大值是小于本身的第一个fib,还是第二个fib即可。但是我们要注意,次大的fib会计算重复。但是又最多用两次,所以可以容斥减掉。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing n

2021-06-20 20:57:09 368

原创 RASPORED

题目链接:RASPORED假设有两个任务,分别为:L1,T1 ; L2,T2如果第一个在前面的代价:L1 + L2 - 2 * T1 - T2反之:L1 + L2 - 2 * T2 - T1所以按照 T 的大小去维护即可。AC代码:#include<bits/stdc++.h>#define int long longusing namespace std;const int N=2e5+10;int n,m,L[N],T[N],sum[N<<2],num[N

2021-06-19 18:39:25 77

原创 Elastic Search

题目链接:Elastic Search我们不难发现,对于一个串,就是一直找子串,然后求一下找的最大次数。我们可以发现,我们对于一个有子串关系的暴力建图,然后求最长路即可。这里复杂度肯定不行,我们可以注意到,每次假设可以到 abba,也可以到ab,那么一定是前者。所以相当于就是AC自动机上面每次跳fail的一个dp。这里为了保证复杂度,每个节点只访问一次,所以需要记忆化。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#incl

2021-06-15 22:12:24 149

原创 United Cows of Farmer John G

题目链接:United Cows of Farmer John G我们考虑枚举每个右端点。然后前面合法的左端点是哪些呢?假设当前位置为 R,上一次出现位置为L,如果未出现当成0那么我们对于一些出现多次的数字,肯定只能取最右边那个。所以就是区间不同数字的种类数,fenwick即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long long

2021-06-06 22:48:20 288 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除