[iOS]關于面試,做一次整理吧(包含BAT面試題目)

iOS面試,可能大部分人認為是編程里面最簡單的面試:

不用考算法(排序是什么鬼,我們有sort足以做一切),
不用考內存泄露(因為都在用ARC),
大部分功能網(wǎng)上都有demo(甚至都不用github上搜,都不用google,直接百度就搜出一坨坨),
大概問問做過的東西(其實是就是在說產品功能,是個人都會說好嘛),
然后看著價格給得起就可以了...

基本如果是招干活的,畢竟在大部分人眼里,iOS或者android都只是請求網(wǎng)絡參數(shù),畫個界面而已。關鍵還是后臺的接口和系統(tǒng)的架構來支撐整個系統(tǒng)的穩(wěn)定和發(fā)展

∴ 可能很多基本都是按照經(jīng)驗和背景來定價要人

對于這種觀點,我第一反應是 :

"滾... 你以為你以為就是你以為的?"

"我們除了會畫界面,我們還會cocoapods呢,
我們還會tableView呢,我們還會UIAlert提示錯誤呢?...哼~"(雙手叉腰狀...)

...

??
哈哈,估計我上面這句話一說,基本要被同行打死--

“別人說也就算了,你自己還是說出這么沒水平的話”(圍起來繼續(xù)打...)

|

okey,言歸正傳..

iOS面試真的這么簡單么?

我覺得一個公司面試iOS(當然android也同理)的水平和態(tài)度,間接反應了其產品的層次高低 以及 老板對技術/產品的側重方向
(當然,我相信大部分公司面試都是很給力的,面試官也是很靠譜的,HR也是很清晰的...??)

iOS能問哪些問題?

1.技術方向

1.1 基本功

個人認為面試iOS != 只面試iOS

所以有的公司會上來先面試下計算機的基本功,也算是對這個人的全面了解:

我自己遇到過,上來寫排序或者回文 + 反轉鏈表的,有人會說,這不是很簡單么,只有摸過編程書的,前10頁肯定能找到這種題目。
當然是沒錯,但是就這種題,估計能嚇跑一大半的面試者。

  1. 的確很多人基礎不牢固
  2. 好久不用忘記了
    工作中, 其實這種最基礎的算法類的東西,別說iOS,大部分語言都是不會用到的,因為已經(jīng)基本集成到語言里面了,除非C/C++這種,所以,基本就是考察現(xiàn)場思考的水平了.

有人總結他是這么面試的,大家可以參照下:

1.通用編程技能,例如:一道小算法,數(shù)據(jù)結構的實現(xiàn)方式,網(wǎng)絡,多線程。
2.開發(fā)語言,例如:語言特性,重新實現(xiàn)語言提供的功能,是否深入研究過這門語言的某部分。
3.開發(fā)平臺,例如:該平臺的內部消息,內存,線程等機制。
4.工具,例如:調試技巧,是否熟練使用,代碼管理工具,項目管理工具,效率工具。
5.行業(yè)視角,例如:用什么,知道什么。
6.其他能力,例如:網(wǎng)絡上解決問題的能力,是否有持續(xù)學習的意識。

有經(jīng)驗的,1-6都會問到,剛畢業(yè)的,只要重點面1和6

作者:煥德
鏈接:https://www.zhihu.com/question/19604641/answer/15657048
來源:知乎
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。

1.2 真正的iOS題目

之前看過一個很火的文章,是百度的孫童鞋寫的,我另一篇runloop的文章里面也提到過,如下

鏈接:招聘一個靠譜的iOS

如果你還沒看過,那你趕緊看一下,然后也就不用再看我這篇文章了,
那個里面全是干貨,當然,里面只有問題
答案雖然也能google的出來,但是建議還是自己多想想,
畢竟,面試和考試還是有一些區(qū)別的,自己的思考過程不僅記憶更深刻,而且也更能真正的提升自己嘛

總結過些面試題,沒堅持下去,后來把這些當 checklist,面試的時候實在沒話聊的時候做個提醒,語言、框架、運行機制性質的:

