Skip to content

Commit 43001f3

Browse files
committed
update README
1 parent d09c61c commit 43001f3

5 files changed

+44
-26
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
| CATEGORY | FILENAME |
5757
|:----|:----|
5858
|iOS技能图谱/技术栈|[iOS技能图谱-byStuQ](./iOSNote/map-MobileDev-iOSDev.md) <br>[JSPatch作者博客中的技能栈-图](./images/iOS/iOSDev-bang.png)|
59-
|iOSDevNote|[**iOS开发架构分享文稿**](./iOSNote/iOS_architecture.pdf)<br>[**掘金客户端体积瘦身**](./iOSNote/iOSAppThin.md)<br>[**iOSDevCodeRepo**](https://github.com/DevDragonLi/iOSDevDemo)<br>[Core Animation框架结构及性能调优11张大图详解](https://github.com/DevDragonLi/Core-AnimationPerformanceOptimization)<br>[iOS_StaticLibrary](./iOSNote/iOS_StaticLibrary.md)<br>[iOS经典Crash分析与总结- QQ`MelonTeam`](https://github.com/DevDragonLi/iOSDevDemo)<br>[iOS核心动画高级技巧阅读笔记(**性能调优**,**高效绘制**,**图像IO**,**图层性能**)](./iOSNote/iOSCoreAnimationNote.md)<br>[单元测试概述](./iOSNote/UnitTesting.md)<br>[iOS_Article_List](./iOSNote/iOS_Collection_article_List.md)<br>[**iOS版本新特性**](./iOSNote/NewVersion.md)<br>[**适配暗黑模式组件Demo**](https://github.com/DevDragonLi/LFLDarkModeKit)|
59+
|iOSDevNote|[**Dark Mode 组件及Demo**](https://github.com/DevDragonLi/LFLDarkModeKit)<br>[**iOS开发架构分享文稿**](./iOSNote/iOS_architecture.pdf)<br>[**掘金客户端体积瘦身**](./iOSNote/iOSAppThin.md)<br>[**iOSDevCodeRepo**](https://github.com/DevDragonLi/iOSDevDemo)<br>[Core Animation框架结构及性能调优11张大图详解](https://github.com/DevDragonLi/Core-AnimationPerformanceOptimization)<br>[iOS_StaticLibrary](./iOSNote/iOS_StaticLibrary.md)<br>[iOS经典Crash分析与总结- QQ`MelonTeam`](https://github.com/DevDragonLi/iOSDevDemo)<br>[iOS核心动画高级技巧阅读笔记(**性能调优**,**高效绘制**,**图像IO**,**图层性能**)](./iOSNote/iOSCoreAnimationNote.md)<br>[单元测试概述](./iOSNote/UnitTesting.md)<br>[iOS_Article_List](./iOSNote/iOS_Collection_article_List.md)<br>[**iOS版本新特性**](./iOSNote/NewVersion.md)<br>|
6060
|CocoaPods 相关 |[提交个人开源框架之流程](./iOSNote/CocoaPods/cocoapods-podspec.md)<br>[管理库的使用技巧](./iOSNote/CocoaPods/CocoaPodsManageTips.md)<br>[提交私有的框架之流程](./iOSNote/CocoaPods/Pod&&spec.md)<br>[私有库参考Demo](https://github.com/DevDragonLi/iOSDevDemo/tree/master/1-DevDemo/PodPrivate_demo)|
6161
|开源框架|**[WiFi显示图片高清图;蜂窝显示图片缩略图解析](./iOSNote/Analyze/SDWebImage/网络网络状态不同加载图片.md)**<br>**[MJRefresh源码解析](./iOSNote/Analyze/MJRefresh/MJRefresh.md)**|
6262

interview-iOS/01一份"有点难"的iOS面试题MrPeak2016年.md

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,24 @@
66
>[题目出处](https://zhuanlan.zhihu.com/p/22834934)
77
88

9-
## 谈下iOS开发中知道的哪些锁? 哪个性能最差?SD和AFN使用的哪个? 一般开发中你最常用哪个? 哪个锁apple存在问题又是什么问题?
9+
## 谈下iOS开发中知道的哪些锁?
10+
11+
> 哪个性能最差?SD和AFN使用的哪个?
12+
13+
> 一般开发中你最常用哪个?
14+
15+
> 哪个锁apple存在问题又是什么问题?
1016
1117
<details>
1218
<summary> 参考内容 </summary>
1319

1420
- 我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁 应运而生
1521

16-
- OSSpinLock 自旋锁 ,存在的问题是, 优先级反转问题,破坏了spinlock
22+
- `@synchronized` 性能最差,SD和AFN等框架使用这个.
1723

18-
- `@synchronized` 性能最差,但是SD和AFN等其他框架很多使用这个.
24+
- NSRecursiveLock 和NSLock :建议使用前者,避免循环调用出现**死锁**
25+
26+
- OSSpinLock 自旋锁 ,存在的问题是, 优先级反转问题,破坏了spinlock
1927

2028
- dispatch_semaphore 信号量 : 保持线程同步为线程加锁
2129

@@ -47,7 +55,6 @@ dispatch_semaphore_wait(signal, overTime):可以理解为 lock,会使得 signa
4755
dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值 +1
4856

4957
```
50-
- tips:可结合自身具体项目使用场景描述
5158
5259
</details>
5360
@@ -57,7 +64,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
5764
<details>
5865
<summary> 参考内容 </summary>
5966
60-
- 循环通过pthread_create创建线程,创建s_tfthread对象做为线程句,加入线程数组,s_tftask_content->methord初始化为空函数
67+
- 循环通过pthread_create创建线程,创建s_tf thread对象做为线程句,加入线程数组,s_tftask_content->methord初始化为空函数
6168
6269
- 创建任务执行函数,执行完通过task初始化函数后,在执行函数中通过pthread_cond_wait信号将当前创建的线程挂起
6370
@@ -69,8 +76,8 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
6976
<details>
7077
<summary> 参考内容 </summary>
7178
72-
- HTTP是无状态的,要维持一个长连接可以用心跳包方式
73-
- 丢包,沾包 ,实际上http连接进行轮询.(嘀嘀打车早期版本采用的方式)
79+
- HTTP是无状态的,要维持一个长连接可以用**心跳包**方式
80+
- 丢包,沾包 ,实际上http连接进行轮询.(滴滴打车较早期版本采用的方式,耗费流量)
7481
- 定时轮询会存在延迟 用户体验就不好
7582
7683
</details>
@@ -83,7 +90,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
8390
8491
- 安全性:不会引发 server 端的改变
8592
- 幂等:同一个方法请求多次结果相同
86-
- 可缓存
93+
- 可缓存(Get)
8794
8895
</details>
8996
@@ -92,10 +99,10 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
9299
<details>
93100
<summary> 参考内容 </summary>
94101
95-
- BOOL 类型 修饰符不影响
96102
- 只是针对取值和赋值线程安全
97103
- 数组的初始化,赋值,取值安全
98104
- 数组的添加数据元素并非线程安全
105+
- BOOL 类型 修饰符不受到atomic或者noatomic影响
99106
</details>
100107
101108
@@ -122,8 +129,6 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
122129
</details>
123130
124131
125-
126-
127132
## 如何使用runtime hook一个class的某个方法,又如何hook某个instance的方法?
128133
129134
<details>
@@ -133,7 +138,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
133138
134139
- 考虑 hook是否有公开头文件的类,有的话写一个Utility函数,再使用category,
135140
- 没有的话就建一个类作为新函数载体,然后先为被hook的类增加函数,再替换。
136-
- 如何hook某个instance的方法,应该可以定义一个函数指针变量(IMP要谈及吧),hook时将要调用的地址赋给这个变量,调用时把这个变量当作函数来用 (RAC框架 hook 谈及)
141+
- 如何hook某个instance的方法,应该可以定义一个函数指针变量(IMP),hook时将要调用的地址赋给这个变量,调用时把这个变量当作函数来用 (参考:RAC框架hook)
137142
138143
</details>
139144
@@ -146,10 +151,11 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
146151
- multipart/form-data是当上传文件或者二进制数据和非ASCII数据使用 ,AFN请求如何设置?
147152
148153
```objc
149-
[self.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"content-type"];
154+
[requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"content-type"];
150155
```
151156
- form-urlencoded是默认的mime内容编码类型,是通用的,但是它在传输比较大的二进制或者文本数据时效率极低
152-
- 交互:GET,POST,PUT,PATCH,DELETE等,AFN的PATCH貌似数组存在问题.
157+
- 交互:GET,POST,PUT,PATCH,DELETE等
158+
- AFN的PATCH貌似数组存在问题.
153159

154160
</details>
155161

@@ -160,9 +166,9 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
160166
<details>
161167
<summary> 参考内容 </summary>
162168

163-
- 此类加载,针对小图标,使用场景较多图片.
164-
- `@autoreleasepool` 如果没有使用局部释放池,并且在主线程,则是当前主线程Runloop一次循环结束前释放。
165-
- imageWithContentsOfFile 加载适用于大图片,不常用的图片,一般无引用时候,会释放
169+
- 建议针对小图标/场景出现较多图片(此类方式加载,会缓存到内存)
170+
- `@autoreleasepool` 如果没有使用局部释放池,**并且在主线程,则是当前主线程Runloop一次循环结束前释放**
171+
- imageWithContentsOfFile 加载适用于大图片,不常用的图片,一般无引用时候,会释放
166172

167173
</details>
168174

@@ -172,9 +178,15 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
172178
<details>
173179
<summary> 参考内容 </summary>
174180

175-
- 推送、做支付
176-
- 跳app
177-
- 后台杀进程的时候、IM、第三方授权分享登录回调情况下等
181+
- applicationDidBecomeActive
182+
- APP首次启动用户授权后,会调用此函数
183+
- APP处于激活态
184+
- applicationWillEnterForeground:从后台进入前台
185+
186+
- 场景
187+
- 推送、做支付
188+
- 跳转app
189+
- 后台杀进程的时候、IM、第三方授权分享登录回调情况下等
178190

179191
</details>
180192

@@ -185,7 +197,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
185197
<summary> 参考内容 </summary>
186198

187199
- 线程中调用exit、pthread_exit、pthread_kill、pthread_cancel
188-
- NSOperation ,接口设计的cancle 实际上只能取消还未运行的,已经运行的无法取消.
200+
- NSOperation ,接口设计的cancle **实际上只能取消还未运行的,已经运行的无法取消**.
189201

190202
</details>
191203

@@ -203,7 +215,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
203215
- SQLite 3
204216

205217
- CoreData
206-
- Realm (Swift OC 不可以互操作)
218+
- Realm
207219

208220
</details>
209221

interview-iOS/02interview-iOS-2.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,12 @@
144144

145145
</details>
146146

147-
## crash的收集和定位bug的方式谈下
147+
## crash的收集和定位bug的方式
148148
<details>
149149
<summary> 参考内容 </summary>
150150

151151
- iTunes Connect(Manage Your Applications - View Details - Crash Reports),但是前提用户设置->隐私->诊断与用量->诊断与用量数据开启.一般不推荐
152+
152153
- 自己实现应用内崩溃收集,并上传服务器.(收集异常,存储到本地,下次用户打开程序时上传给我们)
153154
- 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作UncaughtExceptionHandler是一个函数指针,该函数需要我们实现,可以取自己想要的名字。当程序发生异常崩溃时,该函数会得到调用,这跟C,C++中的回调函数的概念是一样的
154155

@@ -176,7 +177,7 @@
176177

177178
- 第三方收集crash (比如说集成友盟,使用dSYM分析定位代码)
178179

179-
- 上报的方式,时机,策略等
180+
- 上报的方式,时机,策略(优缺点)等
180181

181182

182183
</details>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
* 异步绘制&离屏幕渲染&CPU渲染和GPU渲染(说白了就是一些性能优化,这块比较看功底)
1010
* UIView 生命周期,UIViewController的生命周期
11-
* iOS中有哪些锁(原理+应用+优化)
11+
* iOS中有哪些锁(原理+应用+优化):[参考第一份面试题](01一份"有点难"的iOS面试题MrPeak2016年.md)
1212
* 怎么看待审核被拒
1313
* runloop中将一个任务放到第二次runloop中执行:利用socket/port做一些事情(封装一个source)
1414
* UIKit框架架构图多看看

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* 介绍设计模式,然后其中主要问了我抽象工厂和适配器两种模式。
1414
* 介绍 runloop 相关的知识和在实际开发中的使用情况
1515
* 要求详细的描述事件响应链
16+
1617
### 二面
1718
* 介绍过往的项目经验,因为曾经的项目和所面试的部门岗位需求匹配度较高,所以这块的时间占比较多。
1819
* 回文算法
@@ -24,6 +25,7 @@
2425
* 比较详细的介绍消息转发流程和事件响应链
2526
* GCD 的底层线程调度原理
2627
* 介绍 hash 算法的原理
28+
2729
### 三面
2830
* 一个二叉树逐层打印的算法题
2931
* 介绍自己的过往的项目经验,会结合项目问一些架构向的思考
@@ -49,6 +51,7 @@
4951
* 介绍编译的过程和原理
5052
* 谈对于 bitcode 的理解和作用。
5153
* 详细的介绍了 Https 的过程。
54+
5255
### 二面
5356
* 介绍属性常用修饰符,介绍 assign 和 weak 之间的区别。这块会延伸到内存管理相关,比如引用计数的方式。
5457
* 聊对于 GCD 的理解,和 GCD 底层是如何进行线程调度的。聊 GCD 中常见方法的使用 (group ,信号量
@@ -59,6 +62,7 @@
5962
* 介绍项目优化的经验,这一块会聊的比较细。
6063
* 介绍对于静态库和动态库的理解。
6164
* 在 webview 使用过程中存在的问题和解决方案。
65+
6266
### 三面
6367
* 介绍了过往 RN 的使用经验和对于 Flutter 的理解。
6468
* 谈对于组件化的理解和市面上常见的组件化方案
@@ -107,6 +111,7 @@
107111
* 介绍开发中常见的循环引用,并说明其中的原因和解决的方案和原理。
108112
* 介绍 Runloop 并讲应用场景。
109113
* 二叉树翻转
114+
110115
### 三面
111116
* 一道多线程实际场景下的问题,要求远程写出实现方案的代码
112117
* 聊对于 MVVM,MVC 和 MVP 的理解。

0 commit comments

Comments
 (0)