別人家的Java面試

一另患、private修飾的方法可以通過(guò)反射訪問(wèn)纽乱,那么private的意義是什么
主要抓住兩點(diǎn):

  1. Java的private修飾符并不是為了絕對(duì)安全性設(shè)計(jì)的,更多是對(duì)用戶常規(guī)使用Java的一種 約束昆箕;
  2. 從外部對(duì)對(duì)象進(jìn)行常規(guī)調(diào)用時(shí)鸦列,能夠看到清晰的類結(jié)構(gòu)

二、Java類初始化順序

  1. 基類靜態(tài)代碼塊鹏倘,基類靜態(tài)成員字段(并列優(yōu)先級(jí)薯嗤,按照代碼中出現(xiàn)的先后順序執(zhí)行,且只有第一次加載時(shí)執(zhí)行)
  2. 派生類靜態(tài)代碼塊纤泵,派生類靜態(tài)成員字段(并列優(yōu)先級(jí)骆姐,按照代碼中出現(xiàn)的先后順序執(zhí)行,且只有第一次加載時(shí)執(zhí)行)
  3. 基類普通代碼塊捏题,基類普通成員字段(并列優(yōu)點(diǎn)級(jí)玻褪,按代碼中出現(xiàn)先后順序執(zhí)行)
  4. 基類構(gòu)造函數(shù)
  5. 派生類普通代碼塊,派生類普通成員字段(并列優(yōu)點(diǎn)級(jí)公荧,按代碼中出現(xiàn)先后順序執(zhí)行)
  6. 派生類構(gòu)造函數(shù)

三带射、對(duì)方法區(qū)和永久區(qū)的理解以及它們之間的關(guān)系
方法區(qū)是jvm規(guī)范里要求的,永久區(qū)是Hotspot虛擬機(jī)對(duì)方法區(qū)的具體實(shí)現(xiàn)循狰。前者是規(guī)范窟社,后者是實(shí)現(xiàn)方式券勺。jdk1.8作了改變。

四灿里、一個(gè)Java文件有3個(gè)類关炼,編譯后有幾個(gè)class文件
3個(gè)。文件中有幾個(gè)類匣吊,編譯后就有幾個(gè)class文件盗扒。

五、局部變量使用前需要顯式地賦值缀去,否則編譯通過(guò)不了侣灶,為什么這么設(shè)計(jì)?

  1. 成員變量是可以不經(jīng)初始化的缕碎,在類加載過(guò)程的準(zhǔn)備階段即可給它賦予默認(rèn)值褥影,但局部變量使用前需要顯式賦予初始值。javac足夠有能力推斷出局部變量并初始化默認(rèn)值咏雌,然而它并沒(méi)有這樣做凡怎。
  2. 對(duì)于成員變量而言,其賦值和取值訪問(wèn)的先后順序具有不確定性赊抖,對(duì)于成員變量可以在一個(gè)方法調(diào)用前賦值统倒,也可以在方法調(diào)用后進(jìn)行,這是運(yùn)行時(shí)發(fā)生的氛雪,編譯器決定不了房匆,交給jvm去做比較合適。
  3. 而對(duì)于局部變量而言报亩,其賦值和取值訪問(wèn)順序是確定的浴鸿。這樣設(shè)計(jì)是一種約束,盡最大程度減少使用者犯錯(cuò)的可能(假使局部變量可以使用默認(rèn)值弦追,開(kāi)發(fā)者可能無(wú)意間忘記賦值岳链,進(jìn)而導(dǎo)致不可預(yù)期的情況出現(xiàn))。

六劲件、ReadWriteLock讀寫(xiě)之間互斥嗎
ReadWriteRock 讀寫(xiě)鎖掸哑,使用場(chǎng)景可分為讀/讀、讀/寫(xiě)零远、寫(xiě)/寫(xiě)苗分,除了讀和讀之間是共享的,其它都是互斥的遍烦。怎樣實(shí)現(xiàn)互斥鎖和同步鎖俭嘁, 涉及到AQS,CAS服猪。