[※]@property中有哪些屬性關鍵字?
[※]weak屬性需要在dealloc中置nil么?
[※※]@synthesize和@dynamic分別有什么作用?
[※※※]ARC下,不顯式指定任何屬性關鍵字時,默認的關鍵字都有哪些?
[※※※]用@property聲明的NSString(或NSArray,NSDictionary)經(jīng)常使用copy關鍵字,為什么?如果改用strong關鍵字,可能造成什么問題?
[※※※]@synthesize合成實例變量的規(guī)則是什么?假如property名為foo,存在一個名為_foo的實例變量,那么還會自動合成新變量么?
[※※※※※]在有了自動合成屬性實例變量之后,@synthesize還有哪些使用場景?

[※※]objc中向一個nil對象發(fā)送消息將會發(fā)生什么?
[※※※]objc中向一個對象發(fā)送消息[obj foo]和objc_msgSend()函數(shù)之間有什么關系?
[※※※]什么時候會報unrecognized selector的異常?
[※※※※]一個objc對象如何進行內存布局?(考慮有父類的情況)
[※※※※]一個objc對象的isa的指針指向什么?有什么作用?
[※※※※]下面的代碼輸出什么?

上面的問題,我覺得足以刷掉一大半面試者(當然也包括我自己,嘿嘿)

難度再提升一些,如下:

[※※※※]runtime如何通過selector找到對應的IMP地址?(分別考慮類方法和實例方法)
[※※※※]使用runtime Associate方法關聯(lián)的對象,需要在主對象dealloc的時候釋放么?
[※※※※※]objc中的類方法和實例方法有什么本質區(qū)別和聯(lián)系?
[※※※※※]_objc_msgForward函數(shù)是做什么的,直接調用它將會發(fā)生什么?
[※※※※※]runtime如何實現(xiàn)weak變量的自動置nil?
[※※※※※]能否向編譯后得到的類中增加實例變量?能否向運行時創(chuàng)建的類中添加實例變量?為什么?

[※※※]runloop和線程有什么關系?
[※※※]runloop的mode作用是什么?
[※※※※]以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer,在滑動頁面上的列表時,timer會暫定回調,為什么?如何解決?
[※※※※※]猜想runloop內部是如何實現(xiàn)的?

[※]objc使用什么機制管理對象內存?
[※※※※]ARC通過什么方式幫助開發(fā)者管理內存?
[※※※※]不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創(chuàng)建)
[※※※※]BAD_ACCESS在什么情況下出現(xiàn)?
[※※※※※]蘋果是如何實現(xiàn)autoreleasepool的?

[※※]使用block時什么情況會發(fā)生引用循環(huán),如何解決?
[※※]在block內如何修改block外部變量?
[※※※]使用系統(tǒng)的某些block api(如UIView的block版本寫動畫時),是否也考慮引用循環(huán)問題?

都答上來了?好那繼續(xù),還有更好玩的

[※※]GCD的隊列(dispatch_queue_t)分哪兩種類型?
[※※※※]如何用GCD同步若干個異步調用?(如根據(jù)若干個url異步加載多張圖片,然后在都下載完成后合成一張整圖)
[※※※※]dispatch_barrier_async的作用是什么?
[※※※※※]蘋果為什么要廢棄dispatch_get_current_queue?

1.3 當我們談論iOS面試時,知乎都在討論什么

知乎:如何面試 iOS 工程師
做部分摘抄:
來自自攜程的某個童鞋的問題:

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

作者:高峰
鏈接:https://www.zhihu.com/question/19604641/answer/44151044
來源:知乎

最后是幾道場景題,也是我最喜歡問的:
發(fā)送10個網(wǎng)絡請求,然后再接收到所有回應之后執(zhí)行后續(xù)操作,如何實現(xiàn)? 

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

實現(xiàn)一個最簡單的點擊拖拽功能。

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

如何減小一個應用程序的尺寸? 

如何提高一個性用程序的性能? 

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


作者:張之誠
鏈接:https://www.zhihu.com/question/19604641/answer/56306604
來源:知乎

