真實(shí)面試題總結(jié)-某金融公司

1邦投、Notifiaction響應(yīng)順序厅篓?擴(kuò)展問(wèn)題:如何讓NSNotifiication的post處和observer處異步執(zhí)行一姿?

對(duì)于同一個(gè)通知,如果注冊(cè)了多個(gè)觀察者摘仅,則多個(gè)觀察者的執(zhí)行順序和他們注冊(cè)的順序保持一致靶庙,同步執(zhí)行只有接受者執(zhí)行完畢返回后,才會(huì)通知下一個(gè)觀察者娃属。

通過(guò)NSNotificationQueue實(shí)現(xiàn)
NSNotificationQueue:通知隊(duì)列六荒,用來(lái)管理多個(gè)通知的調(diào)用。通知隊(duì)列通常以先進(jìn)先出(FIFO)順序維護(hù)矾端。NSNotificationQueue就像一個(gè)緩沖池把一個(gè)個(gè)通知放進(jìn)池子中掏击,使用特定方式通過(guò)NSNotificationCenter發(fā)送到相應(yīng)的觀察者。

  • NSPostWhenIdle:空閑發(fā)送通知秩铆,當(dāng)RunLoop處于等待或空閑狀態(tài)時(shí)砚亭,發(fā)送通知,對(duì)于不重要的通知可以使用殴玛。
  • NSPostASAP:盡快發(fā)送通知捅膘,當(dāng)前RunLoop迭代完成時(shí),通知將會(huì)被發(fā)送滚粟,有點(diǎn)類似沒(méi)有延遲的定時(shí)器寻仗。
  • NSPostNow :同步發(fā)送通知,如果不使用合并通知和postNotification:一樣是同步通知凡壤。

2署尤、串行隊(duì)列,執(zhí)行同步任務(wù)是否開(kāi)啟子線程亚侠?擴(kuò)展問(wèn)題:并發(fā)隊(duì)列曹体,同步任務(wù)是否開(kāi)啟子線程?主隊(duì)列加入同步任務(wù)會(huì)硝烂?

(1)串行隊(duì)列同步任務(wù)箕别,不開(kāi)啟子線程
(2)并發(fā)隊(duì)列同步任務(wù),不開(kāi)啟子線程
(3)造成死鎖

3钢坦、GCD 控制線程數(shù)量

GCD通過(guò)信號(hào)量可以達(dá)到控制線程數(shù)量的效果究孕。

- (void)gcd_max_queue
{
    dispatch_queue_t taskConcurrentQueue = dispatch_queue_create("com.task", DISPATCH_QUEUE_CONCURRENT);
    dispatch_queue_t serialQueue = dispatch_queue_create("com.serial", DISPATCH_QUEUE_SERIAL);
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(4);
    for(NSIntegeri =0; i <10; i++) {
        dispatch_async(serialQueue, ^{        dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);
            dispatch_async(taskConcurrentQueue, ^{
                NSLog(@"開(kāi)始執(zhí)行任務(wù) %@", [NSThreadcurrentThread]);
                sleep(i%4);
                NSLog(@"執(zhí)行任務(wù)結(jié)束 %@", [NSThreadcurrentThread]);
                dispatch_semaphore_signal(semaphore);
            });
        });
    }
}

4、OC如何實(shí)現(xiàn)多繼承爹凹?

OC中沒(méi)有多繼承厨诸,可以通過(guò)類的組合,協(xié)議禾酱,擴(kuò)展實(shí)現(xiàn)類似多繼承的效果微酬,也可以使用runtime绘趋。

5、Nsstring *a = [Nsdate alloc] init];在編譯時(shí)和運(yùn)行時(shí)分別是什么類型颗管?

編譯時(shí)a為NSString類型陷遮,運(yùn)行時(shí)為NSDate類型,如果運(yùn)行時(shí)調(diào)用String相關(guān)方法會(huì)引起崩潰垦江。

6帽馋、有哪些情況引起bad_access崩潰?擴(kuò)展:如何調(diào)試比吭?

(1)野指針
(2)空指針異常
(3)死循環(huán)
(4)死遞歸

開(kāi)啟全局?jǐn)帱c(diǎn)绽族,開(kāi)啟僵尸對(duì)象,開(kāi)啟AddressSentlize

7衩藤、分類如何添加屬性吧慢?

正常情況下,分類是不可以添加屬性的赏表,因?yàn)閞untime中對(duì)于Category的定義中检诗,沒(méi)有存放屬性的指針,所以分類可以增加實(shí)力方法瓢剿,類方法逢慌,協(xié)議等。但是可以通過(guò)runtime的動(dòng)態(tài)綁定來(lái)實(shí)現(xiàn):
objc_setAssociatedObject()
objc_getAssociatedObject()间狂;

