騰訊SNG某部門iOS面試經(jīng)歷

騰訊SNG面試,算是積攢一次面試經(jīng)驗了赵誓〈蛎可以看出,高級工程師不僅要會用一些常用庫俩功,還要懂得它們的原理幻枉。

1.APP性能優(yōu)化:內(nèi)存泄露檢測、卡頓檢測,自己做應(yīng)該怎么做诡蜓?

內(nèi)存泄露檢測:
1. Instruments工具:Leaks熬甫,Allocation.
2. MLeakFinder工具。

MLeaksFinder:精準(zhǔn) iOS 內(nèi)存泄露檢測工具
iOS內(nèi)存泄漏自動檢測工具PLeakSniffer

卡頓檢測:
1. 開發(fā)階段可以用CADisplayLink蔓罚,添加到runloop中.
2. 線上監(jiān)測椿肩,除了用第三方SDK之外瞻颂,可以使用 “在子線程添加observer監(jiān)測主線程”的方式.

微信讀書 iOS 性能優(yōu)化總結(jié)

卡頓檢測的實現(xiàn)代碼可以在這里找到:檢測iOS的APP性能的一些方法

開源工具:

2.AsycDisplayKit 原理。

AsyncDisplayKit是 Facebook 推出的用于保持界面流暢性的框架郑象,其原理大致如下:
UI 線程中一旦出現(xiàn)繁重的任務(wù)就會導(dǎo)致界面卡頓贡这,這類任務(wù)通常分為3類:排版,繪制厂榛,UI對象操作盖矫。
排版通常包括計算視圖大小、計算文本高度击奶、重新計算子式圖的排版等操作炼彪。

繪制一般有文本繪制 (例如 CoreText)、圖片繪制 (例如預(yù)先解壓)正歼、元素繪制 (Quartz)等操作辐马。
UI對象操作通常包括 UIView/CALayer 等 UI 對象的創(chuàng)建、設(shè)置屬性和銷毀局义。

其中前兩類操作可以通過各種方法扔到后臺線程執(zhí)行喜爷,而最后一類操作只能在主線程完成,并且有時后面的操作需要依賴前面操作的結(jié)果 (例如TextView創(chuàng)建時可能需要提前計算出文本的大刑汛健)檩帐。ASDK 所做的,就是盡量將能放入后臺的任務(wù)放入后臺另萤,不能的則盡量推遲 (例如視圖的創(chuàng)建湃密、屬性的調(diào)整)。
為此四敞,ASDK 創(chuàng)建了一個名為 ASDisplayNode 的對象泛源,并在內(nèi)部封裝了 UIView/CALayer,它具有和 UIView/CALayer 相似的屬性忿危,例如 frame达箍、backgroundColor等。所有這些屬性都可以在后臺線程更改铺厨,開發(fā)者可以只通過 Node 來操作其內(nèi)部的 UIView/CALayer缎玫,這樣就可以將排版和繪制放入了后臺線程。但是無論怎么操作解滓,這些屬性總需要在某個時刻同步到主線程的 UIView/CALayer 去赃磨。

ASDK 仿照 QuartzCore/UIKit 框架的模式,實現(xiàn)了一套類似的界面更新的機制:即在主線程的 RunLoop 中添加一個 Observer洼裤,監(jiān)聽了 kCFRunLoopBeforeWaiting 和 kCFRunLoopExit 事件邻辉,在收到回調(diào)時,遍歷所有之前放入隊列的待處理的任務(wù),然后一一執(zhí)行恩沛。

具體的代碼可以看這里:_ASAsyncTransactionGroup在扰。

3.Crash ,Bug收集 SDK的原理雷客,自己做應(yīng)該怎么做芒珠?

注冊NSSetUncaughtExceptionHandler,包括兩種:

  1. HandleException
  2. SignalHandler

漫談iOS Crash收集框架
iOS崩潰捕獲以及收集原理

4.Core animation 動畫與UIView動畫的區(qū)別,動畫執(zhí)行過程中是否響應(yīng)事件搅裙?

  • UIView animation 由CPU執(zhí)行皱卓,Core Animation由GPU執(zhí)行。
  • CALayer本身不能響應(yīng)事件部逮,UIView是在CAlayer之上娜汁,增加了觸摸響應(yīng),手勢識別等事件響應(yīng)。

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

動畫執(zhí)行過程中是否響應(yīng)事件兄朋?

- (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];
    }
}

經(jīng)過測試掐禁,CALayer是可以響應(yīng)touch事件的,而UIView的block animation在執(zhí)行過程中不能響應(yīng)其自身的觸摸事件。

注意CALayer在動畫執(zhí)行過程中要是用presentationLayer屬性才能獲取到中間狀態(tài)的layer
Core Animation 的removedOnCompletion 屬性默認是YES颅和,即動畫結(jié)束之后會移除動畫傅事,CALayer會回到原來的狀態(tài)