2. 產品/設計方面的提問

iOS開發(fā)者相比于server端開發(fā)的童鞋,最大的優(yōu)勢是每天跟產品經(jīng)理,UI設計師,交互設計師扯皮的時間最長,所以對產品的理解和想法也應該是最多的

很多時候,當產品提出需求的時候,一個好的開發(fā)者應該是在合理的范圍內,提出一定自己的想法以及可能存在的問題。 很多時候,產品經(jīng)理也是想一出是一出,如果開發(fā)者這么任他性子,他說什么就做什么的話,并不是一個真正靠譜的開發(fā)者(當然我也不是說每次都質疑需求,我只是說真正的和產品經(jīng)理去討論,怎樣更合理更優(yōu)化)。

除了基本的程序開發(fā)技巧外,會額外的讓他談談當前熱門的app的一些優(yōu)劣。
答不出來的人大多只將開發(fā)app當作一份糊口的工作,不會用心做; 
另外可能是由于就職門戶網(wǎng)站的緣故,我覺得iOS開發(fā)從某種程度上和前端開發(fā)很像,
因此如果會熟練使用Ps軟件的開發(fā)(不要求設計,至少要會切圖什么的),多半會有加分,
正如前面的朋友所說“認為漂亮是基本的要求”,一個人不會一些美術工具,怎么能做出漂亮的界面呢。

作者:王聰
鏈接:https://www.zhihu.com/question/19604641/answer/12358486
來源:知乎

|

還有關于設計,有人列舉了這么一些問題:

原始鏈接在這里:http://www.csdn.net/article/2015-01-19/2823604-ios-interview-questions

關于設計

iOS應用圖標是指什么?請盡可能詳細地描述一下。
最小尺寸和最大尺寸的應用圖標分別是什么樣子的?
應用圖標能否包含透明的部分?
Newsstand的圖標與常規(guī)應用有何不同?
請解釋一下啟動畫面(Launch Images)。
自動布局(Auto Layout)的作用是什么?請概括一下它是如何運行的。
設計軟件時為什么要加上動畫?
請描述一下軟件設計中的交互和Feedback有什么作用。
設計iPhone和iPad應用時,應分別考慮哪些因素?
請描述一下原型設計對于軟件開發(fā)的意義。其作用是什么?
關于App Store

應用內購買(In-App Purchases)是怎么回事?IAP能夠為用戶帶來哪些新體驗?
你是否在App Store上發(fā)布過應用?能否概括一下過程?
iTunes Connect是什么?
Provisioning Profiles是指?
App ID是什么?
iOS的開發(fā)和發(fā)布簽名證書有何異同?
如何使用TestFlight?通過Ad-hoc發(fā)布應用的話,該如何使用UUID?
應何時驗證購買收據(jù)?
發(fā)布iAds(蘋果平臺廣告)有哪些要求?

3.有木有面經(jīng)分享

當然有了

3.1 :百度移動云可穿戴部門的面試經(jīng)歷

來自:不會開機的男孩

polen:這個是某個童鞋百度的面試經(jīng)驗(時間可能比較早了)

3.2 讓 BAT 的 Offer 不再難拿

文/bestswifter(簡書作者)
原文鏈接:http://www.lxweimin.com/p/ee15c1cf9c16

polen: 這哥們面了多家,最終去百度

3.3 2016年1月TX電面題

polen: 騰訊的題目回憶

|

挑幾個不錯的,列舉下:

百度


一面:約 1.5 小時
首先是四個算法題:

不用臨時變量怎么實現(xiàn) swap(a, b)——用加法或者異或都可以
二維有序數(shù)組查找數(shù)字——劍指 offer 第 3題
億級日志中,查找登陸次數(shù)最多的十個用戶——(不確定對不對,我的思路是)先用哈希表保存登陸次數(shù)和ID,然后用紅黑樹保存最大的十個數(shù)。劍指 offer 第 30題
簡述排序算法——快排,partion 函數(shù)的原理,堆排(不穩(wěn)定),歸并排序,基數(shù)排序。