七供填、AQS和CAS原理
抽象隊(duì)列同步器AQS(AbstractQueuedSychronizer)拐云,如果說(shuō)java.util.concurrent的基礎(chǔ)是CAS的話,那么AQS就是整個(gè)Java并發(fā)包的核心了近她,ReentrantLock叉瘩、CountDownLatch、Semaphore等都用到了它粘捎。AQS實(shí)際上以雙向隊(duì)列的形式連接所有的Entry薇缅,比方說(shuō)ReentrantLock,所有等待的線程都被放在一個(gè)Entry中并連成雙向隊(duì)列攒磨,前面一個(gè)線程使用ReentrantLock好了泳桦,則雙向隊(duì)列實(shí)際上的第一個(gè)Entry開(kāi)始運(yùn)行。AQS定義了對(duì)雙向隊(duì)列所有的操作娩缰,而只開(kāi)放了tryLock和tryRelease方法給開(kāi)發(fā)者使用灸撰,開(kāi)發(fā)者可以根據(jù)自己的實(shí)現(xiàn)重寫(xiě)tryLock和tryRelease方法,以實(shí)現(xiàn)自己的并發(fā)功能拼坎。

比較并替換CAS(Compare and Swap)浮毯,假設(shè)有三個(gè)操作數(shù):內(nèi)存值V、舊的預(yù)期值A(chǔ)泰鸡、要修改的值B债蓝,當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時(shí),才會(huì)將內(nèi)存值修改為B并返回true盛龄,否則什么都不做并返回false饰迹,整個(gè)比較并替換的操作是一個(gè)原子操作。CAS一定要volatile變量配合讯嫂,這樣才能保證每次拿到的變量是主內(nèi)存中最新的相應(yīng)值蹦锋,否則舊的預(yù)期值A(chǔ)對(duì)某條線程來(lái)說(shuō),永遠(yuǎn)是一個(gè)不會(huì)變的值A(chǔ)欧芽,只要某次CAS操作失敗,下面永遠(yuǎn)都不可能成功葛圃。

CAS雖然比較高效的解決了原子操作問(wèn)題千扔,但仍存在三大問(wèn)題。

  • 循環(huán)時(shí)間長(zhǎng)開(kāi)銷很大库正。
  • 只能保證一個(gè)共享變量的原子操作曲楚。
  • ABA問(wèn)題。

八褥符、Semaphore拿到執(zhí)行權(quán)的線程之間是否互斥
Semaphore拿到執(zhí)行權(quán)的線程之間是否互斥龙誊,Semaphore栅葡、CountDownLatch郑叠、CyclicBarrier、Exchanger 為Java并發(fā)編程的4個(gè)輔助類,面試中常問(wèn)的 CountDownLatch CyclicBarrier之間的區(qū)別被因,面試者肯定是經(jīng)常碰到的, 所以問(wèn)起來(lái)意義不大玄妈,Semaphore問(wèn)的相對(duì)少一些凰荚,有些知識(shí)點(diǎn)如果沒(méi)有使用過(guò)還是會(huì)忽略,Semaphore可有多把鎖叽讳,可允許多個(gè)線程同時(shí)擁有執(zhí)行權(quán)追他,這些有執(zhí)行權(quán)的線程如并發(fā)訪問(wèn)同一對(duì)象,會(huì)產(chǎn)生線程安全問(wèn)題岛蚤。

