iOS面試系列·某巨頭PA金融科技公司iOS開發(fā)面試回憶

面試的時候你可能碰到面試官設(shè)的各種坑:不止喜歡問你iOS開發(fā)的一些特性和方法蒋得,更喜歡喜歡問你這些特性及方法你覺得它是怎么實現(xiàn)的?你覺得蘋果公司為什么要這樣設(shè)計?

也許面試官自己也沒自己實現(xiàn)過,畢竟有些東西蘋果為什么這樣設(shè)計姜胖,若不是蘋果公司的工程師無法知道。

但作為面試者淀散,這個些問題正是拉開差距的最好辦法:不一定要你親手用C去重現(xiàn)蘋果的機制右莱,但可以談?wù)勀愕囊娊夂涂捶ㄑ料恰K裕@一塊最好有個準(zhǔn)備慢蜓。

1. 用法實踐篇

一般亚再,會問你怎么實現(xiàn)某個模塊,用過哪些API晨抡,介紹下他們的用法氛悬。

1.1 你以前的項目架構(gòu)是怎樣的?
  • 我用的MVVM耘柱,相對于傳統(tǒng)的MVC如捅,主要區(qū)別就是把網(wǎng)絡(luò)請求和業(yè)務(wù)層放到ViewModel里面了。
  • 相對于普通博客介紹的View<->ViewModel <->Model调煎,其實更靠譜的理解是View <-> C <-> ViewModel <->Model镜遣,把Controller加進去,更好的理解士袄。
  • 然后悲关,為了讓View和ViewModel之間能夠有比較松散的綁定關(guān)系,于是我們使用ReactiveCocoa娄柳,KVO寓辱,Notification,block西土,delegate和target-action都可以用來做數(shù)據(jù)通信讶舰,從而來實現(xiàn)綁定,但都不如ReactiveCocoa提供的RACSignal來的優(yōu)雅需了,如果不用ReactiveCocoa,綁定關(guān)系可能就做不到那么松散那么好般甲,但并不影響它還是MVVM肋乍。
  • 這里推薦一個MVVM基礎(chǔ)框架:https://github.com/foxsofter/LPDMvvmKit
1.2 你是如何數(shù)據(jù)建模的敷存?
  • 普通的辦法就是建一個基類比如BaseModel墓造,里面寫好一些初始化的方法,然后新建一個子類比如UserModel锚烦,里面寫好一些跟后臺對應(yīng)的字段觅闽,用它來接收數(shù)據(jù)或者保存數(shù)據(jù)。這一塊可參考:http://www.reibang.com/p/923404fcd2f2
  • 還有一種辦法涮俄,就是封裝一個功能蛉拙,根據(jù)網(wǎng)絡(luò)請求返回來的JSON數(shù)據(jù)自動生成Model文件,當(dāng)然也提供特許字段的處理彻亲,比如id字段孕锄。它的缺點就是如果接口的JSON的數(shù)據(jù)是動態(tài)可變的吮廉,還是需要手動調(diào)整補充。這個可參考:https://blog.csdn.net/lg767201403/article/details/78675788
  • 當(dāng)然畸肆,還有一種辦法宦芦,就是有個軟件叫JSONExport,可以實現(xiàn)上面封裝的那個功能轴脐,不過這種方法生成的更慢调卑。
1.3 你怎么實現(xiàn)字典轉(zhuǎn)模型的?
  • 我原來的老工程里面用的是MJExtesion大咱,它的兼容性更高恬涧。當(dāng)然JSON層數(shù)不多的時候,我也會自己實現(xiàn)字典轉(zhuǎn)模型徽级,主要利用兩個API:
- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *,id> *)keyedValues;

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{}
  • 當(dāng)然气破,還有YYModel也可是實現(xiàn)字典轉(zhuǎn)模型,它的效率更快餐抢,關(guān)于這兩個的性能對比研究现使,可查閱http://www.reibang.com/p/ef3baf1c9463

  • 關(guān)于自己手動實現(xiàn)字典轉(zhuǎn)模型的原理旷痕,就是利用runtime+kvc碳锈,關(guān)于這一塊的研究,可查閱讀者的另外一篇http://www.reibang.com/p/885b65688b96欺抗。

