专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

丁香园iOS电话面试问题总结

Cocoa开发者社区  · 公众号  · ios  · 2017-06-24 11:21

正文

请到「今天看啥」查看全文


3). PNG

  • 文件头标识 (8 bytes) 89 50 4E 470D 0A 1A 0A

4). GIF

  • 文件头标识 (6 bytes) 47 49 46 3839(37) 61
    G I F 8 9 (7) a

5). BMP

  • 文件头标识 (2 bytes) 424D
    B M

6). PCX

  • 文件头标识 (1 bytes) 0A

7). TIFF

  • 文件头标识 (2 bytes) 4D 4D 或 4949

8). ICO

  • 文件头标识 (8 bytes) 00 00 01 0001 00 20 20

9). CUR

  • 文件头标识 (8 bytes) 00 00 02 0001 00 20 20

10). IFF

  • 文件头标识 (4 bytes) 46 4F 524D
    F O R M

11). ANI

  • 文件头标识 (4 bytes) 52 49 4646
    R I F F

以上是一些文件的区别方式,回答的总方向还是对的,可能回答的不够好,下次就知道了。

常见的几种线程锁

这个问题比较尴尬,因为英文不太好,加上平时用的也不多,回答的比较吞吞吐吐,就说了 NSLock @synchronized dispatch的semaphore 其中有些单词的读法还不太准,想想就很尴尬,下面大概总结一下,有一下几种:

  • NSLock

  • @synchronized

  • dispatch的semaphore

  • 条件锁NSCondition

  • 条件锁NSConditionLock

  • NSDistributedLock

  • 互斥锁POSIX

  • 自旋锁OSSpinLock

下面总结一下,说实话太多有点记不过来了 - . -,附带详细的 原文地址

各种线程锁 使用场景和简单介绍
@synchronized 适用线程不多,任务量不大的多线程加锁
NSLock 比较常用的一种锁,性能一般
dispatch_semaphore_t 使用信号来做加锁,性能很好
NSCondition 使用其做多线程之间的通信调用不是线程安全的
NSConditionLock 单纯加锁性能非常低,比NSLock低很多,但是可以用来做多线程处理不同任务的通信调用
NSRecursiveLock 递归锁的性能出奇的高,但是只能作为递归使用,所以限制了使用场景
NSDistributedLock 因为是MAC开发的,就不讨论了
POSIX(pthread_mutex) 底层的api,复杂的多线程处理建议使用,并且可以封装自己的多线程
OSSpinLock 性能也非常高,可惜出现了线程问题


再总结一下,总的意思就是一般用 dispatch_semaphore_t 就行了,再简单点用
NSLock 另外带一个 swift 出的一个线程锁的方式:


func synchronized(lock: AnyObject, closure: () -> ()) {
    objc_sync_enter(lock)
    closure()
    objc_sync_exit(lock)
}

怎么保证线程安全

这个问题我是接着上一个问题之后回答的,感觉线程安全主要是数据竞争带来的,下面简单讲解一下:

线程安全的代码可以从多个线程或并发任务安全地调用,而不会造成任何问题(数据损坏,系统崩溃等)。例如当你多线程编程时,你用let定义一个数组,因为它是只读的,你能在同一时间不同线程去使用它,而不会造成线程安全的问题,然而当你用var定义一个数组时就不一样了,它不是线程安全的,当多个线程在同一时间访问和修改数组时会产生不可预知的结果。







请到「今天看啥」查看全文