2020年疫情之下iOS大廠面試題總結(jié)

原文:https://juejin.im/post/6862898534857834510

開篇

2020年注定是一個(gè)特殊且不平凡的一年。疫情之下,內(nèi)憂外患,部分企業(yè),倒下的倒下,扣薪的扣薪……,在這樣的大環(huán)境之下,即是危機(jī)也是機(jī)會(huì),毅然決定踏上求職之路。起初自信滿滿,在沒有做好充分準(zhǔn)備情況之下,簡歷寥寥草草,簡簡單單,以至于錯(cuò)失不少好機(jī)會(huì)。切記切記!吃一塹長一智。最后通過優(yōu)化精簡排版簡歷,接到不少互聯(lián)網(wǎng)大廠的邀約面試。事實(shí)證明,擁有一份好簡歷,你已經(jīng)成功一半了。最終,通過兩個(gè)月的艱苦奮戰(zhàn),終于拿到自己比較滿意的offer。為了做個(gè)總結(jié),特開此篇,僅供參考~

1、面試經(jīng)歷

坐標(biāo):深圳,面試公司數(shù):約15家, offer:到手的有2兩個(gè),還有2家也進(jìn)入談薪階段,談完后就一直沒下文了,表示很郁悶。 面試方式:大部分采用遠(yuǎn)程視頻面試,極少現(xiàn)場面試。面試特點(diǎn):一輪iOS技術(shù)面(OC基礎(chǔ)+OC底層+算法), 二輪廣泛技術(shù)面(網(wǎng)絡(luò)工程+數(shù)據(jù)結(jié)構(gòu)+算法)+HR面。總體感受,今年面試最大特點(diǎn)是,首先.機(jī)會(huì)比往年少很多,iOS招聘需求主要集中在3-5年工作經(jīng)驗(yàn)(換句話就是說崗位薪資20k普遍是上限,當(dāng)然大廠除外),其次. 技術(shù)方面:OC底層已是必須掌握,Swift極少被提到。

2、iOS高頻(基礎(chǔ)+底層)面試題

1. 你在開發(fā)過程中常用到哪些定時(shí)器,定時(shí)器時(shí)間會(huì)有誤差嗎,如果有,為什么會(huì)有誤差?

iOS中常NSTimer、CADisplayLink、GCD定時(shí)器,其中NSTimer、CADisplayLink基于NSRunLoop實(shí)現(xiàn),故存在誤差,GCD定時(shí)器只依賴系統(tǒng)內(nèi)核,相對(duì)一前兩者是比較準(zhǔn)時(shí)的。

誤差原因是:與NSRunLoop機(jī)制有關(guān), 因?yàn)镽unLoop每跑完一次圈再去檢查當(dāng)前累計(jì)時(shí)間是否已經(jīng)達(dá)到定時(shí)設(shè)置的間隔時(shí)間,如果未達(dá)到,RunLoop將進(jìn)入下一輪任務(wù),待任務(wù)結(jié)束之后再去檢查當(dāng)前累計(jì)時(shí)間,而此時(shí)的累計(jì)時(shí)間可能已經(jīng)超過了定時(shí)器的間隔時(shí)間,故會(huì)存在誤差。

參考《iOS常見三種定時(shí)器-NSTimer、CADisplayLink、GCD定時(shí)器》

作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要,這是一個(gè)我的iOS交流群:761407670 不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長!

2. NSTimer、CADisplayLink會(huì)產(chǎn)生循環(huán)引用嗎?如果會(huì),你是如何解決的?

如果直接使用,會(huì)產(chǎn)生循環(huán)引用問題。可以增加一個(gè)中間類,給這個(gè)類添加一個(gè)用weak修飾的id 類型target屬性,并重寫中間類的消息轉(zhuǎn)發(fā)方法。實(shí)現(xiàn)如下代碼:

聲明文件.h:

#import <Foundation/Foundation.h>

@interface LXProxy : NSProxy
+ (instancetype)proxyWithTarget:(id)target;

@end

復(fù)制代碼

實(shí)現(xiàn)文件.m

#import "LXProxy.h"

@interface LXProxy ()

/** weak target*/
@property (nonatomic, weak) id target;

@end

