最近换工作,面试了好几家公司,终于拿到了满意的offer,可惜进不了大厂,还需继续努力。通过这次面试发现了太多的不足,基础知识不够扎实,只知道用,不知其原理,所以面试的时候都没怎么发挥好。以后将重新学习iOS知识,建立自己的知识体系,提升自己的iOS技术,通过写文章来多总结自己的知识点,跟大家一起交流。先来总结下这次面试中被问到的知识点,答案以后再慢慢补充。
项目相关
- 你觉得自己做的最满意的APP是哪一个,亮点在哪里。
- 你在项目中担任的角色是什么。
- 一个新的APP从0到1是怎么架构的,为什么要这样做,说下MVC与MVVM。
- 如果让你封装一个网络框架,你会怎么封装,要考虑哪些方面。
- 怎么重构一个项目。
- 对APP做过哪些性能优化,怎么优化安装包的大小。
- 什么是冷启动,什么是热启动。
- 开发的时候碰到过什么问题让你印象最深刻,你是怎么解决的,是怎么想到这解决文案的。
- APP比较耗电是由于哪些因素引起的,怎么进行优化。
- 对小组成员是怎么分工的,怎么能保证分配的任务在规定时间内完成。
- 你是通过什么方式管理小组成员的,怎么挖掘他们的优点。
- 如果小组成员的技术比你好,然后又不太好管理,你该怎么做。
- 你自己做过什么好玩的APP。
- 怎么收集crash信息,哪些情况会出现crash,怎么减少程序的崩溃率。
- 出现卡顿怎么优化,有没有做过卡顿监听。
- APP中有没有进行日志收集。是怎么进行收集的,收集后通过什么规则来传送的。
- APP中有很多操作点击后需要判断是否登录,你是怎么做的,有没有什么更好的方案。
- 有没有做过组件化,实现组件化有哪些方式。
- 做了这么久多年的开发,ios有哪些变化
- RN/weex/小程序这些有什么区别。
- 有没有学过flutter。他与RN又有什么区别,你怎么看待RN与flutter,如果让你选择其中一个进行开发,你会怎么去选择。
- 你当时为什么选腾讯云的直播SDK,有没有对比过其它厂家的,主要是通过哪方面进行对比。
- 你会那么多语言,你是怎么学习的,你觉得你的学习方法可以吗。
- 做直播的时候你碰到过哪些问题,是怎么解决的。有没有深入了解过推流、拉流、编码、解码。码率是什么。
- IM实现原理,用的是什么通信协议,如果让你自己实现即时聊天,你会怎么做。
- 用过哪些开源框架,除了这些很常用的,还用过哪些。
- 看过哪些开源代码,分别讲下核心思想,SDWebImage框架实现原理是怎么样的,本地缓存的图片到期后是怎么自动清除的。
- 用过哪些设计模式,画一个工厂模式的UML图。
- 一个西瓜,只用3刀怎么切成8块。
基础知识
- 如果让自己实现一个weak怎么实现
- 说下深拷贝浅拷贝
- NSString定义的属性为什么要使用copy。
- OC跟C语言是什么区别,说下你对面向对象与面向过程的理解
- C语言是一门动态的函数式语言,你觉得这话正确吗
- OC可以实现多继承吗。
- KVC与KVO用的多吗,实现原理是怎样的。
- Block实现原理。
- delegate实现原理。
- runloop实现原理,runloop能解决哪些问题。
- 分类有哪些用途,跟继承有什么区别。分类实现原理。如果方法名相同,会调用哪个方法。
- 说一下你对CALayer的认识,他与UIView有什么区别。
- 讲一下事件响应的过程,重点描述下事件响应链。事件响应传递的顺序。怎么扩大一个按钮的点击范围。
- self与super的区别
- 怎么在block中修改一个变量的值,为什么要这么做。
- UIWebView怎么跟原生进行交互,cookie怎么缓存,碰到过什么难点
- WKWebView碰到过哪些坑,怎么解决的,有没有用过JS注入。
- UIWebView与OC进行交互是同步还是异步的。
- 通知和代理有什么区别。
- 用通知要注意什么。
- block与delegate的区别。
- APP中常用的数据存储方式有哪些。
- 数据库存储文案你用的是fmdb还coredata。有没有看过FMDB的源码,是怎么进行多线程操作的。
- 你是怎么设计表的。设计表的三范式是什么。
- runtime实现原理,你有没有看过runtime的源码。
- 你用runtime实现过哪些功能。
- 什么是元类。
- oc中调用方式是怎么实现的,消息转发机制是怎样的流程。
数据结构与算法
- 数据结构的存储一般常用的有几种?各有什么特点?
- 怎么往链表的第N个结点添加一条数据。
- 数组与链表的区别。
- 什么是堆,什么是栈,什么是队列。
- 分别讲下时间复杂度和空间复杂度。
- 常用的排序算法有哪些,你用过哪些算法。
- 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数
- 怎么快速写入一个100M的文件。
- 怎么查找两个子视图的共同父视图
多线程
- ios中多线程实现方式有哪些,各有什么优点和缺点,你用哪个用的多。
- ios中怎么做线程同步。
- 分别讲一下进程与线线程。
- 使用多线程有什么优点和缺点。
- 为什么只能在主线程中更新UI。
- 多线程的并发与并行有什么区别,并发你用在哪些场景。
- GCD中的信号量有没有用过,用在哪些场景。
- 产生死锁的必要条件。
- 怎么实现线程常驻。
- 如何实现一个线程安全的 NSMutableArray。
- 什么是自旋锁,什么是互斥锁。
- 使用多线程要注意哪些。
- runloop与多线程的关系。
- runloop实现原理及应用场景。
内存管理
- iOS的内存管理方式
- ARC与java中的垃圾回收有什么区别
- 怎么避免循环引用
- retain与release的实现机制
- 说一下iOS中的自动释放池,自动释放池实现原理。
- runloop中有用到自动释放池吗。
- ARC在运行时和编译时分别做了什么
- 什么是野指针。
- 你是怎么进行内存优化的。在 Obj-C 中,如何检测内存泄漏?你知道哪些方式?
- autoReleasePool 什么时候释放?
- 内存中的5大区分别是什么。
网络
- 从发送一个请求,到响应,中途经历了什么,是怎么完成一个网络请求流程的。
- 简述 SSL 加密的过程用了哪些加密方法,为何这么作?
- 讲一下三次握手与4次挥手,为什么握手是3次,挥手是4次。
- 网络7层协议是哪几层,每一次的用途。
- get与post的区别,put与post的区别
- TCP和UDP的区别
- 有没有用过socket,说下实现原理。
- DNS是什么,DNS解析过程是怎么样的。
- 你用什么工具进行抓包,原理是什么,如果让你自己写个抓包工具怎么做。
- 怎么对网络数据进行缓存
- AFNetworking 底层原理分析
- 实际开发项目中,经常用到的网络请求有哪些呢?
- 发起网络请求后,怎么取消。如果没请求完就退出界面,要怎么处理。
- http与https的区别,为什么https更安全
- 详细描述一下你对ipv4与ipv6的理解