2021iOS面試題總結(jié)day1

今天剛剛開始面試,接下來這幾天把遇到的面試題總結(jié)如下:

1.內(nèi)存管理在實(shí)際開發(fā)中的應(yīng)用(必考革屠,已經(jīng)被問兩次了)

答:
1.UITableView的數(shù)據(jù)條數(shù)太多時會消耗內(nèi)存,可以給UITableViewCell、UICollectionViewCell虽界、UITableViewHeaderFooterView設(shè)置正確的復(fù)用ID烤咧,充分復(fù)用偏陪。

2.有透明度的View(alpha值在0到1之間),opaque的值應(yīng)該設(shè)置為YES煮嫌,可以優(yōu)化渲染系統(tǒng)笛谦、提高性能。(當(dāng)alpha值為0或1時昌阿,opaque的值對性能沒有影響)

3.避免過于龐大的XIB/StoryBord文件饥脑,當(dāng)加載XIB文件的時候,所有的內(nèi)容都會被加到內(nèi)存里懦冰,如果有一個不會立刻用到的View灶轰,就是在浪費(fèi)內(nèi)存資源。

4.不要讓主線程承擔(dān)過多的任務(wù)刷钢,否則會阻塞主線程笋颤,使app失去反應(yīng)。

5.加載本地圖片時内地,應(yīng)該保證UIImageView的大小和圖片的大小相同伴澄,因?yàn)榭s放圖片是很消耗資源的,特別是在UIImageView嵌套在UIScrollView中的情況下阱缓。如果是從網(wǎng)絡(luò)加載的圖片非凌,可以等圖片加載完成以后,開啟一個子線程縮放圖片荆针,然后再放到UIImageView中敞嗡。

6.在合適的場景下選擇合適的數(shù)據(jù)類型,對于數(shù)組:使用索引查詢很快航背,使用值查詢很慢喉悴,插入刪除很慢,對于字典:用鍵來查找很快玖媚,對于集合:用值來查找很快箕肃,插入刪除很快。

7.網(wǎng)絡(luò)下載文件時壓縮(目前AFNetworking已經(jīng)默認(rèn)壓縮)

8.當(dāng)UIScrollView嵌套大量UIView時會消耗內(nèi)存最盅,可以模仿UITableView的重用方式解決突雪,當(dāng)網(wǎng)絡(luò)請求的時候可以使用延遲加載來顯示請求錯誤的頁面起惕,因?yàn)榫W(wǎng)絡(luò)請求錯誤的頁面不會馬上用到涡贱,如果每次都先加載出來會消耗內(nèi)存。

9.不大可能改變但經(jīng)常使用的東西可以使用緩存惹想,比如cell的行高可以緩存起來问词,這樣reloaddata的時候效率會很高。還有一些網(wǎng)絡(luò)數(shù)據(jù)嘀粱,不需要每次都請求的激挪,應(yīng)該緩存起來辰狡,可以寫入數(shù)據(jù)庫,也可以寫入plist文件垄分。

10.在appDelegate和UIViewController中都有處理內(nèi)存警告的方法宛篇,注冊并接受內(nèi)存警告的通知,一旦收到通知就移除緩存薄湿,釋放不需要的內(nèi)存空間叫倍。

11.一些對象的初始化很慢,比如NSDateFormatter和NSCalendar豺瘤,但你又必須要使用它吆倦,這時可以重用它們,有兩種方式坐求,第一種是添加屬性到你的類蚕泽,第二種是創(chuàng)建靜態(tài)變量(類似于單例)

12.服務(wù)器端和客戶端使用相同的數(shù)據(jù)結(jié)構(gòu),避免反復(fù)處理數(shù)據(jù)桥嗤,UIWebView中盡可能少的使用框架须妻,用原聲js最好,因?yàn)閁IView的加載比較慢砸逊。

13.在循環(huán)創(chuàng)建變量處理數(shù)據(jù)的時候璧南,使用自動釋放池可以及時的釋放內(nèi)存。

14.加載本地圖片的時候师逸,如果只使用一次使用imageWithContentOfFile方法司倚,因?yàn)閕mageNamed方法會緩存圖片,消耗內(nèi)存篓像。

總結(jié):面試時我只答了內(nèi)存管理的法則和MRC动知、ARC、自動釋放池的區(qū)別员辩,并沒有說出內(nèi)存管理在實(shí)際開發(fā)中是怎樣運(yùn)用的盒粮,完全沒有答到點(diǎn)子上。

