- 博客(42)
- 资源 (2)
- 收藏
- 关注
原创 简单学习JVM内存模型
引用一张经典的java 内存模型用一个用户视角来解释这张图。一:程序计数器:字节码解释器会改变程序计数器的值来控制下一条指令执行的字节码指令。是每个线程私有。二:java 虚拟栈:他的生命周期和线程是相同的,每个线程执行的时候会创建一个栈。用于 存放: 1,局部变量表 2,操作数栈 3,动态链接 4,方法出口一个方法的被调用知道执行完毕,就对应一个栈桢的入栈和出栈。三:本地方法栈和虚拟机栈的作用很相似,本地方法栈是为了java 程序使用到本地方...
2020-10-05 00:09:44
244
转载 IO多路复用模型
转载自:https://www.cnblogs.com/-zyj/p/5719923.html1,select1、介绍: select系统调用的目的是:在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常事件。poll和select应该被归类为这样的系统 调用,它们可以阻塞地同时探测一组支持非阻塞的IO设备,直至某一个设备触发了事件或者超过了指定的等待时间——也就是说它们的职...
2019-01-18 14:41:03
889
转载 几种 IO 模型
1,最常见的IO模型就是 “阻塞IO”A拿着一支鱼竿在河边钓鱼,并且一直在鱼竿前等,在等的时候不做其他的事情,十分专心。只有鱼上钩的时,才结束掉等的动作,把鱼钓上来。在内核将数据准备好之前,系统调用会一直等待所有的套接字,默认的是阻塞方式。 然后从内核讲数据拷贝到用户线程。程序的read必须在write之后执行,当write阻塞住了,read就不能执行下去,一直处于等待状态。 ...
2019-01-18 14:23:01
172
原创 从paxous到zookeeper
1, 2pc 两阶段提交.1,事物询问,执行事物,将操作记录undo 和 redo.2,各个 参与者都需要像协调者汇报情况,是否OK,如果不OK,那就中断.3,执行事物提交.像所有参与者发出commit.4,参与者执行之后回复ACK,完成事物.5,中断事物,任何参与者像协调者反馈NO之后或者等待超时之后,协调者就会发送RollBack 请求 .参与者在完成回滚之后会发送AC
2017-05-13 23:04:55
479
原创 jvm 垃圾收集器
对象的内容:对象头,实例数据,填充补齐.对象头:1,运营时数据,hashCode,GC 年代,锁状态标志,线程持有锁,偏向线程ID,偏向时间戳. 2,对象还有一个类型指针,指向类元数据的指针.可达性分析:从GCroot 查找是否存在引用 .1,虚拟机栈中引用的变量.2,方法区中静态属性引用的对象.,常量引用的对象,native引用的对象.垃圾清楚方法:标记
2017-05-13 18:02:18
399
原创 jvm 空间分配总结
java jvm空间分配.1,方法区 存放的是类信息,静态,常量信息,即时编译器编译后的代码等数据.1,类除了有类的版本,方法,接口,字段等描述信息,还有一部分是存放编译期生成的各种符号引用,字面量.2,程序计数器,一小块内存,程序字节码行号指示器,选取下一条字节码,每个线程都有一块.3,虚拟机栈,线程私有化,也就是每个线程都有一块儿,存储的是局部变量,操作数栈,动态连接,方法
2017-05-13 16:21:18
247
转载 B+树参阅文件
http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html
2017-04-30 20:04:02
213
原创 redis 简单总结
1,redis 的字符串,亮点是他所有方法和C的字符串一致,但是他增加了记录字符串的长度.空间预分配,不重新分配.2,字典也是map ,维护的是key-value,涉及到扩大和压缩,rehash期间所有修改操作同步到新的hash表中.完成rehash之后直接替换.3,跳跃表,类似于二叉树,新插入的数据可能是在最高层,也可能是某一层.这个是不固定的.根据一个dobble4,AOF,重写命
2017-04-30 19:53:46
183
原创 zhubajiewang面试小结
1,怎么解决分布式事物.比如,在一个扣款的过程,A和B两个机器,如何解决机器中途挂掉的情况.(问的不是幂等)正确的解法是记录数据库日志,在记录日志的方法上,开本地事物.可以根据日志进行恢复.2,io密集型,和计算密集型的情况,线程池开多大?(最开始的问题是,怎么确定线程池的大小).io密集型,需要多开,cpu计算型就少开.3, volatile的应用场景volatile不能
2017-04-21 21:17:16
208
原创 SPFA
建立一个队列,初始时队列里只有起始点,再建立一个表格记录起始点到所有点的最短路径(该表格的初始值要赋为极大值,该点到他本身的路径赋为0)。然后执行松弛操作,用队列里有的点作为起始点去刷新到所有点的最短路,如果刷新成功且被刷新点不在队列中则把该点加入到队列最后。重复执行直到队列为空。如果某个点进入队列的次数超过N次则存在负环(SPFA无法处理带负环的图){CSDN:CODE:228856
2017-03-24 14:50:26
174
原创 Bellman-Ford模板
Dijkstra算法无法判断含负权边的图的最短路。如果遇到负权,在没有负权回路存在时(负权回路的含义是,回路的权值和为负。)即便有负权的边,也可以采用Bellman-Ford算法正确求出最短路径。主要是做N次松弛,用变量记录入队列的次数和是否入过队列,如果每次都如队列则判定有负环#include #include #include #include #include #includ
2017-03-24 14:09:07
307
原创 Floyd(各对顶点之间的最短距离)
我们其实可以求n次Dijkstra,就可以求出各对顶点的最短路了。但是这不是重点,有一个比他更清晰易懂的算法—Floyd假设从i到j的最短路径上要经过若干个顶点,这些中间顶点中最大的顶点编号为k,最小的顶点为t,因此要求算dist[i][j]的最小值,那么只需要求算dist[i][s]+dist[s][j](t#include #include #include #include
2017-03-24 11:51:59
981
原创 Aho-Corasick 多模式匹配算法
核心思想简介KMP算法一样, AC自动机在匹配时如果当前字符匹配失败,那么利用fail指针进行跳转。由此可知如果跳转,跳转到的串的前缀,必为跳转前的模式串的后缀。由此可知,跳转的新位置的深度一定小于跳之前的节点。所以我们可以利用 bfs在 Trie上面进行 fail指针的求解。 设这个节点上的字母为x,沿着他父亲的失败指针走,直到走到一个节点,他的儿子中也有字母为x的节点。然后把...
2017-03-23 17:42:48
436
原创 Trie树
https://vjudge.net/problem/UVALive-3942前缀树:#include #include #include #include #include #include #include #define max_length 300100#define sigma_size 27#define MODE 20071027#define max_
2017-03-23 15:34:21
183
原创 KMP(前缀数组)
KMP简洁:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。举个例子吧!举例来说,有一个字符串"
2017-03-23 14:43:59
724
原创 堆排序
维护一个完全二叉树.这个是一个小根堆的实现#include#include#include#define maxn 200using namespace std;int arr[maxn];void upAdjuest(int a[], int pos) { int temp = a[pos]; int j = (pos - 1) / 2; while
2017-03-21 18:17:51
174
原创 快速排序
快速排序其实就是冒泡的一种改进版本.他是不稳定的一种排序方法.合理的用分治的思想处理排序问题.#include #include #include #define maxn 1<<10using namespace std;int arr[maxn];void qsort(int a[],int left,int right) { if(left >= rig
2017-03-20 22:48:07
170
原创 avl 平衡二叉树
实现平衡二叉树参考博客:http://blog.csdn.net/whucyl/article/details/17289841参考博客:http://www.cnblogs.com/QG-whz/p/5167238.html个人实现代码:#include #include #include using namespace std;struct BinaryTreeNo...
2017-03-19 13:25:08
253
原创 循环队列的简单实现
#include #include #include #define maxn 20#define add_length 5using namespace std;typedef struct Node{ int rear; int front; int size; int *data;}*LoopQueue;void Init(LoopQueu
2017-03-17 17:15:08
240
原创 链队列简单实现
实现的时候遇到了简单问题。传指针进去才行。#include #include #include #define maxn 20using namespace std;typedef struct QNode { int data; struct QNode *next;}QNode;typedef struct LinkQueue{ QNode * fr
2017-03-16 22:07:06
189
原创 栈的简单实现
栈的简单实现#include #include #include #define max_stack_length 20#define append_stack_length 5using namespace std;typedef struct { int *base; int *top; int stackSize;}SqStack;///初始化栈
2017-03-08 22:41:14
174
原创 双链表实现
在实现双端链表的时候,由于图简单,没加哨兵。导致删除节点的时候出现free首节点无法删除。原因是:引用 这篇博客 http://blog.csdn.net/llhyy17/article/details/5375298需要将头节点往前移一个数据类型占用的内存大小。然后将这个地方的位置标记为可以使用的。这个时候就出现了内存访问非法了。 #include #include #inc
2017-03-07 21:14:58
210
原创 单链表的简单实现
#include #include #include #define max_list_length 20#define expand_list_length 5using namespace std;#include#include typedef struct Node { struct Node *next; int value;} Node, *List;
2017-03-05 21:14:24
169
原创 HDU 2883 kebab 网络流
有 n 个顾客,老板在单位时间只能考 m 个肉串。si 为顾客到的时间,ni 为顾客点的肉串数量,ti 为顾客要求每个肉串要烤多长时间,ei 为顾客必须要在这个时间之前拿到肉串。由于时间的范围比大,我们可以将区间拆成最小的区间,每个区间看成一个点,每个区间想终点(T)连一条边 ,然后是每个顾客向合法的区间连一条容量大小为INF的边,起始点(S)向每个顾客连一条ni*si的边,最后求最大流,如果
2014-03-24 20:18:26
395
原创 hdu 3572 Task Schedule
http://acm.hdu.edu.cn/showproblem.php?pid=3572这个就是要把每天每个任务拆开对待。然后建网络流,直接套模板就过了,一点压力都没有。#include #include #include #include #include #include #define INF 0x7fffffff#define maxn 1005using
2014-03-23 10:06:42
323
原创 CodeForces 404C
将每个点到根节点的最短路给出来,然后限定每个节点和其他节点相关联的边不超过k,然后直接见图就可以了。根节点就是距离为0的点,不能有两个根节点,直接建图的时候如果发现有一个根节点必须大于k了,那就直接break了。下面是代码。#include #include #include #include #include #define maxn 100010using namespace
2014-03-22 19:10:22
495
原创 POJ 1273 最水最水的网络最大流
直接最大流就可以了。没有任何困难,就是要注意数据范围,每组数据之后清零就可以了。#include #include #include #include #include #include #define INF 0x7fffffff#define maxn 205#define maxm 300000using namespace std;int vis[maxn],cur
2014-03-22 19:05:44
331
原创 poj 1273 网络流简单模板
网络最大流入门题目,写个模板以后自己看着玩。。。#include #include #include #include #include #include #define maxn 210using namespace std;struct Edge{ int to,cap,rev;};vectorG[maxn];int level
2014-02-24 21:30:48
453
原创 UVA 11354 Bond
这题就是建立有根树有点问题,其他的都是模板就可以了。。。再就是查询,先调整高度到起始点一样,如果不是同祖先就同时往上找,然后就没别的了。。。#include #include #include #include #include #include #include #include #define maxn 50005#define maxm 100005typedef l
2014-02-14 14:08:35
438
原创 uva 10917
这是我在一以前写的SPFA上加了一个记忆话搜索救过了,直接上代码吧……#include #include #include #include #include #include #define maxn 1005#define INF 129using namespace std;int max(int a,int b){return a>b?a:b;}int M,N,X;
2014-02-03 14:50:34
405
原创 uva 11374 Dijkstra (单源最短路径)
这一题写了好久,从过年之前就开始写,现在才过,真的是被这道题卡了一年额……这是白书的题,思路不用说了,唉,直接上代码吧……#include #include #include #include #include #include #define maxn 10010#define INF 129using namespace std;struct Edge{int fr
2014-02-03 13:51:58
523
原创 hdu 1878
这是一道裸是否存在欧拉回路判断的题;对于无向图的欧拉回路的判断要有这两个条件要把握1,.这个图是连通的。2.这个图中每个顶点的度数都是偶数(如果是有想图就是出度等于入度)。对于连通性的判断大多要用到并查集。下面是我的代码:#include #include #include #include #define maxn 1001using namespac
2014-01-15 12:40:20
486
原创 Fire!
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id有一个人要从一个迷宫中逃出来,迷宫中‘#’表示不可走,‘.’表示可以走,但是迷宫失火了。火势以每秒向四周蔓延的速度蔓延。如果火已经蔓延到这里,人就不可走了,只要人走到迷宫的边缘就算成功逃出了。当然火无法蔓延到‘#’部分。问:至少需要几秒?注意火不是只有一个(我就是因为这个错了好
2013-12-04 20:30:55
539
原创 拯救魔法少女
拯救魔法少女Time Limit : 5000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 33 Accepted Submission(s) : 13Font: Times New Roman | Verdana | GeorgiaFon
2013-11-24 11:10:36
817
原创 HDU 3308 LCIS
http://acm.hdu.edu.cn/showproblem.php?pid=3308题目要实现的就是给一个数串,对这个串有两个操作,一个是查询,另一个是修改。查询的是给定区间中最长递增串的长度。很明显这就是一个单点更新和区间合并的问题,因为对线段树不熟悉,所以在保存状态的时候出现了问题,好歹最后过了。281ms代码:#include #include #includ
2013-11-15 16:49:41
414
1
原创 hdu4771 Stealing Harry Potter's Precious 亚洲区域赛杭州赛区第二题题解
http://acm.hdu.edu.cn/showproblem.php?pid=4771题目意思就是给一个矩阵,“#”表示不可走,“.”表示可走,其重要遍历最多四个点,对少个点题目中给出,点的左边对应的符号肯定是“.”.这其实就是一个简单的BFS,用2^4次方中状态表示访问先后顺序。其他的就没啥说的了。0ms 过;#include #include #include #i
2013-11-09 19:49:25
680
原创 Pearls
题目意思是:给出要过买的珠宝的数量和价格,每种珠宝购买时必须要多支付购买的那种珠宝10*单价。然后,采购人员有有一种选择,如果购买单价比要购买的单价更贵的珠宝并且花的钱更少,客户是没有意见的。现在就是找状态转移方程了。就是一种状态转移到当前的状态了,我们知道转移肯定是连续的,因为我们把一种单价的某几个单价珠宝换成价格更贵的是没有任何意义的。因为我们要减少的是哪个10*value,也就是说把某一种珠
2013-11-07 21:18:08
514
原创 Largest Submatrix
http://acm.hdu.edu.cn/showproblem.php?pid=2870题目意思是给一个字符矩阵“w”可以替换成“a”或者“b”,“w”可以替换成“a”或者“b”,“x”可以替换成“b”或者“c”,“z”可以替换成“a”或者“b”或者“c”。问可以找出一个字符一样的最大的子矩阵是多大。思路是列出三种情况,就是全部替换成a的时候取得的子矩阵是全有a组成的,同理b,c。现在
2013-11-05 07:42:55
415
原创 Beans
http://acm.hdu.edu.cn/showproblem.php?pid=2845题意:给出一个矩形,矩形中有一个数字,选择一个数之后就不能选择与这个数的相邻列的所有数和同行相邻的数。思路:先求每一行不相邻最大的和,再求各行不相邻的最大和的不相邻最大和;#include #include #include #include #define maxn 200005
2013-11-03 17:18:16
412
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人