我13年12月實(shí)習(xí)恰起,14年7月畢業(yè)检盼,算起來起碼有1年半工作經(jīng)驗(yàn)了翘单,以下是我完全沒百度沒google寫的一些個(gè)人理解,完全是來自工作實(shí)踐中的哄芜,道理講的可能不準(zhǔn)確忠烛,有錯(cuò)幫忙指出:
1美尸、解釋下MVVM模式,用過RAC么?
MVVM我公司的2個(gè)項(xiàng)目都是使用這個(gè)模式恕酸,字面意思是Model-View-ViewModel胯陋,其實(shí)還有個(gè)C,相對(duì)于MVC模式义矛,MVVM最特別的在于多了個(gè)ViewModel作為View與Controller之間的聯(lián)系凉翻,實(shí)際工作中捻激,Model并不是直接與View掛鉤的,Model更傾向于網(wǎng)絡(luò)層(如JSON解析等方面)垃杖,我們一半會(huì)在ViewModel中定義一個(gè)初始化方法调俘,用Model來初始化這個(gè)ViewModel旺垒,在ViewModel的實(shí)現(xiàn)文件中做一些數(shù)據(jù)類型的轉(zhuǎn)換/計(jì)算/比較等操作袖牙。RAC沒用過,準(zhǔn)備去學(xué)習(xí)一下司忱。
2畴蹭、簡述CollectionLayout自定義過程叨襟。
你說的是UICollectionViewLayout的自定義嗎?這個(gè)一般用來實(shí)現(xiàn)特殊的動(dòng)畫效果和布局效果(當(dāng)然用處不只這些)梳玫,工作以來唯一自定義的一個(gè)CollectionViewLayout只是對(duì)原生UICollectionViewFlowLayout的偏移量進(jìn)行修改。
3姚垃、說說method-swizzling盼忌,順道說下消息發(fā)送和消息轉(zhuǎn)發(fā)谦纱。
method-swizzling運(yùn)行時(shí)runtime中的一個(gè)實(shí)踐,可以在運(yùn)行時(shí)替換某些方法的實(shí)現(xiàn)(如viewWillAppear)川慌,以解決一些特殊的問題(如在分類中替換原類的某個(gè)方法)
4窘游、CoreText圖文混排原理跳纳。
工作以來沒用過寺庄,倒使用過正則表達(dá)式解析過Html進(jìn)行圖文混排
5、線程與NSRunLoop的關(guān)系赢织。
線程和NSRunLoop的理論看過很多馍盟,就是沒實(shí)踐過贞岭,準(zhǔn)備實(shí)踐一下看看能不能解決單線程圖片上傳很慢的問題,以后回來解答话速。
6芯侥、XMPP做過嗎?
XMPP和即時(shí)通訊倒是與我有緣云石,13年12月實(shí)習(xí)的時(shí)候就是做的一個(gè)即時(shí)通訊應(yīng)用白指,當(dāng)時(shí)年少輕狂告嘲,不懂使用SDK奖地,果斷跟老板說:即時(shí)通訊就用XMPP吧参歹,我百度了一下都這樣干的(因?yàn)槔习遄屛矣肧ocket,什么是Socket僧界?完全不懂啊捂襟,iOS只有我一個(gè)人啊搞什么Socket;斗濉!)〕桎觯現(xiàn)在回想一下扒吁,如果能用第三方SDK室囊,那個(gè)項(xiàng)目也不至于不能上線波俄,我的鍋懦铺,言歸正傳,我記得直接使用XMPP是需要自己搭建聊天服務(wù)器的趁窃,當(dāng)時(shí)是使用了openfire醒陆,然后網(wǎng)上找了個(gè)簡單的Demo,一堆代理啊注冊(cè)啊驗(yàn)證啊寺晌,加了各種交流群呻征,人都瘋了陆赋,后來辭職到現(xiàn)在又做了3個(gè)線上項(xiàng)目嚷闭,有2個(gè)是即時(shí)通訊相關(guān)應(yīng)用胞锰。
7领突、@protocol 和 category 中如何使用 @property君旦。講講iOS關(guān)聯(lián)金砍。
使用運(yùn)行時(shí)runtime的關(guān)聯(lián)對(duì)象恕稠,建議大家看看這個(gè)扶欣,項(xiàng)目中經(jīng)常會(huì)在category中擴(kuò)展屬性骆捧。實(shí)際上敛苇,除了匿名分類枫攀,category是不能直接擴(kuò)展屬性的(其實(shí)category是可以寫@property的脓豪,但是只會(huì)給你生成set方法扫夜,不是完整的屬性笤闯,還是相當(dāng)于擴(kuò)展方法)棍厂,只能擴(kuò)展方法。但是可以使用runtime的關(guān)聯(lián)對(duì)象解決。
8晶默、block在內(nèi)存中是如何存放的磺陡,說說循環(huán)引用币他,不要說解決方案蝴悉,要原理硝枉。
是不是棧妻味?先入后出责球?回去加強(qiáng)一下學(xué)習(xí)。出現(xiàn)循環(huán)引用的情況:一個(gè)實(shí)例A中栖博,比如viewController,持有了另外一個(gè)實(shí)例B丧叽,比如View踊淳,而這個(gè)實(shí)例B中擁有一個(gè)block屬性陕靠,或者一個(gè)用block做參數(shù)的方法,那么,當(dāng)在實(shí)例A中寸认,使用實(shí)例B去調(diào)用這個(gè)block的時(shí)候神汹,在block中又有實(shí)例A的一個(gè)強(qiáng)引用操作滔以,此時(shí)block會(huì)持有類A桃漾。如此,它們3方形成了一個(gè)循環(huán)的死結(jié)(A-B-block-A)撬统。無論你注銷哪個(gè)适滓,都沒有用,它們會(huì)一直存在于內(nèi)存恋追,如果反復(fù)創(chuàng)建它們凭迹,最終內(nèi)存會(huì)爆滿。解決方法:
最常用的方法是在block中使用實(shí)例A的弱引用進(jìn)行操作几于,一般是把self轉(zhuǎn)換為weakSelf:
__weak typeof(self) weakSelf = self;
我知道有一種情況是不會(huì)產(chǎn)生循環(huán)引用的蕊苗,就是當(dāng)實(shí)例A沒有擁有實(shí)例B的時(shí)候,比如實(shí)例B只在實(shí)例A的一個(gè)方法的作用域內(nèi)有效時(shí)沿彭。
9、KVO的實(shí)現(xiàn)原理尖滚,如何手動(dòng)觸發(fā)KVO喉刘。
我看過一篇孫源的博客,里面講到KVO的實(shí)現(xiàn)原理是在runtime時(shí)重寫了被監(jiān)聽對(duì)象的set方法漆弄,回去翻翻那篇博客再復(fù)習(xí)一下睦裳。實(shí)踐工作中會(huì)用就很好了。手動(dòng)觸發(fā)撼唾?沒試過廉邑,稍后查一下資料。
10倒谷、swift了解多少蛛蒙?
哈哈,Swift我前段時(shí)間學(xué)了一下渤愁,學(xué)習(xí)方法就是在把OC的幾個(gè)關(guān)鍵知識(shí)列出來牵祟,然后網(wǎng)上找Swift的解決方法,上gitHub下載Demo學(xué)習(xí)抖格,比如Swift中UITableView的使用/代理/通知中心/Block/屬性/導(dǎo)航欄等诺苹。我還為此分享了個(gè)gitHub項(xiàng)目咕晋,大家可以去看看,看在我用心手寫這么多字的份上收奔,順便幫我點(diǎn)個(gè)star吧掌呜。地址:https://github.com/WenkyYuan/SwiftDemo。(或者搜索ICDPopupMenu就可以看到我啦坪哄,gitHub名字:WenkyYuan质蕉,歡迎互粉)
我還分享了2個(gè)關(guān)于動(dòng)畫/菜單的Demo,喜歡的同學(xué)也幫忙點(diǎn)個(gè)star损姜。
說了這么多饰剥,樓主覺得我的水平對(duì)得起我的工作年限么?年初跳槽能找到工作么摧阅?值多少錢