最新整理:iOS面試題-常問Swift問題(八)

前言:

最近把 iOS 面試中可能會(huì)遇到的問題整理了一番, 題目大部分是網(wǎng)上收錄的, 方便自己鞏固復(fù)習(xí), 也分享給大家; 希望對(duì)大家有所幫助!

  • 對(duì)于答案,不一定都合適,歡迎大家積極討論;整理不易,如果您覺得還不錯(cuò),麻煩在文末 “點(diǎn)個(gè)贊” ,或者留下您的評(píng)論“Mark” 一下,謝謝您的支持

目錄合集

iOS面試題-常問Swift問題(八)

1. 介紹一下 Swift?

Swift是蘋果在2014年6月WWDC發(fā)布的全新編程語言,借鑒了JS,Python,C#,Ruby等語言特性,看上去偏腳本化,Swift 仍支持 cocoa touch 框架

他的優(yōu)點(diǎn):

  1. Swift更加安全,它是類型安全的語言。
  2. Swift容易閱讀,語法和文件結(jié)構(gòu)簡(jiǎn)易化。
  3. Swift更易于維護(hù),文件分離后結(jié)構(gòu)更清晰。
  4. Swift代碼更少,簡(jiǎn)潔的語法,可以省去大量冗余代碼
  5. Swift速度更快,運(yùn)算性能更高。

2. Swift 和OC 如何相互調(diào)用?

  • Swift 調(diào)用 OC代碼
    需要?jiǎng)?chuàng)建一個(gè) Target-BriBridging-Header.h 的橋文件,在喬文件導(dǎo)入需要調(diào)用的OC代碼頭文件即可

  • OC 調(diào)用 Swift代碼
    直接導(dǎo)入 Target-Swift.h文件即可, Swift如果需要被OC調(diào)用,需要使用@objc 對(duì)方法或者屬性進(jìn)行修飾

3. 類(class) 和 結(jié)構(gòu)體(struct) 有什么區(qū)別?

在 Swift 中,class 是引用類型(指針類型), struct 是值類型

值類型

  • 值類型在傳遞和賦值時(shí)將進(jìn)行復(fù)制; 賦值給var、let或者給函數(shù)傳參,是直接將所有內(nèi)容拷貝一份, 類似于對(duì)文件進(jìn)行copy、paste操作,產(chǎn)生了全新的文件副本。屬于深拷貝(deep copy)
  • 值類型: 比如結(jié)構(gòu)體,枚舉,是在棧空間上存儲(chǔ)和操作的

引用類型

  • 引用類型只會(huì)使用引用對(duì)象的一個(gè)"指向"; 賦值給var、let或者給函數(shù)傳參,是將內(nèi)存地址拷貝一份,類似于制作一個(gè)文件的替身(快捷方式、鏈接),指向的是同一個(gè)文件。屬于淺拷貝(shallow copy)
  • 引用類型: 比如 Class,是在堆空間上存儲(chǔ)和操作的

4. class 和 struct 比較,優(yōu)缺點(diǎn)?

class 有以下功能,struct 是沒有的:

  1. class可以繼承,子類可以使用父類的特性和方法
  2. 類型轉(zhuǎn)換可以在運(yùn)行時(shí)檢查和解釋一個(gè)實(shí)例對(duì)象
  3. class可以用 deinit來釋放資源
  4. 一個(gè)類可以被多次引用

struct 優(yōu)勢(shì):

  1. 結(jié)構(gòu)較小,適用于復(fù)制操作,相比較一個(gè)class 實(shí)例被多次引用,struct 更安全
  2. 無需擔(dān)心內(nèi)存泄露問題

精選大廠 · iOS面試題答案PDF文集

  • 獲取加小編的iOS技術(shù)交流圈:937 194 184,直接獲取

