Java面試題

final, finally产镐,finalize的區(qū)別:
  • final 生命屬性隘庄,方法踢步,和類癣亚,final聲明的屬性是常量,聲明的方法不能重寫获印,聲明的類不能繼承述雾。
  • finally 用于try...catch 語句,用來捕捉異常兼丰,一定會執(zhí)行玻孟。
  • finalize 是object的一個方法,在垃圾收集器工作時會調(diào)用被回收對象的的次方法鳍征,供垃圾回收時的其他資源的回收黍翎,如關(guān)閉文件等。

java中引用有幾類:
  • 強應(yīng)用:強引用是最普遍的引用艳丛,如果一個對象具有強引用那么一般情況下匣掸,這個對象不會被垃圾回收掉,除非引用這個對象的引用被GC掉了氮双,那么GC會判斷這個對象不可大碰酝,那么這個對象可能會被回收。
  • 軟應(yīng)用:一般情況下戴差,這個引用對象不會被銷毀送爸,除非內(nèi)存不夠,內(nèi)存足夠的情況下暖释,這個對象能夠正常使用袭厂。
    *弱引用:弱引用的對象比軟應(yīng)用的對象具有更短的生命周期,當(dāng)GC掃描到這個對象球匕,發(fā)現(xiàn)是弱引用的時候纹磺,不管內(nèi)存是否充足,都有會被回收谐丢。
  • 虛引用:如果一個對象是虛引用爽航,那么不管這個對象的生命周期是否結(jié)束蚓让,都有可能被隨時回收。主要用于監(jiān)控GC的到來讥珍。
java的GC機制:

Java程序的垃圾回收機制也就是GC機制历极,其作用是及時釋放程序中沒有使用的對象所占用的內(nèi)存。

  • 問題回到如何找到哪些對象是沒有使用衷佃,有倆種方法趟卸,1是引用計數(shù)算法,2是可達(dá)性分析算法氏义。
    引用計數(shù)算法的目的是找到那些對象的引用數(shù)為0的锄列,來決定是否回收該對象,每個對象頭中分配一個空間用來保存引用計數(shù)器,如果這個對象被引用計數(shù)去+1惯悠,如果程序執(zhí)行完計數(shù)-1.任何對象的引用計數(shù)為0邻邮,都可以被回收。
    引用計數(shù)器的優(yōu)點是執(zhí)行效率高克婶,程序受到的影響較小筒严,缺點是如果對象相互引用,會出現(xiàn)內(nèi)存溢出情萤。
    可達(dá)性分析算法是為了解決對象相互引用的問題鸭蛙,當(dāng)一個對象從垃圾回收跟(GC root)開始沒有與任何引用鏈相連,那么這個對象就是不可達(dá)的筋岛,也就是可以回收娶视。
    如何回收無用的對象,通過垃圾回收算法睁宰。垃圾回收算法的思想是:①標(biāo)記-清除法肪获;②復(fù)制算法;③標(biāo)記整理算法勋陪;④內(nèi)存模型與回收策略
    程序中什么時候開始GC贪磺,任何時候都會進(jìn)行,當(dāng)程序內(nèi)存不足的時候诅愚,GC就會啟動寒锚。最后如果還是內(nèi)存不足就會內(nèi)存溢出。

ArrayList 和LinkList的區(qū)別和聯(lián)系违孝。

  • 聯(lián)系:都可以用來儲存對象和基本數(shù)據(jù)類型的包裝類
  • 區(qū)別:ArrayList底層是基于數(shù)組結(jié)構(gòu)刹前,查詢元素比較快,刪除和增加效率比較慢雌桑,LinkList底層實現(xiàn)是雙鏈表數(shù)據(jù)結(jié)構(gòu)喇喉,查詢效率比較低,但是刪除和插入元素比較快校坑。

List拣技,Set千诬,Map之間的區(qū)別

  • List:用來存儲無序,可重復(fù)的對象膏斤。
  • Set:無序不能重復(fù)的對象徐绑。
  • Map: 主要用來存儲健值對,鍵不可以重復(fù)莫辨,值可以重復(fù)傲茄。
List的實現(xiàn)類有3種:
  • LinkList底層是雙鏈表數(shù)據(jù)結(jié)構(gòu),查詢速度慢沮榜,但是刪除和添加快盘榨。
  • ArrayList 底層是數(shù)組的數(shù)據(jù)結(jié)構(gòu),并且是非線程安全的蟆融,查詢速度快草巡,但是刪除和添加慢。
  • Vector 底層數(shù)組振愿,不過是線程安全的捷犹,查詢速度慢弛饭,刪除和添加也慢冕末。
