Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 311e39c

Browse files
解答循环链接问题【第七份】&&CocoaPods原理【第四份】参考答案完善 &&前七份面试题索引细节调整
1 parent 0ba33d5 commit 311e39c

8 files changed

+518
-394
lines changed

‎README.md‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@
6868
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
6969

7070
</p>
71-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
72-
<img src="./images/wechat.JPG" width="300" height="300">
71+
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300"><img src="./images/wechat.JPG" width="300" height="300">
7372
</p>
7473

7574
## 欢迎提交 PR / issue

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

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@
55
66
> 题目出处: zhuanlan.zhihu.com/p/22834934
77
8-
- [谈下iOS开发中知道的哪些锁?](#谈下ios开发中知道的哪些锁)
9-
- [iOS下如何实现指定线程数目的线程池?](#ios下如何实现指定线程数目的线程池)
10-
- [如何用HTTP实现长连接?](#如何用http实现长连接)
11-
- [HTTP的post和get啥区别](#http的post和get啥区别)
12-
- [使用atomic一定是线程安全的吗?](#使用atomic一定是线程安全的吗)
13-
- [数据库建表的时候索引有什么用?](#数据库建表的时候索引有什么用)
14-
- [介绍下iOS设备获取唯一设备号的历史变迁](#介绍下ios设备获取唯一设备号的历史变迁)
15-
- [如何使用runtime
8+
- [谈下iOS开发中知道的哪些锁?](#谈下ios开发中知道的哪些锁)
9+
- [iOS下如何实现指定线程数目的线程池?](#ios下如何实现指定线程数目的线程池)
10+
- [如何用HTTP实现长连接?](#如何用http实现长连接)
11+
- [HTTP的post和get啥区别](#http的post和get啥区别)
12+
- [使用atomic一定是线程安全的吗?](#使用atomic一定是线程安全的吗)
13+
- [数据库建表的时候索引有什么用?](#数据库建表的时候索引有什么用)
14+
- [介绍下iOS设备获取唯一设备号的历史变迁](#介绍下ios设备获取唯一设备号的历史变迁)
15+
- [如何使用runtime
1616
hook一个class的某个方法,又如何hook某个instance的方法?](#如何使用runtime-hook一个class的某个方法又如何hook某个instance的方法)
17-
- [聊下HTTP的POST的body体使用form-urlencoded和multipart/form-data的区别。](#聊下http的post的body体使用form-urlencoded和multipartform-data的区别)
18-
- [通过\[UIImage
17+
- [聊下HTTP的POST的body体使用form-urlencoded和multipart/form-data的区别。](#聊下http的post的body体使用form-urlencoded和multipartform-data的区别)
18+
- [通过\[UIImage
1919
imageNamed:\]生成的对象什么时候被释放?](#通过uiimage-imagenamed生成的对象什么时候被释放)
20-
- [applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。](#applicationwillenterforeground和applicationdidbecomeactive都会在哪些场景下被调用举例越多越好)
21-
- [如何终止正在运行的工作线程?](#如何终止正在运行的工作线程)
22-
- [iOS下所有的本地持久化方案?](#ios下所有的本地持久化方案)
20+
- [applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。](#applicationwillenterforeground和applicationdidbecomeactive都会在哪些场景下被调用举例越多越好)
21+
- [如何终止正在运行的工作线程?](#如何终止正在运行的工作线程)
22+
- [iOS下所有的本地持久化方案?](#ios下所有的本地持久化方案)
2323

2424

2525
## 谈下iOS开发中知道的哪些锁?
@@ -31,13 +31,13 @@
3131
<details>
3232
<summary> 参考内容 </summary>
3333

34-
- 我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁 应运而生
34+
> 我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁 应运而生
3535
3636
- `@synchronized` 性能最差,SD和AFN等框架内部有使用这个.
3737

3838
- NSRecursiveLock 和 NSLock :建议使用前者,避免循环调用出现**死锁**
3939

40-
- OSSpinLock 自旋锁,存在的问题是, 优先级反转问题,破坏了spinlock
40+
- OSSpinLock 自旋锁,存在的问题是:优先级反转问题,破坏了spinlock
4141

4242
- dispatch_semaphore 信号量 : 保持线程同步为线程加锁
4343

@@ -78,6 +78,8 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
7878
<details>
7979
<summary> 参考内容 </summary>
8080
81+
### 回答思路
82+
8183
- 循环通过pthread_create创建线程,创建s_tf thread对象做为线程句,加入线程数组,s_tftask_content->methord初始化为空函数
8284
8385
- 创建任务执行函数,执行完通过task初始化函数后,在执行函数中通过pthread_cond_wait信号将当前创建的线程挂起
@@ -86,6 +88,33 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
8688
8789
</details>
8890
91+
92+
### 参考样例实现代码(基于dispatch_semaphore)
93+
94+
<details>
95+
<summary> 参考内容 </summary>
96+
97+
```
98+
dispatch_queue_t workConcurrentQueue = dispatch_queue_create("example.code", DISPATCH_QUEUE_CONCURRENT);
99+
dispatch_queue_t serialQueue = dispatch_queue_create("example.code.task",DISPATCH_QUEUE_SERIAL);
100+
dispatch_semaphore_t semaphore = dispatch_semaphore_create(3);
101+
for (NSInteger i = 0; i < 10; i++) {
102+
dispatch_async(serialQueue, ^{
103+
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
104+
dispatch_async(workConcurrentQueue, ^{
105+
NSLog(@"thread-info:%@开始执行任务%d",[NSThread currentThread],(int)i);
106+
sleep(1);
107+
NSLog(@"thread-info:%@结束执行任务%d",[NSThread currentThread],(int)i);
108+
dispatch_semaphore_signal(semaphore);});
109+
});
110+
}
111+
NSLog(@"主线程...!");
112+
113+
```
114+
115+
</details>
116+
117+
89118
## 如何用HTTP实现长连接?
90119
<details>
91120
<summary> 参考内容 </summary>
@@ -117,6 +146,7 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
117146
- 数组的初始化,赋值,取值安全
118147
- 数组的添加数据元素并非线程安全
119148
- BOOL 类型 修饰符不受到atomic或者noatomic影响
149+
120150
</details>
121151
122152
@@ -235,16 +265,15 @@ dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值
235265
</details>
236266

237267

268+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
269+
270+
</p>
271+
<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">
272+
</p>
273+
238274
## 链接
239275

240276
- [面试题系列目录](../README.md)
241277
- **下一份**: [interview-iOS-2](02interview-iOS-2.md)
242278

243-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
244-
245-
</p>
246-
<img src="../images/wechat.JPG" width="300" height="300">
247-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
248-
</p>
249-
250279

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
## interview-iOS -2
22

3-
- [weak修饰的释放则自动被置为nil的实现原理](#weak修饰的释放则自动被置为nil的实现原理)
4-
- [HTTPS的加密原理](#https的加密原理)
5-
- [网络通讯中加密方式有哪些,各自的原理?](#网络通讯中加密方式有哪些各自的原理)
6-
- [开发中iOS缓存的理解](#开发中ios缓存的理解)
7-
- [你认为开发中那些导致crash?](#你认为开发中那些导致crash)
8-
- [应用逻辑的Bug](#应用逻辑的bug)
9-
- [违反iOS系统规则产生crash的三种类型](#违反ios系统规则产生crash的三种类型)
10-
- [SDWebImage](#sdwebimage)
11-
- [加载图片的流程](#加载图片的流程)
12-
- [SDImageCache是怎么做数据管理的?](#sdimagecache是怎么做数据管理的)
13-
- [内部做Decoder的原因
3+
- [weak修饰的释放则自动被置为nil的实现原理](#weak修饰的释放则自动被置为nil的实现原理)
4+
- [HTTPS的加密原理](#https的加密原理)
5+
- [网络通讯中加密方式有哪些,各自的原理?](#网络通讯中加密方式有哪些各自的原理)
6+
- [开发中iOS缓存的理解](#开发中ios缓存的理解)
7+
- [你认为开发中那些导致crash?](#你认为开发中那些导致crash)
8+
- [应用逻辑的Bug](#应用逻辑的bug)
9+
- [违反iOS系统规则产生crash的三种类型](#违反ios系统规则产生crash的三种类型)
10+
- [SDWebImage](#sdwebimage)
11+
- [加载图片的流程](#加载图片的流程)
12+
- [SDImageCache是怎么做数据管理的?](#sdimagecache是怎么做数据管理的)
13+
- [内部做Decoder的原因
1414
(典型的空间换时间)](#内部做decoder的原因-典型的空间换时间)
15-
- [crash的收集和定位bug的方式](#crash的收集和定位bug的方式)
15+
- [Crash的收集和定位bug的方式](#crash的收集和定位bug的方式)
1616

1717
## weak修饰的释放则自动被置为nil的实现原理
1818

@@ -23,7 +23,7 @@
2323
- Weak表是Hash表,Key是所指对象的地址,Value是Weak指针地址的数组
2424
- 在对象被回收的时候,经过层层调用,会最终触发下面的方法将所有Weak指针的值设为nil。
2525
- runtime源码,objc-weak.m 的 arr_clear_deallocating 函数
26-
- weak指针的使用涉及到Hash表的增删改查,有一定的性能开销.
26+
- weak指针的使用涉及到Hash表的增删改查,**有一定的性能开销**.
2727

2828
</details>
2929

@@ -201,15 +201,15 @@
201201
</details>
202202

203203

204-
## 链接
205-
206-
- [面试题系列目录](../README.md)
207-
- **上一份**: [01一份"有点难"的iOS面试题MrPeak2016年](01一份"有点难"的iOS面试题MrPeak2016年.md)
208-
- **下一份**: [interview-iOS-3](03interview-iOS-3.md)
209-
210-
## 赞赏一下旺仔(收集整理不易,且赞且珍惜)
204+
### 觉得整理的蛮不错,可以赞赏一下旺仔(收集整理不易,且赞且珍惜)
211205

212206
</p>
213-
<img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18ff90e4c8344f86aa69c34065bb379a~tplv-k3u1fbpfcp-zoom-1.image" width="300" height="300">
214-
<img src="../images/wechat.JPG" width="300" height="300">
207+
<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">
215208
</p>
209+
210+
211+
## 链接
212+
213+
- [面试题系列目录](../README.md)
214+
- **上一份**: [第一份:一份"有点难"的iOS面试题MrPeak2016年](01一份"有点难"的iOS面试题MrPeak2016年.md)
215+
- **下一份**: [第三份:interview-iOS-3](03interview-iOS-3.md)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /