我认为,对于iOS面试以及进阶的最佳学习方法莫过于刷题网络上找知识点,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。
博主大大给开发者总结了一系列大厂面试中常问的面试技术点,深入解析以及答案,将为最近准备面试的各大开发者去大厂保驾护航
什么是面试? 我所理解的面试,它是一个过程,是不断沉淀、不断总结、善于传达自己的专业领域技术以及解决问题能力的过程。以下是我总结的一些面试题,文中如有错误指导,恳请各位大佬指出!
假如你正在面试,或者准备跳槽高薪,不妨看看我精心总结的面试资料: BAT 大厂最新面试题+答案知识点(后续会有精彩的技术分享) 获取一份详细的大厂面试资料 ,为你的跳槽加薪多一份保障与机会,我整理一些如下:
目录:
一:基础解答
1.atomic ?atomic和nonatomic的区别? atomic:原子属性(线程安全),保证同一时间只有一个线程能够写入(但是同一个时间多个线程都可以取值),atomic 本身就有一把锁(自旋锁),但是只保证了setter和gteetr的原子性,并非真正的线程安全,线程安全需要自己写代码保证。
如:同时有两个线程在执行,一个是读写线程另一个是在执行别的操作,这样还是保证不了线程的安全。
2.ARC为什么会有内存泄漏? — 循环引用:block 、NSTimer、delegate — 非OC对象申请到内存没有释放 — 大次数循环内存暴涨
3.iOS面向对象的特性,重写和重载的区别?
— 重写:子类不想继承使用父类的方法,通过重写覆盖掉 — 重载:方法一样但是参数不一样,可以发生在同类和子类中,但是OC不能重载,swift可以。
4.如何提高tableview的流畅度?
(1)本质上是下降 CPU、GPU 的工做,从这两个大的方面去提高性能。
CPU:对象的建立和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制
GPU:纹理的渲染
卡顿优化在 CPU 层面
尽可能用轻量级的对象,好比用不到事件处理的地方,能够考虑使用 CALayer 取代 UIView
不要频繁地调用 UIView 的相关属性,好比 frame、bounds、transform 等属性,尽可能减小没必要要的修改
尽可能提早计算好布局,在有须要时一次性调整对应的属性,不要屡次修改属性
Autolayout 会比直接设置 frame 消耗更多的 CPU 资源
图片的 size 最好恰好跟 UIImageView 的 size 保持一致
控制一下线程的最大并发数量
尽可能把耗时的操做放到子线程
文本处理(尺寸计算、绘制)
图片处理(解码、绘制)
二:大厂面试真题
handler原理,主线程发送message给子线程 recyclerview列表的优化 自定义view,onmeasure的如何测量,测量模式起什么作用? 大图片如何处理? sp支持多进程吗?多线程呢? 数据库读写在同一个线程吗? 一个文本文件中每行有一个手机号或电话号,给定一个手机号,判断该文件中是否存在。给出时间复杂度较低的方案
handler原理,主线程发送message给子线程 recyclerview列表的优化 自定义view,onmeasure的如何测量,测量模式起什么作用? 大图片如何处理? sp支持多进程吗?多线程呢? 数据库读写在同一个线程吗? 一个文本文件中每行有一个手机号或电话号,给定一个手机号,判断该文件中是否存在。给出时间复杂度较低的方案
应用逻辑的Bug
大多数闪退崩溃日志的产生都是因为应用中的Bug,这种Bug的错误种类有很多,比如:
SEGV:(Segmentation Violation,段违例),无效内存地址,比如空指针,未初始化指针,栈溢出等; SIGABRT:收到Abort信号,可能自身调用abort()或者收到外部发送过来的信号; SIGBUS:总线错误。与SIGSEGV不同的是,SIGSEGV访问的是无效地址(比如虚存映射不到物理内存),而SIGBUS访问的是有效地址,但总线访问异常(比如地址对齐问题); SIGILL:尝试执行非法的指令,可能不被识别或者没有权限; SIGFPE:Floating Point Error,数学计算相关问题(可能不限于浮点计算),比如除零操作; SIGPIPE:管道另一端没有进程接手数据。
常见的崩溃原因基本都是代码逻辑问题或资源问题,比如数组越界,访问野指针或者资源不存在,或资源大小写错误等。
本次文章到这里啦,下篇文章继续,希望你们喜欢,如果你有意见欢迎给我留言
关注青沐大大 xzl2193573140