2020年春招过半,iOS开发面试题清单,带你高效刷题!

简介:

简述

最近收集梳理了一些iOS相关的问题,其中大部分都是大厂面试或者面试其他人用到的,能命中大部分的面试和日常工作,更希望你可以用它来检验自己

由于问题量太大,本文只是给了问题,希望发挥圈友的动手能力,自己去探索下,也可以在下方进行评论回复你的答案或者提出更高质量的问题!!!

runtime相关问题

runtime是iOS开发最核心的知识了,如果下面的问题都解决了,那么对runtime的理解已经很深了。
runtime已经开源了,这有一份别人调试好可运行的源码objc-runtime,也可以去官网找objc4

结构模型

  1. 介绍下runtime的内存模型(isa、对象、类、metaclass、结构体的存储信息等)
  2. 为什么要设计metaclass
  3. class_copyIvarList & class_copyPropertyList区别
  4. class_rw_tclass_ro_t 的区别
  5. category如何被加载的,两个category的load方法的加载顺序,两个category的同名方法的加载顺序
  6. category & extension区别,能给NSObject添加Extension吗,结果如何
  7. 消息转发机制,消息转发机制和其他语言的消息机制优劣对比
  8. 在方法调用的时候,方法查询-> 动态解析-> 消息转发 之前做了什么
  9. IMPSELMethod的区别和使用场景
  10. loadinitialize方法的区别什么?在继承关系中他们有什么区别
  11. 说说消息转发机制的优劣

内存管理

  1. weak的实现原理?SideTable的结构是什么样的
  2. 关联对象的应用?系统如何实现关联对象的
  3. 关联对象的如何进行内存管理的?关联对象如何实现weak属性
  4. Autoreleasepool的原理?所使用的的数据结构是什么
  5. ARC的实现原理?ARC下对retain & release做了哪些优化
  6. ARC下哪些情况会造成内存泄漏

其他

  1. Method Swizzle注意事项
  2. 属性修饰符atomic的内部实现是怎么样的?能保证线程安全吗
  3. iOS 中内省的几个方法有哪些?内部实现原理是什么
  4. class、objc_getClass、object_getclass 方法有什么区别?

NSNotification相关

苹果并没有开源相关代码,但是可以读下GNUStep的源码,基本上实现方式很具有参考性

  1. 实现原理(结构设计、通知如何存储的、name&observer&SEL之间的关系等)
  2. 通知的发送时同步的,还是异步的
  3. NSNotificationCenter接受消息和发送消息是在一个线程里吗?如何异步发送消息
  4. NSNotificationQueue是异步还是同步发送?在哪个线程响应
  5. NSNotificationQueuerunloop的关系
  6. 如何保证通知接收的线程在主线程
  7. 页面销毁时不移除通知会崩溃吗
  8. 多次添加同一个通知会是什么结果?多次移除通知呢
  9. 下面的方式能接收到通知吗?为什么
