1.內(nèi)存管理
2.單例的理解
3.post和get的區(qū)別
4.md5和base64是什么,有什么區(qū)別
5.簡(jiǎn)單談?wù)刄DP和TCP(http和https)
6.談?wù)劧嗑€程吧?你在項(xiàng)目中一般那些地方用到多線程。gcd有幾種隊(duì)列。
7.設(shè)計(jì)一個(gè)多線程,分別下載三個(gè)圖片然后再將圖片組合。
8.x=1。線程a:{x++;}線程b:{x++;}為什么結(jié)果是x=2。
9.現(xiàn)在有一個(gè)資源網(wǎng)址(資源是什么未知),要請(qǐng)求這個(gè)資源你會(huì)怎么做(你會(huì)考慮哪些東西)?
10.assign和weak是什么,有什么區(qū)別?_block和_weak又是什么,有什么區(qū)別?(strong,nonatomic,readonly等)
11.oc語(yǔ)言的三大特點(diǎn)(面向?qū)ο笳Z(yǔ)言的特點(diǎn))。
12.數(shù)據(jù)庫(kù)。
13.自動(dòng)布局autolayout
14.#import、class和#include的區(qū)別
15.在一個(gè)對(duì)象的方法里面:self.name=“object”;和name= “object”有什么不同。
16.程序和頁(yè)面的生命周期
17.MVC的理解
18.KVC和KVO是什么,有什么區(qū)別
19.深淺復(fù)制的區(qū)別
20.frame 和bounds有什么不同
21.隊(duì)列和棧有什么區(qū)別
22.UIview和CLayer有什么區(qū)別?
23.類(lèi)別的作用?繼承和類(lèi)別在實(shí)現(xiàn)中有何區(qū)別?擴(kuò)展類(lèi)?
24.tableview的復(fù)用機(jī)制?
25.程序崩潰通常是因?yàn)樯对颉?/p>
26.有使用instrument么?簡(jiǎn)單談?wù)劙伞?/p>
27.自動(dòng)釋放池是什么,如何工作的。
28.ios數(shù)據(jù)存儲(chǔ)的方式有那些?
29.SDWebImage的原理。
30.程序性能的優(yōu)化和程序存儲(chǔ)大小的縮減(如何縮減.ipa文件的大小)。
人事
1.簡(jiǎn)單介紹下自己。
2.為什么會(huì)離職。
3.有什么關(guān)于公司想要了解的。
=========================================
一、多線程及網(wǎng)絡(luò)相關(guān)的問(wèn)題:
1.多線程的底層實(shí)現(xiàn)?
2.線程間怎么通信?
3.網(wǎng)絡(luò)圖片處理問(wèn)題中怎么解決一個(gè)相同的網(wǎng)絡(luò)地址重復(fù)請(qǐng)求的問(wèn)題?
4.用NSOpertion和NSOpertionQueue處理A,B,C三個(gè)線程,要求執(zhí)行完A,B后才能執(zhí)行C,怎么做?
5.列舉cocoa中常見(jiàn)對(duì)集中多線程的實(shí)現(xiàn),并談?wù)劧嗑€程安全的幾種解決辦法及多線程安全怎么控制?
6.gcd內(nèi)部怎么實(shí)現(xiàn)的
7.你用過(guò)NSOperationQueue么?如果用過(guò)或者了解的話,你為什么要使用NSOperationQueue,實(shí)現(xiàn)了什么?請(qǐng)描述它和GCD的區(qū)別和類(lèi)似的地方(提示:可以從兩者的實(shí)現(xiàn)機(jī)制和適用范圍來(lái)描述)。
8.既然提到GCD,那么問(wèn)一下在使用GCD以及block時(shí)要注意些什么?它們兩是一回事兒么?block在ARC中和傳統(tǒng)的MRC中的行為和用法有沒(méi)有什么區(qū)別,需要注意些什么?
9.在異步線程中下載很多圖片,如果失敗了,該如何處理?請(qǐng)結(jié)合RunLoop來(lái)談?wù)劷鉀Q方案.(提示:在異步線程中啟動(dòng)一個(gè)RunLoop重新發(fā)送網(wǎng)絡(luò)請(qǐng)求,下載圖片)
10.Socket的實(shí)現(xiàn)原理及Socket之間是如何通信的
11.http協(xié)議的實(shí)現(xiàn)
二、內(nèi)存管理相關(guān)的問(wèn)題:
1.怎么保證多人開(kāi)發(fā)進(jìn)行內(nèi)存泄露的檢查.
2.非自動(dòng)內(nèi)存管理情況下怎么做單例模式.
3.對(duì)于類(lèi)方法(靜態(tài)方法)默認(rèn)是autoRelease的。我添加的代碼導(dǎo)致了過(guò)渡釋放。所有類(lèi)方法都會(huì)這樣嗎?
4.block在ARC中和MRC中的用法有什么區(qū)別,需要注意什么
5.什么情況下會(huì)發(fā)生內(nèi)存泄漏和內(nèi)存溢出?
6.[Nsarry array withobject:]這個(gè)方法添加對(duì)象后,需要對(duì)這個(gè)數(shù)組做釋放操作嗎?
7.Josn數(shù)據(jù)的解析,和解析數(shù)據(jù)的時(shí)候有內(nèi)存泄露嗎?有的話如何解決
8.自動(dòng)釋放池底層怎么實(shí)現(xiàn)
三、C語(yǔ)言和Foundation相關(guān)的問(wèn)題
1.KVO內(nèi)部實(shí)現(xiàn)原理
2.是否可以把比較耗時(shí)的操作方在NSNotificationCenter中
3.Cocoa的Foundation對(duì)象與Core
Foundation對(duì)象有什么區(qū)別
4.不用中間變量,用兩種方法交換A和B的值
5.簡(jiǎn)單描述下對(duì)單利模式設(shè)計(jì)對(duì)理解?
6.什么是動(dòng)態(tài),舉例說(shuō)明
7.runtime實(shí)現(xiàn)的機(jī)制是什么,怎么用,一般用于干嘛.你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱(chēng)嗎?
8.是否使用過(guò)CoreText或者CoreImage等?如果使用過(guò),請(qǐng)談?wù)勀闶褂肅oreText或者CoreImage的體驗(yàn)。
9.NSNotification和KVO的區(qū)別和用法是什么?什么時(shí)候應(yīng)該使用通知,什么時(shí)候應(yīng)該使用KVO,它們的實(shí)現(xiàn)上有什么區(qū)別嗎?如果用protocol和delegate(或者delegate的Array)來(lái)實(shí)現(xiàn)類(lèi)似的功能可能嗎?如果可能,會(huì)有什么潛在的問(wèn)題?如果不能,為什么?(雖然protocol和delegate這種東西面試已經(jīng)面爛了…)
10.Block內(nèi)部的實(shí)現(xiàn)原理
11.有兩個(gè)數(shù)組a,b,大小都為n,數(shù)組元素的值任意,無(wú)序;
要求:通過(guò)交換a,b中的元素,使數(shù)組a元素的和與數(shù)組b元素的和之間的差最小
四、數(shù)據(jù)存儲(chǔ)相關(guān)的問(wèn)題
1.如果后期需要增加數(shù)據(jù)庫(kù)中的字段怎么實(shí)現(xiàn),如果不實(shí)用核心數(shù)據(jù)呢?
2.SQLite數(shù)據(jù)存儲(chǔ)是怎么用?
3.簡(jiǎn)單描述下客戶端到緩存機(jī)制?
4.你實(shí)現(xiàn)過(guò)多線程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在線程中創(chuàng)建或者傳遞?你是用什么樣的策略來(lái)實(shí)現(xiàn)的?
5.coredata數(shù)據(jù)遷移
五、UI控件相關(guān)的問(wèn)題
1.怎么解決緩存池滿的問(wèn)題,(cell)
2.CAAnimation的層級(jí)結(jié)構(gòu)
3.UIButton與UITableView的層級(jí)結(jié)構(gòu)
4.如何渲染自定義格式字符串的UILable
5.設(shè)置scroll view的contensize能在Viewdidload里設(shè)置么,為什么
6.按鈕或者其它UIView控件的事件傳遞的具體過(guò)程
7.控制器View的生命周期及相關(guān)函數(shù)是什么?你在開(kāi)發(fā)中是如何用的?
六、應(yīng)用程序相關(guān)的問(wèn)題
1.NSRunLoop的實(shí)現(xiàn)機(jī)制,及在多線程中如何使用
2.IOS7之前,后臺(tái)執(zhí)行內(nèi)容有幾種形式,都是什么
3.簡(jiǎn)單說(shuō)一下APP的啟動(dòng)過(guò)程,從main文件開(kāi)始說(shuō)起
4.把程序自己關(guān)掉和程序進(jìn)入后臺(tái),遠(yuǎn)程推送的區(qū)別
5.本地通知和遠(yuǎn)程推送通知對(duì)基本概念和用法?
七、第三方框架相關(guān)的問(wèn)題
1.第三方API是怎么用的?
2.列舉現(xiàn)在熟悉iOS開(kāi)發(fā)庫(kù)和第三方開(kāi)發(fā)庫(kù)?
八、其它相關(guān)的問(wèn)題
1.客戶端安全性處理方式?
2.簡(jiǎn)單描述下社交行為到步足?
3.sip是什么?
4.數(shù)據(jù)比較大的時(shí)候是用內(nèi)循環(huán),還是外循壞?
5.有些圖片加載的比較慢怎么處理?你是怎么優(yōu)化程序的性能的?
6.你實(shí)現(xiàn)過(guò)一個(gè)框架或者庫(kù)以供別人使用么?如果有,請(qǐng)談一談構(gòu)建框架或者庫(kù)時(shí)候的經(jīng)驗(yàn);如果沒(méi)有,請(qǐng)?jiān)O(shè)想和設(shè)計(jì)框架的public的API,并指出大概需要如何做、需要注意一些什么方面,來(lái)使別人容易地使用你的框架。
7.App需要加載超大量的數(shù)據(jù)給服務(wù)器發(fā)送請(qǐng)求,但是服務(wù)器卡住了如何解決?
8.利用NSNotificationCenter實(shí)現(xiàn)跨多控制器傳輸數(shù)據(jù)和消息中用同步還是異步?
9.如何編寫(xiě)xml
10.什么時(shí)候該使用通知,什么時(shí)候該使用KVO,如果用delegate來(lái)實(shí)現(xiàn)類(lèi)似功能可以嗎
11.地圖導(dǎo)航不能用了怎么辦
12.SDWebImage具體如何實(shí)現(xiàn)
13.AFN與ASI有什么區(qū)別
14.你在實(shí)際開(kāi)發(fā)中,有哪些手機(jī)架構(gòu)與性能調(diào)試經(jīng)驗(yàn)
15.runloop定時(shí)源和輸入源
16.你們項(xiàng)目中都用了哪些框架,及何種開(kāi)發(fā)工具,具體到是哪個(gè)版本,這個(gè)版本的特性有哪些???(比如xcode的版本)
17.自己怎么實(shí)現(xiàn)原子鎖
18.運(yùn)行時(shí)的內(nèi)部實(shí)現(xiàn)
19.即時(shí)通訊中的大數(shù)據(jù)處理
20.json解析的具體實(shí)現(xiàn)
21.runtime機(jī)制下,當(dāng)碰到多層嵌套而且數(shù)據(jù)有空值時(shí),怎樣防止錯(cuò)誤
22.還有一個(gè)問(wèn)題,就是如果在網(wǎng)絡(luò)數(shù)據(jù)處理過(guò)程中,發(fā)現(xiàn)一處比較卡,一般怎么解決
23.怎么介紹一個(gè)項(xiàng)目
24.怎么解決sqlite鎖定的問(wèn)題啊
25.AFN框架里面判斷WIFI和有無(wú)網(wǎng)絡(luò)的那4種情況。問(wèn)我他實(shí)現(xiàn)的原理是什么
======================================
1、簡(jiǎn)述一下UIViewController的生命周期?
2、#import和#include的區(qū)別?
3、寫(xiě)一個(gè)計(jì)算A、B中較大值的標(biāo)準(zhǔn)宏MAX?
4、談一下iOS中的多線程?
5、談一下Objective-C的內(nèi)存管理方式?
6、簡(jiǎn)述assign、retain、copy、weak和strong分別在什么情況下使用?
7、類(lèi)別的作用?說(shuō)一下類(lèi)別和類(lèi)擴(kuò)展的區(qū)別?
8、說(shuō)說(shuō)你對(duì)KVC和KVO的理解?
9、深復(fù)制和淺復(fù)制的區(qū)別?
10、談一下你對(duì)block的理解,請(qǐng)寫(xiě)一個(gè)block類(lèi)型的屬性?
11、frame和bounds的區(qū)別?
12、談一下UITableViewCell的重用機(jī)制?
13、簡(jiǎn)述一下消息推送的流程?
14、簡(jiǎn)述一下App發(fā)布到AppStore的流程?
15、談一下面向?qū)ο蟮膸讉€(gè)主要特征?
16、談一下你常用的一些設(shè)計(jì)模式及應(yīng)用場(chǎng)景?
17、談一下關(guān)鍵字static的作用?關(guān)鍵字const呢?
18、堆和棧的區(qū)別是什么?
19、break、continue、return的區(qū)別是什么?
20、int *p中*p和p的分別代表什么?
21、講一下OC和C有哪些區(qū)別?
22、談?wù)勀銓?duì)代理設(shè)計(jì)模式的理解?
23、談?wù)凥ttp協(xié)議,其中GET和POST有哪些區(qū)別?
24、談?wù)勀銓?duì)MVC開(kāi)發(fā)模式的理解及你是如何在項(xiàng)目中采用MVC模式開(kāi)發(fā)的?
25、談?wù)勀銓?duì)Socket的理解?TCP和UDP協(xié)議有什么區(qū)別
26、你常用的數(shù)據(jù)存儲(chǔ)方式有哪些?
27、通知中心和代理都可以用來(lái)發(fā)送消息和數(shù)據(jù),兩者有什么區(qū)別?
28、類(lèi)別和繼承有哪些區(qū)別?
29、你在項(xiàng)目當(dāng)中是如何進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求的?
30、你有做過(guò)iPhone6的屏幕適配嗎?在項(xiàng)目中你是如何進(jìn)行適配的?
=========================================
問(wèn)題陷阱
1、請(qǐng)你做一下自我介紹
2、你在找工作時(shí),最重要的考慮因素是什么?
3、你對(duì)我們公司了解多少?你為什么想來(lái)我們公司工作?
4、請(qǐng)談?wù)勀愕膬?yōu)點(diǎn)和缺點(diǎn)?
5、你為什么離開(kāi)上一家公司?
6、工作中曾面臨的最大困難是什么?如何解決的?
7、你的職業(yè)目標(biāo)是什么?(短期和長(zhǎng)期)
8、你是應(yīng)屆生,缺乏經(jīng)驗(yàn),如何勝任這份工作?
9、你對(duì)加班的看法?
10、你對(duì)薪資的要求?
11、你最擅長(zhǎng)的技術(shù)方向是什么?談?wù)勀阒白龅捻?xiàng)目?
12、你有什么問(wèn)題要問(wèn)我?
北京中德福林軟件科技有限公司
1、簡(jiǎn)述下蘋(píng)果的開(kāi)發(fā)框架?
2、常用的ios設(shè)計(jì)模式有哪些?
3、簡(jiǎn)敘述下蘋(píng)果開(kāi)發(fā)者的認(rèn)證過(guò)程,以及上傳應(yīng)用,怎么供給其他開(kāi)發(fā)者進(jìn)行使用?
4、繼承跟類(lèi)別的區(qū)別,為什么要有類(lèi)別的存在?
5、簡(jiǎn)述下ios6新增的新特性?
6、簡(jiǎn)述ARC的機(jī)制原理
7、簡(jiǎn)單編寫(xiě)一個(gè)block代理?
8、怎么解決ios5,ios6中橫豎屏的問(wèn)題?
9、MVC是什么?有什么特性?為什么在iphone上被廣泛運(yùn)用?
10、委托是什么?委托的property聲明用什么屬性?為什么?
11、項(xiàng)目使用過(guò)哪些第三方庫(kù)?
12、怎么實(shí)現(xiàn)tableView懶加載?
13、編寫(xiě)一個(gè)singleton的類(lèi)?
14、開(kāi)發(fā)過(guò)程中最常見(jiàn)的異常有哪些,列舉幾個(gè)?
藝恩
1、假設(shè)有一個(gè)字符串a(chǎn)abcad,請(qǐng)編寫(xiě)一段程序。去掉字符串中不相鄰的重復(fù)字符,即上述字符串處理之后的輸出結(jié)果為:aabcd。
2、獲取一臺(tái)設(shè)備唯一標(biāo)識(shí)的方法有哪些?
3、寫(xiě)一個(gè)NSString類(lèi)的實(shí)現(xiàn)?
愛(ài)卡汽車(chē)
1、寫(xiě)出以下的NSLog的輸出格式
intNSStringfloat/double
2、[ UIImageimagewithnamed:@”xx.png”];好處壞處?
3、這是同步還是異步取得數(shù)據(jù)
ASIHTTPRequest*request=[ ASIHTTPRequestrequestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
4、寫(xiě)一個(gè)委托的interface。
5、列舉一下你們常用的UI控件
6、如何管理內(nèi)存?
7、使用UITableView時(shí)候必須要實(shí)現(xiàn)得幾個(gè)方法?
8、列舉一下你們用過(guò)的xml或是json接口的樣式?
9、簡(jiǎn)述一下在ios開(kāi)發(fā)中SQLite的使用方法(以文字或是代碼的形式來(lái)敘述)
10、談?wù)勀銓?duì)ios下的多線程開(kāi)發(fā)的理解。
11、如何設(shè)計(jì)一個(gè)新聞瀏覽。評(píng)論的app。簡(jiǎn)述一下用到的開(kāi)發(fā)技術(shù),和實(shí)現(xiàn)方式。
龍宇北騰
1、ios類(lèi)是否可以多繼承,淺復(fù)制和深復(fù)制有什么區(qū)別?
2、堆和棧的區(qū)別?
3、內(nèi)存管理Autorelease、retain、,copy、assign的set方法和含義?
4、請(qǐng)寫(xiě)出ios組件,要求不低于20個(gè)?
5、寫(xiě)出方法獲取ios內(nèi)存使用情況?
6、ios本地?cái)?shù)據(jù)存儲(chǔ)都有哪幾種方式?
7、在已越獄設(shè)置中ios如何強(qiáng)制信息通知?
北京融易通信息技術(shù)有限公司
1、NSArray與NSMutableArray的區(qū)別,多線程操作哪個(gè)更安全?
2、copy和retain有什么區(qū)別?那么原子(atomic)和非原子(nonatomic)屬性又有什么區(qū)別
3、選擇一種iOS常用的設(shè)計(jì)模式,并作簡(jiǎn)要介紹
4、unsigned int和int有什么區(qū)別。假設(shè)int長(zhǎng)度為65535,請(qǐng)寫(xiě)出unsigned
int與int的取值范圍
5、介紹一下iOS sandbox的層級(jí)結(jié)構(gòu),我們經(jīng)常使用到的NSUserDefauits它的保存路徑是什么?
6、描述UIButton和UITableView的層級(jí)結(jié)構(gòu)(即該類(lèi)的父類(lèi)父類(lèi)的父類(lèi))
7、解釋MyClass * object1 = [[[MyClass alloc] init [object2hello]autorelease]
8、能否了解過(guò)category的實(shí)現(xiàn)原理,為什么category只能為對(duì)象增加成員變量
編程題:
9、使用Delegate或者Block實(shí)現(xiàn)類(lèi)之間的通訊
10、當(dāng)前有一個(gè)數(shù)組,里面有若干重復(fù)的數(shù)據(jù),如何除去重復(fù)的數(shù)據(jù)
鳳凰網(wǎng)真實(shí)面試題
1、關(guān)鍵字volatile有什么含義?并給出三個(gè)不同的例子
2、簡(jiǎn)述static關(guān)鍵字的作用
3、#import和#include的區(qū)別@class呢
4、線程和進(jìn)程的區(qū)別和聯(lián)系
5、簡(jiǎn)述堆和棧的區(qū)別
6、簡(jiǎn)述Objective - c內(nèi)存管理
7、為什么內(nèi)置類(lèi)如UITableVIewController的delegate屬性都是assign?
8、定義屬性時(shí),什么情況適用copy assign和retain
9、對(duì)象在什么時(shí)候被release
10、iPhone OS有沒(méi)有垃圾回收機(jī)制
11、ViewController的loadView、viewDidLoad、viewDidUnLoad分別是在什么時(shí)候調(diào)用?自定義ViewController的時(shí)候這幾個(gè)函數(shù)在里面做什么
12、ViewColntroller的didRectiveMemoryWarning是在什么時(shí)候被調(diào)用?默認(rèn)操作是什么
13、列舉Cocoa中長(zhǎng)用得幾種多線程實(shí)現(xiàn),并談?wù)劙踩詥?wèn)題的幾種方案,什么地方會(huì)用到多線程
14、你是怎么理解MVC的, 在Cocoa中MVC是怎么實(shí)現(xiàn)的
15、用預(yù)處理指令#define生命一個(gè)常數(shù)沒(méi)用你表明一年有多少秒
16、Objecative—有多重繼承么?不是的話有什么替代方法
17、關(guān)鍵字const有什么含義
汽車(chē)之家真實(shí)面試題
1、請(qǐng)寫(xiě)出以下代碼的執(zhí)行結(jié)果:
NSString * name =[[NSString alloc] init];
name = @“ Habb ”;
[name release];
2、異常通常有哪些方式?
3、id是什么類(lèi)型?何時(shí)使用?
4、委托的概念是什么
5、繼承可以有多個(gè)parent么?
6、isKingOfClass與isMemberOfClass以及selector作用分別是什么
7、7、@class和#import的區(qū)別是什么
8、object c中有私有方法定義么?
9、category的作用是什么?
10、iOS應(yīng)用開(kāi)發(fā)中常用的UI控件有哪些?
11、使用宏應(yīng)該注意哪些問(wèn)題?
12、堆和棧的區(qū)別是什么?
13、說(shuō)說(shuō)你對(duì)retain、copy、strong、assign的理解
14、dealloc、release、autorelease的區(qū)別是什么?簡(jiǎn)述它們是如何工作的?
15、UIViewVontroller的didRectlveMemoryWarning是在什么時(shí)候被調(diào)用
16、protocal是什么?如何使用?
17、說(shuō)說(shuō)你對(duì)線程的理解?
18、說(shuō)說(shuō)你對(duì)MVC的理解?
杉德面試題
1、iOS允許最近本地通知數(shù)最大是多少
A.16B.32C.64D.128
2、int sum =0 ;
for ( int i= 0 , i < 5,I ++){
for( int j = 0, j < 3, j++){
sum = i + j ;
}
}
請(qǐng)問(wèn)sum等于多少
A.3B.4C.5D.6
3、iOS自動(dòng)布局首先出現(xiàn)在哪個(gè)iOS系統(tǒng)中?
A.iOS4.0B.iOS5.0
C.iOS6.0D.iOS7.0
4、讓一個(gè)UIView刷新的方法是
A.setNeedsDisplayB.drawPect
C.loadViewD.initWithFrame
5、objective—C中category是什么
A.類(lèi)目B.協(xié)議
C.延展D.代理
6、int m =0; int n = m++; m= n ++,請(qǐng)問(wèn)m的結(jié)果是什么
A.0B.1C.2D.3
7、要實(shí)現(xiàn)自定義對(duì)象的歸檔必須實(shí)現(xiàn)的協(xié)議是
A.NSCopyingB.NSCoding
8、指出深拷貝和淺拷貝的區(qū)別
9、指出protocal和notification的區(qū)別和使用方式
10、Objective—C的內(nèi)存管理機(jī)制
11、纖細(xì)說(shuō)明kvc和kvo的區(qū)別和在什么情況下使用
12、什么是UITableView的重用機(jī)制
13、有一個(gè)序列M,如何判斷其中是否有兩個(gè)元素A、B的和為K?如何判斷三個(gè)元素A、B、C的和為K
高德面試題
1、簡(jiǎn)述Object-C的內(nèi)存管理方式及過(guò)程(非ARC)?
2、什么時(shí)候需要在程序中創(chuàng)建內(nèi)存池(autorelease
pool)?
3、寫(xiě)一個(gè)setter方法用于完成@property(nonatomic,retain)NSString*name;
a)寫(xiě)一個(gè)setter方法用于完成@property(nonatomic,copy)NSString*name?
4、什么時(shí)候使用NSMutableArray,什么時(shí)候使用NSArray?他們的線程安全性如何?
5、簡(jiǎn)述#import與#include的區(qū)別,@class呢?
6、簡(jiǎn)述繼承和類(lèi)別(categories)的區(qū)別?
7、什么是KVO和KVC?
8、什么事lazy loading?有什么地方用到了?
9、你經(jīng)常使用類(lèi)NSObject的哪些方法?
10、寫(xiě)出獲取單例(Singleton)的類(lèi)方法,考慮多線程的問(wèn)題?
11、用object-c寫(xiě)一個(gè)冒泡排序函數(shù),輸入為一個(gè)儲(chǔ)存NSNumber的可變數(shù)組,輸出void?
快約真實(shí)面試題
1、OOP設(shè)計(jì)遵循什么樣的原則
2、例舉一些你擅長(zhǎng)的設(shè)計(jì)模式
3、介紹一下你最擅長(zhǎng)的設(shè)計(jì)模式
4、了解過(guò)哪些UML圖
5、如果設(shè)計(jì)一個(gè)交易平臺(tái),流程如下:A用戶在平臺(tái)P發(fā)現(xiàn)B用戶有東西出售,P平臺(tái)的業(yè)務(wù)邏輯是需要A先付款到P得中間賬戶,等到A確認(rèn)收貨后,P向B付款,你能?chē)L試某種表示方式來(lái)讓程序員,產(chǎn)品設(shè)計(jì),美術(shù)設(shè)計(jì)明白這個(gè)流程么?
6、你最常用的設(shè)設(shè)計(jì)模式有哪些?
7、OC中如何實(shí)現(xiàn)繼承
8、OC是否有指針的概念
9、NS/CF/CG/CA/UI這些前綴分別是什么含義
10、OC中最常用的類(lèi),時(shí)間,UI元素,庫(kù),以及第三方庫(kù)?
11、如果你來(lái)指導(dǎo)新人入手OC的學(xué)習(xí),你會(huì)如何讓劃分學(xué)習(xí)路徑?
12、從其他語(yǔ)言轉(zhuǎn)向OC開(kāi)發(fā),需要有哪些適應(yīng)?
13、如何實(shí)現(xiàn)一個(gè)布局?以及嵌套布局?
14、如何實(shí)現(xiàn)多層UI?
15、OC中有哪些事件
16、動(dòng)畫(huà)如何實(shí)現(xiàn)?如果自己實(shí)現(xiàn)動(dòng)畫(huà),該如何考慮
17、OC中如何做內(nèi)存管理?何時(shí)需要手動(dòng)管理
18、如果A引用B1,B1引用C1,然后B2也引用C1,現(xiàn)在B1釋放了C1如何做到B2也自動(dòng)釋放C1
19、有哪些實(shí)現(xiàn)多線程的方式?有哪些庫(kù)?
20、多線程沖突如何解決
21、iOS運(yùn)行時(shí)至少運(yùn)行了幾種線程?分別是什么
22、OC中異步使用的哪種事件模型
23、聊聊iOS中異步實(shí)現(xiàn)機(jī)制
24、如何指定使用哪個(gè)函數(shù)來(lái)處理異步結(jié)果
25、iOS的核心是什么
26、為什么MVC與PC不一樣?有哪些不一樣?
27、你認(rèn)為iOS開(kāi)發(fā)和Android開(kāi)發(fā)有什么相通之處?為什么?
28、iOS中包含哪些信息?
29、Xcode調(diào)試時(shí)如何及時(shí)產(chǎn)看表達(dá)式的值
30、清告訴你的客戶為什么要升級(jí)到iOS7
31、介紹一下你最常用的數(shù)據(jù)結(jié)構(gòu)
32、計(jì)算過(guò)程最重要的信息是什么?
33、iOS對(duì)網(wǎng)絡(luò)的定義中,分了幾層?分別是哪幾層?
34、訪問(wèn)方法GET和POST的區(qū)別是什么?
35、HTTP頭是什么樣子的?其中有哪些信息?哪些信息是必須的?
36、客戶端渡河將二進(jìn)制數(shù)據(jù)傳送給服務(wù)器
37、以前的項(xiàng)目如何保證安全
38、在客戶端與服務(wù)器端結(jié)合開(kāi)發(fā)的整合系統(tǒng)中,客戶端與服務(wù)器端分貝適合做什么?客戶端不能做什么?
39、HTTP與HTTPS過(guò)程分別是什么樣子?有何異同
40、你在工作過(guò)程中,覺(jué)得最重要的能力有哪些?怎么獲得這些能力
41、能否告訴我們你對(duì)自己的未來(lái)是如何規(guī)劃的?現(xiàn)階段你學(xué)要什么?
42、在校期間學(xué)習(xí)了哪些專(zhuān)業(yè)課程?
43、如何學(xué)習(xí),聊聊你在學(xué)習(xí)方面的習(xí)慣
44、如何解決問(wèn)題?
45、在校期間哪些課程學(xué)的比較好?
46、告訴我們,你常活躍的社區(qū),賬號(hào)
47、為什么離開(kāi)上家公司?為什么是現(xiàn)在離開(kāi)?
48、聊聊最精彩的實(shí)現(xiàn)實(shí)例
49、談?wù)勔郧白钕矚g的同事
50、薪資要求
51、我們的問(wèn)題雖多,但還是不能全面挖掘你的潛力。能否聊聊哪些方面比較擅長(zhǎng)?我們沒(méi)有問(wèn)到的?
終端中心面試題目
1、有一個(gè)老板類(lèi)boss類(lèi),一個(gè)助理類(lèi)assistant類(lèi),讓助理實(shí)現(xiàn)發(fā)工資方法payOff(),在第三個(gè)類(lèi)user類(lèi)里調(diào)用(delegate實(shí)現(xiàn))
2、2.@interfaceViewController:UIViewController
{
NSData*_c;
}
@property(nonatomic,retain)NSData *a;
@property(nonatomic,copy)NSData *b;
@property(nonatomic,copy)NSData *c;
@implementation ViewController
@synthesize a;
@synthesize b;
@synthesize c = _c;
-(void)viewDidLoad
{
[super viewDidLoad];
NSData *e = [[NSData alloc]init];
NSData *d;
self.a = 0;
self.b = 0;
d = 0;
_c = 0;
self.c = 0;
NSLog(@“count====%d”,[e reatinCount]);
}
retainCount值是多少?
3、簡(jiǎn)述delegate,KVO,NSNotification區(qū)別?
4、IOS動(dòng)畫(huà)處理如何做出彈性效果?
5、IOS中類(lèi)方法的好處?
6、請(qǐng)寫(xiě)出結(jié)果
void main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a+1);
printf(“%d,%d\n\n”,*(a+3),*(ptr-2));
}
7、用指針?lè)椒▽⒆址癱arsmart123456”對(duì)調(diào)顯示
珍品網(wǎng)面試題
1、求以下程序段的輸出
int func(int x)
{
int countx = 0;
while(x){
countx++;
x=x&(x-1);
}
return counts;
}
int main(int argc,constchar*argv[])
{
@autoreleasepool{
NSLog(@“%d”,func(2013));
}
return 0;
}
2、什么時(shí)候使用NSMutableArray,什么時(shí)候使用NSArray?
3、你所了解的單例有哪些?請(qǐng)寫(xiě)一個(gè)單例的示例代碼?
4、請(qǐng)寫(xiě)出使用委托(代理)的示例代碼?
5、寫(xiě)出控制器加載視圖的常規(guī)調(diào)用方法流程?
6、Objective-C有多繼承么?不是的話,如何解決?
7、請(qǐng)寫(xiě)出下面代碼的打印結(jié)果(默認(rèn)在32位機(jī)器下運(yùn)行)
char a[] = “hello world”;
char *p = a;
NSLog(@“%ld”,sizeof(a));
NSLog(@“%ld”,sizeof(p));
如果在64位機(jī)器上運(yùn)行
8、檢查如下代碼是否有問(wèn)題,如果有問(wèn)題,正確的寫(xiě)法是?
-(void)setTarget:(NSObject*)target
{
self.target = target;
}
9、指出下面代碼的問(wèn)題
-(void)willEndStepOne:(NSObject*)userInfo
{
[NSThreaddetachNewThreadSelector:@selector(doSomeThing:)toTatget:selfwithObject:userInfo];
}
-(void)doSomeThing:(NSObject*)userInfo
{
int max_loop_times = 999999;
for(int i=0,i
int randNum = rand();
NSString *tmpString =[NSString stringWithFormat:@“%d”,randNum];
NSLog(@%@“,tmpString);
}
}
10、談?wù)剬?duì)Block的理解?并寫(xiě)出一個(gè)使用Block執(zhí)行UIView動(dòng)畫(huà)?([UIView
transitionWithView:duration:animations:completion:];)
11、做過(guò)的項(xiàng)目是否涉及網(wǎng)絡(luò)訪問(wèn)功能,使用什么對(duì)象完成網(wǎng)絡(luò)功能?
12、簡(jiǎn)單介紹下NSURLConnection類(lèi)及+sendS也能長(zhǎng)榮歐式Request:returningRespinse:error:與-initWithRequest:delegate:兩個(gè)方法的區(qū)別?
13、在iPhone應(yīng)用中如何保存數(shù)據(jù)?
北京銀達(dá)面試題
1、截止到2012年1月,iPhone手機(jī)所使用的操作系統(tǒng)最新版本是多少?
A .4.2B. 4.3C. 5.0D.5.0.1
2、以下設(shè)備中,iPhone軟件開(kāi)發(fā)一般不會(huì)涉及的是?
iPhoneB.iPod touchC.ThinkpadD.iPad
3、在一個(gè)最常見(jiàn)的Xcode工程中,通常不會(huì)出現(xiàn)的文件擴(kuò)展名是?
A.PNGB.XIBC.MD.CPP
4、曹某在Interface Builder中繪制了一個(gè)按鈕,并想在代碼中修改這個(gè)按鈕上的文字,一般是通過(guò)什么方式讓代碼與界面中的按鈕建立聯(lián)系的?
A.OutletB.ActionC.EventD.Build
5、客戶有一份聯(lián)系人名單,是聯(lián)系人姓名和電話的對(duì)應(yīng)關(guān)系,需要從遠(yuǎn)程服務(wù)器動(dòng)態(tài)獲取,并在內(nèi)存中暫存,以供界面調(diào)用,以下數(shù)據(jù)結(jié)構(gòu)中適合此要求的是?
A.DictionaryB.HashMapC.NSMutableURLRequestD.NSDictionary
6、iPhone應(yīng)用可以相應(yīng)用戶旋轉(zhuǎn)手機(jī)屏幕的操作,并根據(jù)當(dāng)前手機(jī)所處的方向來(lái)決定內(nèi)容如何顯示,請(qǐng)問(wèn)表示iPhone手機(jī)默認(rèn)朝向的時(shí)以下哪種代碼?
A.UIInterfaceOrientationPortralt
B.UIInterfaceOrientationPortraltUpsideDown
C.UIInterfaceOrientationLandscapeLeft
D.UIInterfaceOrientationLandscapeRight
7、曹某在自己的業(yè)務(wù)類(lèi)中寫(xiě)了一個(gè)方法,能動(dòng)態(tài)創(chuàng)建一個(gè)NSObject對(duì)象的實(shí)例objA,并以其作為方法的返回值。但應(yīng)用在調(diào)試過(guò)程中總是發(fā)生內(nèi)存泄露,經(jīng)跟蹤是這個(gè)方法出了問(wèn)題。請(qǐng)問(wèn)曹某再次方法中漏寫(xiě)了什么。
A.[objA release];B.[objA alloc];C.[objA autorelease];D.[objAretain];
曹某謝了一個(gè)金融應(yīng)用,由于金融交易過(guò)程較為敏感不適合被中途打斷,此外客戶的手機(jī)同時(shí)還運(yùn)行著其他重要的應(yīng)用,他決定讓自己的應(yīng)用盡可能的減小不必要的資源占用。請(qǐng)?jiān)嚮卮鹨幌聠?wèn)題。
8、曹某在自己的手機(jī)上調(diào)試此應(yīng)用時(shí),發(fā)現(xiàn)程序代碼收到了系統(tǒng)方法來(lái)的內(nèi)存警告事件,他應(yīng)該在didReceiveMemoryWarning方法中實(shí)現(xiàn)的操作室?
A.清理當(dāng)前所有狀態(tài)信息,并退回登陸界面
B.顯示對(duì)話框以提醒使用者
C.將此情況通知遠(yuǎn)程服務(wù)器進(jìn)行記錄
D.以上皆非
9、客戶要求此應(yīng)用一直駐留后臺(tái),定時(shí)從遠(yuǎn)程服務(wù)器獲取最新數(shù)據(jù),在允許違反官方應(yīng)用設(shè)計(jì)規(guī)范的前提下,不能實(shí)現(xiàn)此要求的方法是?
A.實(shí)現(xiàn)后臺(tái)位置服務(wù)接口
B.實(shí)現(xiàn)VoIP接口
C.實(shí)現(xiàn)音樂(lè)播放器接口
D.實(shí)現(xiàn)后臺(tái)延時(shí)任務(wù)接口
10、客戶修改了需求,要求按home鍵退出應(yīng)用之后,下次再進(jìn)入時(shí)不保留上次應(yīng)用所處的狀態(tài),直接回到初始界面,要實(shí)現(xiàn)此功能最好的方法是?
A.響應(yīng)系統(tǒng)發(fā)出的applicationDidEnterBackground事件,并清理所有狀態(tài)信息
B.相應(yīng)系統(tǒng)發(fā)出的applicationWillEnterForeground事件,并清理所有狀態(tài)信息
C.相應(yīng)系統(tǒng)發(fā)出的applicationWillTerminate事件,并清理所有狀態(tài)信息
D.修改應(yīng)用plist,放棄多任務(wù)支持
11、簡(jiǎn)答題二選一:
使用TabBarController和NavigationController實(shí)現(xiàn)一個(gè)iPhone基本應(yīng)用的界面,請(qǐng)簡(jiǎn)單畫(huà)出根視圖和若干子視圖之間的嵌套關(guān)系。
實(shí)現(xiàn)一個(gè)基本的iPad應(yīng)用,請(qǐng)簡(jiǎn)單畫(huà)出根視圖和其他視圖之間的嵌套關(guān)系。
12、簡(jiǎn)答題:請(qǐng)簡(jiǎn)述你所開(kāi)發(fā)的應(yīng)用在過(guò)去某次iPhone系統(tǒng)版本更新后遇到的API兼容問(wèn)題,以及時(shí)如何解決的。
13、編程題:現(xiàn)有一個(gè)控制器是UITableViewController的子類(lèi),其中一個(gè)名叫functions的屬性是包含了tableView個(gè)選項(xiàng)名稱(chēng)的NSArray對(duì)象,另有一個(gè)images屬性是包含了各選項(xiàng)圖片的NSArray對(duì)象。在不考慮復(fù)用UITableViewCell節(jié)省內(nèi)存的前提下,請(qǐng)實(shí)現(xiàn)其中的如下方法:
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
注:UITableViewCell通過(guò)textLable和imageView屬性來(lái)設(shè)置名稱(chēng)和圖片。
搜房網(wǎng)面試題
1、Object-c的類(lèi)可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Category是什么? 重寫(xiě)一個(gè)類(lèi)的時(shí)候是繼承好還是分類(lèi)好? 為什么 ?
2、#import跟#include有什么區(qū)別#import<>跟#import有什么區(qū)別?
3、類(lèi)變量的@protected,@private,@public,@package聲明各有什么含義?
4、id聲明的對(duì)象有什么特性?
5、對(duì)于語(yǔ)句N(xiāo)sstring*testObject=[NSData alloc]init];testObject在編譯時(shí)和運(yùn)行時(shí)…..的對(duì)象。
6、MVC是什么 ?有什么特征?為什么在iphone上被廣泛運(yùn)用?
7、什么是安全釋放?
8、property中屬性retain,copy,assgin的含義分別是什么?有什么區(qū)別?將其轉(zhuǎn)換成get/set方法怎么做?有什么注意事項(xiàng)?
-(void)setInstance:(id)instance{
if (_instance != instance) {
[_instance release];
_instance = [instance retain];
}
}
-(void)setInstance:(id)instance{
if (_instance != instance) {
[_instance release];
_instance = [instance copy];
}
}
-(void)setInstance:(id)instance{
if (_instance != instance) {
_instance = instance;
}
}
9、淺拷貝和深拷貝區(qū)別是什么?
10、
for(int index=0;index<20 index++){
NSString
*tenpStr=@“tempStr”;
NSLog(tempStr);
NSNumber*tempNumber=[NSNumbernumberWithint:2];
NSLog(tempNumber);
}
這段代碼有什么問(wèn)題.?會(huì)不會(huì)造成內(nèi)存泄露(多線程)?在內(nèi)存緊張的設(shè)備上做大循環(huán)時(shí)自動(dòng)釋放池是寫(xiě)在循環(huán)內(nèi)好還是循環(huán)外好?為什么??
11、內(nèi)存管理的幾天原則是什么?按照默認(rèn)法則,哪些關(guān)鍵字生成的對(duì)象需要手動(dòng)釋放內(nèi)存的時(shí)候怎樣有效地避免內(nèi)存泄露?
12、在一個(gè)對(duì)象釋放前.如果他被加到了notificationCenter中.不在notificationcenter中remove這個(gè)對(duì)象可能會(huì)出現(xiàn)什么問(wèn)題?
13、怎樣實(shí)現(xiàn)一個(gè)singleton的類(lèi),給出思路。
14、什么是序列化或者Acrchiving,可以用來(lái)做什么,怎樣與copy結(jié)合,原理是什么
15、線程是什么? 有什么注意事項(xiàng)?
16、在iphone上有兩件事情要做,請(qǐng)問(wèn)是在一個(gè)線程里按順序做效率高還是兩個(gè)線程里做效率高?為什么?.
17、runloop是什么?在主線程中的某個(gè)函數(shù)里調(diào)用了異步函數(shù),怎么樣block當(dāng)前線程,且還能響應(yīng)當(dāng)前線程的timer事件,touch事件等?
未命名1
1、打開(kāi)URl到網(wǎng)頁(yè)的代碼
2、判斷字典對(duì)象的元素是否為空
3、以下每行代碼執(zhí)行后,parson對(duì)象的retain count分別是多少
Person * person = [[Person alloc] init ] ;
[person retain];
[personrelseae];
[person release];
4、ViewController得LoadView,viewDidLoad,viewDidUnLoad分別是什么時(shí)候調(diào)用的?
5、frame和bounds的區(qū)別
6、寫(xiě)一個(gè)標(biāo)準(zhǔn)的宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。
7、你使用過(guò)json解析方式么,它們的底層是如何處理的你了解么?對(duì){}、[]、:等的理解?
8、@synthesize
xxx來(lái)實(shí)現(xiàn)實(shí)際代碼
未命名2
1、屬性readwrite,readonly,assign,retain,copy,nonatomic各有什么作用,在什么情況下用?
2、為什么很多內(nèi)置類(lèi)如UITableViewController的delegate屬性都是assign而不是retain的?
3、Object-c的類(lèi)可以多重繼承么?Category是什么?重寫(xiě)一個(gè)類(lèi)的方式用繼承好還是分類(lèi)好?為什么?
4、#import跟#include有什么區(qū)別,@class呢?
5、談?wù)勀銓?duì)ARC的認(rèn)識(shí)和理解?
6、什么是Notification ?什么時(shí)候用delegate,什么時(shí)候用Notification?
7、ViewController的loadView,viewDidLoad,viewDidUnload分別是在什么時(shí)候調(diào)用的?在自定義ViewController的時(shí)候這幾個(gè)函數(shù)里面應(yīng)該做什么工作?
8、簡(jiǎn)述多線程操作的方法,以及各個(gè)方法的優(yōu)缺點(diǎn)。
9、說(shuō)一說(shuō)對(duì)BLOCK的解釋。使用過(guò)程中需要注意的地方有哪些?
10、簡(jiǎn)述ios動(dòng)畫(huà)機(jī)制。
11、簡(jiǎn)述ios數(shù)據(jù)存儲(chǔ)方式。
12、簡(jiǎn)要介紹常見(jiàn)的第三方框架,以及用途。
13、簡(jiǎn)要敘述MVC在ios開(kāi)發(fā)中的應(yīng)用。
14、簡(jiǎn)述常見(jiàn)ios流媒體傳輸協(xié)議。
15、簡(jiǎn)述播放流媒體的常見(jiàn)方法。
16、如何采集視頻源和音頻源的數(shù)據(jù)?
17、什么是H264編碼?什么是AAC編碼?如何實(shí)現(xiàn)?
18、是否了解ffmpeg? 請(qǐng)簡(jiǎn)要敘述ffmpeg的理解
未命名3
1、下面片段代碼中,哪個(gè)選項(xiàng)是正確的初始化,為什么?有哪些類(lèi)型的初始化需要手動(dòng)去釋放?
@property (nonatomic,retain)NSMutableArray* votelist;//.h文件
@synthesize votelist;//.m文件
a、self.votelist=[[NSMutableArrayalloc] init];
b、votelist=[[NSMutableArray alloc] init];
2、assign、retain、copy、nonatomic、readonly屬性的作用
3、Category與繼承的區(qū)別
4、KVC和KVO是什么?
5、ViewController的viewDidLoad,viewWillAppear,viewDidUnload,dealloc
分別是在什么時(shí)候調(diào)用,在自定義ViewController的中這幾個(gè)函數(shù)里面應(yīng)該做什么工作?
6、聲明一個(gè)類(lèi)和一個(gè)靜態(tài)方法
7、TaableView加載網(wǎng)絡(luò)文本,圖片時(shí)要注意什么
8、#import與#imclde的區(qū)別
9、線程與進(jìn)程的區(qū)別和聯(lián)系
10、寫(xiě)一個(gè)委托delegate的定義,實(shí)現(xiàn)過(guò)程
未命名4
3、定義int
**a[3][4],則變量占有的內(nèi)存空間為:_______
4、寫(xiě)一個(gè)函數(shù)完成內(nèi)存之間的拷貝
void *mymemcpy( void * dest , const void * src , size_tcount).
5、編寫(xiě)一個(gè)函數(shù)subs(char * str)打印出str的所有子串(例如1234的子串包括:1.2.3.4.12.23.34.123.234.1234.)
6、完成字符串拷貝可以使用sprintf、strcpy、以及memcpy函數(shù),請(qǐng)問(wèn)這些函數(shù)有什么區(qū)別?你喜歡哪一個(gè)?為什么?
7、首先編寫(xiě)函數(shù)計(jì)算一個(gè)字節(jié)(byte)里有多少bit被置為1,例如輸入9即(1001) ,輸出2.然后考慮如果大量重復(fù)調(diào)用此函數(shù)如何優(yōu)化
8、完成下列鏈表類(lèi)
class List{
…………//任意增加類(lèi)成員
public:
//將pNewNode插入到鏈表中,放在pOldNode的前面
bool InsertBefore(Node * pNewNode,Node *pOldNode);
void Delete(Node * pNode);
}
9、
chass find {
void add(char * tel);
void find(char *
tel);
}
//號(hào)碼長(zhǎng)度有11位,有一文件存這10億個(gè)電話號(hào)碼,實(shí)現(xiàn)上面find類(lèi),使下面的程序
f.ind(tel)函數(shù)可以快速的查找任意號(hào)碼是否存在
void main(){
find f;
char * tel;
while(tel = readtel()){??? //從文件中讀出電話號(hào)碼
f.add(tel);
}
tel = 13512345678;
if (f.find (tel)){
pringf(“找到手機(jī)號(hào)碼%s\n,tel”);
} else {
pringf(“未找到手機(jī)號(hào)碼%s\n,tel”);
}
}
10、怎樣快速檢測(cè)出一個(gè)巨大的鏈表中得死鏈,(遍歷鏈表時(shí)會(huì)循環(huán)的鏈)?
盡量不改變?cè)墟湵頂?shù)據(jù),考慮好空間復(fù)雜度與時(shí)間復(fù)雜度。
======================================
以下是我面試過(guò)程中記錄下來(lái)的重點(diǎn)的面試及筆試題,算是我對(duì)千鋒的一點(diǎn)點(diǎn)感恩致謝,在此感謝恩師的栽培。
總結(jié)了一下:新浪微博愛(ài)問(wèn)UI,數(shù)據(jù)緩存應(yīng)用方面的實(shí)現(xiàn),騰訊愛(ài)問(wèn)原理,坑爹的百度就喜歡拿算法來(lái)得瑟。
面試制勝之招:
1.原理性的知識(shí),必須背下來(lái),代碼不需要會(huì)寫(xiě),沒(méi)人要求寫(xiě)原理、底層的代碼(這是一個(gè)空子,可以鉆)
2.鏈表操作,排序算法最好是能默寫(xiě)
3.面試始終保持平靜,冷靜,鎮(zhèn)靜,面試再刁難也要保持端坐,面帶一絲微笑
4.對(duì)喜歡的公司最好能表現(xiàn)出對(duì)加入目標(biāo)公司的渴望,對(duì)技術(shù)的追求
5.加分的地方:對(duì)簡(jiǎn)歷上的項(xiàng)目很熟悉,技術(shù)點(diǎn)都有所研究,包括封裝,細(xì)節(jié)實(shí)現(xiàn);最好能把MJExtension框架多敲幾遍,包裝成自己開(kāi)發(fā)的工具(顯示自己大神的威力)
工作建議:沒(méi)人查個(gè)人背景(這點(diǎn)不用太擔(dān)心,大不了重新找);上班后勤勉工作,最好不要泡在QQ上,不懂趕緊問(wèn),別拖延時(shí)間,轉(zhuǎn)正期也是適應(yīng)期多,花點(diǎn)時(shí)間在工作上,工作態(tài)度非常非常重要。
一.簡(jiǎn)述題
1.堆和棧的內(nèi)存區(qū)別,它們是如何分配和釋放的--必須問(wèn),必須背下來(lái)
2.self.與self->區(qū)別--必須問(wèn),必須背下來(lái)
3.ARC自動(dòng)引用技術(shù)原理,自動(dòng)釋放池什么時(shí)候銷(xiāo)毀(兩次被問(wèn)到,回答大括號(hào)結(jié)束時(shí)銷(xiāo)毀,面試官就笑著對(duì)我:“呵呵”。最后問(wèn)了面試官:runloop結(jié)束時(shí)銷(xiāo)毀,還是沒(méi)弄明白)---騰訊,百度,新浪微博
4.定義屬性時(shí)nonatomic,atomic,copy,assign,retain內(nèi)部實(shí)現(xiàn)原理---騰訊
5.蘋(píng)果公司為什么要推出strong和weak
6.怎樣實(shí)現(xiàn)一個(gè)singleton,請(qǐng)給出思路(最好直接寫(xiě)出來(lái))—必須問(wèn),必須背下來(lái)
7.請(qǐng)簡(jiǎn)述KVO內(nèi)部的實(shí)現(xiàn),使用條件---新浪微博
8.請(qǐng)用代碼描述錯(cuò)誤消息處理---騰訊,百度
9.消息轉(zhuǎn)發(fā)內(nèi)部原理(結(jié)構(gòu)指針,方法選擇器,forwarding...一串破玩意兒)--百度
9.iOS消息傳遞機(jī)制都有什么?如何傳遞?---騰訊,百度,新浪微博
10.有網(wǎng)絡(luò)或無(wú)網(wǎng)絡(luò)情況下兩個(gè)APP之間如何通信---新浪微博
11.將UIButton添加到UIView上,如果UIButton的frame的(0,0)不在UIView上,UIButton能不能被點(diǎn)擊,為什么?,UIButton如果被添加到UILabel上,點(diǎn)擊能響應(yīng)嗎?---新浪微博
12.如果每個(gè)View上都想增加一個(gè)時(shí)間播放控件,如何實(shí)現(xiàn)?---新浪微博
13.利用UIScrollView縮放性,如何實(shí)現(xiàn)地圖上商家地理位置的動(dòng)態(tài)顯示---騰訊
14.運(yùn)行時(shí)的工作原理,OC動(dòng)態(tài)行---騰訊,百度,新浪微博
15.AFN與asi的本質(zhì)區(qū)別---騰訊,百度,新浪微博(主要問(wèn)底層實(shí)現(xiàn))
16.clayer的坐標(biāo)與frame的坐標(biāo)如何轉(zhuǎn)化---騰訊,百度,新浪微博
17.循環(huán)引用---騰訊,百度,新浪微博
18.runloop原理---騰訊,百度,新浪微博
二.算法題
1.定義指針函數(shù)實(shí)現(xiàn)數(shù)組排序(百度)
2.實(shí)現(xiàn)一單鏈表的逆轉(zhuǎn),排序(DML方面)(騰訊,百度)
3.已知一組數(shù)字:32,35,9,25,19,34,43,47,3要求按以下規(guī)則進(jìn)行排序:第一個(gè)數(shù)最大,第二個(gè)數(shù)最小,第三個(gè)數(shù)是剩下中的最大的,第四個(gè)數(shù)是剩下中的最小的,依此類(lèi)推。(騰訊)
4.函數(shù)將字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改變非'*'字符的先后順序,函數(shù)返回串中字符'*'的數(shù)量。如原始串為:ab**cd**e*12,處理后為*****abcde12,函數(shù)并返回值為5,(要求使用盡量少的時(shí)間和輔助空間)(百度)
5.實(shí)現(xiàn)memmove算法(金山網(wǎng)絡(luò))
6.求1+2+3+...+n要求不能使用除法、for、while、if、else、switch、case等關(guān)鍵字以及條件判斷語(yǔ)句(A?B:C)(金山網(wǎng)絡(luò))
7.判斷一個(gè)IP的有效性(百度)
=========================================
一、多線程及網(wǎng)絡(luò)相關(guān)的問(wèn)題:
1.多線程的底層實(shí)現(xiàn)?
2.線程間怎么通信?
3.網(wǎng)絡(luò)圖片處理問(wèn)題中怎么解決一個(gè)相同的網(wǎng)絡(luò)地址重復(fù)請(qǐng)求的問(wèn)題?
4.用NSOpertion和NSOpertionQueue處理A,B,C三個(gè)線程,要求執(zhí)行完A,B后才能執(zhí)行C,怎么做?
5.列舉cocoa中常見(jiàn)對(duì)集中多線程的實(shí)現(xiàn),并談?wù)劧嗑€程安全的幾種解決辦法及多線程安全怎么控制?
6.gcd內(nèi)部怎么實(shí)現(xiàn)的
7.你用過(guò)NSOperationQueue么?如果用過(guò)或者了解的話,你為什么要使用NSOperationQueue,實(shí)現(xiàn)了什么?請(qǐng)描述它和GCD的區(qū)別和類(lèi)似的地方(提示:可以從兩者的實(shí)現(xiàn)機(jī)制和適用范圍來(lái)描述)。
8.既然提到GCD,那么問(wèn)一下在使用GCD以及block時(shí)要注意些什么?它們兩是一回事兒么?block在ARC中和傳統(tǒng)的MRC中的行為和用法有沒(méi)有什么區(qū)別,需要注意些什么?
9.在異步線程中下載很多圖片,如果失敗了,該如何處理?請(qǐng)結(jié)合RunLoop來(lái)談?wù)劷鉀Q方案.(提示:在異步線程中啟動(dòng)一個(gè)RunLoop重新發(fā)送網(wǎng)絡(luò)請(qǐng)求,下載圖片)
10. Socket的實(shí)現(xiàn)原理及Socket之間是如何通信的
二、內(nèi)存管理相關(guān)的問(wèn)題:
1.怎么保證多人開(kāi)發(fā)進(jìn)行內(nèi)存泄露的檢查.
2.非自動(dòng)內(nèi)存管理情況下怎么做單例模式.
3.對(duì)于類(lèi)方法(靜態(tài)方法)默認(rèn)是autoRelease的。我添加的代碼導(dǎo)致了過(guò)渡釋放。所有類(lèi)方法都會(huì)這樣嗎?
4._block函數(shù)在arc跟非arc里面有什么區(qū)別
5.什么情況下會(huì)發(fā)生內(nèi)存泄漏和內(nèi)存溢出?
6.[Nsarry array withobject:]這個(gè)方法添加對(duì)象后,需要對(duì)這個(gè)數(shù)組做釋放操作嗎?
7.Josn數(shù)據(jù)的解析,和解析數(shù)據(jù)的時(shí)候有內(nèi)存泄露嗎?有的話如何解決
三、C語(yǔ)言和Foundation相關(guān)的問(wèn)題
1.KVO內(nèi)部實(shí)現(xiàn)原理
2.是否可以把比較耗時(shí)的操作方在NSNotificationCenter中
3.Cocoa的Foundation對(duì)象與Core
Foundation對(duì)象有什么區(qū)別
4.不用中間變量,用兩種方法交換A和B的值
5.簡(jiǎn)單描述下對(duì)單利模式設(shè)計(jì)對(duì)理解?
6.什么是動(dòng)態(tài),舉例說(shuō)明
7.runtime實(shí)現(xiàn)的機(jī)制是什么,怎么用,一般用于干嘛.你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱(chēng)嗎?
8.是否使用過(guò)CoreText或者CoreImage等?如果使用過(guò),請(qǐng)談?wù)勀闶褂肅oreText或者CoreImage的體驗(yàn)。
9.NSNotification和KVO的區(qū)別和用法是什么?什么時(shí)候應(yīng)該使用通知,什么時(shí)候應(yīng)該使用KVO,它們的實(shí)現(xiàn)上有什么區(qū)別嗎?如果用protocol和delegate(或者delegate的Array)來(lái)實(shí)現(xiàn)類(lèi)似的功能可能嗎?如果可能,會(huì)有什么潛在的問(wèn)題?如果不能,為什么?(雖然protocol和delegate這種東西面試已經(jīng)面爛了…)
10.Block內(nèi)部的實(shí)現(xiàn)原理
四、數(shù)據(jù)存儲(chǔ)相關(guān)的問(wèn)題
1.如果后期需要增加數(shù)據(jù)庫(kù)中的字段怎么實(shí)現(xiàn),如果不實(shí)用核心數(shù)據(jù)呢?
2.SQLite數(shù)據(jù)存儲(chǔ)是怎么用?
3.簡(jiǎn)單描述下客戶端到緩存機(jī)制?
4.你實(shí)現(xiàn)過(guò)多線程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在線程中創(chuàng)建或者傳遞?你是用什么樣的策略來(lái)實(shí)現(xiàn)的?
五、UI控件相關(guān)的問(wèn)題
1.怎么解決緩存池滿的問(wèn)題,(cell)
2.CAAnimation的層級(jí)結(jié)構(gòu)
3.UIButton與UITableView的層級(jí)結(jié)構(gòu)
4.如何渲染自定義格式字符串的UILable
5.設(shè)置scroll view的contensize能在Viewdidload里設(shè)置么,為什么
6.按鈕或者其它UIView控件的事件傳遞的具體過(guò)程
7.控制器View的生命周期及相關(guān)函數(shù)是什么?你在開(kāi)發(fā)中是如何用的?
六、應(yīng)用程序相關(guān)的問(wèn)題
1.NSRunLoop的實(shí)現(xiàn)機(jī)制,及在多線程中如何使用
2.IOS7之前,后臺(tái)執(zhí)行內(nèi)容有幾種形式,都是什么
3.簡(jiǎn)單說(shuō)一下APP的啟動(dòng)過(guò)程,從main文件開(kāi)始說(shuō)起
4.把程序自己關(guān)掉和程序進(jìn)入后臺(tái),遠(yuǎn)程推送的區(qū)別
5.本地通知和遠(yuǎn)程推送通知對(duì)基本概念和用法?
七、第三方框架相關(guān)的問(wèn)題
1.第三方API是怎么用的?
2.列舉現(xiàn)在熟悉iOS開(kāi)發(fā)庫(kù)和第三方開(kāi)發(fā)庫(kù)?
八、其它相關(guān)的問(wèn)題
1.客戶端安全性處理方式?
2.簡(jiǎn)單描述下社交行為到步足?
3.sip是什么?
4.數(shù)據(jù)比較大的時(shí)候是用內(nèi)循環(huán),還是外循壞?
5.有些圖片加載的比較慢怎么處理?你是怎么優(yōu)化程序的性能的?
6.你實(shí)現(xiàn)過(guò)一個(gè)框架或者庫(kù)以供別人使用么?如果有,請(qǐng)談一談構(gòu)建框架或者庫(kù)時(shí)候的經(jīng)驗(yàn);如果沒(méi)有,請(qǐng)?jiān)O(shè)想和設(shè)計(jì)框架的public的API,并指出大概需要如何做、需要注意一些什么方面,來(lái)使別人容易地使用你的框架。
7.App需要加載超大量的數(shù)據(jù)給服務(wù)器發(fā)送請(qǐng)求,但是服務(wù)器卡住了如何解決?
8.利用NSNotificationCenter實(shí)現(xiàn)跨多控制器傳輸數(shù)據(jù)和消息中用同步還是異步?
========================================
一般而言,小公司問(wèn)項(xiàng)目;大公司做筆試題;做地圖的一定考算法
Html5你用過(guò)沒(méi)有?有什么新特性?
HTTP、UDP
請(qǐng)求的幾種方式?get和post
多線程有幾種方式?你用過(guò)沒(méi)有?你經(jīng)常用哪種?怎么用的?
GCD并行
XMPP里面的怎么做的語(yǔ)言壓縮?群聊怎么做的?都有哪些。。。你能自己寫(xiě)嗎?
第三方框架你都用過(guò)哪些?怎么用的?能跟具體講講SDWebImage里面都有什么?圖片的異步加載?圖文混排?
你用過(guò)KVO和NSNotification嗎?哪里用了?為什么要?KVO與NSNotification有什么區(qū)別?
介紹下你的項(xiàng)目吧?
====================================
常見(jiàn)面試題:
1、請(qǐng)你做一下自我介紹
要求:時(shí)間在1-2分鐘提前背記好
舉例:您好,我叫xxx,我是13年計(jì)算機(jī)專(zhuān)業(yè)本科畢業(yè)生今天來(lái)貴公司面試xxx職位,這份工作不僅與我的專(zhuān)業(yè)對(duì)口,同時(shí)也是我的特長(zhǎng)與興趣所在?,F(xiàn)在我就從以下三個(gè)方面介紹自己
一:社會(huì)實(shí)踐:我有一年半的xxx開(kāi)發(fā)經(jīng)驗(yàn),做過(guò)xxx等幾款項(xiàng)目,在開(kāi)發(fā)中擔(dān)項(xiàng)目組長(zhǎng)。
二:學(xué)習(xí)能力:我有較強(qiáng)的學(xué)習(xí)能力,能熟練的進(jìn)行xxx操作,并能使用xxx等語(yǔ)言編程。
三:交際能力:我的性格沉穩(wěn),能坐得住,對(duì)IT行業(yè)的工作,具有非常好的適應(yīng)能力,而且為人謙和,具有很強(qiáng)的組織和協(xié)調(diào)能力,富有的事業(yè)心和責(zé)任感使我能夠面對(duì)任何困難和挑戰(zhàn)。
從以上的簡(jiǎn)單自我介紹,我希望公司能給我一個(gè)展示自己能力的機(jī)會(huì),讓我我可以學(xué)以致用,同時(shí)我也很欣賞XX公司的企業(yè)文化與工作環(huán)境。我愿意成為企業(yè)一員,為企業(yè)的發(fā)展貢獻(xiàn)自己的一份力量。我的職業(yè)生涯目標(biāo)是,做一個(gè)既懂技術(shù),又懂業(yè)務(wù)的復(fù)合型人才。
2、你對(duì)我們公司了解多少?
怎么樣了解企業(yè)
a、查企業(yè)營(yíng)業(yè)執(zhí)照:登陸北京工商行政管理局,到企業(yè)信用信息查詢(xún),關(guān)注:注冊(cè)資金,營(yíng)業(yè)時(shí)間
b、了解企業(yè):登陸企業(yè)網(wǎng)站,查詢(xún)企業(yè)的情況關(guān)注:主營(yíng)業(yè)務(wù)、規(guī)模、iOS團(tuán)隊(duì)、上線產(chǎn)品等
3、請(qǐng)談?wù)勀愕膬?yōu)點(diǎn)和缺點(diǎn)。
4、你為什么離開(kāi)上一家公司?
原因有:
家里有事,簡(jiǎn)稱(chēng)個(gè)人原因(買(mǎi)房搬家、治病救人都行?。?/p>
公司轉(zhuǎn)型,簡(jiǎn)稱(chēng)結(jié)構(gòu)調(diào)整(公司轉(zhuǎn)戰(zhàn)陣地、主要業(yè)務(wù)變更、人事結(jié)構(gòu)性裁員等無(wú)望之災(zāi)?。?/p>
個(gè)人發(fā)展,簡(jiǎn)稱(chēng)尋找挑戰(zhàn)(小有成功、尋找新的個(gè)人發(fā)展前景什么的,個(gè)人轉(zhuǎn)型?。?/p>
忌:
與人合不來(lái)?。ň癫』嫉耐?,受不了?。?/p>
與上事不合?。ㄆ獯螅瑪[架子,不認(rèn)錯(cuò)?。?/p>
失職和無(wú)能!(大意了,惹禍了,做不了?。?/p>
貪污瀆職了?。](méi)進(jìn)去,算命大,沒(méi)人用!)
5、你的職業(yè)目標(biāo)是什么?(短期和長(zhǎng)期)
短期發(fā)展:
以做好本職工作為主展開(kāi)
長(zhǎng)期發(fā)展:
方向一、成為項(xiàng)目經(jīng)理
方向二、成為研發(fā)經(jīng)理或技術(shù)總監(jiān)
方向三、轉(zhuǎn)向管理崗位
6、你對(duì)加班的看法?
實(shí)際上好多公司問(wèn)這個(gè)問(wèn)題,并不證明一定要加班,只是想測(cè)試你是否愿意為公司奉獻(xiàn)。這個(gè)時(shí)候你可以回答:如果是工作需要我會(huì)義不容辭加班,我現(xiàn)在沒(méi)有任何家庭負(fù)擔(dān),可以全身心的投入工作。但同時(shí),我也會(huì)提高工作效率,減少不必要的加班。
7、你對(duì)薪資的要求?(你期望薪資多少?)
?具體數(shù)值(我期望的薪資是xx,但是如果其他方面的待遇不錯(cuò)的話,也是可以商量的)
8、你有什么問(wèn)題要問(wèn)我(面試官)的?
?面對(duì)人事:公司晉升機(jī)制、企業(yè)文化等
?面對(duì)技術(shù):面試中的某個(gè)技術(shù)、公司某個(gè)項(xiàng)目情況
?面對(duì)總監(jiān):團(tuán)隊(duì)組成及氛圍,開(kāi)發(fā)前景的看法
8、工作經(jīng)歷:
9、工作流程:
一個(gè)產(chǎn)品的流程:
項(xiàng)目流程:
第一步:介紹你項(xiàng)目是干嘛的
第二步:介紹下你負(fù)責(zé)的是哪塊
第三步:介紹下里面都有什么功能,你是怎么實(shí)現(xiàn)的,怎么分層的?寫(xiě)了什么模型?封裝了什么工具類(lèi)?自定義什么?用了什么分類(lèi)?等等
======================================
iOS筆試題
l基礎(chǔ)
1、#import和#include的區(qū)別?
2、寫(xiě)一個(gè)計(jì)算A、B中較大值的標(biāo)準(zhǔn)宏MAX?
3、談一下關(guān)鍵字static的作用?關(guān)鍵字const呢?
4、break、continue、return的區(qū)別是什么?
5、講一下OC和C有哪些區(qū)別?
6、堆和棧的區(qū)別是什么?
7、談一下iOS App的生命周期?
8、簡(jiǎn)述一下UIViewController的生命周期?
9、frame和bounds的區(qū)別?
10、談一下Objective-C的內(nèi)存管理方式?
11、簡(jiǎn)述assign、retain、copy、weak和strong分別在什么情況下使用?
12、深復(fù)制和淺復(fù)制的區(qū)別?
13、說(shuō)說(shuō)你對(duì)KVC和KVO的理解?
14、談一下你對(duì)block的理解,請(qǐng)寫(xiě)聲明一個(gè)block變量?
15、iOS代理和block有哪些相同點(diǎn)和區(qū)別點(diǎn)
16、類(lèi)別的作用?說(shuō)一下類(lèi)別和類(lèi)擴(kuò)展的區(qū)別?
17、談一下UITableViewCell的重用機(jī)制?
18、UICollectionView和UITableView的區(qū)別有哪些?
19、談一下面向?qū)ο蟮膸讉€(gè)主要特征?你是如何理解面向?qū)ο缶幊趟枷氲?
20、談一下你常用的一些設(shè)計(jì)模式及應(yīng)用場(chǎng)景?
21、類(lèi)別和繼承有哪些區(qū)別?
22、你常用的數(shù)據(jù)存儲(chǔ)方式有哪些?
23、JSON和XML有什么區(qū)別?
l高級(jí)
24、Http協(xié)議是什么?,Http協(xié)議中GET和POST有哪些區(qū)別?
25、談?wù)勀銓?duì)Socket的理解?TCP和UDP協(xié)議有什么區(qū)別?
26、談?wù)勀銓?duì)MVC開(kāi)發(fā)模式的理解,為什么要采用MVC模式?你是如何在項(xiàng)目開(kāi)發(fā)中采用MVC模式的?
27、通知中心和代理都可以用來(lái)傳遞消息和數(shù)據(jù),兩者有什么區(qū)別?
28、你在項(xiàng)目當(dāng)中是如何封裝網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求的?
29、你有做過(guò)屏幕適配嗎?在項(xiàng)目中你是如何進(jìn)行適配的?
30、在開(kāi)始一個(gè)新項(xiàng)目時(shí),你通常如何分析采用什么樣的模式寫(xiě)代碼,是純代碼或者XIB或者Storyboard?
31、談一下iOS中的多線程?以及在分別在什么情況下使用多線程?
32、簡(jiǎn)述一下消息推送的流程?
33、你上線過(guò)App嗎?簡(jiǎn)述一下App發(fā)布到AppStore的流程?
34、你做過(guò)電商項(xiàng)目嗎?談?wù)勝?gòu)買(mǎi)一個(gè)商品的具體流程應(yīng)該是怎樣的?你使用什么支付方式?
35、AFNetworking是最常用的網(wǎng)絡(luò)框架,談?wù)勥@個(gè)框架內(nèi)部是如何請(qǐng)求數(shù)據(jù)的?
36、SDWebImage可以用來(lái)異步加載圖片,談?wù)勥@個(gè)庫(kù)內(nèi)部是如何異步加載并顯示圖片的? AFNetworking也提供了異步加載圖片的方式,為什么要使用SDWebImage,它有什么好處?
37、數(shù)據(jù)庫(kù)FMDB庫(kù)和CoreData有什么區(qū)別?
38、你使用過(guò)Xcode7開(kāi)發(fā)嗎?需要注意什么?
39、談一下你使用第三方登錄的業(yè)務(wù)邏輯?
40、你使用過(guò)版本管理工具SVN/Git嗎?多人開(kāi)發(fā)時(shí)需要注意什么?
41、你在項(xiàng)目開(kāi)發(fā)中使用過(guò)哪些常用的第三方庫(kù)?
42、iOS中的響應(yīng)鏈?zhǔn)鞘裁?它是如何發(fā)揮作用的?
43、你在iOS項(xiàng)目開(kāi)發(fā)中是如何查看Bug?如何調(diào)試?如何解決的?
l擴(kuò)展
44、你對(duì)藍(lán)牙開(kāi)發(fā)有了解嗎?在iOS端如何做藍(lán)牙開(kāi)發(fā)?
45、做過(guò)多語(yǔ)言開(kāi)發(fā)嗎?多語(yǔ)言(國(guó)際化/本地化)開(kāi)發(fā)需要注意什么?
46、你有做過(guò)動(dòng)畫(huà)嗎?如何做?
47、你有做過(guò)繪圖嗎?如何做?
48、做過(guò)地圖App嗎?你通常使用什么地圖?
49、使用過(guò)CocoaPods這個(gè)第三方庫(kù)管理工具嗎?
50、做過(guò)IM(即時(shí)通訊)嗎?有用過(guò)XMPP嗎?
51、做過(guò)音頻,視頻播放器嗎?你是如何做的?
52、你了解哪些iOS8和iOS9的新特性知識(shí)?在實(shí)際項(xiàng)目中使用過(guò)哪些?
53、談一下你對(duì)iOS中Runloop的了解?
54、談一下OC運(yùn)行時(shí)Runtime?
55、請(qǐng)描述一下Instruments及其作用?
l人事
56、你前公司技術(shù)部門(mén)有多少人?都有哪些人?分別做什么?你們?nèi)绾螀f(xié)調(diào)工作?
57、你們是如何開(kāi)始一個(gè)項(xiàng)目的?如何分配工作的?在做項(xiàng)目過(guò)程中有問(wèn)題怎樣去解決?
58、你前公司是如何管理項(xiàng)目進(jìn)度的?
59、你為什么選擇離開(kāi)上家公司?
60、你工作了兩年,你覺(jué)得你現(xiàn)在處于怎樣的水平?這兩年的工作讓你收獲了哪些?對(duì)你來(lái)說(shuō)最大的收獲是什么?
61、你覺(jué)得以你現(xiàn)在的能力,能夠承擔(dān)多大的項(xiàng)目?和其他iOS開(kāi)發(fā)人員相比,你的優(yōu)勢(shì)在哪里?
=======================================
一、自我介紹:
我叫**,畢業(yè)于***大學(xué),此前一直就職于***公司,擔(dān)任iOS開(kāi)發(fā)工程師一職,在職期間做過(guò)的項(xiàng)目種類(lèi)繁多,有商場(chǎng)類(lèi),醫(yī)療類(lèi),旅游類(lèi),金融類(lèi)等等一共十多個(gè),其中有四個(gè)是自己獨(dú)立完成的,其余的是團(tuán)隊(duì)合作完成的。
二、面試專(zhuān)業(yè)技能
1、熟悉開(kāi)發(fā)環(huán)境,熟悉語(yǔ)言,大部分面試官會(huì)對(duì)debug能力比較感興趣,都會(huì)問(wèn)這個(gè)問(wèn)題,我的回答是:
對(duì)于每個(gè)程序員來(lái)說(shuō),遇到bug是最頭痛的事情,想著自己寫(xiě)的代碼是如何漂亮,是如何思路清晰,程序怎么就給crash掉了的,那么我對(duì)于這樣的問(wèn)題,有我自己解決的一套,不會(huì)像普通程序員那樣,遇到問(wèn)題就急躁,不知所措。首先,我會(huì)先看下問(wèn)題出錯(cuò)的原因,仔細(xì)查看reason,然后可以打一個(gè)全局?jǐn)帱c(diǎn),看斷點(diǎn)指向的位置上下文代碼的邏輯,一般情況下都可以很快找出問(wèn)題所在,那么有的時(shí)候,我們會(huì)發(fā)現(xiàn)全局?jǐn)帱c(diǎn)也找不到錯(cuò)誤所在,那么我會(huì)根據(jù)reason找到出錯(cuò)的事件,一般情況下我們都是系統(tǒng)響應(yīng)了某個(gè)事件才會(huì)crash的,我會(huì)根據(jù)事件邏輯相關(guān)的代碼,仔細(xì)查看問(wèn)題所在,若是碰到了bad_access這樣的問(wèn)題,還可以打開(kāi)僵尸調(diào)試來(lái)做處理?,F(xiàn)在碰到了問(wèn)題,想到的不再是代碼明明是對(duì)的啊,而是想著我解決了一個(gè)問(wèn)題,就是一次進(jìn)步,如果不是碰到問(wèn)題,進(jìn)步的速度會(huì)變得很慢,有時(shí)候,很多新東西都是從bug中學(xué)到的。
注:有些面試官會(huì)問(wèn)到自己是否會(huì)處理真機(jī)調(diào)試的crash日志,可以這樣回答:
1、Xcode自己本身帶有查看crash日志的功能,在device那里,我們可以根據(jù)日志的具體內(nèi)容或是通過(guò)百度來(lái)找出crash的reason;
2、通過(guò)第三方的,雖然我沒(méi)有用過(guò),但是我知道可以實(shí)現(xiàn)這個(gè)功能,而且不會(huì)很麻煩,一個(gè)是聽(tīng)云,一個(gè)是我們熟悉的友盟,都可以獲取這些crash log。
2、MRC/ARC,可以直接說(shuō)自己沒(méi)有實(shí)際MRC的產(chǎn)品,但是懂得大致的原理(可以說(shuō)下黃金法則和自動(dòng)釋放池),但是目前主流的都是ARC,他本身就是比MRC方便,高效,在編譯期間會(huì)自動(dòng)判斷在需要做release或者retain操作的地方加上內(nèi)存管理的方法,這個(gè)也使得我們做開(kāi)發(fā)的時(shí)候更加方便,快捷。
具體的內(nèi)存管理語(yǔ)義呢(retain,copy,strong,weak,assign等等可以網(wǎng)上查資料,有很多);
3、多線程:多線程分為四種:pthread,
nsthread,GCD, nsopreation,由于前兩者的復(fù)雜和不安全性,目前主流的是用的GCD(C的API)和nsopreation,那么GCD分任務(wù)和隊(duì)列,它是才用block的方式,將任務(wù)加到隊(duì)列中實(shí)現(xiàn)多線程,具體可以實(shí)現(xiàn)的種類(lèi)有同步串行,同步并行,異步串行,異步并行,其中異步并行用的最多,當(dāng)然GCD還有很多其他的用法,比如設(shè)置屏障,group,source等等,實(shí)現(xiàn)的功能繁多(要查的人可以查看這篇blog:http://blog.devtang.com/blog/2012/02/22/use-gcd/和這篇:https://github.com/nixzhu/dev-blog/blob/master/2014-04-19-grand-central-dispatch-in-depth-part-1.md)
那么nsopreation是在GCD的基礎(chǔ)上做了封裝后OC的API,它采用對(duì)象的形式來(lái)創(chuàng)建多線程,其中nsopreation是一個(gè)抽象類(lèi),我們不可以直接使用,只能用到它的子類(lèi),系統(tǒng)已經(jīng)幫我們?cè)O(shè)計(jì)了它的兩個(gè)子類(lèi),一個(gè)是invocation(采用selector的形式),一個(gè)是block(采用block的形式),那么我們?cè)谕ㄟ^(guò)子類(lèi)創(chuàng)建人物后,再加載到queue上,系統(tǒng)自動(dòng)幫我們分配多線程完成任務(wù),同時(shí)我們也可以對(duì)不同線程設(shè)置依賴(lài)關(guān)系,功能同樣很強(qiáng)大。
有的面試官會(huì)問(wèn)你用到哪一種方式多一點(diǎn),我個(gè)人回答的是nsopreation,回答如下:
他們兩種都是主流的方式,我個(gè)人偏向nsopreation,主要還是看不同的情況,GCD是一種很直觀的形式去創(chuàng)建多線程,在使用過(guò)程種如果創(chuàng)建線程不會(huì)多次使用,并且操作較為簡(jiǎn)單的話,我會(huì)選擇GCD,大多數(shù)情況下需要重復(fù)創(chuàng)建子線程,那么我會(huì)選擇nsopreation,因?yàn)樗闹赜眯员容^高,而且使用起來(lái),我覺(jué)得更加適合面向?qū)ο缶幊痰乃枷?,在一些大的?xiàng)目我更加偏愛(ài)nsopreation。
4、TCP/IP協(xié)議,socket相關(guān):
我回答的要點(diǎn):TCP/IP協(xié)議是傳輸層的協(xié)議族,他提供了數(shù)據(jù)傳輸?shù)目煽啃院涂尚行?,讓我們的?shù)據(jù)可以在網(wǎng)絡(luò)上傳輸;Http是應(yīng)用層的協(xié)議,保證了數(shù)據(jù)傳輸?shù)陌踩蛿?shù)據(jù)可靠性,是對(duì)TCP/IP協(xié)議的再次封裝,通過(guò)加頭部和校驗(yàn),讓我們可以更方便的傳輸數(shù)據(jù);
socket:是封裝了TCP/IP協(xié)議的一組API,他讓我們程序員更加方便的使用網(wǎng)絡(luò)去達(dá)到我們想要的效果,傳輸數(shù)據(jù),我們不需要針對(duì)復(fù)雜的網(wǎng)絡(luò)協(xié)議做太多的了解,就可以實(shí)現(xiàn)C/S模式的一個(gè)通訊方式,它是一個(gè)長(zhǎng)連接的過(guò)程,我們具體要做的事情是:create一個(gè)socket對(duì)象,監(jiān)聽(tīng)I(yíng)P地址和端口,readData&writeData,我們只需簡(jiǎn)單的幾步就可以完成強(qiáng)大的功能。
有的面試官問(wèn)我是怎么實(shí)現(xiàn)IM的,我說(shuō)的是用公司底層的接口,自行更具客戶需要寫(xiě)客戶端,這樣面試官就不會(huì)問(wèn)底層的東西了。
如果面試官問(wèn)道TCP/IP等協(xié)議的原理,那只能說(shuō)面試官不懂或者是問(wèn)的東西跟他表達(dá)的不一樣。我們可以這樣回答,TCP/IP協(xié)議族本來(lái)就是一個(gè)非常復(fù)雜的協(xié)議,可以寫(xiě)三本書(shū),說(shuō)到原理還真說(shuō)不出來(lái),如果說(shuō)對(duì)于一個(gè)前端的工程師還需要了解這么多的網(wǎng)絡(luò)知識(shí),可能對(duì)于一個(gè)程序員來(lái)說(shuō),要求太苛刻,如果真的是這樣,那么我們是不是把后臺(tái)的事情一起做了算了呢?這顯然是不合理的,不過(guò)公司若真是有這樣的需求,當(dāng)然,我覺(jué)得我對(duì)網(wǎng)絡(luò)的了解,做這樣的項(xiàng)目也是可以的,去學(xué)習(xí)并很快用到項(xiàng)目上也是可以的,但是對(duì)于項(xiàng)目進(jìn)度,肯定會(huì)在最開(kāi)始立項(xiàng)的時(shí)候就說(shuō)明,時(shí)間可能會(huì)稍微久,這個(gè)都是可以商量的。
5、設(shè)計(jì)模式:
所有的設(shè)計(jì)模式都是從面向?qū)ο缶幊痰牧鶄€(gè)原則來(lái)的(http://m.blog.csdn.net/blog/dragonseek24/13293947,這個(gè)需要花時(shí)間去理解,不過(guò)現(xiàn)在面試可以強(qiáng)記下,吹逼用下),那么可以先說(shuō)原則后,在談設(shè)計(jì)模式,切記裝逼的話:我們編程不是為了用某種設(shè)計(jì)原則而用某種設(shè)計(jì)原則,而是說(shuō)我心中有了這樣的思想,為了讓代碼變得好看,邏輯更加清楚,便于擴(kuò)展和重構(gòu),我才這樣編程,在我們編寫(xiě)的過(guò)程中是不知不覺(jué)就用到了一些設(shè)計(jì)模式,所以,以思想為主,編程為輔。然后設(shè)計(jì)的模式大家都懂,隨便說(shuō)下就行了。
注:工廠模式是將功能相同或者類(lèi)似的方法或者類(lèi)封裝起來(lái),通過(guò)抽象類(lèi)的方式,給出最少的接口,實(shí)現(xiàn)最多的功能。
6、AF的使用以及原理:
見(jiàn)blog(2.0版本:http://blog.cnbang.net/tech/2320/;3.0版本:http://www.itdecent.cn/p/0ab3ffa9c5f5)
6、FMDB和coreData的區(qū)別:
FMDB:第三方lib,是對(duì)sqlite的封裝,存儲(chǔ)結(jié)構(gòu)為表結(jié)構(gòu),使用sql語(yǔ)句來(lái)做存儲(chǔ)管理;
coreData為蘋(píng)果原生的API,同樣是封裝了SQLite,但是存儲(chǔ)的基本單元是對(duì)象;
個(gè)人認(rèn)為FMDB使用更加方便和靈活,在項(xiàng)目構(gòu)架階段,設(shè)計(jì)好了表結(jié)構(gòu)后,后期的增刪改查都非常容易;
7、使用過(guò)的第三方lib:SD,AF,JSONModel,MJ,MBProgressHUD,SVProgressHUD,Masonry,YTK,YYKit(這個(gè)是最新的,估計(jì)很多人都聽(tīng)過(guò),用的人就更少了,但是這個(gè)工具庫(kù)在GitHub上已經(jīng)引起了爆炸性轟動(dòng));
8、runtime
(http://southpeak.github.io/blog/2014/11/03/objective-c-runtime-yun-xing-shi-zhi-san-:fang-fa-yu-xiao-xi-zhuan-fa/)
9、runloop
http://blog.ibireme.com/2015/05/18/runloop/
10、YTK介紹:
https://github.com/yuantiku/YTKNetwork
找到基礎(chǔ)教程和高級(jí)教程;
11、YYKit介紹:
https://github.com/ibireme/YYKit查看中文介紹;
其他的像內(nèi)存優(yōu)化啊,藍(lán)牙啊,支付啊,都是按照老師那套來(lái)的,我也是根據(jù)老師的demo說(shuō)的。
搭建框架不是指的UI而是指的你怎么去設(shè)計(jì)一個(gè)類(lèi),整體規(guī)劃整個(gè)產(chǎn)品所要用到的所有類(lèi),從面相對(duì)象編程的六個(gè)原則來(lái)說(shuō)就行了。
如有需要補(bǔ)充的,群聊或者私聊都可,我會(huì)在群里更新;
============================
1.GCD都有哪些API?(胡忠應(yīng))
提示:dispatch_async
dispatch_group_async
dispatch_group_async
dispatch_barrier_async
dispatch_queue_create
dispatch_after
dispatch_get_main_queue
dispatch_get_global_queue
2.app測(cè)試時(shí)怎樣避免沒(méi)有測(cè)試完善出現(xiàn)的bug,比如說(shuō)在6上運(yùn)行沒(méi)事在4上運(yùn)行就出bug了。(胡忠應(yīng))
提示:1.項(xiàng)目做完,需要現(xiàn)在iphone4,iphone4s,iphone5,iphone6,iphone6+等模擬器上運(yùn)行一遍,確保模擬器沒(méi)有問(wèn)題。然后在公司測(cè)試機(jī)上運(yùn)行。
2.項(xiàng)目中都要采用自動(dòng)布局。確保在任何屏幕坐標(biāo)都是相對(duì)的。
3.注意api的版本,低版本不用用高api函數(shù),如果需要使用,必須判斷版本。
3.自己獨(dú)立負(fù)責(zé)的項(xiàng)目,你的項(xiàng)目框架是怎么搭建的?(吳永祥)
提示:這個(gè)說(shuō)起來(lái)比較多,我給你一個(gè)鏈接,里面寫(xiě)的很詳細(xì),主要談公司架構(gòu)的,寫(xiě)的很好:
http://www.cocoachina.com/ios/20141112/10199.html
4.在異步線程創(chuàng)建的對(duì)象需要釋放嗎?(王松)
提示:這個(gè)問(wèn)題問(wèn)的不是太清楚,可以從mrc和arc角度考慮??梢詮亩押蜅=嵌葋?lái)說(shuō),棧上的對(duì)象我們不需要手動(dòng)釋放,堆上的對(duì)象需要手動(dòng)釋放等。
5.支付寶生成的訂單是放在哪里的?,添加到購(gòu)物車(chē)的數(shù)據(jù)放在哪里,在ipad上登錄能看見(jiàn)添加到購(gòu)物車(chē)的信息?(王松)
提示:訂單是服務(wù)器返回的,以json/xml方式返回過(guò)來(lái)的。購(gòu)物數(shù)據(jù)保存兩份,本地有保存,服務(wù)器也有保存。如果購(gòu)物車(chē)信息在服務(wù)器有保存,可以看到。
6.請(qǐng)說(shuō)一下第三方登錄以及支付的過(guò)程和原理。
授權(quán)原理:
OAuth2.0分為四種鑒權(quán)方式, 已分別應(yīng)對(duì)不同的需求, 比如說(shuō)web或app. 通常我們?cè)趙eb端使用第一種Authorization Code方式。為了簡(jiǎn)單說(shuō)明,我直接拿QQ做例子,簡(jiǎn)單說(shuō)一下流程:
當(dāng)用戶點(diǎn)擊QQ登陸,你會(huì)通引導(dǎo)用戶跳轉(zhuǎn)到第三方登陸的登陸界面, 當(dāng)用戶成功登錄以后會(huì)自動(dòng)跳轉(zhuǎn)回來(lái),并附帶一個(gè)code參數(shù),接著你使用code就可以獲得access token(訪問(wèn)令牌),對(duì)于QQ,由于第三方登錄結(jié)合了Openid, 所以需要再通過(guò)token獲取openid。這個(gè)openid是和QQ用戶一一對(duì)應(yīng)的, 使用access token + openid 即可獲取用戶信息。
第三方平臺(tái)和本地用戶系統(tǒng)結(jié)合應(yīng)該分為三種情況:
本地未登錄,第一次登錄第三方:此時(shí)相當(dāng)于注冊(cè),直接把第三方信息拉取來(lái)并注冊(cè)成本地用戶就可以了,并建立本地用戶與第三方用戶(openid)的綁定關(guān)系
本地未登錄,再次登錄第三方:此時(shí)用戶已注冊(cè),獲取到openid后直接找出對(duì)應(yīng)的本地用戶即可
本地登錄,并綁定第三方: 這個(gè)只要將獲取到的openid綁定到本地用戶就可以了。
支付:看下我講的支付,文檔里面都有支付流程和原理。詳細(xì)看下。
7.說(shuō)一下AFNetWorking和SDWebImage的底層實(shí)現(xiàn)機(jī)制。
AFNetWorking基于系統(tǒng)NSURLConnection和NSURLSession實(shí)現(xiàn)的,也是基于CFNetWork的,AFN回調(diào)采用Block,使用方便。而且AFN也封裝了圖片緩存的處理等。
SDWebImage實(shí)現(xiàn)機(jī)制見(jiàn)截圖