close

無意間看到一篇文章

連結:http://nelson.logdown.com/posts/2015/04/27/questions-i-ask-when-interview-ios-engineer

話說我開發經驗也快三年了,可是這篇文章面試的問題,我還是很多不知道

怎麼會這樣呢?怪就怪我自己都是東拼西湊,程式更是雜亂無章。

所以認真的回答面試的問題,不會的就找答案,雖然不一定是對的

 

一般閒聊

 

1.怎麼學 iOS 開發的,有在關注哪些網站嗎?最近有看到什麼感興趣的技術或討論嗎?

Ans. 巨匠電腦(以前我在巨匠電腦上課,現在我在...)

關注的一些網站  DevDiv  Developer's Note  iDevTW

最近在看怎麼做聊天,語音通話,視訊通話之類的技術

 

2.有在使用第三方套件嗎?如何管理第三方套件?

Ans. 有,通常就下載最新版本,然後可以用就好了,沒特別的去管理或更新。

 (我真誠實,有些話在面試的時候我可能會選擇不說吧!你也知道...嗯)

 

3.開發 iOS 過程,有遇過什麼技術上的難題嗎?

Ans.通常都是使用到了Private 的API,因為都是用Google大神,審核的時候才會知道自己用到了不該用技術。

 

4.如何收集用戶 crash 紀錄,如何 debug

Ans.有用一個第三方套件,會自動將crash的紀錄發Email出來,並告訴你是在那邊錯誤的。

針對他列出來的去找,若可以找到使用者,問一下操作方式,大概就可以知道問題了。

 

5.如何追蹤使用者行為

Ans.可以使用GA(Google Analytics) 在每個Button上都加上記錄點。

 

6.有在使用版本控制系統嗎?請說明你們的版本控制流程

Ans.有,我使用的是SVN,改完程式測試完,將改的部分commit 上去並備注更改的內容。

若有超過一個開發者,請他update下最新版本。

 

7.有在看 WWDC 嗎?對哪些 session 比較有印象,有什麼感想?

Ans.有看過,但沒有一篇看完的。(對英文真的比較沒耐心...)

 

8.有在寫測試嗎?有的話,請說明一下用哪套工具測試,還有測試什麼東西

Ans.沒有,我還真的沒寫過測試(Test Class)也不知道怎麼用...我好無知,有人可以教我怎麼寫嗎?

看來我還是得自己Google~~

 

9.是否有特別喜歡某個 app,你認為這個 app 的架構大概是怎樣,你會如何設計這個 app?

Ans.我覺得 方便找 這個App不錯用。

App端應該有固定的類別和項目,但應該有一隻Server端的API是用來取得新的類別。

點擊其中一個icon進入後Navigation Bar 是固定的樣式,所以會寫固定的Function去套用?(說是這樣說,但不一定會這樣做。)

 

基礎問題

1.會使用 XIB 跟 Storyboard 嗎?有辦法用程式碼刻畫面嗎?能否比較 XIB, Storyboard, Code 刻畫面的優劣?

Ans.會。

XIB:現在比較少用,我現在通常都是在客制Cell比較複雜的時候才會用。不確定現在還有什麼優點。

StoryBoard:大部份都是使用這個,因為可以很清楚的看到畫面的流程,不需要一直程式與畫面切來切去,讓剛開始接觸到專案的人可以馬上了解流程。

Code刻畫面:要去調整畫面,必須看大部份的Code不能馬上調整,再加上尺寸很多,用Code要客製化並且調整(不確定Size Class用程式是否也可以,沒用過...)

 

2.我們可以使用 [anObject doSomething] 讓某物件去做某件事?那如果 anObject = nil 會發生什麼事?

Ans.我還真的沒試過,好像會造成閃退吧?

讓我試試看。

test *t = [test new];

t = nil;

[t check];

結果居然不會執行。因為記憶體被釋放掉了吧?

 

3.假設 array 是一個 mutable array,那 [array addObject:nil] 會發生什麼事?

Ans.會發生錯誤,object 不能是nil

NSMutableArray *a = [NSMutableArrayarray];

[a addObject:nil];

NSLog(@"a =%@",a);

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

 

4.假設 dic 是一個 mutable dictionary,那 dic[@"key"] = nil 會發生什麼事?dic[nil] = @"value" 會發生什麼事?

Ans.結果兩個都不能是nil...又長知識了

NSMutableDictionary *dic = [NSMutableDictionarydictionary];

[dic setObject:@"123"forKey:nil];

NSLog(@"dic %@",dic);

[dic setObject:nilforKey:@"key"];

NSLog(@"dic nil %@",dic);

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: key)'

 

5.什麼是 ARC,什麼是 MRC

Ans.

參考:http://popcornylu.blogspot.tw/2011/06/arc-automatic-reference-counting.html

ARC:Automatic Reference Counting 以前沒有ARC要建立物件時必須要自己retain ,用完再自己Release,後來有ARC就不需要再自己retain,release 了,

