写点什么

iOS 内卷面试题 - 你以为你够卷了,面试官更卷!

作者:iOSer
  • 2021 年 12 月 14 日
  • 本文字数:3328 字

    阅读完需:约 11 分钟

同事天天说我卷,我没有。



我只是在你们摸鱼的时候偷偷出去,见识了一下世面,结果发现面试官更卷.....下面是我最近个月面试整理的题目,可能会有遗漏,毕竟头发都快没了,你还能要求我有记忆力吗!


不是说开局都先问底层的吗,我这一拳四个月的工夫,你怎么不接啊!


图像、渲染流程

  • 图片是什么时候解码的,如何优化

  • drawrect & layoutsubviews 调用时机

  • 解释一下离屏渲染, 什么场景下会出现?优化点在哪里?

  • SDWebImage 源码,如果保证图片只下载一次

  • 如何从磁盘快速显示图片,SDWebImage 做了什么

  • UIImage *image = [UIImage imageNamed:/imageWithContentOfFile:]; // 这两个的区别

  • tableView 动态计算行高布局问题;

响应链

  • app 如何接收到触摸事件的

  • 响应链: 如果 Swizzle 了 父 View 的 touchBegin 的方法, 会对子 View 造成什么影响?

  • UIbutton 继承链,UIControl UIresponder 区别

  • hit-test 和 point inside 的区别

动画

  • CoreAnimation 的实现原理?

  • 如何让 CoreAnimation 变得可交互? 比如让动画播放一半, 点击让他停止? 让他播放到 50%就停止播放? --追问-->基于你的方案, 请分析 CoreAnimation 内部相关接口实现原理(写出伪代码).

  • 我取消一个 CoreAnimation 动画? 到 50% 后, 我让他不再播放动画(不是暂停)?分析内部如何实现的?

音视频

  • AVFoundation 介绍

  • 音频降燥、视频合成