8涕癣、Hook?如何實(shí)現(xiàn)前标?

使用runtime 動(dòng)態(tài)交換方法,在+(load)中距潘,注意循環(huán)調(diào)用

9炼列、MD5,散列碰撞音比,出現(xiàn)碰撞如何規(guī)避俭尖,如何降低概率?

使用base64和md5算法聯(lián)合使用洞翩,可以降低一些稽犁,并在md5之后,base64 decode 校驗(yàn)
使用md5和sha1骚亿,將md5和sha1相加已亥,再md5

10、framework来屠,動(dòng)態(tài)虑椎,靜態(tài)震鹉,library?

靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別
首先來(lái)看什么是庫(kù)捆姜,庫(kù)(Library)說(shuō)白了就是一段編譯好的二進(jìn)制代碼传趾,加上頭文件就可以供別人使用。
什么時(shí)候我們會(huì)用到庫(kù)呢泥技?一種情況是某些代碼需要給別人使用浆兰,但是我們不希望別人看到源碼,就需要以庫(kù)的形式進(jìn)行封裝珊豹,只暴露出頭文件簸呈。另外一種情況是,對(duì)于某些不會(huì)進(jìn)行大的改動(dòng)的代碼平夜,我們想減少編譯的時(shí)間蝶棋,就可以把它打包成庫(kù),因?yàn)閹?kù)是已經(jīng)編譯好的二進(jìn)制了忽妒,編譯的時(shí)候只需要 Link 一下玩裙,不會(huì)浪費(fèi)編譯時(shí)間。
上面提到庫(kù)在使用的時(shí)候需要 Link段直,Link 的方式有兩種吃溅,靜態(tài)和動(dòng)態(tài),于是便產(chǎn)生了靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)鸯檬。
靜態(tài)庫(kù)
靜態(tài)庫(kù)即靜態(tài)鏈接庫(kù)(Windows 下的 .lib决侈,linux 和 Mac 下的 .a)。之所以叫做靜態(tài)喧务,是因?yàn)殪o態(tài)庫(kù)在編譯的時(shí)候會(huì)被直接拷貝一份赖歌,復(fù)制到目標(biāo)程序里,這段代碼在目標(biāo)程序里就不會(huì)再改變了功茴。
靜態(tài)庫(kù)的好處很明顯庐冯,編譯完成之后,庫(kù)文件實(shí)際上就沒(méi)有作用了坎穿。目標(biāo)程序沒(méi)有外部依賴展父,直接就可以運(yùn)行。當(dāng)然其缺點(diǎn)也很明顯玲昧,就是會(huì)使用目標(biāo)程序的體積增大栖茉。
動(dòng)態(tài)庫(kù)
動(dòng)態(tài)庫(kù)即動(dòng)態(tài)鏈接庫(kù)(Windows 下的 .dll,Linux 下的 .so孵延,Mac 下的 .dylib)吕漂。與靜態(tài)庫(kù)相反,動(dòng)態(tài)庫(kù)在編譯時(shí)并不會(huì)被拷貝到目標(biāo)程序中隙袁,目標(biāo)程序中只會(huì)存儲(chǔ)指向動(dòng)態(tài)庫(kù)的引用痰娱。等到程序運(yùn)行時(shí)弃榨,動(dòng)態(tài)庫(kù)才會(huì)被真正加載進(jìn)來(lái)。
動(dòng)態(tài)庫(kù)的優(yōu)點(diǎn)是梨睁,不需要拷貝到目標(biāo)程序中鲸睛,不會(huì)影響目標(biāo)程序的體積,而且同一份庫(kù)可以被多個(gè)程序使用(因?yàn)檫@個(gè)原因坡贺,動(dòng)態(tài)庫(kù)也被稱作共享庫(kù))官辈。同時(shí),編譯時(shí)才載入的特性遍坟,也可以讓我們隨時(shí)對(duì)庫(kù)進(jìn)行替換拳亿,而不需要重新編譯代碼。動(dòng)態(tài)庫(kù)帶來(lái)的問(wèn)題主要是愿伴,動(dòng)態(tài)載入會(huì)帶來(lái)一部分性能損失肺魁,使用動(dòng)態(tài)庫(kù)也會(huì)使得程序依賴于外部環(huán)境。如果環(huán)境缺少動(dòng)態(tài)庫(kù)或者庫(kù)的版本不正確隔节,就會(huì)導(dǎo)致程序無(wú)法運(yùn)行(Linux 下喜聞樂(lè)見(jiàn)的 lib not found 錯(cuò)誤)鹅经。
iOS Framework
除了上面提到的 .a 和 .dylib 之外,Mac OS/iOS 平臺(tái)還可以使用 Framework怎诫。Framework 實(shí)際上是一種打包方式瘾晃,將庫(kù)的二進(jìn)制文件,頭文件和有關(guān)的資源文件打包到一起幻妓,方便管理和分發(fā)蹦误。
在 iOS 8 之前,iOS 平臺(tái)不支持使用動(dòng)態(tài) Framework肉津,開(kāi)發(fā)者可以使用的 Framework 只有蘋(píng)果自家的 UIKit.Framework强胰,F(xiàn)oundation.Framework 等。這種限制可能是出于安全的考慮(見(jiàn)這里的討論)妹沙。換一個(gè)角度講哪廓,因?yàn)?iOS 應(yīng)用都是運(yùn)行在沙盒當(dāng)中,不同的程序之間不能共享代碼初烘,同時(shí)動(dòng)態(tài)下載代碼又是被蘋(píng)果明令禁止的,沒(méi)辦法發(fā)揮出動(dòng)態(tài)庫(kù)的優(yōu)勢(shì)分俯,實(shí)際上動(dòng)態(tài)庫(kù)也就沒(méi)有存在的必要了肾筐。
由于上面提到的限制,開(kāi)發(fā)者想要在 iOS 平臺(tái)共享代碼缸剪,唯一的選擇就是打包成靜態(tài)庫(kù) .a 文件吗铐,同時(shí)附上頭文件(例如微信的SDK)。但是這樣的打包方式不夠方便杏节,使用時(shí)也比較麻煩唬渗,大家還是希望共享代碼都能能像 Framework 一樣典阵,直接扔到工程里就可以用。于是人們想出了各種奇技淫巧去讓 Xcode Build 出 iOS 可以使用的 Framework镊逝,具體做法參考這里和這里壮啊,這種方法產(chǎn)生的 Framework 還有 “偽”(Fake) Framework 和 “真“(Real) Framework 的區(qū)別。
iOS 8/Xcode 6 推出之后撑蒜,iOS 平臺(tái)添加了動(dòng)態(tài)庫(kù)的支持歹啼,同時(shí) Xcode 6 也原生自帶了 Framework 支持(動(dòng)態(tài)和靜態(tài)都可以),上面提到的的奇技淫巧也就沒(méi)有必要了(新的做法參考這里)座菠。為什么 iOS 8 要添加動(dòng)態(tài)庫(kù)的支持狸眼?唯一的理由大概就是 Extension 的出現(xiàn)。Extension 和 App 是兩個(gè)分開(kāi)的可執(zhí)行文件浴滴,同時(shí)需要共享代碼拓萌,這種情況下動(dòng)態(tài)庫(kù)的支持就是必不可少的了。但是這種動(dòng)態(tài) Framework 和系統(tǒng)的 UIKit.Framework 還是有很大區(qū)別升略。系統(tǒng)的 Framework 不需要拷貝到目標(biāo)程序中微王,我們自己做出來(lái)的 Framework 哪怕是動(dòng)態(tài)的,最后也還是要拷貝到 App 中(App 和 Extension 的 Bundle 是共享的)降宅,因此蘋(píng)果又把這種 Framework 稱為 Embedded Framework骂远。