Set的實現(xiàn)類有2種
  • LinkHashSet 繼承自HashSet,內(nèi)部通過LinkHashMap保證元素的順序侣颂,也就是說遍歷順序和插入順序一致档桃。
  • HashSet 內(nèi)部通過HashMap來存儲數(shù)據(jù),值存儲在key中憔晒,value都是一樣的藻肄,這樣HashSet存儲的值是唯一的。
map的實現(xiàn)類有4種
  • HashMap 是非線程安全的拒担,單線程執(zhí)行效率高嘹屯,多線程使用時防止并發(fā)問題。(多線程使用concurrentHashMap),健值不能重復(fù)从撼,key只能一個為空州弟,一個和多個key對應(yīng)的value都可以為空。父類是AbstractMap實現(xiàn)了Map接口低零。擴(kuò)容的方式是2的指數(shù),默認(rèn)長度16.
  • HashTable 是線程安全的婆翔,相比于HashMap效率不高,但可以在多線程中使用掏婶,key和value都不能為空啃奴,否則會報空指針,父類是Dictionary雄妥,同樣實現(xiàn)了Map接口最蕾。擴(kuò)容方式是0ld*2+1依溯;默認(rèn)長度11。
  • LinkHashMap 保持插入數(shù)據(jù)的順序瘟则。
  • SortMap 實現(xiàn)類是TreeMap,保證元素的順序誓沸,默認(rèn)通過key來進(jìn)行升豎排列,也可以重寫comparato方法根據(jù)value來排序壹粟。

ArrayList的擴(kuò)容

ArrayList底層是通過數(shù)組來存儲數(shù)據(jù)的拜隧,ArrayList的默認(rèn)數(shù)組長度是10 ,也可以根據(jù)ArrayList的構(gòu)造函數(shù)指定數(shù)組的長度趁仙,正常情況下ArrayList每次擴(kuò)容的長度都是上一次的1.5倍洪添,特殊情況如果擴(kuò)容1.5倍不夠,那么直接擴(kuò)大到需要的長度大小雀费。

 private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

LinkedHashMap的原理

LinkedHashMap繼承了HashMap干奢,數(shù)據(jù)的存儲是數(shù)組和雙向鏈表的方式實現(xiàn)。查詢數(shù)據(jù)的順序和你插入數(shù)據(jù)的順序有關(guān)盏袄。通過雙向鏈表的方式維護(hù)元素的順序忿峻。linkedHashMap是線程不安全的
一般在LruCache中做圖片緩存。
有倆種儲存數(shù)據(jù)的方法辕羽,一種是插入順序存儲逛尚,一種是訪問數(shù)據(jù)的方式存儲。accessOrder為false表示插入數(shù)據(jù)的方式刁愿,accessOrder為true表示訪問數(shù)據(jù)的方式绰寞,

String的原理

String 存取數(shù)據(jù)的方式通過一個不可變(final修飾的類)的數(shù)組來存儲,數(shù)組的長度不確定铣口,沒有默認(rèn)的長度滤钱,傳入多少就是多少,如果進(jìn)行拼接會通過new String 重新構(gòu)建一個String脑题。使用字符串常量池時件缸,每當(dāng)我們用字面量(String s =“”1)創(chuàng)建字符串常量的時候,JVM會首先檢查字符串常量池叔遂,如果該字符串已經(jīng)存在常量池中他炊,就將該字符串對象的地址賦值給該引用”s”,如果該字符串不存在常量池中,就會實例化該字符串并且將其放到常量池中掏熬,并且將此字符串的地址賦值給引用“s”佑稠。

String不可變的好處

  • 如果String不可變,那么其hash值也不可變旗芬,那么在用到hash值的地方就會提高效率舌胶。
  • 為了線程安全。如果改變字符串指向?qū)ο蟮闹荡裕蜁鸢踩珕栴}幔嫂。
  • 節(jié)省了許多空間辆它,因為只有String不可變的時候,String 常量池才可能實現(xiàn)履恩。