算法(哪来的这么多树啊

  • 二叉树、排序

  • 堆的数据结构

  • 二叉搜索树的作用

  • 层序遍历也叫什么遍历,怎么实现

  • 二叉树中增加节点

  • 堆排序、归并排序、快排原理,优缺点

  • 排序算法, 字母和数字排序, 字母优先级高于数字: abc123.

  • 二叉树反转, 数组形式


链表

  • 找到链表的倒数第 k 个结点?

  • 合并有序链表

  • 两个无限长度链表(也就是可能有环) 判断有没有交点

  • 两个链表中间交于某个节点,求这个结点。

  • 找链表的倒数第 k 个结点

  • 把一个链表比某个值大的放在左边,比它小的放在右边

  • 反转链表

  • 环形链表

  • 删除单链表的倒数第 K 个节点

字符串、查找

  • 二维有序数组查找数字

  • 把 “www.zhidao.baidu.com” 这样的字符串改成 “com/baidu/zhidao/www”。——老题目了,剑指 offer 的,两次逆序排列即可。

  • 找出一个字符串中只出现一次且是第一个的字符

  • 最长公共前缀

  • 数据流中的第 K 大元素

  • 滑动窗口最大值

  • 前 K 个高频单词

  • 反转字符串

搜索、其他算法

  • 两数之和

  • 有效的字母异位词

  • 请手写一份 LRU 实现 (要求先介绍 LRU 实现, LRU 如何 key-value 的数据进行处理)

  • KMP 算法

  • 如果最高效的计算 17 * 2?

  • 10 亿个数中找最大的 1000 个数

  • 给定一字符串只包含数字,请写一个算法,找出该字符串中的最长不重复子串的长度(不重复是指子串中每一元素不同于子串中其他元素)如:“120135435”最长不重复子串"

Swift

  • Swift、OC 如何相互调用? Swift-->OC 、OC -->Swift? 我开发一个 Swift 的 SDK,(API 都是 Swift 的), 内部需要调用到 OC 的库, 要怎么做?.

  • dynamic 在 swift 与 OC 中的作用

  • protobuf 的原理

  • rn 与 flutter 的区别,flutter 组件渲染规则**(不是再问 swift 吗,怎么最后的精英怪是跨平台!!!)



如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群1012951431来获取一份详细的大厂面试资料为你的跳槽多添一份保障。


前面的算法已经耗尽了我 7 成功力,怎料觉得准备充分的底层,给了我一套闪电五连鞭。


ISA、类结构

  • isa 指针是什么?里面有哪些特殊的位数?什么是 TaggedPointer 的优化?

  • isa 指针里面都存了什么,32 和 64 位分别讲一下

  • OC 是否支持重载? 为什么?

  • IMP、SEL Method 都表示什么意思? 与 _cmd 相关

  • class 的底层结构是什么样的?

  • method_t 里包含什么?

  • super 的本质是什么?

  • OC 的消息机制有几步?

消息转发

  • 如何防止类似 unrecognized selector 的错误?_objc_msgForward 能干什么?

  • runtime 有哪些应用?方法替换(method - Swizzling)有什么缺点?如何安全的进行方法替换?

  • person 有个+test 方法,实现输出 persion test,student 继承 persion,头文件定义-test 方法,但没实现,student *obj=new student [obj test]结果是啥

  • 介绍下 Swizzle 的步骤? 具体到方法名.

  • Swizzle 时, 我不想替换父类, 只想替换子类,怎么办?

  • Swizzle 的优缺点? 缺点会导致什么问题?

  • 方法交换和分类同时去 hook 同一个方法,结果会怎么样? 具体交换的是什么? 交换时是如何处理传参数? 如果使用 NSInvocation 的话, 是否能处理方法有返回值的场景?具体怎么处理的?

KVC、KVO

  • 结构体的字节对齐和 OC 对象的字节对齐?

  • instance(实例对象)、class(类对象)、meta-class(元类对象)分别储存了什么信息?为什么要设计元类?

  • KVO 的具体实现流程?访问成员变量(类似 self->age)会触发 KVO 嘛?KVC 会触发 KVO 嘛?KVO 的两个核心调用方法是?

  • KVC 的原理?getter 和 setter 的搜索策略是什么?KVC 有什么实际的应用?

引用计数、weak、autoreleasepool

  • 引用计数怎么实现的?weak 怎么实现的?sideTable 的 底层结构是怎么样的? weak 指针做了什么操作?

  • 对象的 release 是怎么处理的?

  • 堆和栈的区别是什么?

  • 栈、堆分别是否会被线程所共享?

  • 内存空间中除了堆和栈还有什么内容?

  • weak 如何把 对象重制为 nil

  • assign、strong 区别, 是否能用 assign 修饰 NSObject?

  • AutoReleasePool(自动释放池) 的底层实现是什么?他怎么实现及时释放的?子线程的释放时机是怎么样的?

内存检测、OOM

  • ARC 下哪些情况会造成内存泄漏

  • 内存泄漏如何检测? 要求能具体到循环引用链条, 你用到的工具 (比如:https://github.com/facebook/FBRetainCycleDetector)实现原理怎么做?

  • -OOM (Out Of Memory) 类型的 crash 介绍下, 怎么检测, 怎么处理?

  • dealloc __weak 会有什么问题

分类、扩展、关联对象

  • Catagory 和 extension 分别的使用场合和特点是什么?

  • Catagory 的实现原理是什么?Catagory 有哪些用处?Catagory 有什么局限?

  • Class 和 他的 Catagory 同名方法的调用顺序是什么?Catagory A 和 Catagory B 同名方法的调用顺序是如何?如果想要不按照系统顺序执行要怎么做?

  • +load 和 +initialize 的调用时机和顺序?两者区别是什么?

  • Catagory 有 +load 方法么?+load 是什么时候调用的?能继承么?会覆盖 Class 的 +load 么?

  • Catagory 关联对象(AssociateObject)的底层实现是什么?

  • 方法如果写了多个分类、会执行哪一个?执行逻辑是什么样?

  • 关联对象 weak 底层原理

NSMutableArray 扩展

  • [mutablearry alloc]init 和 [nsmublearray array]有什么区别

  • 结构体中为什么不能使用 oc 对象

  • 我们在开发中使用文件的.mm 是基于什么原因?

  • string 和 NSString 的区别

  • mutablearray 是怎么实现的,mutablearray 申请内存空间干什么用,做增删操作的时候内存空间是怎么改变的,可以用别的方法实现吗?"

线程、队列、锁

  • 线程、队列的关系? 一个线程是否可能存在于两个队列?

  • 队列一定会创建线程吗?

  • 队列是否可以无限制创建?

  • PerformSelector & NSInvocation 优劣对比*

  • gcd 的使用,能不能取消?

  • 如何进行线程保活

  • 编程题 3 个线程顺序打印 0-100

GCD

  • group 如何实现 barrier 类似的功能?

  • gcd queue 的区别

  • gcd、NSOperation 区别, 功能方法区别.

  • GCD group 如何实现同步的? (还能用什么实现?)

  • 执行一个 NSThread 任务, 如何在执行过程中让他终止?

  • iOS NSOperation 是如何终止/取消任务的?

  • 多线程,异步执行(async)一个 performSelector 会执行么?如果加上 afterDelay 呢?

  • GCD 实现 NSOperationQueue

  • DispatchQoS 的作用

Runloop

  • RunLoop 的本质是什么?

  • Runloop 和线程是什么关系?

  • Runloop 的底层数据结构是什么样的?有几种 运行模式(mode)?每个运行模式下面的 CFRunloopMode 是哪些?他们分别是什么职责?

  • Runloop 的监听状态有哪几种?

  • Runloop 的工作流程大概是什么样的?

  • Runloop 有哪些应用?

  • Source0, Source1

Timer、锁

  • NSTimer、CADisplayLink、dispatch_source_t 的优劣

  • 8 种锁,然后问的很细,为什么这个锁性能差,那个锁性能好

  • 自旋锁和互斥锁怎么选择?

  • 你知道 iOS 有哪些锁?性能分别怎么样?

  • NSNotificationCenter 跨线程及底层结构是怎样的

  • 读写锁思路、手写一下

  • atomic 原理 @synchroize

Block

  • 聊聊 Block 底层原理

  • block 内存及循环引用

  • block 三层 copy

  • __forwarding 说一说



这一套组合拳给 4 年没跳过的我,又给打回去了,哎。只能回去接着卷,卷到明年金三银四,一口气卷进大厂去。

文末推荐:iOS 热门文集

用户头像

iOSer

关注

微信搜索添加微信 mayday1739 进微信群哦 2020.09.12 加入

更多大厂面试资料进企鹅群931542608

评论

发布
暂无评论
iOS内卷面试题-你以为你够卷了,面试官更卷!