面試題(2)

1.死鎖的4個必要條件?

答:互斥、請求保持、不可剝奪、環(huán)路.

2.死鎖的處理?

答:鴕鳥策略、預(yù)防策略、避免策略、檢測與解除死鎖

3.Objective-C的優(yōu)缺點。

答:優(yōu)點:

1). 動態(tài)識別

2).指標(biāo)計算

3).彈性訊息傳遞

4).不是一個過度復(fù)雜的 C 衍生語言

5).Objective-C 與 C++ 可混合編程

缺點:
1).不支援命名空間

2).不支持運算符重載

3).不支持多重繼承

4).使用動態(tài)運行時類型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時優(yōu)化方法都用不到。(如內(nèi)聯(lián)函數(shù)等),性能低劣。

4.sprintf,strcpy,memcpy使用上有什么要注意的地方?

答:

1). sprintf是格式化函數(shù)。將一段數(shù)據(jù)通過特定的格式,格式化到一個字符串緩沖區(qū)中去。sprintf格式化的函數(shù)的長度不可控,有可能格式化后的字符串會超出緩沖區(qū)的大小,造成溢出。

2).strcpy是一個字符串拷貝的函數(shù),它的函數(shù)原型為strcpy(char *dst, const char *src

將src開始的一段字符串拷貝到dst開始的內(nèi)存中去,結(jié)束的標(biāo)志符號為 ‘\0',由于拷貝的長度不是由我們自己控制的,所以這個字符串拷貝很容易出錯。

3). memcpy是具備字符串拷貝功能的函數(shù),這是一個內(nèi)存拷貝函數(shù),它的函數(shù)原型為memcpy(char *dst, const char* src, unsigned int len);將長度為len的一段內(nèi)存,從src拷貝到dst中去,這個函數(shù)的長度可控。但是會有內(nèi)存疊加的問題。

5.readwrite,readonly,assign,retain,copy,nonatomic 屬性的作用?

答:

@property是一個屬性訪問聲明,擴號內(nèi)支持以下幾個屬性:

1).getter=getterName,setter=setterName,設(shè)置setter與 getter的方法名

2).readwrite,readonly,設(shè)置可供訪問級別

2).assign,setter方法直接賦值,不進(jìn)行任何retain操作,為了解決原類型與循環(huán)引用問題

3).retain,setter方法對參數(shù)進(jìn)行release舊值再retain新值,所有實現(xiàn)都是這個順序

4).copy,setter方法進(jìn)行Copy操作,與retain處理流程一樣,先舊值release,再 Copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。

5).nonatomic,非原子性訪問,不加同步,多線程并發(fā)訪問會提高性能。注意,如果不加此屬性,則默認(rèn)是兩個訪問方法都為原子型事務(wù)訪問。鎖被加到所屬對象實例級。

6.http和scoket通信的區(qū)別?

答:

http是客戶端用http協(xié)議進(jìn)行請求,發(fā)送請求時候需要封裝http請求頭,并綁定請求的數(shù)據(jù),服務(wù)器一般有web服務(wù)器配合(當(dāng)然也非絕對)。 http請求方式為客戶端主動發(fā)起請求,服務(wù)器才能給響應(yīng),一次請求完畢后則斷開連接,以節(jié)省資源。服務(wù)器不能主動給客戶端響應(yīng)(除非采取http長連接 技術(shù))。iphone主要使用類是NSUrlConnection。

scoket是客戶端跟服務(wù)器直接使用socket“套接字”進(jìn)行連接,并沒有規(guī)定連接后斷開,所以客戶端和服務(wù)器可以保持連接通道,雙方 都可以主動發(fā)送數(shù)據(jù)。一般在游戲開發(fā)或股票開發(fā)這種要求即時性很強并且保持發(fā)送數(shù)據(jù)量比較大的場合使用。主要使用類是CFSocketRef。

7.TCP和UDP的區(qū)別?

答:

?TCP全稱是Transmission Control Protocol,中文名為傳輸控制協(xié)議,它可以提供可靠的、面向連接的網(wǎng)絡(luò)數(shù)據(jù)傳遞服務(wù)。傳輸控制協(xié)議主要包含下列任務(wù)和功能:

* 確保IP數(shù)據(jù)報的成功傳遞。

* 對程序發(fā)送的大塊數(shù)據(jù)進(jìn)行分段和重組。

* 確保正確排序及按順序傳遞分段的數(shù)據(jù)。

* 通過計算校驗和,進(jìn)行傳輸數(shù)據(jù)的完整性檢查。

TCP提供的是面向連接的、可靠的數(shù)據(jù)流傳輸,而UDP提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。

簡單的說,TCP注重數(shù)據(jù)安全,而UDP數(shù)據(jù)傳輸快點,但安全性一般