Java中 注解的使用
注解可以理解為一定程度上的標(biāo)簽锰茉。
注解的作用:程序中使用注解可以簡化代碼提高編程的效率。
注解的原理:注解的本質(zhì)是繼承Annotation的特殊接口切心。其具體實現(xiàn)類似java的動態(tài)代理飒筑,通過反射獲取注解時,返回的是java運行時生成的動態(tài)代理類對象绽昏。
元注解類型

  • Retentaion:表示該注解的生命周期
    • SOURCE:表示只在源碼中保留协屡,在編譯階段就會丟掉。
    • CLass:表示會編譯到.class 文件中去全谤,并不會加載到JVM中去肤晓。
      -RunTime:注解可以保留到程序運行的時候,會加載到JVM中认然。程序可以通過反射的方式獲取到补憾。
  • Documented :表示是否將注解信息添加到文檔中
  • Target:表示注解用到什么地方
  • ElementType.ANNOTATION_TYPE 可以給一個注解進(jìn)行注解
  • ElementType.CONSTRUCTOR 可以給構(gòu)造方法進(jìn)行注解
  • ElementType.FIELD 可以給屬性進(jìn)行注解
  • ElementType.LOCAL_VARIABLE 可以給局部變量進(jìn)行注解
  • ElementType.METHOD 可以給方法進(jìn)行注解
  • ElementType.PACKAGE 可以給一個包進(jìn)行注解
  • ElementType.PARAMETER 可以給一個方法內(nèi)的參數(shù)進(jìn)行注解
  • ElementType.TYPE 可以給一個類型進(jìn)行注解,比如類卷员、接口盈匾、枚舉
  • Inherited:表示該注解和子類的關(guān)系
  • Repeatable:表示可以重復(fù)聲明同一個類型。

java中Error和Exception的區(qū)別

繼承自Throwable, Error是程序中無法處理的子刮,Exception表示在程序可以提前處理的威酒。

  • Error 表示程序運行過程中,程序發(fā)送無法處理的錯誤挺峡。如OutOfMemoryError,NoClassDefFoundError.
  • Exception 可分為運行時異常和非運行時異常,程序中需要處理担钮。否則程序可能通不過編譯橱赠,或者程序會出現(xiàn)崩潰。運行時異常是因為代碼邏輯出現(xiàn)問題引起的箫津,會通過編譯狭姨,這類異常繼承自RuntimeException,常見的有空指針,數(shù)組下標(biāo)越界苏遥,非運行異常也稱編譯異常饼拍,在程序編譯階段就會出現(xiàn),必須處理田炭,不然程序通不過編譯师抄,常遇見的有IO異常,Sql異常教硫。
Http 和https的區(qū)別:
  • Https要到ca申請證書叨吮,這種證書免費的很少辆布,一般收費。
  • Http是超文本傳輸協(xié)議茶鉴,使用明文傳輸锋玲,Https使用的具有安全性的SSL協(xié)議是加密傳輸協(xié)議。 涵叮、
  • Http和Https使用的是完全不同的鏈接方式并且使用的端口也不同惭蹂,Https默認(rèn)使用的是443,Http默認(rèn)的是80端口割粮。
  • Http的連接簡單剿干,是無狀態(tài)的。
  • Http是使用的SSL+Http的構(gòu)建的可進(jìn)行加密穆刻,身份認(rèn)證的網(wǎng)絡(luò)協(xié)議置尔。要比Http協(xié)議要安全的多。
常用的對稱加密和非對稱加密氢伟,以及區(qū)別
  • 對稱加密:AES榜轿,DES,RC4朵锣,RC5
  • 非對稱加密:RSA谬盐,ECC(移動設(shè)備),DSA(數(shù)字簽名)
  • 散列算法: MD5 诚些,SHA飞傀,該類的特點是單向,不可逆诬烹,對輸入非常敏感砸烦,輸出長度固定
    對稱加密使用的同一套密鑰進(jìn)行加解密,非對稱加密是使用公有密鑰加密绞吁,使用私有密鑰解密幢痘。