MRC:Manual Reference Counting 必須要自己使用retain,release。

一個是自動,一個是手動,但因為現在預設都是ARC所以也沒什麼人在使用MRC了吧?

 

6.ARC 是如何判斷何時要回收記憶體的?它跟 GC 有不一樣嗎?

參考:http://popcornylu.blogspot.tw/2011/06/arc-automatic-reference-counting.html

ARC 是在complier 的時候去判斷

GC 嗯...JAVA的我還真的不太懂,就不說明了。(面試的時候應該也不會這樣說啦。)

 

7.new 跟 alloc init 有不一樣嗎?何時該用哪一種?

參考:http://suanidea.blogspot.tw/2013/09/iosalloc-init-vs-new.html

new = alloc + init

我覺得都可以用,看習慣,或者是init有其他的function在用 alloc + initWith... 之類的。

 

進階問題

1.物件之間可以透過哪些方式溝通,什麼情況下該用哪一種

Ans.物件之間不是透過function去溝通嗎?還是這裡指的是 -(void) 或者是 +(void) 還是delegate 或是protocol

其實我現在都喜歡用Blook的方式,直接call back,不然要做delegate 或是portocol 其實也都不太好做。

 

2.如果要擴充一個 Class 的功能,又不能修改該 Class 的原始碼,有哪些方法可以辦到,其優缺點為何

Ans. 可以建立一個 Category 的Class 這樣可以保留原本的Class的原始碼,也可以使用原來 Class。

不過缺點是,擴充沒完沒了的時候,檔案會越來越多。

 

3.有用過 Category 嗎?請舉出一些用它的實際情況。可能會遇到哪些問題,要如何解決

Ans.有。老實說我都忘記了,好像是#import的時候會發生的問題,#import在.m檔內就好了?

我還真的不確定。。。

 

4.什麼是 Singleton,有什麼優缺點,請舉出使用它的時機

Ans.這不是酒嗎??

參考:http://openhome.cc/Gossip/DesignPattern/SingletonPattern.htm

 好啦~應該是在多執行緒,操作同一個記憶體。

不確定對不對,像是Loding View ,我們每個頁面幾乎都會顯示,但是我們每次都需要操作同一個?顯示或隱藏。

 

5.什麼是 retain cycle,為何會發生,該怎麼解決

Ans.

參考:http://popcornylu.blogspot.tw/2012/02/3-anti-patterns-which-lead-memory-leaks.html

retain cycle 這個問題,好像沒遇過。

但看了一下文章好像是加上 _block 就可以了?

 

6.直接呼叫 method 跟使用 performSelector: 有何不同,何時會使用後者

Ans.performSelector可以設定 delay時間

或是你的object 是一個 id 時可以使用 performSelector 呼叫method

 

7.有實作過 isEqual 嗎?要注意哪些地方

Ans.有,isEqual:(id) 。可以用來比對任何物件。注意的地方~目前沒想到噎。

isEqualtoString 才是比對字串。大小寫要一樣。

 

8.什麼情況下無法使用 ARC

Ans.一些舊的專案,本身就使用MRC了,要在complier flag 加上 -fno-objc-arc

 

9.知道什麼是 toll free bridging 嗎

Ans.不知道。

參考:http://my.oschina.net/megan/blog/148760

嗯~意思是說 NSString 可以轉成CFString ... 確實好像有這種用法 有些必須要加上_bridge 後才可以用

不過現在Xcode很聰明,都會自動提醒你要加上,自然就會忽略了。

 

10.知道什麼是 shallow copy 跟 deep copy 嗎?如何 deep copy 一個 array

Ans.不知道。

參考:http://blog.csdn.net/hamasn/article/details/7454663

shallow copy

NSArray *shallowCopyArray=[someArray copyWithZone:nil];

deep copy

NSArray *deepCopyArray=[[NSArray alloc] initWithArray: someArray copyItems: YES];

 

11.說說對 MVC 的看法

Ans.

Model-View-Controller 將Model,View,Controller 分開,好處是Model可以重複使用,若將View寫在Model裡面,將來商業邏輯會分不開。

不過最新的還有MVVM 不過那個好複雜我也有點看不太懂。

可能我資質比較不好吧。

 

以上問題來自

Nelson 寫些 iOS 開發的東東

 

話說這些問題,我幾乎都答不出來,好慚愧。

不過~有些東西,真的不需要探討的這麼深入啦!

除非今天開發的專案非常大,不然小專案還考慮這麼多,會把自己搞死的。

好啦~其實我是假的iOS Developer ... 慘!

 

以上真的不一定是對的,有錯可以提出來探討一下。

arrow
arrow
    創作者介紹
    創作者 Mr.Lin 的頭像
    Mr.Lin

    Mr.Lin

    Mr.Lin 發表在 痞客邦 留言(1) 人氣()