1.iOS和iPhone做了哪些設(shè)計來降低功耗睦疫、延長續(xù)航時間害驹?作為應(yīng)用的開發(fā)者,又如何避免費(fèi)電蛤育?
答:iOS和iPhone對續(xù)航時間做的設(shè)計:推送宛官、偽后臺
iOS的省電機(jī)制主要有以下幾種:
強(qiáng)化的后臺機(jī)制
1.墓碑式:偽多任務(wù),應(yīng)用推至后臺后瓦糕,雖然沒有被關(guān)閉底洗,但是所有活動都被凍結(jié),只能通過蘋果服務(wù)器轉(zhuǎn)發(fā)的推送來與用戶交互
2.智能調(diào)度后臺:在一些指定類別的APP咕娄,比如社交亥揖、新聞類的應(yīng)用中,iOS系統(tǒng)會根據(jù)應(yīng)用啟動頻率、時間和當(dāng)前網(wǎng)絡(luò)和電量的狀況來智能分配每個應(yīng)用的后臺數(shù)據(jù)獲取頻率和啟動時長费变,開發(fā)者自己不能設(shè)置數(shù)據(jù)具體什么時候更新
3.真后臺:蘋果也提供一些有諸多限制的接口來保證真后臺摧扇,只供特定應(yīng)用行為調(diào)用,比如后臺音頻挚歧,定位扛稽,上傳下載等。
作為開發(fā)者如何省電:
首先當(dāng)然優(yōu)化代碼滑负,積極合理地使用runloop在张,多線程等技術(shù)。
其次是盡量少地調(diào)用一些費(fèi)電的接口矮慕,比如頻繁的定位帮匾,頻繁的后臺更新數(shù)據(jù),如無必要凡傅,盡量不用辟狈。
2.TCP為什么要設(shè)計三次握手膀捷?如果要解決三次握手來的延遲問題而去掉三次握手鳍征,如何解決三次握手所解決的問題鹤耍?
答:TCP三次握手:(建立連接)
1.第一次握手:建立連接時舔株,客戶端發(fā)送消息到服務(wù)器广凸,并進(jìn)入消息發(fā)送狀態(tài)亿柑,等待服務(wù)器確認(rèn)匠襟;
2.第二次握手:服務(wù)器收到消息祟敛,必須確認(rèn)客戶的發(fā)送過來的消息猫态,同時自己也發(fā)送消息反饋給客戶佣蓉,此時服務(wù)器 進(jìn)入消息待接收狀態(tài)
3.第三次握手:客戶端收到服務(wù)器的反饋消息,向服務(wù)器發(fā)送確認(rèn)消息反饋亲雪,此消息發(fā)送完畢勇凭,客戶端和服務(wù)器進(jìn)入等待狀態(tài),完成三次握手义辕。
為什么要設(shè)計三次握手呢虾标?
為了保證服務(wù)端能收接受到客戶端的信息并能做出正確的應(yīng)答而進(jìn)行前兩次(第一次和第二次)握手,為了保證客戶端能夠接收到服務(wù)端的信息并能做出正確的應(yīng)答而進(jìn)行后兩次(第二次和第三次)握手灌砖。
簡單來說:TCP的三次連接是雙工的璧函,為了保證雙工,必需保證服務(wù)器端和客戶端都能進(jìn)行發(fā)送和接收信息基显,實際是為了讓雙方的請求都能識別的到蘸吓,所以邏輯上至少執(zhí)行三次。
3.C語言的函數(shù)調(diào)用編譯成匯編代碼是怎樣的撩幽?可用X86或ARM匯編代碼回答库继。
http://www.cnblogs.com/mqmelon/p/4763913.html
4.block對外層函數(shù)的local變量的引用是如何工作的?
1.在MRC環(huán)境下,__block根本不會對指針?biāo)赶虻膶ο髨?zhí)行copy操作宪萄,而只是把指針進(jìn)行的復(fù)制
2.在ARC環(huán)境下舅桩,對于聲明為__block的外部對象,在block內(nèi)部會進(jìn)行retain雨膨,以至于在block環(huán)境內(nèi)能安全的引用外部對象,所以要謹(jǐn)防循環(huán)引用的問題
5.編譯器如何實現(xiàn)weak的读串?
weak 屬性特點(diǎn):weak 此特質(zhì)表明該屬性定義了一種“非擁有關(guān)系” (nonowning relationship)。為這種屬性設(shè)置新值時恢暖,設(shè)置方法既不保留新值排监,也不釋放舊值。此特質(zhì)同 assign 類似杰捂, 然而在屬性所指的對象遭到摧毀時舆床,屬性值也會清空(nil out)。
那么 runtime 如何實現(xiàn) weak 變量的自動置nil嫁佳?
runtime 對注冊的類挨队, 會進(jìn)行布局,對于 weak 對象會放入一個 hash 表中蒿往。 用 weak 指向的對象內(nèi)存地址作為 key盛垦,當(dāng)此對象的引用計數(shù)為0的時候會 dealloc,假如 weak 指向的對象內(nèi)存地址是a瓤漏,那么就會以a為鍵腾夯, 在這個 weak 表中搜索,找到所有以a為鍵的 weak 對象蔬充,從而設(shè)置為 nil蝶俱。
6.LLVM和GCC有哪些不同?可從多個角度來說。
含義解釋:
LLVM:LLVM最初是[Low Level Virtual Machine](http://en.wikipedia.org/wiki/Llvm)的縮寫饥漫,定位是一個虛擬機(jī)榨呆,但是是比較底層的虛擬機(jī)。它的出現(xiàn)正是為了解決編譯器代碼重用的問題趾浅,LLVM一上來就站在比較高的角度愕提,制定了LLVM IR這一中間代碼表示語言。LLVM IR充分考慮了各種應(yīng)用場景皿哨,例如在IDE中調(diào)用LLVM進(jìn)行實時的代碼語法檢查浅侨,對靜態(tài)語言、動態(tài)語言的編譯证膨、優(yōu)化等如输。
就現(xiàn)在來看,gcc大體等同于llvm+clang所提供的功能。很多人特別羨慕clang那強(qiáng)大的錯誤診斷信息不见,其實gcc4.8部分信息診斷能力已經(jīng)超過它了澳化。
不同點(diǎn):
1.所需要的寄存器不同:
llvm-gcc值用到了eax這一個寄存器,而gcc用到了eax稳吮, edx兩個寄存器
2.編寫的語言的不同
llvm-gcc:llvm默認(rèn)的前端是clang缎谷,當(dāng)然也可以用gcc做前端。llvm用c++寫的灶似,模塊化做的很好列林,因此可以很好的和clang,gcc等等更多的東西合作酪惭,能為ide提供更全的有用信息希痴。
gcc則包含的比較全面,整一個是一個宏結(jié)構(gòu)春感,沒有模塊化設(shè)計砌创,用c寫的,對ide也不太友好(實際上linux社區(qū)里似乎對ide一直不感冒)鲫懒。不過c++版的gcc正在重寫中嫩实,為了與llvm/clang更好的競爭,而且gcc從5.0開始打算進(jìn)行模塊化設(shè)計刀疙,所以舶赔,以后gcc內(nèi)部可能會分出很多部分。
3.內(nèi)存和性能
freebsd不用gcc是因為gpl協(xié)議谦秧,llvm/clang的協(xié)議更加自由竟纳,但llvm/clang目前的兼容性和參數(shù)優(yōu)化等等方面和gcc還有不小差距,雖然編譯后的體積更小了(架構(gòu)領(lǐng)先優(yōu)勢)疚鲤,但在性能優(yōu)化方面相比gcc還有很多事情要
4.缺點(diǎn)
gcc目前的問題就是缺乏模塊化設(shè)計锥累,這是暫時落后于llvm的地方
7.設(shè)計第三方分享模塊(即分享到微博,微信,QQ等)集歇,簡述主要的類桶略,要求對第三方庫做較好的封裝。
1.友盟
2.shareSDk :http://www.reibang.com/p/e374732f54f0
8.iOS/SDK存在或曾經(jīng)存在的bug
http://blog.csdn.net/andypan1314/article/details/8797216
9.微信是如何檢測用戶把手機(jī)放到耳朵旁邊的
使用近距離傳感器
[UIDevice](https://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html) 中有兩個近距離傳感器的屬性:proximityMonitoringEnabled 和 proximityState诲宇。這兩個屬性都是 iOS 3.0 及以上才支持的际歼。
proximityMonitoringEnabled 屬性
要確定近距離傳感器是否可用,可以嘗試啟用它姑蓝,即 proximityMonitoringEnabled = YES鹅心,如果設(shè)置的屬性值仍然為NO,說明傳感器不可用纺荧。
proximityState 屬性
傳感器已啟動前提條件下旭愧,如果用戶接近 近距離傳感器颅筋,此時屬性值為YES,并且屏幕已關(guān)閉(非休眠)输枯。And vice versa议泵。
代碼:http://www.cnblogs.com/daguo/p/3567791.html
10.假如最近收到很多用戶反饋說應(yīng)用很慢或者打不開,如何著手分析和解決這個問題桃熄?
慢的原因:用戶的電腦先口、手機(jī)的運(yùn)行環(huán)境、內(nèi)存大小瞳收、系統(tǒng)甚至程序間的兼容問題可能讓應(yīng)用“慢”下來池充;國內(nèi)復(fù)雜的網(wǎng)絡(luò)環(huán)境和參差不齊的上網(wǎng)方式會拖累應(yīng)用查詢的響應(yīng)速度;至于服務(wù)器缎讼、數(shù)據(jù)庫更是運(yùn)維人員照顧的重點(diǎn)。此外還有代碼坑匠,一條有問題的語句血崭,可能會損耗掉應(yīng)用數(shù)百毫秒響應(yīng)時間。
1.優(yōu)化簡化代碼
2.關(guān)掉不必要的推送
3.減少耗損程序的代碼:比如過多的動畫效果等
11.簡述方案厘灼,搭建一個自動化構(gòu)建系統(tǒng)夹纫,如果可能,一同搭建一個自動化測試系統(tǒng)设凹。
其實我也看不懂舰讹,放鏈接你們自己去看吧~
http://www.reibang.com/p/53b17f2c275e
版權(quán)歸屬于離離離離。
版權(quán)所有闪朱,翻版必究月匣,如若轉(zhuǎn)載,請注明出處奋姿。謝謝 ~