8.你了解svn,cvs等版本控制工具么?

答: 版本控制 svn,cvs 是兩種版控制的器,需要配套相關(guān)的svn,cvs服務(wù)器。scm是xcode里配置版本控制的地方。版本控制的原理就是a和b同時開發(fā)一個項目,a寫完當(dāng)天的代碼之后把代碼提交給服務(wù)器,b要做的時候先從服務(wù)器得到最新版本,就可以接著做。 如果a和b都要提交給服務(wù)器,并且同時修改了同一個方法,就會產(chǎn)生代碼沖突,如果a先提交,那么b提交時,服務(wù)器可以提示沖突的代碼,b可以清晰的看到,并做出相應(yīng)的修改或融合后再提交到服務(wù)器。

9.什么是push。

答: 客戶端程序留下后門端口,客戶端總是監(jiān)聽針對這個后門的請求,于是 服務(wù)器可以主動像這個端口推送消息。

10.靜態(tài)鏈接庫

答:此為.a文件,相當(dāng)于java里的jar包,把一些類編譯到一個包中,在不同的工程中如果導(dǎo)入此文件就可以使用里面的類,具體使用依然是#import “ xx.h”。

11.fmmpeg框架

答: 音視頻編解碼框架,內(nèi)部使用UDP協(xié)議針對流媒體開發(fā),內(nèi)部開辟了六個端口來接受流媒體數(shù)據(jù),完成快速接受之目的。

12.fmdb框架

答:數(shù)據(jù)庫框架,對sqllite的數(shù)據(jù)操作進(jìn)行了封裝,使用著可把精力都放在sql語句上面。

13.什么是沙盒模型?哪些操作是屬于私有api范疇?

答:某個iphone工程進(jìn)行文件操作有此工程對應(yīng)的指定的位置,不能逾越。iphone沙箱模型的有四個文件夾documents,tmp,app,Library,永久數(shù)據(jù)存儲一般放documents文件夾,得到模擬器的路徑的可使用NSHomeDirectory()方法。Nsuserdefaults保存的文件在tmp文件夾里。

14.在一個對象的方法里面:self.name= “object”;和 name =”object” 有什么不同嗎?

答:self.name?=”object”:會調(diào)用對象的setName()方法;name = “object”:會直接把object賦值給當(dāng)前對象的name屬性。

15.請簡要說明viewDidLoad和viewDidUnload何時調(diào)用

答:viewDidLoad在view從nib文件初始化時調(diào)用,loadView在controller的view為nil時調(diào)用。此方法在編程實現(xiàn)view時調(diào)用,view控制器默認(rèn)會注冊memory warning notification,當(dāng)view controller的任何view沒有用的時候,viewDidUnload會被調(diào)用,在這里實現(xiàn)將retain的view release,如果是retain的IBOutlet view 屬性則不要在這里release,IBOutlet會負(fù)責(zé)release 。

16.簡述內(nèi)存分區(qū)情況

答:

1).代碼區(qū):存放代碼的函數(shù)二進(jìn)制

2).數(shù)據(jù)區(qū):系統(tǒng)運行時申請內(nèi)存并初始化,系統(tǒng)退出時由系統(tǒng)釋放。存放全局變量、靜態(tài)變量、常量

3).堆區(qū):通過malloc等函數(shù)或new等操作符動態(tài)申請得到,需程序員手動申請和釋放

4).棧區(qū):函數(shù)模塊內(nèi)存申請,函數(shù)結(jié)束時由系統(tǒng)自動釋放。存放局部變量、函數(shù)參數(shù)

17.隊列和棧有什么區(qū)別?

答:

隊列和棧是兩種不同的數(shù)據(jù)容器。1>從”數(shù)據(jù)結(jié)構(gòu)”的角度看,它們都是線性結(jié)構(gòu),即數(shù)據(jù)元素之間的關(guān)系相同。

2>隊列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),它在兩端進(jìn)行操作,一端進(jìn)行入隊列操作,一端進(jìn)行出列隊操作。

棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),它只能在棧頂進(jìn)行操作,入棧和出棧都在棧頂操作。

18.HTTP協(xié)議中,POST和GET的區(qū)別是什么?

答:

1).GET 方法

GET 方法提交數(shù)據(jù)不安全,數(shù)據(jù)置于請求行,客戶端地址欄可見;

GET 方法提交的數(shù)據(jù)大小有限

GET 方法不可以設(shè)置書簽

2).POST 方法

POST 方法提交數(shù)據(jù)安全,數(shù)據(jù)置于消息主體內(nèi),客戶端不可見

POST 方法提交的數(shù)據(jù)大小沒有限制

POST 方法可以設(shè)置書簽

19.iOS的系統(tǒng)架構(gòu)

