題目來源這里 本篇文章解答的是一般性問題,之前的2篇文章iOS開發(fā)-你能用到的面試題(一),iOS開發(fā)-你能用到的面試題(二)
最近這兩天你有學(xué)到什么知識/技能么?
面試官也知道你這兩天都在找工作,但是他還是這樣問的目的是想知道你對這兩天的面試準(zhǔn)備了什么?
參考答案:
第一,這兩天我對之前做的筆記整理了一下,對之前工作上遇到的BUG,坑進(jìn)行了梳理(這里說下遇到了哪些BUG或者坑).第二,要在新的工作中展現(xiàn)新的自己,告別過去.第三,對未來的自己定下一個目標(biāo)
最近有做過比較酷或者比較有挑戰(zhàn)的項(xiàng)目么?
這個問題著重點(diǎn)在于酷和挑戰(zhàn).酷是想問下你有沒有做過應(yīng)用很多動畫的項(xiàng)目,挑戰(zhàn)是想問下你有沒有做過什么有技術(shù)難點(diǎn),然后你把它逐一攻破的項(xiàng)目.但是如果沒做過也不能回答一句這個沒做過,面試官問這個問題主要是想看下你有沒有學(xué)習(xí)能力和解決問題的能力,一句沒做過會讓你減分不少.
參考答案:
酷這方面可以說自定義的炫酷的轉(zhuǎn)場動畫,還有一些細(xì)節(jié)上的動畫,譬如半糖的那個下拉刷新個人就覺得很酷,什么值得買里的商品百科里用到的動畫也很多.沒做過這方面沒事,但必須能說出一二點(diǎn)是如何實(shí)現(xiàn)這些動畫的,gihub上有很多關(guān)于動畫的小demo.
挑戰(zhàn)這方面?zhèn)€人覺得分兩方面.假如你是管理層的,可以說下你是如何解決團(tuán)隊(duì)中的沖突,如何代碼模塊化.假如你是技術(shù)這塊的,可以說下你在工作中遇到了哪些技術(shù)難點(diǎn),你是怎么去解決這個技術(shù)難點(diǎn)的等等.
最近看過的書/文章有哪些?
這個問題考察的也是你是否喜歡鉆研技術(shù),學(xué)習(xí)技術(shù),也可以從你看的書中大概明白你是屬于什么檔次的
參考答案:
最近在看《The Swift Programming Language》,喜歡看一些博客,如果有喜歡看英文文檔或者博客的這里可以重點(diǎn)說明下,畢竟很多公司都是需要程序員可以看懂英文文檔的.
為什么要學(xué)習(xí)編程,編程對你而言的樂趣在哪兒?
這個問題面試官想考察的是你對編程的認(rèn)知是什么,編程對于你而言是什么,你對編程的態(tài)度如何,你是否是對這個編程有濃厚的興趣而不是純粹的只是因?yàn)檫@行賺錢多才做這行
參考答案:
為什么學(xué)習(xí)編程這邊可以介紹下你是如何進(jìn)入這行的,樂趣對于我而言有以下幾點(diǎn)吧.第一,看著代碼一行行從指下敲出,然后慢慢構(gòu)建成一個完整的APP的那種愉悅感.第二,花費(fèi)長時間去解決一個BUG,當(dāng)最終解決掉這個BUG后那種酣暢淋漓的感覺.第三,有人問你問題,然后你幫忙解決以后,那種滿足的感覺.第四,你可以和懂技術(shù)的人聊天,就像大學(xué)時候大家一起聊LOL一樣
如果一個函數(shù)10次中有7次正確,3次錯誤,問題可能出現(xiàn)在哪里?
這個問題面試官考察的就是個人的水平的,還有你如何考慮問題,解決bug的能力.因?yàn)檫@個只是出錯,并沒有崩潰,看不到crash日志,也不能通過別的工具來定位錯誤
參考答案:
1.首先既然有正確有錯誤,那么這個bug肯定是不一定會出錯的,先看函數(shù)條件是否有漏寫
2.然后再檢查函數(shù)是否會存在空的情況
3.反復(fù)操作以上步驟去查明每個調(diào)用的函數(shù)結(jié)果都是正確的
自身最大優(yōu)點(diǎn)是什么,怎么證明?
這個問題其實(shí)蠻難回答的,大部分人要他列舉優(yōu)點(diǎn)會不知道該怎么講,就和別人問我你最喜歡你女友哪一點(diǎn)一樣,不知道該怎么去回答
參考答案:
最大優(yōu)點(diǎn)有點(diǎn)不好講,可以講講有哪些優(yōu)點(diǎn)
1.可以說學(xué)習(xí)能力強(qiáng),能很快接受新事物(這里就可以講講你最近學(xué)了一些什么新技術(shù))
2.筆者的話閑暇喜歡寫寫博客,回答回答群里的問題,看些博客,多記筆記,高仿些APP
3.如果你有參與過開源項(xiàng)目或者github上有什么開源項(xiàng)目這里也可以說出來
4.可以講下你覺得你技術(shù)最牛逼的地方,自己有專精的技術(shù)肯定要講出來,說的越多越好
開發(fā)常用的工具有哪些?
通過這個問題面試官也可以大概知道你是什么水平的,如果你只能講什么xcode,cocoapods或者xcode自帶的一些工具的話面試官也許就會把你定位于初級
參考答案:
1.友盟統(tǒng)計(jì)
2.青花瓷:這個軟件還是蠻不錯的,可以用來過濾網(wǎng)絡(luò)請求,模擬低速網(wǎng)路,還可以修改網(wǎng)絡(luò)請求內(nèi)容這些
3.Reveal:調(diào)試頁面不錯,還有用來學(xué)習(xí)別人的demo時候可以拿來看UI層次結(jié)構(gòu),還可以用來標(biāo)記可以設(shè)為透明的控件,用來優(yōu)化性能
熟悉 CocoaPods 么?能大概講一下工作原理么?
這個的話大部分人應(yīng)該都會用,可以講下CocoaPods有哪些注意點(diǎn),原理的話不講也沒啥事,畢竟這個工具大家只要會用就行
參考答案:
CocoaPods注意點(diǎn):CocoaPods在pod install以后會生成一個Podfile.lock的文件,這個文件在多人協(xié)作開發(fā)的時候就不能加入在.gitignore中,因?yàn)檫@個文件會鎖定當(dāng)前各依賴庫的版本,就算之后再pod install也不會更改版本,不提交上去的話就可以防止第三方庫升級后造成大家各自的第三方庫版本不同
CocoaPods原理:
1.Pods項(xiàng)目最終會編譯成一個名為libPods.a的文件,主項(xiàng)目只需要依賴這個.a文件即可
2.對于資源文件,CocoaPods提供了一個名為Pods-resources.sh的bash腳本,該腳本在每次項(xiàng)目編譯的時候都會執(zhí)行,將第三方的各種資源文件復(fù)制到目標(biāo)目錄中
3.CocoaPods通過一個名為Pods.xcconfig的文件在編譯時設(shè)置所有的依賴和參數(shù)
最常用的版本控制工具是什么,能大概講講原理么?
這個版本控制看公司要求了,git的工具是SourceTree,svn的工具是Cornetstore,原理的話把常用的幾個命令記一下就好,git的話大家可以看下廖雪峰寫的一本Git的書,github上大家可以搜下
今年你最想掌握的一門技術(shù)是什么?為什么?目前已經(jīng)做到了哪個程度?
最想掌握的技術(shù)肯定是自己不會的了,為什么,那肯定是想技術(shù)更牛逼嘛,什么程度呢就自己把握了.
參考答案:
個人的話今年想深入的研究一下動畫,并且把Switf鞏固下.這個答案其實(shí)想怎么說都行.
你一般是怎么用 Instruments 的?
這個問題也就是考察下你經(jīng)驗(yàn)如何了, Instruments里面工具很多,也沒必要逐一說明,挑幾個常用的說下就好
參考答案:
1.Time Profiler:性能分析
2.Zombies:檢查是否訪問了僵尸對象,但是這個工具只能從上往下檢查,不智能
3.Allocations:用來檢查內(nèi)存,寫算法的那批人也用這個來檢查
4.Leaks:檢查內(nèi)存,看是否有內(nèi)存泄露
你在你的項(xiàng)目中用到了哪些設(shè)計(jì)模式?
設(shè)計(jì)模式有很多,面試官肯定不想聽你把項(xiàng)目里的設(shè)計(jì)模式名字報給他,他想聽得肯定是你是怎么去用這些設(shè)計(jì)模式的
參考答案:
1.MVC:這個設(shè)計(jì)模型大部分應(yīng)用應(yīng)該都在用,介紹下MVC就好
2.單例:單例在項(xiàng)目中用的還是蠻多的,像登錄界面,對一些第三方框架二次封裝等等
3.KVC/KVO:這個用的應(yīng)該也很多,KVC用來替換掉系統(tǒng)的tabbar,用KVO來監(jiān)聽偏移量來完成下拉刷新,改變導(dǎo)航條背景顏色這些
4.工廠方法:這個用的更多了,設(shè)置一些自定義View肯定要用到這個設(shè)計(jì)模式
如何實(shí)現(xiàn)單例,單例會有什么弊端?
這個問題還是蠻簡單的,說下單例是怎么寫的,單例的缺點(diǎn)就好
參考答案:
// OC版
+ (instancetype)sharedInstance
{
static id sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
// Swift版
static let sharedInstance : <#SingletonClass#> = <#SingletonClass#>()
單例的缺點(diǎn)也就是會一直占著這塊內(nèi)存,不會被釋放
iOS 是如何管理內(nèi)存的?
這個問題的話上篇文章也提到過,講下block的內(nèi)存管理,ARC下的黃金法則
這里說下swift里的內(nèi)存管理:
delgate照樣weak修飾,閉包前面用[weak self],swift里的新東西,unowned,舉例,如果self在閉包被調(diào)用的時候可能為空,則用weak,反之亦然,如果為空時使用了unowned,程序會崩潰,類似訪問了懸掛指針,在oc中類似于unsafe_unretained,類似assign修飾了oc對象,對象被銷毀后,被unowned修飾的對象不會為空,但是unowned訪問速度更快,因?yàn)閣eak需要unwarp后才能使用