2.多線程的實(shí)際應(yīng)用場景奠滑,回到主線程的方法 (必考丹皱,已經(jīng)被問兩次)

在實(shí)際開發(fā)中可能會有一些耗時的操作,這時可以開辟一個子線程把耗時的操作放到子線程中宋税,當(dāng)耗時操作執(zhí)行完畢以后再回到主線程刷新UI摊崭。必須要在主線程刷新UI,因?yàn)槎嗑€程是不安全的杰赛,如果在子線程中刷新UI可能會導(dǎo)致未知錯誤呢簸。

回到主線程的方法是performSelectorOnMainTread

延時執(zhí)行的代碼:performSelector:onThread:withObject:waitUntillDone:

使用GCD回到主線程的方法:dispatch_get_main_queue()

使用GCD開啟線程:dispatch_async([??s??k] )

二者的區(qū)別:dispatch_async()不受運(yùn)行循環(huán)模式的影響

總結(jié):我只回答出了多線程的概念、優(yōu)點(diǎn),而面試官主要想聽的關(guān)鍵詞是:耗時根时、開啟子線程瘦赫、回到主線程刷新UI,所答非所問蛤迎,而且回到主線程的方法名字我也沒記住确虱。這段話很重要,幾乎所有的iOS技術(shù)面試都會問到替裆,一定要熟記于心蝉娜。

3.關(guān)于GCD的理解

答:GCD中有兩個核心概念,隊(duì)列和任務(wù)扎唾。隊(duì)列存放任務(wù)召川,任務(wù)的取出遵循FIFO原則。隊(duì)列其實(shí)就是線程池胸遇,在OC中以dispatch_queue_t表示荧呐,隊(duì)列分串行隊(duì)列和并發(fā)隊(duì)列。任務(wù)其實(shí)就是線程執(zhí)行的代碼纸镊,在OC中以Block表示倍阐。在隊(duì)列中執(zhí)行任務(wù)有兩種方式:同步執(zhí)行和異步執(zhí)行。

串行隊(duì)列:任務(wù)一個一個執(zhí)行逗威。

并發(fā)隊(duì)列:同一時間有多個任務(wù)被執(zhí)行峰搪。

區(qū)別:會不會有任務(wù)放在別的線程(因?yàn)椴l(fā)隊(duì)列是取出一個任務(wù)放到別的線程,再取出一個任務(wù)放到另一個線程凯旭,由于動作很快概耻,可以忽略不計(jì),所以看起來所有任務(wù)都是一起執(zhí)行的)

同步執(zhí)行:不會開啟新的線程罐呼,任務(wù)按順序執(zhí)行鞠柄。

異步執(zhí)行:會開啟新的線程,任務(wù)可以并發(fā)執(zhí)行嫉柴。

區(qū)別:會不會開啟新的線程厌杜。

組合:

同步串行隊(duì)列:one by one
異步串行隊(duì)列:one by one (因?yàn)榍耙粋€任務(wù)不執(zhí)行完畢,隊(duì)列不會調(diào)度)
同步并行隊(duì)列:one by one (因?yàn)橥綀?zhí)行不會開啟新的線程)
異步并發(fā)隊(duì)列:可以實(shí)現(xiàn)任務(wù)的并發(fā)计螺,經(jīng)常用到

主隊(duì)列:主隊(duì)列是串行隊(duì)列夯尽,只有一個線程,那就是主線程登馒,添加到主隊(duì)列中的任務(wù)會在主線執(zhí)行匙握。通過dispatch_get_main_queue獲取主隊(duì)列。

全局隊(duì)列:全局隊(duì)列是并發(fā)隊(duì)列谊娇》喂拢可以通過dispatch_get_global_queue獲取不同級別的全局隊(duì)列。

同步主隊(duì)列:死鎖卡住不執(zhí)行济欢。
主隊(duì)列異步:one by one (因?yàn)闆]有開啟新線程)

總結(jié):我只回答出了延時操作使用gcd赠堵,使用加載動畫時用到了dispatch_after方法,都太表面了法褥,面試官想要聽的是更深層次的理解茫叭,于是問了我關(guān)于任務(wù)和隊(duì)列,我沒有想到這方面半等,以后提到gcd首先要想到的就是任務(wù)和隊(duì)列揍愁,因?yàn)槿蝿?wù)和隊(duì)列是gcd的核心概念。