說說你對 OC 中 load 方法和 initialize 方法的異同?!饕f一下執(zhí)行時間,各自用途,沒實現(xiàn)子類的方法會不會調用父類的?
說說你對 block 的理解?!?三種 block,棧上的自動復制到堆上,block 的屬性修飾符是 copy,循環(huán)引用的原理和解決方案。
說說你對 runtime 的理解?!饕欠椒ㄕ{用時如何查找緩存,如何找到方法,找不到方法時怎么轉發(fā),對象的內存布局。
說說你對 MVC 和 MVVM 的理解?!?MVC 的 C 太臃腫,可以和 V 合并,變成 MVVM 中的 V,而 VM 用來將 M 轉化成 V 能用的數(shù)據(jù)。
說說 UITableView 的調優(yōu)?!环矫媸峭ㄟ^ instruments 檢查影響性能的地方,另一方面是估算高度并在 runloop 空閑時緩存。
談談你對 ARC 的理解。ARC 是編譯器完成的,依靠引用計數(shù),談談幾個屬性修飾符的內存管理策略,什么情況下會內存泄露。

阿里

阿里一面:
MVC 具有什么樣的優(yōu)勢,各個模塊之間怎么通信,比如點擊 Button 后 怎么通知 Model?
兩個無限長度鏈表(也就是可能有環(huán)) 判斷有沒有交點
UITableView 的相關優(yōu)化
KVO、Notification、delegate 各自的優(yōu)缺點,效率還有使用場景
如何手動通知 KVO
Objective-C 中的 copy 方法
runtime 中,SEL 和 IMP 的區(qū)別
autoreleasepool 的使用場景和原理
RunLoop 的實現(xiàn)原理和數(shù)據(jù)結構,什么時候會用到
block 為什么會有循環(huán)引用
使用 GCD 如何實現(xiàn)這個需求:A、B、C 三個任務并發(fā),完成后執(zhí)行任務 D。
NSOperation 和 GCD 的區(qū)別
CoreData 的使用,如何處理多線程問題
如何設計圖片緩存?
有沒有自己設計過網(wǎng)絡控件?
阿里二面:
怎么判斷某個 cell 是否顯示在屏幕上
進程和線程的區(qū)別
TCP 與 UDP 區(qū)別
TCP 流量控制
數(shù)組和鏈表的區(qū)別
UIView 生命周期
如果頁面 A 跳轉到 頁面 B,A 的 viewDidDisappear 方法和 B 的 viewDidAppear 方法哪個先調用?
block 循環(huán)引用問題
ARC 的本質
RunLoop 的基本概念,它是怎么休眠的?
Autoreleasepool 什么時候釋放,在什么場景下使用?
如何找到字符串中第一個不重復的字符
哈希表如何處理沖突

騰訊

如何繪制一個三角形? 
1.1 如何繪制大量三角形? 
1.2 一定要重寫drawRect嗎? 
1.3 如何刷新View界面? 
1.4 Layer好在哪?
assign和weak的區(qū)別
線程和RunLoop的關系 
3.1 一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創(chuàng)建)
NSTimer有什么需注意的以及和RunLoop的關系?
NSString copy 和 NSString mutableCopy 的區(qū)別
線程加鎖原理(信號量,臨界區(qū),自選鎖)
iOS7 - iOS9的區(qū)別
GCD指向了野指針了怎么辦
用HTTP傳數(shù)據(jù),丟包嚴重怎么辦
iOS中廣播的種類
app slying
runtime如何實現(xiàn)weak變量的自動置nil?
AFNetworking的內部實現(xiàn)原理?
block循環(huán)引用了如何解決?
如何用GCD同步若干個異步調用?(如根據(jù)若干個url異步加載多張圖片,然后在都下載完成后合成一張整圖)
UIKit的框架結構?

4.人的方面

除了產品和技術,剩下的就是看人了,那怎么看人呢?
有句老話說的好:

首先,如果是妹子加10分,顏值高的double,身材再好的,直接招了吧,不用往下看了...

@end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容