ios面试题

1.自定义一个delegate

代理的作用:完成委托方交给的任务,委托方有一些任务自己不想完成,但是还需要要实现,则将该任务存放到协议中,由代理完成.但是代理并不会主动的执行任务,需要委托方通知代理.

定义协议(协议中存放代理的任务)

@class delegateView

@protocolViewDelegate

- (void)handleTouchEvent(DelegateView *)aView;

2.定义代理属性,用来存储代理属性

@interface DelegateView :UIView

定义代理属性,需要遵守上面自定义的协议

@property(nonamtic,assign)id<DelegateViewDelegate>delegate;

@end

@interface DelegateViewController()<DelegateViewDelegate>服从协议

为DelegateView指定代理对象.(找个代理干活),例如:我们定义一个红色视图(要求点击时改变自身视图颜色),然后为它指定一个代理对象self(由于定义的视图在视图控制器中),当前的self就是视图控制器类.指定它为代理.有什么活让它干.

DelegateView *redView=[DelegateView alloc]initWithFrame:CGRectMake(30,30,300,300)];

readView.delegate=self;

self.view addSubview;redView


代理类实现协议中的方法.在这只实现了一个必须实现的方法

// 处理触摸开始时的响应事件

-(void)handleTouchBegan:(DelegateView *)aView{

aView.backgroundColor=[UIColor redColor];

}

@end

请概括一下Core Audio,Core Data以及Core Location各是什么。它们对iOS应用有何意义?

Core Audio 是iOS和 MAC 的关于数字音频处理的基础,它提供应用程序用来处理音频的一组软件框架,所有关于IOS音频开发的接口都是由Core Audio来提供或者经过它提供的接口来进行封装的,按照官方的说法是集播放、音频处理、录制为一体的专业技术,通过它我们的程序可以同时录制,播放一个或者多个音频流,自动适应耳机,蓝牙耳机等硬件,响应各种电话中断,静音,震动等,甚至提供3D效果的音乐播放。

Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象。

在此数据操作期间,不需要编写任何SQL语句。使用此功能,要添加CoreData.framework和导入主头文件

Core Location Framework的用途是使用户通过移动设备来获取定位信息和方向信息,还有你的范围,当用户走过某些范围边界就能马上监控到,在iOS上,甚至可以连同beacon联动来确定周边信息。

IOS-Socket和http连接的区别

Socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断开;但是由于各种环境因素可能会是连接断开,比如说:服务器端和客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源,所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。

,浏览的网页都是以http协议传输到你的浏览器,而http是基于socket之上的。socket是一套完成tcp udp协议的接口。

HTTP协议:简单对象访问协议,对应于应用层,HTTP协议是基于TCP连接的。

TCP协议:对应于传输层

IP协议:    对应于网络层

TCP/IP协议是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

HTTP协议:http连接就是所谓的短连接,及客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。

什么是socket

socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等等。而TCP和UDP协议属于传输层。而HTTP是个应用层的协议,它实际上也建立在TCP协议上。(而HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。)

2)socket是对TCP/IP协议的封装,socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用tcp、ip协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口

在一个对象里面self.name="object"和name=“object”有什么不同

self.name = "object"会调用对象的setName()方法,

name = "object"会直接把object赋值给当前对象的name 属性

并且 self.name 这样retainCount会加1,而name就不会

1.深拷贝和浅拷贝的区别

深拷贝就是如果执行拷贝时,只要有可变的无论是可变对象还是可变拷贝(mutableCopy)

浅拷贝就是不可变对象执行的不可变拷贝

简单点说,只有源对象和副本对象都不可变才是浅拷贝,其他的都是深拷贝

copy 创建的是不可变副本(NSString、NSArray、NSDictionary)

mutableCopy 创建的是可变的副本(NSMutableString, NSMutableArray, NSMutableDictionary)

shallow copy 浅拷贝 (指针拷贝):相当于做了一次retain操作,引用计数加1,没有产生新的对象,源对象和副本对象是同一个对象。

deep copy 深拷贝(内容拷贝):源对象和副本对象是两个不同的对象,源对象的引用计数不变,副本对象的引用计数加1(产生了一个新的对象)

