摘要:
使用10个辅助队列,假设最大数的数字位数为 x, 则一共做x次,从个位数开始往前,以第i位数字的大小为依据,将数据放进辅助队列,搞定之后回收。下次再以高一位开始的数字位为依据。 以Vector作辅助队列,基数排序的Java代码: 阅读全文
摘要:
将两个或两个以上的有序表组合成一个新的有序表。归并排序要使用一个辅助数组,大小跟原数组相同,递归做法。每次将目标序列分解成两个序列,分别排序两个子序列之后,再将两个排序好的子序列merge到一起。 阅读全文
摘要:
分为直接选择排序,堆排序 直接选择排序: 第i次选取 i到array.Length-1中间最小的值放在i位置。 堆排序: 首先,数组里面用层次遍历的顺序放一棵完全二叉树。从最后一个非终端结点往前面调整,直到到达根结点,这个时候除根节点以外的所有非终端节点都已经满足堆得条件了,于是需要调整根节点使得整 阅读全文
摘要:
包括冒泡排序,快速排序。 冒泡排序法: 该算法是专门针对已部分排序的数据进行排序的一种排序算法。如果在你的数据清单中只有一两个数据是乱序的话,用这种算法就是最快的排序算法。如果你的数据清单中的数据是随机排列的,那么这种方法就成了最慢的算法了。因此在使用这种算法之前一定要慎重。这种算法的核心思想是扫描 阅读全文
摘要:
包括直接插入排序,希尔插入排序。 直接插入排序: 将一个记录插入到已经排序好的有序表中。 1, sorted数组的第0个位置没有放数据。 2,从sorted第二个数据开始处理: 如果该数据比它前面的数据要小,说明该数据要往前面移动。 a,首先将该数据备份放到 sorted的第0位置当哨兵。 b,然后 阅读全文
摘要:
分类: 1)插入排序(直接插入排序、希尔排序)。 2)交换排序(冒泡排序、快速排序)。 3)选择排序(直接选择排序、堆排序)。 4)归并排序。 5)分配排序(箱排序、基数排序)。 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序。 选择 阅读全文
摘要:
在数据库中存在一种特殊的值:NULL(空值)。一个字段如果没有被赋值,那么它的值就是NULL,NULL并不代表没有值而是表示值未知。员工信息表中存储着身份证号、姓名、年龄等信息,其中某条记录中年龄字段的值为NULL,并不表示这个员工没有年龄,而只是他的年龄暂时不知道。因此,在数据库中NULL 主要用 阅读全文
摘要:
一般情况下,一张数据表必须要有一个主键字段,这样这个主键字段就可以唯一标识这条记录了。不过采用什么样的字段来做为主键字段还是一个必须解决的问题,目前有两种常用的主键策略:业务主键与逻辑主键。 业务主键是指采用业务数据中的某个字段做为主键,比如在员工档案表中可以用工号来做为主键、在车辆管理系统中可以用 阅读全文
摘要:
在设计数据库的时候,有时需要表的某个字段是自动增长的,最常使用自动增长字段的就是表的主键,使用自动增长字段可以简化主键的生成。不同的DBMS 中自动增长字段的实现机制也有不同,下面分别介绍。 MYSQL中的自动增长字段 MYSQL中设定一个字段为自动增长字段非常简单,只要在表定义中指定字段为AUTO 阅读全文
摘要:
主流的DBMS都提供了启动、提交以及回滚事务的机制,也提供了指定锁粒度、隔离级别的机制,不过这些机制一般是谁DBMS的不同而不同的,请参考具体DBMS的说明文档。比如在MSSQLServer中执行一个READ_UNCOMMITED级别事务的SQL语句如下: 阅读全文
摘要:
由于隔离性是通过加锁的方式获得的,而锁会降低系统的性能,所以事务提供了控制隔离程度的机制。如果使用较高的隔离级别,则事务会比较好的与其他事务相隔离,当然也会带来大量的系统开销;如果使用较低的隔离级别,则事务的隔离性会比较差,但是能获得更好的性能。 事务的隔离级别分为四种:READ_UNCOMMITE 阅读全文
摘要:
假设同一个A和B两个同时并发操作数据库,A和B执行的任务如下:从数据库中读取整数N,将N随机加上10或者20,将新的N更新回数据库。这两个并发执行的实例可能发生下面的执行顺序。 (1)A从数据库中读取N,当前数据库中N=0; (2)B从数据库中读取N,当前数据库中N=0; (3)A将N加10,并更新 阅读全文
摘要:
如果要执行一系列的操作,而这些操作最终是以整体的原子操作的形式完成的话,事务就是必须的。关于事务的理论中,银行转账问题是最经典的例子:当把钱从一个银行帐号转移至另外一个银行帐号的时候,这个操作要由两个步骤来完成,首先要将资金从一个银行帐号取出,然后再将其存入另一个银行帐号。如果资金已经从一个银行帐号 阅读全文
摘要:
下面将会列出了一些常用的优化手法,注意这些优化手法只是一些常规条件下的优化手法,具体的优化效果是与使用的DBMS以及数据的特点密切相关的,需要根据具体情况来使用不同的优化手法,如果使用不当的话有可能会适得其反。 创建必要的索引 在经常需要进行检索的字段上创建索引,比如经常要按照图书名称进行检索,那么 阅读全文
摘要:
一般地,系统访问数据库中的数据,可以使用两种方法:全表扫描和索引查找。全表扫描,就是指系统必须在数据表中逐条检索表中的每条记录,以检查该记录是否匹配检索条件。全表扫描有可能会造成巨大的性能损失,当然也有可能不会影响性能,这取决于表中的数据量,如果表中有上千万条甚至上亿条记录的话,全表扫描的速度会非常 阅读全文
摘要:
在使用DBMS时经常对系统的性能有非常高的要求:不能占用过多的系统内存和CPU资源、要尽可能快的完成的数据库操作、要有尽可能高的系统吞吐量。如果系统开发出来不能满足要求的所有性能指标,则必须对系统进行调整,这个工作被称为调优。 绝对DBMS的性能的因素有两个因素:硬件和软件。使用频率的的CPU、使用 阅读全文
摘要:
索引是数据库调优的最根本的优化方法,很多优化手法都是围绕索引展开的,可以说索引是一切优化手法的“内功”,而所有的优化手法都是由索引衍化出来的招式而已。 根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型:聚簇索引,数据表的物理顺序与索引顺序相同;非聚簇索引,数据表的物理顺序与索引顺序不 阅读全文
摘要:
Java、C#等语言提供了参数化SQL机制,使用参数化SQL开发人员为在运行时才能确定的参数值设置占位符,在执行的时候再指定这些占位符所代表的值。示例代码如下: 在上面的例子中,为运行时才能确定的用户名和密码设置了占位符,然后在运行时再设定占位符的值,在执行时Java、C#会直接将参数化SQL以及对 阅读全文
摘要:
过滤敏感字符的思路非常简单,由于恶意攻击者一般需要在输入框中输入的文本一般含有or、and、select、delete之类的字符串片段,所以在拼接SQL之前检查用户提交的文本中是否含有这些敏感字符串,如果含有则终止操作。示例代码如下: 这种方式能够过滤大部分注入漏洞攻击,但是有如下两个缺陷: 1,给 阅读全文
摘要:
系统中安全性是非常重要的,为了保证安全性很多解决方案被应用到系统中,比如架设防火墙防止数据库服务器直接暴露给外部访问者、使用数据库的授权机制防止未授权的用户访问数据库,这些解决方案可以很大程度上避免了系统受攻击,但是如果开发人员不注意SQL的安全性造成了SQL注入漏洞,那么所有的这些解决方案都形同虚 阅读全文