字节飞书iOS客户端实习一面面经
- 自我介绍
- 接触iOS多久了?做iOS的理由是什么?
- 面向对象的基本概念?
- 答:封装、继承、多态(解释了一下)
- 问:继承和多态的区别是什么?
- 答:略
- 堆和栈的区别?
- 答:高到低、低到高;存一般的数据结构、存对象和手动分配的内存;性能不同,栈销毁只需要移动指针,堆需要手动销毁
- 问:为什么要这样做?(字符串等放在栈,对象和手动分配的放堆里)
- 答:感觉和作用域有关吧,作用域是线性的,然后进出作用域的时候销毁起来方便,也更快
- 问:还有其他原因吗
- 勘误:栈拓展起来更方便
- 了解哪些锁,大概说一下?
- 答:自旋锁和互斥锁,自旋锁就不断尝试,需要占用CPU时间,适合需要高频获取的资源,但其他进程很少用到的,线程不安全;互斥锁就是不断尝试,但每次尝试之后会休眠,等待操作系统唤醒。个人猜测这个是基于操作系统内核实现的,就是尝试之后就回到block状态,然后等待有资源了,内核会将其调度到ready&running态,然后再去尝试获取资源。
- 解释一下中断?
- 答:调试的breakpoint?
- 问:操作系统里的
- 答:大概解释了下一个程序正在运行的时候遇到中断,先检测有没有关中断,如果没有的话就把上下文保存起来,然后切换到中断服务程序,运行完之后再回到当前,把上下文复原,这样...
- 勘误:关中断和开中断还可以再详细一点
- 问:中断分为哪些?
- 答:硬中断和软中断吧,硬中断主要是硬件产生的中断,比如按键盘啊之类的,软中断主要就是软件产生的中断吧。
- iOS知识知道多少,都说一下?
- 大概从生命周期、runloop、runloop mode、observer、source0/1、timer讲到autoreleasepool开发中使用时机、autoreleasepool的释放时机,大概这样。
- 算法,三数之和