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