iOS面试
语言方面
- 是否使用过+load或+initialize,如何在这两者之间取舍;
- 请举出常用的几种property修饰符(如weak/copy/strong)(atomic/nonatomic)(readonly/readwrite),并阐述下分别在什么场景下使用;
- @synthesize @dynamic关键字有什么作用;
- 能否大致描述下NSObject的内存布局以及相关作用(可以延伸到消息如何发送、Category如何实现等);
- 使用Category有什么需要注意的地方;
- 有没有遇到过并发引起的问题,最后如何排查解决的;
- 有哪些常用锁类型,@synchronized属于什么类型的锁?如何尽可能避免死锁?
- 有没有利用过Runtime做过什么事情;Selector,Imp,NSMethodSignature,NSInvocation,这几个分别是什么概念,如何使用的?
- 启动了一个NSTimer,却发现到期没有触发,可能是什么原因(比如列表滚动、后台线程);
- 有一个任务,依赖于其他几个任务,执行完毕后才能得以执行,有哪些方式可以方便的实现?(自己做信号或者dispatch_group_t)
- 使用 atomic 修饰的属性一定是线程安全的吗?
- 一个类的 +load 和 +initialize 方法执行次数是多少?在多个 Category 中实现这两个方***怎样?
- 如何为一个 Objective-C 对象动态添加 “属性”(属性的类似效果),可否为 weak “属性”?可否不借助额外类实现?
- 如何调用私有方法?如何访问私有属性?
- 什么是 Method Swizzling,多处对同一个方法进行 Method Swizzling 会怎样?
内存方面
- 请阐述下ARC的原理;
- 遇到过哪些内存管理方面的问题,比如EXC_BAD_ACCESS或unrecognized selector sent to instance,(如果异常断点也没有捕获到时)如何排查定位;
- 一个block类型属性应该用什么关键字修饰,为什么;
- 在使用block时一定要用__weak来修饰其中的变量吗,为什么;
- 当有对象无法正常释放时,如何排查问题?(Instruments跟踪referenceCount)
UI性能方面
- 如何实现一个在书架上移动书本的交互;
- 有没有遇到过0x8badf00d错误;
- 如何评测一个列表滚动是否流畅,遇到过哪些卡的原因,如何优化解决的;
- 当用户进行点击时,事件是如何分发的;
- UIView 和 CALayer 是什么关系?
- 使用 AutoLayout 如何动态修改布局,如何实现动画?
- 手势识别器相关的点击事件处理冲突如何解决?
网络和安全方面
- 客户端和服务端通讯是如何保证安全性的;
- 通常在客户端本地如何对用户数据进行加密;
数据库
- 如何在多线程的情况下使用,CoreData?
- 是否使用过 CoreData Parent/Child Contexts,大量的写操作是否会影响主线程?如果是的话如何解决。
开放性问题
- 你觉得你最擅长的是哪方面,做过最有成就感的项目是哪个;
- 我们遇到这么个问题(问题描述),请问可以如何解决;
- 你觉得什么样的代码是一份好的代码,什么样的设计是一种良好的架构方案,请举例;
- 你在开发过程中用过哪些设计模式;
- iOS技术栈挑选一个技术点,考察设计能力,例如弱网优化、缓存设计和实现、卡顿监控、无痕打点等。
- 是否使用过 Swift,对面向协议编程有何看法?
字节跳动现有大量客户端开发实习hc,可闪电内推,简历处理迅速。
计算机基础扎实,可无相关开发经验。
内推邮箱:coder503@163.com