Javaweb面試題匯總(更新中)

java基礎(chǔ)

String

==用來判斷兩個(gè)變量是否相等時(shí)帖旨,如果兩個(gè)變量是基本類型變量扇商,且都是數(shù)值類型(不要求數(shù)據(jù)類型嚴(yán)格相同)毒姨,則只要兩個(gè)變量的值相等,就返回true溶浴;對(duì)于兩個(gè)引用類型變量乍迄,必須指向同一個(gè)對(duì)象,==才會(huì)返回true士败。
java中使用new String("hello")時(shí)闯两,jvm會(huì)先使用常量池來管理"hello"常量,再調(diào)用String類的構(gòu)造器創(chuàng)建一個(gè)新的String對(duì)象谅将,新創(chuàng)建的對(duì)象被保存在堆內(nèi)存中漾狼;而直接使用"hello"的字符串直接量,jvm會(huì)用常量池來管理這些字符串饥臂。故上述程序中str=="hello"返回結(jié)果為false

重載

方法重載是指在一個(gè)類中定義多個(gè)同名的方法逊躁,但要求每個(gè)方法具有不同的參數(shù)的類型或參數(shù)的個(gè)數(shù)。
原則如下:
一.方法名一定要相同隅熙。
二.方法的參數(shù)表必須不同稽煤,包括參數(shù)的類型或個(gè)數(shù)核芽,以此區(qū)分不同的方法體。
1.如果參數(shù)個(gè)數(shù)不同酵熙,就不管它的參數(shù)類型了轧简!
2.如果參數(shù)個(gè)數(shù)相同,那么參數(shù)的類型或者參數(shù)的順序必須不同绿店。
三.方法的返回類型吉懊、修飾符可以相同,也可不同假勿。

Arraylist linklist

A. ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)态鳖。 //正確转培,這里的所謂動(dòng)態(tài)數(shù)組并不是那個(gè)“ 有多少元素就申請(qǐng)多少空間 ”的意思,通過查看源碼浆竭,可以發(fā)現(xiàn)浸须,這個(gè)動(dòng)態(tài)數(shù)組是這樣實(shí)現(xiàn)的,如果沒指定數(shù)組大小邦泄,則申請(qǐng)默認(rèn)大小為10的數(shù)組删窒,當(dāng)元素個(gè)數(shù)增加,數(shù)組無法存儲(chǔ)時(shí)顺囊,系統(tǒng)會(huì)另個(gè)申請(qǐng)一個(gè)長(zhǎng)度為當(dāng)前長(zhǎng)度1.5倍的數(shù)組肌索,然后,把之前的數(shù)據(jù)拷貝到新建的數(shù)組特碳。

B. 對(duì)于隨機(jī)訪問get和set诚亚,ArrayList覺得優(yōu)于LinkedList,因?yàn)長(zhǎng)inkedList要移動(dòng)指針午乓。//正確站宗,ArrayList是數(shù)組,所以益愈,直接定位到相應(yīng)位置取元素梢灭,LinkedLIst是鏈表,所以需要從前往后遍歷蒸其。

C. 對(duì)于新增和刪除操作add和remove敏释,LinedList比較占優(yōu)勢(shì),因?yàn)锳rrayList要移動(dòng)數(shù)據(jù)枣接。//正確颂暇,ArrayList的新增和刪除就是數(shù)組的新增和刪除,LinkedList與鏈表一致但惶。

D. ArrayList的空間浪費(fèi)主要體現(xiàn)在在list列表的結(jié)尾預(yù)留一定的容量空間耳鸯,而LinkedList的空間花費(fèi)則體現(xiàn)在它的每一個(gè)元素都需要消耗相當(dāng)?shù)目臻g湿蛔。//正確,因?yàn)锳rrayList空間的增長(zhǎng)率為1.5倍县爬,所以阳啥,最后很可能留下一部分空間是沒有用到的,因此财喳,會(huì)造成浪費(fèi)的情況察迟。對(duì)于LInkedList的話,由于每個(gè)節(jié)點(diǎn)都需要額外的指針耳高,所以扎瓶,你懂的。

抽象類 最終類