4.TCP杀饵、HTTP莽囤、WebSokect的區(qū)別

答:
IP協(xié)議(網(wǎng)絡(luò)層協(xié)議)
TCP:傳輸控制協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸切距,面向連接朽缎,可靠。(傳輸層協(xié)議)
UDP:用戶數(shù)據(jù)報協(xié)議谜悟,面向數(shù)據(jù)報话肖,不可靠。
HTTP:主要解決如何包裝數(shù)據(jù)葡幸。(應(yīng)用層協(xié)議)
Socket:是對TCP/IP協(xié)議的封裝最筒,Socket本身并不是協(xié)議,而是一個調(diào)用接口(API)蔚叨,通過Socket床蜘,我們才能使用TCP/IP協(xié)議。(傳輸層協(xié)議)

HTTP連接:短連接蔑水,客戶端向服務(wù)器發(fā)送一次請求悄泥,服務(wù)器端響應(yīng)連接后會立即端掉。
Socket連接:長連接肤粱,理論上客戶端和服務(wù)器端一旦建立連接將不會主動端掉弹囚。

建立Socket連接至少需要一對套接字,其中一個運(yùn)行于客戶端领曼,稱為ClientSocket鸥鹉,另一個運(yùn)行于服務(wù)器端,稱為ServerSocket庶骄。
套接字之間的連接過程分為三個步驟:服務(wù)器監(jiān)聽毁渗,客戶端請求,連接確認(rèn)单刁。

WebSocket是雙向通信協(xié)議灸异,模擬Socket協(xié)議,可以雙向發(fā)送或接受信息。HTTP是單向的肺樟。
Socket是傳輸控制層協(xié)議檐春,WebSocket是應(yīng)用層協(xié)議。

總結(jié):我自己簡歷上寫的東西我還不理解么伯,很尷尬疟暖,即使說不出來深層次的東西也應(yīng)該把他們的主要區(qū)別說出來。還有網(wǎng)絡(luò)七層模型一定要記住田柔,幾年前的面試官就問過我我就沒記住俐巴。

從底層到頂層分別是物理層、數(shù)據(jù)鏈路層硬爆、網(wǎng)絡(luò)層欣舵、傳輸層、會話層缀磕、表示層邻遏、應(yīng)用層。

5.iOS應(yīng)用程序的生命周期虐骑,最主要的是什么

application:willFinishLaunchingWithOptions: 程序啟動
application:didFinishLaunchingWithOptions: 入口准验,只執(zhí)行一次,啟動完成準(zhǔn)備開始運(yùn)行
applicationWillResignActive: 切換到非活動狀態(tài)廷没,如按下home鍵糊饱、切換程序
applicationDidBecomeActive: 切換到激活狀態(tài)
applicationDidEnterBackground: 應(yīng)用程序進(jìn)入后臺
applicationWillEnterForeground: 應(yīng)用程序?qū)⒁患せ?br> applicationWillTerminate: 應(yīng)用程序?qū)⒁顺?/p>

App的啟動過程:
打開程序——執(zhí)行main函數(shù)——UIAPPlicationMain函數(shù)——初始化UIAPPlicationMain函數(shù)(設(shè)置代理,開啟runloop)——監(jiān)聽系統(tǒng)事件颠黎,通知AppDelegate——程序結(jié)束

總結(jié):面試官問的是應(yīng)用程序的生命周期另锋,而我答的是Viewcontroller的生命周期,面試官主要想聽到的關(guān)鍵詞應(yīng)該是:main函數(shù)狭归、UIApplicationMain夭坪、AppDelegate、runloop过椎、監(jiān)聽

另外總結(jié)一下關(guān)于runloop的知識點(diǎn):

runloop:運(yùn)行循環(huán)室梅,在程序運(yùn)行過程中循環(huán)做一些事
runloop的作用:保持程序持續(xù)運(yùn)行、處理App中的各種事件疚宇、提高資源利用率
runloop在實(shí)際項(xiàng)目中的應(yīng)用:控制線程的生命周期亡鼠、解決NSTimer在滑動時停止工作的問題、監(jiān)控應(yīng)用的卡頓敷待、性能優(yōu)化

6.iOS的核心動畫 (必考间涵,已經(jīng)被問兩次)

答:動畫有兩種基本類型:隱式動畫(一直存在,需要手動關(guān)閉)和顯式動畫(不存在榜揖,需要手動創(chuàng)建)

UIView的動畫:

