前言:TMD某T的iOS高级开发岗第三面,下面记录这次面试的回忆以作日后复习。
一、自我介绍
简单介绍一下你自己吧
- 解析:简单介绍下自己的名字,教育背景,现在的工作,做过的项目
二、自我介绍衍生的口头问题
讲讲下你在你项目中做过的优化或者技术难点
- 题外话:这种问题最好各人自己找问题讲讲,不多,提前准备一个你项目中非常擅长并熟悉的点,即可。
三、编程题:实现以下功能
- 编写一个自定义类:Person,父类为NSObject
- 该类有两个属性,外部只读的属性
name
,还有一个属性age
- 为该类编写一个初始化方法
initWithName:(NSString *)nameStr
,并依据该方法参数初始化name
属性。
- 如果两个Person类的name相等,则认为两个Person相等
四、由编程题衍生的口头题目
- 怎样实现外部只读的属性,让它不被外部篡改
- nonatomic是非原子操作符,为什么要这样,atomic为什么不行?有人说能atomic耗内存,你觉得呢?保读写安全吗,能保证线程安全吗?有的人说atomic并不能保证线程安全,你觉得他们的出发点是什么,你认同这个说法吗?
- 你在初始化的方法中为什么将参数赋给_name,为什么这样写就能访问到属性声明的示例变量?
- 初始化方法中的_name是在什么时候生成的?分配内存的时候吗?还是初始化的时候?
- 作为return的self是在上面时候生成的?
- 为什么用copy,哪些情况下用copy?
五、另外聊到的实际开发问题
-
你平时有做过优化内存的哪些工作?怎样避免内存消耗的大户?
-
你怎样实现线程安全的?这些线程安全的办法和atomic有什么不一样?atomic的实现机制是怎样
六、后面的话
以上是题目的回忆版,读到这里读者可以自己找答案。