A. 载波侦听多路访问/冲突检测的工作原理是什么
任何站点要向公共介质发送信息时,首先要侦听介质上是否有其他站点正在传送信息,如果通信介质上无载波,即没有被占用,则可以利用通信介质进行传送;
如果已监听到介质上有载波,即有其它站点正在传送信息,则必须等待介质平静之后才能进行传送的处理,这样就会使信道上的冲突大大减少。
按侦听介质的规则可以分为非坚持CSMA、以概率1—坚持CSMA、概率P—坚持CSMA。在CSMA的基础上可作进一步的改进,就是当站点开始发送之后,仍需继续侦听信道一段时间,当检测到冲突就马上迅速取消冲突帧的传送。
(1)数据库访问冲突概率怎么判断扩展阅读:
载波侦听的功能
为了尽量减少数据的传输碰撞和重试发送。以太网中使用了CSMA/CD(载波监听多路访问/冲突检测)工作机制,以防止各站点无序地争用信道。
CSMA/CD的检测方式是通过电缆中电压的变化来测得,当数据传输发生碰撞时,电缆中的电压就会随着发生变化。载波侦听的作用就是在发送数据之前,以太网会“侦听”线缆,判断是否已经有其他数据传输。
载波侦听的用处表现在:假设你有多部电话机挂接到同一根电话线上。如果你拿起其中的一个电话话筒准备打电话时,听到其他人在谈话,这时你必须等待,直到那个人通话完毕。
B. 与数据库冲突
这个错误我遇到过。
你在用vs调试程序的时候不能同时在sql2005中打开该数据库,你可以用vs2005直接打开。
在SQL2005中建好数据库后就把它关了。
C. 简述载波监听多路访问/冲突检测(CSMA/CD)的工作原理。
在CSMA中由于信道传播时延的存在即使总线上两个站点没有监听到载波信而发送帧时,仍可能会发生冲突。
由于CSMA算法没有冲突检测功能,即使冲突已发生,仍然要将已破坏的帧发送完,使总线的利用率降低。一种CSMA的改进方案是使发送站点在传输过程中仍继续监听媒体,以检测是否存在冲突。
如果发生冲突,信道上可以检测到超过发送站点本身发送的载波信号的幅度,由此判断出冲突的存在。一旦检测到冲突,就立即停止发送,并向总线上发一串阻塞信号,用以通知总线上其它各有关站点。
(3)数据库访问冲突概率怎么判断扩展阅读:
非坚持算法,算法规则为:
假如媒本是空闲的,则可以立即发送。假如媒体是忙的,则等待一个由概率分布决定的随机重发延迟后,再重复前一步骤。采用随机的重发延迟时间可以减少冲突发生的可能性。
非坚持算法的缺点是:即使有几个着眼点为都有数据要发送,但由于大家都在延迟等待过程中,致使媒体仍可能处于空闲状态,使用率降低。
坚持算法,算法规则:
假如媒体空闲的,则可以立即发送。假如媒体是忙的,则继续监听,直至检测到媒体是空闲,立即发送。假如有冲突(在一段时间内未收到肯定的回复),则等待一随机量的时间,重复步骤。
这种算法的优点是:只要媒体空闲,站点就立即可发送,避免了媒体利用率的损失;其缺点是:假若有两个或两个以上的站点有数据要发送,冲突就不可避免。
D. cakephp2.1向数据库插入数据时,如何判定主键冲突
我记得cakephp所有表的主键都是id吧,你插入时,数据库id会自动加一;所以应该不会冲突吧!
E. SQL多用户访问数据库如何解决的冲突
sql多用户访问数据库其实就是事务并发,会引起如下问题:
1、脏读:一个事务读取到了另外一个事务没有提交的数据
事务1:更新一条数据
事务2:读取事务1更新的记录
事务1:调用commit进行提交
此时事务2读取到的数据是保存在数据库内存中的数据,称为脏读。
读到的数据为脏数据
详细解释:
脏读就是指:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,
另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个
事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
2、不可重复读:在同一事务中,两次读取同一数据,得到内容不同
事务1:查询一条记录
事务2:更新事务1查询的记录
事务2:调用commit进行提交
事务1:再次查询上次的记录
此时事务1对同一数据查询了两次,可得到的内容不同,称为不可重复读。
3、幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同
事务1:查询表中所有记录
事务2:插入一条记录
事务2:调用commit进行提交
事务1:再次查询表中所有记录
此时事务1两次查询到的记录是不一样的,称为幻读
详细解释:
幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,
这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表
中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,
就好象发生了幻觉一样。
处理以上隔离级别的问题,采用如下方是:
事务隔离五种级别:
TRANSACTION_NONE 不使用事务。
TRANSACTION_READ_UNCOMMITTED 允许脏读。
TRANSACTION_READ_COMMITTED 防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别
TRANSACTION_REPEATABLE_READ 可以防止脏读和不可重复读,
TRANSACTION_SERIALIZABLE 可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率
以上的五个事务隔离级别都是在Connection接口中定义的静态常量,
使用setTransactionIsolation(int level) 方法可以设置事务隔离级别。
如:con.setTransactionIsolation(Connection.REPEATABLE_READ);
注意:事务的隔离级别受到数据库的限制,不同的数据库支持的的隔离级别不一定相同
1 脏读:修改时加排他锁,直到事务提交后才释放,读取时加共享锁,读取完释放事务1读取数据时加上共享锁后(这 样在事务1读取数据的过程中,其他事务就不会修改该数据),不允许任何事物操作该数据,只能读取,之后1如果有更新操作,那么会转换为排他锁,其他事务更 无权参与进来读写,这样就防止了脏读问题。
但是当事务1读取数据过程中,有可能其他事务也读取了该数据,读取完毕后共享锁释放,此时事务1修改数据,修改 完毕提交事务,其他事务再次读取数据时候发现数据不一致,就会出现不可重复读问题,所以这样不能够避免不可重复读问题。
2 不可重复读:读取数据时加共享锁,写数据时加排他锁,都是事务提交才释放锁。读取时候不允许其他事物修改该数据,不管数据在事务过程中读取多少次,数据都是一致的,避免了不可重复读问题
3 幻读问题:采用的是范围锁RangeS RangeS_S模式,锁定检索范围为只读,这样就避免了幻影读问题。
F. C++通过ADO连接数据库出现出现访问冲突,请问具体什么原因
地址分配错误了吧
分配的过大过小或者内存溢出
G. 数据库考试题如何找冲突可串行化等价的串行化方案
这个是个可串行化调度,可以根据对数据库元素XYZ的 冲突访问画优先图来进行判断,如果没有环,那么就是可串行化的
第二个问 就是把串行化的调度顺序写出来,串行化调度为:
T3(R(Y))T3(W(Y))T3(R(Z))T4(R(Z))T4(W(Z))T1(R(X))T1(W(X))T1(W(Y))T2(R(X))T2(W(X))T2(R(Y))
根据这个可以基于冲突规则进行置换的,因此有
T3(R(Y))T3(W(Y))T3(R(Z))T1(R(X))T1(W(X))T1(W(Y))T2(R(X))T2(W(X))T2(R(Y))T4(R(Z))T4(W(Z))
T3(R(Y))T3(W(Y))T3(R(Z))T1(R(X))T1(W(X))T1(W(Y))T4(R(Z))T4(W(Z))T2(R(X))T2(W(X))T2(R(Y))
H. 数据库中这个怎么判断冲突等价
不是冲突等价的。
冲突等价的含义是“不同事务的一对操作,有些是冲突的,有些是不冲突的。不冲突操作的次序可以互相调换,不致影响执行的结果。凡是通过调换S中不冲突操作所得的新调度,称为S的冲突等价调度”(这段我从网上随便找的,但是意思差不多)。
然后,这个事务调度里面,我们关心Q的写操作Write(Q),可以看到在S1里面的顺序是T2,T1,T3。而写操作是互相冲突的,所以如果S2和S1冲突等价,那S2的Write(Q)也应该是T2,T1,T3这个顺序。但实际上S2中Write(Q)的顺序是T1,T2,T3。所以,这两不是冲突等价。
I. ado访问oracle数据库,出现错误0xc0000005,提示访问冲突。
这种错误一般是指访问了不属于自己的内存空间。出现这种错误有几种原因:
1、给一个数组分配了比较小的内存空间,然后又给该数组赋了一个比较大的值,举例说明:
char buf[10];
buf = "C++“读取位置 0x****** 时发生访问冲突”的可能原因C++“读取位置 0x****** 时发生访问冲突”的可能原因";
这样才访问buf的时候,就会出现错误
解决方法:给数组分配更大一些的内存空间,如char buf[1000];
2、句柄或指针在使用前被释放
解决方法:检查代码配合调试,揪出野指针
分析:
内存冲突问题经常发生于用malloc等进行内存分配后指针的使用。 C和C++中的指针,其优势很明显,灵活,方便,使用起来简单;劣势当然也很明显,就是容易导致系统崩溃,指针操作不当,或没有及时释放,或没有判断指针是否越界,或没有及时置空,这些都很容易导致系统崩溃,所以使用指针一定要考虑严谨