面試題整理一

1.http和https有什么區別?

(1)HTTP:超文本傳輸協議,是短連接,是客戶端主動發送請求,服務器作出相應,服務器響應之后,連接斷開。HTTP是一個屬于應用層的面向對象的協議。HTTP有兩類報文:請求報文和響應報文。

(2)HTTPS:安全超文本傳輸協議,他是一個安全通信通道,它基于HTTP開發,用于在客戶計算機和服務器之間交換信息。它使用安全套接字層(SSI)進行信息交換,簡單來說它是HTTP的安全版。

2.長連接和短連接,闡述一下。

長連接:一旦和服務器建立連接之后,只要不主動退出,或是服務器不把你踢下線,這個連接就一直存在,指在一個連接上可以連續發送多個數據包,在連接保持期間,如果沒有數據包發送,需要雙方發鏈路檢測包。

好處:因為已經建立了連接,并且只需要建立一次,下次就直接發送請求,特別適合即時通信

缺點:一直占著服務器的連接資源,讓別的客戶端,無法訪問

短連接:和服務器建立交互之后,會主動斷開連接,這個叫做短連接 ,指通訊雙方有數據交互時,就建立一個連接,數據發送完成后,則斷開此連接,即每次連接只完成一項業務的發送。

優點:不需要長期占用通道,對于業務頻率不高的場合,能節省通道的使用。可以讓更多的客戶端.連接到服務器,然后獲取資源

缺點:需要在每次發送業務時,都要建立一次連接,連接建立的過程開銷大。每個客戶端每一次都需要3次握手建立連接,這樣的需要時間

3.XMPP協議

XMPP是一種基于標準通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的發展性。因此,基于XMPP的應用具有超強的可擴展性。經過擴展以后的XMPP可以通過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內容發布系統和基于地址的服務等應用程 序。而且,XMPP包含了針對服務器端的軟件協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程序或給一個配好系統添加功能。

4.Sokect方面的環信方面的

socket起源于Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open–>讀寫write/read–>關閉close”模式來操作。我的理解就是Socket就是該模式的一個實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉)

5.Userdeafault和plist有什么區別?

起都存儲在一個plist。

Plist和NSUserDefaults基本上是相同的然而NSUserDefaults只應該用于保存首選項和不大的數據量

6.查詢數據庫中前十個數據怎么寫?

select top 20 *

from tbl

7.數據庫(問題很大 很多 要好好搞)

8.如果后期需要增加數據庫中的字段怎么實現,如果不使用CoreData呢?

3>修改表字段

ALETER TABLE表名RENAME COLUMN舊字段名TO新字段名

9.SQLite數據存儲是怎么用?

1>增加SQLite動態庫:libsqlite3.dylib

2>導入主頭文件:#import

3>利用C語言函數創建/打開數據庫,編寫SQL語句

10.簡單描述下客戶端的緩存機制?

1.緩存可以分為:內存數據緩存、數據庫緩存、文件緩存

2.每次想獲取數據的時候

1>先檢測內存中有無緩存

2>再檢測本地有無緩存(數據庫/文件)

3>最終發送網絡請求

4>將服務器返回的網絡數據進行緩存(內存、數據庫、文件)以便下次讀取

11.Md5、aes、RSA加密本質區別是什么?

Md5是不可逆的aes和RSA是可逆的

12.MVC和MVVM,簡述一下

任何一個正經開發過一陣子軟件的人都熟悉MVC,它意思是Model View Controller,是一個在復雜應用設計中組織代碼的公認模式.它也被證實在iOS開發中有著第二種含義: Massive View Controller(重量級視圖控制器)。它讓許多程序員絞盡腦汁如何去使代碼被解耦和組織地讓人滿意.

MVVM在概念上是真正將頁面與數據邏輯分離的模式,它把數據綁定工作放到一個JS里去實現,而這個JS文件的主要功能是完成數據的綁定,即把model綁定到UI的元素上。

13.Assign和weak引用計數器加不加1,strong和retain引用計數器加不加1?

Assign和weak不加1,strong和retain加1.

14.Assign和weak修飾Delegate的時候,有什么區別?

Assign修飾時,出作用域的時候Delegate不會釋放,容易野指針。Weak修飾時,出作用域之后Delegate將會釋放。

15.Delegate會出現找不到方法的錯誤,不想實現方法又不想讓其報錯,應該怎么辦?

將該方法從@required放入@optional中

16.category和extension

Category(類別):

Category在iOS開發中使用非常頻繁,尤其是在為系統類進行拓展時,可以不用繼承系統類,直接給系統類添加方法,最大程度的體現了OC的動態語言特性。

通常的命名方式是:Category擴展的類名+Category

name;

局限性:

