2021iOS面试题总结day3

准备:
1.iOSUI渲染机制

On-Screen Rendering:
意为在屏渲染(当前屏幕渲染),指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行
Off-Screen Rendering:
意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作

设置了以下属性时,都会触发离屏绘制:

shouldRasterize(光栅化)
masks(遮罩)
shadows(阴影)
edge antialiasing(抗锯齿)
group opacity(不透明)
复杂形状设置圆角等
渐变

为何要避免离屏渲染:

额外的内存开销、增加GPU工作量、耗时、卡顿。

2.Cocoa Touch框架

主要包括Foundation框架和UIKit框架

3.Masonry

第三方自动布局框架

4.Instruments

Allocations:用来检查内存分配
Leaks:检查泄漏的内存
Time Profiler:分析代码的执行时间
Zombies:检查是否访问了僵尸对象
Energy Diagnostic :分析手机电量消耗
Network: 检查流量耗费情况

今日面试问题总结:

今天面试的是一家初创公司,没有问技术问题,问了以前的项目经验,还有对于关于对方公司的项目的了解。

1.工作中遇到的困难,怎么解决的?

面试时经常会被问到这个问题,招聘者之所以会问这个问题,是想通过问这个问题来了解面试者的技术深度,什么样的问题在你看来算是难题。

如果只是问我遇到的最大的困难,我觉得应该是苹果审核的问题,经常会遇到审核被拒又不告诉具体原因的情况,而且还是在着急上线的情况下,这个时候只能通过审核被拒的关键字去网络上搜索相关的经验,去技术群寻求其他开发者的帮助。还有一些时候搜不到答案的,通常是苹果官方制定了新的审核规则,这个时候只能凭借自己的经验修复自己认为可能出错的地方,同时申请加急审核,在审核的说明文字里也要和苹果的审核人员沟通,询问审核被拒的具体原因,还有说明自己的项目着急上线,请求对方让我们尽快通过审核,运气好的话就会很快通过。运气不好的话被卡几个星期、几个月甚至封号都是有可能的。

这次面试官问我的是遇到过什么bug,而不是遇到的困难,所以只能从技术方面回答。一时着急我只说了遇到页面加载大量图片时页面卡顿的问题,解决办法是图片压缩,由于对方不是开发,我没有说具体的代码操作。现在觉得这样回答不太好,我说的是最基础的东西,作为有几年开发经验的人,不应该把这种基础问题当作问题。应该谈一谈关于闪退、页面卡顿、内存泄漏的具体解决办法。

1.闪退:可以通过第三方工具bugly收集,也可以通过Xcode自带的Crashes工具收集。
2.页面卡顿:尽量避免使用过大的StoryBoard/Xib文件、图片异步加载(把耗时的操作放在子线程,如文本尺寸计算、图片绘制)并且缓存、避免离屏渲染(圆角、阴影、遮罩)、图片的Size和ImageView的Size一致、减少透明的视图、尽量避免段时间大量图片显示,合成一张、对于cell:减少图片绘制、初始化时就布局好、缓存行高。
3.内存泄漏:1)对象之间循环引用。多个对象相互之间有强引用,不能施放让系统回收。解决办法:使用 weak 打破对象之间的相互强引用。2)block的循环引用。使用__weak打破循环的方法只在 ARC下才有效,在 MRC 下应该使用__block。3)delegate 的循环引用。解决办法:在声明 delegate 属性的时候 用weak 进行弱引用。

内存泄漏查询方式:Instruments中的Leak动态分析工具。

2.app的日活有多少?

之前的项目用的是友盟统计,由于之前公司的流量来源主要是小程序,所以app端的日活比较少,iOS端和安卓端加起来一共只有几千,而且这还是比较好的情况下,正常情况下日活只有几百。虽然这个量让面试官听到以后可能会觉得很少,认为之前的公司实力不够,但是我觉得还是如实回答比较好。

3.还有什么想要了解的?

面试官给我介绍了许多关于他们项目的情况、从他们的盈利模式、主营业务、未来规划以及公司规模都谈了一下,问我还有什么想要了解的。基本上把我想问的都说了。对于这个问题,公司的盈利模式是一定要问的,如果公司不能保证持续盈利,那么就会有随时倒闭的可能,这样的公司最好不要去。我还问了关于技术团队的规模,都有什么职位,有多少人,如果想去一个可以让自己获得成长的公司,最好是人员齐全的,如果公司每个岗位只有一个人,甚至有的岗位根本没有人,比如没有产品经理,没有测试,这样的公司也不是很靠谱,很可能入职以后会一个人身兼数职。最后还有很关键的一定要问一下有没有五险一金,这个是最基本的要求,如果没有的话就可以不用考虑了。

推荐阅读更多精彩内容