iOS 面試題目

  1. 什么是arc约郁?(arc是為了解決什么問題誕生的?)
  2. 請解釋以下keywords的區(qū)別: assign vs weak, __block vs __weak
  3. __block在arc和非arc下含義一樣嗎?
  4. 使用atomic一定是線程安全的嗎?
  5. 描述一個(gè)你遇到過的retain cycle例子扫倡。(別撒謊,你肯定遇到過)
  6. +(void)load; +(void)initialize竟纳;有什么用處撵溃?
  7. 為什么其他語言里叫函數(shù)調(diào)用, objective c里則是給對象發(fā)消息(或者談下對runtime的理解)
  8. 什么是method swizzling?
  9. UIView和CALayer是啥關(guān)系锥累?
  10. 如何高性能的給UIImageView加個(gè)圓角缘挑?(不準(zhǔn)說layer.cornerRadius!)
  11. 使用drawRect有什么影響?(這個(gè)可深可淺桶略,你至少得用過语淘。。)
  12. ASIHttpRequest或者SDWebImage里面給UIImageView加載圖片的邏輯是什么樣的际歼?(把UIImageView放到UITableViewCell里面問更贊)
  13. 麻煩你設(shè)計(jì)個(gè)簡單的圖片內(nèi)存緩存器(移除策略是一定要說的)
  14. 講講你用Instrument優(yōu)化動(dòng)畫性能的經(jīng)歷吧(別問我什么是Instrument)
  15. loadView是干嘛用的惶翻?
  16. viewWillLayoutSubView你總是知道的。蹬挺。
  17. GCD里面有哪幾種Queue维贺?你自己建立過串行queue嗎?背后的線程模型是什么樣的巴帮?
  18. 用過coredata或者sqlite嗎溯泣?讀寫是分線程的嗎?遇到過死鎖沒榕茧?咋解決的垃沦?
  19. http的post和get啥區(qū)別?(區(qū)別挺多的用押,麻煩多說點(diǎn))
  20. 我知道你大學(xué)畢業(yè)過后就沒接觸過算法數(shù)據(jù)結(jié)構(gòu)了肢簿,但是請你一定告訴我什么是Binary search tree? search的時(shí)間復(fù)雜度是多少?我很想知道!

我的答案
我有過不少面試和被面試的經(jīng)歷池充,作為面試官出這份面試題從來就不是為了難倒面試者桩引,而是為了多角度全面的了解面試者從而建立信任。面試的時(shí)候最擔(dān)心的是冷場收夸,面試題只不過個(gè)引子坑匠,我心底里最希望遇到的面試者是能夠舉一反三,除了回答問題本身之外卧惜,還能自信的旁征博引厘灼,深談其背后原理或者相關(guān)的知識(shí)理論的。問題本身反而并不怎么重要咽瓷。這份清單里的問題也并不難设凹,這里我列下我的回答以及從我的角度所期望的答案。

什么是arc茅姜?(arc是為了解決什么問題誕生的闪朱?)
現(xiàn)在有不少程序員是直接從arc上手的,從沒接觸過mrc匈睁,對arc的理解僅僅停留在apple幫助管理內(nèi)存的層面监透。這個(gè)問題真正想了解的是對內(nèi)存管理的理解,retain release雖然不用寫了航唆,但arc下還是會(huì)有內(nèi)存泄漏野指針crash的bug存在胀蛮。如果能從retain count這種內(nèi)存管理策略的角度去闡述arc誕生的意義就算答對了。如果還能扯下其他類型的策略糯钙,比如java里的mark and sweep粪狼,那就加分點(diǎn)贊。

請解釋以下keywords的區(qū)別: assign vs weak, __block vs __weak
這道題屬于基礎(chǔ)語法題任岸,可以網(wǎng)上搜到答案再榄。不過真有不少同學(xué)不知道weak在對象釋放后會(huì)置為nil。__block關(guān)鍵字的理解稍微難點(diǎn)享潜,因?yàn)樵赼rc和mrc下含義(對retain count的影響)完全不同困鸥。理解了這幾個(gè)關(guān)鍵字就能應(yīng)付使用block時(shí)引入retain cycle的風(fēng)險(xiǎn)了。這題還在內(nèi)存管理的范疇之內(nèi)剑按。

