Skip to content

Commit 14e8b97

Browse files
committed
解答腾讯社招iOS面试记录2018年7月【第十五份】完善参考答案
1 parent 311e39c commit 14e8b97

9 files changed

+392
-123
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
12. [校招攻略43份优质面经汇总iOS开发2018年](./interview-iOS/12校招攻略43份优质面经汇总iOS开发2018年.md)
4242
13. [秋招iOS面试总结2018年](./interview-iOS/13秋招iOS面试总结2018年.md)
4343
14. [阿里腾讯百度头条美团iOS面试题2018年4月](./interview-iOS/14阿里腾讯百度头条美团iOS面试题2018年4月.md)
44-
15. [腾讯社招iOS面试记录2018年7月](./interview-iOS/15腾讯社招iOS面试记录2018年7月.md)
44+
15. [腾讯社招iOS面试记录2018年7月:参考答案完整✅](./interview-iOS/15腾讯社招iOS面试记录2018年7月.md)
4545
16. [**腾讯音乐iOS面试题2018年7月**:部分提示解答模式✅](./interview-iOS/16腾讯音乐iOS面试题2018年7月.md)
4646
17. [阿里网易蘑菇街同花顺等面试题2018年7月](./interview-iOS/17阿里网易蘑菇街同花顺等面试题2018年7月.md)
4747
18. [苏州蜗牛iOS开发面试题2018年春](./interview-iOS/18苏州蜗牛iOS开发面试题2018年春.md)

interview-iOS/08字节跳动面试题:2018年4月.md

