? ? ? ? ? 程序員找工作,無非是兩大關,一是面試,二是筆試,關于面試的技巧,我的文章里已經分享過,大家可以看看~今天我給大家分享的是,公司經常出的,并且容易搞混的筆試題!如果這些知識都弄懂了,再加上臨場反應能力和一定的技術,我相信一定會拿到公司的邀請的!!
? ? ? ? ?其實IOS程序員的面試題,一般都是比較基礎的,一般不會出太難,太深入的問題,但是這些知識往往都容易忽略,而且自己基本上都是自己以前搞混的知識點!我總結了一下,希望對大家有用!!
1.OC與C的區別?
? 最重要的區別是:
? ?OC是面向對象 ? ? ? ? C是面向過程
面向過程 ?是流程化 每一步 都會影響到下一步的執行 甚至到程序是否成功執行完畢
面向對象 ?不受步驟的約束 在操作的時候? 如果沒有這個對象? 也不會受到嚴重影響
2.面向對象的三大特征是?
封裝 ? ? 繼承 ? ?多態
3.內存管理的原則
? 只要有alloc retain copy (retainCount +1)就要有對應的release(retainCount -1)
?誰分配 誰釋放
alloc 這個函數 相對對的函數
delloc 銷毀對象的時候調用
alloc 給對象分配內存的時候調用
autorelease 與release 的區別
release autorelease 都可以是對象的引用計數-1
release立即釋放
autorelease 延遲釋放
自動釋放池NSAutoreleasePool
實例代理:
? for (int i=0; i<10; i++) {
@autoreleasepool {
NSObject *obj = [[[NSObject alloc] init]autorelease];
}
}
4.繼承 category的區別
? 繼承 可以添加 變量
調用的時候 可以使用 子類的對象去調用 子類擁有父類的所有屬性 方法 包括category 協議。。。
category 只能添加 方法
調用的時候 使用原有類的對象去調用
5.OC里面有多繼承么?怎么實現多繼承呢
沒有多繼承 可以多級 繼承 ? ? 可以使用代理 ,分類來實現
6.category estensiton 區別
category 類目 在不改變原有類的情況下? 給他擴充方法
estensiton 延展 添加 不公開的 變量 屬性 方法
7.什么是protocol?
是協議 是一個 統一的對外接口 可以通過他來實現 查找多個類的方法
8.什么是代理
? 代理 又叫委托 自己不能完成的 委托給別人完成 ?可用于回調
9.代理 通知的區別?
代理 是一對一的 代理的接收者,需要把結果返回給發送者結果
通知 是一對多的 ?發送者,只需要把消息發送出去,不需要返回
10通知 KVO 的區別
KVO 是鍵值觀察者 通過觀察的屬性值 發生改變 去調用 觀察的方法
通知 通過通知名字 來發送 接收通知
11.KVO KVC的區別?
KVC 鍵值編碼 通過把屬性名 當成key 來改變屬性的值
KVO 鍵值觀察者 通過KVC的方式 把屬性當做key 來觀察屬性值的變化? 做出響應
在實際工作中 在哪用到了 KVC KVO
數據轉模型 用到了KVC
封裝下拉改變導航欄透明度的時候? 使用的是KVO
12.readwrite,readonly,assign,retain,copy,nonatomic 、strong、weak屬性的作用?并區別
strong(強引用)、 weak(弱引用)?什么情況使用copy,assign,和retain?
readwrite 是可讀可寫特性;需要生成getter方法和setter方法時
readonly 是只讀特性 只會生成getter方法
不希望屬性在類外改變
assign 直接賦值 基本數據類型
retain 表示持有(保留)特性 引用計數加1
copy 拷貝一份賦值 會生成一個不受上一個對象影響的對象
nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic 原子操作表示多線程安全,UI(主)線程使用 nonatomic
strong強引用->屬性所屬的對象被釋放的時候 這個屬性 才會被釋放 weak弱引用->不穩定的? 可能會被釋放掉
13.Objective-C有私有方法么?私有變量呢?如多沒有的話,有沒有什么代替的方法?
? ? ?objective-c類里面的方法只有兩種, 靜態方法和實例方法.但是可以通過把方法的聲明和定義都放在.m文件中來實現一個表 面上的私有方法。有私有變量,可以通過@private來修飾,或者把聲明放到.m文件中。在Objective‐C中,所有實例變 量默認都是私有的,所有實例方法默認都是公有的
14.c c++ 和obj-c如何混用?
1)obj-c的編譯器處理后綴為m的文件時,可以識別obj-c和c的代碼,處理mm文件可以識別obj-c,c,c++代碼,但cpp文件必須只
能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現obj- c的代碼,因為cpp只是cpp。
2) 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問題
3)在cpp中混用obj- c其實就是使用obj-c編寫的模塊是我們想要的。如果模塊以類實現,那么要按照cpp class的標準寫類的定 義,頭文件中不能出現obj-c的東西,包括#import cocoa的。 實現文件中,即類的實現代碼中可以使用obj-c的東西,可以import,只是后綴是mm。如果模塊以函數實現,那么頭文件要按 c的格 式聲明函數,實現文件中,c++函數內部可以用obj-c,但后綴還是mm或m。總結:只要cpp文件和cpp include的文件中不包含 obj-c的東西就可以用了,cpp混用obj-c的關鍵是使用接口,而不能直接使用實現代碼,實際上cpp混用的是obj-c編譯后的o文 件,這個東西其實是無差別的,所以可以用。obj-c的編譯器支持cpp。
15.objc優缺點?
objc優點:
1)Cateogies 2)Posing 3)動態識別 4)指標計算 5)彈性訊息傳遞
6)不是一個過度復雜的C衍生語言 7)Objective-C與C++可混合編程
缺點:
1)不支援命名空間 2)不支持運算符重載 3)不支持多重繼承 4)使用動態運行時類型,所有的方法都是函數調用,所以很多編譯時優化 方法都用不到。(如內聯函數等),性能低劣。
16.淺復制和深復制的區別?
淺層復制(copy):只復制指向對象的指針,而不復制引用對象本身。//通過對象的指針來訪問這個對象----只賦值地址 深層復制(mutableCopy):復制引用對象本身---再創建一個對象 意思就是有個A對象,復制一份后得到A_copy對象后,對于淺復制來說,A和A_copy指向的是同一個內存資源,復制的 只不過是是一個指針,對象本身資源 還是只有一份,那如果我們對A_copy執行了修改操作,那么發現A引用的對象同樣被修改,這其實違背了我們復制拷貝的一 個思想。深復制就好理解了,內存中存在了
兩份獨立對象本身。//當修改A時,A copy不變。
17.數據持久化存儲方式有哪些?以及特點
1.plist 屬性列表 最外層只能存儲數組字典 里面只能存儲 bool NSNumber String Data Date
2.NSUserDefault 最終也是保存成plist 系統封裝了保存的路徑 保存的方法
3.歸檔 可以對保存數據的文件 進行加密
4.sqlite? 關系型數據庫 以表的形式存儲? FMDB是對 OC中 sqlite操作封裝 的第三方庫
5.coreData 是蘋果封裝的 對文件操作的框架 可以 以對象的形式存儲 底層數據文件可以是sqlite類型 也可以是XML JSON …
18.get 和post的區別?
Get:與GETurl封裝到一起,長度有限制,安全系數不高。服務器的接收者
Post:與URL參數分開,長度沒有限制,安全系數高,服務器的發送者
19.TCP? UDP的區別?
TCP:是傳輸控制協議:是面連接的,那么運行環境必然要求可能性不可丟包,有良好的擁塞控制機制
UDP:是用戶數據報協議:主要用在實時性要求高以及對質量相對較若的地方,但面對現在高質量的線路不容易丟包,除非是一些擁塞條件下
20.什么是沙盒?有幾個文件夾?
出于安全的目的,應用程序只能將自己的數據和偏好設置寫入到幾個特定的位置上。當應用程序被安裝到設備上時,系統會為其創建一個家目錄,這個家目錄就是應用程序的沙盒。
Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下;
Library:存儲程序的默認設置或其它狀態信息;
tmp:提供一個即時創建臨時文件的地方。
ppName.app 目錄:這是應用程序的程序包目錄,包含應用程序的本身。由于應用程序必須經過簽名,所以您在運行時不能對這個目錄中的內容進行修改,否則可能會使應用程序無法啟動。