抽象類和最終類都可以被聲明使用泌枪。
這里只是說“聲明”概荷,并沒有說“實(shí)例化”;如果只是聲明是可以的碌燕,最常見的使用方式就是:
1误证、父類類型的引用指向子類的對(duì)象;
2修壕、 接口類型的引用指向該接口的實(shí)現(xiàn)類的對(duì)象愈捅;
以上兩種使用方式也就是所謂的“向上轉(zhuǎn)型”。
ps:最終類就是被final修飾的類慈鸠,最終方法就是被final修飾的方法蓝谨。最終類不能被繼承,最終方法不能被重寫林束。

Collection Collections

Collection是單列集合的頂層接口,Map是雙列集合的頂層接口
Collections是一個(gè)集合的工具類像棘,提供了排序、查找等操作集合的一些常用方法

servlet層級(jí)結(jié)構(gòu)和常用類

Java中有關(guān)servlet的層級(jí)結(jié)構(gòu)和常用的類的描述:

  1. GenericServlet類:抽象類壶冒,定義一個(gè)通用的缕题、獨(dú)立于底層協(xié)議的Servlet。
  2. 大多數(shù)Servlet通過從GenericServlet或HttpServlet類進(jìn)行擴(kuò)展來實(shí)現(xiàn)
  3. ServletConfig接口定義了在Servlet初始化的過程中由Servlet容器傳遞給Servlet得配置信息對(duì)象
  4. HttpServletRequest接口擴(kuò)展ServletRequest接口胖腾,為HTTP Servlet提供HTTP請(qǐng)求信息
    HttpServlet是GenericServlet的子類烟零。
    GenericServlet是個(gè)抽象類,必須給出子類才能實(shí)例化咸作。它給 出了設(shè)計(jì)servlet的一些骨架锨阿,定義了servlet生命周期,還有一些得到名字记罚、配置墅诡、初始化參數(shù)的方法,其設(shè)計(jì)的是和應(yīng)用層協(xié)議無關(guān)的桐智,也就是說 你有可能用非http協(xié)議實(shí)現(xiàn)它末早。
    HttpServlet是子類烟馅,當(dāng)然就具有GenericServlet的一切特性,還添加了doGet, doPost, doDelete, doPut, doTrace等方法對(duì)應(yīng)處理http協(xié)議里的命令的請(qǐng)求響應(yīng)過程然磷。
    一般沒有特殊需要郑趁,自己寫的Servlet都擴(kuò)展HttpServlet 。

Ant 與 Maven

Ant和Maven都是基于Java的構(gòu)建(build)工具姿搜。理論上來說寡润,有些類似于(Unix)C中的make ,但沒有make的缺陷舅柜。Ant是軟件構(gòu)建工具梭纹,Maven的定位是軟件項(xiàng)目管理和理解工具。
Ant特點(diǎn) ?
沒有一個(gè)約定的目錄結(jié)構(gòu) ?必須明確讓ant做什么致份,什么時(shí)候做栗柒,然后編譯,打包 ?沒有生命周期知举,必須定義目標(biāo)及其實(shí)現(xiàn)的任務(wù)序列 ?沒有集成依賴管理
Maven特點(diǎn)
?擁有約定,知道你的代碼在哪里太伊,放到哪里去 ?擁有一個(gè)生命周期雇锡,例如執(zhí)行 mvn install 就可以自動(dòng)執(zhí)行編譯,測(cè)試僚焦,打包等構(gòu)建過程 ?只需要定義一個(gè)pom.xml,然后把源碼放到默認(rèn)的目錄锰提,Maven幫你處理其他事情 ?擁有依賴管理,倉庫管理

java運(yùn)行時(shí)的數(shù)據(jù)區(qū)

Java運(yùn)行時(shí)的數(shù)據(jù)區(qū)包括:(其中前兩個(gè)是線程共享的)
1.方法區(qū)(Method Area) 存儲(chǔ)已被虛擬機(jī)加載的類信息芳悲、常量立肘、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)
2.堆(Heap) 存放對(duì)象實(shí)例名扛,幾乎所有對(duì)象實(shí)例都在這里分配內(nèi)存
3.虛擬機(jī)棧(VM Stack) 描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法在執(zhí)行的同時(shí)會(huì)創(chuàng)建一個(gè)Stack Frame(方法運(yùn)行時(shí)的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu))用于存儲(chǔ)局部變量表谅年、操作數(shù)棧、動(dòng)態(tài)連接肮韧、方法出口等信息
4.本地方法棧(Native Method Stack) 與虛擬機(jī)棧了類似融蹂,不過則為虛擬機(jī)使用的到的Native方法服務(wù)。(有的虛擬機(jī)譬如Sun HotSpot虛擬機(jī)直接把本地方法棧和虛擬機(jī)棧合二為一)
5.程序計(jì)數(shù)器(Program Counter Register) 可看作當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)的標(biāo)識(shí)器