5. Swift 中,什么可選型(Optional)

  • 在 Swift 中,可選型是為了表達(dá)一個(gè)變量為空的情況,當(dāng)一個(gè)變量為空,他的值就是 nil
  • 在類型名稱后面加個(gè)問號(hào)? 來定義一個(gè)可選型
  • 值類型或者引用類型都可以是可選型變量
var name: String? // 默認(rèn)為 nil
var age: Int?     // 默認(rèn)為nil
print(name, age) // 打印 nil, nil

6.Swift,什么是泛型?

  • 泛型主要是為增加代碼的靈活性而生的,它可以是對(duì)應(yīng)的代碼滿足任意類型的的變量或方法;
  • 泛型可以將類型參數(shù)化,提高代碼復(fù)用率,減少代碼量
// 實(shí)現(xiàn)一個(gè)方法,可以交換實(shí)現(xiàn)任意類型
func swap<T>(a: inout T, b: inout T) {
    (a, b) = (b, a)
}

7. 訪問控制關(guān)鍵字 open, public, internal, fileprivate, private 的區(qū)別?

Swift 中有個(gè)5個(gè)級(jí)別的訪問控制權(quán)限,從高到低依次是 open, public, internal, fileprivate, private

它們遵循的基本規(guī)則: 高級(jí)別的變量不允許被定義為低級(jí)別變量的成員變量,比如一個(gè) private 的 class 內(nèi)部允許包含 public的 String值,反之低級(jí)變量可以定義在高級(jí)別變量中;

  • open: 具備最高訪問權(quán)限,其修飾的類可以和方法,可以在任意 模塊中被訪問和重寫.
  • public: 權(quán)限僅次于 open,和 open 唯一的區(qū)別是: 不允許其他模塊進(jìn)行繼承、重寫
  • internal: 默認(rèn)權(quán)限, 只允許在當(dāng)前的模塊中訪問,可以繼承和重寫,不允許在其他模塊中訪問
  • fileprivate: 修飾的對(duì)象只允許在當(dāng)前的文件中訪問;
  • private: 最低級(jí)別訪問權(quán)限,只允許在定義的作用域內(nèi)訪問

8.關(guān)鍵字:Strong,Weak,Unowned 區(qū)別?

  • Swift 的內(nèi)存管理機(jī)制同OC一致,都是ARC管理機(jī)制; Strong,和 Weak用法同OC一樣

  • Unowned(無主引用), 不會(huì)產(chǎn)生強(qiáng)引用,實(shí)例銷毀后仍然存儲(chǔ)著實(shí)例的內(nèi)存地址(類似于OC中的unsafe_unretained), 試圖在實(shí)例銷毀后訪問無主引用,會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤(野指針)

9. 如何理解copy-on-write?

值類型(比如:struct),在復(fù)制時(shí),復(fù)制對(duì)象與原對(duì)象實(shí)際上在內(nèi)存中指向同一個(gè)對(duì)象,當(dāng)且僅當(dāng)修改復(fù)制的對(duì)象時(shí),才會(huì)在內(nèi)存中創(chuàng)建一個(gè)新的對(duì)象,

  • 為了提升性能,Struct, String、Array、Dictionary、Set采取了Copy On Write的技術(shù)
  • 比如僅當(dāng)有“寫”操作時(shí),才會(huì)真正執(zhí)行拷貝操作
  • 對(duì)于標(biāo)準(zhǔn)庫(kù)值類型的賦值操作,Swift 能確保最佳性能,所有沒必要為了保證最佳性能來避免賦值

10.什么是屬性觀察?

屬性觀察是指在當(dāng)前類型內(nèi)對(duì)特性屬性進(jìn)行監(jiān)測(cè),并作出響應(yīng),屬性觀察是 swift 中的特性,具有2種, willsetdidset

var title: String {
    willSet {
        print("willSet", newValue)

    }
    didSet {
        print("didSet", oldValue, title)
    }
}

  • willSet會(huì)傳遞新值,默認(rèn)叫newValue
  • didSet會(huì)傳遞舊值,默認(rèn)叫oldValue
  • 在初始化器中設(shè)置屬性值不會(huì)觸發(fā)willSet和didSet