使用https加密協(xié)議(結(jié)合使用對稱加密和非對稱加密,因為對稱加密的處理效率比非對稱高家破,但是非對稱加密更加安全)
  • 客戶端首先進(jìn)行https請求颜说。
  • 服務(wù)器端有一套SSL數(shù)字證書,這個證書包含一個公匙和一個密匙汰聋。服務(wù)收到請求门粪,返回到客戶端一個公匙,(公私包含的內(nèi)容有烹困,頒發(fā)機構(gòu)和有效的時間)
  • 服務(wù)器傳輸公私到客戶端
  • 客戶端通過共鑰證書(認(rèn)證機構(gòu)頒發(fā)的用來確認(rèn)當(dāng)前當(dāng)前公匙是否是匹配的證書結(jié)構(gòu)頒發(fā)的)解析公私玄妈,驗證公匙是否有效。如果有效的話,就會生成一個隨機數(shù)措近,然后通過證書來加密溶弟。(這個隨機數(shù),就是對稱加解密的密匙)
  • 傳輸這個加密的隨機值到服務(wù)端瞭郑,以后服務(wù)器和客戶端就是通過這個隨機值來加密解密了辜御。
  • 服務(wù)端通過私密解密到這個隨機數(shù),然后通過對稱算法屈张,將這個隨機數(shù)和傳輸?shù)膬?nèi)容加密擒权,傳輸?shù)娇蛻舳恕R院笃渌膬?nèi)容也是通過這個隨機數(shù)進(jìn)行加密傳輸阁谆。
  • 傳輸加密的內(nèi)容
  • 客戶端使用隨機數(shù)私密還原被加密的內(nèi)容碳抄。
Bitmap是存放在native層還是存放在java層的?

在android 2.3 之前的版本场绿,圖像的數(shù)據(jù)是存放在native heap的剖效,所以在java heap讀不到圖像的內(nèi)存數(shù)據(jù),不過在3.0之后的版本焰盗,bitmap對象就直接分配到j(luò)ava層了璧尸,這樣便于管理和調(diào)試,可以復(fù)用一個bitmap對象熬拒,而不必回收它爷光,不過當(dāng)前的bitmap的大小要和原來的bitmap大小相同,不過在4.4之后的版本澎粟,復(fù)用的bitmap對象的大小只要不超過原來的大小就行了蛀序。bitmap是存放在d alvik heap中的,只有這樣才能解釋的通為什么bitmap會導(dǎo)致OOM活烙。

Vector和ArrayList的區(qū)別徐裸?

首先ArrayList和Vector都是鏈表結(jié)構(gòu)的。
Vector使用synchronized關(guān)鍵字瓣颅,是線程安全的倦逐,ArrayList不是線程安全的,Vector比HashMap更加有效率宫补。

HashTable和HashMap的區(qū)別?

HashTable是線程安全的曾我,HashMap是線程非安全的粉怕,所以在線程多的情況下使用HashTable.

  • HashTable不允許有空值(Key和value都不允許有空值),HashMap可以有空值抒巢。
  • HashTable有contain方法贫贝,與containValue方法類似。
  • HashTable使用Enumeration,HashMap使用Iterator稚晚。
  • HashTable 的數(shù)組長度默認(rèn)是12崇堵,增常是old*2+1,HashMap的默認(rèn)數(shù)組長度是6,增長是2的指數(shù)
    *哈希值使用不同客燕,HashTable使用對象的hashcode鸳劳,而HashMap會重新計算哈希值。
一個英文字母占一個字節(jié)也搓,一個漢子占2個字節(jié)
http請求有哪幾種赏廓,有什么不同?

http總共有2種傍妒,一種是Get幔摸,一種是Post,他們的不同點是:

  • Get 請求是將請求參數(shù)拼接在url的尾部,并且url使用ascill編碼颤练,對于請求的參數(shù)有可能是unicode編碼既忆,如漢子,需要解決編碼的問題嗦玖。Post沒有編碼的限制患雇。
  • Post請求是將請求參數(shù)放在Request body 中的.
  • http協(xié)議并沒有對請求的url有長度的限制,但是有些瀏覽器對url的長度有限制踏揣。
  • 從語義上來講也是不同的庆亡,get請求是從服務(wù)器獲取資源,post是向服務(wù)器提交一個修改或者添加的報文捞稿,如上傳一個表單又谋,get請求不會對服務(wù)器有多大的影響,但是post如果重復(fù)提交一個請求就會在服務(wù)器中生成多個重復(fù)的數(shù)據(jù)娱局,
