我把收到的私信和一百多條評論都仔細讀了遍,發現你們之因此會關注大體出於如下幾個緣由: java
剛畢業的同窗最近在找工做面試,想刷題增長面試經過率。 有必定的工做經歷的同窗,想測試下本身的iOS水平,看本身能賣多少錢。 自己iOS基礎不錯,抱着技多不壓身心態補充知識的。 土豪老闆就差一個程序員了,想找份帶標準答案的面試題找真愛。 除了第三類同窗心態正確外,其餘的都高估面試題的做用了。面試題只是武功招式,知識體系纔是內功心法。剛入門記住的都是招式,但招式何其多,面試的時候總會有遺漏和盲區,內功心法纔是一通萬通,能以不變應萬變。這份面試題你答不全不能說明你iOS不及格,你全答對了你也不能上天。真正應該關注的是這份題背後所包含的理論知識體系。帖子裏還有其餘很多優質回答,涵蓋候選人心態,習慣,基礎知識,產品理解等各個方面,都值得一讀。固然啦,既然出了題,就得有答案,就有它的目標羣體。主要考察對象是從事iOS開發 1~3年的同窗。不須要所有答對,能對一半以上問題侃侃而談就不錯了。 c++
評論區有各路神仙吐槽,有的說難,有的說太容易,還有美工和安卓黨出現。你們七嘴八舌的討論意見很雜,但從中能夠看出很多同窗心態都不正確。技術這條路無窮無盡,廣度和深度的拓展都須要終年累月的積累,不存在什麼夠用就行了,用的時候再查下,不必瞭解這麼深。技術人員的視野和耐力決定在這條路上你可以走多遠。下面幾類同窗點名批評: 程序員
出乎我意料以外的是有好幾位同窗都正二八經的答了題,還把答案私信了我。這裏貼出其中一份答得還不錯的,再後面是答主本身的答案。 過關回答 面試
我有過很多面試和被面試的經歷,做爲面試官出這份面試題歷來就不是爲了難倒面試者,而是爲了多角度全面的瞭解面試者從而創建信任。面試的時候最擔憂的是冷場,面試題只不過個引子,我心底裏最但願遇到的面試者是可以觸類旁通,除了回答問題自己以外,還能自信的旁徵博引,深談其背後原理或者相關的知識理論的。問題自己反而並不怎麼重要。這份清單裏的問題也並不難,這裏我列下個人回答以及從個人角度所指望的答案。 算法
如今有很多程序員是直接從arc上手的,從沒接觸過mrc,對arc的理解僅僅停留在apple幫助管理內存的層面。這個問題真正想了解的是對內存管理的理解,retain release雖然不用寫了,但arc下仍是會有內存泄漏野指針crash的bug存在。若是能從retain count這種內存管理策略的角度去闡述arc誕生的意義就算答對了。若是還能扯下其餘類型的策略,好比java裏的mark and sweep,那就加分點贊。 sql
這道題屬於基礎語法題,能夠網上搜到答案。不過真有很多同窗不知道weak在對象釋放後會置爲nil。__block關鍵字的理解稍微難點,由於在arc和mrc下含義(對retain count的影響)徹底不一樣。理解了這幾個關鍵字就能應付使用block時引入retain cycle的風險了。這題還在內存管理的範疇以內。 api
看這題的問法不用想答案確定是NO。有些人說不出因此然,有些人知道經過property的方式使用才能保證安全,還有人知道這個用來作多線程安全會有性能損耗,更有出色的候選人能談atomic,synchronized,NSLock,pthread mutex,OSSpinLock的差異。好奇寶寶點我 緩存
說沒遇到過的我很難相信你有過成熟項目的經歷。這題答不出了會扣不少不少分。用過block,寫過delegate的確定都踩過坑。 安全
這題屬於runtime範疇,我遇到過能說出對runtime的理解殊不知道這兩個方法的候選人。因此答不出來也不要緊,這屬於細節知識點,是加分項,能答出兩個message各在什麼階段接收就能夠了。 數據結構
這題考查的是objective c這門語言的dynamic特性,須要對比c++這類傳統靜態方法調用才能理解。最好能說出一個對象收到message以後的完整的流程是如何的。對runtime有完整理解的候選人還能說出oc的對象模型。
說了解runtime但沒聽過method swizzling是騙人的。這題很容易搜到答案。定位一些疑難雜症bug,hack老項目實現,閱讀第三方源碼都有機會接觸到這個概念。
能答出UIView是CALayer的delegate就及格了,能說出UIView主要處理事件,CALayer負責繪製就更好,再聊下兩者在使用過程當中對動畫流暢性影響的注意點就superb。UI流暢性是個大話題,推薦看下這兩篇文章。中餐,西餐。
這題討論的最多,還有說美工切圖就搞定的。答主在項目裏作過圓角頭像的處理,裏面的坑還真很多。cornerRadius會致使offscreen drawing有性能問題,美工切圖沒法適用有背景圖的場景,即便加上shouldRasterize也有cache實效問題。正確的作法是切換到工做線程利用CoreGraphic API生成一個offscreen UIImage,再切換到main thread賦值給UIImageView。這裏還涉及到UIImageView複用,圓角頭像cache緩存(不能每次都去繪製),新舊頭像替換等等邏輯。還有其餘的實現方式,但思路離不開工做線程與主線程切換。
很多同窗都用過drawRect或者看別人用過,但不知道這個api存在的含義。這不只僅是另外一種作UI的方式。drawRect會利用CPU生成offscreen bitmap,從而減輕GPU的繪製壓力,用這種方式最UI能夠將動畫流暢性優化到極致,但缺點是繪製api複雜,offscreen cache增長內存開銷。UI動畫流暢性的優化主要平衡CPU和GPU的工做壓力。推薦一篇文章:西餐
ASIHttpRequest或者SDWebImage裏面給UIImageView加載圖片的邏輯是什麼樣的?(把UIImageView放到UITableViewCell裏面問更贊) 不少同窗沒有讀源碼的習慣,別人的輪子拿來只是用用殊不知道真正的養分都在源代碼裏面。這兩個經典的framework代碼並不複雜,很值得一讀。能對一個UIImageView怎麼經過url展現一張圖片有完整的理解。涉及到的知識點也很是多,UITableViewCell的複用,memory cache, disk cache, 多線程切換,甚至http協議自己都須要有必定的涉及。
內存緩存是個通用話題,每一個平臺都會涉及到。cache算法會影響到整個app的表現。候選人最好能談下本身都瞭解哪些cache策略及各自的特色。常見的有FIFO,LRU,LRU-2,2Q等等。因爲NSCache的緩存策略不透明,一些app開發者會選擇本身作一套cache機制,其實並不難。
Apple的instrument爲開發者提供了各類template去優化app性能和定位問題。不少公司都在趕feature,並無充足的時間來作優化,致使很多開發者對instrument不怎麼熟悉。但這裏面其實涵蓋了很是完整的計算機基礎理論知識體系,memory,disk,network,thread,cpu,gpu等等,順藤摸瓜去學習,是一筆巨大的知識財富。動畫性能只是其中一個template,重點仍是理解上面問題當中CPU GPU如何配合工做的知識。
不要就簡單的告訴我沒用過,至少問下我有什麼用。。這裏是apple給開發者本身設置custom view的位置。說UI熟悉的必定要知道。
controller layout觸發的時候,開發者有機會去從新layout本身的各個subview。說UI熟悉的必定要知道。
兩種queue,串行和並行。main queue是串行,global queue是並行。有些開發者爲了在工做線程串行的處理任務會本身創建一個serial queue。背後是蘋果維護的線程池,各類queue要用線程都是這個池子裏取的。GCD你們都用過,但不少關鍵的概念很多人都理解的模凌兩可。串行,並行,同步,異步是GCD的核心概念。
沒用過sqlite是說不過去的。用過CoreData的確定有不少血淚史要說。多謝線程模型你確定作過比較選擇。死鎖是啥確定也是要知道的,沒遇到過至少能舉個簡單的例子來講明。單個線程能夠死鎖(main thread裏dispatch_sync到main queue),多個線程直接也能夠死鎖(A,B線程互相持有對方須要的資源且互相等待)。
這個能夠說不少。不但願聽到的答案有
兩個差很少,隨便用一個。 post比get安全(其實兩個都不安全) 能說下兩個http格式有什麼不一樣,各自應用的場景就合格了。更多能夠閱讀下這個答案。
我知道你大學畢業事後就沒接觸過算法數據結構了,可是請你必定告訴我什麼是Binary search tree? search的時間複雜度是多少?我很想知道! 不少人都很排斥數據結構和算法題,我我的意見是複雜的能夠不知道,基礎的必定要了解。時間複雜度是什麼得知道,list,queue,stack,table,tree這些都要明白是啥。連hash表的概念都不知道怎麼能保證在寫代碼的時候注意性能呢。
其實當初寫這份答案的時候並無準備什麼隱藏關卡,只不過有一些從本身這些年項目經歷裏總結出來的有深度的知識點,感受能夠難倒很多同窗:p。求隱藏關卡的同窗真很多,近期我會再準備一份進階版面試題,權看成隱藏關卡。面向的對象是3~5年iOS開發經驗的同窗。再次申明下:這只是一份面試題。