@implementation LXProxy

+ (instancetype)proxyWithTarget:(id)target{
LXProxy *proxy = [LXProxy alloc];
proxy.target = target;

return proxy;

}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel{
return [self.target methodSignatureForSelector:sel];

}

- (void)forwardInvocation:(NSInvocation *)invocation{
[invocation invokeWithTarget:self.target];

}

@end
復(fù)制代碼

調(diào)用代碼:

 _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:[LXProxy proxyWithTarget:self] selector:@selector(test) userInfo:nil repeats:YES];
復(fù)制代碼

3. 對(duì)Runtime有了解嗎,Runtime的方法查找過程是什么樣的?有哪些實(shí)際應(yīng)用?

runtime是OC動(dòng)態(tài)語言的運(yùn)行時(shí)機(jī)制,OC的方法調(diào)用最后都轉(zhuǎn)成了runtime的objc_msgSend函數(shù)。

3.1 Runtime消息傳遞:

image

<figcaption></figcaption>

  1. 通過哈希算法,先從方法緩存中查找,如果命中,調(diào)用方法結(jié)束流程
  2. 如果緩存中沒有,則去當(dāng)前類的方法列表中查找,如果命中,調(diào)用方法,加入當(dāng)前方法緩存中,結(jié)束流程
  3. 如果當(dāng)前類沒有對(duì)應(yīng)方法,則去逐級(jí)父類方法列表中查找,如果命中,調(diào)用方法,加入當(dāng)前方法緩存中,結(jié)束流程
    4.如果方法都不存在,進(jìn)入方法動(dòng)態(tài)解析,轉(zhuǎn)入消息轉(zhuǎn)發(fā)流程。

注:對(duì)于已經(jīng)排序好的方法列表,采用二分查算法查找對(duì)應(yīng)的執(zhí)行函數(shù),對(duì)應(yīng)沒有排序的列表,采用一般遍歷方法查找對(duì)應(yīng)執(zhí)行函數(shù)。

3.2 消息轉(zhuǎn)發(fā)流程:

image

<figcaption></figcaption>

  1. 調(diào)用動(dòng)態(tài)解析方法resolveClassMethod:(SEL)sel,如果動(dòng)態(tài)添加方法(調(diào)用class_addMethod函數(shù))并返回YES,則結(jié)束流程
  2. 如果上一步?jīng)]有實(shí)現(xiàn)動(dòng)態(tài)添加方法,無論返回Yes還是No,都會(huì)調(diào)用消息接受者重定向forwardingTargetForSelector方法,如果返回重定向接受者,則當(dāng)前流程結(jié)束
  3. 如果返回上一步nil,則會(huì)調(diào)用methodSignatureForSelector獲取函數(shù)的參數(shù)和返回值類型,同時(shí)調(diào)用forwardInvocation消息通知當(dāng)前對(duì)象。
  4. 如果上一步返回nil,消息無法處理,App crash。

3.3 繼承關(guān)系:

image

<figcaption></figcaption>

  1. 實(shí)例對(duì)象(isntance)的isa指針指向類對(duì)象(class),類對(duì)象的存放實(shí)例方法(-方法)
  2. 類對(duì)象(class)的isa指針指向其元類對(duì)象(meta), 元類對(duì)象存放類方法(+方法)
  3. 根類對(duì)象(root class)的isa指針指向根元類對(duì)象(root meta),superclass指針指向nil.
  4. 根元類對(duì)象(root meta)的isa指針指向自己,superclass指針根類對(duì)象(root class)

由此可知, 實(shí)例方法(-方法)查找是沿著其superclass指針逐級(jí)父類查找,終于根類對(duì)象(root class)。而類方法(+方法)查找是沿著其superclass指針逐級(jí)父類(meta)查找,終于根類對(duì)象(root class),如果根類對(duì)象存在同名實(shí)例方法,則會(huì)調(diào)用同名實(shí)例方法