11、數(shù)組去重腰根,查找重復(fù)數(shù)據(jù)激才,如果用for寫(xiě)的算法的時(shí)間復(fù)雜度?

結(jié)合set去重额嘿,使用for嵌套寫(xiě)的算法瘸恼,時(shí)間復(fù)雜度n^2
(1)、無(wú)序去重
set册养,dic
( 2)东帅、有序去重
開(kāi)品新的數(shù)組,for循環(huán) containsobject

12球拦、雙向冒泡法靠闭?最理想的情況的時(shí)間復(fù)雜度與最不理想的情況的時(shí)間復(fù)雜度?

13坎炼、Masonry的設(shè)計(jì)思想愧膀?

簡(jiǎn)化的設(shè)計(jì)模式:工廠類&工廠方法
MASConstraintMaker類就是一個(gè)工廠類,負(fù)責(zé)創(chuàng)建MASConstraint類型的對(duì)象(依賴于MASConstraint接口谣光,而不依賴于具體實(shí)現(xiàn))檩淋。在UIView的View+MASAdditions分類中就是調(diào)用的MASConstraintMaker類中的一些方法。上述我們?cè)谑褂肕asonry給subView添加約束時(shí)萄金,mas_makeConstraints方法中的Block的參數(shù)就是MASConstraintMaker的對(duì)象蟀悦。用戶可以通過(guò)該Block回調(diào)過(guò)來(lái)的MASConstraintMaker對(duì)象給View指定要添加的約束以及該約束的值媚朦。該工廠中的constraints屬性數(shù)組就記錄了該工廠創(chuàng)建的所有MASConstraint對(duì)象。

組合模式
鏈?zhǔn)骄幊?/p>