Object Condition Thread線程控制方法(wait notify notifyAll)

wait()弄企、notify()和notifyAll()是 Object類 中的方法
從這三個(gè)方法的文字描述可以知道以下幾點(diǎn)信息:
1)wait()超燃、notify()和notifyAll()方法是本地方法,并且為final方法拘领,無法被重寫意乓。

2)調(diào)用某個(gè)對(duì)象的wait()方法能讓當(dāng)前線程阻塞,并且當(dāng)前線程必須擁有此對(duì)象的monitor(即鎖)

3)調(diào)用某個(gè)對(duì)象的notify()方法能夠喚醒一個(gè)正在等待這個(gè)對(duì)象的monitor的線程约素,如果有多個(gè)線程都在等待這個(gè)對(duì)象的monitor届良,則只能喚醒其中一個(gè)線程笆凌;

4)調(diào)用notifyAll()方法能夠喚醒所有正在等待這個(gè)對(duì)象的monitor的線程;


  • 有同學(xué)可能會(huì)有疑問:為何這三個(gè)不是Thread類聲明中的方法伙窃,而是Object類中聲明的方法
    (當(dāng)然由于Thread類繼承了Object類菩颖,所以Thread也可以調(diào)用者三個(gè)方法)?其實(shí)這個(gè)問
    題很簡(jiǎn)單为障,由于每個(gè)對(duì)象都擁有monitor(即鎖)晦闰,所以讓當(dāng)前線程等待某個(gè)對(duì)象的鎖,當(dāng)然
    應(yīng)該通過這個(gè)對(duì)象來操作了鳍怨。而不是用當(dāng)前線程來操作呻右,因?yàn)楫?dāng)前線程可能會(huì)等待多個(gè)線程
    的鎖,如果通過線程來操作鞋喇,就非常復(fù)雜了声滥。
    上面已經(jīng)提到,如果調(diào)用某個(gè)對(duì)象的wait()方法侦香,當(dāng)前線程必須擁有這個(gè)對(duì)象的monitor(即
    鎖)落塑,因此調(diào)用wait()方法必須在同步塊或者同步方法中進(jìn)行(synchronized塊或者
    synchronized方法)。
    調(diào)用某個(gè)對(duì)象的wait()方法罐韩,相當(dāng)于讓當(dāng)前線程交出此對(duì)象的monitor憾赁,然后進(jìn)入等待狀態(tài),
    等待后續(xù)再次獲得此對(duì)象的鎖(Thread類中的sleep方法使當(dāng)前線程暫停執(zhí)行一段時(shí)間散吵,從
    而讓其他線程有機(jī)會(huì)繼續(xù)執(zhí)行龙考,但它并不釋放對(duì)象鎖);
    notify()方法能夠喚醒一個(gè)正在等待該對(duì)象的monitor的線程矾睦,當(dāng)有多個(gè)線程都在等待該對(duì)象
    的monitor的話晦款,則只能喚醒其中一個(gè)線程,具體喚醒哪個(gè)線程則不得而知枚冗。
    同樣地缓溅,調(diào)用某個(gè)對(duì)象的notify()方法,當(dāng)前線程也必須擁有這個(gè)對(duì)象的monitor官紫,因此調(diào)用
    notify()方法必須在同步塊或者同步方法中進(jìn)行(synchronized塊或者synchronized方法)肛宋。
    nofityAll()方法能夠喚醒所有正在等待該對(duì)象的monitor的線程,這一點(diǎn)與notify()方法是不同的束世。

  • Condition是在java 1.5中才出現(xiàn)的酝陈,它用來替代傳統(tǒng)的Object的wait()、notify()實(shí)現(xiàn)線程間的協(xié)作毁涉,相比使用Object的wait()沉帮、notify(),使用Condition的await()、signal()這種方式實(shí)現(xiàn)線程間協(xié)作更加安全和高效穆壕。因此通常來說比較推薦使用Condition待牵,阻塞隊(duì)列實(shí)際上是使用了Condition來模擬線程間協(xié)作。
    Condition是個(gè)接口喇勋,基本的方法就是await()和signal()方法缨该;
    Condition依賴于Lock接口,生成一個(gè)Condition的基本代碼是lock.newCondition()
    調(diào)用Condition的await()和signal()方法川背,都必須在lock保護(hù)之內(nèi)贰拿,就是說必須在lock.lock()和lock.unlock之間才可以使用Conditon中的await()對(duì)應(yīng)Object的wait(); Condition中的signal()對(duì)應(yīng)Object的notify()熄云; Condition中的signalAll()對(duì)應(yīng)Object的notifyAll()膨更。

  • Thread類對(duì)線程執(zhí)行控制的方法是sleep。

