2022面试题整理

2022面试题整理

字节跳动

自我介绍

之前项目的亮点,难点,擅长点

实例对象的内存结构?isa_t包含哪些信息

block内为什么要实现__strong?

Swift的方法调度是什么?跟OC的区别?如何强制用消息发送

Swift的写时复制底层如何实现?

进程,线程;串行,并行;同步,异步;并行,并发

进程是资源分配的最小单位,线程是CPU调度的最小单位

并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
并发的关键是你有处理多个任务的能力,不一定要同时。
并行的关键是你有同时处理多个任务的能力。

串行:一个程序执行没结束前,另一个不能开始,要一个一个的执行。
并行:一个程序执行没结束,另一个已经开始。

同步:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。
异步:当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响。

APP启动流程,启动优化

字符串为什么用copy

属性特性内存管理上有哪些关键字

多线程

信号量semaphore初始信号量为0会发生什么?

组件化

使用过的设计模式

静态编译的流程

LinkMap是如何静态分析无用类的

runloop

runloop跟UI渲染有哪些关系

source0和source1都包含哪些东西

子线程是如何利用runloop进行线程保活的

如何hook C函数

上机题

编码

算法题

含有n个数字的圆圈中每次删除第m个元素,求最后剩下的数字

1

LRU算法原理,包含哪些数据结构

链表反转

BI安

栅栏函数的实现细节

京东

简述下KVC的处理流程,是否会触发KVO

启动优化方式

简述下TCP三次握手流程,为什么2次和4次不行?

阅读过哪些第三方源码?挑一个介绍一下?

AutoreleasePool的底层结构

@autoreleasepool{} 本质上是一个结构体:
autoreleasepool会被转换成__AtAutoreleasePool
__AtAutoreleasePool 里面有两个函数objc_autoreleasePoolPush(),objc_autoreleasePoolPop().,其实一些列下来之后实际上调用得是AutoreleasePoolPage类中得push 和 pop两个类方法
push就是压栈操作,
pop就是出栈操作于此同时对其对象发送release消息进行释放

算法

如何实现一个哈希表

快看漫画

load 和 initilze 的调用情况,以及子类的调用顺序问题?

initialize这个方法是第一次给某给类发送消息的时候调用,并且只会调用一次。 如果某一个类一直没有被用到,此方法也不会执行。
initialize先初始化父类, 在初始化子类,子类的initialize 会覆盖父类的方法。
分类中实现了initialize会覆盖本来的initialize方法,如果多个分类都执行了initialize ,那么只是执行最后编译的那个。
load当程序被加载的时候就会调用, 其加载顺序为, 如果子类实现类load 先执行父类 -> 在执行子类,而分类的在最后执行。
如果子类不实现load,父类的load就不会被执行。
load是线程安全的,其内部使用了锁,所以我们应该避免在load方法中线程阻塞。
load在分类中,重写了load方法, 不会影响其主类的方法。即不会覆盖本类的load方法
当有多个类的时候,每个类的load的执行顺序和编译顺序一致。

frame和bounds的区别?UIScrollView滚动的时候bounds会发生变化吗?

简述下事件传递过程

weak的内存管理机制?

手势和触摸事件的优先级谁高?

如何实现一个内存缓存?如何实现一个磁盘缓存?

iOS消息转发的流程是什么?

iOS中定时器有哪些?dispatch_source_t为什么是准时的?

如何实现限速下载?

中国婚博会

介绍下HTTP和HTTPS,HTTPS建立连接的过程

介绍下pod install的执行流程

SDWebImage的实现原理,它是如何解决tableView的复用时出现图片错乱问题的呢?

微光

block和delegate的区别?

OC的分类是什么设计模式

介绍下离屏渲染

两个category中出现同名方法,如何解决优先级问题?