Skip to content

Commit fcb8bf1

Browse files
committed
【update】解答小米百度bigo 滴滴 快手等iOS 面试题2020年上部分面试题
1 parent e8ea576 commit fcb8bf1

File tree

3 files changed

+129
-13
lines changed

3 files changed

+129
-13
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ objc_AssociationPolicy policy:内存管理的策略
145145

146146
* 响应者链条
147147

148+
* [要求详细的描述事件响应链参考答案](./25小米百度bigo滴滴快手等iOS面试题2020年上.md#要求详细的描述事件响应链)
149+
148150
#### 图片的解压缩
149151

150152
<details>

interview-iOS/19新浪公司iOS面试题2019年6月.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ viewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起
196196
</details>
197197

198198
### 弱网相关
199+
200+
<details>
201+
<summary> 参考内容 </summary>
199202
- 合适的超时时间,针对不同网络设定不同的超时时间,加快超时,尽快重试
200203
- 按子模块多请求去拉取数据,避免一次性加载,导致数据太多请求返回慢;
201204
- 缓存和增量请求
@@ -208,8 +211,10 @@ viewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起
208211
- 用户 UI 体验优化,加载一些动画什么的分散下注意力
209212
- 根据不同网络情况动态调节方案,比如图片下载和视频流就可以按照 3G 4G 和 WIFI 进行区分返回
210213
- HTTP3.0
214+
</details>
211215

212216
### 卡顿检测
217+
213218
- 通过监测Runloop的kCFRunLoopAfterWaiting,用一个子线程去检查,一次循环是否时间太长。
214219
- 如果超出预定时间,则可以dump堆栈,确定卡顿函数
215220

interview-iOS/25小米百度bigo滴滴快手等iOS面试题2020年上.md

Lines changed: 122 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,150 @@
1-
# 25小米百度bigo 滴滴 快手等iOS 面试题2020年上
1+
# 小米百度bigo 滴滴 快手等iOS 面试题2020年上
22

3-
> https://xiaozhuanlan.com/topic/7628534019
3+
> xiaozhuanlan.com/topic/7628534019
4+
> 第25份面试题
45
5-
> 仅整理面试题部分
6+
<details>
7+
<summary> 参考内容 </summary>
8+
9+
</details>
610

711
#### 面试过程
12+
813
- 在疫情期间都是远程面试,下边先介绍一下疫情期间面试的一些公司的面试情况。同时拿到了其中几家的 offer。下边介绍的面试题只还原了其中印象比较深的部分,会存在不足的情况,并不代表面试的全部。
914

1015
## 小米
11-
### 一面
16+
17+
### 一面 (已更新参考答案)
18+
1219
* 介绍有哪些设计原则,并让比较详细的说了其中开闭原则在项目中的应用。
20+
* [六大设计原则](./23抖音面试题2020年3月.md)
21+
* 开闭原则在项目中的应用:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。(分类)
1322
* 介绍设计模式,然后其中主要问了我抽象工厂和适配器两种模式。
23+
* [常见设计模式](./23抖音面试题2020年3月.md)
1424
* 介绍 runloop 相关的知识和在实际开发中的使用情况
15-
* 要求详细的描述事件响应链
25+
* [Runloop相关问题解答参考面试题第六份](./06iOS基础问题系列2017年.md)
26+
* [应用示例:卡顿监控](19新浪公司iOS面试题2019年6月.md),亦可以优化列表大图加载等场景。
27+
28+
#### 要求详细的描述事件响应链
29+
30+
<details>
31+
<summary> 参考内容 </summary>
32+
33+
```
34+
//判断点击的位置是不是在视图内
35+
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;
36+
//返回点击的视图
37+
- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;
38+
39+
```
40+
##### 事件的传递
41+
42+
- 加入到一个由UIApplication管理的事件队列中(队列的特点是FIFO,即先进先出,先产生的事件先处理才符合常理,所以把事件添加到队列中)
43+
44+
- UIApplication会发送事件给应用程序的主窗口UIWindow。
45+
46+
- 主窗口UIWindow会调用hitTest:withEvent:方法在视图(UIView)层次结构中找到一个最合适的UIView来处理触摸事件(也就是把事件传递给那个最适合的UIView)
47+
48+
##### 工作流程
49+
50+
* 首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内
51+
52+
* 若pointInside:withEvent:方法返回NO,说明触摸点不在当前视图内,则当前视图的hitTest:withEvent:返回nil
53+
54+
* 若pointInside:withEvent:方法返回YES,说明触摸点在当前视图内,则遍历当前视图的所有子视图(subviews),调用子视图的hitTest:withEvent:方法重复前面的步骤,子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图的hitTest:withEvent:方法返回非空对象或者全部子视图遍历完毕。
55+
56+
* 若第一次有子视图的hitTest:withEvent:方法返回非空对象,则当前视图的hitTest:withEvent:方法就返回此对象,处理结束
57+
58+
* 若所有子视图的hitTest:withEvent:方法都返回nil,则当前视图的hitTest:withEvent:方法返回当前视图自身(self)
59+
60+
</details>
61+
62+
### 二面(已更新参考答案)
63+
64+
> 介绍过往的项目经验,因为曾经的项目和所面试的部门岗位需求匹配度较高,所以这块的时间占比较多。
65+
66+
* 【回文算法】判断一个字符串是不是对称的字符串,比如 abba 或者 aba 这样的就是对称的。
67+
68+
<details>
69+
<summary> 参考内容 </summary>
70+
71+
```
72+
bool check_string(char *s){
73+
int len = strlen(s);
74+
int i = 0;
75+
int j = len-1;
76+
while(i < j){
77+
if(s[i] != s[j])return false;
78+
}
79+
retrun true;
80+
}
81+
82+
```
83+
</details>
1684

17-
### 二面
18-
* 介绍过往的项目经验,因为曾经的项目和所面试的部门岗位需求匹配度较高,所以这块的时间占比较多。
19-
* 回文算法
20-
* (算法)判断一个字符串是不是对称的字符串,比如 abba 或者 aba 这样的就是对称的。
2185
* block 的实现原理
86+
87+
<details>
88+
<summary> 参考内容 </summary>
89+
90+
* block本质一个对象,主要分为 Imp 结构体 和 Desc 结构体
91+
* [block全部,静态,局部变量相关](./07深圳iOS面试分享2018年4月.md)
92+
93+
```
94+
struct __main_block_impl_0 {
95+
struct __block_impl impl;
96+
struct __main_block_desc_0* Desc;
97+
__main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {
98+
impl.isa = &_NSConcreteStackBlock;
99+
impl.Flags = flags;
100+
impl.FuncPtr = fp;
101+
Desc = desc;
102+
}
103+
};
104+
105+
```
106+
</details>
22107
* 比较详细的介绍 https 的过程。
23108
* 过往开发中做过哪些优化向的工作,问的也比较详细。
24109
* 如何检测项目中的卡顿问题(比如假死)
110+
* [应用示例:卡顿监控](19新浪公司iOS面试题2019年6月.md)
25111
* 比较详细的介绍消息转发流程和事件响应链
112+
* [消息转发流程](./08字节跳动面试题:2018年4月.md)
113+
* 事件响应链参考一面链接
26114
* GCD 的底层线程调度原理
27115
* 介绍 hash 算法的原理
28116

29117
### 三面
118+
30119
* 一个二叉树逐层打印的算法题
120+
* [😁leetcode](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/)
31121
* 介绍自己的过往的项目经验,会结合项目问一些架构向的思考
32122
* 如果现在做一个新的网络层框架,有哪些需要考量的点
33-
* 百度
34-
* 百度只有一面,因为面得是百度的商业化部门,对于细节的要求非常严格。个人感觉自己的表现确实不是很好。
35-
*
123+
* 参考知名网络框架,或者绘制UML图。
124+
125+
## 百度
126+
127+
> 百度只有一面,因为面得是百度的商业化部门,对于细节的要求非常严格。个人感觉自己的表现确实不是很好。
128+
36129
* 判断一个字符串是不是 ipv6 地址(要求尽全力的考虑所有异常的情况)
130+
* [同是百度面试题,类似参考](./11天猫蚂蚁金服百度面试题2018年4月.md)
37131
* PS:当时面试官明确告诉我,这个面试题做不好,面试是直接结束的。
38-
*
132+
39133
* 介绍界面卡顿的优化有哪些可以优化的点。
134+
<details>
135+
<summary> 参考内容 </summary>
136+
* 复用cell,缓存 Cell 高度,减少一些复杂的 layout,文字计算等,可进行缓存处理;
137+
* 异步渲染内容到图片&&图片解码放到子线程处理
138+
</details>
40139
* 介绍 UIResponder 的继承链。然后说事件响应链。
140+
* 参考上文小米面试题解答。
41141

42142
## Bigo
143+
43144
> 感觉面试的这些公司,Bigo 对于基础的考察最全面。
44145
45146
### 一面
147+
46148
* (算法)找出一个页面中漏出部分面积最大的试图,重合的部分按照最上层的面积算漏出,会有时间复杂度的要求。
47149
* 简单地介绍的过往的项目经验
48150
* 控件的点击事件和添加在上边的手势谁先响应,并说明原因
@@ -65,6 +167,7 @@
65167
* 在 webview 使用过程中存在的问题和解决方案。
66168

67169
### 三面
170+
68171
* 介绍了过往 RN 的使用经验和对于 Flutter 的理解。
69172
* 谈对于组件化的理解和市面上常见的组件化方案
70173
* 问了一些 APM 向上的问题。
@@ -83,7 +186,9 @@
83186
* 比较的深入的聊了内存管理的内容,包含引用计数和 weak 修饰的对象的内存管理的过程。问的会比较深入。
84187
* 讲 runloop 的过往使用经验。
85188
* 介绍自己比较熟悉的三方库的实现原理
189+
86190
## 二面
191+
87192
* 对于锁的理解(自旋锁和互斥锁),以及 iOS 开发中常见的锁。同时要求介绍个人在开发过程中在哪些场景下用到过锁。
88193
* 在实际开发中遇到过哪些多线程问题以及如何进行解决的。
89194
* 为什么不能在异步线程中更新页面,介绍原因。
@@ -102,18 +207,22 @@
102207
> 快手的一面是跨部门面试,二面是本部门面,所以一二面面试题会有一些重复,只写了一次。
103208
104209
### 一面
210+
105211
* 介绍过往的项目经验
106212
* 两个不算难的算法题(具体的忘记了...)
107213
* 聊了 assign 修饰对象可能存在的问题
108214
* 聊过往项目中的优化经验
109215
* 介绍消息转发流程
216+
110217
### 二面
218+
111219
* 比较详细的聊到的 block,深入的讲了其中的实现原理,并介绍不同变量的引用方式。
112220
* 介绍开发中常见的循环引用,并说明其中的原因和解决的方案和原理。
113221
* 介绍 Runloop 并讲应用场景。
114222
* 二叉树翻转
115223

116224
### 三面
225+
117226
* 一道多线程实际场景下的问题,要求远程写出实现方案的代码
118227
* 聊对于 MVVM,MVC 和 MVP 的理解。
119228
* 介绍过往项目中 RN 的使用经验和遇到的问题。

0 commit comments

Comments
 (0)