- 博客(46)
- 收藏
- 关注
原创 72 分布式锁
分布式锁 = 分布式 + 锁。那么分布式是指的什么呢?锁又是锁的谁呢?在业务开发中我们经常会听到分布式分布式的概念,分布式也很简单,通俗的来说就是你具有多个服务器,每个服务器上运行的程序是一样的,用户的每一次请求,都会平衡的分配到随机的一个服务器中进行处理。那么这样的话就会导致一个问题,那就是并发冲突和数据不一致等问题。下面结合一个简单的小例子来介绍一下分布式环境下不使用分布式锁会造成什么问题。假设你运营着一个在线电商平台,某个商品(商品ID为product123)的库存为10件。
2024-10-15 20:41:16
1102
原创 38 Spring
是 Spring 框架中用于定义 Bean 销毁方法的一个属性,主要用于在 Bean 被销毁时指定一个特定的方法来执行清理逻辑。这种方式通常用于 XML 配置文件中,允许开发者在 Spring 容器关闭或 Bean 被销毁时执行自定义的逻辑。
2024-10-13 21:43:27
632
原创 66 消息队列
RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。68 Netty点击查看。
2024-10-13 15:22:52
1000
原创 48 Redis
基于访问频率淘汰键,适合那些有“热点”数据的场景。:基于最后访问时间淘汰键,适合那些数据"新鲜度"较重要的场景。简单的说就是大量的请求key不存在缓存中,导致大量的请求直接打到了数据库上,导致数据库压力激增。解决办法如下:缓存无效的key;如果缓存和数据库都查不到某个 key 的数据就写⼀个到 Redis 中去并设置过期时间,具体命令如 下: SET key value EX 10086。
2024-10-12 23:38:37
1336
1
原创 68 Netty
Netty 是一个高性能的异步事件驱动的网络应用框架,广泛用于开发网络应用程序,如协议服务器和客户端。简单来说这个框架是基于异步事件驱动的网络应用框架,这里最重要的一个点是事件驱动。何为事件驱动呢?事件驱动就是指它的服务逻辑都是针对发生的事件来触发的,一旦某个事件发生了,就会触发该时间的处理逻辑。比如建立连接、数据读取、数据写入等等情况。该应用框架总体来说就是为了两个服务直接进行通信,只不过这个是异步通信,而不是像之前那样的同步通信,它是非阻塞的,具有很高的性能。那么连接两个节点之间进行通信的称为通道。
2024-10-11 20:11:31
871
原创 54 内网穿透
阅读本文前需要先搞懂NAT、PAT、端口映射几个概念。内网宽带中的主机可以访问公网宽带主机,反之不可以访问;公网宽带主机可以和公网宽带主机双向访问;内网宽带中的主机和内网宽带中的主机互相无法访问。那么内网宽带中的客户机和公网宽带中的客户机如何访问另一个内网宽带中的服务器呢?这里就需要用到内网穿透技术。FRP使用 Go 语言开发,可以支持 Windows、Linux、macOS、ARM 等多平台部署。
2024-10-10 23:44:47
680
原创 Error: Cannot find module “.“ at webpackMissingModule (IndexPage.vue?d485:138) at VueCompone
因为require它是打包工具所需要的标识,你搞成运行时通过变量去定义的话,它就没办法打包了啊,
2024-03-19 23:37:28
578
原创 Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘application/x-ww
1、前端axios请求设置如下,将请求头的content-type设置成“application/json”
2024-03-18 20:01:58
830
1
原创 Transformer代码实现笔记
这个小例子是基于pytorch以及Transformer模型实现的机器翻译案例。先简单介绍 一下,这里并没有用什么大型的数据集,而是手动输入了两对德语->英语的句子,这里主要是为了突出模型实现本身。数据预处理Positional Embedding实现Mask实现根据Q,K和V计算出注意力以及加权求和后的值(点积运算封装)Multi-Head Attention实现Feed Forward实现一个Encoder Layer实现Encoder实现。
2023-10-08 17:20:00
323
原创 Transformer笔记
Transformer模型笔记Encoder-Decoder架构Attention模型Attention的原理Attention机制的本质思想Attention优缺点Self-Attention模型Transformer原理Transformer整体结构Transformer的inputs输入Transformer的EncoderTransformer的DecoderTransformer Decoder的输入基于Encoder-Decoder的Multi-Head Attention。
2023-10-08 17:17:42
124
原创 Python深度学习-基于pytorch-2
在训练模型过程中,经常会出现刚开始训练时,训练和测试精度不高(或损失值较大),然后通过增加迭代次数或通过优化,训练精度和测试精度继续提升,如果出现这种情况,当然最好。现在,如果要最小化这个新的损失函数,应要让,和04尽可能的小。因为如果你在原有损失函数的基础上加上10000乘以,这一项,那么这个新的损失函数将变得很大,所以,当要最小化这个新的损失函数时,将使。,该模块提供了常用的初始化策略,如xavier、kaiming等经典初始化策略,使用这些初始化策略有利于激活值的分布呈现出更有广度或更贴近正态分布。
2022-10-17 21:22:11
1759
原创 遗传算法 python实现
遗传算法 python实现求解函数 f(x) = x + 10sin(5x) + 7cos(4x) 在区间[0, 9] 的最大值;import mathimport randomclass GA(): #initalise def __init__(self, length, count): #length of chromosome self.length = length #number of chromosome self
2021-07-14 11:53:36
355
原创 牛客练习赛79
牛客练习赛79A 炼金术师题目简述:两个人分别对一个数组进行填数 第一个人第i次填的颜色为i区间为[0,ai]。进行n次填充,而第二个人对另一个数组进行填色,他可以选择[1,n][1,n]中的任意一种颜色,以及任意的一个右端点rr,将该画布的[0,r][0,r]区间染成此次选择的颜色。求第二个人最少最少次可以将数组变成第一个人一样。题目分析:因为第一个人(此后成为甲)染色有后面的覆盖前面的颜色,所以我们可以用一个栈来模拟这道题目,如果栈顶的数小于将要入栈的数,那么意味着后面的数会覆盖前面染过的区
2021-03-27 10:32:39
198
原创 图论 单源最短路径问题 Dijkstra算法
#include<bits/stdc++.h>using namespace std;typedef long long ll;//const int N=20;const int mod=9901;const int INF=1000000;#define forn(i,a,b) for(int i=a;i<b;i++)//*****************************************************************const in
2020-12-10 19:33:43
111
原创 快乘与快速幂
快乘与快速幂#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=20;const int mod=9901;#define forn(i,a,b) for(int i=a;i<b;i++)//*****************************************************************//int a[10000000];ll qui
2020-11-30 16:28:58
87
原创 ST算法(求区间最值问题)
给定一个长度为N的序列A,ST算法能在 O(NlogN)时间的预处理后,以O(1)的时间复杂度在线回答“数列A中下标在 l ~ r 之间的数的最大值是多少”这样的区间最值问题。 一个序列的子区间个数显然有 O(N^2)个,根据倍增思想,我们首先在这个规模为O(N^2)的状态空间里选择一些 2 的整数次幂的位置作为代表值。 设 F[i , j] 表示数列 A 中下标在子区间 [i, i + 2^j -1] 里的数的最大值,也就是从 i 开始的 2^j 个数的最大值。递推边界显然是 F[i, 0
2020-11-01 22:00:01
291
原创 c++中读入一行字符创的方法
读入一行字符串,以回车键结束读入有两种方法,如下:方法一:getline()读入整行数据,它使用回车键输入的换行符来确定输入结尾。调用方法: cin.getline(str, len);第一个参数str是用来存储输入行的数组名称,第二个参数len是要读取的字符数。 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 char str[30]; 7 cin.getline(s
2020-10-30 09:27:04
358
原创 高效判断素数
高效判断是否为素数在大于4的所有整数中,都可以将其表示为6n-1,6n,6n+1,6n+2,6n+3,6n+4;分析如下:6n 与 6n+2 与 6n+4 都可以被2整除所以不可能是素数那么素数只能出现在6n-1与6n+1中int judge_prime(int n){ if(n==1 || n==4) return false; if(n==2 || n==3) return true; if(n%6!=1 || n%6!=5) return false; for(int i=5
2020-10-28 22:08:26
181
原创 卡特兰数
卡特兰数卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。卡特兰公式的应用很广泛,最典型的四种应用问题现描述如下:此数的递归公式为 h(n ) = h(n-1)(4n-2) / (n+1)。令h(1)=1,h(0)=1卡特兰数的应用 实质上都是递归等式的应用括号化 矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)
2020-09-29 20:07:20
111
原创 前缀和 差分
对于一个数列A,他的差分数列B定义为: B[1] = A[1] ,B[i] = A[i] - A[i-1] ( 2<=i<=n) 容易发现,“前缀和” 和 “差分” 是一对互逆运算,差分序列B的前缀和序列就是原序列A,前缀和序列S的差分序列也是原序列A。 把序列A的区间 [l,r] 加上 d(即把 Al,Al+1……Ar 都加上 d),其差分序列 B 的变化为 Bl 加 d,Br+1 减 d,其余位置不变。 列如数列 1 3 6 3 9 10 20,让位置在[2,5]范围内加
2020-09-17 20:18:45
116
原创 c++ fixed setprecision()
c++,fixed,setprecision(),setw()fixed固定的意思,在cout时,强制的把float类型和double类型输出小数,而不是科学计数法的形式。setprecision(),设置输出的小数的小数点后显示几位,比如setprecision(2)表示小数点后显示两位。cout<<fixed<<setprecision(保留的位数)<<要输出的数字;...
2020-09-15 16:50:03
5729
1
原创 负数的二进制表示
负数的二进制的表示例如:-5 在计算机中是如何表示的呢在计算机中整数是直接用原码表示,例如单字节5,在计算机中就表示为:0000 0101。负数以其正值的补码形式表示,如单字节-5,在计算机中表示为1111 1011。就是正数安位取反后再加一...
2020-09-13 15:58:59
199
原创 并查集学习笔记
并查集:并查集适用于不相交的集合问题题目链接#include <bits/stdc++.h>using namespace std;int a[10000];int find_set(int x){ if(x!=a[x]) find_set(a[x]); else return x;}void union_set(int x,int y)//合并并查集{ x=find_set(a[x]); y=find_se
2020-09-04 16:21:47
108
原创 2020年暑假算法笔记
2020年暑假算法笔记2020年7月11日:map 相关用法Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。1、map简介map是一
2020-09-03 15:38:30
480
1
原创 康拖展开式+逆康拖展开式
康拓展开式:康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩,在组合数学中,其解决的是当前排列在全排列中的名次问题。简单来说,给定一个 n 位数的全排列,可根据康托展开公式确定其应是字典序中的第几个排列。由于康托展开计算的是某个全排列方式在该全排列集合中的字典序,其映射关系是唯一的,而且单调,因此映射关系是可逆的,故而当给定一个全排列的所有字符,以及某个字典序编号,可以利用逆康托展开得到相应的那个全排列。总而言之就是求出该排列在全排列中排第几;计算公式:其中a[ i ] 表示的
2020-09-03 15:36:48
312
原创 线段树学习笔记
线段树:线段树其实是一个二叉搜索树,它存储的是一个区间的信息每个节点以结构体的方式存储结构体包括区间的左右端点外加区间和其它看情况加区间要维护的信息线段树的基本思想是二分特殊性质有:每个节点的左孩子的区间范围确定对于节点k,左孩子节点为2k,右孩子为2k+1,这符合完全二叉树的性质线段树的基本操作:建树,单点查询,单点修改,区间查询,区间修改1.建树struct node{ int l,,t; int sum;//l,r分别表示区间左右端点 sum表示区间和}tr
2020-09-03 10:30:19
84
转载 树状数组笔记
树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(n)。树状数组通过将线性结构转换成伪树状结构(线性结构只能逐个扫描元素,而树状结构可以实现跳跃式扫描),使得修改和求和复杂度均为O(lgn),大大提高了整体效率。给定序列(数列)A,我们设一个数组C满足C[i] = A[i–2^k+ 1] + … + A[i]其中,k为i在二进制下末尾0的个数,i从1开始算!则我们称C为树状数组。下面的问
2020-09-02 16:09:53
117
原创 A除以B (20)
A除以B (20)时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)题目描述本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入描述:输入在1行中依次给出A和B,中间以1空格分隔。输出描述:在1行中依次输出Q和R,中间以1空格分隔。输入例子:123456789050987654321 7输出例子:17636684150141093
2020-09-02 13:16:56
197
原创 大数求余数 和 大数求商
大数求余数核心算法while(k) { res=res*10+a[i]; res=res%7; k--; }大数求商大数求余数和大数求商都在这里面for(int i=1;i<len;i++){ t=(temp*10+s[i]-'0')/a; cout<<t;//t为商,逐个输出 temp=(temp*10+s[i]-'0')%a
2020-09-02 13:11:12
253
1
原创 数论2 GCD + LCM
数论2:同余 + GCD + LCM带模运算的性质:(a + b) % p = (a % p + b % p)%p(a - b) % p = (a % p - b % p) % p(a * b) % p = (a % p * b % p )%p(a ^ b) % p =((a % p) ^ b)% p整数分除例题:余数求和
2020-08-26 16:44:54
118
原创 数论1 素数+约数+反素数
数论1 素数+约数+反素数素数:素数是指只能被自身整除和被1整除的数(大于1的自然数,1不是素数)不是素数的数为合数常见的题型有:素数的判定+素数的筛选两种题型素数的判定:试除法(如果n不能被【0,根号n】内的所有数整除,那么就为素数)加速技巧:>4的素数总是会被 6x+1 或 6x-1整除素数的筛选:素数埃氏塞法(复杂度:n* log log n,素数分布:x/ln x)代码略(不断塞出素数的倍数)线性塞法(欧拉塞法)(复杂度 n) 常用const int N
2020-08-26 11:37:07
218
原创 筛选法求素数
筛选法求素数#include <cstdio>#include <iostream>#include <cstring>using namespace std;int a[100000];void prime()//求1~100000内的素数{ a[1]=0;//1不是素数 for(int i=2;i<100000;i++) { if(a[i]==1) { for(int
2020-08-21 20:02:59
124
原创 数位dp
数位dp数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位…数的每一位就是数位啦!之所以要引入数位的概念完全就是为了dp。数位dp的实质就是换一种暴力枚举的方式,使得新的枚举方式满足dp的性质,然后记忆化就可以了。新的枚举:控制上界枚举,从最高位开始往下枚举,例如:ri=213,那么我们从百位开始枚举:百位可能的情况有0,1,2(觉得这里枚举0有问题的
2020-08-21 17:08:30
233
原创 kmp
kmp算法笔记一般匹配字符串时,我们从目标字符串str(假设长度为n)的第一个下标选取和ptr长度(长度为m)一样的子字符串进行比较,如果一样,就返回开始处的下标值,不一样,选取str下一个下标,同样选取长度为n的字符串进行比较,直到str的末尾(实际比较时,下标移动到n-m)。这样的时间复杂度是O(n*m)。ababaca这里我们要计算一个长度为m的转移函数next。next数组的含义就是一个固定字符串的最长前缀和最长后缀相同的长度。比如:abcjkdabc,那么这个数组的最长前缀和最长后缀相同
2020-08-20 22:36:29
288
原创 位运算
位运算位运算就是计算机用二进制来与计算,并不需要我们自己将该数转换成二进制位运算基础:& 按位与| 按位或^ 按位异或~ 取反<< 左移用来将一个数的各二进制位全部左移N位,右补0右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0奇技淫巧应用一 用O(1)时间检测整数n是否是2的幂次.思路解析:N如果是2的幂次,则N满足两个条件。N>0N的二进制表示中只有一个1一位N的二进制表
2020-08-19 15:27:13
90
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人