iOS面试题

知乎上看到一份很不错的面试题。准备从头到脚研究一下。目前经验尚浅,基本上每一个问题都是模模糊糊。

(题)

1.     什么是arc?(arc是为了解决什么问题而诞生的?)

2.     请解释以下keywords的区别:assign vs weak,__block vs __weak

3.     __block在arc和非arc下含义一样吗?

4.     使用atomic一定是线程安全的吗?

5.     描述一个你遇到过retain cycle例子。

6.     +(void)load+(void)initalize有什么用处?

7.     为什么其他语言里叫函数调用,objective-C里面则是给对象发消息(或者谈下runtime的理解)

8.     什么是method swizzing?

9.     UIView和CALayer是啥关系?

10.  如何高性能的给UIImageView加个圆角?

11.  使用DrawRect有什么影响?

12.  ASIHttpRequest或者SDWebImage里面给UIImageVIew加载图片逻辑是什么样的?(把UIImageView放到UITableViewCell里面更赞)

13.  麻烦你设计个简单的图片缓存器(移除策略一定要说)

14.  讲讲你用Instrument优化动画性能的经历

15.  loadView是干嘛用的?

16.  ViewWillLayoutSubView?

17.  GCD里面有几种Queue?你自己建立过串行queue吗?背后的线程模型是什么样的?

18.  用过coredata或者sqlite吗?读写是分线程的吗?遇到过死锁没?咋解决?

19.  http的get和post啥区别?

20.  关于数据结构,Binary searchtree?search的时间复杂度是多少?

 

模块II APP层次结构

1.     讲述一次在这个APP中,用户触发一个事件,引起了一个服务请求,然后获取服务端返回,并且更新前段界面的过程。(详细,如数据经过哪些类处理,每一次传递时的格式是怎么样的)?

2.     参与的APP,是如何处理多个服务的同步发起的?

 

模块III Model

1.     数据持久化存储方案有哪些?

2.     沙盒目录结构是怎么样的?各自一般用于什么场合?

3.     SQL语句问题:inner join、left join、right join的区别是什么?

4.     Sqlite的优化

5.     网络通信用过那些方式?

6.     如何处理网络请求并发的情况?

7.     在网络请求中如何提高性能?

8.     在网络请求中如何保证安全性?

模块IV 语言与基础知识

1.     内存中的栈和堆的区别是什么?哪些数据在栈上?那些数据在堆上?

2.     #define和const定义的变量,有什么区别?

3.     什么情况下会出现内存的循环引用?

4.     Block和weak self,是任何时候都需要加的吗?

5.     GCD的queue,main queue中执行的代码,一定是在main thread吗?

6.     NSOperationQueue有哪些使用方式?

7.     NSThread中的Runloop的作用,如何使用?

8.     .h文件中的变量,外部可以直接访问吗?(注意是变量,不是property)。

9.     讲述一下runtime的概念,message send如果寻找不到相应的对象,会如何进行后续处理?

10.  TCP和UDP的区别是什么?

11.  MD5和Base64的区别是什么,各自场景是什么?

12.  二叉搜索树的概念,时间复杂多少?

 

模块V架构

1.     哪些类适合使用单例模式?即使他们在周期中只会出现一次。

2.     Notification的使用场景是什么?同步还是异步?

3.     简单介绍下KVC和KVO,他们都可以应用在哪些场景?

 

模块VI APP相关

1.     如何添加一个自定义字体到工程?

2.     如何制作一个静态库/动态库,他们的区别是什么?

3.     Configuration中,dubug和release的区别是什么?

4.     简单介绍下发送系统消息的机制(APNS)

 

模块VII  UI

1.     系统如何寻找到需要响应用户操作的那个Responder?

2.     多屏幕尺寸的适配

3.     UIButton的父类是什么?UILabel呢?

4.     Push ViewController 和 present View Controller的区别?

5.     描述下tableViewCell的重用机制

6.     UIView的frame和bounds的区别是什么?

 

模块VIII 场景题

1.     发送是个网络请求,然后再接受到所有回应之后执行后续操作,如何实现?

2.     实现一个第三方控件,可以在任何时候出现在APP界面最上层?

3.     实现一个最简单的点击拖拽功能。

4.     上面那个拖拽之外,如果手放开时,需要根据速度往前滑动呢?

5.     如何减小一个应用程序的尺寸?

6.     如何提高一个应用程序的性能?

7.     不同版本的APP,数据结构变化了,如何处理?


参考答案: http://mrpeak.cn/ios/2016/01/07/push

你可能感兴趣的:(iOS面试题)