运营和中央调度的面试问题(第二部分)

iOS面试问题,gcd面试问题,多线程ios面试问题,iOS

在本文中,我将介绍一些与Dispatch相关的问题,但是解决方案以目标C语言给出,并且可以在Swift上移植。

为这些问题在目标C中提供解决方案的原因是我在Citrix等公司接受采访的一位朋友,他们之所以要求在目标C中编写解决方案,是因为开放是面向同时了解obj C和Swift的开发人员的。

希望它也能帮助其他开发人员,让我们开始吧。

Q1。 dispatch_once和dispatch_once_t的用途是什么,用示例写下代码?

解决方案单身人士

Q2。 dispatch_after的用途是什么,用示例写下代码?

解决方案 :如果您需要在特定的时间点运行某些内容,那么dispatch_after可能是正确的选择。 一定也要检查NSTimer。

Q3。 什么是目标队列,用示例写下代码?

解决方案

惊喜:您已经在使用它们! 您创建的任何队列都必须具有目标队列。 默认情况下,它设置为DISPATCH_QUEUE_PRIORITY_DEFAULT全局并发队列。

Q4。 下面的代码有什么问题,如何解决?

解决方案

dispatch_set_target_queue使从firstQueue或secondQueue执行的每个块都表现得“好像”已使用dispatch_async提交给并发队列。

成为目标队列不会影响dispatch_barrier_ *函数的语义。 屏障保证在屏障块运行时队列中没有其他任何执行。

Q5。 编写用于创建所有类型的队列的代码,还让我们知道优先级吗?

解决方案

Q6。 编写一个资源,多个读取器和一个写入器的代码(基本上是用于多线程读取和单线程写入的读取器写入器)?

解决方案 :同步/异步模式的一种优化是读写器模式,在该模式下,允许并发读取,但不允许并发写入。 因此,您将使用并发队列,dispatch_barrier_async进行写操作(实现写操作的类似串行行为),但是使用dispatch_sync进行读操作(就其他读取操作而言,享受并发性能)。

Q7。 编写死锁条件代码?

解:

Q8。 什么是dispatch_apply为用例编写代码?

解决方案: dispatch_apply —迭代执行性能的改进,请查看下面的示例以更加清楚。

Q9。 编写DispatchGroup用例的代码?

解:

Q10。 编写DispatchGroup用例的代码?

解:

Q11。 编写DispatchSource用例的代码?

解:

Q12。 编写DispatchData用例的代码?

解:

希望您喜欢它以获取更多问题,请参阅— 2018年IOS面试常见问题解答