14日戈、app里有多個(gè)音頻sdk交叉使用询张,其中某一個(gè)突然無(wú)法播放聲音,但獨(dú)立使用時(shí)沒(méi)有問(wèn)題的,如何定位?

avaudioseesion鞋既,搶占主聲道資源,

15半火、多個(gè)sdk如何根據(jù)直播間動(dòng)態(tài)調(diào)配sdk?

使用工廠管理實(shí)例應(yīng)該可以做到

16季俩、二叉樹(shù)是什么钮糖?什么情況下使用?如何做平衡酌住?

二叉樹(shù)是每個(gè)節(jié)點(diǎn)最多有兩個(gè)子樹(shù)的樹(shù)結(jié)構(gòu)店归。通常子樹(shù)被稱作“左子樹(shù)”和“右子樹(shù)”,左子樹(shù)和右子樹(shù)同時(shí)也是二叉樹(shù)酪我。二叉樹(shù)的子樹(shù)有左右之分消痛,并且次序不能任意顛倒。二叉樹(shù)是遞歸定義的都哭,所以一般二叉樹(shù)的相關(guān)題目也都可以使用遞歸的思想來(lái)解決秩伞,當(dāng)然也有一些可以使用非遞歸的思想解決,我下面列出的一些算法有些采用了遞歸欺矫,有些是非遞歸的纱新。
快速搜索,大數(shù)據(jù)插入穆趴,刪除脸爱,

17、封裝sdk要注意哪些事項(xiàng)未妹?

? 確保外部調(diào)用簡(jiǎn)單簿废,且保證有詳細(xì)的頭文件注釋說(shuō)明。
? 確保API編碼規(guī)范络它,保證風(fēng)格統(tǒng)一捏鱼。
? 確保API易擴(kuò)展,可以考慮預(yù)留參數(shù)
? 確保沒(méi)有外部依賴或者依賴要盡可能的少酪耕,以保證公共庫(kù)的純潔(原則上不能有外部依賴)
? 確保易維護(hù),不存在冗余API

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轨淌,一起剝皮案震驚了整個(gè)濱河市迂烁,隨后出現(xiàn)的幾起案子看尼,更是在濱河造成了極大的恐慌,老刑警劉巖盟步,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藏斩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡却盘,警方通過(guò)查閱死者的電腦和手機(jī)狰域,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黄橘,“玉大人兆览,你說(shuō)我怎么就攤上這事∪兀” “怎么了抬探?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)帆赢。 經(jīng)常有香客問(wèn)我小压,道長(zhǎng),這世上最難降的妖魔是什么椰于? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任怠益,我火速辦了婚禮,結(jié)果婚禮上瘾婿,老公的妹妹穿的比我還像新娘蜻牢。我一直安慰自己,他們只是感情好憋他,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布孩饼。 她就那樣靜靜地躺著,像睡著了一般竹挡。 火紅的嫁衣襯著肌膚如雪镀娶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天揪罕,我揣著相機(jī)與錄音梯码,去河邊找鬼。 笑死好啰,一個(gè)胖子當(dāng)著我的面吹牛轩娶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播框往,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鳄抒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起许溅,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓤鼻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贤重,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茬祷,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年并蝗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祭犯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滚停,死狀恐怖沃粗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铐刘,我是刑警寧澤陪每,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站镰吵,受9級(jí)特大地震影響檩禾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疤祭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一盼产、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勺馆,春花似錦戏售、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至悲柱,卻和暖如春锋喜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豌鸡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工嘿般, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涯冠。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓炉奴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蛇更。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瞻赶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • 每到初夏赛糟,最開(kāi)心的事莫過(guò)于半夜在陽(yáng)臺(tái)光著膀子吹風(fēng),風(fēng)一陣一陣的吹來(lái)砸逊,一旁樹(shù)葉吹的沙沙作響虑灰,仿佛有了面朝大海的感覺(jué),...
    AurevoirCo閱讀 164評(píng)論 0 0
  • 今天痹兜,脈脈老師告訴我:我們都是凡人,是數(shù)億計(jì)中的一份子颤诀,但我們每一個(gè)人又是獨(dú)一無(wú)二的字旭,是特殊的。我想:我終...
    北座城市閱讀 118評(píng)論 0 1
  • 這兩天你在背英語(yǔ)單詞方面有很大的長(zhǎng)勁,這要感謝同行的人心傀。 難怪古人說(shuō):“三人行必有我?guī)熐担 庇泻糜讶缬泻绵彛缌?..
    走過(guò)路過(guò)就好閱讀 195評(píng)論 0 1
  • 十六章 赤壁賦 讓我感觸最深的一次是聽(tīng)經(jīng)典朗誦脂男,氣勢(shì)磅礴养叛,身臨其境,融入其中宰翅。在黃州弃甥,蘇東坡過(guò)的就是神仙...
    冰清_e7cc閱讀 283評(píng)論 0 0