链接:https://www.zhihu.com/question/19604641/answer/56306604
总述
面试开始的时候,我会让面试者选择一个他最熟悉的项目,给我们介绍一下它的技术架构,以及面试者在其中参与的模块和具体工作。因为我本人很讨厌面试上来做自我介绍,所以我一般开门见山,直接开始讲项目了。事实上,很多开发者并不明白我提到的“架构”的具体意思,有些人说了一大堆产品的功能,还有人说的非常笼统(比如,遵循MVC架构之类),一般这种时候我会打断他们,直接让他们给我讲一下这个APP的层次结构,或者是核心模块等。之后我会问两个问题:
- 讲述一次在这个APP中,用户触发了一个事件,引起了一个服务请求,然后获取服务端返回,并且更新前端界面的过程。请说的详细一点,比如数据经过了哪些类的处理,每一次传递时的格式是怎么样的?
- 你参与的APP,是如何处理多个服务的同步发起的?随后让面试者说一下APP的界面架构,这个比较随意。
Model层:
1. 数据持久化存储方案有哪些?
- plist文件(属性列表)
- preference(偏好设置)
- NSKeyedArchiver(归档)
- SQLite 3
- CoreData
http://www.jianshu.com/p/7616cbd72845
2. 沙盒的目录结构是怎样的?各自一般用于什么场合?
-
"应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。
NSString *path = [[NSBundle mainBundle] bundlePath]; NSLog(@"%@", path);
-
Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSLog(@"%@", path);
-
Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject; NSLog(@"%@", path);
Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。
-
tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。
NSString *path = NSTemporaryDirectory(); NSLog(@"%@", path);
3. SQL语句问题:inner join、left join、right join的区别是什么?
内连接: 只有两个表相匹配的行才能在结果集中出现
左外连接: 会把左表所有数据查询出来显示 左表不加限制
右外连接: 会把右表所有数据查询出来显示 右表不加限制
4. sqlite的优化
pragma
Pragma 是 sqlite 特有的一个配置语句,与之配合的有一些对应的参数,我们在连接数据库后可以对其进行修改,但下次连接的时候,还是需要再次配置的。单例模式
我们再来说说其他方面,比如整体的使用姿势。如果说你在整个应用中都不会有其他进程访问数据库(一般也不应该有),那么就做一个单件模式,然后保持长链接就好了,并没有必要一直持续地连接和断开,同时还可以避免你意外地同时去争夺数据库资源造成数据的丢失和文件损坏。
如果对于FMDB不能满足要求可以使用腾讯开源微信数据库框架WCDB
想要真正的吃透sqlite的性能, 需要去翻一下sqlite的文档
http://dev.qq.com/topic/57b6a449433221be01499486
这一部分还没有整理 后续会整理
## 5. 网络通信用过哪些方式(100%的人说了AFNetworking...)
如何处理多个网络请求并发的情况
在网络请求中如何提高性能
在网络请求中如何保证安全性