iOS

OC语法

1. Block是如何实现的?Block对应的数据结构是什么样子的?__block的作用是什么?它对应的数据结构又是什么样子的?

block原理

  1. block结构是一个结构体
        struct __main_block_impl_0 {
          struct __block_impl impl;
          struct __main_block_desc_0* Desc;
          __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {
            impl.isa = &_NSConcreteStackBlock;
            impl.Flags = flags;
            impl.FuncPtr = fp;
            Desc = desc;
          }
        };
    
  2. block的具体实现保存在impl的FuncPtr字段中
  3. block中的变量捕获:
    (1)自动变量保存在block结构体中,通过block结构体获取自动变量的值。
    (2)局部静态变量的指针保存在block结构体中,通过block结构体获取到变量指针最后获取变量的值。
    (3)全局变量可以直接访问。
    (4)全局静态变量可以直接访问。
  4. block的类型:
    (1)没有捕获参数时是NSGlobalBlock类型
    (2)捕获了参数,但是block没有被引用时是NSStackBlock
    (3)当block作为返回值时,当block被赋值给strong指针时,当block作为Cocoa API方法参数时,当block作为GCD方法参数时,是NSMallocBlock
  5. 在block被copy时,会通过__main_block_copy_0和__main_block_dispose_0函数对捕获的参数进行内存管理。
  6. 当参数使用__block修饰时,捕获的参数会被包在__Block_byref_object_0结构体中,结构体中__forwarding字段会将栈block中byref结构体指向堆block中的byref结构体,使block内外的变量统一,这样就可以在变量被copy到堆上之后还是能修改栈上的变量。

2. stringWithFormat中%@的占位原理

stringWithFormat中%@的占位原理

3. 已知变量 age是NSInteger类型,下面这段代码能编译通过,请问在运行时会不会崩溃?请从原理上解释为什么?

 NSString *str = [NSString stringWithFormat:@"%@",1];

stringWithFormat中%@的占位原理

4. GCD中的Block是在堆上还是栈上?

堆上。可以通过block的isa指针确认。

5. NSCoding协议是干什么用的?

6. KVO的实现原理。

iOS KVO原理

7. NSOperation有哪些特性比着GCD有哪些优点,它有哪些API?

8. NSNotificaiton是同步还是异步的,如果发通知时在子线程,接收在哪个线程?

9. 符号绑定原理。

10. performSelecter与runloop有什么关系

通过performSelecter调用方法时,会创建一个timer,将这个timer添加到runloop中执行。当在子线程中调用performSelecter时需要注意runloop是不是跑起来了。

11. 一个NSObject对象占用多少内存?

需要理解OC对象在内存中有哪些内容,是怎样分布的。
OC对象的底层是基于C/C++的结构体来实现的。
利用下面的命令将OC代码编译为C++代码(xx为文件名)

xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc xx.m -o xx.cpp

"-sdk"指定平台
"-arch"指定架构(模拟器:i386,32位:armv7,64位:arm64)

12. Mach-O的结构里面有啥

UI

  1. 事件响应链是如何传递的?
  2. 什么是异步渲染?
  3. layoutsubviews是在什么时机调用的?
  4. 一张图片的展示经历了哪些步骤?
  5. 什么是离屏渲染,什么情况会导致离屏渲染?
  6. CoreAnimation这个框架的作用什么,它跟UIKit的关系是什么?
  7. UIView与CALayer有什么关系?举例一个CALayer的秒用。
  8. 显示动画与隐式动画的区别。

内存管理

  1. ARC方案的原理是什么?它是在什么时候做的隐式添加release操作?
  2. 循环引用有哪些场景,如何避免?
  3. 为什么当我们在使用block时外面是weak 声明一个weakSelf,还要在block内部使用strong再持有一下?
  4. Autoreleasepool是实现机制是什么?它是什么时候释放内部的对象的?它内部的数据结构是什么样的?当我提到哨兵对象时,会继续问哨兵对象的作用是什么,为什么要设计它?(runtime源码)
  5. 哪些对象会放入到Autoreleasepool中?
  6. weak的实现原理是什么?当引用对象销毁是它是如何管理内部的Hash表的?(这里要参阅weak源码)

多线程

  1. 进程,线程,任务,队列概念
  2. GCD
  3. 串行,并行,并发
  4. 同步,异步
  5. 串行、并发和同步、异步相互结合能否开启新线程
  6. 主线程和主队列
  7. 队列与线程的关系
  8. gcd中常用队列有哪些
  9. 什么情况下会发生死锁?
  10. 如何避免死锁?这段代码应该如何修改?
  11. GCD如何常驻线程?
    开启子线程的runloop,然后添加一个监听端口事件。(待细化)

