ios的風(fēng)已吹過缚态,繼續(xù)ios還是走c/c++后臺開發(fā)?
或者風(fēng)停了豬都摔下來了堤瘤,需要更專業(yè)的人士玫芦?
你為什么拿高薪?別人為什么招聘你本辐?
為了節(jié)省時間桥帆,需要更高效的方法医增,更高效的分工,花一些代價取得更大的成果是非常劃算的
準(zhǔn)備
2 weeks
效
深入了解并精通iOS編程
設(shè)計思想及解決問題的思路
博客
期刊
開源庫研究透徹
AFNetWorking
SDWebImage
FMDB
Mantle 數(shù)據(jù)到模型
JSONModel
Masonry 布局
AsyncDisplayKit
框架
weex
reactive native
ReactiveCocoa
語言
Object-C
Swift
C/C++
擅長點
架構(gòu) - 設(shè)計
網(wǎng)絡(luò)
做過什么
偶撲
多米
系統(tǒng)全面了解
iOS 系統(tǒng)知識都了解并精通
iOS最新知識都有所想法
其他
語言表達能力要增強
多張口閱讀文集
注意
需要更多的項目經(jīng)驗
偶撲+多米 APP項目經(jīng)驗
偶撲整個APP老虫、蜜語部分
蜜語用到的技術(shù):
主要問題:
內(nèi)存管理
runloop 叶骨、runtime
多線程
UI效果優(yōu)化,離屏渲染
性能優(yōu)化
崩潰處理
架構(gòu)設(shè)計
Pods的原理
網(wǎng)絡(luò)通信
今日頭條
c++虛函數(shù)幾內(nèi)存布局
i?o?s基更深入一些
如何知道一個類對象釋放了祈匙,打印日志
UIController是否有UIResponder忽刽,有,能響應(yīng)事件
粉筆網(wǎng)
三面都是技術(shù)面
iOS基礎(chǔ)知識扎實就可以夺欲,一些簡單的算法題
UI相關(guān)的Autolayout原理及刷新相關(guān)函數(shù)
layoutSubviews:addSubViews跪帝、frame變化、滾動UIScrollView些阅、改變UIView大猩〗!(觸發(fā)父類),都會觸發(fā)調(diào)用layoutSubViews市埋;
layoutIfNeeded:如果有需要刷新的標(biāo)記黎泣,立即調(diào)用layoutSubviews進行布局,setNeedsLayout只會標(biāo)記缤谎,不會立即刷新
注意:約束的動畫需要在block使用layoutIfNeeded聘裁,否則動畫不起作用;
drawRect:viewDidLoad后弓千、sizeToFit、frame變化献起,都會觸發(fā)drawRect
高德地圖
做定位的主要問C++知識
簡單的算法題
二面:
準(zhǔn)備:linux系統(tǒng)相關(guān)洋访,C++高級(多線程,同步谴餐,進程間通信等)
小紅書
基本知識點
設(shè)計問題
視頻播放技術(shù)
離屏渲染優(yōu)化姻政?
解決的問題
多米音樂可能爆機的問題,編寫單元測試岂嗓,將業(yè)務(wù)分離汁展,根據(jù)SDK業(yè)務(wù)接口可能返回的任一情況對整個業(yè)務(wù)進行單元測試;
優(yōu)酷土豆
項目上的問題
網(wǎng)絡(luò)+多媒體相關(guān)問題
結(jié)構(gòu)設(shè)計及相應(yīng)處理
ios內(nèi)存管理深入問題
iOS編譯原理
京東
面試太簡單
多米問題:
個別南方用戶有時網(wǎng)絡(luò)異常厌殉,切換南邊備用服務(wù)器食绿;
改用http服務(wù)請求;
偶撲問題:
功能冗余切除公罕,結(jié)構(gòu)重組器紧,設(shè)計模式; MVC --> MVVM 楼眷,數(shù)據(jù)與模型的設(shè)計铲汪;
性能改善熊尉,啟動性能,加載緩存數(shù)據(jù)假象APP已啟動掌腰;
UI及流暢度優(yōu)化狰住,數(shù)據(jù)性能;
美團點評
ios load category:
http://blog.csdn.net/a316212802/article/details/49894421
category被附加到類上面是在map_images的時候發(fā)生的
附加category到類的工作會先于+load方法的執(zhí)行
類和category中都可以有+load方法齿梁,都可以被調(diào)用
load的執(zhí)行順序是先類催植,后category,而category的+load執(zhí)行順序是根據(jù)編譯順序決定的
crash log 解析士飒,crash +APP包+符號文件(DYSM) 用xcode查看查邢,或者用命令執(zhí)行具體的崩潰地址查看
AES,RSA 實現(xiàn)原理
股票雷達
下午5點
常用開源庫
AFNetworking //
SDWebImage // image cache, handle image in background thread
FMDB // seal with sqlite (light db)
Masonry // NSLayoutConstraint
SWTableViewCell // tableview cell 滑動效果酵幕,
--> SWTableViewCell是一個繼承自UITableViewCell的自定義Cell扰藕,它上面放了一個UIScrollerView,這個滾動視圖上放了Cell內(nèi)容芳撒、左側(cè)操作菜單和右側(cè)操作菜單邓深。主要技術(shù)是scrollview滑動,速度velocity的處理笔刹。
YYText // coretext
Mantle json to model // kvc
ReactiveCocoa // runtime swizzle芥备,將block、KVO舌菜、delegate統(tǒng)一為signal來處理萌壳;RAC有一個主要的優(yōu)點,就是提供了一個單一的,統(tǒng)一的方法去處理異步的行為,包括delegate方法,blocks回調(diào),target-action機制,notifications和KVO日月;
MLeaksFinder // 判斷視圖相關(guān)對象是否釋放袱瓮,質(zhì)量較高的代碼
--> 基類 NSObject 添加一個方法 -willDealloc 方法,該方法的作用是爱咬,在對象將要釋放時尺借,先用一個弱指針指向 self,并在一小段時間(3秒)后精拟,通過這個弱指針調(diào)用 -assertNotDealloc燎斩,而 -assertNotDealloc 主要作用是直接中斷言;
swizzle相關(guān)方法:viewDidAppear蜂绎、viewWillAppear栅表、popViewController、pushViewController等
問題:
變高的cell的自適應(yīng)师枣?
self.tableView.estimatedRowHeight = 100; //保障滑動流暢性谨读,使需要的cell才進行高度自適應(yīng)計算
cell.contentView.translatesAutoresizingMaskIntoConstraints = NO;
cell.model // 賦予數(shù)據(jù)模型,確定控件中子視圖是否有數(shù)據(jù)
addConstraint:widthConstraint(NSLayoutConstraint) //添加寬度約束
[cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; //根據(jù)寬度約束計算及視圖中數(shù)據(jù),計算出cell高度
removeConstraint:widthConstraint //移除寬度約束
PS:可對model.hash為key對cell自適應(yīng)計算的高度進行緩存(NSCache)坛吁,可極大提高效率劳殖;
iOS各個版本特點
參考:https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008246
iOS1.0 2007 未公開
iOS5.0 2011 引入ARC機制铐尚,storyboard
iOS6.0 2012 Maps, UICollectionView、AutoLayout哆姻、OpenGL ES
iOS7.0 2013 TouchID
iOS8.0 2014 ApplePay
iOS9.0 2015 統(tǒng)一HTTPS宣增,3D touch、swift2
iOS10.0 2016 推送通知升級矛缨、語音識別
iOS 11.0 2017 Machine Learning Model爹脾,相機功能調(diào)整的比較多
性能穩(wěn)定:
蘋果限制了熱更新,更需要代碼發(fā)布的穩(wěn)定性箕昭;
靜態(tài)分析灵妨,crash報告上傳
內(nèi)存:循環(huán)引用、大數(shù)據(jù)處理落竹、緩存
使用instrument的leaks檢測泌霍,MLeaksFinder檢測
UI:動畫優(yōu)化、大量加載述召、渲染
使用CADisplayLink來監(jiān)控FPS朱转,CADisplayLink是一個能讓我們以和屏幕刷新率相同的頻率將內(nèi)容畫到屏幕上的定時器;
啟動:啟動時間優(yōu)化积暖,launch前藤为,launch后
測試:單元測試;
XCTest夺刑,邊界測試
熱修復(fù):
JSPatch 的原理就是:JS傳遞字符串給OC缅疟,OC通過 Runtime 接口調(diào)用和替換OC方法;
問題:
timer的處理遍愿,timer的會強引用其target存淫,所以處理方案可以是:
將target換成一個代理對象,代理對象weak引用原target错览,并將timer的selector轉(zhuǎn)發(fā)給原target;
將timer變成傳遞block使用煌往,block弱引用target即可倾哺;
網(wǎng)絡(luò)優(yōu)化 & 安全
有自己的 url --> ip 的DNS映射緩存;
請求壓縮刽脖;
RTT(route trip time)羞海,一個鏈路傳輸時間,能反應(yīng)網(wǎng)絡(luò)擁塞狀態(tài)曲管;
MSS(Maximum Segment Size), IP包的最大報文段長度;
合理的并發(fā)數(shù)却邓;
多條線路切換,有TCP長連接院水、HTTP等混合的方式腊徙;
可靠性保障:必須要傳達的請求简十,將請求保存在本地直到發(fā)送成功;
安全:
重要信息不要明文放到plist或DB中撬腾,要經(jīng)過加密處理螟蝙;
每次的服務(wù)請求要加鑒權(quán)驗證處理;
最好重要信息都加一些自定義的加密民傻;
reveal可以在越獄手機 上可以查看任何APP的UI結(jié)構(gòu)
OC代碼是可以反編譯出來的胰默,不要在代碼中獲取關(guān)鍵數(shù)據(jù),可以從服務(wù)器拉壤焯摺牵署;
反編譯可以查看到很多代碼邏輯及重要數(shù)據(jù)信息;
協(xié)議或軟件總有漏洞喧半,所以關(guān)鍵的數(shù)據(jù)最好做一層自己的加密奴迅;
PS:
manager.securityPolicy.allowInvalidCertificates = YES; //AFNetworking設(shè)置允許使用無效證書;
https://zhuanlan.zhihu.com/p/22943142
http://ios.jobbole.com/90594/
精通UI界面開發(fā)
熟悉MVC薯酝,MVVM半沽,組件化思維,了解RN吴菠;
不同版本iOS的特性與差異
Git和GitFlow分支管理者填,Hotpatch機制
性能和穩(wěn)定性優(yōu)化經(jīng)驗,熟悉常見性能穩(wěn)定策略
用戶體驗的極致追求
良好的自測習(xí)慣
多線程做葵、網(wǎng)絡(luò)占哟、安全等編程經(jīng)驗
TCP/HTTP/SPDY/DNS/CDN網(wǎng)絡(luò)知識,了解網(wǎng)絡(luò)優(yōu)化策略及安全防范機制
較強的技術(shù)影響力酿矢,較高的鉆研學(xué)習(xí)熱情榨乎;
魔漫相機
筆試基礎(chǔ)
面試簡單問問
機試 實現(xiàn)UI部分
基本功要求非常扎實
手動實現(xiàn)代碼的能力與效率
猿題庫
自身APP實現(xiàn)的技術(shù)相關(guān)
簡單算法題
經(jīng)驗不足
熟悉常用SQL語句
create database name
drop database name
alter table name add column col type
select * from table1 where col=value
select count as totalcount from table1
select sum(field1) as sumvalue from table1
'insert into table1 (field1,field2) values(value1,value2) '
delete from table1 where something
update table1 set field1=value1 where field1 like ’%value1%'
參考:http://www.cnblogs.com/acpe/p/4970765.html
性能分析與調(diào)優(yōu):
UI渲染優(yōu)化,數(shù)據(jù)緩存優(yōu)化瘫筐,設(shè)計優(yōu)化
用ARC管理內(nèi)存
| 在正確的地方使用reuseIdentifier
| 盡可能設(shè)置Views為完全透明opaque蜜暑,盡可能減少subviews
| 避免龐大的XIB
| 不要block主線程
| 在Image Views中調(diào)整圖片大小
| 選擇正確的Collection
| 打開gzip壓縮
| 重用和延遲加載(lazy load) Views
| cache緩存數(shù)據(jù)
| 權(quán)衡渲染方法
| 使用shadowPath加快渲染
| 重用機制,尤其是大開銷對象
美團
主要問題:
知識點全面細致了解策肝,書寫總結(jié)肛捍,開博
系統(tǒng)深入了解
自己擅長點,優(yōu)點
解決的疑難點
維護的開源站+自己的APP
通用的框架非常熟:AF之众,SD拙毫,Mantle等;
主攻:
網(wǎng)絡(luò) + 疑難問題:iOS網(wǎng)絡(luò)精通
設(shè)計 SDK+系統(tǒng)架構(gòu):架構(gòu)及設(shè)計模式全面了解
-->查看 Stack Overflow 與 gitbook
meta class
Class 本身也有一個 isa 指針棺禾,指向的是它的 MetaClass;
block底層原理:
實際編譯成C++是一個結(jié)構(gòu)體及函數(shù)缀蹄,會對外部變量進行引用;
注意block形成循環(huán)引用的狀況;
block是為了解決什么問題使用的缺前?
該變readonly屬性的變量
使用 setValue:forKey:(KVC)改變變量蛀醉;
因為readonly標(biāo)識編譯期間不生成setter方法,而setValue:forKey:是運行時方法诡延,騙過了編譯器滞欠;
圖片渲染過程:
CPU 計算好顯示內(nèi)容提交到 GPU,GPU 渲染完成后將渲染結(jié)果放入幀緩沖區(qū)肆良,隨后視頻控制器會按照 VSync 信號如下圖1-4所示筛璧,逐行讀取幀緩沖區(qū)的數(shù)據(jù),經(jīng)過可能的數(shù)模轉(zhuǎn)換傳遞給顯示器顯示惹恃;
參考:http://www.cocoachina.com/ios/20151203/14549.html
png與jpg的區(qū)別:
png有透明通道, jpg沒有.png有手機硬解碼加速 無損顯示效果好夭谤;
png加載速度快, 顯示效果好;
xcode也會對png圖片進行優(yōu)化,jpg沒有巫糙;
jpg高壓縮率朗儒,適合掃描使用;
Runloop的結(jié)構(gòu)和循環(huán)流程:
一個線程對應(yīng)一個runloop参淹,runloop中有幾種模式用于區(qū)別不同任務(wù)醉锄;runloop循環(huán)處理observer、timer浙值、source三類恳不;
在線程中添加runloop(并添加port)保證線程不退出;
將timer添加到runloop中开呐,保證timer執(zhí)行烟勋;
NSOperationQueue和GCD區(qū)別:
NSOperationQueue對operation及線程狀態(tài)及依賴關(guān)系能進行全面控制,GCD能更方便直觀的執(zhí)行筐付;
線程安全:
加鎖的幾種方式:
@synchronized { 代碼塊 }
NSLock / NSUnlock
dispatch_semaphore_t 信號量卵惦,信號量為0不可用 dispatch_semaphore_wait (-1) / dispatch_semaphore_signal (+1);
NSCondition 條件鎖,NSCondition和NSLock瓦戚、@synchronized等是不同的是沮尿,NSCondition可以給每個線程分別加鎖,加鎖后不影響其他線程進入臨界區(qū)较解;提供更高級的用法wait和signal畜疾,和條件信號量類似;
NSRecursiveLock 遞歸鎖哨坪,總共加鎖解鎖的次數(shù)要匹配庸疾;
NSURLSession 與 NSURLConnection:
NSURLSession是NSURLConnection 的替代者乍楚,在2013年蘋果全球開發(fā)者大會(WWDC2013)隨iOS7一起發(fā)布当编,是對NSURLConnection進行了重構(gòu)優(yōu)化后的新的網(wǎng)絡(luò)訪問接口;
AFNetWorking 2.0 -> 3.0 將 NSURLConnection升級為NSURLSession了徒溪;
NSURLSession 創(chuàng)建了三種datatask忿偷,NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask金顿,創(chuàng)建的task都是掛起狀態(tài),需要resume才能啟動鲤桥;
NSURLSession有取消揍拆、暫停、繼續(xù)三個方法茶凳;
NSURLConnection創(chuàng)建即默認(rèn)啟動嫂拴,可取消,但不能繼續(xù)訪問贮喧,需要再次創(chuàng)建請求筒狠;
NSURLSession的斷點續(xù)傳更快捷,可暫停繼續(xù)上傳箱沦;
NSURLConnection下載文件時辩恼,先將整個文件下載到內(nèi)存,然后再寫入沙盒谓形,如果文件比較大灶伊,就會出現(xiàn)內(nèi)存暴漲的情況;而使用NSURLSessionUploadTask下載文件寒跳,會默認(rèn)下載到沙盒中的tem文件夾中聘萨,不會出現(xiàn)內(nèi)存暴漲的情況,但在下載完成后會將tem中的臨時文件刪除冯袍,需要在初始化任務(wù)方法時匈挖,在completionHandler回調(diào)中增加保存文件的代碼;
NSURLSession有sessionWithConfiguration接口康愤,可對session的進行配置儡循,更加靈活;
參考:http://www.cnblogs.com/kakaluote123/articles/5426923.html
NSURLConnection是怎么封裝的:
NSURLConnectionDelegate | NSURLConnectionDataDelegate | NSURLConnectionDownloadDelegate
CFNetwork
CFNetwork更側(cè)重與網(wǎng)絡(luò)協(xié)議征冷,F(xiàn)oundation則更傾向于API數(shù)據(jù)請求等择膝,雖然框架也提供了一些操作,但是遠不如CFNetwork豐富检激。在學(xué)習(xí)CFNetwork之前肴捉,需要先了解2個基礎(chǔ)API框架: CFSocket、CFStream叔收;
做過什么動畫齿穗?
動畫實際上是對CALayer進行的操作;
CAAnimation \ CAMediaTiming協(xié)議
iOS9.0之后新增CASpringAnimation類饺律,它實現(xiàn)彈簧效果的動畫窃页,是CABasicAnimation的子類;
核心動畫可以使用的類:
CABasicAnimation | CAKeyframeAnimation | CATransition | CAAnimationGroup | CASpringAnimation
參考:http://www.cocoachina.com/ios/20160517/16290.html
https 原理
請求服務(wù) -> 返回crt公用證書(沒有顯示warning) -> 隨機生成key + crt加密 發(fā)送到服務(wù)端 -> crt解密獲得key -> 客戶端服務(wù)端都使用key對數(shù)據(jù)進行對稱加密傳輸;
因為key是只有客戶端跟服務(wù)端才知道的脖卖,所以保證了通信安全乒省;
比http多了安全策略;
RSA加密原理:
RSA算法基于一個十分簡單的數(shù)論事實:將兩個大質(zhì)數(shù)相乘十分容易畦木,但是想要對其乘積進行因式分解卻極其困難袖扛,因此可以將乘積公開作為加密密鑰。
非對稱加密算法:公鑰+私鑰
SDWebImage框架結(jié)構(gòu)十籍,緩存機制
git問題:
rebase原理(將一個分支的全部修改添加到另一個分支):先將test分支的代碼checkout出來蛆封,作為工作目錄,然后將master分支從test分支創(chuàng)建起的所有改變的補丁勾栗,依次打上娶吞,如果打補丁的時候出現(xiàn)了問題,就會提示你處理沖突械姻,處理好了妒蛇,可以運行g(shù)it rebase –continue;
git流程:暫存/提交/推送
組件化:
組件化的了解楷拳,代碼拆分以解決業(yè)務(wù)上的耦合绒瘦;
組件化為了解決什么問題
組件和組件之間沒有明確的約束像街;
組件單獨開發(fā)、單獨測試,不能揉入主項目中開發(fā)卿捎,測試也可以針對性的測試饼齿;
使用url路由跳轉(zhuǎn)拳话,創(chuàng)建視圖控制器:
參考:http://www.reibang.com/p/afb9b52143d4
JSPatch 原理
Runtime 改變函數(shù)指向漫仆;
JSPatch 能做到通過 JS 調(diào)用和改寫 OC 方法最根本的原因是 Objective-C 是動態(tài)語言,OC 上所有方法的調(diào)用/類的生成都通過 Objective-C Runtime 在運行時進行坤按,我們可以通過類名/方法名反射得到相應(yīng)的類和方法毯欣,也可以替換某個類的方法為新的實現(xiàn),還可以新注冊一個類臭脓,為類添加方法酗钞;
消息傳遞:
單例與全局變量的區(qū)別
單例是一個share只能訪問唯一的一個實例變量,alloc也只能返回唯一的一個實例来累,copy也只能返回唯一一個實例砚作,所以創(chuàng)建的方法都只能指向唯一一個實例;
全局變量是是指向一個類變量嘹锁,是可以變化的葫录,可以生成多個實例;
設(shè)計模式的掌握
單例 觀察 工廠 代理 建造者
構(gòu)建模式:build pattern, 構(gòu)造函數(shù)將很多屬性出入進去創(chuàng)建一個對象领猾;
IOS可以創(chuàng)建時候傳入block函數(shù)米同,參數(shù)為一個構(gòu)造模型對象求冷,然后在block參數(shù)中進行屬性賦值,構(gòu)造模型運用參數(shù)創(chuàng)建一個對象并返回窍霞;
參考:http://www.cocoachina.com/ios/20150313/11328.html
MVC 與 MVVC
model view controller
model-view view controller
實際設(shè)計。拯坟。
編寫單元測試
比如寫一個網(wǎng)絡(luò)庫但金,如何測試該網(wǎng)路庫,用例寫的更全面一些
接觸不多郁季,知道用自帶的test進行編寫
如果沒有instruments如何檢測memory leak冷溃,zombie object之類的問題
原理:如果不使用instruments工具,就自己利用runtime進行函數(shù)hook替換加入響應(yīng)代碼進行監(jiān)控處理梦裂;
通過hook改變函數(shù)實現(xiàn)似枕,監(jiān)聽是否釋放,視圖控制器及子視圖等年柠,在停止使用后凿歼;
在dealloc函數(shù)中打印log可以調(diào)試頁面是否釋放;
zombie(過渡釋放):打開enable zombie object冗恨,相當(dāng)于用一個僵尸來替換默認(rèn)的dealloc實現(xiàn)答憔,也就是在引用計數(shù)降到0時,該僵尸實現(xiàn)會將該對象轉(zhuǎn)換成僵尸對象掀抹;
HeapInspector-for-iOS 它通過 hook 掉 alloc虐拓,dealloc,retain傲武,release 等方法蓉驹,來記錄對象的生命周期。具體的檢測內(nèi)存泄露的方法和原理揪利,與 Instrument 的 Allocations 一致态兴;
基本算法
分層打印:將打印完畢的節(jié)點的子節(jié)點放入隊列尾部待打优蔽弧(vector)
時間復(fù)雜度為O(N)的排序诗茎?
最近讀寫什么書
Jobs
讀過的開源框架:
AFNetworking
github上關(guān)注的。献汗。敢订。
解決的問題
pod更新的問題,蘋果不支持js注入的三方架構(gòu)
去 stackoverflow上去查找;
自己擅長的地方
C/C++混編
網(wǎng)絡(luò)編程
平臺架構(gòu)