答:OS的系統(tǒng)架構(gòu)分為( 核心操作系統(tǒng)層 theCore OS layer )、( 核心服務(wù)層theCore Services layer )、( 媒體層 theMedia layer )和( Cocoa 界面服務(wù)層 the Cocoa Touch layer )四個層次。

20.控件主要響應(yīng)3種事件?

答:1). 基于觸摸的事件 ; 2). 基于值的事件 ; 3).基于編輯的事件。

21.?xib文件的構(gòu)成分為哪3個圖標(biāo)?都具有什么功能。

答: File’s Owner 是所有 nib 文件中的每個圖標(biāo),它表示從磁盤加載 nib 文件的對象;

First Responder 就是用戶當(dāng)前正在與之交互的對象;

View 顯示用戶界面;完成用戶交互;是 UIView 類或其子類.

22.簡述視圖控件器的生命周期。

答: loadView 盡管不直接調(diào)用該方法,如多手動創(chuàng)建自己的視圖,那么應(yīng)該覆蓋這個方法并將它們賦值給試圖控制器的 view 屬性。

viewDidLoad 只有在視圖控制器將其視圖載入到內(nèi)存之后才調(diào)用該方法,這是執(zhí)行任何其他初始化操作的入口。

viewDidUnload 當(dāng)試圖控制器從內(nèi)存釋放自己的方法的時候調(diào)用,用于清除那些可能已經(jīng)在視圖控制器中創(chuàng)建的對象。

viewVillAppear 當(dāng)視圖將要添加到窗口中并且還不可見的時候或者上層視圖移出圖層后本視圖變成頂層視圖時調(diào)用該方法,用于執(zhí)行諸如改變視圖方向等的操作。實現(xiàn)該方法時確保調(diào)用 [super viewWillAppear:]

viewDidAppear 當(dāng)視圖添加到窗口中以后或者上層視圖移出圖層后本視圖變成頂級視圖時調(diào)用,用于放置那些需要在視圖顯示后執(zhí)行的代碼。確保調(diào)用 [super viewDidAppear:] 。

23.動畫有基本類型有哪幾種;表視圖有哪幾種基本樣式。

答:動畫有兩種基本類型:隱式動畫和顯式動畫.

24.實現(xiàn)簡單的表格顯示需要設(shè)置UITableView的什么屬性、實現(xiàn)什么協(xié)議?

答:實現(xiàn)簡單的表格顯示需要設(shè)置 UITableView 的 dataSource 和 delegate 屬性,實現(xiàn)UITableViewDataSource 和 UITableViewDelegate 協(xié)議。

25.Cocoa Touch提供了哪幾種Core Animation過渡類型?

答: Cocoa Touch 提供了 4 種 Core Animation 過渡類型,分別為:交叉淡化、推擠、顯示和覆蓋。

26.UIView與CLayer有什么區(qū)別?

答:

1).UIView 是 iOS 系統(tǒng)中界面元素的基礎(chǔ),所有的界面元素都是繼承自它。它本身完全是由 CoreAnimation 來實現(xiàn)的。它真正的繪圖部分,是由一個 CALayer 類來管理。 UIView 本身更像是一個 CALayer 的管理器,訪問它的跟繪圖和跟坐標(biāo)有關(guān)的屬性。

2).UIView 有個重要屬性 layer ,可以返回它的主 CALayer 實例。

3).UIView 的 CALayer 類似 UIView 的子 View 樹形結(jié)構(gòu),也可以向它的 layer 上添加子layer ,來完成某些特殊的表示。即 CALayer 層是可以嵌套的。

4).UIView 的 layer 樹形在系統(tǒng)內(nèi)部,被維護(hù)著三份 copy 。分別是邏輯樹,這里是代碼可以操縱的;動畫樹,是一個中間層,系統(tǒng)就在這一層上更改屬性,進(jìn)行各種渲染操作;顯示樹,其內(nèi)容就是當(dāng)前正被顯示在屏幕上得內(nèi)容。

5).動畫的運作:對 UIView 的 subLayer (非主 Layer )屬性進(jìn)行更改,系統(tǒng)將自動進(jìn)行動畫生成,動畫持續(xù)時間的缺省值似乎是 0.5 秒。

6).坐標(biāo)系統(tǒng): CALayer 的坐標(biāo)系統(tǒng)比 UIView 多了一個 anchorPoint 屬性,使用CGPoint 結(jié)構(gòu)表示,值域是 0~1 ,是個比例值。這個點是各種圖形變換的坐標(biāo)原點,同時會更改 layer 的 position 的位置,它的缺省值是 {0.5,0.5} ,即在 layer 的中央。

7).渲染:當(dāng)更新層,改變不能立即顯示在屏幕上。當(dāng)所有的層都準(zhǔn)備好時,可以調(diào)用setNeedsDisplay 方法來重繪顯示。

