??最近一兩個月沒寫博客,因為在換工作,最近移動開發(fā)不好找工作,同行都勸說不要輕易換工作,也問過朋友,有些3個月了還沒找到工作,還有些干脆轉(zhuǎn)行了,當前這是少數(shù),我既然選擇了這一行就不要輕易的放棄,抱著學習的態(tài)度去面試,做好了思想工作沒報多大信心會立馬被錄取,當時給自己的目標是面試一個月。
??寫好簡歷掛到網(wǎng)上,第二天下午接到幾個電話,還是外包公司的電話,由于不想去外包,果斷拒絕了。一天了,沒一個電話,有點慌了,市場至于這么慘嗎?以前只是開放簡歷都是一個接一個的電話來,于是趕緊加投簡歷;第三天終于等到了一個電話!可想而知現(xiàn)在的就業(yè)市場增長速度遠低于iOS開發(fā)者的增長速度;雖然培訓的人數(shù)減少了,但目前的數(shù)量還是處于飽和的狀態(tài)。廢話不多說了,我們來總結(jié)下面試的情況。
??最終我花了一個禮拜的時候,面試了7家公司,得到了2個offer。時隔一個禮拜后又成功就業(yè)了!之前的同事都驚呼我神速,他們簡歷都沒寫好呢!我感覺我之前的準備做的充分些,其實面試的時候我也是被虐的很慘的。比如一些細節(jié)問題:
- 創(chuàng)建ViewControllor的初始顏色?
- 有幾種定時器?分別怎么用?
- device-token與UUID的區(qū)別?
- self.與self->有什么區(qū)別?
??現(xiàn)總結(jié)如下:
??1、筆試
??大部分公司現(xiàn)在有筆試了,我面試了7家公司,6家有筆試;為什么現(xiàn)在公司有筆試呢?眾所周知,筆試測驗不出來一個人的真實水平,但是為什么公司還這么做呢?因為目前市場應聘者較多,魚龍混雜,難于挑選;所以公司先選擇了這種簡單暴力的方式先篩選一部分人,雖然不能斷定為好的,但至少能去掉一些不怎么好的。所以我們應聘的人還是多復習復習理論知識,多敲敲代碼,不要一直復制粘貼,不然離開了機器啥都不會。
??2、多線程
??多線程是性能優(yōu)化的一步,使用多線程可以將任務分割分批執(zhí)行,有效的提高應用性能;在應用需要提高性能時,很愛提問這些多線程的問題;所以我們要清楚有哪幾種多線程,分別怎么用,在項目中的實際例子等。線程創(chuàng)建的三種方法:NSThread、GCD的dispatch、子類化的NSOperation,然后將其加入NSOperationQueue;在主線程執(zhí)行代碼,方法是performSelectorOnMainThread。
??3、isa指針
??isa是一個Class 類型的指針. 每個實例對象有個isa的指針,他指向?qū)ο蟮念?而Class里也有個isa的指針, 指向meteClass(元類)。元類保存了類方法的列表。當類方法被調(diào) 用時,先會從本身查找類方法的實現(xiàn),如果沒有,元類會向他父類查找該方法。同時注意的是:元類(meteClass)也是類,它也是對象。元類也有isa指針,它的isa指針最終指向的是一個根元類(root meteClass)。根元類的isa指針指向本身,這樣形成了一個封閉的內(nèi)循環(huán)。一個objc對象的isa的指針指向他的類對象,從而可以找到對象上的方法。
??4、性能測試
??其實這個問題可以用Xcode自帶的方法檢測:Profile-> Instruments ->Time Profiler
??5、OC的反射機制
??Objective-C語言中的OC對象,都繼承自NSObject類。這個類為我們提供了一些基礎的方法和協(xié)議,我們可以直接調(diào)用從這個類繼承過來方法。大部分的動態(tài)反射支持來自NSObject 類。NSObject是所有類(除了一些很少見的例外)的根類。所以基本常用到的類應該都可以支持反射。
??1. class反射
//通過類名的字符串形式實例化對象
Class class = NSClassFromString(@"user");
User *user = [[class alloc] init];
//將類名變?yōu)樽址?Class class =[User class];
NSString *className = NSStringFromClass(class);
??2. SEL的方法反射
//通過方法的字符串形式實例化方法
SEL selector = NSSelectorFromString(@"setName");
[stu performSelector:selector withObject:@"Song"];
//將方法變成字符串
NSStringFromSelector(@selector*(setName:));
??6、如何修改一個類的私有屬性?
??修改私有屬性有兩種方法,一種是通過KVC獲取;另一種是通過runtime訪問并修改私有屬性。
??7、Runtime、RunLoop
??在這里我就不講解這個東西了,我深知自己也沒有完全理解透,就列舉一些常問的問題:
// Runtime
1.objc在向一個對象發(fā)送消息時,發(fā)生了什么?
2.什么時候會報unrecognized selector錯誤?iOS有哪些機制來避免走到這一步?
3.能否向編譯后得到的類中增加實例變量?能否向運行時創(chuàng)建的類中添加實例變量?為什么?
4.runtime如何實現(xiàn)weak變量的自動置nil?
5.給類添加一個屬性后,在類結(jié)構(gòu)體里哪些元素會發(fā)生變化?
// RunLoop
1.runloop是來做什么的?runloop和線程有什么關系?主線程默認開啟了runloop么?子線程呢?
2.runloop的mode是用來做什么的?有幾種mode?
3.為什么把NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環(huán)以后,滑動scrollview的時候NSTimer卻不動了?
??因為筆者面試的公司并不是很多,有很多面試問題沒有列舉出,上面只是列舉一些比較常問的問題。說實話,有些項目中沒有涉及到或者沒有考慮到的問題,我們確實很難回答,這也提醒我們是不是做項目的時候是不是總是生搬硬套?總是認為自己以前是怎么弄的現(xiàn)在就該怎么弄,我們要多考慮以前的方法是不是可以改進?多借鑒借鑒大神的做法。多看些技術博客和技術書籍,努力的豐富自己,如果你感覺自己啥都會了就完了,因為只有大神才知道學無止境,越深入越覺得自己知道的東西太少!換了家公司,換了個環(huán)境,換了個心情,也希望自己也越來越好!
??附幾張自己面試的真實筆試題:
??真心希望能夠幫助你們!!!