<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-14  評(píng)論-142  文章-0  trackbacks-0
      2006年6月15日

    1, 臟讀

    一個(gè)事務(wù)讀到另一個(gè)事務(wù),尚未提交的修改,就是臟讀。這里所謂的修改,除了Update操作,不要忘了,還包括
    Insert和Delete操作。

    臟讀的后果:如果后一個(gè)事務(wù)回滾,那么它所做的修改,統(tǒng)統(tǒng)都會(huì)被撤銷。前一個(gè)事務(wù)讀到的數(shù)據(jù),就是垃圾數(shù)據(jù)。


    舉個(gè)例子:預(yù)訂房間。
    有一張Reservation表,往表中插入一條記錄,來訂購(gòu)一個(gè)房間。

     事務(wù)1:在Reservation表中插入一條記錄,用于預(yù)訂99號(hào)房間。

     事務(wù)2:查詢,尚未預(yù)定的房間列表,因?yàn)?9號(hào)房間,已經(jīng)被事務(wù)1預(yù)訂。所以不在列表中。

     事務(wù)1:信用卡付款。由于付款失敗,導(dǎo)致整個(gè)事務(wù)回滾。
            所以插入到Reservation 表中的記錄并不置為持久(即它將被刪除)。

    現(xiàn)在99號(hào)房間則為可用。
    所以,事務(wù)2所用的是一個(gè)無(wú)效的房間列表,因?yàn)?9號(hào)房間,已經(jīng)可用。如果它是最后一個(gè)沒有被預(yù)定的房間,那么這將是一個(gè)嚴(yán)重的失誤。

    注:臟讀的后果很嚴(yán)重。

     

    2,不可重復(fù)讀。

    在同一個(gè)事務(wù)中,再次讀取數(shù)據(jù)時(shí)【就是你的select操作】,所讀取的數(shù)據(jù),和第1次讀取的數(shù)據(jù),不一樣了。就是不可重復(fù)讀。

    舉個(gè)例子:
     事務(wù)1:查詢有雙人床房間。99號(hào)房間,有雙人床。

     事務(wù)2:將99號(hào)房間,改成單人床房間。

     事務(wù)1:再次執(zhí)行查詢,請(qǐng)求所有雙人床房間列表,99號(hào)房間不再列表中了。也就是說,
                   事務(wù)1,可以看到其他事務(wù)所做的修改。


    在不可重復(fù)讀,里面,可以看到其他事務(wù)所做的修改,而導(dǎo)致2次的查詢結(jié)果不再一樣了。
    這里的修改,是提交過的。也可以是沒有提交的,這種情況同時(shí)也是臟讀。

    如果,數(shù)據(jù)庫(kù)系統(tǒng)的隔離級(jí)別。允許,不可重復(fù)讀。那么你啟動(dòng)一個(gè)事務(wù),并做一個(gè)select查詢操作。
    查詢到的數(shù)據(jù),就有可能,和你第2次,3次...n次,查詢到的數(shù)據(jù)不一樣。一般情況下,你只會(huì)做一次,select
    查詢,并以這一次的查詢數(shù)據(jù),作為后續(xù)計(jì)算的基礎(chǔ)。因?yàn)樵试S出現(xiàn),不可重復(fù)讀。那么任何
    時(shí)候,查詢到的數(shù)據(jù),都有可能被其他事務(wù)更新,查詢的結(jié)果將是不確定的。


    注:如果允許,不可重復(fù)讀,你的查詢結(jié)果,將是不確定的。一個(gè)不確定的結(jié)果,你能容忍嗎?


    3,幻讀

     

    事務(wù)1讀取指定的where子句所返回的一些行。然后,事務(wù)2插入一個(gè)新行,這個(gè)新行也滿足事務(wù)1使用的查詢
    where子句。然后事務(wù)1再次使用相同的查詢讀取行,但是現(xiàn)在它看到了事務(wù)2剛插入的行。這個(gè)行被稱為幻象,
    因?yàn)閷?duì)事務(wù)1來說,這一行的出現(xiàn)是不可思議的。

    舉個(gè)例子:
    事務(wù)1:請(qǐng)求沒有預(yù)定的,雙人床房間列表。
    事務(wù)2:向Reservation表中插入一個(gè)新紀(jì)錄,以預(yù)訂99號(hào)房間,并提交。
    事務(wù)1:再次請(qǐng)求有雙人床的未預(yù)定的房間列表,99號(hào)房間,不再位于列表中。


    注:幻讀,針對(duì)的是,Insert操作。如果事務(wù)2,插入的記錄,沒有提交。那么同時(shí)也是臟讀。

     

     

     

     

     

     


     

    posted @ 2009-04-13 12:37 liulang 閱讀(7331) | 評(píng)論 (0)編輯 收藏

     clob = rs.getClob(fieldName);

     String  rtn=clob.getSubString((long)1,(int)clob.length());

    posted @ 2009-04-08 12:17 liulang 閱讀(3195) | 評(píng)論 (3)編輯 收藏
    在resin3.0中,deploy是默認(rèn)的發(fā)布目錄,在MyEclipse中直接發(fā)布到resin的deploy目錄中,起動(dòng)服務(wù)器就會(huì)運(yùn)行發(fā)布的項(xiàng)目,而在resin-3.1.1中發(fā)布到deploy目錄下的項(xiàng)目不回運(yùn)行,需要修改conf目錄下的resin.conf文件,用editplus等文本編輯器打開,大概在229行左右,有一行 <web-app-deploy path="webapps"/>是建產(chǎn)發(fā)布目錄路徑的,我們?cè)诤筮吋由弦恍?<web-app-deploy path="deploy"/>,這樣在deploy目錄下的項(xiàng)目就能正常運(yùn)行了。
    posted @ 2009-04-07 10:22 liulang 閱讀(694) | 評(píng)論 (0)編輯 收藏
         摘要: java折半查找算法  閱讀全文
    posted @ 2007-09-06 18:02 liulang 閱讀(5227) | 評(píng)論 (4)編輯 收藏
         摘要: 這是面試的時(shí)候,最后一道算法題, 可能不習(xí)慣手寫代碼, 做錯(cuò)了,太沒面子了...
    回來一上機(jī)就寫出來了!
      閱讀全文
    posted @ 2007-09-05 17:04 liulang 閱讀(6501) | 評(píng)論 (5)編輯 收藏
         摘要: 面試?yán)峡歼@個(gè),都背熟了
      閱讀全文
    posted @ 2007-09-05 16:58 liulang 閱讀(94834) | 評(píng)論 (32)編輯 收藏
         摘要:   閱讀全文
    posted @ 2006-10-04 06:47 liulang 閱讀(594) | 評(píng)論 (0)編輯 收藏

    靜態(tài)單鏈表 :

    線性表的靜態(tài)單鏈表存儲(chǔ)結(jié)構(gòu) :

    #define MAXSIZE 100;

    ?

    typedef struct{

    ?

    ? ElemType data;

    ? int cur;

    ?

    }component,SLinkList[MAXSIZE];

    ?

    分析 :

    這種描述方法便于在不設(shè) 指針 類型的高級(jí)程序設(shè)計(jì)語(yǔ)言中 , 使用的鏈表結(jié)構(gòu) . 數(shù)組的零分量可看成頭節(jié)點(diǎn) . 這種結(jié)構(gòu)仍然需要預(yù)先分配一個(gè)較大的空間 . 但在插入和刪除的時(shí)候 , 不需要移動(dòng)元素 . 僅需要修改指針 . 所以仍然具有鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的主要優(yōu)點(diǎn) .

    ?

    基本操作 :

    (1) ?? 在靜態(tài)單鏈表中 , 查找第一個(gè)值為 e 的元素 .

    int LocateElem_L(SLinkList S, ElemType e)

    {

    ?

    ?? i = S[0].cur;

    ?? while(i && S[i].data != e) i=S[i].cur;

    ?? return i;

    ?

    }

    分析 :

    如果找不到相應(yīng)的元素 , 返回值為 0.


    (2) ???? 將一維數(shù)組 space 中的各個(gè)分量 , 鏈成一個(gè)備用的鏈表 .

    space[0].cur 為頭指針 .

    ?

    void InitSpace(SLinkList &space){

    ?

    ?

    ?? for(i =0;i<MAXSIZE-1;++i)

    ????? space[i].cur = i+1;

    ?? space[MAXSIZE-1].cur =0;

    ?

    }

    ?

    (3) ?? 如果備用空間的鏈表非空 , 則返回分配的節(jié)點(diǎn)下標(biāo) ,

    否則 , 返回 0;

    ?

    int Malloc_SL(SLinkList &space){

    ?

    ?? i=space[0].cur;

    ?? if(space[0].cur)

    ????? space[0].cur =space[i].cur;

    ?? return i;

    }

    (4) 將下標(biāo)為 k 的空閑節(jié)點(diǎn)回收到備用鏈表 .

    void Free_SL(SLinkList &space,int k)

    {

    space[k].cur =space[0].cur;

    space[0].cur = k;

    }


    (4) ?? 計(jì)算集合運(yùn)算 (A-B ) (B-A)

    假設(shè)由終端輸入集合元素 , 先建立表示集合 A 的靜態(tài)鏈表 S, 然后在輸入集合 B 的元素的同時(shí)查找 S , 如果存在相同的元素 , 則從 S 表中刪除 , 否則將其插入到 S 表中 .

    具體代碼如下 :

    void difference(SLinkList &space , int &s)

    {

    ?

    ????? InitSpace_SL(space);

    ????? s = Malloc_SL(space);

    ????? r=s;

    ????? scanf(m,n);

    ????? for(j=1;j<=m;++j)

    {???? i =Malloc_SL(space);

    ?????????? scanf(space[i].data);

    ?????????? space[r].cur =i;

    ?????????? r=i;

    ????? }? space[r].cur=0;

    for (j=1;j<=n;++j){

    ??? scanf(b);

    ??? p=s;k=space[s].cur;

    ??? while(k!=space[r].cur && space[k].data !=b)

    ??? { p=k;k=space[k].cur;}

    if (k==space[r].cur)

    {

    ??? ?? i = Malloc_SL(space);

    ??? ?? space[i].data = b;

    ??? ?? space[i].cur = space[r].cur;

    ??? ?? space[r].cur = i;

    ??? ?? r=i;

    ??? }

    ??? else{

    ????? space[p].cur =space[k].cur;

    ????? Free_SL(space,k);

    ????? if(r==k)

    ????? r=p;

    ??? }

    }

    }

    posted @ 2006-06-16 01:06 liulang 閱讀(1253) | 評(píng)論 (0)編輯 收藏

    線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) :

    鏈?zhǔn)酱鎯?chǔ)表示 :

    typedef struct LNode{

    ?

    ? ElemType ? data;

    ? Struct LNode *next;

    ?

    }LNode,*LinkList;

    基本操作在鏈表上的實(shí)現(xiàn) :

    (1) ?? 單鏈表的取元素算法(經(jīng)典

    Status GetElem_L(LinkList L, int i,ElemType &e)

    {

    ?

    p=L->next; j=1;

    while(p && j<i)

    {

    ????? p=p->next;++j;

    }

    if(!p || j>i) return ERROR;

    e=p->data;

    return OK;

    ?

    }

    算法分析 :

    基本操作是 : 比較 j I, 并把指針后移 , 循環(huán)體執(zhí)行的次數(shù) , 與被查元素的位置有關(guān) . 假設(shè)表長(zhǎng)為 n, 如果 1<=i<=n, 那么循環(huán)體中語(yǔ)句的執(zhí)行次數(shù)為 i-1. 否則次數(shù)為 n 所以時(shí)間復(fù)雜度為 O(n).

    ?

    ? (2) ?? 插入元素算法

    Status ListInsert_L(LinkList &L, int i,ElemType e)

    {

    ?

    ?? p=L;j=0;

    ?? while(p&&j<i-1)

    ????? { p=p->next;++j}

    ?? if(!p || j>i-1)

    ????? return ERROR;

    ?

    ?? s = (LinkList)malloc(sizeof(LNode));

    ?? s->data = e;

    ?? s->next = p->next;

    ?? p->next =s;

    ?? return OK;

    }
    (3) ?? 刪除元素算法

    Status ListDelete_L(LinkList &L, int i,ElemType &e)

    {

    ?? p=L;j=0;

    while(p &&j<i-1)

    ?? {p=p->next;++j}

    if(!p ||j>i-1)

    ????? return? ERROR;

    ??

    q=p->next;

    ?? p->next =q->next;

    ?? e =q->data;

    ?? free(q);

    ?? return OK;

    }

    ?

    算法分析 :

    插入和刪除算法 , 都要先找到第 i-1 個(gè)節(jié)點(diǎn) , 所以時(shí)間復(fù)雜度為 O(n);

    ? (4) ?? 單鏈表的建立算法

    ?

    void CreateList_L(LinkList &L,int n){

    ?

    ?L =(LinkList)malloc(sizeof(LNode));

    ?

    ?L->next = null;

    ? for(i = n;i>0;--i){

    ?

    ? p =(LinkList)malloc(sizeof(LNode));

    ? scanf(&p->data);

    ? p->next = L->next;

    ? L->next =p;

    ? }

    ?

    }

    算法分析 :

    按照逆序循環(huán)輸入 n 個(gè)數(shù)據(jù)元素的值 , 建立新節(jié)點(diǎn) . 并插入 . 因此算法的時(shí)間復(fù)雜度為 O(n).


    posted @ 2006-06-16 01:04 liulang 閱讀(952) | 評(píng)論 (3)編輯 收藏
    線性表 :
    是 n(n>=0) 個(gè)相同特性數(shù)據(jù)元素的有序序列 .
    ? 順序存儲(chǔ)結(jié)構(gòu)和實(shí)現(xiàn)
    線性表的順序存儲(chǔ)結(jié)構(gòu) , 可以隨機(jī)存取 . 邏輯上相鄰的兩個(gè)元素 , 在物理存儲(chǔ)上也是相鄰的 . 順序存儲(chǔ)表示 :
    ( 見源代碼 ) 基本操作在順序表上的實(shí)現(xiàn)
    ( 見源代碼 )
    四大基本操作 :
    (1) ?? 構(gòu)造一個(gè)空的線性表
    ( 簡(jiǎn)單 )
    (2) ?? 順序表的插入算法 .
    算法分析 :
    時(shí)間主要耗費(fèi)在移動(dòng)元素上 , 與問題的規(guī)模 (N) 和你插入元素的具體位置有關(guān) , 即插入元素位置越靠近 , 位序 1, 消耗的時(shí)間也就越多 . 設(shè)在位序 i 插入元素的概率位 pi=1/(n+1), 移動(dòng)元素的個(gè)數(shù)為 ,(n-i+1):
    ????? 那么在長(zhǎng)度為 n 的順序表中 , 插入一個(gè)元素 , 所需移動(dòng)元素的期望值為 :
    ????? E = ∑ P i*(n-i+1)???? (i=1,2,3,..,n+1)
    ????? ?=n/2;
    平均移動(dòng)表中的一半元素 . 時(shí)間復(fù)雜度 O( n )
    (3) ?? 順序表的刪除算法 .
    算法分析 :
    同上 , E = ∑ q i*(n-i)???? (i=1,2,3,..,n+1) qi=1/n
    ????? ? =(n-1)/2;
    時(shí)間復(fù)雜度為 O (n);
    (4) ?? 定位算法 .
    算法分析 :
    基本操作是進(jìn)行兩個(gè)元素之間的比較 , 假設(shè)存在該元素為 a i( 1 ≤ i ≤ n), 則比較的次數(shù)為 i, 否則為 n, 所以算法時(shí)間復(fù)雜度為 O(n); 順序存儲(chǔ)結(jié)構(gòu)的性能小結(jié) :
    優(yōu)點(diǎn) :
    (1) ?? 可以隨機(jī)存取 , 順序表中的數(shù)據(jù)元素 .
    (2) ?? 存儲(chǔ)空間連續(xù) , 不必要增加額外的存儲(chǔ)空間 . 比如如果你以鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ) , 那么你就不得不增加一個(gè)指針域 .
    缺點(diǎn) :
    (1) 插入和刪除一個(gè)元素 , 需要移動(dòng)大量元素 , 耗費(fèi)時(shí)間 .
    (2) 初始化順序表的時(shí)候 , 要預(yù)先分配一個(gè)最大空間 . 有時(shí)候會(huì)使存儲(chǔ)空間得不到充分利用 .
    (3) 容量難以擴(kuò)充 .
    posted @ 2006-06-15 17:25 liulang 閱讀(1515) | 評(píng)論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲精品第一国产综合境外资源| 久久精品一区二区免费看| 国产精品亚洲AV三区| 亚洲精品天堂无码中文字幕| 亚洲人成网男女大片在线播放| 亚洲人成在线播放| 亚洲综合偷自成人网第页色 | 无码人妻精品中文字幕免费| 中文字幕无码免费久久| 国产无遮挡无码视频免费软件| 中文字幕无码免费久久| 97公开免费视频| 巨波霸乳在线永久免费视频 | 中文字幕av免费专区| 在线观看免费黄色网址| 午夜不卡久久精品无码免费| 51在线视频免费观看视频| 大学生一级毛片免费看| 国产一区二区三区免费在线观看| 大胆亚洲人体视频| 亚洲色无码一区二区三区| 亚洲AV日韩AV永久无码下载| 亚洲网红精品大秀在线观看| 亚洲一级毛片在线观| 亚洲国产成人综合精品| 国产精品1024在线永久免费| 久久精品乱子伦免费| 97无码免费人妻超级碰碰夜夜| 日韩免费视频播播| 国产亚洲精品成人a v小说| 亚洲国产精品国自产电影| 亚洲中文无码a∨在线观看| 亚洲爆乳少妇无码激情| 国产V片在线播放免费无码| 99视频精品全部免费观看| 色窝窝免费一区二区三区| 亚洲日韩中文在线精品第一| 亚洲好看的理论片电影| 亚洲熟女综合一区二区三区| 精品无码一级毛片免费视频观看| 6080午夜一级毛片免费看6080夜福利 |