jjzjj

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

Julday 2023-03-28 原文

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

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

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

图像、渲染流程

  • 图片是什么时候解码的,如何优化
  • 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热门文集

有关iOS内卷面试题-你以为你够卷了,面试官更卷!的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  4. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  5. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  6. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  7. 西安华为OD面试体验 - 2

    西安华为OD面试体验开始投简历技术面试进展工作进展开始投简历去年一整年一直在考研和工作之间纠结,感觉自己的状态好像当时的疫情一样差劲。之前刚毕业的时候投了个大厂的简历,结果一面写算法的时候太拉跨了,虽然知道时dfs但是代码熟练度不够,放在平时给足时间自己可以调试通过,但是熟练度不够那面试当时就写不出来被刷了。说真的算法学到后期我感觉最重要的是熟练度和背板子(对于我这种普通玩家来说),面试题如果一上来短时间内想不出思路就完蛋了。然后由于当时找的工作不是很理想就又想考研了。但是考研是有风险的,我自我感觉自己可能冲不上那个学校,而找工作一个没成可以继续找嘛。本着抱着试试看的态度在boss上投了简历,

  8. ruby - 为 IO::popen 拯救 "command not found" - 2

    当我将IO::popen与不存在的命令一起使用时,我在屏幕上打印了一条错误消息:irb>IO.popen"fakefake"#=>#irb>(irb):1:commandnotfound:fakefake有什么方法可以捕获此错误,以便我可以在脚本中进行检查? 最佳答案 是:升级到ruby​​1.9。如果您在1.9中运行它,则会引发Errno::ENOENT,您将能够拯救它。(编辑)这是在1.8中的一种hackish方式:error=IO.pipe$stderr.reopenerror[1]pipe=IO.popen'qwe'#

  9. ruby - IO::EAGAINWaitReadable:资源暂时不可用 - 读取会阻塞 - 2

    当我尝试使用“套接字”库中的方法“read_nonblock”时出现以下错误IO::EAGAINWaitReadable:Resourcetemporarilyunavailable-readwouldblock但是当我通过终端上的IRB尝试时它工作正常如何让它读取缓冲区? 最佳答案 IgetthefollowingerrorwhenItrytousethemethod"read_nonblock"fromthe"socket"library当缓冲区中的数据未准备好时,这是预期的行为。由于异常IO::EAGAINWaitReadab

  10. ruby - 如何使用 ruby​​ fibers 避免阻塞 IO - 2

    我需要将目录中的一堆文件上传到S3。由于上传所需的90%以上的时间都花在了等待http请求完成上,所以我想以某种方式同时执行其中的几个。Fibers能帮我解决这个问题吗?它们被描述为解决此类问题的一种方法,但我想不出在http调用阻塞时我可以做任何工作的任何方法。有什么方法可以在没有线程的情况下解决这个问题? 最佳答案 我没有使用1.9中的纤程,但是1.8.6中的常规线程可以解决这个问题。尝试使用队列http://ruby-doc.org/stdlib/libdoc/thread/rdoc/classes/Queue.html查看文

随机推荐