copy的效果:对源对象进行拷贝,建立新的副本,彼此修改互不干扰

copy目的:建立对象的副本。

如果对象有可变/不可变版本的区别,copy方法,只能拷贝出不可变的版本

如果对象没有可变/不可变的区别,copy方法就是建立一个副本

副本的特点:彼此的内容一样,具有相同的方法。

浅复制仅复制对象本身,对象里的属性、包含的对象不做复制

深复制复制全部,包括对象的属性和其他对象


1.assign 与weak区别

assign适用于基本数据类型,weak是适用于NSObject对象,并且是一个弱引用。

assign其实也可以用来修饰对象。那么我们为什么不用它修饰对象呢?因为被assign修饰的对象(一般编译的时候会产生警告:Assigning retained object to unsafe property; object will be released after assignment)在释放之后,指针的地址还是存在的,也就是说指针并没有被置为nil,造成野指针。对象一般分配在堆上的某块内存,如果在后续的内存分配中,刚好分到了这块地址,程序就会崩溃掉。

那为什么可以用assign修饰基本数据类型?因为基础数据类型一般分配在栈上,栈的内存会由系统自己自动处理,不会造成野指针。

weak修饰的对象在释放之后,指针地址会被置为nil。所以现在一般弱引用就是用weak。weak使用场景:

在ARC下,在有可能出现循环引用的时候,往往要通过让其中一端使用weak来解决,比如: delegate代理属性,通常就会声明为weak。

自身已经对它进行一次强引用,没有必要再强引用一次时也会使用weak。比如:自定义 IBOutlet控件属性一般也使用weak,当然也可以使用strong。

2.strong 与copy的区别

strong 与copy都会使引用计数加1,但strong是两个指针指向同一个内存地址,copy会在内存里拷贝一份对象,两个指针指向不同的内存地址

3.__block与__weak的区别

__block是用来修饰一个变量,这个变量就可以在block中被修改

__block:使用 __block修饰的变量在block代码块中会被retain(ARC下会retain,MRC下不会retain)

__weak:使用__weak修饰的变量不会在block代码块中被retain

同时,在ARC下,要避免block出现循环引用 __weak typedof(self)weakSelf = self;

4.1 block变量定义时为什么用copy?block是放在哪里的?

block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,可能被随时回收,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。通过copy可以把block拷贝(copy)到堆,保证block的声明域外使用。

特别需要注意的地方就是在把block放到集合类当中去的时候,如果直接把生成的block放入到集合类中,是无法在其他地方使用block,必须要对block进行copy。

[array addObject:[[^{

NSLog(@"hello!");

} copy] autorelease]];

block 为什么不用strong?

block如果用到了self,就会retain self,如果是strong的话,就造成了循环引用

官方文档:You should specify copy as the property attribute, because a block needs to be copied to keep track of its captured state outside of the original scope.This isn’t something you need to worry about when using Automatic Reference Counting, as it will happen automatically, but it’s best practice for the property attribute to show the resultant behavior

什么是KVC和KVO

全称是Key-value coding,翻译成键值编码

即键值编码。它是一种不通过存取方法,而通过属性名称字符串间接访问属性的机制。

KVO全称是Key-value observing翻译成键值观察。提供了一种当其它对象属性被修改的时候能通知当前对象的机制。

-(id)valueForKey:(NSString *)key;

    -(void)setValue:(id)value forKey:(NSString *)key;  

  -(id)valueForKeyPath:(NSString *)keyPath; 

   -(void)setValue:(id)value forKeyPath:(NSString *)keyPath;

前两个方法无论获取值还是赋值,只需要传入属性名称的字符串就行了。但KVC也提供了传入path的方法。所谓path,就是用点号连接的多层级的属性,比如student.name,student属性里的name属性。

即键值观察。它是观察者模式的一种衍生。基本思想是,对目标对象的某属性添加观察,当该属性发生变化时,会自动的通知观察者。这里所谓的通知是触发观察者对象实现的KVO的接口方法。

KVO是解决model和view同步的好法子。

另外,KVO的优点是当被观察的属性值改变时是会自动发送通知的,这比通知中心需要post通知来说,简单了许多。

