前言
您需要写一种数据结构,来维护一些数,其中需要提供一下的操作: 1.插入数值x 2.删除数值x(如果有多个,只删除一个) 3.查询数值x的排名(如有多个相同的数,应输出最小的排名) 4.查询排名为x的数值 5. 求数值x的前驱(小于x最大的数) 6.求数值x的后继(大于x最小的数)
首先我们引入一种数据结构叫二叉查找树(BST)。该树满足一下性质: 对于树的任意一个节点 1.该节点的关键码不小于它的左子树中任意节点的关键码 2.该节点的关键码不大于它的右子树中任意节点的关键码
通俗一点来讲就是,一个节点的左边都比他小,右边都比他大QWQ
显然,二叉查找树的中序遍历是一个单调递增的节点序列……
那么我们来考虑解决上面的普通平衡树(因为不是主角就不重点讲啦!!)
1.插入:从根节点开始访问,小了向左走,大了向右走,找不到就新建点啦 2.删除:同插入过程啦啦啦啦 3.查询排名:因为左子树的点都比此节点小,那抹排名就是左子树的size(大小)+1啦啦啦,求size应该都会吧…… 4.查询数值:如果左子树的大小比要求排名大,就往左走,否则往右走,直到一样…… 5.前驱:首先我们先找到这个数,因为左子树的点都比这个数小,所以向左儿子走一步,然后一直向右边走,走到头就是啦 6.后继:同理啦,向右儿子走一步,然后一直向左走
是不是感觉BST超简单的,没错就是这么简单……但是你没发现什么问题嘛??
不不不
现在我按顺序插入1,2,3,4,5 树就变成了这样 我要是按顺序插入1,2,3……10^5 这特么不就变成链表了么 实际上就算不这么极端,也能分分钟把这种最单纯的2x查找树搞死 很显然这样是过不了普通平衡树的……
是不是感觉刚才看的都白看了,不不不,下面要将的treap就是基于2x进行优化的……
那么该怎么优化呢???
我们发现2x查找树的不足之处就在于它太深了(太深了……咳咳咳),因此我们就想减少它的深度,通俗的来讲就是把它拍扁。那么如何实现呢……
旋转 (不转不是中国人……) 右旋,是让某个节点的左儿子站到自己原来的位置,然后自己成为原来左儿子的右儿子(左旋同理啦!!请自行脑补)可以看下面的动来动去的图
合理的旋转操作可以是BST变得更扁(you)平(xiu)。那么问题来了,怎么样才算合理呢???根据研究发现,在随机的数据下,普通的BST可以虐杀其他一切高级的树。Treap的思想就是利用“随机”来创造平衡的条件。因为在旋转的过程中必须维持BST的性质,所以Treap就把“随机”作用在堆性质上。 其实Treap就是Tree和Heap的合成词啦。Treap在插入每个新节点的时候,就给该节点随机生成一个额外的权值。然后像二叉堆的插入过程一样,自底向上依次检查,当某个节点不满足大根堆性质时,就执行单旋转,是该节点与其父节点的关系发生对换。 特别的,对于删除操作,因为Treap支持旋转,我们可以将要删除的节点转到叶子节点,然后直接删除,就可以避免信息更新的问题啦。
Treap的所有操作时间复杂度都是O(logn)的
下面附上丑丑的代码:
#include
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define dep(i,a,b) for(int i=a;i>=b;--i)
using namespace std ;
const int MAXN=100010 ;
const int INF=0x7fffffff ;
int read(){
int sum=0 ,flag=1 ;
char c;
for (;c<'0' ||c>'9' ;c=getchar())if (c=='-' ) flag=-1 ;
for (;c>='0' &&c<='9' ;c=getchar())sum=(sum<<1 )+(sum<<3 )+c-'0' ;
return sum*flag;
}
int tot,root,n;
struct Treap{
int l,r;
int val,dat;
int cnt,size;
}tr[MAXN];
int New(int val){
tr[++tot].val=val;
tr[tot].dat=rand();
tr[tot].cnt=tr[tot].size=1 ;
return tot;
}
void update(int p){
tr[p].size=tr[tr[p].l].size+tr[tr[p].r].size+tr[p].cnt;
}
void build(){
New(-INF);New(INF);
root=1 ;tr[1 ].r=2 ;
update(root);
}
int getrankbyval(int p,int val){
if (!p) return 0 ;
if (tr[p].val==val) return tr[tr[p].l].size+1 ;
if (valreturn getrankbyval(tr[p].l,val);
return getrankbyval(tr[p].r,val)+tr[tr[p].l].size+tr[p].cnt;
}
int getvalbyrank(int p,int rank){
if (!p) return INF;
if (tr[tr[p].l].size>=rank) return getvalbyrank(tr[p].l,rank);
if (tr[tr[p].l].size+tr[p].cnt>=rank) return tr[p].val;
return getvalbyrank(tr[p].r,rank-tr[tr[p].l].size-tr[p].cnt);
}
void zig(int &p){
int q=tr[p].l;
tr[p].l=tr[q].r;tr[q].r=p;p=q;
update(tr[p].r);update(p);
}
void zag(int &p){
int q=tr[p].r;
tr[p].r=tr[q].l;tr[q].l=p;p=q;
update(tr[p].l);update(p);
}
void insert(int &p,int val){
if (!p) {p=New(val);return ;}
if (val==tr[p].val) {tr[p].cnt++;update(p);return ;}
if (val if(tr[p].dat else{
insert(tr[p].r,val);
if (tr[p].dat int getpre(int val){
int ans=1 ;
int p=root;
while (p){
if (val==tr[p].val){
if (tr[p].l>0 ){
p=tr[p].l;
while (tr[p].r>0 ) p=tr[p].r;
ans=p;
}
break ;
}
if (tr[p].valtr[ans].val) ans=p;
p=valreturn tr[ans].val;
}
int getnext(int val){
int ans=2 ;
int p=root;
while (p){
if (val==tr[p].val){
if (tr[p].r){
p=tr[p].r;
while (tr[p].l) p=tr[p].l;
ans=p;
}
break ;
}
if (tr[p].val>val&&tr[p].val return tr[ans].val;
}
void remove(int &p,int val){
if (!p) return ;
if (val==tr[p].val){
if (tr[p].cnt>1 ) {tr[p].cnt--;update(p);return ;}
if (tr[p].l||tr[p].r){
if (tr[p].r==0 ||tr[tr[p].l].dat>tr[tr[p].r].dat) zig(p),remove(tr[p].r,val);
else zag(p),remove(tr[p].l,val);
update(p);
}
else p=0 ;
return ;
}
val void init(){
n=read();
while (n--){
int opt=read(),x=read();
switch (opt){
case 1 : insert(root,x);break ;
case 2 : remove(root,x);break ;
case 3 : printf ("%d\n" ,getrankbyval(root,x)-1 );break ;
case 4 : printf ("%d\n" ,getvalbyrank(root,x+1 ) );break ;
case 5 : printf ("%d\n" ,getpre(x) );break ;
case 6 : printf ("%d\n" ,getnext(x) );break ;
}
}
}
int main(){
build();
init();
return 0 ;
}
你可能感兴趣的:(平衡树)
《 C++ 修炼全景指南:九 》打破编程瓶颈!掌握二叉搜索树的高效实现与技巧
Lenyiin
C++ 修炼全景指南 技术指南 c++ 算法 stl
摘要本文详细探讨了二叉搜索树(BinarySearchTree,BST)的核心概念和技术细节,包括插入、查找、删除、遍历等基本操作,并结合实际代码演示了如何实现这些功能。文章深入分析了二叉搜索树的性能优势及其时间复杂度,同时介绍了前驱、后继的查找方法等高级功能。通过自定义实现的二叉搜索树类,读者能够掌握其实际应用,此外,文章还建议进一步扩展为平衡树(如AVL树、红黑树)以优化极端情况下的性能退化。
P3369 【模板】普通平衡树
浚浚的二师兄
算法 c++ 数据结构
[题目通道](【模板】普通平衡树-洛谷)#includeusingnamespacestd;constintmaxn=1e7;#defineintlonglongstructnode{intl;intr;intval;intsval;intsize;};nodetree[maxn];introot=0;intidx=0;voidnewnode(int&x,intv){x=++idx;tree[id
聚簇索引 和 非聚簇索引详解
AaronJonah
mysql java 数据库 java
在mysql中索引类型包括这几种B+Tree索引、hash索引、全文索引、空间索引。其中B+Tree索引是默认索引类型。且B+Tree(平衡树)索引大致分为两类聚簇索引和非聚簇索引(指MyISM的非聚簇索引)。一、聚簇索引(ClusteredIndex)1、机制a.聚簇索引是一种索引方式,InnoDB引擎要求必须有聚簇索引。索引采用B+Tree索引结构实现。聚簇索引是按照表主键顺序构建一个B+Tr
Splay
荼白777
平衡树 算法 数据结构
定义Splay是一颗平衡二叉树,但是往往没那么平衡,期望高度是log(n)log(n)log(n)应用不仅支持普通平衡树的操作,包括一些区间问题(一般用线段树解决)的也支持;保证高度的思想对某个结点进行操作的时候,将其旋转到树根;这里的操作指的是像插入,查询等等;也就是说,这跟操作系统的局部性原理类似,某个点既然当前用到了,那么后续肯定还会用到;拉到根结点其实就是进行了一个类似缓存的操作;应用这个
LeetCode刷题记录:110. 平衡二叉树
「已注销」
c++
110.平衡二叉树解题思路:使用递归遍历二叉树,求出每个二叉树节点的高度并进行判断。递归时若二叉树节点没有子节点,返回0;若二叉树左右节点的高度差的绝对值大于1,说明树已经不满足平衡树的条件,返回-1;否则返回当前节点的最高高度(即左右节点高度中的最大值+1)。通关代码:classSolution{public:intheight(TreeNode*root){if(root==NULL){ret
9.set or multiset
冒泡P
STL c++ 算法
setormultisetsetormultiset的特性是所有元素会根据元素的值自动排序,set是以RB-tree(平衡树,红黑树的一种)为底层机制,其查找效果非常好。set容器中不允许元素重复,multiset容器允许元素重复默认构造setset#includesetset;multisetmset;//从小到大set>st2;//从大到小大小intsize();boolempty();插入删
redis为什么选择了跳跃表而不是红黑树
小码哥(^_^)
redis 跳跃表 红黑树
Redis只在两个地方用到了跳跃表,一个是实现有序集合键(zset),另一个是在集群节点中用作内部数据结构,除此之外,跳表在Redis里面没有其他用途。但是为什么用跳表而不用红黑树呢?猜想如下:1)在做范围查找的时候,平衡树比skiplist操作要复杂。在平衡树上,我们找到指定范围的小值之后,还需要以中序遍历的顺序继续寻找其它不超过大值的节点。如果不对平衡树进行一定的改造,这里的中序遍历并不容易实
redis为什么用跳表而不用平衡树
栋幺栋幺-
redis redis 跳跃表
Redis里面使用skiplist是为了实现sortedset这种对外的数据结构。sortedset提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sortedset相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍。因此,为了介绍得足够清楚,本文会比这个系列的其它几篇花费更多的篇幅。我们将大体分
数据结构通讲
做个专注的工程师
# 数据结构 数据结构
目录集合源码详解一、常见数据结构讲解1.线性数据结构1.1数组1.2队列1.3链表1.3.1单向链表1.3.2双向链表1.4栈2.非线性数据结构2.1树2.2二叉树2.2.1概念介绍2.2.2遍历操作2.2.3删除节点2.2.4查找局限性2.2.5AVL(高度平衡树)2.32-3-4树1概念介绍2生成的过程3和红黑树的等价关系3.12节点3.23节点3.34节点3.4裂变状态4转换为红黑树2.4红
牛客周赛 27
十字星的约定_
算法 算法 深度优先 c++ 数据结构
牛客周赛Round27文章目录牛客周赛Round27A小红的二进制删数字B嘤嘤的新平衡树C连续子数组数量D好矩阵A小红的二进制删数字2的幂为1个1加几个0,所以多余的1都要删除,找1的个数即可classSolution{public:/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramsstring字符串*@returnint整型*/intminCnt
C#,自平衡二叉查找树(AVL Tree)的算法与源代码
深度混淆
C#算法演义 Algorithm Recipes c# 开发语言 AVL 二叉树 树
G.M.Adelson-Velsky一、AVLTree的历史自平衡二叉查找树(AVLTree)中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M.Adelson-Velsky和E.M.Landis,他们在1962年的论文《Analgorithmfortheorganizationofinforma
数据库索引
换首歌给你听
索引关系型数据库中提升查询性能最为重要的手段.像是书本中的目录,虽然占用了一些纸张(存储),但换来更加快速的查询.数据库中的列被索引也提高了查询效率.以空间换取时间的查询时间的减少.MysqlMysql的InnoDB支持每个表创建16个索引,底层使用的数据结构是B-tree(多路搜索树,并不是二叉的),平衡树的一种.索引操作创建索引/前缀索引createindexidx_nameontable_n
二叉搜索树之:【BST】【基本应用汇合】
bei2002315
高级数据结构 算法 数据结构
Ⅰ索树BST与平衡树Treap的区别,已经BST的基本功能介绍二叉搜索树之:【二叉搜索树与平衡树的区别】【BST和treap的区别】_bei2002315的博客-CSDN博客Ⅱ二叉搜索树的基本大纲Ⅲ二叉搜索树的建立①基础版本建树也分两种形式:❶l[],r[]版本❷node结构体版本具体的应用在链接:二叉搜索树之:【实现找某个节点的后继】【二叉搜索树的性质】_bei2002315的博客-CSDN博客
【高级数据结构】B-树、B+树详解
失落的换海迷风
# 高级数据结构 B树 B+树
B树1、概念B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统。它通常用于数据库和文件系统。2、特性B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件:每个节点最多只有m个子节点。每个非叶子节点(除了
算法竞赛 常见算法数据结构总结
AlanCong
1.1基本数据结构1.数组2.链表,双向链表3.队列,单调队列,双端队列4.栈,单调栈1.2中级数据结构1.堆2.并查集与带权并查集3.hash表自然溢出双hash1.3高级数据结构1.树状数组2.线段树,线段树合并3.平衡树Treap随机平衡二叉树Splay伸展树*ScapegoatTree替罪羊树4.块状数组,块状链表5.*树套树线段树套线段树线段树套平衡树*平衡树套线段树6.可并堆左偏树*配
力扣题解:面试题 04.04. 检查平衡性
胡矣
算法 LeetCode 算法 leetcode题解 力扣题解 二叉树 DFS
题目实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过1。解题思路DFS计算当前节点的左右子树高度差若高度差>1,返回false若高度差1)returnfalse;returnisBalanced(root.left)&&isBalanced(root.right);}privateintheight(TreeNodenode){if(node
Mysql为什么使用B+Tree作为索引结构
我是来人间凑数的
面试 # mysql专栏 mysql 数据库
B树和B+树一般来说,数据库的存储引擎都是采用B树或者B+树来实现索引的存储。首先来看B树,如图所示:B树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度会相比二叉树来说,会矮很多。而对于数据库而言,所有的数据都将会保存到磁盘上,而磁盘I/O的效率又比较低,特别是在随机磁盘I/O的情况下效率更低。所以高度决定了磁盘I/O的次数,磁盘I/O次数越少,对于性能的提升就越大,这也是为什么采用
java中常见的数据结构(list,stack,queue,linked,hashTable,tree)
@lihewei
数据结构 算法 b树
常见数据结构文章目录常见数据结构1.数组2.链表3.栈(stack)栈简介栈常见应用场景java中栈的实现4.队列4.1队列简介4.2队列应用场景5.哈希表5.1哈希表简介5.2HashSet为什么不能存储重复元素?6.树(tree)6.1二叉树6.2满二叉树6.3完全二叉树6.4二叉搜索树6.5二叉平衡树【AVL树】6.5.1二叉平衡树旋转6.5.2失衡的4种情况6.6二叉树的存储和遍历6.6.
C++:哈希表的模拟实现
海绵宝宝de派小星
C++ 知识总结 散列表 c++ 哈希算法
文章目录哈希哈希冲突哈希函数解决哈希冲突闭散列:开散列哈希在顺序结构和平衡树中,元素的Key和存储位置之间没有必然的联系,在进行查找的时候,要不断的进行比较,时间复杂度是O(N)或O(logN)而有没有这样一种方案,可以直接不经过比较,从表中得到所需要的元素呢?直接进行获取就可以,如果存在这样的结构,那么对它而言的查找效率是很高的插入元素根据上面的原理,在插入元素的时候,根据插入元素的Key,找到
[C++ 系列] 82. 详解哈希结构解决哈希冲突及模拟实现闭散列、开散列
Ypuyu
[C++系列] C++系列 哈希结构 开散列 闭散列
文章目录1.哈希概念2.哈希冲突3.哈希函数4.解决哈希冲突4.1闭散列4.1.1线性探测4.1.2闭散列及线性探测模拟实现4.1.3什么时机增容,如何增容4.1.4线性探测优缺点4.1.5二次探测4.2开散列4.2.1开散列概念4.2.2开散列增容4.2.3开散列模拟实现4.3开散列与闭散列比较1.哈希概念顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须
平衡二叉树
ツぃ☆ve芜情
数据结构与算法分析 数据结构 avl 平衡二叉树
1.平衡二叉树的定义为避免树的高度增长过快,降低二叉搜索树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左、右子树高度差的绝对值不超过111,将这样的二叉树称为平衡二叉树(BalancedBinaryTree),简称平衡树。定义结点左子树与右子树的高度差为该结点的平衡因子,则平衡二叉树结点的平衡因子的值只可能是$-1$、000或111。平衡二叉树可以是一棵空树平衡二叉树左子树和右子树都是平
跳表详解和实现|深挖Redis底层数据结构
@背包
手撕数据结构 高质量干货博客汇总 redis 数据结构 数据库
文章目录跳表前言项目代码仓库认识跳表跳表的实现思路跳表性能分析对比平衡树(avl和红黑树)和哈希表使用手册成员变量成员函数构造析构迭代器`size``clear``empty``operator=``find``insert``erase`跳表细节实现节点定义跳表结构定义构造、析构、拷贝构造和赋值重载`size()`查找接口`insert`接口`erase`接口迭代器设计跳表前言博主在这边博客,会
为什么有了二叉搜索树和二叉平衡树之后还需要红黑树?
田怼怼
知识点汇总
我们先来回忆一下二叉搜索树、二叉平衡树、红黑树的特点1、二叉搜索树二叉搜索树的特点是:左子树的结点值比根结点值小,右子树的结点值比根结点小在查找的过程中,是采用二分查找的思想,在正常情况下,查找的时间复杂度是O(log2N),但是有一种极端情况,就是此时的二叉树是单支树,如下图:此时,查找的时间复杂度为O(N),为了避免这种情况的发生,我们引申出了二叉平衡树(AVL树)2、二叉平衡树二叉平衡树的出
【面试】数据结构+B树
吴金金5
Interview 数据结构
目录什么是数据结构?数据结构有哪几种分类?数组和链表在内存中的存储结构有什么区别?说一下数据散列存储(Hash存储)结构?【查资料再归纳一哈】如何解决hash冲突?说说数组,链表,循环,嵌套循环的时间复杂度JDK中线性结构的集合有哪些?什么是树【树的定义】?你说一下树形结构和线性结构的优势?说一下树的分类,以及你对它们的理解(二叉查找树的优缺点,平衡树的优缺点,红黑树的优缺点,B-树的优缺点,B+
面试系列MySql:谈谈B树、B+树的原理及区别
Cancerking
技术面试 mysql
B树1、所有键值分布在整个树中(区别与B+树,B+树的值只分部在叶子节点上)2、任何关键字出现且只出现在一个节点中(区别与B+树)3、搜索有可能在非叶子节点结束(区别与B+树,因为值都在叶子节点上,只有搜到叶子节点才能拿到值)4、在关键字全集内做一次查找,性能逼近二分查找算法B+树1、BTree指的是BalanceTree,也就是平衡树,平衡树是一颗查找树,并且所有叶子节点位于同一层。2、B+Tr
数据结构—红黑树和二叉搜索树
_岩芽
吾解 数据结构 b树
一、树1.红黑树与二叉搜索树1.1二叉搜索树1.2.1定义如果左子树不为空,则左子树所有结点值都小于根节点的值;如果右子树不为空,则右子树所有节点值都大于或等于根节点的值;任意一颗字数也是二叉搜索树。查找时间复杂度是O(logn),极端降低到O(n)。1.2.2平衡二叉搜索树(AVL树)1.平衡树(BalanceTree,BT)任意结点的子树的高度差都小于等于1;常见的平衡树包括B树(MySQL中
MYSQL的索引和存储引擎
TimeFriends
数据库 mysql b树 数据库
文章目录MYSQL的索引和存储引擎介绍索引的分类单列索引-普通索引单列索引-唯一索引单列索引-主键索引组合索引全文索引空间索引索引内部原理剖析索引内部原理-Hash算法索引内部原理-二叉树和二叉平衡树索引内部原理-BTREE树MyISAM存储引擎InnoDB存储引擎索引的特点索引的创建原则MySQL的存储引擎MySQL存储引擎的操作MYSQL的索引和存储引擎介绍索引是通过某种算法,构建出一个数据模
算法整理
朱三分
1.基础数据结构2.中级数据结构3.高级数据结构4.可持久化数据结构5.字符串算法6.图论算法7.树相关8.数论9.动态规划10.计算几何11.搜索12.随机化13.其他1、基础数据结构数组链表、双向链表队列、单调队列、优先队列、双端队列栈、单调栈2、中级数据结构堆并查集、带权并查集Hash表自然溢出双Hash高级数据结构树状数组线段树、线段树合并平衡树Treapsplay替罪羊树块状数组、块状链
代码随想录第十七天| ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
echoliuy
leetcode java 算法 数据结构
文章目录110.平衡二叉树思路-递归:代码:思路二-迭代257.二叉树的所有路径思路一:普通递归思路二:递归优化思路三:迭代法(没细看)404.左叶子之和思路-递归110.平衡二叉树思路-递归:明确递归函数的参数和返回值参数:当前传入节点。返回值:以当前传入节点为根节点的树的高度。那么如何标记左右子树是否差值大于1呢?如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了
效率高的B树系列
风影66666
b树 数据结构 c++ 数据库 visual studio
文章目录前言B树概念性质插入数据分析代码实现性能分析B+树概念特性插入数据分析应用B*树概念B*树的分裂总结B树系列的区别B树系列对比哈希和平衡搜索树前言前面我们所学习到的数据结构,只能用来存储少量的数据,因为内存大小是非常有限的,一般情况下,也就几十个G,面对海量数据时,也就只能加载少部分数据到内存,其它的都存在磁盘,而与磁盘交换,即IO,速度是非常慢的如下图,以二叉平衡树为例,树节点存的是磁盘
二分查找排序算法
周凡杨
java 二分查找 排序 算法 折半
一:概念 二分查找又称
折半查找(
折半搜索/
二分搜索),优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而 查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表 分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步
java中的BigDecimal
bijian1013
java BigDecimal
在项目开发过程中出现精度丢失问题,查资料用BigDecimal解决,并发现如下这篇BigDecimal的解决问题的思路和方法很值得学习,特转载。
原文地址:http://blog.csdn.net/ugg/article/de
Shell echo命令详解
daizj
echo shell
Shell echo命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
echo string
您可以使用echo实现更复杂的输出格式控制。 1.显示普通字符串:
echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
echo Itis a test 2.显示转义
Oracle DBA 简单操作
周凡杨
oracle dba sql
--执行次数多的SQL
select sql_text,executions from (
select sql_text,executions from v$sqlarea order by executions desc
) where rownum<81;
&nb
画图重绘
朱辉辉33
游戏
我第一次接触重绘是编写五子棋小游戏的时候,因为游戏里的棋盘是用线绘制的,而这些东西并不在系统自带的重绘里,所以在移动窗体时,棋盘并不会重绘出来。所以我们要重写系统的重绘方法。
在重写系统重绘方法时,我们要注意一定要调用父类的重绘方法,即加上super.paint(g),因为如果不调用父类的重绘方式,重写后会把父类的重绘覆盖掉,而父类的重绘方法是绘制画布,这样就导致我们
线程之初体验
西蜀石兰
线程
一直觉得多线程是学Java的一个分水岭,懂多线程才算入门。
之前看《编程思想》的多线程章节,看的云里雾里,知道线程类有哪几个方法,却依旧不知道线程到底是什么?书上都写线程是进程的模块,共享线程的资源,可是这跟多线程编程有毛线的关系,呜呜。。。
线程其实也是用户自定义的任务,不要过多的强调线程的属性,而忽略了线程最基本的属性。
你可以在线程类的run()方法中定义自己的任务,就跟正常的Ja
linux集群互相免登陆配置
林鹤霄
linux
配置ssh免登陆
1、生成秘钥和公钥 ssh-keygen -t rsa
2、提示让你输入,什么都不输,三次回车之后会在~下面的.ssh文件夹中多出两个文件id_rsa 和 id_rsa.pub
其中id_rsa为秘钥,id_rsa.pub为公钥,使用公钥加密的数据只有私钥才能对这些数据解密 c
mysql : Lock wait timeout exceeded; try restarting transaction
aigo
mysql
原文:http://www.cnblogs.com/freeliver54/archive/2010/09/30/1839042.html
原因是你使用的InnoDB 表类型的时候,
默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,
因为有的锁等待超过了这个时间,所以抱错.
你可以把这个时间加长,或者优化存储
Socket编程 基本的聊天实现。
alleni123
socket
public class Server
{
//用来存储所有连接上来的客户
private List<ServerThread> clients;
public static void main(String[] args)
{
Server s = new Server();
s.startServer(9988);
}
publi
多线程监听器事件模式(一个简单的例子)
百合不是茶
线程 监听模式
多线程的事件监听器模式
监听器时间模式经常与多线程使用,在多线程中如何知道我的线程正在执行那什么内容,可以通过时间监听器模式得到
创建多线程的事件监听器模式 思路:
1, 创建线程并启动,在创建线程的位置设置一个标记
2,创建队
spring InitializingBean接口
bijian1013
java spring
spring的事务的TransactionTemplate,其源码如下:
public class TransactionTemplate extends DefaultTransactionDefinition implements TransactionOperations, InitializingBean{
...
}
TransactionTemplate继承了DefaultT
Oracle中询表的权限被授予给了哪些用户
bijian1013
oracle 数据库 权限
Oracle查询表将权限赋给了哪些用户的SQL,以备查用。
select t.table_name as "表名",
t.grantee as "被授权的属组",
t.owner as "对象所在的属组"
【Struts2五】Struts2 参数传值
bit1129
struts2
Struts2中参数传值的3种情况
1.请求参数绑定到Action的实例字段上
2.Action将值传递到转发的视图上
3.Action将值传递到重定向的视图上
一、请求参数绑定到Action的实例字段上以及Action将值传递到转发的视图上
Struts可以自动将请求URL中的请求参数或者表单提交的参数绑定到Action定义的实例字段上,绑定的规则使用ognl表达式语言
【Kafka十四】关于auto.offset.reset[Q/A]
bit1129
kafka
I got serveral questions about auto.offset.reset. This configuration parameter governs how consumer read the message from Kafka when there is no initial offset in ZooKeeper or
nginx gzip压缩配置
ronin47
nginx gzip 压缩范例
nginx gzip压缩配置 更多
0
nginx
gzip
配置
随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢?
gzip(GNU-ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用
java-13.输入一个单向链表,输出该链表中倒数第 k 个节点
bylijinnan
java
two cursors.
Make the first cursor go K steps first.
/*
* 第 13 题:题目:输入一个单向链表,输出该链表中倒数第 k 个节点
*/
public void displayKthItemsBackWard(ListNode head,int k){
ListNode p1=head,p2=head;
Spring源码学习-JdbcTemplate queryForObject
bylijinnan
java spring
JdbcTemplate中有两个可能会混淆的queryForObject方法:
1.
Object queryForObject(String sql, Object[] args, Class requiredType)
2.
Object queryForObject(String sql, Object[] args, RowMapper rowMapper)
第1个方法是只查
[冰川时代]在冰川时代,我们需要什么样的技术?
comsci
技术
看美国那边的气候情况....我有个感觉...是不是要进入小冰期了?
那么在小冰期里面...我们的户外活动肯定会出现很多问题...在室内呆着的情况会非常多...怎么在室内呆着而不发闷...怎么用最低的电力保证室内的温度.....这都需要技术手段...
&nb
js 获取浏览器型号
cuityang
js 浏览器
根据浏览器获取iphone和apk的下载地址
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" content="text/html"/>
<meta name=
C# socks5详解 转
dalan_123
socket C#
http://www.cnblogs.com/zhujiechang/archive/2008/10/21/1316308.html 这里主要讲的是用.NET实现基于Socket5下面的代理协议进行客户端的通讯,Socket4的实现是类似的,注意的事,这里不是讲用C#实现一个代理服务器,因为实现一个代理服务器需要实现很多协议,头大,而且现在市面上有很多现成的代理服务器用,性能又好,
运维 Centos问题汇总
dcj3sjt126com
云主机
一、sh 脚本不执行的原因
sh脚本不执行的原因 只有2个
1.权限不够
2.sh脚本里路径没写完整。
二、解决You have new mail in /var/spool/mail/root
修改/usr/share/logwatch/default.conf/logwatch.conf配置文件
MailTo =
MailFrom
三、查询连接数
Yii防注入攻击笔记
dcj3sjt126com
sql WEB安全 yii
网站表单有注入漏洞须对所有用户输入的内容进行个过滤和检查,可以使用正则表达式或者直接输入字符判断,大部分是只允许输入字母和数字的,其它字符度不允许;对于内容复杂表单的内容,应该对html和script的符号进行转义替换:尤其是<,>,',"",&这几个符号 这里有个转义对照表:
http://blog.csdn.net/xinzhu1990/articl
MongoDB简介[一]
eksliang
mongodb MongoDB简介
MongoDB简介
转载请出自出处:http://eksliang.iteye.com/blog/2173288 1.1易于使用
MongoDB是一个面向文档的数据库,而不是关系型数据库。与关系型数据库相比,面向文档的数据库不再有行的概念,取而代之的是更为灵活的“文档”模型。
另外,不
zookeeper windows 入门安装和测试
greemranqq
zookeeper 安装 分布式
一、序言
以下是我对zookeeper 的一些理解: zookeeper 作为一个服务注册信息存储的管理工具,好吧,这样说得很抽象,我们举个“栗子”。
栗子1号:
假设我是一家KTV的老板,我同时拥有5家KTV,我肯定得时刻监视
Spring之使用事务缘由(2-注解实现)
ihuning
spring
Spring事务注解实现
1. 依赖包:
1.1 spring包:
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.
iOS App Launch Option
啸笑天
option
iOS 程序启动时总会调用application:didFinishLaunchingWithOptions:,其中第二个参数launchOptions为NSDictionary类型的对象,里面存储有此程序启动的原因。
launchOptions中的可能键值见UIApplication Class Reference的Launch Options Keys节 。
1、若用户直接
jdk与jre的区别(_)
macroli
java jvm jdk
简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JDK就是Java Development Kit JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。 如果安装了JDK,会发同你
Updates were rejected because the tip of your current branch is behind
qiaolevip
学习永无止境 每天进步一点点 众观千象 git
$ git push joe prod-2295-1
To
[email protected] :joe.le/dr-frontend.git
! [rejected] prod-2295-1 -> prod-2295-1 (non-fast-forward)
error: failed to push some refs to '
[email protected]
[一起学Hive]之十四-Hive的元数据表结构详解
superlxw1234
hive hive元数据结构
关键字:Hive元数据、Hive元数据表结构
之前在 “[一起学Hive]之一–Hive概述,Hive是什么”中介绍过,Hive自己维护了一套元数据,用户通过HQL查询时候,Hive首先需要结合元数据,将HQL翻译成MapReduce去执行。
本文介绍一下Hive元数据中重要的一些表结构及用途,以Hive0.13为例。
文章最后面,会以一个示例来全面了解一下,
Spring 3.2.14,4.1.7,4.2.RC2发布
wiselyman
Spring 3
Spring 3.2.14、4.1.7及4.2.RC2于6月30日发布。
其中Spring 3.2.1是一个维护版本(维护周期到2016-12-31截止),后续会继续根据需求和bug发布维护版本。此时,Spring官方强烈建议升级Spring框架至4.1.7 或者将要发布的4.2 。
其中Spring 4.1.7主要包含这些更新内容。