Lines changed: 51 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,28 @@
55
66
> 针对原作者最后版本,此页补充部分答案和涉及点。
77
8-
- [内存管理方面(ARC、MRC、autorelease、autoreleasepool)](#内存管理方面arcmrcautoreleaseautoreleasepool)
9-
- [Runtime方面(消息发送,NSHipster 对象关联,NSHipster
10-
方法交换等等)](#runtime方面消息发送nshipster-对象关联nshipster-方法交换等等)
11-
- [KVO内部实现原理(多家公司有问到)](#kvo内部实现原理多家公司有问到)
12-
- [Runloop方面](#runloop方面)
13-
- [UITableView的优化手段方法](#uitableview的优化手段方法)
14-
- [多线程方面(GCD、NSOperation居多)](#多线程方面gcdnsoperation居多)
15-
- [SDWebImage源码分析](#sdwebimage源码分析)
16-
- [事件传递以及响应链](#事件传递以及响应链)
17-
- [HTTPS通信过程](#https通信过程)
18-
- [需要了解的知识点](#需要了解的知识点)
8+
- [内存管理方面(ARC、MRC、autorelease、autoreleasepool)](#内存管理方面arcmrcautoreleaseautoreleasepool)
9+
- [Runtime方面](#runtime方面消息发送nshipster-对象关联nshipster-方法交换等等)
10+
- 消息发送,
11+
- 对象关联,
12+
- 方法交换等
13+
14+
- [KVO内部实现原理](#kvo内部实现原理)
15+
- [Runloop方面](#runloop方面)
16+
- [UITableView的优化手段方法](#uitableview的优化手段方法)
17+
- [多线程方面(GCD、NSOperation居多)](#多线程方面gcdnsoperation居多)
18+
- [SDWebImage源码分析](#sdwebimage源码分析)
19+
- [事件传递以及响应链](#事件传递以及响应链)
20+
- [HTTPS通信过程](#https通信过程)
21+
- [需要了解的知识点](#需要了解的知识点)
1922

2023
### 内存管理方面(ARC、MRC、autorelease、autoreleasepool)
21-
* 解答:[Autorelease的原理及ARC的工作原理](./03interview-iOS-3.md)
22-
* 扩展:[Autoreleasepool所使用的数据结构是什么?AutoreleasePoolPage结构体了解么?](./21出一套iOS高级面试题2018年7月.md#iOS基础题)
24+
* 解答:[第三份面试题:Autorelease的原理及ARC的工作原理](./03interview-iOS-3.md)
25+
* 扩展:[第二十一份面试题:Autoreleasepool所使用的数据结构是什么?AutoreleasePoolPage结构体了解么?](./21出一套iOS高级面试题2018年7月.md#iOS基础题)
2326

24-
### Runtime方面(消息发送,NSHipster 对象关联,NSHipster 方法交换等等)
27+
### Runtime方面
28+
29+
> 消息发送 对象关联 方法交换等等
2530
2631
<details>
2732
<summary> 参考内容 </summary>
@@ -69,8 +74,14 @@
6974
}
7075
7176
```
77+
78+
</details>
79+
7280
#### 对象关联
7381

82+
<details>
83+
<summary> 参考内容 </summary>
84+
7485
> 关联对象(Objective-C Associated Objects)给分类增加属性
7586
7687
```
@@ -87,9 +98,13 @@ id value:关联的对象
8798
objc_AssociationPolicy policy:内存管理的策略
8899
89100
```
101+
</details>
90102

91103
#### 方法交换
92104

105+
<details>
106+
<summary> 参考内容 </summary>
107+
93108
- swizzling应该只在+load中完成。 在 Objective-C 的运行时中,每个类有两个方法都会自动调用。+load 是在一个类被初始装载时调用,+initialize 是在应用第一次调用该类的类方法或实例方法前调用的。两个方法都是可选的,并且只有在方法被实现的情况下才会被调用。
94109

95110
- swizzling应该只在dispatch_once 中完成,由于swizzling 改变了全局的状态,所以我们需要确保每个预防措施在运行时都是可用的。原子操作就是这样一个用于确保代码只会被执行一次的预防措施,就算是在不同的线程中也能确保代码只执行一次。Grand Central Dispatch 的 dispatch_once满足了所需要的需求,并且应该被当做使用swizzling 的初始化单例方法的标准。
@@ -119,10 +134,9 @@ objc_AssociationPolicy policy:内存管理的策略
119134
}
120135
```
121136

122-
123137
</details>
124138

125-
### KVO内部实现原理(多家公司有问到)
139+
### KVO内部实现原理
126140

127141
<details>
128142
<summary> 参考内容 </summary>
@@ -138,15 +152,23 @@ objc_AssociationPolicy policy:内存管理的策略
138152
</details>
139153

140154
### Runloop方面
155+
141156
* [Runloop相关问题解答参考面试题第六份](./06iOS基础问题系列2017年.md)
142157

158+
* [runloop相关](./20阿里字节一套高效的iOS面试题2020年2月.md)
159+
- [app如何接收到触摸事件的](./20阿里字节一套高效的iOS面试题2020年2月.md#runloop)
160+
- [为什么只有主线程的runloop是开启的](./20阿里字节一套高效的iOS面试题2020年2月.md#runloop)
161+
- [为什么只在主线程刷新UI](./20阿里字节一套高效的iOS面试题2020年2月.md#runloop)
162+
- [PerformSelector和runloop的关系](./20阿里字节一套高效的iOS面试题2020年2月.md#runloop)
163+
- [如何使线程保活](./20阿里字节一套高效的iOS面试题2020年2月.md#runloop)
164+
143165
### UITableView的优化手段方法
144166

145167
* [参考此份第7题](./06iOS基础问题系列2017年.md)
146168

147169
### 多线程方面(GCD、NSOperation居多)
148170

149-
* 占位
171+
* [阿里字节面试题之多线程](./20阿里字节一套高效的iOS面试题2020年2月.md#多线程)
150172

151173
### SDWebImage源码分析
152174
* [参考此处](./02interview-iOS-2.md)
@@ -163,6 +185,7 @@ objc_AssociationPolicy policy:内存管理的策略
163185

164186
<details>
165187
<summary> 参考内容 </summary>
188+
166189
> 在主线程的下一个 run loop 到来时,Core Animation 提交了这个隐式的 transaction ,这个过程可能会对图片进行 copy 操作,而受图片是否字节对齐等因素的影响,这个 copy 操作可能会涉及以下部分或全部步骤:
167190
168191
> 在将磁盘中的图片渲染到屏幕之前,必须先要得到图片的原始像素数据,才能执行后续的绘制操作,这就是为什么需要对图片解压缩的原因
@@ -172,6 +195,7 @@ objc_AssociationPolicy policy:内存管理的策略
172195
* 将压缩的图片数据解码成未压缩的位图形式,这是一个非常耗时的 CPU 操作;
173196
* 解压缩后的图片大小与原始文件大小之间没有任何关系,而只与图片的像素有关
174197
* 最后 Core Animation 使用未压缩的位图数据渲染 UIImageView 的图层。
198+
175199
</details>
176200

177201

@@ -195,24 +219,25 @@ objc_AssociationPolicy policy:内存管理的策略
195219

196220
* APM方面(内存泄漏检测、crash监控,卡顿监控以及底层的实现原理等等)
197221
* [卡顿监控](19新浪公司iOS面试题2019年6月.md)
222+
* [阿里字节面试题之性能优化](./20阿里字节一套高效的iOS面试题2020年2月.md#性能优化)
198223

199224
* 组件化方(蘑菇街 App 的组件化之路、iOS应用架构谈 组件化方案、在现有工程中实施基于CTMediator的组件化方案、iOS 组件化方案探索、iOS 组件化–路由设计思路分析)
200225
* [业界常用的组件通信方案优缺点概述](https://github.com/DevDragonLi/ProtocolServiceKit#业界常用的组件通信方案)
226+
201227
* 持续化集成(我们公司使用的是:Jenkins+fastlane)
202228
* [Jenkins官网](https://www.jenkins.io)
203229
* [fastlane](https://docs.fastlane.tools)
204230
* 按照官网相关doc操作,或者网上找下教程即可,实践即可。
205231

206-
## 链接
232+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
207233

208-
- [面试题系列目录](../README.md)
209-
- **上一份**: [深圳iOS面试分享2018年4月](07深圳iOS面试分享2018年4月.md)
210-
- **下一份**: [头条网易微信阿里美团硕士春招面试题2018年3月](09头条网易微信阿里美团硕士春招面试题2018年3月.md)
234+
</p>
235+
<img src="../images/wechat.JPG" width="300" height="300"><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
236+
</p>
211237

212-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
213238

214-
</p>
215-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
216-
<img src="../images/wechat.JPG" width="300" height="300">
239+
## 链接
217240

218-
</p>
241+
- [面试题系列目录](../README.md)
242+
- **上一份**: [第七份:深圳iOS面试分享2018年4月](07深圳iOS面试分享2018年4月.md)
243+
- **下一份**: [第九份:头条网易微信阿里美团硕士春招面试题2018年3月](09头条网易微信阿里美团硕士春招面试题2018年3月.md)

interview-iOS/09头条网易微信阿里美团硕士春招面试题2018年3月.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,15 @@
132132
- NSNumber的设计(类簇的设计思想)
133133
- 宽窄接口的设计等
134134

135+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
136+
137+
</p>
138+
<img src="../images/wechat.JPG" width="300" height="300"><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
139+
</p>
140+
135141
## 链接
136142

137143
- [面试题系列目录](../README.md)
138144
- **上一份**: [字节跳动面试题:2018年4月](08字节跳动面试题:2018年4月.md)
139145
- **下一份**: [美团饿了么面试题2018年4月](10美团饿了么面试题2018年4月.md)
140146

141-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
142-
143-
</p>
144-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
145-
<img src="../images/wechat.JPG" width="300" height="300">
146-
</p>

interview-iOS/10美团饿了么面试题2018年4月.md

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@
33
> 备注:原作者分享几个
44
55

6-
- 自实现pow(double, double)
7-
8-
- findMedianSortedArrays (找到两个排序数组的中位数)
9-
10-
- UIContorl -> UIButton
11-
126
#### 自实现pow(double, double)
137

148
<details>
@@ -112,6 +106,9 @@ import UIKit protocol ButtonInterface { func setTitle(_ title: String); func set
112106

113107
### 网络框架
114108

109+
<details>
110+
<summary> 参考内容 </summary>
111+
115112
> 可以参考`YTKNetworking` 或者`AFN`
116113
117114
- 设计一个网络框架, 如何进行不同数据解析的设计(header, body), 并能够进行自定义
@@ -120,16 +117,47 @@ import UIKit protocol ButtonInterface { func setTitle(_ title: String); func set
120117

121118
- 如何避免回调地狱, 实现Promise的自实现.
122119

123-
## 链接
120+
#### 网络接口规范
124121

125-
- [面试题系列目录](../README.md)
126-
- **上一份**: [头条网易微信阿里美团硕士春招面试题2018年3月](09头条网易微信阿里美团硕士春招面试题2018年3月.md)
127-
- **下一份**: [天猫蚂蚁金服百度面试题2018年4月](11天猫蚂蚁金服百度面试题2018年4月.md)
122+
- 两层三部分数据结构
128123

129-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
124+
#### 多服务器多环境设置
130125

131-
</p>
132-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
133-
<img src="../images/wechat.JPG" width="300" height="300">
126+
- 标准的APP是有4个环境的,开发、测试、预发、正式,
127+
128+
#### 网络层数据传递(请求和返回)
129+
130+
- Client做两个操作,一个是生成NSURLRequest,一个是生成NSURLSessionDataTask并发起,另外还要暴露取消操作给Engine,
131+
132+
133+
#### 业务层对接方式
134+
135+
- casa:集约型API调用其实就是所有API的调用只有一个类,然后这个类接收API名字,API参数,以及回调着陆点(可以是target-action,或者block,或者delegate等各种模式的着陆点)作为参数。然后执行类似startRequest这样的方法,它就会去根据这些参数起飞去调用API了,然后获得API数据之后再根据指定的着陆点去着陆。
136+
137+
#### 网络请求怎么自动取消
134138

139+
- casa思路:在**BaseDataEngine的dealloc里面做取消网络请求操作**,把BaseDataEngine绑定给ViewController,当ViewController销毁时BaseDataEngine也就跟着销毁了
140+
- 每个接口生成一个BaseEngine实例,持有Client返回的requestID,所以就可以做取消操作,简单的使用场景
141+
142+
#### 网络层错误处理
143+
144+
> 我们将错误处理分为两个步骤,一个是错误解析,一个是错误的UI展示
145+
146+
- 设计的接口返回数据是标准的id data, NSError *error,是Client就把error处理好,不管你是网络超时错误也好,或者是数据格式不正确也好,都error解析完整,把code错误码定义好,上层根据需要通过code来做具体的UI展示,因为有的界面的错误需要用户的点击确认,有的页面的错误只是一闪而过的提示框,把error交给BaseEngine或者DataEngine来处理errorUI,
147+
148+
- 定义了一套errorUI的枚举,当BaseEngine拿到error的时候就去做错误的展示
149+
150+
</details>
151+
152+
153+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
154+
155+
</p>
156+
<img src="../images/wechat.JPG" width="300" height="300"><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
135157
</p>
158+
159+
## 链接
160+
161+
- [面试题系列目录](../README.md)
162+
- **上一份**: [头条网易微信阿里美团硕士春招面试题2018年3月](09头条网易微信阿里美团硕士春招面试题2018年3月.md)
163+
- **下一份**: [天猫蚂蚁金服百度面试题2018年4月](11天猫蚂蚁金服百度面试题2018年4月.md)

interview-iOS/11天猫蚂蚁金服百度面试题2018年4月.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
> 作者:ZhHS&&juejin.im/post/5ad80ad35188252eae3b22a4
44
5-
- [天猫 面试通知](#天猫-面试通知)
6-
- [NAVER China
7-
整个面试过程三个小时](#naver-china-整个面试过程三个小时)
8-
- [蚂蚁金服](#蚂蚁金服)
9-
- [百度一面](#百度一面)
10-
- [百度一面](#百度一面-1)
5+
- [天猫 面试通知](#天猫-面试通知)
6+
- [NAVER China 整个面试过程三个小时](#naver-china-整个面试过程三个小时)
7+
- [蚂蚁金服](#蚂蚁金服)
8+
- [百度一面](#百度一面)
9+
- [百度一面](#百度一面-1)
1110

1211
### 天猫 面试通知
1312

@@ -51,7 +50,7 @@
5150
* IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。
5251

5352
<details>
54-
<summary> Java代码参考内容 </summary>
53+
<summary> IP地址是否合法:Java代码参考内容 </summary>
5554

5655
```Java
5756
if(addr.length() < 7 || addr.length() > 15 || "".equals(addr))
@@ -125,15 +124,16 @@
125124
* 怎么修复线上卡顿、崩溃问题,
126125
* 项目结构等等
127126

127+
128+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
129+
130+
</p>
131+
<img src="../images/wechat.JPG" width="300" height="300"><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
132+
</p>
133+
128134
## 链接
129135

130136
- [面试题系列目录](../README.md)
131137
- **上一份**: [美团饿了么面试题2018年4月](10美团饿了么面试题2018年4月.md)
132138
- **下一份**: [校招攻略43份优质面经汇总iOS开发2018年](12校招攻略43份优质面经汇总iOS开发2018年.md)
133139

134-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
135-
136-
</p>
137-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
138-
<img src="../images/wechat.JPG" width="300" height="300">
139-
</p>

interview-iOS/12校招攻略43份优质面经汇总iOS开发2018年.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,15 +1061,15 @@
10611061
</task-lists>
10621062
</h1>
10631063

1064+
1065+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
1066+
1067+
</p>
1068+
<img src="../images/wechat.JPG" width="300" height="300"><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
1069+
</p>
1070+
10641071
## 链接
10651072

10661073
- [面试题系列目录](../README.md)
10671074
- **上一份**: [天猫蚂蚁金服百度面试题2018年4月](11天猫蚂蚁金服百度面试题2018年4月.md)
10681075
- **下一份**: [秋招iOS面试总结2018年](13秋招iOS面试总结2018年.md)
1069-
1070-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
1071-
1072-
</p>
1073-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
1074-
<img src="../images/wechat.JPG" width="300" height="300">
1075-
</p>

interview-iOS/13秋招iOS面试总结2018年.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## 秋招iOS面试总结2018年
22

3-
> https://www.jianshu.com/p/834878284b99
3+
> 出处:jianshu.com/p/834878284b99
44
55

66
## 【百度】(二面挂)
@@ -203,15 +203,14 @@
203203
* 4.对于我们企业文化的理解(我把我实习公司的企业文化吹嘘了一遍,发现这几点基本上放在任何私企都好使:客户至上,团队合作,诚信正直,务实创新)
204204

205205

206+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
207+
208+
</p>
209+
<img src="../images/wechat.JPG" width="300" height="300"><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
210+
</p>
211+
206212
## 链接
207213

208214
- [面试题系列目录](../README.md)
209215
- **上一份**: [校招攻略43份优质面经汇总iOS开发2018年](12校招攻略43份优质面经汇总iOS开发2018年.md)
210216
- **下一份**: [阿里腾讯百度头条美团iOS面试题2018年4月](14阿里腾讯百度头条美团iOS面试题2018年4月.md)
211-
212-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
213-
214-
</p>
215-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
216-
<img src="../images/wechat.JPG" width="300" height="300">
217-
</p>

0 commit comments

Comments
 (0)