11. swift 為什么將 String,Array,Dictionary設(shè)計(jì)為值類型?

  • 值類型和引用類型相比,最大優(yōu)勢(shì)可以高效的使用內(nèi)存,值類型在棧上操作,引用類型在堆上操作,棧上操作僅僅是單個(gè)指針的移動(dòng),而堆上操作牽涉到合并,位移,重鏈接,Swift 這樣設(shè)計(jì)減少了堆上內(nèi)存分配和回收次數(shù),使用 copy-on-write將值傳遞與復(fù)制開銷降到最低

12.如何將Swift 中的協(xié)議(protocol)中的部分方法設(shè)計(jì)為可選(optional)?

  • 在協(xié)議和方法前面添加 @objc,然后在方法前面添加 optional關(guān)鍵字,改方式實(shí)際上是將協(xié)議轉(zhuǎn)為了OC的方式
@objc protocol someProtocol {
  @objc  optional func test()
}

  • 使用擴(kuò)展(extension),來規(guī)定可選方法,在 swift 中,協(xié)議擴(kuò)展可以定義部分方法的默認(rèn)實(shí)現(xiàn)
protocol someProtocol {
    func test()
}

extension someProtocol{
    func test() {
        print("test")
    }
}

13.比較Swift 和OC中的初始化方法 (init) 有什么不同?

swift 的初始化方法,更加嚴(yán)格和準(zhǔn)確, swift初始化方法需要保證所有的非optional的成員變量都完成初始化, 同時(shí) swfit 新增了convenience和 required兩個(gè)修飾初始化器的關(guān)鍵字

  • convenience只提供一種方便的初始化器,必須通過一個(gè)指定初始化器來完成初始化
  • required是強(qiáng)制子類重寫父類中所修飾的初始化方法

14.比較 Swift和OC中的 protocol 有什么不同?

  • Swift 和OC中的 protocol相同點(diǎn)在于: 兩者都可以被用作代理;
  • 不同點(diǎn): Swift中的 protocol還可以對(duì)接口進(jìn)行抽象,可以實(shí)現(xiàn)面向協(xié)議,從而大大提高編程效率,Swift中的protocol可以用于值類型,結(jié)構(gòu)體,枚舉;

精選大廠 · iOS面試題答案PDF文集

  • 獲取加小編的iOS技術(shù)交流圈:937 194 184,直接獲取

15.swift 和OC 中的自省 有什么區(qū)別?

自省在OC中就是判斷某一對(duì)象是否屬于某一個(gè)類的操作,有以下2中方式

[obj iskinOfClass:[SomeClass class]]
[obj isMemberOfClass:[SomeClass class]]

在 Swift 中由于很多 class 并非繼承自 NSObject, 故而 Swift 使用 is 來判斷是否屬于某一類型, is 不僅可以作用于class, 還是作用于enumstruct

16.什么是函數(shù)重載? swift 支不支持函數(shù)重載?

  • 函數(shù)重載是指: 函數(shù)名稱相同,函數(shù)的參數(shù)個(gè)數(shù)不同, 或者參數(shù)類型不同,或參數(shù)標(biāo)簽不同, 返回值類型與函數(shù)重載無關(guān)
  • swift 支持函數(shù)重載

17.swift 中的枚舉,關(guān)聯(lián)值 和 原始值的區(qū)分?

  • 關(guān)聯(lián)值--有時(shí)會(huì)將枚舉的成員值跟其他類型的變量關(guān)聯(lián)存儲(chǔ)在一起,會(huì)非常有用

    // 關(guān)聯(lián)值
    enum Date {
    case digit(year: Int, month: Int, day: Int)
    case string(String)
    }
    
    
  • 原始值--枚舉成員可以使用相同類型的默認(rèn)值預(yù)先關(guān)聯(lián),這個(gè)默認(rèn)值叫做:原始值

    // 原始值
    enum Grade: String {
      case perfect = "A"
      case great = "B"
      case good = "C"
      case bad = "D"
    }
    
    