KVO怎么用?

1.首先给目标对象的属性添加观察

(void)addObserver:(NSObject *)observerforKeyPath:(NSString *)keyPathoptions:(NSKeyValueObservingOptions)optionscontext:(nullablevoid*)context;

2.实现下面方法来接收通知,需要注意各个参数的含义

- (void)observeValueForKeyPath:(nullableNSString*)keyPath ofObject:(nullableid)object change:(nullableNSDictionary *)change context:(nullablevoid*)context;

3.最后要移除观察者:

-(void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

#import"ViewController.h"

#import"Student.h"

@interfaceViewController()

{   

Student            *_student;}

@end

@implementation   ViewController

- (void)viewDidLoad { 

  [superviewDidLoad]; 

  _student = [[Student alloc] init];

    _student.stuName =@"oldName_hu";// 1.给student对象的添加观察者,观察其stuName属性

[_student addObserver:selfforKeyPath:@"stuName"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];// 此时,stuName发生了变化

_student.stuName =@"newName_wang";}// stuName发生变化后,观察者(self)立马得到通知。

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{

// 最好判断目标对象object和属性路径keyPath

if(object == _student && [keyPath isEqualToString:@"stuName"])    {

NSLog(@"----old:%@----new:%@",change[@"old"],change[@"new"]);   

}else{     

  [superobserveValueForKeyPath:keyPath ofObject:object change:change context:context]; 

  }}

- (void)dealloc{// 移除观察者[_student removeObserver:selfforKeyPath:@"stuName"];}@end

1.isa指针

每一个对象都包含一个isa指针.这个指针指向当前对象所属的类。

[p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存 储于类中的方法,执行。

isa是对象中的隐藏指针,指向创建这个对象的类。

通过isa指针我们可以在运行的时候知道当前对象是属于那个Class(类)的


2.#import和#include区别

#import与#include的类似,都是把其后面的文件拷贝到该指令所在的地方

#import可以自动防止重复导入

#import <> 用于包含系统文件

#import""用于包含本项目中的文件

#import和@class作用上的区别

#import会包含引用类的所有信息(内容),包括引用类的变量和方法

@class仅仅是告诉编译器有这么一个类, 具体这个类里有什么信息, 完全不知

什么是类工厂方法

类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方法。类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 例如new

(1)一定是+号开头

(2)返回值一般是instancetype类型

(3)方法名称以类名开头,首字母小写

+ (instancetype)person;

+ (instancetype)person

{

return  [[Person alloc]init];

}

+ (instancetype)personWithAge:(int)age;

+ (instancetype)personWithAge:(int)age

{

Person *p = [[self alloc] init];

[p setAge:age];

return p;

}

1、主动释放池是什么如何劳动?

当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的主动释放池。它仍然是个正当的对象,因此主动开释池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,主动开释池就会被开释,池中的所有对象也就被开释。

类工厂方法的完成是为了向客户提供方便,它们将分配和初始化合在一个步骤中,返回被创建的对象,并

进行主动开释处理。这些方法的形式是+ (type)className...(其中className不包括任何前缀)。

工厂方法可能不仅仅为了方便使用。它们不但可以将分配和初始化合在一起,还可以为初始化过程提供对

象的分配信息。

类工厂方法的另一个目的是使类(比如NSWorkspace)提供单件实例。虽然init...方法可以确认一

个类在每次程序运转过程只存在一个实例,但它须要首先分配一个“生的”实例,然后还必须开释该实例。你看解答。

工厂 方法则可以制止为可能没有用的对象盲目分配内存。

https://jiangxh1992.github.io/articles/2016-11/%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96

https://jiangxh1992.github.io/articles/2016-11/%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96

https://my.oschina.net/u/1245365/blog/294449

僵尸对象

已经被销毁的对象(不能再使用的对象)

野指针

指向僵尸对象(不可用内存)的指针

空指针

没有指向存储空间的指针(里面存的是nil, 也就是0)

给空指针发消息是没有任何反应的


只要还有人在用某个对象,那么这个对象就不会被回收

只要你想用这个对象,就让对象的计数器+1

当你不再使用这个对象时,就让对象的计数器-1

谁创建谁release : 如果你通过alloc、new或[mutable]copy来创建一个对象,那么你必须调用release或autorelease

谁retain谁release :只要你调用了retain,就必须调用一次release

retain : release旧值,retain新值(用于OC对象)

assign : 直接赋值,不做任何内存管理(默认,用于非OC对象类型)

copy  : release旧值,copy新值(一般用于NSString *)

控制需不需生成set方法

readwrite :同时生成set方法和get方法(默认)

readonly  :只会生成get方法

多线程管理

atomic    :性能低(默认)

nonatomic :性能高


@class Dog;

仅仅是告诉编译器: Dog是一个类; 并不会包含Dog这个类的所有内容

作用上的区别

#import会包含引用类的所有信息(内容), 包括引用类的变量和方法

@class仅仅是告诉编译器有这么一个类, 具体这个类里有什么信息, 完全不知

效率上的区别

如果有上百个头文件都#import了同一个文件,或者这些文件依次被#import,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍 , 编译效率非常低

相对来讲,使用@class方式就不会出现这种问题了


autorelease方法的基本作用

给对象发送一条autorelease消息, 会将对象放到一个自动释放池中

当自动释放池被销毁时,会对池子里面的所有对象做一次release操作

会返回对象本身

调用完autorelease方法后,对象的计数器不变

autorelease的好处

不用再关心对象释放的时间

不用再关心什么时候调用release

autorelease的使用注意

占用内存较大的对象不要随便使用autorelease

占用内存较小的对象使用autorelease,没有太大影响

在iOS程序运行过程中,会创建无数个池子。这些池子都是以栈结构存在(先进后出)

当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池


What is advantage of categories? What is difference between implementing a category and inheritance?

分类可以在不修改原来类模型的基础上拓充方法

分类只能扩充方法、不能扩充成员变量;继承可以扩充方法和成员变量

继承会产生新的类


Difference between categories and extensions?

分类是有名称的,类扩展没有名称

分类只能扩充方法、不能扩充成员变量;类扩展可以扩充方法和成员变量

类扩展一般就写在.m文件中,用来扩充私有的方法和成员变量(属性)


What are KVO and KVC?

KVC是键值编码,可以通过一个字符串的key(属性名)修改对象的属性值

KVO是键值监听,可以监听一个对象属性值的改变

What are mutable and immutable types in Objective C?

mutable是可变类型,比如NSMutableArray,可以动态往里面添加元素

immutable是不可变类型,比如NSArray,固定的存储空间,不能添加元素


what is difference between NSNotification and protocol?

通过NSNotification可以给多个对象传递数据和消息

通过protocol(代理模式)只能给一个对象传递数据和消息


What is Singleton?

单粒:保证程序运行过程中,永远只有一个对象实例

目的是:全局共享一份资源、节省不必要的内存开销


Difference between frame and bounds?

frame以父控件的左上角为坐标原点

bounds以控件本身的左上角为坐标原点


Difference between method and selector?

通过一个selector可以找到方法地址,进而调用一个方法

What is lazy loading?

延迟加载:比如控制器的view,在第一次用到view时才会调用loadView方法进行创建


How can you store data in iPhone applications?

属性列表

Preference(NSUserDefaults)

键值归档(NSKeyedArchiver、NSCoding)

SQLite数据库

Core Data


What is predicate?

谓词:可以以一定条件来过滤数组、字典等集合数据,也能用在Core Data的数据查询中

Object-C有私有方法吗?私有变量呢?

OC没有类似@private的修饰词来修饰方法,只要写在.h文件中,就是公共方法

可以使用类扩展(Extension)来增加私有方法和私有变量


Object-C有多继承吗?没有的话用什么代替?

OC是单继承,没有多继承

有时可以用分类和协议来代替多继承


关键字const什么含义?

const int a;

int const a;

const int *a;

int const *a;

int * const a;

int const * const a;

1> 前两个的作用是一样:a 是一个常整型数

2> 第三、四个意味着 a 是一个指向常整型数的指针(整型数是不可修改的,但指针可以)

3> 第五个的意思:a 是一个指向整型数的常指针(指针指向的整型数是可以修改的,但指针是不可修改的)

4> 最后一个意味着:a 是一个指向常整型数的常指针(指针指向的整型数是不可修改的,同时指针也是不可修改的)


static的作用?

static修饰的函数是一个内部函数,只能在本文件中调用,其他文件不能调用

static修饰的全部变量是一个内部变量,只能在本文件中使用,其他文件不能使用

static修饰的局部变量只会初始化一次,并且在程序退出时才会回收内存

堆和栈的区别?

堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存

栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存


为什么很多内置的类,如TableView的delegate的属性是assign不是retain?

tableView的代理一般都是它所属的控制器,控制器会对它内部的view做一次retain操作

假设tableView也对代理(控制器)做一次retain操作,那么就出现循环retain问题


线程和进程的区别?

一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间

要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务

一个进程中允许开启多条线程,也就是同时执行多个任务


tableView的重用机制?

这里只是简述:将离开屏幕的cell放到缓存池,重新拿来显示到屏幕的其他位置

loadView

当第一次使用控制器的view时,会调用loadView方法创建view

一般在这里自定义view

viewDidLoad

当控制器的view创建完毕时会调用,也就是在loadView后调用

一般在这里添加子控件、初始化数据

viewDidUnload

当控制器的view因为内存警告被销毁时调用

一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)

ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?

当应用程序接收到系统的内容警告时,就有可能调用控制器的didRece…Warning方法

它的默认做法是:

当控制器的view不在窗口上显示时,就会直接销毁,并且调用viewDidUnload方法

1.maven介绍

它是apache旗下的一款开源工具 

Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的工具。

Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上

Maven主要有两大功能:管理依赖、项目构建。

依赖指的就是jar包。

所有的项目配置信息都被定义在一个叫做POM.xml的文件中,

通过该文件Maven可以管理项目的整个生命周期,包括清除,编译,测试,报告,打包部署等。



eclipse使用eclipse进行项目构建,相对来说,步骤比较零散,不好操作

Ant它是一个专门的项目构建工具,它可以通过一些配置来完成项目构建,这些配置要明确的告诉ant,源码包在哪?目标class文件应该存放在哪?资源文件应该在哪

Maven它是一个项目管理工具,他也是一个项目构建工具,通过使用maven,可以对项目进行快速简单的构建,它不需要告诉maven很多信息,但是需要安装maven去的规范去进行代码的开发。也就是说maven是有约束的。

maven解决的问题

jar包的声明式管理与管理

自动构建发布项目

maven,ant,svn的区别

maven 和ant之间的区别

都是软件构建工具,软件管理工具,maven比ant更加强大,已经取代了ant

maven优点:jar包声明式依赖。jar包仓库

maven与svn的区别

maven软件构建工具,是软件源码已经完毕,需要构建,需要部署与发布

svn是版本控制工具,是协同开发工具

svn仓库:项目源码保存,历史版本的备份,每一次版本的修改情况

maven软件目录介绍

1.lib:共享库。maven软件依赖的lib jar包

boot:plexus-classworlds-2.5.1.jar

该文件是jar包下载的引擎,通过该工具来下载jar包,第三方项目以来的jar包

maven本身的软件构建的生命周期插件的jar包

测试maven是否安装成功

mvn -version 

配置:环境变量path=“C:\apache-maven-3.2.1\bin” java

java语言可移植性,

在window和Linnex和上安装一个虚拟机

JRE java的运行环境

JDK里面自带一个JRE


编译: xxx.java(源文件)----编译()---生成java.class(字节码)文件----

运行:类装载器负责将.class文件 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,277评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,777评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,946评论 0 245
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,271评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,636评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,767评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,989评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,733评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,457评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,674评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,155评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,518评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,160评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,114评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,898评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,822评论 2 280
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,705评论 2 273

推荐阅读更多精彩内容

  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 1,876评论 0 7
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,037评论 29 470
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,318评论 0 35
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 1,982评论 0 12
  • 为什么要成立这家科技公司? 企业的市场定位是什么? 核心竞争力是什么? 满足客户什么需求? 2017年-2018预...
    神奇阅读阅读 188评论 0 0