|
1 | | -# 25小米百度bigo 滴滴 快手等iOS 面试题2020年上 |
| 1 | +# 小米百度bigo 滴滴 快手等iOS 面试题2020年上 |
2 | 2 |
|
3 | | -> https://xiaozhuanlan.com/topic/7628534019 |
| 3 | +> xiaozhuanlan.com/topic/7628534019 |
| 4 | +> 第25份面试题 |
4 | 5 |
|
5 | | -> 仅整理面试题部分 |
| 6 | +<details> |
| 7 | +<summary> 参考内容 </summary> |
| 8 | + |
| 9 | +</details> |
6 | 10 |
|
7 | 11 | #### 面试过程 |
| 12 | + |
8 | 13 | - 在疫情期间都是远程面试,下边先介绍一下疫情期间面试的一些公司的面试情况。同时拿到了其中几家的 offer。下边介绍的面试题只还原了其中印象比较深的部分,会存在不足的情况,并不代表面试的全部。 |
9 | 14 |
|
10 | 15 | ## 小米 |
11 | | -### 一面 |
| 16 | + |
| 17 | +### 一面 (已更新参考答案) |
| 18 | + |
12 | 19 | * 介绍有哪些设计原则,并让比较详细的说了其中开闭原则在项目中的应用。 |
| 20 | + * [六大设计原则](./23抖音面试题2020年3月.md) |
| 21 | + * 开闭原则在项目中的应用:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。(分类) |
13 | 22 | * 介绍设计模式,然后其中主要问了我抽象工厂和适配器两种模式。 |
| 23 | + * [常见设计模式](./23抖音面试题2020年3月.md) |
14 | 24 | * 介绍 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> |
16 | 84 |
|
17 | | -### 二面 |
18 | | -* 介绍过往的项目经验,因为曾经的项目和所面试的部门岗位需求匹配度较高,所以这块的时间占比较多。 |
19 | | -* 回文算法 |
20 | | -* (算法)判断一个字符串是不是对称的字符串,比如 abba 或者 aba 这样的就是对称的。 |
21 | 85 | * 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> |
22 | 107 | * 比较详细的介绍 https 的过程。 |
23 | 108 | * 过往开发中做过哪些优化向的工作,问的也比较详细。 |
24 | 109 | * 如何检测项目中的卡顿问题(比如假死) |
| 110 | + * [应用示例:卡顿监控](19新浪公司iOS面试题2019年6月.md) |
25 | 111 | * 比较详细的介绍消息转发流程和事件响应链 |
| 112 | + * [消息转发流程](./08字节跳动面试题:2018年4月.md) |
| 113 | + * 事件响应链参考一面链接 |
26 | 114 | * GCD 的底层线程调度原理 |
27 | 115 | * 介绍 hash 算法的原理 |
28 | 116 |
|
29 | 117 | ### 三面 |
| 118 | + |
30 | 119 | * 一个二叉树逐层打印的算法题 |
| 120 | + * [😁leetcode](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/) |
31 | 121 | * 介绍自己的过往的项目经验,会结合项目问一些架构向的思考 |
32 | 122 | * 如果现在做一个新的网络层框架,有哪些需要考量的点 |
33 | | -* 百度 |
34 | | -* 百度只有一面,因为面得是百度的商业化部门,对于细节的要求非常严格。个人感觉自己的表现确实不是很好。 |
35 | | -* |
| 123 | + * 参考知名网络框架,或者绘制UML图。 |
| 124 | + |
| 125 | +## 百度 |
| 126 | + |
| 127 | +> 百度只有一面,因为面得是百度的商业化部门,对于细节的要求非常严格。个人感觉自己的表现确实不是很好。 |
| 128 | + |
36 | 129 | * 判断一个字符串是不是 ipv6 地址(要求尽全力的考虑所有异常的情况) |
| 130 | + * [同是百度面试题,类似参考](./11天猫蚂蚁金服百度面试题2018年4月.md) |
37 | 131 | * PS:当时面试官明确告诉我,这个面试题做不好,面试是直接结束的。 |
38 | | -* |
| 132 | + |
39 | 133 | * 介绍界面卡顿的优化有哪些可以优化的点。 |
| 134 | + <details> |
| 135 | + <summary> 参考内容 </summary> |
| 136 | + * 复用cell,缓存 Cell 高度,减少一些复杂的 layout,文字计算等,可进行缓存处理; |
| 137 | + * 异步渲染内容到图片&&图片解码放到子线程处理 |
| 138 | + </details> |
40 | 139 | * 介绍 UIResponder 的继承链。然后说事件响应链。 |
| 140 | + * 参考上文小米面试题解答。 |
41 | 141 |
|
42 | 142 | ## Bigo |
| 143 | + |
43 | 144 | > 感觉面试的这些公司,Bigo 对于基础的考察最全面。 |
44 | 145 |
|
45 | 146 | ### 一面 |
| 147 | + |
46 | 148 | * (算法)找出一个页面中漏出部分面积最大的试图,重合的部分按照最上层的面积算漏出,会有时间复杂度的要求。 |
47 | 149 | * 简单地介绍的过往的项目经验 |
48 | 150 | * 控件的点击事件和添加在上边的手势谁先响应,并说明原因 |
|
65 | 167 | * 在 webview 使用过程中存在的问题和解决方案。 |
66 | 168 |
|
67 | 169 | ### 三面 |
| 170 | + |
68 | 171 | * 介绍了过往 RN 的使用经验和对于 Flutter 的理解。 |
69 | 172 | * 谈对于组件化的理解和市面上常见的组件化方案 |
70 | 173 | * 问了一些 APM 向上的问题。 |
|
83 | 186 | * 比较的深入的聊了内存管理的内容,包含引用计数和 weak 修饰的对象的内存管理的过程。问的会比较深入。 |
84 | 187 | * 讲 runloop 的过往使用经验。 |
85 | 188 | * 介绍自己比较熟悉的三方库的实现原理 |
| 189 | + |
86 | 190 | ## 二面 |
| 191 | + |
87 | 192 | * 对于锁的理解(自旋锁和互斥锁),以及 iOS 开发中常见的锁。同时要求介绍个人在开发过程中在哪些场景下用到过锁。 |
88 | 193 | * 在实际开发中遇到过哪些多线程问题以及如何进行解决的。 |
89 | 194 | * 为什么不能在异步线程中更新页面,介绍原因。 |
|
102 | 207 | > 快手的一面是跨部门面试,二面是本部门面,所以一二面面试题会有一些重复,只写了一次。 |
103 | 208 |
|
104 | 209 | ### 一面 |
| 210 | + |
105 | 211 | * 介绍过往的项目经验 |
106 | 212 | * 两个不算难的算法题(具体的忘记了...) |
107 | 213 | * 聊了 assign 修饰对象可能存在的问题 |
108 | 214 | * 聊过往项目中的优化经验 |
109 | 215 | * 介绍消息转发流程 |
| 216 | + |
110 | 217 | ### 二面 |
| 218 | + |
111 | 219 | * 比较详细的聊到的 block,深入的讲了其中的实现原理,并介绍不同变量的引用方式。 |
112 | 220 | * 介绍开发中常见的循环引用,并说明其中的原因和解决的方案和原理。 |
113 | 221 | * 介绍 Runloop 并讲应用场景。 |
114 | 222 | * 二叉树翻转 |
115 | 223 |
|
116 | 224 | ### 三面 |
| 225 | + |
117 | 226 | * 一道多线程实际场景下的问题,要求远程写出实现方案的代码 |
118 | 227 | * 聊对于 MVVM,MVC 和 MVP 的理解。 |
119 | 228 | * 介绍过往项目中 RN 的使用经验和遇到的问题。 |
|
0 commit comments