UIViewAnimationOptionCurveEaseInOut //時間曲線函數(shù)勾哩,由慢到快

UIViewAnimationOptionCurveEaseIn //時間曲線函數(shù)抗蠢,由慢到特別快

UIViewAnimationOptionCurveEaseOut //時間曲線函數(shù),由快到慢

UIViewAnimationOptionTransitionFlipFromLeft //轉(zhuǎn)場從左翻轉(zhuǎn)

UIViewAnimationOptionTransitionFlipFromRight //轉(zhuǎn)場從右翻轉(zhuǎn)

UIViewAnimationOptionTransitionCurlUp //上卷轉(zhuǎn)場

UIViewAnimationOptionTransitionCurlDown //下卷轉(zhuǎn)場

用法:animateWithDuration思劳、transitionWithView

CAAnimation動畫分類:

1.基礎(chǔ)動畫(如物品放入購物車進(jìn)行移動)( CABasicAnimation)
2.關(guān)鍵幀動畫迅矛,圖片幀(如人、動物走動)( CAKeyframAnimation)
3.轉(zhuǎn)場動畫(一個到另一個場景敢艰,如翻頁)( CATransition)
4.組合動畫( CAAnimationGroup)

可以做動畫的值:

1.形狀系列:frame bounds
2.位置系列:center
3.色彩系列:alpha color
4.角度系列:transform(旋轉(zhuǎn)的角度)

總結(jié):面試官問我如何做一個閃爍的效果,我答了改變顏色册赛,正確答案應(yīng)該是改變透明度钠导,還有問我做過哪些動畫效果,我只回答了一個我做過的效果森瘪,正常應(yīng)該按照動畫的分類牡属,把所有能實(shí)現(xiàn)的效果說一遍。

7.上傳大文件

答:可以分片上傳扼睬、斷點(diǎn)續(xù)傳

總結(jié):這個功能我沒做過逮栅,沒有答出來,但至少應(yīng)該知道大文件上傳的方法窗宇。

最后總結(jié):已經(jīng)好幾年沒面試了措伐,突然面試一下發(fā)現(xiàn)自己已經(jīng)把很多基礎(chǔ)知識都忘了,而且有些概念理解的根本就不透徹军俊,需要花功夫好好學(xué)習(xí)一下侥加。雖然很多概念在平時工作中用不到,但是理解這些是一個軟件工程師的基本素養(yǎng)粪躬,連這些最基礎(chǔ)的東西都不會担败,怎么敢說自己工作了好幾年,確實(shí)慚愧啊镰官。
:( 如果想成為高級軟件工程師提前,底層原理一定要掌握,掌握了底層原理才能開發(fā)出更高質(zhì)量的程序泳唠,否則不管干了多少年狈网,也只是初級中級的水平。希望在接下來的面試中繼續(xù)總結(jié)經(jīng)驗(yàn)和學(xué)習(xí)笨腥。

...未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孙援,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扇雕,更是在濱河造成了極大的恐慌拓售,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镶奉,死亡現(xiàn)場離奇詭異础淤,居然都是意外死亡崭放,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門鸽凶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來币砂,“玉大人,你說我怎么就攤上這事玻侥【龃荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵凑兰,是天一觀的道長掌桩。 經(jīng)常有香客問我,道長姑食,這世上最難降的妖魔是什么波岛? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮音半,結(jié)果婚禮上则拷,老公的妹妹穿的比我還像新娘。我一直安慰自己曹鸠,他們只是感情好煌茬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彻桃,像睡著了一般宣旱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叛薯,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天浑吟,我揣著相機(jī)與錄音,去河邊找鬼耗溜。 笑死组力,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抖拴。 我是一名探鬼主播燎字,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阿宅!你這毒婦竟也來了候衍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤洒放,失蹤者是張志新(化名)和其女友劉穎蛉鹿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體往湿,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妖异,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年惋戏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片他膳。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡响逢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棕孙,到底是詐尸還是另有隱情舔亭,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布蟀俊,位于F島的核電站钦铺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏欧漱。R本人自食惡果不足惜职抡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一葬燎、第九天 我趴在偏房一處隱蔽的房頂上張望误甚。 院中可真熱鬧,春花似錦谱净、人聲如沸窑邦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冈钦。三九已至,卻和暖如春李请,著一層夾襖步出監(jiān)牢的瞬間瞧筛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工导盅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留较幌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓白翻,卻偏偏與公主長得像乍炉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子滤馍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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