// 发送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
// 接收通知
[NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的点击加入群聊iOS交流群:763164022,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

Runloop & KVO

runloop

runloop对于一个标准的iOS开发来说都不陌生,应该说熟悉runloop是标配,下面就随便列几个典型问题吧

  1. app如何接收到触摸事件的
  2. 为什么只有主线程的runloop是开启的
  3. 为什么只在主线程刷新UI
  4. PerformSelectorrunloop的关系
  5. 如何使线程保活

KVO

runloop一样,这也是标配的知识点了,同样列出几个典型问题

  1. 实现原理
  2. 如何手动关闭kvo
  3. 通过KVC修改属性会触发KVO么
  4. 哪些情况下使用kvo会崩溃,怎么防护崩溃
  5. kvo的优缺点

Block

  1. block的内部实现,结构体是什么样的
  2. block是类吗,有哪些类型
  3. 一个int变量被 __block 修饰与否的区别?block的变量截获
  4. block在修改NSMutableArray,需不需要添加__block
  5. 怎么进行内存管理的
  6. block可以用strong修饰吗
  7. 解决循环引用时为什么要用__strong、__weak修饰
  8. block发生copy时机
  9. Block访问对象类型的auto变量时,在ARC和MRC下有什么区别

多线程

主要以GCD为主

  1. iOS开发中有多少类型的线程?分别对比
  2. GCD有哪些队列,默认提供哪些队列
  3. GCD有哪些方法api
  4. GCD主线程 & 主队列的关系
  5. 如何实现同步,有多少方式就说多少
  6. dispatch_once实现原理
  7. 什么情况下会死锁
  8. 有哪些类型的线程锁,分别介绍下作用和使用场景
  9. NSOperationQueue中的maxConcurrentOperationCount默认值
  10. NSTimer、CADisplayLink、dispatch_source_t 的优劣

视图&图像相关

  1. AutoLayout的原理,性能如何
  2. UIView & CALayer的区别
  3. 事件响应链
  4. drawrect & layoutsubviews调用时机
  5. UI的刷新原理
  6. 隐式动画 & 显示动画区别
  7. 什么是离屏渲染
  8. imageName & imageWithContentsOfFile区别
  9. 多个相同的图片,会重复加载吗
  10. 图片是什么时候解码的,如何优化
  11. 图片渲染怎么优化
  12. 如果GPU的刷新率超过了iOS屏幕60Hz刷新率是什么现象,怎么解决

性能优化

  1. 如何做启动优化,如何监控
  2. 如何做卡顿优化,如何监控
  3. 如何做耗电优化,如何监控
  4. 如何做网络优化,如何监控

开发证书

  1. 苹果使用证书的目的是什么
  2. AppStore安装app时的认证流程
  3. 开发者怎么在debug模式下把app安装到设备呢

架构设计

典型源码的学习

只是列出一些iOS比较核心的开源库,这些库包含了很多高质量的思想,源码学习的时候一定要关注每个框架解决的核心问题是什么,还有它们的优缺点,这样才能算真正理解和吸收

  1. AFN
  2. SDWebImage
  3. JSPatch、Aspects(虽然一个不可用、另一个不维护,但是这两个库都很精炼巧妙,很适合学习)
  4. Weex/RN, 笔者认为这种前端和客户端紧密联系的库是必须要知道其原理的
  5. CTMediator、其他router库,这些都是常见的路由库,开发中基本上都会用到
  6. 圈友们在评论下面补充吧

架构设计

  1. 手动埋点、自动化埋点、可视化埋点
  2. MVC、MVP、MVVM设计模式
  3. 常见的设计模式
  4. 单例的弊端
  5. 常见的路由方案,以及优缺点对比
  6. 如果保证项目的稳定性
  7. 设计一个图片缓存框架(LRU)
  8. 如何设计一个git diff
  9. 设计一个线程池?画出你的架构图
  10. 你的app架构是什么,有什么优缺点、为什么这么做、怎么改进

其他问题

  1. PerformSelector & NSInvocation优劣对比
  2. oc怎么实现多继承?怎么面向切面(可以参考Aspects深度解析-iOS面向切面编程
  3. 哪些bug会导致崩溃,如何防护崩溃
  4. 怎么监控崩溃
  5. app的启动过程(考察LLVM编译过程、静态链接、动态链接、runtime初始化)
  6. 沙盒目录的每个文件夹划分的作用
  7. 简述下match-o文件结构

系统基础知识

  1. 进程和线程的区别
  2. HTTPS的握手过程
  3. 什么是中间人攻击?怎么预防
  4. TCP的握手过程?为什么进行三次握手,四次挥手
  5. 堆和栈区的区别?谁的占用内存空间大
  6. 加密算法:对称加密算法和非对称加密算法区别
  7. 常见的对称加密和非对称加密算法有哪些
  8. MD5、Sha1、Sha256区别
  9. charles抓包过程?不使用charles4G网络如何抓包

数据结构与算法

对于移动开发者来说,一般不会遇到非常难的算法,大多以数据结构为主,笔者列出一些必会的算法,当然有时间了可以去LeetCode上刷刷题

  1. 八大排序算法
  2. 栈&队列
  3. 字符串处理
  4. 链表
  5. 二叉树相关操作
  6. 深搜广搜
  7. 基本的动态规划题、贪心算法、二分查找

总结

这些都是作者收集的加上自身面试的一些经验总结,后期会持续收集补充,欢迎圈内的高手在评论区或者公众号贴上你的答案或者高质量问题

准备面试是一方面,对于非面试的iOS开发者来说更适用于检验自己,发起进阶之路。另外知识点是琐碎的,但是真的能全部弄懂并把琐碎的知识点融会贯通,构建起自己的知识体系,你就升级了。

推荐👇:

申请即送:

  • BAT大厂面试题、独家面试工具包,
  • 资料免费领取,包括 数据结构、底层进阶、图形视觉、音视频、架构设计、逆向安防、RxSwift、flutter,
目录
相关文章
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
88 3
|
2月前
|
NoSQL Java 关系型数据库
凭借Java开发进阶面试秘籍(核心版)逆流而上
最近参加了面试或者身边有朋友在面试的兄弟有没有发现,现在的面试不仅会问八股文,还会考察框架、项目实战、算法数据结构等等,需要准备的越来越多。 其实面试的时候,并不是要求你所有的知识点都会,而是关键的问题答到点子上!这份《Java 开发进阶面试秘籍(核心版)》由 P8 面试官整体把控,目前已经更新了 30 万字! 资料中涵盖了一线大厂、中小厂面试真题,毕竟真题都是技术领域最经典的基础知识和经验沉淀的汇总,非常有必要学习掌握!双重 buff 叠加,offer 接到手软~ 点击此处取,这可能是你到目前为止领取的最具含金量的一份资料! 整套资料涵盖:Spring、Spring
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
39 0
|
3月前
|
消息中间件 安全 NoSQL
2023春招面试专题:高并发解决方案(三)
2023春招面试专题:高并发解决方案
|
9天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
12 0
|
24天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
1月前
|
缓存 Java 关系型数据库
Java开发面试题 | 2023
Java开发面试题 | 2023
|
1月前
|
存储 缓存 监控
2024年春招小红书前端实习面试题分享
春招已经拉开帷幕啦! 春招的拉开,意味着新一轮的求职大战已经打响,希望每位求职者都能充分准备,以最佳的状态迎接挑战,找到心仪的工作,开启职业生涯的新篇章。祝愿每位求职者都能收获满满,前程似锦!
75 3
|
1月前
|
消息中间件 NoSQL Java
春招开始,面试也多起来了
春招开始,面试也多起来了
44 0
春招开始,面试也多起来了