【2018年最新】 iOS面試題及答案(二)

1困介、HomeKit召衔?

是蘋果2014年發(fā)布的智能家居平臺。

2祭陷、什么是 OpenGL苍凛、Quartz 2D?

Quatarz 2d 是Apple提供的基本圖形工具庫兵志。只是適用于2D圖形的繪制醇蝴。
OpenGL,是一個跨平臺的圖形開發(fā)庫想罕。適用于2D和3D圖形的繪制悠栓。

3、ffmpeg框架按价?

?ffmpeg 是音視頻處理工具惭适,既有音視頻編碼解碼功能,又可以作為播放器使用楼镐。

4癞志、談?wù)?UITableView 的優(yōu)化

1). 正確的復(fù)用cell。
2). 設(shè)計統(tǒng)一規(guī)格的Cell
3). 提前計算并緩存好高度(布局)框产,因為heightForRowAtIndexPath:是調(diào)用最頻繁的方法凄杯;
4). 異步繪制,遇到復(fù)雜界面秉宿,遇到性能瓶頸時戒突,可能就是突破口;
4). 滑動時按需加載描睦,這個在大量圖片展示膊存,網(wǎng)絡(luò)加載的時候很管用!
5). 減少子視圖的層級關(guān)系
6). 盡量使所有的視圖不透明化以及做切圓操作酌摇。
7). 不要動態(tài)的add 或者 remove 子控件膝舅。最好在初始化時就添加完,然后通過hidden來控制是否顯示窑多。
8). 使用調(diào)試工具分析問題仍稀。

5、如何實行cell的動態(tài)的行高

如果希望每條數(shù)據(jù)顯示自身的行高埂息,必須設(shè)置兩個屬性技潘,1.預(yù)估行高遥巴,2.自定義行高。
設(shè)置預(yù)估行高 tableView.estimatedRowHeight = 200享幽。
設(shè)置定義行高 tableView.rowHeight = UITableViewAutomaticDimension铲掐。
如果要讓自定義行高有效,必須讓容器視圖有一個自下而上的約束值桩。

6摆霉、說說你對 block 的理解

棧上的自動復(fù)制到堆上,block 的屬性修飾符是 copy奔坟,循環(huán)引用的原理和解決方案携栋。

7、說說你對 runtime 的理解

主要是方法調(diào)用時如何查找緩存咳秉,如何找到方法婉支,找不到方法時怎么轉(zhuǎn)發(fā),對象的內(nèi)存布局澜建。

8向挖、什么是野指針、空指針炕舵?

野指針:不知道指向了哪里的指針叫野指針何之。即指針指向不確定,指針存的地址是一個垃圾值咽筋,未初始化谦去。
空指針:不指向任何位置的指針叫空指針自娩。即指針沒有指向吓蘑,指針存的地址是一個空地址钥顽,NULL。

9舞箍、什么是 OOA / OOD / OOP ?

OOA(Object Oriented Analysis) --面向?qū)ο蠓治?br> OOD(Object Oriented Design) --面向?qū)ο笤O(shè)計
OOP(Object Oriented Programming)--面向?qū)ο缶幊?/p>

10. 多線程是什么

多線程是個復(fù)雜的概念舰褪,按字面意思是同步完成多項任務(wù),提高了資源的使用效率疏橄,從硬件占拍、操作系統(tǒng)、應(yīng)用軟件不同的角度去看捎迫,多線程被賦予不同的內(nèi)涵晃酒,對于硬件,現(xiàn)在市面上多數(shù)的CPU都是多核的窄绒,多核的CPU運算多線程更為出色;從操作系統(tǒng)角度贝次,是多任務(wù),現(xiàn)在用的主流操作系統(tǒng)都是多任務(wù)的彰导,可以一邊聽歌蛔翅、一邊寫博客;對于應(yīng)用來說敲茄,多線程可以讓應(yīng)用有更快的回應(yīng),可以在網(wǎng)絡(luò)下載時山析,同時響應(yīng)用戶的觸摸操作堰燎。在iOS應(yīng)用中,對多線程最初的理解笋轨,就是并發(fā)秆剪,它的含義是原來先做燒水,再摘菜爵政,再炒菜的工作鸟款,會變成燒水的同時去摘菜,最后去炒菜茂卦。

11. iOS 中的多線程

