作者:Nil_Lu&&juejin.im/post/5ad541e0f265da23994f032c
- 异步绘制&离屏幕渲染&CPU渲染和GPU渲染(说白了就是一些性能优化,这块比较看功底)
- UIView 生命周期,UIViewController的生命周期
- iOS中有哪些锁(原理+应用+优化):参考第一份面试题
- 怎么看待审核被拒
- runloop中将一个任务放到第二次runloop中执行:利用socket/port做一些事情(封装一个source)
- UIKit框架架构图多看看
- id和instencetype的区别
- instrument的插件的使用(尽量都用一下)
- IMP和SEL以及具体执行的操作
- 在项目什么时候选择使用GCD,什么时候选择NSOperation?(根据项目规模以及接口的策略决定以及线程操作复杂程度)
- 发现程序崩在一个objc_msgSend函数里面,这时候可以看的到当前正在调用哪个对象的哪个selector吗?(可以的,可以查到调用的堆栈信息。还可以将这个堆栈信息dump下来)
- NSString类型的property常用copy的原因
- 如何把异步线程转化成同步线程进行单元测试
- autoreleasepool的使用场景和原理:基于runloop回答,并且提及autoreleasepage的实现(基于双向链表))
- 对于Objective-C,你认为它最大的优点和最大的不足是什么?对于不足之处,现在有没有可用的方法绕过这些不足来实现需求。
- app内存是怎么分析的:Xcode有两种方法(有区别:是否计入图片缓存)
- 内存的使用和优化的注意事项
- 怎样使用performSelector传入3个以上参数,其中一个为结构体。
- nsstring对象的retainCount问题:(细抠下)
- isMemberOfClass 和 isKindOfClass 联系与区别
- 实现准确的定时器:
- NSObject实现了哪些协议
- 消息转发的机制(基于runtime讲全点)
- 使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么
- 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量
- 手势相应和触摸事件传播的优先级以及处理等
- NSURLConnection 相比,NSURLsession 改进:
- AFN用什么方式实现多线程
- TCP是基于流式传输的,怎么设计协议,进行协议的解析?
- 怎么实现上传/下载任务的断点续传
- 发送网络请求,什么时候连IP、什么时候连域名
- socket编程有了解吗?用在项目的哪里?
- 客户端编程的时候,客户端send成功了,服务端没收到,有什么可能的原因
- 只用TCP,如何设计这个聊天协议?
- http和scoket通信的区别。
- CFSocket使用有哪几个步骤。Core Foundation中提供了哪几种操作Socket的方法?
- HTTPS具体过程,7次握手,以及如何防止中间人攻击的
- 常见的状态码(应用层次)
- URL重定向
- TCP、UDP的特点以及具体应用
- 滑动窗口的理解以及慢开始的措施
- 哈希表的实现(抠的很细):当拉链长度超过阀值时,会有什么优化(参照JDK的处理思想)
- 常见的链表算法(参照《剑指 offer》)
- stack&queue算法(参照《剑指 offer》)
- 浮点类型为什么不能精确
- 几种容器的查询、插入效率
- 可变容器的实现原理
- C++如何实现一个不能被继承的class
- C的编译过程
- 动态链接和静态链接库的区别
- C++和OC的区别
- GC和ARC的比较(GC是runtime的)
- 单例的实现(加锁和性能优化)
- 内存的五大区域
- 代码文件编译生成过程完成的事情
- 操作系统里线程切换是怎么实现的,怎么把线程调用函数的参数抛到另一个线程
- 流水线的概念
- 虚拟存储器的页面置换算法(编程实现)
- 死锁的4个必要条件
- 进程间通信的方式
- 缓冲区概念
- 死锁的预防算法
- 最小生成树(prime算法、kruskal算法)
- 最短路径算法(floyd、dijkstra)
- 图中是否存在环
- DFS&BFS的应用:迷宫问题比较多
- 拓扑排序
- 一定要深入理解三种排序的原理以及优化方法:比如大文件排序算法的优化,可利用快排和归并的特点,利用两种排序的特点,混合使用。
- 堆排序
- 快排:递归&非递归
- 归并:递归&非递归
- 内排序和外排序
- 最长单调递增子序列:先sort 然后转化为LCS问题
- 背包问题:
- 数组分为两个sum和尽量相等的子数组:背包容量=sum/2,转化为0-1背包问题
- 多背包问题:n个背包,求最大和
- 完全背包问题:
- 硬币组合问题:
- 1分2分5分的硬币三种,组合成1角,共有多少种组合?
- 一个人上台阶可以一次上1个,2个,或者3个,问这个人上n层的台阶,总共有几种走法
- 矩阵的最小路径和
- 三角形的最小路径和
-
编程思想参照《iOS编程之道》
-
设计模式主要是MVC&MVVM&MVCS的理解
-
组件化需要了解下
-
解耦的常用方法
-
设计模块的设计思路:
- 操作队列如何封装GCD
- 达到设置最大并发数(信号量实现)
- NSNumber的设计(类簇的设计思想)
- 宽窄接口的设计等
- 面试题系列目录
- 上一份: 字节跳动面试题:2018年4月
- 下一份: 美团饿了么面试题2018年4月