forward 和 redirect的區(qū)別

  1. 從地址欄顯示來說
    forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址.
    redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址.所以地址欄顯示的是新的URL.
  2. 從數(shù)據(jù)共享來說
    forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).
    redirect:不能共享數(shù)據(jù).
  3. 從運(yùn)用地方來說
    forward:一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊.
    redirect:一般用于用戶注銷登陸時(shí)返回主頁面和跳轉(zhuǎn)到其它的網(wǎng)站等.
  4. 從效率來說
    forward:高.
    redirect:低.

本質(zhì)區(qū)別

  • 解釋一  
    一句話缴允,轉(zhuǎn)發(fā)是服務(wù)器行為荚守,重定向是客戶端行為。為什么這樣說呢练般,這就要看兩個(gè)動(dòng)作的工作流程:
轉(zhuǎn)發(fā)過程:

客戶瀏覽器發(fā)送http請(qǐng)求----》web服務(wù)器接受此請(qǐng)求--》調(diào)用內(nèi)部的一個(gè)方法在容器內(nèi)部完成請(qǐng)求處理和轉(zhuǎn)發(fā)動(dòng)作----》將目標(biāo)資源 發(fā)送給客戶矗漾;在這里,轉(zhuǎn)發(fā)的路徑必須是同一個(gè)web容器下的url薄料,其不能轉(zhuǎn)向到其他的web路徑上去缩功,中間傳遞的是自己的容器內(nèi)的request。在客 戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑都办,也就是說客戶是感覺不到服務(wù)器做了轉(zhuǎn)發(fā)的。轉(zhuǎn)發(fā)行為是瀏覽器只做了一次訪問請(qǐng)求虑稼。

重定向過程:

客戶瀏覽器發(fā)送http請(qǐng)求----》web服務(wù)器接受后發(fā)送302狀態(tài)碼響應(yīng)及對(duì)應(yīng)新的location給客戶瀏覽器--》客戶瀏覽器發(fā)現(xiàn) 是302響應(yīng)琳钉,則自動(dòng)再發(fā)送一個(gè)新的http請(qǐng)求,請(qǐng)求url是新的location地址----》服務(wù)器根據(jù)此請(qǐng)求尋找資源并發(fā)送給客戶蛛倦。在這里 location可以重定向到任意URL歌懒,既然是瀏覽器重新發(fā)出了請(qǐng)求,則就沒有什么request傳遞的概念了溯壶。在客戶瀏覽器路徑欄顯示的是其重定向的 路徑及皂,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請(qǐng)求的且改。

  • 解釋二
    重定向验烧,其實(shí)是兩次request, 第一次,客戶端request A,服務(wù)器響應(yīng)又跛,并response回來碍拆,告訴瀏覽器,你應(yīng)該去B。這個(gè)時(shí)候IE可以看到地址變了感混,而且歷史的回退按鈕也亮了端幼。重定向可以訪問自己web應(yīng)用以外的資源。在重定向的過程中弧满,傳輸?shù)男畔?huì)被丟失婆跑。
  • 解釋三
    假設(shè)你去辦理某個(gè)執(zhí)照,
重定向:

你先去了A局庭呜,A局的人說:“這個(gè)事情不歸我們管滑进,去B局”,然后疟赊,你就從A退了出來郊供,自己乘車去了B局。

轉(zhuǎn)發(fā):

你先去了A局近哟,A局看了以后驮审,知道這個(gè)事情其實(shí)應(yīng)該B局來管,但是他沒有把你退回來吉执,而是讓你坐一會(huì)兒疯淫,自己到后面辦公室聯(lián)系了B的人,讓他們辦好后戳玫,送了過來熙掺。

AOP和OOP差別