3.4 Runtime實(shí)際運(yùn)用:

  1. 給NSTimer定時(shí)器聲明一個(gè)中間類Proxy(消息轉(zhuǎn)發(fā))
  2. 通過rumtime動(dòng)態(tài)獲取類的所有屬性(json轉(zhuǎn)model、可歸檔類對(duì)屬性的歸檔及解歸檔操作)
  3. 反射機(jī)制(NSClassFromString, CTMediator原理)
  4. 交換系統(tǒng)方法(比如交換viewController生命周期方法,從而進(jìn)行統(tǒng)一埋點(diǎn)等操作)
  5. 給分類添加屬性(通過關(guān)聯(lián)對(duì)象,實(shí)現(xiàn)getter, setter方法)

4. +load和+initlize調(diào)用時(shí)機(jī)?現(xiàn)在有一個(gè)類,給其添加了多個(gè)分類,并且每個(gè)實(shí)現(xiàn)分類都實(shí)現(xiàn)了相同的類方法(比如+test),在調(diào)用這個(gè)方法時(shí),會(huì)調(diào)用到哪個(gè)分類?

  1. +initialize 方法,會(huì)在第一次初始化這個(gè)類之前被調(diào)用,我們用它來初始化靜態(tài)變量。+load 方法會(huì)在加載類的時(shí)候就被調(diào)用,也就是 ios 應(yīng)用啟動(dòng)的時(shí)候,就會(huì)加載所有的類,就會(huì)調(diào)用每個(gè)類的 +load 方法。initialize 方法類似一個(gè)懶加載,如果沒有使用這個(gè)類,那么系統(tǒng)默認(rèn)不會(huì)去調(diào)用這個(gè)方法,且默認(rèn)只加載一次,且調(diào)用發(fā)生在 +init 方法之前。

  2. 調(diào)用最后參與編譯的分類的test方法。原因:Xcode在編譯時(shí)根據(jù)buildPhases->Compile Sources里面的從上至下順序編譯的,通過壓棧的方式將多個(gè)分類壓棧,且根據(jù)后進(jìn)先出的原則,后編譯的會(huì)被先調(diào)用(插入頂部添加,即[methodLists insertObject:category_method atIndex:0]。所以objc_msgSend遍歷方法列表查找SEL 對(duì)應(yīng)的IMP時(shí),會(huì)先找到最后參與編譯的分類)當(dāng)objc_msgSend找到方法并調(diào)用之后,結(jié)束傳遞消息,所以就形成了所謂的“覆蓋”。

5. App冷啟動(dòng)優(yōu)化?

App冷啟動(dòng)優(yōu)化方案博客非常之多,概括總結(jié)大致如下:

  1. pre-main優(yōu)化:減少動(dòng)態(tài)靜態(tài)庫,合并動(dòng)態(tài)庫,移除廢棄第三方庫及所依賴的系統(tǒng)庫,二進(jìn)制重排(抖音優(yōu)化方案)
  2. runtime對(duì)類的注冊,類對(duì)象的初始化,load方法加載階段:精簡類,合并分類,移除廢棄分類等等
  3. main函數(shù)之后,推遲對(duì)三方庫注冊及延時(shí)調(diào)用耗時(shí)操作函數(shù)。可以通過Instruments-->Time Profiler: 性能分析,定位耗時(shí)函數(shù)

6. UIView和CALayer有了解嗎,UI卡頓原因是什么,什么是離屏渲染,為什么會(huì)產(chǎn)生離屏渲染,如何避免觸發(fā)離屏渲染?

  1. UIView和CALayer遵循單一職責(zé)原則,UIView負(fù)責(zé)事件處理,參與響應(yīng)鏈,為CALayer提供顯示的內(nèi)容,CALayer負(fù)責(zé)內(nèi)容顯示。
  2. UI卡頓原因:參考

7. 事件響應(yīng)響應(yīng)鏈?zhǔn)鞘裁礃拥模縯ouchbegin,button touch,手勢的區(qū)別和聯(lián)系?

8. 實(shí)際開發(fā)過程當(dāng)中,您使用到哪些設(shè)計(jì)模式?說說單例模式優(yōu)缺點(diǎn)?蘋果設(shè)計(jì)的類對(duì)象是不是單例模式?

9. 實(shí)際開發(fā)過程當(dāng)中,您使用到哪些多線程,GCD與NSOperationQueue有什么聯(lián)系?