九邑狸、B樹(shù)和B+樹(shù)是解決什么樣的問(wèn)題的,怎樣演化過(guò)來(lái)涤妒,之間區(qū)別
B樹(shù)和B+樹(shù)推溃,這題既問(wèn)mysql索引的實(shí)現(xiàn)原理,也問(wèn)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)届腐。首先從二叉樹(shù)說(shuō)起铁坎,因?yàn)闀?huì)產(chǎn)生退化現(xiàn)象,提出了平衡二叉樹(shù)犁苏;再提出怎樣讓每一層放的節(jié)點(diǎn)多一些來(lái)減少遍歷高度硬萍,引申出m叉樹(shù),m叉搜索樹(shù)同樣會(huì)有退化現(xiàn)象围详,引出m叉平衡樹(shù)朴乖,也就是B樹(shù)。這時(shí)候每個(gè)節(jié)點(diǎn)既放了key也放了value助赞,怎樣使每個(gè)節(jié)點(diǎn)放盡可能多的key值买羞,以減少遍歷高度呢(訪問(wèn)磁盤(pán)次數(shù)),可以將每個(gè)節(jié)點(diǎn)只放key值雹食,將value值放在葉子結(jié)點(diǎn)畜普,在葉子結(jié)點(diǎn)的value值增加指向相鄰節(jié)點(diǎn)指針,這就是優(yōu)化后的B+樹(shù)群叶。然后談?wù)剶?shù)據(jù)庫(kù)索引失效的情況吃挑,為什么給離散度低的字段(如性別)建立索引是不可取的,查詢數(shù)據(jù)反而更慢街立,如果將離散度高的字段和性別建立聯(lián)合索引會(huì)怎樣舶衬,有什么需要注意的?

十赎离、mysql給離散度低的字段建立索引會(huì)出現(xiàn)什么問(wèn)題逛犹,具體說(shuō)下原因
先上結(jié)論:重復(fù)性較強(qiáng)的字段,不適合添加索引。mysql給離散度低的字段虽画,比如性別設(shè)置索引舞蔽,再以性別作為條件進(jìn)行查詢反而會(huì)更慢。

一個(gè)表可能會(huì)涉及兩個(gè)數(shù)據(jù)結(jié)構(gòu)(文件)狸捕,一個(gè)是表本身喷鸽,存放表中的數(shù)據(jù),另一個(gè)是索引灸拍。索引是什么做祝?它就是把一個(gè)或幾個(gè)字段(組合索引)按規(guī)律排列起來(lái),再附上該字段所在行數(shù)據(jù)的物理地址(位于表中)鸡岗。比如我們有個(gè)字段是年齡混槐,如果要選取某個(gè)年齡段的所有行,那么一般情況下可能需要進(jìn)行一次全表掃描轩性。但如果以這個(gè)年齡段建個(gè)索引声登,那么索引中會(huì)按年齡值根據(jù)特定數(shù)據(jù)結(jié)構(gòu)建一個(gè)排列,這樣在索引中就能迅速定位揣苏,不需要進(jìn)行全表掃描悯嗓。為什么性別不適合建索引呢?因?yàn)樵L問(wèn)索引需要付出額外的IO開(kāi)銷卸察,從索引中拿到的只是地址脯厨,要想真正訪問(wèn)到數(shù)據(jù)還是要對(duì)表進(jìn)行一次IO。假如你要從表的100萬(wàn)行數(shù)據(jù)中取幾個(gè)數(shù)據(jù)坑质,那么利用索引迅速定位合武,訪問(wèn)索引的這IO開(kāi)銷就非常值了。但如果是從100萬(wàn)行數(shù)據(jù)中取50萬(wàn)行數(shù)據(jù)涡扼,就比如性別字段稼跳,那你相對(duì)需要訪問(wèn)50萬(wàn)次索引,再訪問(wèn)50萬(wàn)次表吃沪,加起來(lái)的開(kāi)銷并不會(huì)比直接對(duì)表進(jìn)行一次完整掃描小汤善。

當(dāng)然如果把性別字段設(shè)為表的聚集索引,那么就肯定能加快大約一半該字段的查詢速度了巷波。聚集索引指的是表本身數(shù)據(jù)按哪個(gè)字段的值來(lái)進(jìn)行排序萎津。因此,聚集索引只能有一個(gè)抹镊,而且使用聚集索引不會(huì)付出額外IO開(kāi)銷。當(dāng)然你得能舍得把聚集索引這么寶貴資源用到性別字段上荤傲。