使用atomic一定是線程安全的嗎疾就?
看這題的問法不用想答案肯定是NO。有些人說不出所以然艺蝴,有些人知道通過property的方式使用才能保證安全猬腰,還有人知道這個(gè)用來做多線程安全會(huì)有性能損耗,更有出色的候選人能談atomic,synchronized,NSLock,pthread mutex,OSSpinLock的差別猜敢。好奇寶寶點(diǎn)我姑荷。

描述一個(gè)你遇到過的retain cycle例子盒延。(別撒謊,你肯定遇到過)
說沒遇到過的我很難相信你有過成熟項(xiàng)目的經(jīng)歷鼠冕。這題答不出了會(huì)扣很多很多分添寺。用過block,寫過delegate的肯定都踩過坑供鸠。

+(void)load; +(void)initialize畦贸;有什么用處?
這題屬于runtime范疇楞捂,我遇到過能說出對runtime的理解卻不知道這兩個(gè)方法的候選人。所以答不出來也沒關(guān)系趋厉,這屬于細(xì)節(jié)知識(shí)點(diǎn)寨闹,是加分項(xiàng),能答出兩個(gè)message各在什么階段接收就可以了君账。

為什么其他語言里叫函數(shù)調(diào)用繁堡, objective c里則是給對象發(fā)消息(或者談下對runtime的理解)
這題考查的是objective c這門語言的dynamic特性,需要對比c++這類傳統(tǒng)靜態(tài)方法調(diào)用才能理解乡数。最好能說出一個(gè)對象收到message之后的完整的流程是如何的椭蹄。對runtime有完整理解的候選人還能說出oc的對象模型。

什么是method swizzling?
說了解runtime但沒聽過method swizzling是騙人的净赴。這題很容易搜到答案。定位一些疑難雜癥bug,hack老項(xiàng)目實(shí)現(xiàn)羊娃,閱讀第三方源碼都有機(jī)會(huì)接觸到這個(gè)概念东且。

UIView和CALayer是啥關(guān)系?
能答出UIView是CALayer的delegate就及格了,能說出UIView主要處理事件金度,CALayer負(fù)責(zé)繪制就更好应媚,再聊下二者在使用過程中對動(dòng)畫流暢性影響的注意點(diǎn)就superb。UI流暢性是個(gè)大話題猜极,推薦看下這兩篇文章中姜。中餐,西餐跟伏。

如何高性能的給UIImageView加個(gè)圓角丢胚?(不準(zhǔn)說layer.cornerRadius!)
這題討論的最多,還有說美工切圖就搞定的酬姆。答主在項(xiàng)目里做過圓角頭像的處理嗜桌,里面的坑還真不少。cornerRadius會(huì)導(dǎo)致offscreen drawing有性能問題辞色,美工切圖無法適用有背景圖的場景骨宠,即使加上shouldRasterize也有cache實(shí)效問題浮定。正確的做法是切換到工作線程利用CoreGraphic API生成一個(gè)offscreen UIImage,再切換到main thread賦值給UIImageView层亿。這里還涉及到UIImageView復(fù)用桦卒,圓角頭像cache緩存(不能每次都去繪制),新舊頭像替換等等邏輯匿又。還有其他的實(shí)現(xiàn)方式方灾,但思路離不開工作線程與主線程切換。

使用drawRect有什么影響碌更?(這個(gè)可深可淺裕偿,你至少得用過。痛单。)
不少同學(xué)都用過drawRect或者看別人用過嘿棘,但不知道這個(gè)api存在的含義。這不僅僅是另一種做UI的方式旭绒。drawRect會(huì)利用CPU生成offscreen bitmap鸟妙,從而減輕GPU的繪制壓力,用這種方式最UI可以將動(dòng)畫流暢性優(yōu)化到極致挥吵,但缺點(diǎn)是繪制api復(fù)雜重父,offscreen cache增加內(nèi)存開銷。UI動(dòng)畫流暢性的優(yōu)化主要平衡CPU和GPU的工作壓力忽匈。推薦一篇文章:西餐

