- 博客(64)
- 收藏
- 关注
原创 ReentrantLock源码和AQS
CANCELLED 表示线程的等待状态被取消(通常是因为超时或者被中断),并且不会再参与锁竞争。被标记为 CANCELLED 的节点不会被唤醒,它的前驱和后继节点需要跳过它。这个状态会使得释放锁的操作不仅唤醒下一个节点,而且会继续向后传播,确保所有等待线程都能有机会获得锁。SIGNAL: 表示当前节点的后继节点需要被唤醒。当一个节点(假设是 A)被阻塞时,A 会检查它的前驱节点 B 是否是。如果是,则意味着当 B 释放锁时,A 需要被唤醒。状态的节点依赖于前驱节点的唤醒逻辑。队列中的下一个等待线程。
2025-03-10 22:23:36
305
原创 逻辑测试题
先生成一个点,每生成一个点判断距离,角度,满足加入存点的容器,直到容器大小为4。随机生成点:分区域:最大距离20,以20为正方形划分区域为20*20网格,产生点时,先随机挑选一个网格,每次挑选的网格不能是同一个,后续挑选的网格,不能同一列,同一行,且网格之间间隔至少一个网格。挑选出网格后在再网格中随机挑选一个点,但还需要判断角度,通过这样缩小随机范围,避免多次尝试。
2025-01-13 16:50:51
440
原创 python并发
可以保证线程安全,避免多个线程同时修改数据造成的数据竞争问题。在实际开发中,如果需要多个线程同时访问共享资源,我们可以使用。使用线程池可以避免频繁地创建和销毁线程,提高代码的执行效率。原理:新建县城系统需要分配资源,种植需要回收资源,如果可以宠用线程,可以减去新建,终止的开销。语句块中执行取钱操作,如果余额不足就打印提示信息,否则就扣除余额。在主线程中,我们创建了10个线程,模拟多个人同时取钱。来加锁,以保证同一时刻只有一个线程可以执行取钱操作。模块中提供的一个函数,用于获取已经完成的。
2023-05-06 01:02:08
266
原创 py_rabbitmq
和direct一样,只不过改改模式和routingkey。消息确认机制:确认消费了,移除队列。服务端挂掉了, 声明队列时做持久化。根据关键字不同交给不同的人。*:匹配一个单词(单词)- #:匹配多个单词。
2023-04-29 23:17:13
545
原创 django
ORM是一种将对象和关系数据库之间的数据进行映射的技术,它将数据库中的表映射为Python中的类,将表的行映射为类的对象,将表的列映射为类的属性。在上面的示例中,通过User模型类获取名为Tom的用户,再通过Permission模型类获取view_users权限,并通过user_permissions属性将权限分配给用户。例如,下面是一个简单的序列化器:views.py。在上面的示例中,我们定义了一个名为MyModelSerializer的序列化器,并指定了Meta类中的model属性为MyModel。
2023-04-29 19:40:39
844
原创 计算机网络-数据链路层
(A->D)帧太短,很快发送完毕(小于争用期),A不在侦听信道,后序发送碰撞,A以为自己已经成功发送,所以要避免这种现象,传统以太网10Mbps,以太网规定51.2us为争用期长度,故最小帧长=512bit=64B :即以太网发送数据时,前64B没有发生冲突,后序也不会冲突,抢占了信道。3.发送过程中,一直监听,若一直没有检测到碰撞,顺利把帧发送完,若碰撞,终止发送,发送拥塞信号让所有用户知道。:忙,继续监听,冲突,随机时间后监听,重复【其他主机都在监听,一旦空闲,就会都去争用,就会冲突】
2023-03-15 00:09:57
1277
原创 计算机网络-物理层
不用建立连接,线路动态分配,提高线路利用率,提供多目标服务(一个报文同时发送给多个地址)通信时延小(数据直达),有序,无冲突(没有争用物理信道),实时(随时通信),控制简单。建立连接时间长,线路独占,灵活性差(通路任意一点出现故障,重新连接)对设备要求高,要求能够准确的恢复信号,接收端要有严格的同步系统。信息速率,比特率,单位时间传输的二进制码元个数(比特数)仅需要一条信道,只有一个方向的通信,没有反向的交互。存储转发,单位报文(携带源地址,目标地址等信息)波特率,单位时间传输的码元个数,单位Baud,
2023-03-14 21:48:58
699
原创 操作系统-内存管理
文章目录内存管理功能程序装入和链接覆盖与交换连续分配管理方式非连续分配方式基本分页存储管理方式多级页表分段存储管理(和分页有一点类似)段页式虚拟存储技术内存管理功能内存空间的分配与回收:由OS实现主存储器空间的分配和管理,让程序员摆脱存储转换的麻烦地址转换: 多道程序中,程序逻辑地址和物理地址不可能一致,所以需要提供地址变换管理功能,吧逻辑地址转换为相应的物理地址内存空间的扩充: 利用虚拟存储技术或者自动覆盖技术,从逻辑上扩充内存存储保护: 保证各个作业在各自的内存空间内运行,互不干扰程序装
2021-09-21 13:47:34
925
原创 LRU算法 双链表+hashmap
一,概要1.LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。代码(貌似有点问题)import java.util.HashMap;import java.text.DecimalFormat;import java.text.NumberFormat;publ
2021-09-01 01:05:09
313
原创 poj_3252数位dp
组合数学c(n, r) = c(n, n - r); c(5, 3) = c(5, 2);c(n+1, m) = c(n, m) + c(n, m - 1); c(7, 3) = c(6, 3) + c(6, 2);c(n, n - k) = c(n - 1, k) + c(n - 1, k - 1); c(10, 10 - 6) = c(9, 6) + c(9, 5);#include<iostream>#include<cstring>//组合数学/*c(n, r
2021-09-01 00:58:25
139
原创 poj_1276二进制优化背包问题
多重背包有N种物品,第i种物品的体积为Ci,价值是Wi,但是每种物品的数量都是有限的,为ni。现在有容量为V的背包,请你放入若干物品,使获得的价值尽量大。朴素算法:把N种物品逐个拆分,得到Σni个物品,则原问题可转化为01背包求解。这样做的时间复杂度为O(V×Σn)。或者是在枚举种类的过程中枚举个数k,但时间复杂度也是O(V×Σn)。二进制优化我们可以考虑二进制的思想,将第i种物品通过二进制拆分成若干件物品,比如20件物品可以用1,2,4,8,5这5个数进行组合并相加,就能得到20以内的任何数
2021-09-01 00:54:47
173
1
原创 dijistra算法
一,简介dijistra算法是求从源点开始u到其他点的最短路径问题。前提条件是带权值的边。权值为正数。1.将每个点的距离设为无穷大,彼此都不连通。将这些点的集合设为S.2.另一个集合为V。从源点s开始,距离设为0,放到集合V中。3.设每条边是<u,v>。则通过dist(v) = min{dis(v),dist(u) + l(u,v)} 进行松弛操作。选取最小代价的点,放到集合V中,直到集合S中的元素被拿光结束。二,代码void dijistra1(int u){ int i
2021-09-01 00:43:43
633
原创 a^b%m
一,简介计算A^B;比如2^100;100 = 64 + 32 + 4;对应二进制(1100100)2^100 = 2^64 + 2^32 + 2^4;(a+b)% M = (a%M + b%M)%M#define ll long longll pow(ll a, ll b){ ll base = a, r = 1; while(b){ if(b & 1) r = (r * base) % mod; base = (base * bas
2021-09-01 00:23:33
141
原创 矩阵快速幂(求斐波那契)
一,简介线性代数中有:**也就表明:**图中所表示的可以理解为 f(x+1)=f(x)+f(x-1)即斐波那契数列的通式,若要求项数较大的数n斐波那契数,那么只用将矩阵A进行n-1次幂运算#include<iostream>#include<cstdio>#define Mod 10000using namespace std;struct Mtr{ int f[2][2]; void init1(){ //构造矩阵 f[0][0] = f[0][1]
2021-09-01 00:15:47
297
原创 拓扑排序
一,简介拓扑排序是针对有向无回路图的。对有向无回路图G=(V,E)进行拓扑排序后,结果为该图所有顶点的一个先行序列,满足如果G包含有向边(u , v ),则在该序列中, u 就出现在 v 的前面(如果图存在回路,就不可能存在这样的线性序列)。 【算法导论】有向无回路图用于说明事件发生的先后次序,比如完成某个工程就会存在一个次序关系,先要完成这个工作,然后才能完成那个工作。二,解决思路(1)在有向图中选一个没有前驱的顶点且输出之(2)从图中删除该顶点和所有以它为尾的边。如果有向图中找不到一个没有
2021-09-01 00:09:33
224
原创 poj1789——kuskal最小生成树
#include<iostream>#include<cstring>#include<algorithm>#define MAX 2002000using namespace std;int parent[2002], n;char str[2002][10];struct node{ int s, e, v; }g[MAX];int distance(char a[], char b[]){ int count = 0; for(int i
2021-08-31 23:54:10
102
原创 最小生成树(Prime)
一,最小生成树构造(prime算法)dis[]数组:当前的树到其他各个顶点的边的最小值,dis[5]表示在当前构造的树当中,距离顶点5的距离最小值;visit[];表示哪些点已经加入到树中mp[][];邻接矩阵存图path[];path[5]表示最终的最小生成树中到5这个点的前驱;相当于记录了最小生成树的边随意选择一个顶点,构成一棵树,并初始化dis数组为该顶点到其他顶点的距离,到自己的距离为0从dis中选择最小的且没有加入到树的顶点记为v,将该顶点加入到树中visit[v]=true,然后更
2021-08-31 23:50:41
489
原创 线索二叉树根据任意结点P找前驱和后继
二叉树结构typedef struct threadNode{ /* data */ ElemType data; threadNode *lchild, *rchild; /* tag = 0 指针指向孩子 tag = 1 线索指针 */ int ltag, rtag;} threadNode, *threadTree;一,先序线索二叉树1.前驱先序遍历是 (根左右), 我们是通过子节点的线索来找根
2021-08-28 22:41:20
3407
原创 线索二叉树的实现C++
一,简介二,代码#include <iostream>using namespace std;typedef char ElemType;typedef struct threadNode{ /* data */ ElemType data; threadNode *lchild, *rchild; /* tag = 0 指针指向孩子 tag = 1 线索指针 */ int ltag, rt
2021-08-28 19:46:54
296
空空如也
redis,docker
2024-11-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人