AOP和OOP都是一套方法論,也可以說成設(shè)計(jì)模式咕宿、思維方式币绩、理論規(guī)則等等。
AOP不能替代OOP府阀,OOP是obejct abstraction缆镣,而AOP是concern abstraction,前者主要是對(duì)對(duì)象的抽象试浙,諸如抽象出某類業(yè)務(wù)對(duì)象的公用接口董瞻、報(bào)表業(yè)務(wù)對(duì)象的邏輯封裝,更注重于某些共同對(duì)象共有行為的抽象田巴,如報(bào)表模塊中專門需要報(bào)表業(yè)務(wù)邏輯的封裝钠糊,其他模塊中需要其他的邏輯抽象 ,而AOP則是對(duì)分散在各個(gè)模塊中的共同行為的抽象壹哺,即關(guān)注點(diǎn)抽象抄伍。一些系統(tǒng)級(jí)的問題或者思考起來總與業(yè)務(wù)無關(guān)又多處存在的功能,可使用AOP管宵,如異常信息處理機(jī)制統(tǒng)一將自定義的異常信息寫入響應(yīng)流進(jìn)而到前臺(tái)展示逝慧、行為日志記錄用戶操作過的方法等昔脯,這些東西用OOP來做,就是一個(gè)良好的接口笛臣、各處調(diào)用云稚,但有時(shí)候會(huì)發(fā)現(xiàn)太多模塊調(diào)用的邏輯大都一致、并且與核心業(yè)務(wù)無大關(guān)系沈堡,可以獨(dú)立開來静陈,讓處理核心業(yè)務(wù)的人專注于核心業(yè)務(wù)的處理,關(guān)注分離了诞丽,自然代碼更獨(dú)立鲸拥、更易調(diào)試分析亥鸠、更具好維護(hù)贷掖。
核心業(yè)務(wù)還是要OOP來發(fā)揮作用,與AOP的側(cè)重點(diǎn)不一樣酥郭,前者有種縱向抽象的感覺懂衩,后者則是橫向抽象的感覺撞叨, AOP只是OOP的補(bǔ)充,無替代關(guān)系浊洞。

ArrayList構(gòu)造函數(shù)

ArrayList的構(gòu)造函數(shù)總共有三個(gè):
(1)ArrayList()構(gòu)造一個(gè)初始容量為 10 的空列表牵敷。
(2)ArrayList(Collection<? extends E> c)構(gòu)造一個(gè)包含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的法希。
(3)ArrayList(int initialCapacity)構(gòu)造一個(gè)具有指定初始容量的空列表枷餐。

異常類

異常類繼承關(guān)系

都是Throwable的子類:
1.Exception(異常) :是程序本身可以處理的異常。
2.Error(錯(cuò)誤): 是程序無法處理的錯(cuò)誤苫亦。這些錯(cuò)誤表示故障發(fā)生于虛擬機(jī)自身毛肋、或者發(fā)生在虛擬機(jī)試圖執(zhí)行應(yīng)用時(shí),一般不需要程序處理屋剑。
3.檢查異常(編譯器要求必須處置的異常) : 除了Error村生,RuntimeException及其子類以外,其他的Exception類及其子類都屬于可查異常饼丘。這種異常的特點(diǎn)是Java編譯器會(huì)檢查它,也就是說辽话,當(dāng)程序中可能出現(xiàn)這類異常肄鸽,要么用try-catch語句捕獲它,要么用throws子句聲明拋出它油啤,否則編譯不會(huì)通過典徘。
4.非檢查異常(編譯器不要求處置的異常): 包括運(yùn)行時(shí)異常(RuntimeException與其子類)和錯(cuò)誤(Error)。

數(shù)據(jù)庫

數(shù)據(jù)庫讀取