ASIHttpRequest或者SDWebImage里面給UIImageView加載圖片的邏輯是什么樣的房午?(把UIImageView放到UITableViewCell里面問更贊)
很多同學(xué)沒有讀源碼的習(xí)慣,別人的輪子拿來只是用用卻不知道真正的營養(yǎng)都在源代碼里面脉幢。這兩個(gè)經(jīng)典的framework代碼并不復(fù)雜歪沃,很值得一讀。能對一個(gè)UIImageView怎么通過url展示一張圖片有完整的理解嫌松。涉及到的知識(shí)點(diǎn)也非常多沪曙,UITableViewCell的復(fù)用,memory cache, disk cache, 多線程切換萎羔,甚至http協(xié)議本身都需要有一定的涉及液走。

麻煩你設(shè)計(jì)個(gè)簡單的圖片內(nèi)存緩存器(移除策略是一定要說的)
內(nèi)存緩存是個(gè)通用話題,每個(gè)平臺(tái)都會(huì)涉及到贾陷。cache算法會(huì)影響到整個(gè)app的表現(xiàn)缘眶。候選人最好能談下自己都了解哪些cache策略及各自的特點(diǎn)。常見的有FIFO,LRU,LRU-2,2Q等等髓废。由于NSCache的緩存策略不透明巷懈,一些app開發(fā)者會(huì)選擇自己做一套cache機(jī)制,其實(shí)并不難慌洪。

講講你用Instrument優(yōu)化動(dòng)畫性能的經(jīng)歷吧(別問我什么是Instrument)
Apple的instrument為開發(fā)者提供了各種template去優(yōu)化app性能和定位問題顶燕。很多公司都在趕feature凑保,并沒有充足的時(shí)間來做優(yōu)化,導(dǎo)致不少開發(fā)者對instrument不怎么熟悉涌攻。但這里面其實(shí)涵蓋了非常完整的計(jì)算機(jī)基礎(chǔ)理論知識(shí)體系欧引,memory,disk恳谎,network芝此,thread,cpu因痛,gpu等等婚苹,順藤摸瓜去學(xué)習(xí),是一筆巨大的知識(shí)財(cái)富鸵膏。動(dòng)畫性能只是其中一個(gè)template租副,重點(diǎn)還是理解上面問題當(dāng)中CPU GPU如何配合工作的知識(shí)。

loadView是干嘛用的较性?
不要就簡單的告訴我沒用過,至少問下我有什么用结胀。赞咙。這里是apple給開發(fā)者自己設(shè)置custom view的位置。說UI熟悉的一定要知道糟港。

viewWillLayoutSubView你總是知道的攀操。。
controller layout觸發(fā)的時(shí)候秸抚,開發(fā)者有機(jī)會(huì)去重新layout自己的各個(gè)subview速和。說UI熟悉的一定要知道。

GCD里面有哪幾種Queue剥汤?你自己建立過串行queue嗎颠放?背后的線程模型是什么樣的?
兩種queue吭敢,串行和并行碰凶。main queue是串行,global queue是并行鹿驼。有些開發(fā)者為了在工作線程串行的處理任務(wù)會(huì)自己建立一個(gè)serial queue欲低。背后是蘋果維護(hù)的線程池,各種queue要用線程都是這個(gè)池子里取的畜晰。GCD大家都用過砾莱,但很多關(guān)鍵的概念不少人都理解的模凌兩可。串行凄鼻,并行腊瑟,同步聚假,異步是GCD的核心概念。

用過coredata或者sqlite嗎扫步?讀寫是分線程的嗎魔策?遇到過死鎖沒?咋解決的河胎?
沒用過sqlite是說不過去的闯袒。用過CoreData的肯定有很多血淚史要說。多謝線程模型你肯定做過比較選擇游岳。死鎖是啥肯定也是要知道的政敢,沒遇到過至少能舉個(gè)簡單的例子來說明。單個(gè)線程可以死鎖(main thread里dispatch_sync到main queue)胚迫,多個(gè)線程直接也可以死鎖(A喷户,B線程互相持有對方需要的資源且互相等待)。

