ios网络编程面试(ios 网络面试)
iOS面试题-AFNetworking、SDWebImage原理
AFNetworking主要是对NSURLSession和NSURLConnection(iOS9.0废弃)的封装,其中主要有以下类:
1). AFHTTPRequestOperationManager:内部封装的是 NSURLConnection, 负责发送网络请求, 使用最多的一个类。(3.0废弃)
2). AFHTTPSessionManager:内部封装是 NSURLSession, 负责发送网络请求,使用最多的一个类。
3). AFNetworkReachabilityManager:实时监测网络状态的工具类。当前的网络环境发生改变之后,这个工具类就可以检测到。
4). AFSecurityPolicy:网络安全的工具类, 主要是针对 HTTPS 服务。
5). AFURLRequestSerialization:序列化工具类,基类。上传的数据转换成JSON格式
(AFJSONRequestSerializer).使用不多。
6). AFURLResponseSerialization:反序列化工具类;基类.使用比较多:
7). AFJSONResponseSerializer; JSON解析器,默认的解析器.
8). AFHTTPResponseSerializer; 万能解析器; JSON和XML之外的数据类型,直接返回二进制数据.对服务器返回的数据不做任何处理.
9). AFXMLParserResponseSerializer; XML解析器;
2022年iOS面试总结--不断更新当中ing
2020年的春天,成都的天气格外的闷热。
因为公司的原因,导致我不得不考虑去面试一家稳定成熟的大公司,自己从一开始也一直梦想着进入一家可以得到广阔平台的公司发展,有朝一日可以当上技术负责人,可是现实总是那么残酷,4年了,4年了,每次面试感觉自己还是只是会回答:我知道,但是没有深入研究过。这个我了解过,但是还没有处理过。然后就是一个劲的出汗来排解内心的压力。3次换工作,面试过30-40次,每次都只是为了面试而面试(背题),很多东西都记住不。哎~ 我太难了~ 太难了~
不管面试是否通过,还是来总结一下面试经常遇到的问题吧。
Object-C系列面试题总结
基础题:
1.Objective-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么不要在category中重写一个类原有的方法?
meta charset="utf-8"
iOS深浅拷贝
iOS中Category和Extension 原理详解
IOS 分类(category)、扩展(Extension)和继承(inheritance)的区别?
iOS 成员变量 实例变量 属性变量
KVO图
iOS 保持界面流畅的技巧
教你深刻理解Runtime机制
Runtime在工作中的运用
Runtime运行机制
iOS图片设置圆角性能问题
深入理解RunLoop
iOS组件化方案的几种实现
iOS App 启动过程(一):基础概念
iOS App 启动过程(二):从 exec() 到 main()
iOS App 启动过程(三):main() 及生命周期
Swift 泛型
iOS开发面试拿offer攻略之block篇
Block 是将函数及其执行上下文封装起来的对象。 比如:
通过 clang -rewrite-objc WYTest.m 命令编译该 .m 文件,发现该 block 被编译成这个形式:
其中 WYTest 是文件名, blockTest 是方法名,这些可以忽略。其中 WYTest blockTest_block_impl_0 结构体为
--block_impl 结构体为
block 内部有 isa 指针,所以说其本质也是 OC 对象
block 内部则为:
所以说 Block 是将函数及其执行上下文封装起来的对象
既然 block 内部封装了函数,那么它同样也有参数和返回值。
如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群1012951431来获取一份详细的大厂面试资料为你的跳槽多添一份保障。
这里的输出是 6 而不是 2,原因就是对局部变量 num 的截获是值截获。同样,在 block 里如果修改变量 num ,也是无效的,甚至编译器会报错。
打印为 1,2,3
局部对象变量也是一样,截获的是值,而不是指针,在外部将其置为 nil ,对 block 没有影响,而该对象调用方法会影响
输出为 2,意味着 num = 1 这里的修改 num 值是有效的,即是指针截获。同样,在 block 里去修改变量 m ,也是有效的。
编译后
( impl.isa = _NSConcreteStackBlock ;这里注意到这一句,即说明该 block 是栈 block )
可以看到局部变量被编译成值形式,而静态变量被编成指针形式,全局变量并未截获。而 --block 修饰的变量也是以指针形式截获的,并且生成了一个新的结构体对象:
该对象有个属性: num5 ,即我们用 --block 修饰的变量。这里 --forwarding 是指向自身的(栈 block )。
一般情况下,如果我们要对 block 截获的局部变量进行赋值操作需添加 --block 修饰符,而对全局变量,静态变量是不需要添加 --block 修饰符的。
另外, block 里访问 self 或成员变量都会去截获 self 。
分为全局 Block(_NSConcreteGlobalBlock) 、栈 Block(_NSConcreteStackBlock) 、堆
Block(_NSConcreteMallocBlock) 三种形式
其中栈 Block 存储在栈 (stack) 区,堆 Block 存储在堆 (heap) 区,全局 Block 存储在已初始化数据 (.data) 区
输出:
比如:
输出:
日常开发常用于这种情况:
比如堆 1中的全局进行 copy 操作,即赋值:
输出:
仍是全局 block
而对 2中的栈 block 进行赋值操作:
输出:
对栈 blockcopy 之后,并不代表着栈 block 就消失了,左边的 mallock 是堆 block ,右边被 copy 的仍是栈 block 比如:
输出:
即如果对栈 Block 进行 cop ,将会 copy 到堆区,对堆 Block 进行 copy ,将会增加引用计数,对全局 Block 进行 copy ,因为是已经初始化的,所以什么也不做。
另外, --block 变量在 copy 时,由于 --forwarding 的存在,栈上的 --forwarding 指针会指向堆上的-- forwarding 变量,而堆上的 --forwarding 指针指向其自身,所以,如果对 --block 的修改,实际上是在修改堆上的 --block 变量。
即 --forwarding 指针存在的意义就是,无论在任何内存位置,都可以顺利地访问同一个 --block 变量 。
另外由于 block 捕获的 --block 修饰的变量会去持有变量,那么如果用 --block 修饰 self ,且 self 持有
block ,并且 block 内部使用到 --block 修饰的 self 时,就会造成多循环引用,即 self 持有 block , block 持有 --block 变量,而 --block 变量持有 self ,造成内存泄漏。
比如:
如果要解决这种循环引用,可以主动断开 --block 变量对 self 的持有,即在 block 内部使用完 weakself 后, 将其置为 nil ,但这种方式有个问题,如果 block 一直不被调用,那么循环引用将一直存在。
所以,我们最好还是用 --weak 来修饰 self
以上就是 block 篇的面试题合集了,感谢观看~!
iOS面试技术难点有哪些
iOS面试|project|IOS面试课程资料 在线免费观看
链接:
提取码:m94s
iOS面试|project|IOS面试课程资料|目录.txt|第9章 RunLoop相关面试问题(录).mp4|第8章 多线程相关面试问题(录).mp4|第7章 Block相关面试问题(录).mp4|第6章 内存管理相关面试问题(录).mp4|第5章 Runtime相关面试问题(录).mp4|第4章 Objective-C语言特性相关面试问题(录).mp4|第3章 UI视图相关面试问题(录).mp4|第1章 导学(录).mp4|第15章 课程总结(录).mp4|第14章 第三方库相关面试问题(录).mp4|第13章 算法相关面试问题(录).mp4
我的iOS面试经历(附面试题干货)
之前,我写过一篇 2018,我要一个新的开始 ,这个新的开始马上就要开始啦...
相比前一段时间找工作时的波涛汹涌,这会算得上是风平浪静了。下面,我就谈一下我的面试经历及面试后的一些感悟。文章最后附上自己总结的面试题,供大家分享交流。由于本人文笔水平很臭,如有不通顺的地方可以在评论区指出来,看到我会麻溜的改正!对待学问是马虎不得的,你说是不?
首先,我想说目前iOS开发工作真的是不好找了(对于大牛,你就当我这话没说)。这是通过前一段时间我的亲身经历感受到的(怪我水平很臭喽)。为此,我总结出了以下四点原因:
前面说了,如果你是大牛,还用去找工作?工作都来找你了(大牛就是这么牛)。而你呢?还是好好反省反省吧!至于市场饱和,相信大家都早已经得到这个消息了。这其中既有移动互联网前期积累的泡沫破裂的原因,也有大量新的iOS开发者不断涌入的问题。我的iOS技术交流QQ群里时不时会有人出来吆喝一句“iOS已经烂大街了,没人要了”。都烂大街了,好忧伤!至于用人单位要求越来越高,我就不解释了,这个是你需要去好好反省反省的。最后我提到了小程序的冲击。为什么这么说呢?因为我感觉到小程序把一部分人的视线转移到了轻应用上面去了,这就导致一些native移动端的业务被小程序给抢走了。不过对一些业务比较简单的场景来说,小程序的确是一种比较合适的解决方案。一个是节省成本;另一个是方便快捷。 总之,现在的iOS开发工作真的是越来越难找了 。
分析了大的市场行情,再来看一下公司。公司如人,人有靠谱和不靠谱之分,公司亦是如此。前段时间的面试让我感觉到一个靠谱的公司招人还是挺难的。大牛不好请(关键是贵啊),小牛又看不上,而且还怕被忽悠,同时又要控制人力成本,所以用人单位考虑的要比应聘者多,他们一般情况下会找一个平衡点。即既要达到岗位要求,人力成本又要在可接受的范围之内。所以在招聘上那是一个纠结啊!稍微大一点的公司可能主要考虑聘者的技能了,因为大公司业务庞杂,规模和实力是小公司比不了的,对人才的渴求远比小公司要大。如何进大公司呢?是不是又该反省了!!!
啰嗦的有点多,我的开场白就到这里吧!下面说一下我的面试经历。
由于上家公司待的比较久,平常只顾撸码,导致忽视了知识点的总结。一下进入面试状态,面对面试官那么多的技术点问题,还真有懵!所以第一天在面试 昆仑亿发股份科技 和 51Talk 两家公司时表现不理想。由于好久没有参加过面试了,心理上没准备好,语言组织的不好,技术点回答的不到位,导致整个面试过程感觉比较糟。完全不在状态啊!相比第一家 昆仑亿发股份科技 ,第二家 51Talk 表现的比较从容一点,一面我感觉问题不大。可二面的问题感觉有点奇葩,有点吃不准。比如面试官司问你之前公司(P2P金融)有催收吗?是怎么催收的?针对第一个问题我回答有,但第二个问题我该怎么回答。我有点方,不知道他想考什么。是考查我对公司业务的了解程度还是试怀疑我之前待的公司是否是一个不正当的打手公司。我笑笑,没说话...不过挺郁闷的。我一个程序员一定要去了解催收部门的手段吗???第一天就碰了俩钉子。不过也没关系,成事开头难嘛。随即,我加强了技术点的学习总结和面试技巧的学习。
面试是切磋,更是交流。通过面试,即能发现自身的不足,又能对自己从事的工作有更全面的了解。接下来的面试我去了 滴滴、58同城、懂球帝、皇包车旅行、借贷宝、罗辑思维、美团、新浪 等公司。滴滴的面试是印象最好的。面试官比较随和,专业,干脆,几个问题下来明显的能感觉到对方内功很深; 58同城 主要问的最近的项目,你在项目中做了哪些东西以及工程中使用到了哪些比较好的技术点; 懂球帝 问的问题便向设计,不过面试官的态度不怎么友善,一副不耐烦的样子; 皇包车旅行 问的主要是设计方面的问题,便向于架构方面; 借贷宝 是感觉最不好的一个,老是被打断,都不能了好的表达自己了,所以聊到一半我就放弃离开了; 罗辑思维 面试官挺温和的,感觉不错; 美团 面试官是绵里藏针,要小心回答面试官的问题,不要打哈哈; 新浪 面我的是一个老程序员了(大牛),问的东西比较大,而且偏向后端的大并发,有点小郁闷。为什么不找一个iOS程序员跟我聊呢?在跟不同的面试官沟通交流的时候的确学到了不少的东西,而且还增加了不沟通交流的技巧。最重要的就是跟很多同行过了招,发现了自身的很多不足不处,这会还在反省呢!
总结一下面试的要点:
做到以上几点,感觉offer也离你不远了!
经过辛苦的耕耘,最终拿到了4家公司的offer,对这份成绩还算满意。不过,前路仍然漫漫,需要更加努力!
最后还有一个比较痛的领悟:
ok!下面奉上本人总结的iOS面试题:
下面还有一些更干的面试题,你值得拥有!
招聘一个靠谱的 iOS
github里面有大神附上了答案
招聘一个靠谱的 iOS 答案
这里还有MrPeak大神的中级面试题
iOS 中级面试题
下面是答案
iOS 中级面试题 答案
明天放假!
祝小伙伴们“五一”国际劳动节快乐啊!
更新
MrPeak 大神的中级面试题的答案链接中,有的答案不准确,仅供小伙伴们参考!