iOS中的多線程,是Cocoa框架下的多線程组哩,通過Cocoa的封裝等龙,可以讓我們更為方便的使用線程,做過C++的同學(xué)可能會對線程有更多的理解伶贰,比如線程的創(chuàng)立蛛砰,信號量、共享變量有認識黍衙,Cocoa框架下會方便很多泥畅,它對線程做了封裝,有些封裝琅翻,可以讓我們創(chuàng)建的對象位仁,本身便擁有線程,也就是線程的對象化抽象方椎,從而減少我們的工程聂抢,提供程序的健壯性。

  • GCD是(Grand Central Dispatch)的縮寫 棠众,從系統(tǒng)級別提供的一個易用地多線程類庫琳疏,具有運行時的特點,能充分利用多核心硬件闸拿。GCD的API接口為C語言的函數(shù)空盼,函數(shù)參數(shù)中多數(shù)有Block,關(guān)于Block的使用參看這里新荤,為我們提供強大的“接口”揽趾,對于GCD的使用參見本文

  • NSOperation與Queue

NSOperation是一個抽象類,它封裝了線程的細節(jié)實現(xiàn)苛骨,我們可以通過子類化該對象但骨,加上NSQueue來同面向?qū)ο蟮乃季S励七,管理多線程程序。具體可參看這里:一個基于NSOperation的多線程網(wǎng)絡(luò)訪問的項目奔缠。

  • NSThread

NSThread是一個控制線程執(zhí)行的對象掠抬,它不如NSOperation抽象,通過它我們可以方便的得到一個線程校哎,并控制它两波。但NSThread的線程之間的并發(fā)控制,是需要我們自己來控制的闷哆,可以通過NSCondition實現(xiàn)腰奋。
參看 iOS多線程編程之NSThread的使用
其他多線程
在Cocoa的框架下,通知抱怔、Timer和異步函數(shù)等都有使用多線程劣坊,(待補充).

12. 在項目什么時候選擇使用GCD,什么時候選擇NSOperation?

項目中使用NSOperation的優(yōu)點是NSOperation是對線程的高度抽象屈留,在項目中使用它局冰,會使項目的程序結(jié)構(gòu)更好,子類化NSOperation的設(shè)計思路灌危,是具有面向?qū)ο蟮膬?yōu)點(復(fù)用康二、封裝),使得實現(xiàn)是多線程支持勇蝙,而接口簡單沫勿,建議在復(fù)雜項目中使用。

項目中使用GCD的優(yōu)點是GCD本身非常簡單味混、易用产雹,對于不復(fù)雜的多線程操作,會節(jié)省代碼量翁锡,而Block參數(shù)的使用洽故,會是代碼更為易讀,建議在簡單項目中使用盗誊。

13 KVO时甚,NSNotification,delegate及block區(qū)別
  • KVO就是cocoa框架實現(xiàn)的觀察者模式哈踱,一般同KVC搭配使用荒适,通過KVO可以監(jiān)測一個值的變化,比如View的高度變化开镣。是一對多的關(guān)系刀诬,一個值的變化會通知所有的觀察者。

  • NSNotification是通知邪财,也是一對多的使用場景陕壹。在某些情況下质欲,KVO和NSNotification是一樣的,都是狀態(tài)變化之后告知對方糠馆。NSNotification的特點嘶伟,就是需要被觀察者先主動發(fā)出通知,然后觀察者注冊監(jiān)聽后再來進行響應(yīng)又碌,比KVO多了發(fā)送通知的一步九昧,但是其優(yōu)點是監(jiān)聽不局限于屬性的變化,還可以對多種多樣的狀態(tài)變化進行監(jiān)聽毕匀,監(jiān)聽范圍廣铸鹰,使用也更靈活。

  • delegate 是代理皂岔,就是我不想做的事情交給別人做蹋笼。比如狗需要吃飯,就通過delegate通知主人躁垛,主人就會給他做飯剖毯、盛飯、倒水缤苫,這些操作,這些狗都不需要關(guān)心墅拭,只需要調(diào)用delegate(代理人)就可以了活玲,由其他類完成所需要的操作。所以delegate是一對一關(guān)系谍婉。

  • block是delegate的另一種形式舒憾,是函數(shù)式編程的一種形式。使用場景跟delegate一樣穗熬,相比delegate更靈活镀迂,而且代理的實現(xiàn)更直觀。

  • KVO一般的使用場景是數(shù)據(jù)唤蔗,需求是數(shù)據(jù)變化探遵,比如股票價格變化,我們一般使用KVO(觀察者模式)妓柜。

  • delegate一般的使用場景是行為箱季,需求是需要別人幫我做一件事情,比如買賣股票棍掐,我們一般使用delegate藏雏。

  • Notification一般是進行全局通知,比如利好消息一出作煌,通知大家去買入掘殴。

  • delegate是強關(guān)聯(lián)赚瘦,就是委托和代理雙方互相知道,你委托別人買股票你就需要知道經(jīng)紀人奏寨,經(jīng)紀人也不要知道自己的顧客起意。

  • Notification是弱關(guān)聯(lián),利好消息發(fā)出服爷,你不需要知道是誰發(fā)的也可以做出相應(yīng)的反應(yīng)杜恰,同理發(fā)消息的人也不需要知道接收的人也可以正常發(fā)出消息。

