D

你實(shí)現(xiàn)過一個(gè)框架或者庫以供別人使用么?如果有,請(qǐng)談一談構(gòu)建框架或者庫時(shí)候的經(jīng)驗(yàn);如果沒有,請(qǐng)?jiān)O(shè)想和設(shè)計(jì)框架的public的API,并指出大概需要如何做、需要注意一些什么方面,來使別人容易地使用你的框架。

抽象和封裝,方便使用。首先是對(duì)問題有充分的了解,比如構(gòu)建一個(gè)文件解壓壓縮框架,從使用者的角度出發(fā),只需關(guān)注發(fā)送給框架一個(gè)解壓請(qǐng)求,框架完成復(fù)雜文件的解壓操作,并且在適當(dāng)?shù)臅r(shí)候通知給是哦難過者,如解壓完成、解壓出錯(cuò)等。在框架內(nèi)部去構(gòu)建對(duì)象的關(guān)系,通過抽象讓其更為健壯、便于更改。其次是API的說明文檔。


您是否做過異步的網(wǎng)絡(luò)處理和通訊方面的工作?如果有,能具體介紹一些實(shí)現(xiàn)策略么?

使用NSOperation發(fā)送異步網(wǎng)絡(luò)請(qǐng)求,使用NSOperationQueue管理線程數(shù)目及優(yōu)先級(jí),底層是用NSURLConnetion,詳細(xì)可見開源框架[LWConnetion](https://github.com/xunyn/LWConnetionDemo)。


.既然提到GCD,那么問一下在使用GCD以及block時(shí)要注意些什么?它們兩是一回事兒么?block在ARC中和傳統(tǒng)的MRC中的行為和用法有沒有什么區(qū)別,需要注意些什么?

答:1、block 在實(shí)現(xiàn)時(shí)就會(huì)對(duì)它引用到的它所在方法中定義的棧變量進(jìn)行一次只讀拷貝,然后在 block 塊內(nèi)使用該只讀拷貝;

2、非內(nèi)聯(lián)(inline) block 不能直接訪問 self,只能通過將 self 當(dāng)作參數(shù)傳遞到 block 中才能使用,并且此時(shí)的 self 只能通過 setter 或 getter 方法訪問其屬性,不能使用句點(diǎn)式方法。但內(nèi)聯(lián) block 不受此限制;

3、使用 weak–strong dance 技術(shù)來避免循環(huán)引用;

4、block 內(nèi)存管理分析:

block 其實(shí)也是一個(gè) NSObject 對(duì)象,并且在大多數(shù)情況下,block 是分配在棧上面的,只有當(dāng) block 被定義為全局變量或 block 塊中沒有引用任何 automatic 變量時(shí),block 才分配在全局?jǐn)?shù)據(jù)段上。 __block 變量也是分配在棧上面的。


發(fā)送10個(gè)網(wǎng)絡(luò)請(qǐng)求,然后再接收到所有回應(yīng)之后執(zhí)行后續(xù)操作,如何實(shí)現(xiàn)?

實(shí)現(xiàn)一個(gè)第三方控件,可以在任何時(shí)候出現(xiàn)在APP界面最上層

實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的點(diǎn)擊拖拽功能。

上面那個(gè)拖拽之外,如果在手放開時(shí),需要根據(jù)速度往前滑動(dòng)呢?

如何減小一個(gè)應(yīng)用程序的尺寸?

如何提高一個(gè)性用程序的性能?

不同版本的APP,數(shù)據(jù)庫結(jié)構(gòu)變化了,如何處理?



設(shè)計(jì)一個(gè)progress bar解決方案,追問到 Core Graphic、CGPath、maskLayer。

設(shè)計(jì)一個(gè)popup view被追問到 keyWindow、UIWindow的layer、UIView hierarchy。

從設(shè)計(jì)模式的角度分析Delegate、Notification、KVO的區(qū)別。被追問到自己寫的library和開源的項(xiàng)目中用到哪些設(shè)計(jì)模式,為什么使用,有哪些好處和壞處,現(xiàn)在能否改進(jìn)。

算是問題3的追問,設(shè)計(jì)一個(gè)方案來檢測(cè)KVO的同步異步問題。willChange和 didChange的不同點(diǎn),然后被追問到有沒有其他地方也有類似情況,被追問到Core Data 中falut object。

這個(gè)是問題4的追問,設(shè)計(jì)一個(gè)KVO系統(tǒng)。

Multithreading,什么時(shí)候采用Multithreading方案,以及理由。追問到系統(tǒng)還有哪些在后臺(tái)運(yùn)行的thread,被追問到view life cycle、iOS6之后的不同以及內(nèi)存管理。

Multithreading中常常遇到的問題,追問到死鎖,優(yōu)先級(jí)翻轉(zhuǎn),線程池等。

百度有一個(gè)億級(jí)別的APP需要統(tǒng)計(jì)用戶行為的日志系統(tǒng)。不使用數(shù)據(jù)庫,只是使用普通文件,設(shè)計(jì)一個(gè)系統(tǒng)。被追問到內(nèi)存映射文件。這個(gè)問題本來是服務(wù)器的問題,我表示從來沒做過,回答很瞎。



如何設(shè)計(jì)圖片緩存?

有沒有自己設(shè)計(jì)過網(wǎng)絡(luò)控件?

AFNetworking的內(nèi)部實(shí)現(xiàn)原理?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容