可以根據(jù)業(yè)務(wù)場(chǎng)景需要垮耳,將性別和其它字段建立聯(lián)合索引,比如時(shí)間戳,但是建立索引記得把時(shí)間戳字段放在性別前面终佛。

十一俊嗽、寫(xiě)一個(gè)生產(chǎn)者消費(fèi)者模式
生產(chǎn)者消費(fèi)者模式,synchronized鎖住一個(gè)LinkedList铃彰,一個(gè)生產(chǎn)者绍豁,只要隊(duì)列不滿,生產(chǎn)后往里放牙捉,一個(gè)消費(fèi)者只要隊(duì)列不空竹揍,向外取,兩者通過(guò)wait()和notify()進(jìn)行協(xié)調(diào)邪铲,寫(xiě)好了會(huì)問(wèn)怎樣提高效率芬位,最后會(huì)聊一聊消息隊(duì)列設(shè)計(jì)精要思想及其使用。

十二带到、寫(xiě)一個(gè)死鎖
死鎖的四個(gè)條件:互斥條件昧碉、不可剝奪條件、請(qǐng)求與保持條件揽惹、循環(huán)等待條件被饿。思想為:定義兩個(gè)ArrayList,將他們都加上鎖A搪搏、B狭握,線程1、2慕嚷。1拿住了鎖A 哥牍,請(qǐng)求鎖B;2拿住了鎖B請(qǐng)求鎖A喝检,在等待對(duì)方釋放鎖的過(guò)程中誰(shuí)也不讓出已獲得的鎖嗅辣。

DeadLock