14 將一個函數(shù)在主線程執(zhí)行的4種方法
  • GCD方法仍源,通過向主線程隊列發(fā)送一個block塊心褐,使block里的方法可以在主線程中執(zhí)行。
dispatch_async(dispatch_get_main_queue(), ^{      
    //需要執(zhí)行的方法
});
  • NSOperation 方法
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];  //主隊列
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
    //需要執(zhí)行的方法
}];
[mainQueue addOperation:operation];
  • NSThread 方法
[self performSelector:@selector(method) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES modes:nil];

[self performSelectorOnMainThread:@selector(method) withObject:nil waitUntilDone:YES];

[[NSThread mainThread] performSelector:@selector(method) withObject:nil];
RunLoop方法
[[NSRunLoop mainRunLoop] performSelector:@selector(method) withObject:nil];
  • RunLoop方法
[[NSRunLoop mainRunLoop] performSelector:@selector(method) withObject:nil];
15笼踩、 如何讓計時器調(diào)用一個類方法
  • 計時器只能調(diào)用實例方法逗爹,但是可以在這個實例方法里面調(diào)用靜態(tài)方法。
  • 使用計時器需要注意嚎于,計時器一定要加入RunLoop中掘而,并且選好model才能運行。scheduledTimerWithTimeInterval方法創(chuàng)建一個計時器并加入到RunLoop中所以可以直接使用于购。
  • 如果計時器的repeats選擇YES說明這個計時器會重復(fù)執(zhí)行袍睡,一定要在合適的時機調(diào)用計時器的invalid。不能在dealloc中調(diào)用肋僧,因為一旦設(shè)置為repeats 為yes斑胜,計時器會強持有self,導(dǎo)致dealloc永遠不會被調(diào)用嫌吠,這個類就永遠無法被釋放止潘。比如可以在viewDidDisappear中調(diào)用,這樣當(dāng)類需要被回收的時候就可以正常進入dealloc中了辫诅。
 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];

-(void)timerMethod
{
//調(diào)用類方法
    [[self class] staticMethod];
}

-(void)invalid
{
    [timer invalid];
    timer = nil;
}
16凭戴、 如何重寫類方法

1、在子類中實現(xiàn)一個同基類名字一樣的靜態(tài)方法
2炕矮、在調(diào)用的時候不要使用類名調(diào)用么夫,而是使用[self class]的方式調(diào)用。原理肤视,用類名調(diào)用是早綁定魏割,在編譯期綁定,用[self class]是晚綁定钢颂,在運行時決定調(diào)用哪個方法钞它。

17、 NSTimer創(chuàng)建后,會在哪個線程運行遭垛。

用scheduledTimerWithTimeInterval創(chuàng)建的尼桶,在哪個線程創(chuàng)建就會被加入哪個線程的RunLoop中就運行在哪個線程
自己創(chuàng)建的Timer,加入到哪個線程的RunLoop中就運行在哪個線程锯仪。

18泵督、 id和NSObject*的區(qū)別

id是一個 objc_object 結(jié)構(gòu)體指針,定義是

typedef struct objc_object *id
  • id可以理解為指向?qū)ο蟮闹羔樖病K衞c的對象 id都可以指向小腊,編譯器不會做類型檢查,id調(diào)用任何存在的方法都不會在編譯階段報錯久窟,當(dāng)然如果這個id指向的對象沒有這個方法秩冈,該崩潰還是會崩潰的。

  • NSObject *指向的必須是NSObject的子類斥扛,調(diào)用的也只能是NSObjec里面的方法否則就要做強制類型轉(zhuǎn)換入问。

  • 不是所有的OC對象都是NSObject的子類,還有一些繼承自NSProxy稀颁。NSObject *可指向的類型是id的子集芬失。