18. swift 中的閉包結(jié)構(gòu)是什么樣子的?

{
    (參數(shù)列表) -> 返回值類型 in 函數(shù)體代碼
}

19. 什么是尾隨閉包?

  • 將一個(gè)很長(zhǎng)的閉包表達(dá)式作為函數(shù)的最后一個(gè)實(shí)參
  • 使用尾隨閉包可以增強(qiáng)函數(shù)的可讀性
  • 尾隨閉包是一個(gè)被書寫在函數(shù)調(diào)用括號(hào)外面(后面)的閉包表達(dá)式
// fn 就是一個(gè)尾隨閉包參數(shù)
func exec(v1: Int, v2: Int, fn: (Int, Int) -> Int) {
    print(fn(v1, v2))
}

// 調(diào)用
exec(v1: 10, v2: 20) {
    $0 + $1
}

20. 什么是逃逸閉包?

當(dāng)閉包作為一個(gè)實(shí)際參數(shù)傳遞給一個(gè)函數(shù)或者變量的時(shí)候,我們就說這個(gè)閉包逃逸了,可以在形式參數(shù)前寫 @escaping 來明確閉包是允許逃逸的。

  • 非逃逸閉包、逃逸閉包,一般都是當(dāng)做參數(shù)傳遞給函數(shù)
  • 非逃逸閉包:閉包調(diào)用發(fā)生在函數(shù)結(jié)束前,閉包調(diào)用在函數(shù)作用域內(nèi)
  • 逃逸閉包:閉包有可能在函數(shù)結(jié)束后調(diào)用,閉包調(diào)用逃離了函數(shù)的作用域,需要通過@escaping聲明
// 定義一個(gè)數(shù)組用于存儲(chǔ)閉包類型
var completionHandlers: [() -> Void] = []

//  在方法中將閉包當(dāng)做實(shí)際參數(shù),存儲(chǔ)到外部變量中
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
    completionHandlers.append(completionHandler)
}

如果你不標(biāo)記函數(shù)的形式參數(shù)為 @escaping ,你就會(huì)遇到編譯時(shí)錯(cuò)誤。

21. 什么是自動(dòng)閉包?

自動(dòng)閉包是一種自動(dòng)創(chuàng)建的用來把作為實(shí)際參數(shù)傳遞給函數(shù)的表達(dá)式打包的閉包。它不接受任何實(shí)際參數(shù),并且當(dāng)它被調(diào)用時(shí),它會(huì)返回內(nèi)部打包的表達(dá)式的值。這個(gè)語法的好處在于通過寫普通表達(dá)式代替顯式閉包而使你省略包圍函數(shù)形式參數(shù)的括號(hào)。

func getFirstPositive(_ v1: Int, _ v2: @autoclosure () -> Int) -> Int? {
    return v1 > 0 ? v1 : v2()
}
getFirstPositive(10, 20)

  • 為了避免與期望沖突,使用了@autoclosure的地方最好明確注釋清楚:這個(gè)值會(huì)被推遲執(zhí)行
  • @autoclosure 會(huì)自動(dòng)將 20 封裝成閉包 { 20 }
  • @autoclosure 只支持 () -> T 格式的參數(shù)
  • @autoclosure 并非只支持最后1個(gè)參數(shù)
  • 有@autoclosure、無@autoclosure,構(gòu)成了函數(shù)重載

如果你想要自動(dòng)閉包允許逃逸,就同時(shí)使用 @autoclosure 和 @escaping 標(biāo)志。

22. swift中, 存儲(chǔ)屬性和計(jì)算屬性的區(qū)別?

Swift中跟實(shí)例對(duì)象相關(guān)的屬性可以分為2大類