十三、cpu 100%怎樣定位

  1. 先用top定位最耗cpu的java進(jìn)程 例如: 12430
    工具:top或者 htop(高級(jí))
    方法:top -c 顯示進(jìn)程運(yùn)行詳細(xì)列表
    鍵入 P (大寫(xiě)P)挠说,按照cpu進(jìn)行排序
  2. 然后用top -p 12430 -H 定位到最耗cpu的線程 的ID 例如:12483
    工具:top
    方法:top -Hp 1865 澡谭,顯示一個(gè)進(jìn)程的線程運(yùn)行信息列表
    鍵入P (大寫(xiě)p),線程按照CPU使用率排序
  3. 把第二步定位的線程ID损俭,轉(zhuǎn)成16進(jìn)制蛙奖,printf “%x\n” 12483 得到 :30c3
    工具:printf
    方法:printf “%x\n” 2747
  4. 從jstack 輸出的線程快照中找到線程的對(duì)堆棧信息 jstack 12430 |grep 30c3 -A 60 |less
    工具:pstack/jstack/grep
    方法:jstack 10765 | grep ‘0x2a34’ -C5 --color`

十四、int a = 1; 是原子性操作嗎杆兵?
是雁仲。

十五、可以用for循環(huán)直接刪除ArrayList的特定元素嗎琐脏?可能會(huì)出現(xiàn)什么問(wèn)題攒砖?怎樣解決缸兔?
for循環(huán)直接刪除ArrayList中的特定元素是錯(cuò)的,不同的for循環(huán)會(huì)發(fā)生不同的錯(cuò)誤吹艇,泛型for會(huì)拋出 ConcurrentModificationException惰蜜,普通的for想要?jiǎng)h除集合中重復(fù)且連續(xù)的元素,只能刪除第一個(gè)受神。

錯(cuò)誤原因:打開(kāi)JDK的ArrayList源碼抛猖,看下ArrayList中的remove方法(注意ArrayList中的remove有兩個(gè)同名方法,只是入?yún)⒉煌翘@里看的是入?yún)镺bject的remove方法)是怎么實(shí)現(xiàn)的财著,一般情況下程序的執(zhí)行路徑會(huì)走到else路徑下最終調(diào)用faseRemove方法,會(huì)執(zhí)行System.arraycopy方法精算,導(dǎo)致刪除元素時(shí)涉及到數(shù)組元素的移動(dòng)瓢宦。針對(duì)普通for循環(huán)的錯(cuò)誤寫(xiě)法,在遍歷第一個(gè)字符串b時(shí)因?yàn)榉蟿h除條件灰羽,所以將該元素從數(shù)組中刪除驮履,并且將后一個(gè)元素移動(dòng)(也就是第二個(gè)字符串b)至當(dāng)前位置,導(dǎo)致下一次循環(huán)遍歷時(shí)后一個(gè)字符串b并沒(méi)有遍歷到廉嚼,所以無(wú)法刪除玫镐。針對(duì)這種情況可以倒序刪除的方式來(lái)避免。
解決方案:用 Iterator怠噪。


demo

擴(kuò)展:


demo

十六恐似、新的任務(wù)提交到線程池,線程池是怎樣處理
第一步 :線程池判斷核心線程池里的線程是否都在執(zhí)行任務(wù)傍念。如果不是矫夷,則創(chuàng)建一個(gè)新的工作線程來(lái)執(zhí)行任務(wù)。如果核心線程池里的線程都在執(zhí)行任務(wù)憋槐,則執(zhí)行第二步双藕。

第二步 :線程池判斷工作隊(duì)列是否已經(jīng)滿。如果工作隊(duì)列沒(méi)有滿阳仔,則將新提交的任務(wù)存儲(chǔ)在這個(gè)工作隊(duì)列里進(jìn)行等待忧陪。如果工作隊(duì)列滿了,則執(zhí)行第三步近范。

第三步 :線程池判斷線程池的線程是否都處于工作狀態(tài)嘶摊。如果沒(méi)有,則創(chuàng)建一個(gè)新的工作線程來(lái)執(zhí)行任務(wù)评矩。如果已經(jīng)滿了叶堆,則交給飽和策略來(lái)處理這個(gè)任務(wù)。

十七斥杜、synchronized底層實(shí)現(xiàn)原理
synchronized (this)原理:涉及兩條指令:monitorenter蹂空,monitorexit俯萌;再說(shuō)同步方法果录,從同步方法反編譯的結(jié)果來(lái)看上枕,方法的同步并沒(méi)有通過(guò)指令monitorenter和monitorexit來(lái)實(shí)現(xiàn),相對(duì)于普通方法弱恒,其常量池中多了ACC_SYNCHRONIZED標(biāo)示符辨萍。

JVM就是根據(jù)該標(biāo)示符來(lái)實(shí)現(xiàn)方法的同步的:當(dāng)方法被調(diào)用時(shí),調(diào)用指令將會(huì)檢查方法的 ACC_SYNCHRONIZED 訪問(wèn)標(biāo)志是否被設(shè)置返弹,如果設(shè)置了锈玉,執(zhí)行線程將先獲取monitor,獲取成功之后才能執(zhí)行方法體义起,方法執(zhí)行完后再釋放monitor拉背。在方法執(zhí)行期間,其他任何線程都無(wú)法再獲得同一個(gè)monitor對(duì)象默终。

這個(gè)問(wèn)題會(huì)接著追問(wèn):java對(duì)象頭信息椅棺,偏向鎖,輕量鎖齐蔽,重量級(jí)鎖及其他們相互間轉(zhuǎn)化两疚。

十八、volatile作用含滴,指令重排相關(guān)
理解volatile關(guān)鍵字的作用的前提是要理解Java內(nèi)存模型诱渤,volatile關(guān)鍵字的作用主要有兩點(diǎn):

多線程主要圍繞可見(jiàn)性和原子性兩個(gè)特性而展開(kāi),使用volatile關(guān)鍵字修飾的變量谈况,保證了其在多線程之間的可見(jiàn)性勺美,即每次讀取到volatile變量,一定是最新的數(shù)據(jù)
代碼底層執(zhí)行不像我們看到的高級(jí)語(yǔ)言—-Java程序這么簡(jiǎn)單碑韵,它的執(zhí)行是Java代碼–>字節(jié)碼–>根據(jù)字節(jié)碼執(zhí)行對(duì)應(yīng)的C/C++代碼–>C/C++代碼被編譯成匯編語(yǔ)言–>和硬件電路交互赡茸,現(xiàn)實(shí)中,為了獲取更好的性能JVM可能會(huì)對(duì)指令進(jìn)行重排序泼诱,多線程下可能會(huì)出現(xiàn)一些意想不到的問(wèn)題坛掠。使用volatile則會(huì)對(duì)禁止語(yǔ)義重排序,當(dāng)然這也一定程度上降低了代碼執(zhí)行效率
從實(shí)踐角度而言治筒,volatile的一個(gè)重要作用就是和CAS結(jié)合屉栓,保證了原子性,詳細(xì)的可以參見(jiàn)java.util.concurrent.atomic包下的類耸袜,比如AtomicInteger友多。

十九、AOP和IOC原理
AOP 和 IOC是Spring精華部分堤框,AOP可以看做是對(duì)OOP的補(bǔ)充域滥,對(duì)代碼進(jìn)行橫向的擴(kuò)展纵柿,通過(guò)代理模式實(shí)現(xiàn),代理模式有靜態(tài)代理启绰,動(dòng)態(tài)代理昂儒,Spring利用的是動(dòng)態(tài)代理,在程序運(yùn)行過(guò)程中將增強(qiáng)代碼織入原代碼中委可。IOC是控制反轉(zhuǎn)渊跋,將對(duì)象的控制權(quán)交給Spring框架,用戶需要使用對(duì)象無(wú)需創(chuàng)建着倾,直接使用即可拾酝。AOP和IOC最可貴的是它們的思想。

二十卡者、Spring怎樣解決循環(huán)依賴的問(wèn)題
什么是循環(huán)依賴蒿囤,怎樣檢測(cè)出循環(huán)依賴,Spring循環(huán)依賴有幾種方式崇决,使用基于setter屬性的循環(huán)依賴為什么不會(huì)出現(xiàn)問(wèn)題材诽,接下來(lái)會(huì)問(wèn):Bean的生命周期。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嗽桩,一起剝皮案震驚了整個(gè)濱河市岳守,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碌冶,老刑警劉巖湿痢,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扑庞,居然都是意外死亡譬重,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)罐氨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)臀规,“玉大人,你說(shuō)我怎么就攤上這事栅隐∷遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵租悄,是天一觀的道長(zhǎng)谨究。 經(jīng)常有香客問(wèn)我,道長(zhǎng)泣棋,這世上最難降的妖魔是什么胶哲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮潭辈,結(jié)果婚禮上鸯屿,老公的妹妹穿的比我還像新娘澈吨。我一直安慰自己,他們只是感情好寄摆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布谅辣。 她就那樣靜靜地躺著,像睡著了一般冰肴。 火紅的嫁衣襯著肌膚如雪屈藐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天熙尉,我揣著相機(jī)與錄音,去河邊找鬼搓扯。 笑死检痰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锨推。 我是一名探鬼主播铅歼,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼换可!你這毒婦竟也來(lái)了椎椰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沾鳄,失蹤者是張志新(化名)和其女友劉穎慨飘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體译荞,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓤的,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吞歼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圈膏。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖篙骡,靈堂內(nèi)的尸體忽然破棺而出稽坤,到底是詐尸還是另有隱情,我是刑警寧澤糯俗,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布尿褪,位于F島的核電站,受9級(jí)特大地震影響叶骨,放射性物質(zhì)發(fā)生泄漏茫多。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一忽刽、第九天 我趴在偏房一處隱蔽的房頂上張望天揖。 院中可真熱鬧夺欲,春花似錦、人聲如沸今膊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斑唬。三九已至市埋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恕刘,已是汗流浹背缤谎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褐着,地道東北人坷澡。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像含蓉,于是被迫代替她去往敵國(guó)和親频敛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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