19、淺談iOS開發(fā)中方法延遲執(zhí)行的幾種方式?
  • Method1. performSelector方法
  • Method2. NSTimer定時器
  • Method3. NSThread線程的sleep
  • Method4. GCD
公用延遲執(zhí)行方法:
- (void)delayMethod{ 
      NSLog(@"delayMethodEnd");
}
Method1:performSelector
[self performSelector:@selector(delayMethod) withObject:nil]

可傳任意類型參數(shù)/ afterDelay:2.0];
注:此方法是一種非阻塞的執(zhí)行方式匾灶,未找到取消執(zhí)行的方法棱烂。

程序運行結(jié)束
2015-08-31 10:56:59.361 CJDelayMethod[1080:39604] delayMethodStart2015-08-31 10:56:59.363 CJDelayMethod[1080:39604] nextMethod2015-08-31 10:57:01.364 CJDelayMethod[1080:39604] delayMethodEnd

Method2:NSTimer定時器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

注:此方法是一種非阻塞的執(zhí)行方式,
取消執(zhí)行方法:- (void)invalidate;即可

程序運行結(jié)束
2015-08-31 10:58:10.182 CJDelayMethod[1129:41106] delayMethodStart2015-08-31 10:58:10.183 CJDelayMethod[1129:41106] nextMethod2015-08-31 10:58:12.185 CJDelayMethod[1129:41106] delayMethodEnd

Method3:NSThread線程的sleep
[NSThread sleepForTimeInterval:2.0];

注:此方法是一種阻塞執(zhí)行方式阶女,建議放在子線程中執(zhí)行颊糜,否則會卡住界面。但有時還是需要阻塞執(zhí)行张肾,如進入歡迎界面需要沉睡3秒才進入主界面時芭析。
沒有找到取消執(zhí)行方式锚扎。

程序運行結(jié)束
2015-08-31 10:58:41.501 CJDelayMethod[1153:41698] delayMethodStart2015-08-31 10:58:43.507 CJDelayMethod[1153:41698] nextMethod

Method4:GCD
__block ViewController/*主控制器*/ *weakSelf = self;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0/*延遲執(zhí)行時間*/ * NSEC_PER_SEC));