存儲(chǔ)屬性(Stored Property)

  • 類似于成員變量這個(gè)概念
  • 存儲(chǔ)在實(shí)例對(duì)象的內(nèi)存中
  • 結(jié)構(gòu)體、類可以定義存儲(chǔ)屬性
  • 枚舉不可以定義存儲(chǔ)屬性

計(jì)算屬性(Computed Property)

  • 本質(zhì)就是方法(函數(shù))
  • 不占用實(shí)例對(duì)象的內(nèi)存
  • 枚舉、結(jié)構(gòu)體、類都可以定義計(jì)算屬性
struct Circle {
    // 存儲(chǔ)屬性
    var radius: Double
    // 計(jì)算屬性
    var diameter: Double {
        set {
            radius = newValue / 2
        }
        get {
            return radius * 2
        }
    }
}

23. 什么是延遲存儲(chǔ)屬性(Lazy Stored Property)?

使用lazy可以定義一個(gè)延遲存儲(chǔ)屬性,在第一次用到屬性的時(shí)候才會(huì)進(jìn)行初始化(類似OC中的懶加載)

  • lazy屬性必須是var,不能是let
    • let必須在實(shí)例對(duì)象的初始化方法完成之前就擁有值
  • 如果多條線程同時(shí)第一次訪問lazy屬性
    • 無法保證屬性只被初始化1次
class PhotoView {
    // 延遲存儲(chǔ)屬性
    lazy var image: Image = {
        let url = "https://...x.png"        
        let data = Data(url: url)
        return Image(data: data)
    }() 
} 

24. 什么是屬性觀察器?

可以為非lazy的var存儲(chǔ)屬性設(shè)置屬性觀察器,通過關(guān)鍵字willSetdidSet來監(jiān)聽屬性變化

struct Circle {
    var radius: Double {
        willSet {
            print("willSet", newValue)
        } 
        didSet {
            print("didSet", oldValue, radius)
        }
    } 
    init() {
        self.radius = 1.0
        print("Circle init!")
    }
}


精選大廠 · iOS面試題答案PDF文集

  • 獲取加小編的iOS技術(shù)交流圈:937 194 184,直接獲取

25. swift中什么類型屬性(Type Property)?

嚴(yán)格來說,屬性可以分為

實(shí)例屬性(Instance Property): 只能通過實(shí)例對(duì)象去訪問

  • 存儲(chǔ)實(shí)例屬性(Stored Instance Property):存儲(chǔ)在實(shí)例對(duì)象的內(nèi)存中,每個(gè)實(shí)例對(duì)象都有1份
  • 計(jì)算實(shí)例屬性(Computed Instance Property)

類型屬性(Type Property):只能通過類型去訪問

  • 存儲(chǔ)類型屬性(Stored Type Property):整個(gè)程序運(yùn)行過程中,就只有1份內(nèi)存(類似于全局變量)
  • 計(jì)算類型屬性(Computed Type Property)

可以通過static定義類型屬性 p如果是類,也可以用關(guān)鍵字class

struct Car {
    static var count: Int = 0
    init() {
        Car.count += 1
    }
}

不同于存儲(chǔ)實(shí)例屬性,你必須給存儲(chǔ)類型屬性設(shè)定初始值

  • 因?yàn)轭愋蜎]有像實(shí)例對(duì)象那樣的init初始化器來初始化存儲(chǔ)屬性

存儲(chǔ)類型屬性默認(rèn)就是lazy,會(huì)在第一次使用的時(shí)候才初始化

  • 就算被多個(gè)線程同時(shí)訪問,保證只會(huì)初始化一次
  • 存儲(chǔ)類型屬性可以是let

枚舉類型也可以定義類型屬性(存儲(chǔ)類型屬性、計(jì)算類型屬性)

26. swift 中如何使用單例模式?

可以通過類型屬性+let+private 來寫單例; 代碼如下如下:

 public class FileManager {
    public static let shared = {
        // ....
        // ....
        return FileManager()
}()
    private init() { }
}

