p_iOS_常见面试

  • 理论篇:
    

1.网络(Http、TCP/UDP、XMPP、Socket等)
http://www.jianshu.com/p/ef5f0bb773c8
http://www.jianshu.com/p/3a4223d33fdf

2.iOS app性能优化
可以参考:
iOS最全性能优化(上)http://www.jianshu.com/p/9c450e512020
iOS最全性能优化(中)http://www.jianshu.com/p/ad90e90dce4f
iOS最全性能优化(下)[http://www.jianshu.com/p/25e2f1ae51d2]

p_iOS_常见面试_第1张图片
Paste_Image.png

3.数据存储方式、情景(沙盒几种方式、point:FMDB(SQLite))

(1)沙盒结构:
1、Application:存放程序源文件,上架前经过数字签名,上架后不可修改
2、Documents: 保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
3、tmp: 保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录
4、Library/Caches: 保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。⼀般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下
5、Library/Preference: 保存应用的所有偏好设置,如iOS的Settings(设置) 应⽤会在该目录中查找应⽤的设置信息。iTunes同步设备时会备份该目录

(2)存储方式:
1、plist属性列表存储(如NSUserDefaults)
2、文件存储(如二进制数据写入文件存储,通过NSFileManager来操作将下载起来的二进制数据写一篇文件中存储)
3、NSKeydeArchiver归档存储,常见的是自动化归档/解档处理,想要学习如何通过runtime实现自动化归档/解档,可以阅读文章:[学习通过runtime实现自动化归档/解档](http://www.huangyibiao.com/runtime-archive-unarchive-automaticly/)
4、数据库SQLite3存储(如FMDB、Core Data)

FMDB使用:http://www.jianshu.com/p/624e58eadc74

4.说说各种设计模式(观察者模式、代理模式、工厂模式、单例模式、MVC等)(Block、代理、通知、KVO/KVC:http://www.jianshu.com/p/229134db2c4b)

5.RunTime、RunLoop
问题:RunLoop: RunLoop是什么,与主线程和子线程关系、4中mode作用、与NSTimer关系。
5.1.RunLoop是什么:
loop表示某种循环,和run放在一起就表示一直在运行着的循环。实际上,run loop和线程是紧密相连的,可以这样说run loop是为了线程而生,没有线程,它就没有存在的必要。Run loop是线程的基础架构部分, Cocoa 和 CoreFundation都提供了方便配置和管理线程的 run loop (以下都以 Cocoa 为例)。每个线程,包括程序的主线程都有与之相应的run loop。
5.2.与主线程和子线程关系:
主线程的run loop默认是启动的。
对非主线程来说,run loop默认是没有启动的,确切地说,当没有访问过非主线程的run loop时,run loop是不存在的,因为这是一种懒加载。如果你需要做更多的线程交互则可以手动配置和启动,如果线程只是去执行一个长时间的已确定的任务则不需要。
5.3、4中mode作用:


p_iOS_常见面试_第2张图片
Paste_Image.png

6.多线程


p_iOS_常见面试_第3张图片
Paste_Image.png
p_iOS_常见面试_第4张图片
Paste_Image.png

8.各种关键字的使用

把属性分为四类:
1、原子性:nonatomic声明为非原子操作,atomic声明为原子操作。
2、读/写权限:readwrite(读写)、readonly (只读)
3、内存管理相关:assign、strong、 weak、unsafe_unretained、copy
4、方法名:getter= 、setter=set。getter=的样式:@property (nonatomic, getter=isOn) BOOL on;
5、不常用的:nonnull、null_resettable、nullable

ARC下默认关键字:
对于基本数据类型默认关键字是:atomic,readwrite,assign
对于普通的Objective-C对象:atomic,readwrite,strong

assign vs weak, __block vs __weak:
1、assign适用于基本数据类型,weak是适用于NSObject对象,并且是一个弱引用。 assign其实也可以用来修饰对象,那么我们为什么不用它呢?因为被assign修饰的对象在释放之后,指针的地址还是存在的,也就是说指针并没有被置为nil。如果在后续的内存分配中,刚好分到了这块地址,程序就会崩溃掉。 
2、而weak修饰的对象在释放之后,指针地址会被置为nil。所以现在一般弱引用就是用weak。 
3、首先__block是用来修饰一个变量,这个变量就可以在block中被修改(参考block实现原理) __block:使用__block修饰的变量在block代码快中会被retain(ARC下,MRC下不会retain) __weak:使用__weak修饰的变量不会在block代码块中被retain 同时,在ARC下,要避免block出现循环引用 __weak typedof(self)weakSelf = self;
p_iOS_常见面试_第5张图片
Paste_Image.png

9.对常用框架的原理与使用(AFN、RAC、React Native等)

10.其他重要问题:
参考---标哥技术博客:http://www.huangyibiao.com/archives/348

  • 实践篇:
    

1.推送通知、即时通信、视频音频、分享与第三方登录、支付、动画效果、地图、蓝牙、
2.直播技术、与web前端交互、跨平台开发、RAC使用、
3.项目开发中遇到过什么印象深刻的坑,上架要注意的点

  • 重温篇:
    手生的时候,敲一个项目就好了

你可能感兴趣的:(p_iOS_常见面试)