可以查看Core Animation Programming Guide 的顯式動畫一章。

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

5.Https概念蹭越,iOS中設(shè)置https。

6.100W數(shù)據(jù)中找到最大的10W教届,使用什么數(shù)據(jù)結(jié)構(gòu)响鹃?

海量數(shù)據(jù)處理 - 10億個數(shù)中找出最大的10000個數(shù)(top K問題)

7.音視頻開發(fā),沒做過案训,然后提到簡歷上的二維碼掃描庫 - AVFoundation买置。

影響二維碼掃描速度的難點是什么?我回答是二維碼圖像的清晰度萤衰,面試官還提到了二維碼圖像的角度堕义,該如何優(yōu)化。

對于AVFoundation來說脆栋,有兩個因素:

  1. 圖像分辨率
    AVCaptureSession 可以設(shè)置 sessionPreset 屬性,這個決定了視頻輸入每一幀圖像質(zhì)量的大小洒擦。

    • AVCaptureSessionPreset320x240
    • AVCaptureSessionPreset352x288
    • AVCaptureSessionPreset640x480
    • AVCaptureSessionPreset960x540
    • AVCaptureSessionPreset1280x720
    • AVCaptureSessionPreset1920x1080
  2. 掃描范圍
    AVCaptureMetadataOutput 的 rectOfInterest 屬性來配置解析范圍

8.離屏渲染問題的本質(zhì)是什么椿争?

首先離屏渲染指的是在GPU在當(dāng)前屏幕緩沖區(qū)以外開辟一個緩沖區(qū)進行渲染操作.

當(dāng)使用圓角,陰影熟嫩,遮罩的時候秦踪,圖層屬性的混合體被指定為在未預(yù)合成之前(下一個HSync信號開始前)不能直接在屏幕中繪制,所以就需要屏幕外渲染。

具體參考這篇文章:iOS-離屏渲染詳解

總結(jié):

本次面試問題側(cè)重于實際項目椅邓,很多東西之前有看過柠逞,但都忘了大概,用到但沒有深入研究是一大劣勢景馁。

所以說多多面試還是有幫助的??板壮!

面試必看文章:
iOS 保持界面流暢的技巧
iOS 應(yīng)用穩(wěn)定性監(jiān)測和指標(biāo)問題

iOS 性能監(jiān)控方案(上篇)
iOS 性能監(jiān)控方案(下篇)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市合住,隨后出現(xiàn)的幾起案子绰精,更是在濱河造成了極大的恐慌,老刑警劉巖透葛,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笨使,死亡現(xiàn)場離奇詭異,居然都是意外死亡僚害,警方通過查閱死者的電腦和手機硫椰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萨蚕,“玉大人最爬,你說我怎么就攤上這事∶挪恚” “怎么了爱致?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寒随。 經(jīng)常有香客問我糠悯,道長,這世上最難降的妖魔是什么妻往? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任互艾,我火速辦了婚禮,結(jié)果婚禮上讯泣,老公的妹妹穿的比我還像新娘纫普。我一直安慰自己,他們只是感情好好渠,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布昨稼。 她就那樣靜靜地躺著,像睡著了一般拳锚。 火紅的嫁衣襯著肌膚如雪假栓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天霍掺,我揣著相機與錄音匾荆,去河邊找鬼拌蜘。 笑死,一個胖子當(dāng)著我的面吹牛牙丽,可吹牛的內(nèi)容都是我干的简卧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼烤芦,長吁一口氣:“原來是場噩夢啊……” “哼举娩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拍棕,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晓铆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绰播,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骄噪,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年蠢箩,在試婚紗的時候發(fā)現(xiàn)自己被綠了链蕊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡谬泌,死狀恐怖滔韵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掌实,我是刑警寧澤陪蜻,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贱鼻,受9級特大地震影響宴卖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邻悬,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一症昏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧父丰,春花似錦肝谭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屁桑,卻和暖如春医寿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蘑斧。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竖瘾。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓沟突,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捕传。 傳聞我的和親對象是個殘疾皇子惠拭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 本文只要描述了iOS中的Core Animation(核心動畫:隱式動畫、顯示動畫)庸论、貝塞爾曲線职辅、UIVie...
    GitHubPorter閱讀 3,629評論 7 11
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件聂示、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,109評論 4 62
  • 在iOS中隨處都可以看到絢麗的動畫效果域携,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌鱼喉。在這里你可以看...
    每天刷兩次牙閱讀 8,502評論 6 30
  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,395評論 7 249
  • 有些時候,真的會很多愁善感编曼。就像雨在下的時候豆巨,會滴落不同的聲音,滴在瓦上掐场,滴在葉子上往扔,一大滴滴落在某處,時斷時續(xù)刻肄,...
    朱朱老老閱讀 153評論 0 1