一益咬、臟讀逮诲、不可重復(fù)讀、幻讀
1、臟讀:臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問數(shù)據(jù)梅鹦,并且對(duì)數(shù)據(jù)進(jìn)行了修改裆甩,而這種修改還沒有提交到數(shù)據(jù)庫中,這時(shí)齐唆,另外一個(gè)事務(wù)也訪問這個(gè)數(shù)據(jù)嗤栓,然后使用了這個(gè)數(shù)據(jù)。
例如:
張三的工資為5000,事務(wù)A中把他的工資改為8000,但事務(wù)A尚未提交箍邮。
與此同時(shí)茉帅,
事務(wù)B正在讀取張三的工資,讀取到張三的工資為8000锭弊。
隨后堪澎,
事務(wù)A發(fā)生異常,而回滾了事務(wù)味滞。張三的工資又回滾為5000樱蛤。
最后,
事務(wù)B讀取到的張三工資為8000的數(shù)據(jù)即為臟數(shù)據(jù)桃犬,事務(wù)B做了一次臟讀刹悴。
2、不可重復(fù)讀:是指在一個(gè)事務(wù)內(nèi)攒暇,多次讀同一數(shù)據(jù)土匀。在這個(gè)事務(wù)還沒有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問該同一數(shù)據(jù)形用。那么就轧,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改田度,那么第一個(gè)事務(wù)兩次讀到的的數(shù)據(jù)可能是不一樣的妒御。這樣就發(fā)生了在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復(fù)讀镇饺。
例如:
在事務(wù)A中乎莉,讀取到張三的工資為5000,操作沒有完成奸笤,事務(wù)還沒提交惋啃。
與此同時(shí),
事務(wù)B把張三的工資改為8000监右,并提交了事務(wù)边灭。
隨后,
在事務(wù)A中健盒,再次讀取張三的工資绒瘦,此時(shí)工資變?yōu)?000称簿。在一個(gè)事務(wù)中前后兩次讀取的結(jié)果并不致,導(dǎo)致了不可重復(fù)讀惰帽。
3憨降、幻讀:是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改善茎,這種修改涉及到表中的全部數(shù)據(jù)行券册。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù)垂涯,這種修改是向表中插入一行新數(shù)據(jù)烁焙。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行耕赘,就好象發(fā)生了幻覺一樣骄蝇。
例如:
目前工資為5000的員工有10人,事務(wù)A讀取所有工資為5000的人數(shù)為10人操骡。
此時(shí)九火,
事務(wù)B插入一條工資也為5000的記錄。
這是册招,事務(wù)A再次讀取工資為5000的員工岔激,記錄為11人。此時(shí)產(chǎn)生了幻讀是掰。

4虑鼎、提醒
不可重復(fù)讀的重點(diǎn)是修改:
同樣的條件,你讀取過的數(shù)據(jù)键痛,再次讀取出來發(fā)現(xiàn)值不一樣了
幻讀的重點(diǎn)在于新增或者刪除:
同樣的條件炫彩,第 1 次和第 2 次讀出來的記錄數(shù)不一樣

算法

前端部分

防御

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市絮短,隨后出現(xiàn)的幾起案子江兢,更是在濱河造成了極大的恐慌,老刑警劉巖丁频,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杉允,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡席里,警方通過查閱死者的電腦和手機(jī)叔磷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胁勺,“玉大人,你說我怎么就攤上這事独旷∈鹚耄” “怎么了寥裂?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)案疲。 經(jīng)常有香客問我封恰,道長(zhǎng),這世上最難降的妖魔是什么褐啡? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任诺舔,我火速辦了婚禮,結(jié)果婚禮上备畦,老公的妹妹穿的比我還像新娘低飒。我一直安慰自己,他們只是感情好懂盐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布褥赊。 她就那樣靜靜地躺著,像睡著了一般莉恼。 火紅的嫁衣襯著肌膚如雪拌喉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天俐银,我揣著相機(jī)與錄音尿背,去河邊找鬼。 笑死捶惜,一個(gè)胖子當(dāng)著我的面吹牛田藐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播售躁,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼坞淮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了陪捷?” 一聲冷哼從身側(cè)響起回窘,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎市袖,沒想到半個(gè)月后啡直,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苍碟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年酒觅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片微峰。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舷丹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜓肆,到底是詐尸還是另有隱情颜凯,我是刑警寧澤谋币,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站症概,受9級(jí)特大地震影響蕾额,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彼城,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一诅蝶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧募壕,春花似錦调炬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至习柠,卻和暖如春匀谣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背资溃。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工武翎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溶锭。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓宝恶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親趴捅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垫毙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法拱绑,內(nèi)部類的語法综芥,繼承相關(guān)的語法,異常的語法猎拨,線程的語...
    子非魚_t_閱讀 31,581評(píng)論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在膀藐,面了一些公司,掛了不少红省,但最終還是拿到小米额各、百度、阿里吧恃、京東虾啦、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,184評(píng)論 11 349
  • (一)Java部分 1傲醉、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,071評(píng)論 0 62
  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,498評(píng)論 3 93
  • 1.需求.在view上展示一個(gè)label,用來顯示當(dāng)前時(shí)間并走秒2.思路.有兩個(gè)方法,一個(gè)是用Timer,創(chuàng)建一個(gè)...
    iOS_Developer閱讀 2,531評(píng)論 0 2