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




??真心希望能夠幫助你們!??!