dispatch_after(delayTime, dispatch_get_main_queue(), ^{
    [weakSelf delayMethod];
});`

注:此方法可以在參數(shù)中選擇執(zhí)行的線程吞瞪,是一種非阻塞執(zhí)行方式。沒有找到取消執(zhí)行方式驾孔。

程序運行結(jié)束
2015-08-31 10:59:21.652 CJDelayMethod[1181:42438] delayMethodStart2015-08-31 10:59:21.653 CJDelayMethod[1181:42438] nextMethod2015-08-31 10:59:23.653 CJDelayMethod[1181:42438] delayMethodEnd

20芍秆、NSPersistentStoreCoordinator , NSManaged0bjectContext 和NSManaged0bject中的那些需要在線程中創(chuàng)建或者傳遞?

答:NSPersistentStoreCoordinator是持久化存儲協(xié)調(diào)者翠勉,主要用于協(xié)調(diào)托管對象上下文和持久化存儲區(qū)之間的關(guān)系妖啥。NSManagedObjectContext使用協(xié)調(diào)者的托管對象模型將數(shù)據(jù)保存到數(shù)據(jù)庫,或查詢數(shù)據(jù)对碌。

20荆虱、您是否做過一部的網(wǎng)絡(luò)處理和通訊方面的工作?如果有,能具體介紹一下實現(xiàn)策略么

答:使用NSOperation發(fā)送異步網(wǎng)絡(luò)請求怀读,使用NSOperationQueue管理線程數(shù)目及優(yōu)先級诉位,底層是用NSURLConnetion,

21菜枷、你使用過Objective-C的運行時編程(Runtime Programming)么苍糠?如果使用過,你用它做了什么啤誊?你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱嗎岳瞭?

答:Objecitve-C的重要特性是Runtime(運行時),在#import <objc/runtime.h> 下能看到相關(guān)的方法,用過objc_getClass()和class_copyMethodList()獲取過私有API;使用

Method method1 = class_getInstanceMethod(cls, sel1);
Method method2 = class_getInstanceMethod(cls, sel2);
method_exchangeImplementations(method1, method2);  

代碼交換兩個方法蚊锹,在寫unit test時使用到瞳筏。

22、Core開頭的系列的內(nèi)容枫耳。是否使用過CoreAnimation和CoreGraphics乏矾。UI框架和CA,CG框架的聯(lián)系是什么迁杨?分別用CA和CG做過些什么動畫或者圖像上的內(nèi)容钻心。(有需要的話還可以涉及Quartz的一些內(nèi)容)
UIKit
Core Animation
Core Graphics
Graphics Hardware

答:UI框架的底層有CoreAnimation,CoreAnimation的底層有CoreGraphics铅协。

UIKit
Core Animation
Core Graphics
Graphics Hardware
23捷沸、是否使用過CoreText或者CoreImage等?如果使用過狐史,請談?wù)勀闶褂肅oreText或者CoreImage的體驗痒给。

答:CoreText可以解決復(fù)雜文字內(nèi)容排版問題。CoreImage可以處理圖片骏全,為其添加各種效果苍柏。體驗是很強大,挺復(fù)雜的姜贡。

24.NSNotification和KVO的區(qū)別和用法是什么试吁?什么時候應(yīng)該使用通知,什么時候應(yīng)該使用KVO楼咳,它們的實現(xiàn)上有什么區(qū)別嗎熄捍?如果用protocol和delegate(或者delegate的Array)來實現(xiàn)類似的功能可能嗎?如果可能母怜,會有什么潛在的問題余耽?如果不能,為什么苹熏?

答:NSNotification是通知模式在iOS的實現(xiàn)碟贾,
KVO的全稱是鍵值觀察(Key-value observing),其是基于KVC(key-value coding)的币喧,KVC是一個通過屬性名訪問屬性變量的機制。例如將Module層的變化袱耽,通知到多個Controller對象時粱锐,可以使用NSNotification;如果是只需要觀察某個對象的某個屬性扛邑,可以使用KVO怜浅。
對于委托模式,在設(shè)計模式中是對象適配器模式蔬崩,其是delegate是指向某個對象的恶座,這是一對一的關(guān)系,而在通知模式中沥阳,往往是一對多的關(guān)系跨琳。委托模式,從技術(shù)上可以現(xiàn)在改變delegate指向的對象桐罕,但不建議這樣做脉让,會讓人迷惑,如果一個delegate對象不斷改變功炮,指向不同的對象溅潜。

25、你用過NSOperationQueue么薪伏?如果用過或者了解的話滚澜,你為什么要使用NSOperationQueue,實現(xiàn)了什么嫁怀?請描述它和G.C.D的區(qū)別和類似的地方(提示:可以從兩者的實現(xiàn)機制和適用范圍來描述)设捐。

答:使用NSOperationQueue用來管理子類化的NSOperation對象,控制其線程并發(fā)數(shù)目塘淑。GCD和NSOperation都可以實現(xiàn)對線程的管理萝招,區(qū)別是 NSOperation和NSOperationQueue是多線程的面向?qū)ο蟪橄蟆m椖恐惺褂肗SOperation的優(yōu)點是NSOperation是對線程的高度抽象存捺,在項目中使用它槐沼,會使項目的程序結(jié)構(gòu)更好,子類化NSOperation的設(shè)計思路召噩,是具有面向?qū)ο蟮膬?yōu)點(復(fù)用母赵、封裝)逸爵,使得實現(xiàn)是多線程支持具滴,而接口簡單,建議在復(fù)雜項目中使用师倔。
項目中使用GCD的優(yōu)點是GCD本身非常簡單构韵、易用,對于不復(fù)雜的多線程操作,會節(jié)省代碼量疲恢,而Block參數(shù)的使用凶朗,會是代碼更為易讀,建議在簡單項目中使用显拳。

26棚愤、既然提到G.C.D,那么問一下在使用G.C.D以及block時要注意些什么杂数?它們兩是一回事兒么宛畦?block在ARC中和傳統(tǒng)的MRC中的行為和用法有沒有什么區(qū)別,需要注意些什么揍移?

答:使用block是要注意次和,若將block做函數(shù)參數(shù)時,需要把它放到最后那伐,GCD是Grand Central Dispatch踏施,是一個對線程開源類庫,而Block是閉包罕邀,是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)畅形。

27、對于Objective-C诉探,你認為它最大的優(yōu)點和最大的不足是什么束亏?對于不足之處,現(xiàn)在有沒有可用的方法繞過這些不足來實現(xiàn)需求阵具。如果可以的話碍遍,你有沒有考慮或者實踐過重新實現(xiàn)OC的一些功能,如果有阳液,具體會如何做怕敬?

答:最大的優(yōu)點是它的運行時特性,不足是沒有命名空間帘皿,對于命名沖突东跪,可以使用長命名法或特殊前綴解決,如果是引入的第三方庫之間的命名沖突鹰溜,可以使用link命令及flag解決沖突虽填。

28、你實現(xiàn)過一個框架或者庫以供別人使用么曹动?如果有斋日,請談一談構(gòu)建框架或者庫時候的經(jīng)驗;如果沒有墓陈,請設(shè)想和設(shè)計框架的public的API恶守,并指出大概需要如何做第献、需要注意一些什么方面,來使別人容易地使用你的框架兔港。

答:抽象和封裝庸毫,方便使用。首先是對問題有充分的了解衫樊,比如構(gòu)建一個文件解壓壓縮框架飒赃,從使用者的角度出發(fā),只需關(guān)注發(fā)送給框架一個解壓請求科侈,框架完成復(fù)雜文件的解壓操作盒揉,并且在適當(dāng)?shù)臅r候通知給是哦難過者,如解壓完成兑徘、解壓出錯等刚盈。在框架內(nèi)部去構(gòu)建對象的關(guān)系,通過抽象讓其更為健壯挂脑、便于更改藕漱。其次是API的說明文檔。


qq技術(shù)交流群


qq交流群.jpeg

作者微信公眾號


微信公眾號.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末崭闲,一起剝皮案震驚了整個濱河市肋联,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刁俭,老刑警劉巖橄仍,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牍戚,居然都是意外死亡侮繁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門如孝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宪哩,“玉大人,你說我怎么就攤上這事第晰∷希” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵茁瘦,是天一觀的道長品抽。 經(jīng)常有香客問我,道長甜熔,這世上最難降的妖魔是什么圆恤? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮纺非,結(jié)果婚禮上哑了,老公的妹妹穿的比我還像新娘。我一直安慰自己烧颖,他們只是感情好弱左,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕淮,像睡著了一般拆火。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涂圆,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天们镜,我揣著相機與錄音,去河邊找鬼润歉。 笑死模狭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的踩衩。 我是一名探鬼主播嚼鹉,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驱富!你這毒婦竟也來了锚赤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤褐鸥,失蹤者是張志新(化名)和其女友劉穎线脚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叫榕,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡浑侥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晰绎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭吨。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寒匙,靈堂內(nèi)的尸體忽然破棺而出零如,到底是詐尸還是另有隱情,我是刑警寧澤锄弱,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布考蕾,位于F島的核電站,受9級特大地震影響会宪,放射性物質(zhì)發(fā)生泄漏肖卧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一掸鹅、第九天 我趴在偏房一處隱蔽的房頂上張望塞帐。 院中可真熱鬧拦赠,春花似錦、人聲如沸葵姥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榔幸。三九已至允乐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間削咆,已是汗流浹背牍疏。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拨齐,地道東北人鳞陨。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像瞻惋,于是被迫代替她去往敵國和親炊邦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,125評論 29 470
  • 設(shè)計模式是什么熟史? 你知道哪些設(shè)計模式馁害,并簡要敘述? 設(shè)計模式是一種編碼經(jīng)驗蹂匹,就是用比較成熟的邏輯去處理某一種類型的...
    如果我們是朋友閱讀 669評論 0 9
  • 設(shè)計模式是什么碘菜? 你知道哪些設(shè)計模式,并簡要敘述限寞? 設(shè)計模式是一種編碼經(jīng)驗忍啸,就是用比較成熟的邏輯去處理某一種類型的...
    small_Sun閱讀 450評論 0 4
  • 設(shè)計模式是什么? 你知道哪些設(shè)計模式履植,并簡要敘述计雌?設(shè)計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類型的事...
    irenb閱讀 5,183評論 1 20
  • 設(shè)計模式是什么玫霎? 你知道哪些設(shè)計模式凿滤,并簡要敘述?設(shè)計模式是一種編碼經(jīng)驗庶近,就是用比較成熟的邏輯去處理某一種類型的事...
    騂躍神話閱讀 863評論 0 11