Runtime

  1. 消息发送的流程是怎样的?
  2. 关联对象时什么情况下会导致内存泄露?
  3. 消息转发的流程是什么?
  4. category能否添加属性,为什么?能否添加实例变量,为什么?
  5. 元类的作用是什么?
  6. 类方法是存储到什么地方的?类属性呢?
  7. 讲几个runtime的应用场景
  8. 实例对象与类对象的存储结构是什么样的?
  9. 调用类对象和实例对象的方法时,是如何在内存中查找到方法并调用的?
  10. 什么是线程安全,为什么UI操作必须在主线程执行
  11. 开启新的线程有哪些方法
  12. 多线程任务要实现顺序执行有哪些方法
  13. 如何实现一个多读单写的功能?
  14. 用GCD如何实现一个控制最大并发数且执行任务FIFO的功能?
  15. 怎么去拦截C语言的系统函数
    //www.greatytc.com/p/aeb0d891607e

Runloop

  1. 讲一下对Runloop的理解?
  2. 可以用Runloop实现什么功能?
  3. 多线程与Runloop的关系

性能优化

  1. 对TableView进行性能优化有哪些方式?
  2. Xcode的Instruments都有哪些调试的工具?
  3. 讲一下你做过的性能优化的事情。
  4. 如何检测卡顿,都有哪些方法?
  5. 缩小包体积有哪些方案?
  6. APM的具体实现

网络

  1. TCP为什么需要三次握手呢?

  2. TCP为什么挥手需要四次呢?为什么不能将ACK和FIN报文一起发送?

  3. TCP为什么TIMED_WAIT之后要等2MSL才进入CLOSED状态?

  4. TCP怎么保证安全性
    校验和
    序列号
    确认应答
    超时重传
    连接管理
    流量控制
    拥塞控制

  5. Https为什么握手过程需要三个随机数,而且安全性只取决于第三个随机数?

  6. Charles如何实现HTTPS的拦截?

  7. 为什么有些HTTPS请求(例如微信)抓包结果仍是加密的,如何实现的?

  8. DNS解析流程

  9. DNS递归查询

  10. DNS迭代查询

  11. DNS劫持

  12. CDN工作流程

  13. Cookie和Session的区别

  14. Socket

  15. 如果某一请求只在某一地特定时刻失败率较高,会有哪些原因

  16. http有没有做过一些http弱网的优化

计算机相关

  1. 项目编译的流程是什么?手机上的应用程序自点击图标开始到首屏内容展示都经历了哪些步骤?
  2. 对于基本数据类型,一般是存储到栈中的,它有没有可能存在堆上,什么情况下会存储到堆上?
  3. 数据库中的事务是什么意思?
  4. FMDB中事务的实现原理是什么?
  5. 使用过什么数据库(我回答的Sqlite,Realm),Realm在使用时有哪些注意事项,如何实现批量操作?
  6. LRU算法是否了解,如何实现一套LRU算法?
  7. 知道哪些设计模式,怎么理解设计模式的作用?
  8. 如果有1000万个Int类型的数字,如何对他们排序?
  9. 设计一套数据库方案,实现类似微信的搜索关键词能快速检索出包含该字符串的聊天信息,并展示对应数量(聊天记录的数据量较大)。
  10. iOS系统代码中使用了哪些设计模式?

其他开发技能

  1. Lottie实现动画效果的原理是什么?
  2. OClint实现静态分析的原理是什么,它是如何做到的?
  3. MVVM和MVC有什么区别?
  4. 静态库和动态库的区别是什么?
  5. 了解Flutter吗?它有没有使用UIKit?它是如何渲染UI的?
  6. 二进制重排的核心依据是什么?
  7. 如何设计一套切换主题的方案?
  8. AVPlayer和IJKPlayer有什么区别?用IJKPlayer如何实现一个缓存视频列表每条视频前1s的内容?
  9. 类似微博的短视频列表,滑动停留播放,如何实现?
  10. 使用python做过哪些事?如何理解脚本语言?
  11. 签名文件里面有啥
  12. ipa是怎么校验签名的
  13. 线上的webview怎么去调试,除了用safari浏览器的开发者模式还有别的么

数据结构与算法

  1. 什么是Hash表,什么是Hash碰撞,解决Hash碰撞有什么方法?
  2. 如何遍历二叉树?
  3. 简述下快速排序的过程,时间复杂度是多少?
  4. 有一个整数数组,如何只遍历一遍就实现让该数组奇数都在前面,偶数都在后面?
  5. 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
  6. 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。leetcode 7
  7. 有红、黄、蓝三种颜色的气球。在牛客王国,1个红气球+1个黄气球+1个蓝气球可以兑换一张彩票。
    2个红气球+1个黄气球可以兑换1个蓝气球。
    2个黄气球+1个蓝气球可以兑换1个红气球。
    2个蓝气球+1个红气球可以兑换1个黄气球。
    现在牛牛有a个红气球,b个黄气球, c个蓝气球,牛牛想知道自己最多可以兑换多少张彩票。

软技能

  1. 做过哪些工作职责之外的事情?
  2. 经历过最难的一次业务开发是什么样的,最终怎么解决的?
  3. 最近有学习什么新技术吗?有何收获?
  4. 你最擅长iOS哪方面的知识?怎么体现出来的?
  5. 常用哪些开源库,有没有研究过他们的原理?
  6. 如何保持个人成长?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,154评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,252评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,107评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,985评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,905评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,256评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,978评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,611评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,891评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,910评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,736评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,516评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,995评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,034评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,242评论 2 339

推荐阅读更多精彩内容