8).變換:要在一個層中添加一個 3D 或仿射變換,可以分別設(shè)置層的 transform 或affineTransform 屬性。

9).變形: Quartz Core 的渲染能力,使二維圖像可以被自由操縱,就好像是三維的。圖像可以在一個三維坐標(biāo)系中以任意角度被旋轉(zhuǎn),縮放和傾斜。 CATransform3D 的一套方法提供了一些魔術(shù)般的變換效果。

27.Quatrz 2D的繪圖功能的三個核心概念是什么并簡述其作用。

答:上下文:主要用于描述圖形寫入哪里;路徑:是在圖層上繪制的內(nèi)容;狀態(tài):用于保存配置變換的值、填充和輪廓, alpha 值等;

28.iPhone OS主要提供了幾種播放音頻的方法?

答: SystemSound Services,AVAudioPlayer 類,Audio Queue Services

29.使用AVAudioPlayer類調(diào)用哪個框架、使用步驟?

答:

AVFoundation.framework

步驟:配置 AVAudioPlayer 對象;

實現(xiàn) AVAudioPlayer 類的委托方法;

控制 AVAudioPlayer 類的對象;

監(jiān)控音量水平;

回放進(jìn)度和拖拽播放。

30.有哪幾種手勢通知方法、寫清楚方法名?

答:

-(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event;

-(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesCanceled:(NSSet*)touchedwithEvent:(UIEvent*)event;

31.CFSocket使用有哪幾個步驟?

答:創(chuàng)建 Socket 的上下文;創(chuàng)建 Socket ;配置要訪問的服務(wù)器信息;封裝服務(wù)器信息;連接服務(wù)器;

32.ios 平臺怎么做數(shù)據(jù)的持久化?coredata 和sqlite有無必然聯(lián)系?coredata是一個關(guān)系型數(shù)據(jù)庫嗎?

答:iOS 中可以有四種持久化數(shù)據(jù)的方式:屬性列表(plist)、對象歸檔、 SQLite3 和 Core Data; core data 可以使你以圖形界面的方式快速的定義 app 的數(shù)據(jù)模型,同時在你的代碼中容易獲取到它。 coredata 提供了基礎(chǔ)結(jié)構(gòu)去處理常用的功能,例如保存,恢復(fù),撤銷和重做,允許你在 app 中繼續(xù)創(chuàng)建新的任務(wù)。在使用 core data 的時候,你不用安裝額外的數(shù)據(jù)庫系統(tǒng),因為 core data 使用內(nèi)置的 sqlite 數(shù)據(jù)庫。 core data 將你 app 的模型層放入到一組定義在內(nèi)存中的數(shù)據(jù)對象。 coredata 會追蹤這些對象的改變,同時可以根據(jù)需要做相反的改變,例如用戶執(zhí)行撤銷命令。當(dāng) core data 在對你 app 數(shù)據(jù)的改變進(jìn)行保存的時候, core data 會把這些數(shù)據(jù)歸檔,并永久性保存。 mac os x 中sqlite 庫,它是一個輕量級功能強大的關(guān)系數(shù)據(jù)引擎,也很容易嵌入到應(yīng)用程序??梢栽诙鄠€平臺使用, sqlite 是一個輕量級的嵌入式 sql 數(shù)據(jù)庫編程。與 core data 框架不同的是, sqlite 是使用程序式的, sql 的主要的 API 來直接操作數(shù)據(jù)表。 Core Data 不是一個關(guān)系型數(shù)據(jù)庫,也不是關(guān)系型數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 。雖然 Core Dta 支持SQLite 作為一種存儲類型,但它不能使用任意的 SQLite 數(shù)據(jù)庫。 Core Data 在使用的過程種自己創(chuàng)建這個數(shù)據(jù)庫。 Core Data 支持對一、對多的關(guān)系。

33.tableView 的重用機制?

答:UITableView 通過重用單元格來達(dá)到節(jié)省內(nèi)存的目的: 通過為每個單元格指定一個重用標(biāo)識符(reuseIdentifier),即指定了單元格的種類,以及當(dāng)單元格滾出屏幕時,允許恢復(fù)單元格以便重用.對于不同種類的單元格使用不同的ID,對于簡單的表格,一個標(biāo)識符就夠了.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.#import和#include的區(qū)別 @class?@class一般用于頭文件中需要聲明該類的某個實例變量的...
    晚照清舟閱讀 343評論 0 0
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,843評論 0 4
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,618評論 30 472
  • 總覺得世間所有感情皆有期限,有長度,有量,我們都是彼此的消耗品,互相交換秘密,交換思想,從耳朵和眼睛感受,在大腦消...
    1896年遇到你閱讀 446評論 0 0

友情鏈接更多精彩內(nèi)容