27.swift 中的下標(biāo)是什么?

  • 使用subscript可以給任意類型(枚舉、結(jié)構(gòu)體、類)增加下標(biāo)功能,有些地方也翻譯為:下標(biāo)腳本
  • subscript的語法類似于實(shí)例方法、計(jì)算屬性,本質(zhì)就是方法(函數(shù))

使用如下:

class Point {
    var x = 0.0, y = 0.0
    subscript(index: Int) -> Double {
        set {
            if index == 0 {
                x = newValue
            } else if index == 1 {
                y = newValue }
        }
        get {
            if index == 0 {
                return x
            } else if index == 1 {
                return y
            }
            return 0
        }
    }
}

var p = Point()
// 下標(biāo)賦值
p[0] = 11.1
p[1] = 22.2
// 下標(biāo)訪問
print(p.x) // 11.1
print(p.y) // 22.2

27.簡(jiǎn)要說明Swift中的初始化器?

  • 類、結(jié)構(gòu)體、枚舉都可以定義初始化器
  • 類有2種初始化器: 指定初始化器(designated initializer)便捷初始化器(convenience initializer)
 // 指定初始化器 
init(parameters) {
    statements 
}
// 便捷初始化器
convenience init(parameters) {
    statements 
} 

規(guī)則:

  • 每個(gè)類至少有一個(gè)指定初始化器,指定初始化器是類的主要初始化器
  • 默認(rèn)初始化器總是類的指定初始化器
  • 類偏向于少量指定初始化器,一個(gè)類通常只有一個(gè)指定初始化器

初始化器的相互調(diào)用規(guī)則

  • 指定初始化器必須從它的直系父類調(diào)用指定初始化器
  • 便捷初始化器必須從相同的類里調(diào)用另一個(gè)初始化器
  • 便捷初始化器最終必須調(diào)用一個(gè)指定初始化器

28.什么可選鏈?

可選鏈?zhǔn)且粋€(gè)調(diào)用和查詢可選屬性、方法和下標(biāo)的過程,它可能為 nil 。如果可選項(xiàng)包含值,屬性、方法或者下標(biāo)的調(diào)用成功;如果可選項(xiàng)是 nil ,屬性、方法或者下標(biāo)的調(diào)用會(huì)返回 nil 。多個(gè)查詢可以鏈接在一起,如果鏈中任何一個(gè)節(jié)點(diǎn)是 nil ,那么整個(gè)鏈就會(huì)得體地失敗。

  • 多個(gè)?可以鏈接在一起
  • 如果鏈中任何一個(gè)節(jié)點(diǎn)是nil,那么整個(gè)鏈就會(huì)調(diào)用失敗

29. 什么是運(yùn)算符重載(Operator Overload)?

類、結(jié)構(gòu)體、枚舉可以為現(xiàn)有的運(yùn)算符提供自定義的實(shí)現(xiàn),這個(gè)操作叫做:運(yùn)算符重載

struct Point {
    var x: Int
    var y: Int

    // 重載運(yùn)算符
    static func + (p1: Point, p2: Point) -> Point   {
        return Point(x: p1.x + p2.x, y: p1.y + p2.y)
    }
}

var p1 = Point(x: 10, y: 10)
var p2 = Point(x: 20, y: 20)
var p3 = p1 + p2

收錄 | 原文地址


結(jié)語

再次說一聲,對(duì)于答案,不一定都合適,歡迎大家積極討論;整理不易,如果您覺得還不錯(cuò),麻煩在文末 “點(diǎn)個(gè)贊” ,或者留下您的評(píng)論“Mark” 一下,謝謝您的支持


推薦文集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評(píng)論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,324評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評(píng)論 1 317
  • 茶點(diǎn)故事閱讀 72,417評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,783評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,960評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,522評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,267評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,471評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,698評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評(píng)論 1 294
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,204評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,436評(píng)論 2 378

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