ElasticSearch基础
es安装使用docker安装es 拉取镜像 1docker pull elasticsearch:7.12.0 创建docker容器挂在的目录: (windows手动创建) 1234# linux的命令mkdir -p /opt/es/config & mkdir -p /opt/es/data & mkdir -p /opt/es/pluginschmod 777 /opt/es/data 配置文件 1echo "http.host: 0.0.0.0" > /opt/es/config/elasticsearch.yml 创建容器 123456# linuxdocker run --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms84m -Xmx512m" -v...
AES加密算法
AES概念详解什么是 AES?AES(Advanced Encryption Standard)是一种分组对称加密算法,加密单元固定为 128 bit(16 字节)。它支持三种密钥长度: AES-128 → 10 轮 AES-192 → 12 轮 AES-256 → 14 轮 AES 是现代密码学的基石,被广泛用于 HTTPS、VPN、磁盘加密、移动支付等场景。 AES 的数据结构AES 以一个 16 字节的数据块为单位工作,把这 16 个字节组织成一个 4×4 字节矩阵(state),列优先存储: 1234s0 s4 s8 s12s1 s5 s9 s13s2 s6 s10 s14s3 s7 s11 s15 每轮加密都会对这个矩阵进行一系列固定变换。 AES 的四大核心操作AES 的每一轮由四个步骤构成(最后一轮不含 MixColumns): 1. SubBytes(字节代换)使用固定的 非线性 S-box 对每个字节独立替换。S-box 的构造包含: 在 GF(2^8) 中求逆元 进行一次仿射变换 这是 AES...
FTP协议
FTP 全面解析:原理、实现机制与现代应用1. FTP 的设计初衷FTP(文件传输协议)诞生于上世纪 70 年代,是最早的互联网协议之一,目的是: 在网络中可靠地传输文件,同时允许用户对远程文件系统进行一定程度的控制。 当时的网络没有 NAT、没有家庭路由器、没有复杂防火墙,因此 FTP 的协议设计非常简单直观,但这也导致了它在现代环境中问题较多。 2. FTP 的协议工作原理FTP 是一个 基于 TCP 的应用层协议,使用 两个 TCP 连接: 2.1 控制连接(Control Connection) 使用 TCP 端口 21。 长连接,一直保持。 用于发送命令(如 USER、PASS、LIST、RETR、STOR)。 用于接收服务器的响应(如 200 OK、226 Transfer complete)。 2.2 数据连接(Data Connection) 用于真正传输文件内容或目录列表。 在不同模式下,端口不同(见下一节)。 数据连接是 FTP 的最大特点 →...
2023CCPC桂林题解 MGKBHI
M. Flipping CardsM. Flipping Cards 签到, 二分可选的最大中位数,把大于该中位数的视为1,小于该位的视为0, 每次check dp下最大能取到的比该为数字大的次数,大于 n / 2 + 1则状态可达, 其中dp状态0表示还未进入,1表示正在翻转中,2表示此前已经翻转过 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include<bits/stdc++.h>using namespace std;using i64 = long long;int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<i64> a(n + 1), b(n + 1); for (int i = 1; i <= n; i++)...
ABC432 题解DE
D - Suddenly, A Tempest给定一个默认矩阵,以左下角和右上角顶点表示,初始设置为(0, 0) 和 (X0, Y0) 其中X0, y0 属于【1, 1e8】有N次风暴, 每次风暴分X操作和Y操: X操作输入A, B, 把x坐标小于A的所有矩阵全部向下移动B个单位, 把y坐标大于A的所有矩阵全部向上移动B个单位 Y操作输入A, B, 把x坐标小于A的所有矩阵全部向左移动B个单位, 把y坐标大于A的所有矩阵全部向右移动B个单位 其中求所有N此操作后分成的矩阵块和每个矩阵的个数。 解: 考虑到N比较小,定义一个struct模拟风暴中所有的矩阵块,初始值是默认矩阵块, 用一个vector维护当前所有的矩阵块,初始值只有一个默认矩阵 每次风暴来时候如果X或者Y操作会切割矩阵,...
批量任务Worker池
在日常开发中时常会遇到批量任务: 批量创建, 批量查询, 批量xxx, 如果按照串行编码, 那么任务队列每次都只有一个任务被执行,十分缓慢,我们考虑使用以下一个简易Worker线程工厂(个人简易实现有错误请指出) Controller层:注册下这个方法12345678910111213141516171819package controller import ( "awesomeProject/server" "fmt") func BatchJob() { req := &server.BatchJobReq{ IdList: []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,...
RabbitMQ梳理
介绍RabbitMQ 是一个在 AMQP(Advanced Message Queuing Protocol )基础上实现的,可复用的企业消息系统。它具有消息队列的所有基本属性特征和优点,比如可以用来做异步、削峰、解耦,可以用来做定时任务,事务顺序等等,可以用于大型企业通信,支持高并发、支持可拓展。 RabbitMQ 是使用 Erlang 编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。它同时实现了一个 Broker 构架,这意味着消息在发送给客户端时先在中心队列排队,对路由(Routing)、负载均衡(Load balance)或者数据持久化都有很好的支持。 rabbitMq核心概念前面概念于MessageQueue记录了 死信队列什么是死信队列?当一条消息在队列中出现以下三种情况的时候,该消息就会变成一条死信。 消息被拒绝(basic.reject / basic.nack),并且requeue =...
负载均衡
什么是负载均衡?负载均衡指的是将用户的请求分摊到不同的服务器上处理,以提高系统的整体并发处理能力和可靠性。负载均衡可以有专门的软件和硬件来完成,一般情况下,硬件的性能和稳定性更好,但是太贵了,所以一般使用软件的负载均衡 负载均衡分类负载均衡可以简单分为 服务端负载均衡 和 客户端负载均衡 这两种 服务端负载均衡服务端负载均衡就是在服务端引入一个独立的负载均衡器(如 Nginx、LVS、Envoy、F5),由它来接收客户端请求并分发到后端实例。它可以分为 二层负载均衡, 四层负载均衡, 七层负载均衡, 六层负载均衡,其中 四层负载均衡(基于 TCP/UDP,性能高,但只能做转发)和 七层负载均衡(基于 HTTP/HTTPS,可以根据 URL、Header 做复杂策略)。常见算法有轮询、加权轮询、最少连接、一致性哈希等。在实际生产环境中,服务端负载均衡不仅负责流量分发,还要做健康检查、容灾、会话粘性和灰度发布。 四层负载均衡四层负载均衡,也就是传输层(针对TCP/UDP)主要是...
Java并发 --volatile关键字
volatile概述 在Java并发中,volatile可以保证变量的可见性,如果我们将变量声明为volatile,就指示JVM,这个变量是共享且不稳定的,每次使用都需要从主存中读取 注意到volatile并不能保证原子性,所以对于多次写的情况下不适合用volatile,容易造成数据丢失问题,单独使用volatile一般可以用来操作一些开关,多次读一次写的对象,如: 12345678910111213public class Button { public volatile boolean isopen = true; public void run() { while (isopen == true) { // 逻辑操作 } } public void stop() { isopen = false; ...
RPC
1. 应用使用.thrift可以实现功能接口的跨语言调用,客户端可以通过连接RPCclient实现调用服务端的实现接口以Go为服务端,Python为客户端 1. thrift:12345678910111213141516171819202122service DevelopManagementService { // Create a work ticket for deployment CreateTicketResponse CreateTicket(1: CreateTicketRequest req)}// Ticket API Beginstruct CreateTicketRequest { 1: required string Branch // RD - Git DevBranch 2: required string EntityURI 3: required bool Hotfix 4: required string Operator 5: optional string...