10. Runloop響應(yīng)事件類型,常用幾種mode類型,與GCD有什么聯(lián)系?

11. 說說你對(duì)Block的理解,有幾種類型的Block, Block在捕獲自變量,局部靜態(tài)變量,全局變量,全局靜態(tài)變量有什么區(qū)別, 什么情況下要注意Block循環(huán)引用問題?

12. NSString屬性,使用什么關(guān)鍵字修飾,使用copy和strong修飾,有什么區(qū)別?

13. 什么是引用計(jì)數(shù),說說你對(duì)自動(dòng)釋放池的理解,它是什么時(shí)候釋放的,為什么用__weak修飾的變量所指向的對(duì)象在釋放時(shí)會(huì)自動(dòng)把變量指針置為nil?

3、網(wǎng)絡(luò)工程面試題

1. HTTPS和HTTP有什么區(qū)別,HTTPS加密過程是什么樣的,對(duì)稱加密和非對(duì)稱解密各有什么優(yōu)缺點(diǎn)?

HTTPS協(xié)議是由SSL/TLS+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,要比http協(xié)議安全
HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩涣硪环N就是確認(rèn)網(wǎng)站的真實(shí)性。
HTTP與HTTPS的區(qū)別,詳細(xì)介紹

2. TCP和UDP有什么區(qū)別,TCP是可靠傳輸嗎,如果保證其可靠性?

2.1 TCP和UDP區(qū)別:

  1. TCP面向連接(如打電話要先撥號(hào)建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
  2. TCP提供可靠的服務(wù)。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保證可靠交付
  3. TCP面向字節(jié)流,實(shí)際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報(bào)文的UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用,如IP電話,實(shí)時(shí)視頻會(huì)議等)
  4. 每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信
  5. TCP首部開銷20字節(jié);UDP的首部開銷小,只有8個(gè)字節(jié)
  6. TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
    參考1

2.2 TCP可靠性:

  1. 校驗(yàn)和
  2. 確認(rèn)應(yīng)答與序列號(hào)
  3. 超時(shí)重傳
  4. 連接管理
  5. 流量控制
  6. 擁塞控制(慢啟動(dòng),擁塞避免,快重傳,快恢復(fù))
    參考2

3. 如何針對(duì)App弱網(wǎng)情況優(yōu)化

參考:淺談APP弱網(wǎng)優(yōu)化

4、算法編程面試題

1. 判斷一個(gè)單向鏈表是否有環(huán)?

1.快慢雙指針法,快指針一次走兩步,慢指針一次走一步,如果有環(huán)必會(huì)相遇

 public class ListNode {
     public var val: Int
     public var next: ListNode?
     public init(_ val: Int) {
         self.val = val
         self.next = nil
     }
 }

func validedCycleNoded(_ node: ListNode?) -> Bool {
    if node == nil {
        return false
    }

    var fast = node, slow = node

    while fast != nil {
        fast = fast?.next?.next
        slow = slow?.next

        if fast?.val == slow?.val {
            return true
        }
    }

    return false
}
復(fù)制代碼
  1. 可以使用集合(Set)來判斷,來一次遍歷,把所有node添加到集合中,如果有重復(fù),則肯定要有環(huán)

2. 如何計(jì)算二叉樹的高度?

遞歸算法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */
class Solution {
    func maxDepth(_ root: TreeNode?) -> Int {
        guard let root = root else {return 0;}  
        return max(maxDepth(root.left), maxDepth(root.right)) + 1
    }
}
復(fù)制代碼

3. 合并兩個(gè)有序數(shù)組,同時(shí)去重

func mergeSortedArray(_ a: [Int], b:[Int]) ->[Int] {

    var i = 0
    var j = 0
    var ans = [Int]()

    //合并數(shù)組
    while i < a.count && j < b.count {
        if a[i] > b[j] {
            ans.append(b[j])
            j += 1
        }else if (a[i] == b[j]) {
            ans.append(b[j])
            j += 1
            i += 1
        }else {
            ans.append(a[i])
            i += 1
        }
    }

     //數(shù)組a有未合并元素
    while i < a.count {
        ans.append(a[i])
        i += 1
    }

    //數(shù)組b有未合并元素
    while j < b.count {
        ans.append(b[j])
        j += 1
    }

    return ans
}
復(fù)制代碼