1、無法向類中添加新的實例變量,類別沒有位置容納實例變量;

2、名稱沖突,即當類別中的方法與原始類方法名稱沖突時,類別具有更高的優先級,類別方法將完全取代初始方法。

類別的作用:

1、擴展一個其他實施者定義的類,可以為某個類增加方法,增加的方法會被子類繼承,而且在運行時也不會和原始的方法有任何不同;

2、作為子類的一個替代方法,不需要定義一個子類來擴展已有的類,通過Category可以直接為類添加方法;

3、把實現一個新類的方法分布在多個源文件里,可以把一個很大的類的方法分組到幾個Category里,然后把每個Category放在自己的文件里,Category在很多方面對開發過程都是有幫助的:

①提供一個簡單地方式組合相關的方法。被定義在不同的類里的相似的方法可以被保存在同一個源文件里;

②當一個類是由多個開發者共同定義的時候,可以簡化大類的管理;

③為一個非常大的類的增量編譯提供方便;

④提高常用方法的本地參考;

⑤可以根據不同版本的程序配置不同的類,而無需為不同版本保持相同的源代碼;

4、可以用來聲明非正式協議;

注意:

1、Category的方法不一定非要在implementation中實現,也可以在其他位置實現,但是當調用Category的方法時,依據繼承樹沒有找到該方法的實現,程序會崩潰。

2、Category理論上不能添加變量,但是可以使用@dynamic來彌補這種不足。

Extension(擴展):

1、常被稱為是匿名的Category

2、用于給類添加新方法,但只作用于原始類,不作用于subclass

3、只能對有implementation源代碼的類寫Extension,對于沒有implementation源代碼的類,比如framework class,是不可以的

4、可以給原始類添加新方法,以及新屬性

區別:

1、形式上來看,Extension是匿名的Category

2、Extension里聲明的方法需要在mainimplementation中實現,Category不強制要求

3、Extension可以添加屬性(變量),Category不可以

17.category分類中能否添加屬性,為什么,應該怎么添加,代碼是什么?

用runtime實現

objc_setAssociatedObject(<#id

object#>, <#const void *key#>, <#id value#>,

<#objc_AssociationPolicy policy#>)

18.簡述ViewController的生命周期,按順序。

各方法執行流程如下:

init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

19.ViewWillAppear和ViewDidLoad中加通知,在哪個方法中移除?

將移除通知的代碼放到dealloc方法中

dealloc方法是在控制器銷毀之時調用的。這個時候移除通知而不是在viewWillDisappear:方法中移除可以有效避免上述的問題

20.ViewController1和ViewController2,當V1跳到V2時,相對于V1來說ViewController的生命周期執行哪些方法?相對于V2來說ViewController的生命周期執行哪些方法?

v1

viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

v2

init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper

21.簡述oc的消息轉發機制?

1、動態方法解析

2、備用接受者

3、完整轉發

22.Objc對nil對象發消息會導致什么?

在Objective-C中向nil發送消息是完全有效的,只是在運行時不會有任何作用

23.事件的傳遞順序

觸摸事件的傳遞是從父控件傳遞到子控件

也就是UIApplication->window->尋找處理事件最合適的view

24.一個界面有兩個滑動的時間,你是怎么處理滑動事件沖突的。

25.什么是block?block實現原理?

block是一個特殊的OC對象,它建立在棧上,而不是堆上,這么做一個是為性能考慮,還有就是方便訪問局部變量。默認情況下block使用到的局部變量都會被復制,而不是保留。所以它無法改變局部變量的值。如果在變量面前加上__block,那么編譯器回去不會復制變量,而是去找變量的地址,通過地址來訪問變量,實際上就是直接操作變量。另外block是在棧上分配的,所以一旦離開作用域,就會釋放,因此如果你要把快用在別的地方,必須要復制一份。block是不能保留的, retain對塊沒有意義。

26.Int a = 0;block{ a = 10; }錯沒錯?應該怎么改?

修飾int a = 0的時候加上__block

27.block如果出現循環引用怎么辦?簡述循環引用怎么造成的?

block內部有一個weakself,weakself本身是一個弱引用,由于對弱引用無法強持有,所以, block并沒有強持有self,當self想要釋放的時候,已經沒有其他強引用了,就可以釋放.self被釋放,就沒有變量強持有block,block也會釋放.這樣,循環引用就不存在了

28.地圖的浮層怎么操作的,地理編碼 和 反地理編碼自定義大頭針(百度地圖)?

29.支付寶的流程?微信支付的流程?內購的流程?

支付寶快捷支付的主要步驟:

先與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller);

下載相應的公鑰私鑰文件(加密簽名用);

下載支付寶SDK;

