在那本经典的数据结构教材中,在查找一章中,将查找分为静态查找和动态查找。
1、静态查找
首先无论是静态查找还是动态查找,都要有查找的对象,也就是包含很多同类型数据的“表”,这个“表”可以理解为一个由同类型数据元素组成的一个“集合”,该集合可以用各种容器来存储,例如数组、链表、树等,我们统称这些存储数据的数据结构为——查找表。可见,查找表有时是我们传统意义的表,有时候是很复杂的一种结构。
静态查找就是我们平时概念中的查找,是“真正的查找”。之所以说静态查找是真正的查找,因为在静态查找过程中仅仅是执行“查找”的操作,即:(1)查看某特定的关键字是否在表中(判断性查找);(2)检索某特定关键字数据元素的各种属性(检索性查找)。这两种操作都只是获取已经存在的一个表中的数据信息,不对表的数据元素和结构进行任何改变,这就是所谓的静态查找。
2、动态查找
看到上面静态查找的概念,动态查找就很好理解了,个人总觉得动态查找不像是“查找”,更像是一个对表进行“创建、扩充、修改、删除”的过程。动态查找的过程中对表的操作会多两个动作:(1)首先也有一个“判断性查找”的过程,如果某特定的关键字在表中不存在,则按照一定的规则将其插入表中;(2)如果已经存在,则可以对其执行删除操作。动态查找的过程虽然只是多了“插入”和“删除”的操作,但是在对具体的表执行这两种操作时,往往并不是那么简单。
1 mysql 事物隔离级别简介
1.1 READ UNCOMMITED
SELECT的时候允许脏读,即SELECT会读取其他事务修改而还没有提交的数据。
1.2 READ COMMITED
SELECT的时候无法重复读,即同一个事务中两次执行同样的查询语句,若在第一次与第二次查询之间时间段,其他事务又刚好修改了其查询的数据且提交了,则两次读到的数据不一致。
1.3 REPEATABLE READ
SELECT的时候可以重复读,即同一个事务中两次执行同样的查询语句,得到的数据始终都是一致的。
1.4 SERIALIZABLE
与可重复读的唯一区别是,默认把普通的SELECT语句改成SELECT …. LOCK IN SHARE MODE。即为查询语句涉及到的数据加上共享琐,阻塞其他事务修改真实数据。
2 开发过程中,我们一般使用的都是1.3 repeatable read,下面详细介绍一下这个隔离级别。
在同一个事物中,我们执行同一条查询SQL,得到的结果始终是一样的,无论别人进行添加、删除、修改等任何操作,对我的查询结果都没有影响;包括别人事物提交之后这个状况,对我的查询结果没有影响。
3 锁表的情况
3.1 事物一如下:
SET @@autocommit= 0;
UPDATE test set name = 'changing' where id = 1;
3.2 事物二如下:
SET @@autocommit= 0;
UPDATE test set name = 'chang' where id = 1;
先执行3.1,然后执行3.2.则3.2将无法执行,处于所等待状态,等待时间超过了某个值,报锁超时异常。这是因为3.1已经对id=1的这条记录加锁,3.2需要等待。
4 innodb并不总是锁行,也有锁表的情况。
SET @@autocommit= 0;
UPDATE test set name = 'chang' where name like '%a%'
上面这条SQL,因为mysql不确定修改的范围,所以对全表加锁。
864157225,渴望技术方面的交流。
YUVviewerForHEVC 开发辅助工具 LCU查看器!
下载地址:
http://download.csdn.net/detail/feixiang_john/4968639
使用方法和一般的YUVviewer一样, 不同就是多了一个LCU view的选项:
下面是查看的例子:
明显可以看到LCU(64x64)是如何划分的:
LCU 最大为64x64, CUs 为32x32 16x16 8x8等.
如何使用, 只需在任何版本的HM中的Void TEncCu::compressCU 函数中增加一行代码
fwrite(m_ppcBestCU[0]->getDepth(), 256, 1, outFile_LCU);
如下所示:
Void TEncCu::compressCU( TComDataCU*& rpcCU )
{
// initialize CU data
m_ppcBestCU[0]->initCU( rpcCU->getPic(), rpcCU->getAddr() );
m_ppcTempCU[0]->initCU( rpcCU->getPic(), rpcCU->getAddr() );
// analysis of CU
xCompressCU( m_ppcBestCU[0], m_ppcTempCU[0], 0 );
//增加代码
fwrite(m_ppcBestCU[0]->getDepth(), 256, 1, outFile_LCU);
//结束增加代码
......
}
如何用YUVviewerForHEVC查看器依次打开YUV文件和LCU.dat文件即可!