4. 字符串編輯最短距離(LeeCode)

LeeCode-72.編輯距離
解法:動(dòng)態(tài)規(guī)劃

5. 判斷括號(hào)的有效性(LeeCode)

LeeCode-20.有效的括號(hào)

class Solution {
    func isValid(_ s: String) -> Bool {
     if s.isEmpty {
        return true;
    }

    let map = ["}":"{", ")":"(","]":"["]
    var stack = [String]()

    for c in s {
       let key = String(c)
        if key == "{" || key == "(" ||  key == "[" {
            stack.append(key)
        } else if !stack.isEmpty && map[key] == stack.last {
            stack.removeLast()
        } else {
            return false
        }
    }

    return stack.isEmpty
    }

}
復(fù)制代碼

6. 25匹馬,現(xiàn)有5條跑道,沒有計(jì)時(shí)器,要找出最快3匹馬,至少要跑幾場?

至少跑7場,

  1. 對(duì)25匹馬隨機(jī)分成5個(gè)組(A,B,C,D,E,F),每組跑一場,記錄每一匹馬在當(dāng)前組中名次(第1名,第2名,第3名)(跑了五場)
  2. 從各個(gè)組中選取名次為第一名的馬組成一組,跑一場,記錄名次(第六場),本組第1名則確定了25匹馬中最快的一匹馬
  3. 選取第六場中名次為第1名的所在原來組名次為第2、3名馬,選取第六場中名次為第2名的所在原來組名次第1、2名馬(它自己+第2名),選取第六場中名次為第3名所在原來組名次第1名的馬(它自己),組成一組,跑一場,記錄名次(第七場),本場的第1、2名就是25匹馬中最快的第2、3名

7. 8瓶液體,其中1瓶有毒藥,毒藥1小時(shí)后至死,請(qǐng)問最快找出毒藥,需要幾只老鼠?

1只老鼠可以斷定2瓶液體,2^3=8,所以需要3只老鼠即可,
對(duì)液體進(jìn)行編號(hào),001,010,011,100,101,110,111
給1號(hào)老鼠喂編碼個(gè)位數(shù)上是1的液體(001,011,101,111),
給2號(hào)老鼠喂編碼十位數(shù)上是1的液體(010,011,110,111),
給3號(hào)老鼠喂編碼百位數(shù)上是1的液體(100,101,110,111),
1小時(shí)后,
如果老鼠全活, 8號(hào)液體有毒,
如果全都死,7號(hào)液體有毒,
如果1號(hào)死,2,3活, 1號(hào)液體有毒
如果2號(hào)死, 1,3活,2號(hào)液體有毒
如果3號(hào)死,1,2活, 4號(hào)液體有毒
如果1,2號(hào)死,3活, 3號(hào)液體有毒
如果1,3號(hào)死,2活, 5號(hào)液體有毒
如果2,3號(hào)死,1活, 6號(hào)液體有毒

5、其他面試題

1. 如下結(jié)構(gòu)體,大小是多少?

struct  Node {
char a;
int b;
}  node;
復(fù)制代碼

結(jié)構(gòu)體大小是8,考察結(jié)構(gòu)體特性,內(nèi)存對(duì)齊原則。

2. 定義一個(gè)全局變量a = 0; 開辟兩條子線程訪問 a = a + 1; 各for loop 10次,a的最終結(jié)果是多少?

<=20,線程安全問題。

3. 公司員工表(user)中有入職時(shí)間(t1)和離職時(shí)間(t2),請(qǐng)編寫sql語句,查詢18年3月(date1)-18年6月(date2)所有在職員工人信息

select * from user where 入職時(shí)間<201806 and (離職時(shí)間 is null or離職時(shí)間>201803)。

由于時(shí)間關(guān)系,后面慢慢完善面試題答案。最后借用《三十而已》電視劇的臺(tái)詞作為結(jié)尾:“以上就是我面試遇到的故事,未完待續(xù)~~~”

作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要,這是一個(gè)我的iOS交流群:761407670 不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經(jīng)驗(yàn),討論技術(shù), 大家一起交流學(xué)習(xí)成長!

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