http的post和get啥區(qū)別访锻?(區(qū)別挺多的褪尝,麻煩多說點(diǎn))
這個(gè)可以說很多。不希望聽到的答案有

兩個(gè)差不多期犬,隨便用一個(gè)河哑。
post比get安全(其實(shí)兩個(gè)都不安全)
能說下兩個(gè)http格式有什么不同,各自應(yīng)用的場景就合格了龟虎。更多可以閱讀下這個(gè)答案璃谨。

我知道你大學(xué)畢業(yè)過后就沒接觸過算法數(shù)據(jù)結(jié)構(gòu)了,但是請你一定告訴我什么是Binary search tree? search的時(shí)間復(fù)雜度是多少鲤妥?我很想知道佳吞!
很多人都很排斥數(shù)據(jù)結(jié)構(gòu)和算法題,我個(gè)人意見是復(fù)雜的可以不知道棉安,基礎(chǔ)的一定要了解底扳。時(shí)間復(fù)雜度是什么得知道,list垂券,queue花盐,stack,table菇爪,tree這些都要明白是啥算芯。連hash表的概念都不知道怎么能保證在寫代碼的時(shí)候注意性能呢。

https://www.zhihu.com/question/19604641

http://blog.csdn.net/hanangellove/article/details/45033453 (參考答案)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凳宙,一起剝皮案震驚了整個(gè)濱河市熙揍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氏涩,老刑警劉巖届囚,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件有梆,死亡現(xiàn)場離奇詭異,居然都是意外死亡意系,警方通過查閱死者的電腦和手機(jī)泥耀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛔添,“玉大人痰催,你說我怎么就攤上這事∮疲” “怎么了夸溶?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凶硅。 經(jīng)常有香客問我缝裁,道長,這世上最難降的妖魔是什么足绅? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任捷绑,我火速辦了婚禮,結(jié)果婚禮上氢妈,老公的妹妹穿的比我還像新娘胎食。我一直安慰自己,他們只是感情好允懂,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衩匣,像睡著了一般蕾总。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琅捏,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天生百,我揣著相機(jī)與錄音,去河邊找鬼柄延。 笑死蚀浆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搜吧。 我是一名探鬼主播市俊,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滤奈!你這毒婦竟也來了摆昧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤蜒程,失蹤者是張志新(化名)和其女友劉穎绅你,沒想到半個(gè)月后伺帘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忌锯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年伪嫁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偶垮。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡张咳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出针史,到底是詐尸還是另有隱情晶伦,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布啄枕,位于F島的核電站婚陪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏频祝。R本人自食惡果不足惜泌参,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望常空。 院中可真熱鬧沽一,春花似錦、人聲如沸漓糙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昆禽。三九已至蝗蛙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間醉鳖,已是汗流浹背捡硅。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盗棵,地道東北人壮韭。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像纹因,于是被迫代替她去往敵國和親喷屋。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • 1.什么是arc瞭恰?(arc是為了解決什么問題誕生的逼蒙?) 首先解釋ARC: automatic reference ...
    LuckTime閱讀 407評(píng)論 0 0
  • Objective-C是一門動(dòng)態(tài)的語言 ① 什么是動(dòng)態(tài)語言? 動(dòng)態(tài)語言,是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)可...
    小李龍彪閱讀 370評(píng)論 0 0
  • 一是牢、筆試常用基礎(chǔ)問題 1.#import 和 #include 的區(qū)別 @class僵井? @class一般用于頭文件...
    鄭莫軒閱讀 1,344評(píng)論 0 11
  • 我的答案 我有過不少面試和被面試的經(jīng)歷,作為面試官出這份面試題從來就不是為了難倒面試者驳棱,而是為了多角度全面的了解面...
    北辰青閱讀 6,021評(píng)論 5 59
  • 我有過不少面試和被面試的經(jīng)歷批什,作為面試官出這份面試題從來就不是為了難倒面試者,而是為了多角度全面的了解面試者從而建...
    貝勒老爺閱讀 1,855評(píng)論 1 18