如何面试iOS工程师-问题列表

参考知乎

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

ARC,自动引用计数,内存管理。

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

assign用于primitive type,weak用于object

__block为block捕获的变量提供了修改权,__weak防止block内的循环引用。

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

我关心ARC...

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

不一定。比如当a线程写操作结束后,b线程进行写操作,之后当a线程进行读操作时,就读入的是b线程的值。

5. 描述一个你遇到过的retain cycle例子。(别撒谎,你肯定遇到过)

我不想撒谎...

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

load在类被import时调用,此时是改变类的行为的最佳时机,比如method swizzling。initialize在第一个消息发送之前被调用。

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

Objective-C是一门动态语言,[obj foo]在编译时被转换为objc_msgSend(obj, foo, ...)。

8. 什么是method swizzling?

方法搅拌,运行时交换两个方法的实现...

9. UIView和CALayer是啥关系?

UIView拥有CALayer,CALayer的Delegate是UIView 参考

10. 如何高性能的给UIImageView加个圆角?(不准说layer.cornerRadius!)

一般通过clipsToBounds和layer.cornerRadius会强制Core Animation提前渲染屏幕的离屏绘制,影响性能。

可以通过贝塞尔曲线切割图片达到目的。

如何面试iOS工程师-问题列表_第1张图片
如何面试iOS工程师-问题列表_第2张图片


11. 使用drawRect有什么影响?(这个可深可浅,你至少得用过。。)

drawRect依赖Core Graphics和UIKit根据传入的rect进行自定义绘制

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

找缓存-找不到下载-设置图片

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


14. 讲讲你用Instrument优化动画性能的经历吧(别问我什么是Instrument)

15. loadView是干嘛用的?

loadView是UIViewController的实例方法,会在获取试图控制器的view为nil时被调用。手写控制器时,重载此方法来定义view属性。

16. viewWillLayoutSubView你总是知道的。。

视图的bounds改变(如屏幕旋转)时被调用,视图子视图位置发生改变前重载此方法做出响应。

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

mainQueue、globalQueue、customQueue

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

19. http的post和get啥区别?(区别挺多的,麻烦多说点)

并没有太多区别...

20. 我知道你大学毕业过后就没接触过算法数据结构了,但是请你一定告诉我什么是Binary search tree? search的时间复杂度是多少?我很想知道!

如何面试iOS工程师-问题列表_第3张图片

你可能感兴趣的:(如何面试iOS工程师-问题列表)