腾讯SNG某部门iOS面试经历

腾讯SNG面试,算是积攒一次面试经验了。可以看出,高级工程师不仅要会用一些常用库,还要懂得它们的原理。

1.APP性能优化:内存泄露检测、卡顿检测,自己做应该怎么做?

内存泄露检测:
1. Instruments工具:Leaks,Allocation.
2. MLeakFinder工具。

MLeaksFinder:精准 iOS 内存泄露检测工具
iOS内存泄漏自动检测工具PLeakSniffer

卡顿检测:
1. 开发阶段可以用CADisplayLink,添加到runloop中.
2. 线上监测,除了用第三方SDK之外,可以使用 “在子线程添加observer监测主线程”的方式.

微信读书 iOS 性能优化总结

卡顿检测的实现代码可以在这里找到:检测iOS的APP性能的一些方法

开源工具:

2.AsycDisplayKit 原理。

AsyncDisplayKit是 Facebook 推出的用于保持界面流畅性的框架,其原理大致如下:
UI 线程中一旦出现繁重的任务就会导致界面卡顿,这类任务通常分为3类:排版,绘制,UI对象操作。
排版通常包括计算视图大小、计算文本高度、重新计算子式图的排版等操作。

绘制一般有文本绘制 (例如 CoreText)、图片绘制 (例如预先解压)、元素绘制 (Quartz)等操作。
UI对象操作通常包括 UIView/CALayer 等 UI 对象的创建、设置属性和销毁。

其中前两类操作可以通过各种方法扔到后台线程执行,而最后一类操作只能在主线程完成,并且有时后面的操作需要依赖前面操作的结果 (例如TextView创建时可能需要提前计算出文本的大小)。ASDK 所做的,就是尽量将能放入后台的任务放入后台,不能的则尽量推迟 (例如视图的创建、属性的调整)。
为此,ASDK 创建了一个名为 ASDisplayNode 的对象,并在内部封装了 UIView/CALayer,它具有和 UIView/CALayer 相似的属性,例如 frame、backgroundColor等。所有这些属性都可以在后台线程更改,开发者可以只通过 Node 来操作其内部的 UIView/CALayer,这样就可以将排版和绘制放入了后台线程。但是无论怎么操作,这些属性总需要在某个时刻同步到主线程的 UIView/CALayer 去。

ASDK 仿照 QuartzCore/UIKit 框架的模式,实现了一套类似的界面更新的机制:即在主线程的 RunLoop 中添加一个 Observer,监听了 kCFRunLoopBeforeWaiting 和 kCFRunLoopExit 事件,在收到回调时,遍历所有之前放入队列的待处理的任务,然后一一执行。

具体的代码可以看这里:_ASAsyncTransactionGroup。

3.Crash ,Bug收集 SDK的原理,自己做应该怎么做?

注册NSSetUncaughtExceptionHandler,包括两种:

  1. HandleException
  2. SignalHandler

漫谈iOS Crash收集框架
iOS崩溃捕获以及收集原理

4.Core animation 动画与UIView动画的区别,动画执行过程中是否响应事件?

  • UIView animation 由CPU执行,Core Animation由GPU执行。
  • CALayer本身不能响应事件,UIView是在CAlayer之上,增加了触摸响应,手势识别等事件响应。

Core Animation is not executed on the CPU. Their commands are more offloaded to the GPU and used to create the graphics that are shown on the screen, powered by the GPU hardware.

Core Graphics is entirely done on the CPU, and cannot be performed on the GPU. Because it is an entirely CPU-bound operation, it is sometimes slower on older devices (e.g. the iPad 2 or the iPad 3rd Generation). This is something you need to keep in mind when using it in your apps. But, the good thing about Core Graphics is you can combine it with Core Animation.

Advanced Graphics with Core Animation

Core Animation does the rest, handing most of the actual drawing work off to the onboard graphics hardware to accelerate the rendering. This automatic graphics acceleration results in high frame rates and smooth animations without burdening the CPU and slowing down your app.

Core Animation Programming Guide

动画执行过程中是否响应事件?

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"%s",__func__);
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];
    
    if (CGRectContainsPoint(self.colorLayer.presentationLayer.frame, point)) {
        [self startAnimation];
    }
    
    if (CGRectContainsPoint(self.myView.frame, point)) {
        [self startUIViewAnimation:nil];
    }
}

经过测试,CALayer是可以响应touch事件的,而UIView的block animation在执行过程中不能响应其自身的触摸事件。

注意CALayer在动画执行过程中要是用presentationLayer属性才能获取到中间状态的layer
Core Animation 的removedOnCompletion 属性默认是YES,即动画结束之后会移除动画,CALayer会回到原来的状态

可以查看Core Animation Programming Guide 的显式动画一章。

另外附一篇有意思的文章 UIDynamics, UIKit or OpenGL? 3 Types of iOS Animations for the Star Wars,值得一读。

5.Https概念,iOS中设置https。

6.100W数据中找到最大的10W,使用什么数据结构?

海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)

7.音视频开发,没做过,然后提到简历上的二维码扫描库 - AVFoundation。

影响二维码扫描速度的难点是什么?我回答是二维码图像的清晰度,面试官还提到了二维码图像的角度,该如何优化。

对于AVFoundation来说,有两个因素:

  1. 图像分辨率
    AVCaptureSession 可以设置 sessionPreset 属性,这个决定了视频输入每一帧图像质量的大小。

    • AVCaptureSessionPreset320x240
    • AVCaptureSessionPreset352x288
    • AVCaptureSessionPreset640x480
    • AVCaptureSessionPreset960x540
    • AVCaptureSessionPreset1280x720
    • AVCaptureSessionPreset1920x1080
  2. 扫描范围
    AVCaptureMetadataOutput 的 rectOfInterest 属性来配置解析范围

8.离屏渲染问题的本质是什么?

首先离屏渲染指的是在GPU在当前屏幕缓冲区以外开辟一个缓冲区进行渲染操作.

当使用圆角,阴影,遮罩的时候,图层属性的混合体被指定为在未预合成之前(下一个HSync信号开始前)不能直接在屏幕中绘制,所以就需要屏幕外渲染。

具体参考这篇文章:iOS-离屏渲染详解

总结:

本次面试问题侧重于实际项目,很多东西之前有看过,但都忘了大概,用到但没有深入研究是一大劣势。

所以说多多面试还是有帮助的😆!

面试必看文章:
iOS 保持界面流畅的技巧
iOS 应用稳定性监测和指标问题

iOS 性能监控方案(上篇)
iOS 性能监控方案(下篇)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容

  • 前言 本文只要描述了iOS中的Core Animation(核心动画:隐式动画、显示动画)、贝塞尔曲线、UIVie...
    GitHubPorter阅读 3,593评论 7 11
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,982评论 4 60
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,441评论 6 30
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,238评论 7 249
  • 有些时候,真的会很多愁善感。就像雨在下的时候,会滴落不同的声音,滴在瓦上,滴在叶子上,一大滴滴落在某处,时断时续,...
    朱朱老老阅读 152评论 0 1