生成訂單信息;

調用支付寶客戶端,由支付寶客戶端跟支付寶安全服務器打交道;

支付完畢后返回支付結果給商戶客戶端和服務。

而iOS客戶端需要做的是:

調用支付寶支付接口;

處理支付寶返回的支付結果。

在調用支付寶支付接口前,還需要先生成一個訂單,下載的支付寶文檔中描述時,是將這步也放在客戶端來做了,但也可以在服務器端生成這個訂單(支付寶會在支付成功后通知服務器端,所以在服務器端生成訂單的話,開發者掌握所有訂單,而且也會更安全)。

生成訂單(可以在iOS客戶端內生成,也可以在服務器端生成);

調用支付寶支付接口,發送訂單;

處理支付寶返回的支付結果。

支付寶支付的安全問題,需要在生成訂單和處理支付結果的時候做一個安全性校驗:即生成訂單時對數據簽名,收到支付結果時對數據進行簽名驗證,以檢驗數據是否被篡改過(支付寶目前只支持采用RSA加密方式做簽名驗證)。簡單地說,就是在生產訂單時,需要使用私鑰生成簽名值;在處理返回的支付結果時,需要使用公鑰驗證返回結果是否被篡改

30.簡述一下你項目中的封裝思想。

將有相同屬性的成員放入一個類中,將其內部屬性屏蔽起來,控制器只需要用他而不需要知道他內部的成員屬性

31.你都自定義過什么控件?

自己發揮

32.Runtime簡述?

RunTime簡稱運行時。就是系統在運行的時候的一些機制,其中最主要的是消息機制。對于C語言,函數的調用在編譯的時候會決定調用哪個函數(C語言的函數調用請看這里)。編譯完成之后直接順序執行,無任何二義性。OC的函數調用成為消息發送。屬于動態調用過程。在編譯的時候并不能決定真正調用哪個函數(事實證明,在編譯階段,OC可以調用任何函數,即使這個函數并未實現,只要申明過就不會報錯。而C語言在編譯階段就會報錯)。只有在真正運行的時候才會根據函數的名稱找到對應的函數來調用。

33.runtime實現的機制是什么,怎么用,一般用于干嘛.你還能記得你所使用的相關的頭文件或者某些方法的名稱嗎

太多。參考這個

http://www.lxweimin.com/p/29d674eec06e

34.Runloop簡述,NSRunLoop的實現機制,及在多線程中如何使用。

Run loops是線程相關的的基礎框架的一部分。一個run loop就是一個事件處理 的循環,用來不停的調度工作以及處理輸入事件。

使用run loop的目的是讓你的線程在有工作的時候忙于工作,而沒工作的時候處于休眠狀態。

Runloop還可以在loop在循環中的同時響應其他輸入源,比如界面控件的按鈕,手勢等。

線程和RunLoop之間是一一對應的,其關系是保存在一個全局的Dictionary里。線程剛創建時并沒有RunLoop,如果你不主動獲取,那它一直都不會有。RunLoop的創建是發生在第一次獲取時,RunLoop的銷毀是發生在線程結束時。你只能在一個線程的內部獲取其RunLoop(主線程除外)。

35.scrollView滑動時間和定時器的沖突怎么解決?

NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環中的時候, ScrollView滾動過程中會因為mode的切換,而導致NSTimer將不再被調度。

36.多線程有哪幾種,優缺點是什么?

NSThread:

優點:NSThread比其他兩個輕量級

缺點:需要自己管理線程的生命周期,線程同步。線程同步對數據的加鎖會有一定的系統開銷

Cocoa operation

優點:不需要關心線程管理,數據同步的事情,可以把精力放在自己需要執行的操作上。

Cocoa operation相關的類是NSOperation,NSOperationQueue。NSOperation是個抽象類,使用它必須用它的子類,可以實現它或者使用它定義好的兩個子類:NSInvocationOperation和NSBlockOperation。創建NSOperation子類的對象,把對象添加到NSOperationQueue隊列里執行。

GCD

Grand Central Dispatch (GCD)是Apple開發的一個多核編程的解決方法。在iOS4.0開始之后才能使用。GCD是一個替代諸如NSThread, NSOperationQueue, NSInvocationOperation等技術的很高效和強大的技術。現在的iOS系統都升級到6了,所以不用擔心該技術不能使用。

37.@property都為我們產生出什么東西?并且怎么能只生成getter方法不生成setter方法?

生成__實例變量,setter方法,getter方法

添加一個只讀屬性readonly

38.@synthesize和@dynamic分別有什么作用?

@synthesize的語義是如果你沒有手動實現setter方法和getter方法,那么編譯器會自動為你加上這兩個方法。

