另外一份有点难的 iOS 面试题

这一年的时间已经经历了实习、校招好几回的面试了,对于每一个准备找工做或者已经找到工做的人来讲,准备面试题都是一次提高本身的机会。但比较庆幸的是,本人几回面试所遇到的问题都比较简单,没有太多能让本身有所提高的内容,而网上流传的各类面试题现在看来也没有什么太大的新意。所以我决定本身出一份面试题,真正有一点难度的面试题。面试

对于我我的来讲,我不太喜欢那些查一查就能获得答案的题目,好比某个 API 怎么用,或者某个数据结构怎么写等等,由于这些题目其实考察都是肌肉记忆,就算答得好也不表明这我的能力很强,只能说他前期准备工做作得比较好。我下面所提出的几个问题都是须要必定实践或者必定经验才能流畅解答出来的题目,若是这些问题对你来讲 so easy,那么说明你有必定的知识广度,对问题比较喜欢深刻探究。固然了,若是你以为某几个问题有些许难度,也没有太大的关系,可以说出一个大体的思路也是 ok 的,后期再慢慢摸索一下对本身也是有极大提高的。服务器

下面就来看看个人问题吧!网络

涵盖的知识体系

  • UIKit 相关的基础知识
  • C++ 以及与 Objective-C 的互操做性(没有接触过 C++ 的小伙伴能够暂时跳过这部分题目)
  • 程序连接与装载相关知识
  • Swift
  • Objective-C runtime
  • 计算机网络(基础)
  • 操做系统(基础)

面试题

  1. 详细描述一下 UIViewCALayer 的关系,drawRect 必定会影响性能吗?UI DynamicsUIKit Animation 的最本质区别是什么?
  2. 如何用 UIImageView 显示超大分辨率的图?若是要支持缩放呢?
  3. 了解 fishhook 吗?说说为何 fishhook 不能修改非动态链接库中的符号?
  4. C++ 调用虚方法与 Objective-C 发消息有什么区别?
  5. 了解 placement new 吗?Objective-C 中如何实现这个功能?
  6. 如何在 ARC 环境下用 C++ 标准库容器来管理 Objective-C 对象?
  7. idselfsuper 它们从语法上有什么区别?
  8. isa 是什么?是指向 Class 对象自己的指针吗?
  9. block 修改捕获变量除了用 __block 还能够怎么作?有哪些局限性?
  10. NSDictionaryNSHashTable 有什么区别,它们的使用场景是怎样的?
  11. 用过 Swift 吗?如何评价 String index 的设计?
  12. 假设 iPhone 上有一个与服务器的 TCP 链接,此时 iPhone 突然断网,服务器能在短期内知会 iPhone 的离线吗?
  13. 为何 Wireshark 不能直接抓取 SSL 的原始数据?
  14. backtrace 是在用户态实现的吗?可否讲讲实现它的大体思路?
  15. malloc 的指针 double free 产生的异常与访问 freed 指针有可能产生的异常有什么区别?为何访问 freed 指针不必定产生异常?
  16. RunLoop 是一个不停歇在运行的死循环吗?为何?
  17. 看过 runtime 的源码吗?源码中常有的 fastpathslowpath 是什么?
  18. runtime 中 SideTables(不是 SideTable)存在的意义是什么?
  19. 为何 ARC 环境下不容许咱们调用 [super dealloc]
  20. Objective-C 是如何保证系统升级后的 ABI 稳定性的?
  21. 下面这段伪代码存在什么问题?应该如何改进?
int main(int argc, const char * argv[]) {
    // ...
    
    NSUInteger threadCount = [NSProcessInfo processInfo].activeProcessorCount;
    NSCondition *cond = [NSCondition new];
    for (int i = 0; i < threadCount; i++) {
        [NSThread detachNewThreadWithBlock:^{
            while (YES) {
                [cond lock];
                while (/* Queue is empty */) {
                    [cond wait];
                }
                // Dequeue an item.
                [cond unlock];
                // Handle the item.
            }
        }];
    }

    while (YES) {
        // Enqueue something when it comes.
        [cond broadcast];
    }
    
    // ...
}
复制代码

虽然只有 21 道题,但相关问题仍是不少不少的,往后我可能也会写一篇文章来解答一下全部的问题,固然我更但愿你们可以本身完成这些问题,不要尝试直接搜答案,不少题也许根本搜不到答案,因此本身探究的过程必定是必不可少的,加油吧!数据结构

相关文章
相关标签/搜索