1.4 你用過哪些動畫效果售碳?
  • 最基本的就是UIView動畫了,不涉及任何CAAnimationtion提供的API绞呈,這個就包括了兩類frame動畫(涉及一些frame, bounds, center的改變)贸人,transform動畫。關(guān)于它的取值可以這樣:
imageContainView.frame = CGRectMake(80, 80, 200, 200); 
  • frame動畫基本利用的屬性就是UIView的.frame佃声,.bounds艺智,.center屬性。
  • transform動畫利用的就是UIView的.transform屬性圾亏。至于它的取值可以類似如下這樣十拣,只要CGAffineTransform類型即可。
self.redView.transform = CGAffineTransformTranslate(self.redView.transform, 0, 0);
self.redView.transform = CGAffineTransformMakeRotation(M_PI);
self.redView.transform = CGAffineTransformMakeScale(1.5, 1.5);
  • 當(dāng)涉及一些frame, bounds, center的改變或是形變的時候其實可以用 transform方式 來取代 frame方式志鹃。
  • UIView動畫基本的語法形式就是兩種夭问,一個是UIView的begin --- commit,一個是UIView的animations block了曹铃。
  • 再就是直接利用核心動畫CAAnimation及其子類的API了缰趋,包括基礎(chǔ)動畫,組動畫,轉(zhuǎn)場動畫埠胖,關(guān)鍵幀動畫糠溜,形變動畫。這種動畫的基本形式就是新建一個CAAnimation子類例如CAKeyframeAnimation直撤,然后向animatedView.layer視圖添加動畫效果
/**
 *  抖動效果
 */
-(void)shakeAnimation{
    CAKeyframeAnimation *anima = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];//在這里@"transform.rotation"==@"transform.rotation.z"
    NSValue *value1 = [NSNumber numberWithFloat:-M_PI/180*4];
    NSValue *value2 = [NSNumber numberWithFloat:M_PI/180*4];
    NSValue *value3 = [NSNumber numberWithFloat:-M_PI/180*4];
    anima.values = @[value1,value2,value3];
    anima.repeatCount = MAXFLOAT;
    
    [_demoView.layer addAnimation:anima forKey:@"shakeAnimation"];
}
  • CG動畫非竿,比如我實現(xiàn)過一個類似芝麻分半圓形動畫的效果。這個動畫中谋竖,色彩漸變是通過CAGradientLayer實現(xiàn)的红柱,設(shè)置好參數(shù)后,設(shè)置它的蒙層即可蓖乘,例如gradientLayer.mask = self.graView.layer;锤悄。關(guān)于,CG繪制的具體代碼嘉抒,可參考如下:
還有 38% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載零聚,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
支付 ¥9.90 繼續(xù)閱讀
  • 序言:七十年代末些侍,一起剝皮案震驚了整個濱河市隶症,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岗宣,老刑警劉巖蚂会,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耗式,居然都是意外死亡胁住,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門刊咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彪见,“玉大人,你說我怎么就攤上這事娱挨∑蟪玻” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵让蕾,是天一觀的道長。 經(jīng)常有香客問我或听,道長探孝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任誉裆,我火速辦了婚禮顿颅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘足丢。我一直安慰自己粱腻,他們只是感情好庇配,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绍些,像睡著了一般捞慌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柬批,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天啸澡,我揣著相機與錄音,去河邊找鬼氮帐。 笑死嗅虏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的上沐。 我是一名探鬼主播皮服,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼参咙!你這毒婦竟也來了龄广?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤昂勒,失蹤者是張志新(化名)和其女友劉穎蜀细,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戈盈,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡奠衔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了塘娶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片归斤。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刁岸,靈堂內(nèi)的尸體忽然破棺而出脏里,到底是詐尸還是另有隱情,我是刑警寧澤虹曙,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布迫横,位于F島的核電站,受9級特大地震影響酝碳,放射性物質(zhì)發(fā)生泄漏矾踱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一疏哗、第九天 我趴在偏房一處隱蔽的房頂上張望呛讲。 院中可真熱鬧,春花似錦、人聲如沸贝搁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雷逆。三九已至弦讽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間关面,已是汗流浹背坦袍。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留等太,地道東北人捂齐。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像缩抡,于是被迫代替她去往敵國和親奠宜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容