@dynamic告訴編譯器:屬性的setter與getter方法由用戶自己實現,不自動生成。(當然對于readonly的屬性只需提供getter即可)。假如一個屬性被聲明為@dynamic var,然后你沒有提供@setter方法和@getter方法,編譯的時候沒問題,但是當程序運行到instance.var =

someVar,由于缺setter方法會導致程序崩潰;或者當運行到someVar = var時,由于缺getter方法同樣會導致崩潰。編譯時沒問題,運行時才執行相應的方法,這就是所謂的動態綁定

39.哪些類型使用copy,不用strong?如果NSString使用了strong不用copy會造成什么問題?

當源字符串是NSString時,由于字符串是不可變的,所以,不管是strong還是copy屬性的對象,都是指向源對象,copy操作只是做了次淺拷貝。

當源字符串是NSMutableString時,strong屬性只是增加了源字符串的引用計數,而copy屬性則是對源字符串做了次深拷貝,產生一個新的對象,且copy屬性對象指向這個新的對象。另外需要注意的是,這個copy屬性對象的類型始終是NSString,而不是NSMutableString,因此其是不可變的。

這里還有一個性能問題,即在源字符串是NSMutableString,strong是單純的增加對象的引用計數,而copy操作是執行了一次深拷貝,所以性能上會有所差異。而如果源字符串是NSString時,則沒有這個問題。

所以,在聲明NSString屬性時,到底是選擇strong還是copy,可以根據實際情況來定。不過,一般我們將對象聲明為NSString時,都不希望它改變,所以大多數情況下,我們建議用copy,以免因可變字符串的修改導致的一些非預期問題

40.iOS沙盒目錄的結構是怎么樣的?APP Bundle里面都有什么?

(1)默認情況下,每個沙盒含有3個文件夾:Documents, Library和tmp。因為應用的沙盒機制,應用只能在幾個目錄下讀寫文件

Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄

Library:存儲程序的默認設置或其它狀態信息;

Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除

tmp:提供一個即時創建臨時文件的地方。

(2)

1、名稱

在用戶從App Store發現你的App Bundles過程中,App Bundles的名稱扮演了一個關鍵的角色。開發者需要選擇一個能精準反應App

Bundles內容的名字(比如Music Maker

Bundle或者Winter Sports Pack)。盡量不要使用“Editor’s Choice”、“Essentials”或者“Collection”這類詞。

尤其需要注意App Bundles的名稱在iPad、iPhone以及iPod touch的App Store中的展示。過長的名字會被系統截斷,用戶也不會看到所有的字符。推薦將App Bundles的名字限定在23個字符以內,以便能在每臺設備上都能最佳展示。

2、截圖

每個bundled

app的第一張截圖會展示在App Bundle的產品頁面。最好的情況是每張截圖都能清晰地傳達應用程序的精髓。

3、關鍵字

iTunes

Connect會編譯你為bundled apps鍵入的關鍵字,并在你的App Bundle元數據中使用它們。

4、Icons

App

Bundles的icon由包中頭四個app組成中。開發者可以選擇突出最能引起用戶興趣的四個app,所以要考慮放置最受歡迎的應用程序。

要確保App

Bundle中每個應用程序的icon是與眾不同的,并集中于一個最引人注目的圖像上。文本、品牌以及其他小的元素可能不能很好地展示在尺寸縮小的bundle icon上。

5、Bundle描述

App

Bundle的描述應當是簡明的、吸引人的。最開始的那幾句描述最重要,這些內容需要用戶一眼就能看到,無需點擊“…

more”。理想的描述應當是一個簡潔的引人注目的段落,然后是主要功能列表項目。

關注App

Bundle的各個方面都將會促使用戶下載你的應用(還包括其他方面,比如App Bundle中應用程序的質量、為什么要創建一個Bundle app以及你所提供的折扣價格)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容

  • 1、使用NSTimer,需要注意什么? 這里按我的理解就是,主要是涉及runloop了。 一是拖動scrollVi...
    Jt_Self閱讀 292評論 0 3
  • 1.Android系統的架構 Android采用層次化系統架構,官方公布的標準架構如下圖所示。Android由底層...
    大棄閱讀 1,671評論 0 11
  • 1.堆和棧的區別 2.死鎖問題 //死鎖原因 dispatch_sync在等待block語句執行完成,而block...
    Mominglaile閱讀 266評論 0 1
  • 1、解釋內存中的棧(stack)、堆(heap)和方法區(method area)的用法。 通常我們定義一個基本數...
    Stern_閱讀 829評論 0 0
  • 1.web標準: (1)結構標準:其語言主要包括XHTML(實現HTML向XML的過渡。)和XML(用于彌補HTM...
    張果果閱讀 3,789評論 0 13