TCP/UDP的區(qū)別
  • IP(internet protocol)是主機與主機之間的通訊協(xié)議.
  • TCP 在IP協(xié)議的基礎(chǔ)上彰亥,完成主機間進(jìn)程與進(jìn)程的通信。(具體是通過進(jìn)程的端口號)衰齐,TCP需要經(jīng)過3次握手任斋,建立長連接,才能發(fā)送請求耻涛。(Socket是TCP的封裝)废酷。客戶端發(fā)送SYN(建立連接)報文抹缕,服務(wù)端收到請求澈蟆,返回一個ACK(響應(yīng))報文,客戶端收到ACK報文卓研,在返回服務(wù)的一個ACK報文趴俘。
  • UDP 不需要建立連接睹簇,也可以發(fā)送數(shù)據(jù)。
  • TCP保證數(shù)據(jù)正確性寥闪,UDP可能丟包太惠,TCP保證數(shù)據(jù)順序,UDP不保證
  • 流模式與數(shù)據(jù)報模式 疲憋;
  • 對系統(tǒng)資源的要求(TCP較多凿渊,UDP少;
CountDownLatch

Java并發(fā)的工具類,能夠使一個或者多個Thread等待其他線程執(zhí)行完成后再執(zhí)行柜某。

Java 的內(nèi)存區(qū)域及存放的內(nèi)容嗽元。
  • 程序計數(shù)器:程序執(zhí)行的字節(jié)碼指令,分支喂击,跳轉(zhuǎn)剂癌,異常處理,循環(huán)翰绊,線程恢復(fù)等功能都依賴程序計數(shù)器完成佩谷。
  • 棧:存放的是操作棧,局部變量表监嗜,動態(tài)鏈接谐檀,方法出口等信息。
  • 本地方法棧:如果某個虛擬機實現(xiàn)的本地接口連接方式是C鏈接模型裁奇,那么本地的方法棧就是C棧桐猬。
  • 堆:主要存放類的實體變量。
  • GC堆: 分為MInor Gc 和Full GC 采用復(fù)制算法刽肠。
getDeclaredMethods 和getMethods方法的區(qū)別:

getMothods返回一個類的中的所有公共方法的數(shù)組 溃肪,這個公共方法數(shù)組包含自己的,也包含繼承下來的音五。
getDeclaredMethods放回一個類中所有的公開的惫撰,非公開的,私有的躺涝,和默認(rèn)的方法數(shù)組厨钻,但是不包含父類繼承下來的。

String 坚嗜,StringBuild夯膀,StringBuffer

String 拼接字符串時每次都會創(chuàng)建新的對象,適合少量拼接使用苍蔬,速度最慢
StringBuffer 線程安全棍郎,適合多線程使用,比String快
StringBuilder 線程不安全,適合單線程使用摄狱,速度最快

“equals”與“==”咙鞍、“hashCode”的區(qū)別和使用場景

==比較的是倆個對象的值是否相等,
equals比較的是倆個對象的地址是否相同归薛。
默認(rèn)的撕氧,Object 類的 hashCode()方法返回對象存儲的內(nèi)存地址的 hash值琼开。

Error和Exception的區(qū)別

Error 是錯誤政冻,程序中發(fā)生錯誤后JVM不可以處理也不可以恢復(fù)抓狭。OutOfMemoryError,NoClassDefFoundError
Exception是異常 分為檢查異常和非檢查異常伯病,檢查異常可以使用try catch語句捕捉否过,非檢查異澄绲眩可以不用處理,檢查異常IOException,非檢查異常ArrayIndexOutOfBoundsException苗桂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末药磺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子煤伟,更是在濱河造成了極大的恐慌癌佩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件便锨,死亡現(xiàn)場離奇詭異围辙,居然都是意外死亡,警方通過查閱死者的電腦和手機放案,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門姚建,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吱殉,你說我怎么就攤上這事掸冤。” “怎么了考婴?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵贩虾,是天一觀的道長。 經(jīng)常有香客問我沥阱,道長缎罢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任考杉,我火速辦了婚禮策精,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崇棠。我一直安慰自己咽袜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布枕稀。 她就那樣靜靜地躺著询刹,像睡著了一般谜嫉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凹联,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天沐兰,我揣著相機與錄音,去河邊找鬼蔽挠。 笑死住闯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澳淑。 我是一名探鬼主播比原,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杠巡!你這毒婦竟也來了量窘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忽孽,失蹤者是張志新(化名)和其女友劉穎绑改,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兄一,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡厘线,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了出革。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片造壮。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖骂束,靈堂內(nèi)的尸體忽然破棺而出耳璧,到底是詐尸還是另有隱情,我是刑警寧澤展箱,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布旨枯,位于F島的核電站,受9級特大地震影響混驰,放射性物質(zhì)發(fā)生泄漏攀隔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一栖榨、第九天 我趴在偏房一處隱蔽的房頂上張望昆汹。 院中可真熱鬧,春花似錦婴栽、人聲如沸满粗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽映皆。三九已至挤聘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劫扒,已是汗流浹背檬洞。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沟饥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓湾戳,卻偏偏與公主長得像贤旷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砾脑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359