ios面試題

    • 前提:本文是給面試經驗少的同窗準備。
      首先,談一下面試前的準備,分爲兩個方面;
      —:普遍閱覽面試題目,找出重點題目,事先將答案記好。不少人覺得本身作了幾個項目,平時也有認真學習,不屑於去臨時抱佛腳,這是大錯特錯的,不少你瞭解的東西到面試時會因爲心理壓力,而讓你表訴不清楚,面試官聽的似懂非懂,結果不言而喻,普遍閱讀也讓你在面試時顯得涉獵廣,遊刃有餘。
      二:重中之重,簡歷的書寫,一份好的簡歷讓你在別人開口前,印象分就多了20分。簡歷分三個方面:(1)我的信息(2)我的技能(3)項目經驗;最後再加上點我的評價(一兩句話便可,寫一句「適應力強,自學力強」通用。切忌寫一大堆。)
      這裏有兩個不錯的模版:http://wenku.baidu.com/user/contribution?st=1
    • 2
          好了,我們準備工做已經完成。開始模擬面試(題目來自於我親身經歷)。
          面試核心思想:引導面試官(過程當中體會,結尾總結)。禮儀,着裝我就不說了,你們都是成年人。
           通常來講,若是你是同幾我的一塊兒面試,不要作第一個,緣由很簡單,你看看「我是歌手」你就明白了。當面試了好幾我的後,第一我的的印象會下降,但凡a,b,c能力相差無幾,b,c成功率要高過a,另外一個重要緣由是,後者一般會被問到a沒答好的問題,你如果能答好,高下立判。至於答很差,面試官也以爲大家一個水平。
      Question 1:什麼是面向對象。
          切入: 面試官要的不是答案自己,而是你的邏輯表述,理解,及應用。
          答:面向對象是區別於面向過程而言的,面向過程能夠表述爲:程序 = 算法+ 數據結構 ;面向對象能夠表述爲 程序 = 對象 + 消息。
      面向對象是儘量模擬人類習慣的思惟方式,使開發軟件的方法與過程儘量接近人類認識世界解決問題的方法與過程。 咱們強調「萬物皆對象」,咱們抽象他們的屬性與行爲出來,以代碼的形式展示。它有三個基本特徵
      1.封裝:
      封裝就是,隱藏內部具體實現,只提供接口方法去訪問。好比咱們調用NSString類的,截取,拼接方法時,咱們並不須要具體的算法,而只需調用相應方法。
      2. 繼承:
      它是面向對象的程序中兩個類之間的一種關係,即一個類能夠從另外一個類(即它的父類)繼承狀態和行爲。繼承父類的類稱爲子類。
      繼承的優越性:經過使用繼承,程序員能夠在不一樣的子類中屢次從新使用父類中的代碼,使程序結構清晰,易於維護和修改,而子類又能夠提供一些特殊的行爲,這些特殊的行爲在父類中是沒有的 。
      3.多態:
      是指一個程序中同名的方法共存的狀況,調用者只需使用同一個方法名,系統會根據不一樣狀況,調用相應的不一樣方法,從而實現不一樣的功能。多態性又被稱爲「一個名字,多個方法」。

      以上的操做就是爲了實現代碼複用,實現代碼的可移植性,靈活性,及低耦合,高內聚。
      一個問題竟然寫了這麼多。。。。。。
    • 3
      Question 2:簡單介紹下你作的項目(這裏就是開始引導面試官了,若是他不問這個問題,你就本身提出來,你要知道面試官其實也緊張,他不知道你會些什麼,它可能懂得多,卻也有無從下手的感受,你遞個枕頭,他確定會接的。)
        答:(選取你本身會的答,好比)我用到了自定義cell顯示數據,使用三方框架AFNetworking,ASIHttpRequest,訪問網絡,拿到Jason,XML格式數據,而後進行一些數據的解析,本地存儲,還有用xmpp實現的即時聊天,在本地用代理,通知,block進行類之間的通訊,並植入了地圖,實現了上拉加載,下拉刷新功能。。。。。
         看到沒有,面試問題就出來了
      1.講一下tableViewCell的複用問題(重點)
      這是指它的重用機制,先明白爲何要重用,無他:效率,內存。
      查看UITableView頭文件,會找到NSMutableArray*  visiableCells,和NSMutableDictnery* reusableTableCells兩個結構。visiableCells內保存當前顯示的cells,reusableTableCells保存可重用的cells。
        TableView顯示之初,reusableTableCells爲空,那麼tableView dequeueReusableCellWithIdentifier:CellIdentifier返回nil。開始的cell都是經過[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]來建立,並且cellForRowAtIndexPath只是調用最大顯示cell數的次數。
        好比:有100條數據,iPhone一屏最多顯示10個cell。程序最開始顯示TableView的狀況是:
        1. 用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]建立10次cell,並給cell指定一樣的重用標識(固然,能夠爲不一樣顯示類型的cell指定不一樣的標識)。而且10個cell所有都加入到visiableCells數組,reusableTableCells爲空。
        2. 向下拖動tableView,當cell1徹底移出屏幕,而且cell11(它也是alloc出來的,緣由同上)徹底顯示出來的時候。cell11加入到visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。
        3. 接着向下拖動tableView,由於reusableTableCells中已經有值,因此,當須要顯示新的cell,cellForRowAtIndexPath再次被調用的時候,tableView dequeueReusableCellWithIdentifier:CellIdentifier,返回cell1。cell1加入到visiableCells,cell1移出reusableTableCells;cell2移出visiableCells,cell2加入到reusableTableCells。以後再須要顯示的Cell就能夠正常重用了。

      2.講一下如何根據內容自定義cell行高
      之前用的三方RTLabel(非arc,int,NSInteger等問題,方法過老,版本無跟新,以棄用)
      // iOS6中的方法,在iOS7中棄用了
       /* CGSize textSize = [textArray sizeWithFont:[UIFont systemFontOfSize:16.0] constrainedToSize:CGSizeMake(280, 100000000) lineBreakMode:NSLineBreakByWordWrapping];*/   
       // 定義一個字典,裏面還能夠放入其餘屬性,不只僅是字體大小    
      NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:15.0]};   
       //iOS7中提供的計算文本尺寸的方法    CGSize textSize1 = [textArray boundingRectWithSize:tableView.bounds.size options:NSStringDrawingUsesLineFragmentOrigin |     NSStringDrawingTruncatesLastVisibleLine  attributes:attribute context:nil].size;  
        NSLog(@"%f",textSize1.height);
          
      3.講一下AFNetworking,ASIHttpRequest
    • iOS開發:AFNetworking和ASIHTTPRequest的比較

        (2014-02-22 10:38:57)
      標籤: 

      it

       

      網絡請求

       

      asihttprequest

       

      afnetworking

       
                        iOS開發:AFNetworking和ASIHTTPRequest的比較
                                 ASI和AFN以及底層框架的關係 
       
       

      對比
      ASI AFN
      更新狀態 2012年10月份,已經中止更新 持續更新中,目前已更新至2.0版
      介紹
      ASI的直接操做對象ASIHTTPRequest,是一個實現了了NSCopying協議的NSOperation子類。
      在initialize和initWithURL:方法中初始化相關屬性並配置一系列請求相關參數默認值。此外,ASIHTTPRequest還提供了一系列的實例方法用來配置請求對象。
      AFN的直接操做對象AFHTTPClient,是一個實現了NSCoding和NSCopying協議的NSObject子類。AFHTTPClient是一個封裝了一系列操做方法的「工具類」,處理請求的操做類是一系列單獨的,基於NSOperation封裝的,AFURLConnectionOperation的子類。
      線程處理模式
      每個請求都由構造方法初始化一個(共享)實例,經過這個實例配置參數併發起請求。ASI最初使用delegate模式回調,在iOS SDK支持Block以後也提供了註冊Block的實例方法。
      ASI採起的是CFHTTP請求完成,直接回調ASIHTTPRequest的實例方法,經過儲存的實例對象記錄的信息完成Delegate模式或Block模式的回調。
       
      在異步請求的處理上,ASIHTTPRequest對象初始化結束後,在startAsynchronous方法中把對象加入共享操做隊列。此後,包括建立CFHTTPMessageRef,也就是處理網絡請求的主要對象(事實上是一個指向__CFHTTPMessage結構的指針),在內的全部操做都在ASIHTTPRequest對象所屬的子線程中完成。
      AFN的示例代碼中經過一個靜態方法,使用dispatch_once()的方式建立AFHTTPClient的共享實例,這也是官方建議的使用方法。在建立AFHTTPClient的初始化方法中,建立了OperationQueue並設置一系列參數默認值。在getPath:parameters:success:failure方法中建立NSURLRequest,以NSURLRequest對象實例做爲參數,建立一個NSOperation,並加入在初始化發方中建立的NSOperationQueue。
      以上操做都是在主線程中完成的。在NSOperation的start方法中,以此前建立的NSURLRequest對象爲參數建立NSURLConnection並開啓連結。
      數據處理模式 ASI在這方面顯得更原始,沒有針對任何數據類型作特別封裝,只是預留了各類接口和工具供開發者自行擴展。 AFN針對JSON、XML、PList和Image四種數據結構封裝了各自處理器,開發者能夠把處理器註冊到操做隊列中,直接在回調方法中得到格式化之後的數據。
      同步請求
      ASI則是直接經過調用一個startSynchronous方法。
       
      AFN默認沒有封裝同步請求,若是開發者須要使用同步請求,則須要重寫getPath:parameters:success:failure方法,對AFHTTPRequestOperation進行同步處理
      異步回調的處理 【使用AFNetworking進行網絡異步請求時,block:(void(^)代碼塊實際返回到UI主線程中。即便在子線程中使用AFNetWorking進行網絡的異步請求,block:(void(^)代碼塊仍然返回到UI主線程中(AF框架,它裏面已經create了異步線程 )。所以不管當前處在主線程仍是子線程,異步返回均返回到UI主線程中。】
      爲一系列相關的請求定義一個HTTPClient,共用一個BaseURL。每次請求把URL中除BaseURL的Path部分作爲參數傳給HTTPClient的靜態方法,並註冊一個Block用於回調。
      AFN則直接使用了NSOperation的completionBlock屬性。
      基於的底層開發框架
       
      CFNetwork框架
      使用CFnetwork而不是Cocoa框架NSURL有幾點好處。CFNetwork更加專一於網絡協議,而NSURL更加專一於數據訪問,好比經過HTTP或者FTP傳輸數據。儘管NSURL的確也提供了一些可配置功能,但是CFNetwork提供的要多的多。另外NSURL還須要你使用Objective_c。若是作不到這點的話,仍是應該使用CFNetwork
      NSURL
      【使用iOS5.0 SDK NSURLConnection:
       一、進行網絡同步請求(sendSynchronousRequest)時,調用該請求接口的操做在哪一個線程,同步返回的網絡結果就處於哪一個線程,所以一般進行網絡同步請求時,爲了不阻塞UI主線程,須要在子線程中進行網絡請求;
      二、進行網絡異步請求(sendAsynchronousRequest)時,block:(void(^)代碼塊實際返回到子線程中。所以,此時如須要向UI線程發送通知,則須要跳轉到主線程中發送通知dispatch_async(dispatch_get_main_queue(), ^{});】
      底層開發礦建介紹
      CFNetwork是基於Core Foundation中CFStream的一個底層高性能網絡框架,它由提供基礎服務的CFSocketStream,支持HTTP協議的CFHTTP,基於CFHTTP用於身份認證的CFHTTPAuthentication和支持FTP協議的CFFTP組成。
      Core Foundation框架中的CFSocket就是基於BSD Socket開發的。它幾乎涵蓋了BSD Socket的所有功能,更重要的是把Socket整合到事件的處理循環中。Core Founda-tion中較高層的CFStream是基於CFSocket開發的讀寫流支持。
      如圖所示,ASI是基於CFHTTP開發的一個組件;而AFN的基礎——NSURL,也是基於CFNetwork開發的,也就是說ASI相比AFN更加底層。
      性能對比 AFN請求優於ASI  
      總結 ASI更適合已經發展了一段時間的應用,或者開發資源相對豐富的團隊,由於每每這些團隊(或他們的應用)已經積累了必定的經驗,不管是產品上仍是技術上的。需求複雜度就是在這種時候高起來,並且底層訂製的需求也愈來愈多,此時AFN就很難知足需求,須要犧牲必定的易用性,使用ASI做爲網絡底層控件。 AFN適合邏輯簡單的應用,或者更適合開發資源尚不豐富的團隊,由於AFN的易用性要比ASI好不少,而這樣的應用(或團隊)對底層網絡控件的定製化要求也很是低。
      以上分析與對比是根據本人查資料以及測試所得,如有不正確的地方還請你們指出,謝謝!
       

      另附:iOS開發:AFNetworking、MKNetworkKit和ASIHTTPRequest比較【下圖爲查找的資料,還沒有驗證
      iOS開發:AFNetworking和ASIHTTPRequest的比較

      3.json和xml的區別(重點)
      底層展示不一樣,好比jason用{}表示字典[]數組
    • JSONXML的區別比較
    • 1.定義介紹
    • (1).XML定義
    • 擴展標記語言 (Extensible Markup Language, XML) ,用於標記電子文件使其具備結構性的標記語言,能夠用來標記數據、定義數據類型,是一種容許用戶對本身的標記語言進行定義的源語言。 XML使用DTD(document type definition)文檔類型定義來組織數據;格式統一,跨平臺和語言,早已成爲業界公認的標準。
    • XML是標準通用標記語言 (SGML) 的子集,很是適合 Web 傳輸。XML 提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。
    • (2).JSON定義
    • JSON(JavaScript Object Notation)一種輕量級的數據交換格式,具備良好的可讀和便於快速編寫的特性。可在不一樣平臺之間進行數據交換。JSON採用兼容性很高的、徹底獨立於語言文本格式,同時也具有相似於C語言的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)體系的行爲。這些特性使JSON成爲理想的數據交換語言。
    • JSON基於JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一個子集。
    • 2.XML和JSON優缺點
    • (1).XML的優缺點
    • <1>.XML的優勢
    •   A.格式統一,符合標準;
    •   B.容易與其餘系統進行遠程交互,數據共享比較方便。
    • <2>.XML的缺點
    •   A.XML文件龐大,文件格式複雜,傳輸佔帶寬;
    •   B.服務器端和客戶端都須要花費大量代碼來解析XML,致使服務器端和客戶端代碼變得異常複雜且不易維護;
    •   C.客戶端不一樣瀏覽器之間解析XML的方式不一致,須要重複編寫不少代碼;
    •   D.服務器端和客戶端解析XML花費較多的資源和時間。
    • (2).JSON的優缺點
    • <1>.JSON的優勢:
    •   A.數據格式比較簡單,易於讀寫,格式都是壓縮的,佔用帶寬小;
    •   B.易於解析,客戶端JavaScript能夠簡單的經過eval()進行JSON數據的讀取;
    •   C.支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務器端語言,便於服務器端的解析;
    •   D.在PHP世界,已經有PHP-JSON和JSON-PHP出現了,偏於PHP序列化後的程序直接調用,PHP服務器端的對象、數組等能直接生成JSON格式,便於客戶端的訪問提取;
    •   E.由於JSON格式能直接爲服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發量,且完成任務不變,而且易於維護。
    • <2>.JSON的缺點
    •   A.沒有XML格式這麼推廣的深刻人心和喜用普遍,沒有XML那麼通用性;
    •   B.JSON格式目前在Web Service中推廣還屬於初級階段。
    • 3.XML和JSON的優缺點對比
    • (1).可讀性方面。
    • JSON和XML的數據可讀性基本相同,JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規範的標籤形式,XML可讀性較好些。
    • (2).可擴展性方面。
    • XML天生有很好的擴展性,JSON固然也有,沒有什麼是XML能擴展,JSON不能的。
    • (3).編碼難度方面。
    • XML有豐富的編碼工具,好比Dom4j、JDom等,JSON也有json.org提供的工具,可是JSON的編碼明顯比XML容易許多,即便不借助工具也能寫出JSON的代碼,但是要寫好XML就不太容易了。
    • (4).解碼難度方面。
    • XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎爲0。這一點XML輸的真是沒話說。
    • (5).流行度方面。
    • XML已經被業界普遍的使用,而JSON纔剛剛開始,可是在Ajax這個特定的領域,將來的發展必定是XML讓位於JSON。到時Ajax應該變成Ajaj(Asynchronous Javascript and JSON)了。
    • (6).解析手段方面。
    • JSON和XML一樣擁有豐富的解析手段。
    • (7).數據體積方面。
    • JSON相對於XML來說,數據的體積小,傳遞的速度更快些。
    • (8).數據交互方面。
    • JSON與JavaScript的交互更加方便,更容易解析處理,更好的數據交互。
    • (9).數據描述方面。
    • JSON對數據的描述性比XML較差。
    • (10).傳輸速度方面。
    • JSON的速度要遠遠快於XML。
    • 4.XML與JSON數據格式比較
    • (1).關於輕量級和重量級
    • 輕量級和重量級是相對來講的,那麼XML相對於JSON的重量級體如今哪呢?應該體如今解析上,XML目前設計了兩種解析方式:DOM和 SAX。
    • <1>.DOM
    • DOM是把一個數據交換格式XML當作一個DOM對象,須要把XML文件整個讀入內存,這一點上JSON和XML的原理是同樣的,可是XML要考慮父節點和子節點,這一點上JSON的解析難度要小不少,由於JSON構建於兩種結構:key/value,鍵值對的集合;值的有序集合,可理解爲數組;
    • <2>.SAX
    • SAX不須要整個讀入文檔就能夠對解析出的內容進行處理,是一種逐步解析的方法。程序也能夠隨時終止解析。這樣,一個大的文檔就能夠逐步的、一點一點的展示出來,因此SAX適合於大規模的解析。這一點,JSON目前是作不到得。
    • 因此,JSON和XML的輕/重量級的區別在於:
    • JSON只提供總體解析方案,而這種方法只在解析較少的數據時才能起到良好的效果;
    • XML提供了對大規模數據的逐步解析方案,這種方案很適合於對大量數據的處理。
    • (2).關於數據格式編碼及解析難度
    • <1>.在編碼方面。
    • 雖然XML和JSON都有各自的編碼工具,可是JSON的編碼要比XML簡單,即便不借助工具,也能夠寫出JSON代碼,但要寫出好的XML代碼就有點困難;與XML同樣,JSON也是基於文本的,且它們都使用Unicode編碼,且其與數據交換格式XML同樣具備可讀性。
    • 主觀上來看,JSON更爲清晰且冗餘更少些。JSON網站提供了對JSON語法的嚴格描述,只是描述較簡短。從整體來看,XML比較適合於標記文檔,而JSON卻更適於進行數據交換處理。
    • <2>.在解析方面。
    • 在普通的web應用領域,開發者常常爲XML的解析傷腦筋,不管是服務器端生成或處理XML,仍是客戶端用 JavaScript 解析XML,都經常致使複雜的代碼,極低的開發效率。
    • 實際上,對於大多數Web應用來講,他們根本不須要複雜的XML來傳輸數據,XML宣稱的擴展性在此就不多具備優點,許多Ajax應用甚至直接返回HTML片斷來構建動態Web頁面。和返回XML並解析它相比,返回HTML片斷大大下降了系統的複雜性,但同時缺乏了必定的靈活性。同XML或 HTML片斷相比,數據交換格式JSON 提供了更好的簡單性和靈活性。在Web Serivice應用中,至少就目前來講XML仍有不可動搖的地位。

    • 4.本地數據如何存儲,用到些什麼方法(重點)
      coredata,NSUserDefaultCenter,數據庫,寫入文件
    •  1.NSKeyedArchiver:採用歸檔的形式來保存數據,該數據對象須要遵照NSCoding協議,而且該對象對應的類必須提供encodeWithCoder:和initWithCoder:方法。前一個方法告訴系統怎麼對對象進行編碼,然後一個方法則是告訴系統怎麼對對象進行解碼。例如對Possession對象歸檔保存。
    •   定義Possession:
    •   @interfacePossession:NSObject{ //遵照NSCoding協議
    •   NSString *name; //待歸檔類型
    •   }
    •   @implementation Possession
    •   -(void)encodeWithCoder:(NSCoder *)aCoder{
    •   [aCoderencodeObject:nameforKey:@"name"]; }
    •   -(void)initWithCoder:(NSCoder *)aDecoder{
    •   name=[aDeCoder decodeObjectforKey:@"name"] retain];
    •   }
    •   歸檔操做:若是對Possession對象allPossession歸檔保存,只須要NSCoder子類NSKeyedArchiver的方法archiveRootObject:toFile: 便可。
    •   NSString *path =[selfpossessionArchivePath];
    •   [NSKeyedArchiver archiveRootObject:allPossessions toFile: path ]
    •   解壓操做:一樣調用NSCoder子類NSKeyedArchiver的方法unarchiveRootObject:toFile:便可allPossessions =[NSKeyedUnarchiverunarchiveObjectWithFile:path] retain];
    •   缺點:歸檔的形式來保存數據,只能一次性歸檔保存以及一次性解壓。因此只能針對小量數據,並且對數據操做比較笨拙,即若是想改動數據的某一小部分,仍是須要解壓整個數據或者歸檔整個數據。
    •   2.NSUserDefaults:用來保存應用程序設置和屬性、用戶保存的數據。用戶再次打開程序或開機後這些數據仍然存在。NSUserDefaults能夠存儲的數據類型包括:NSData、NSString、NSNumber、NSDate、NSArray、 NSDictionary。若是要存儲其餘類型,則須要轉換爲前面的類型,才能用NSUserDefaults存儲。具體實現爲:
    •   保存數據:
    •   NSUserDefaults *defaults=[NSUserDefaultsstandardUserDefaults];
    •   NSString *name =@」default string「;
    •   [defaults setObject:firstName forKey:@"name"];
    •   //得到UIImage實例
    •   UIImage *image=[UIImage alloc]initWithContentsOfFile:@"photo.jpg"];
    •   NSData *imageData = UIImageJPEGRepresentation(image, 100);//UIImage對象轉換成NSData [defaults
    •   synchronize];//用synchronize方法把數據持久化到standardUserDefaults數據庫
    •   讀取數據:
    •   NSUserDefaults *defaults=[NSUserDefaultsstandardUserDefaults];
    •   NSString *name = [defaults objectForKey:@"name"];//根據鍵值取出name
    •   NSData *imageData = [defaults dataForKey:@"image"];
    •   UIImage *Image = [UIImage imageWithData:imageData];//NSData轉換爲UIImage
    •   3. Write寫入方式:永久保存在磁盤中。具體方法爲:
    •   第一步:得到文件即將保存的路徑:
    •   NSArray*documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);//使用C函數NSSearchPathForDirectoriesInDomains來得到沙盒中目錄的全路徑。該函數有三個參數,目錄類型、he domain mask、布爾值。其中布爾值表示是否須要經過?~擴展路徑。並且第一個參數是不變的,即爲NSSearchPathDirectory。在IOS中後兩個參數也是不變的,即爲:NSUserDomainMask和YES。
    •   NSString *ourDocumentPath =[documentPaths objectAtIndex:0];
    •   還有一種方法是使用NSHomeDirectory函數得到sandbox的路徑。具體的用法爲:
    •   NSString *sandboxPath = NSHomeDirectory();
    •   // Once you have the fullsandbox path, you can create a path from it,可是不能在sandbox的本文件層上寫文件也不能建立目錄,而應該是此基礎上建立一個新的可寫的目錄,例如Documents,Library或者temp。 NSString *documentPath = [sandboxPath
    •   stringByAppendingPathComponent:@"Documents"];//將Documents添加到sandbox路徑上,具體緣由前面分析了!
    •   這二者的區別就是:使用NSSearchPathForDirectoriesInDomains比在NSHomeDirectory後面添加Document更加安全。由於該文件目錄可能在將來發送的系統上發生改變。
    •   第二步:生成在該路徑下的文件:
    •  NSString *FileName=[documentDirectorystringByAppendingPathComponent:fileName];//fileName就是保存文件的文件名
    •   第三步:往文件中寫入數據:
    •   [datawriteToFile:FileNameatomically:YES];//將NSData類型對象data寫入文件,文件名爲FileName
    •   最後:從文件中讀出數據:
    •   NSDatadata=[NSDatadataWithContentsOfFile:FileName options:0 error:NULL];//從FileName中讀取出數據

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

    • 6.代理,通知,和block的區別(重點)
    • 通知:「一對多」,在APP中,不少控制器都須要知道一個事件,應該用通知;

      delegate:
      1,「一對一」,對同一個協議,一個對象只能設置一個代理delegate,因此單例對象就不能用代理;
      2,代理更注重過程信息的傳輸:好比發起一個網絡請求,可能想要知道此時請求是否已經開始、是否收到了數據、數據是否已經接受完成、數據接收失敗

      block:
      1:寫法更簡練,不須要寫protocol、函數等等
      2,block注重結果的傳輸:好比對於一個事件,只想知道成功或者失敗,並不須要知道進行了多少或者額外的一些信息
      3,block須要注意防止循環引用:

      ARC下這樣防止:
      __weak typeof(self) weakSelf = self;
        [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
             [weakSelf doSomething];
          }];

      非ARC

      __block typeof(self) weakSelf = self;
        [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
             [weakSelf doSomething];
          }];
      代理的目的是改變或傳遞控制鏈。容許一個類在某些特定時刻通知到其餘類,而不須要獲取到那些類的指針。能夠減小框架複雜度。另一點,代理能夠理解爲java中的回調監聽機制的一種相似。
      代理通知區別,代理一般一對一,須要返回數據,通知一對多,不須要返回數據,block是ios4之後使用,方便,可是格式怪異。

    • 7.講一下下拉刷新的實現
      8.用到過什麼地圖
      9.用過數據庫嗎,增刪改查關鍵字(重點)
      10.自定義過什麼控鍵嗎
      11.viewcontroller的生命週期(重點)
    • 一、alloc     建立對象,分配空間html

    • 二、init (initWithNibName  )初始化對象,初始化數據java

    • 三、loadView 從nib載入視圖,一般這一步不須要去幹涉。除非你沒有使用xib文件建立ios

    • 四、viewDidLoad載入完成,能夠進行自定義數據以及動態建立其餘控件程序員

    • 五、viewWillAppear視圖將出如今屏幕以前,立刻這個視圖就會被展示在屏幕上了web

    • 六、viewDidAppear 視圖已在屏幕上渲染完成面試

      當一個視圖被移除屏幕而且銷燬的時候的執行順序,這個順序差很少和上面的相反算法

    • 一、viewWillDisappear視圖將被從屏幕上移除以前執行sql

    • 二、viewDidDisappear視圖已經被從屏幕上移除,用戶看不到這個視圖了數據庫

      3.viewUnLoad                    編程

    • 四、dealloc視圖被銷燬,此處須要對你在init和viewDidLoad中建立的對象進行


      12.網絡安全問題(重點)
    • 從get post 出發,談到數據md5加密,協議安全,源代碼安全

    • 13.數據庫安全問題
    • iOS開發數據庫篇—SQLite簡單介紹

      1、離線緩存

      在項目開發中,一般都須要對數據進行離線緩存的處理,如新聞數據的離線緩存等。
      說明:離線緩存通常都是把數據保存到項目的沙盒中。有如下幾種方式
      (1)歸檔:NSCodeing、NSKeyedArchiver
      (2)偏好設置:NSUserDefaults
      (3)Plist存儲:writeToFile
      提示:上述三種方法都有一個致命的缺點,那就是都沒法存儲大批量的數據,有性能的問題。
      舉例:使用歸檔
      兩個問題:
      (1)數據的存取都必須是完整的,要求寫入的時候要一次性寫入,讀取的時候要一次性所有讀取,這涉及到應用的性能問題。
      (2)若是有1000條數據,此時要把第1001條數據存入,那麼須要把全部的數據取出來,把這條數據加上去以後,再存入。
      說明:以上的三種技術不能處理大批量數據的存儲,大批量數據一般使用數據庫來進行存儲。
       
       2、SQLite簡單介紹

      1.ios中數據的存儲方式

      (1)Plist(NSArray\NSDictionary)

      (2)Preference(偏好設置\NSUserDefaults)

      (3)NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)

      (4)SQLite3

        (5)Core Data

      說明:

      3是版本號,是SQLite的第三個版本。
      core Data是對SQLite的封裝,由於iOS中使用的SQLite是純C語言的。
      2.SQLite

      (1)什麼是SQLite?

      答:SQLite是一款輕型的嵌入式數據庫,安卓和ios開發使用的都是SQLite數據庫

      (2)特色(優勢)

        答:1)它佔用資源很是的低,在嵌入式設備中,可能只須要幾百K的內存就夠了

        2)它的處理速度比Mysql、PostgreSQL這兩款著名的數據庫都還快

      (3)什麼是數據庫

      答:數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫

      (4)數據庫的分類

      答:能夠分爲2大種類

      關係型數據庫(主流)和對象型數據庫(直接把內存中的對象塞入到數據庫,對比關係型數據庫而言性能不能很好,效率不高)

      (5)經常使用關係型數據庫有哪些?

      答:PC端:Oracle、MySQL、SQL Server、Access、DB二、Sybase

        嵌入式\移動客戶端:SQLite

      (6)數據庫是如何存儲數據的?

      答:數據庫的存儲結構和excel很像,以表(table)爲單位 。表由多個字段(列、屬性、column)組成,表裏面的每一行數據稱爲記錄

      (7)數據庫存儲數據的步驟?

      1)新建一張表(table)

      2)添加多個字段(column,列,屬性)

      3)添加多行記錄(row,record,每行存放多個字段對應的值)

       

      3、Navicat

      Navicat是一款著名的數據庫管理軟件,支持大部分主流數據庫(包括SQLite)

       


      14.多線程問題
    • *進程是指在系統中正在運行的一個應用程序

      *1個進程要想執行任務,必須得有線程(每1個進程至少要有1條線程)

      線程是進程的基本執行單元,一個進程(程序)的全部任務都在線程中執行

      好比使用酷狗播放音樂、使用迅雷下載電影,都須要在線程中執行

       

      *iOS有三種多線程編程的技術,分別是:NSThread 、Cocoa NSOperation 、GCD。 這三種編程方式從上到下,抽象度層次是從低到高的,抽象度越高的使用越簡單,也是Apple最推薦使用的。

      NSThread:

      優勢:NSThread 比其餘兩個輕量級

      缺點:須要本身管理線程的生命週期,線程同步。線程同步對數據的加鎖會有必定的系統開銷

      Grand Central Dispatch 簡稱(GCD)是蘋果公司開發的技術,以優化的應用程序支持多核心處理器和其餘的對稱多處理系統的系統。這創建在任務並行執行的線程池模式的基礎上的。

      GCD的工做原理是:讓程序平行排隊的特定任務,根據可用的處理資源,安排他們在任何可用的處理器核心上執行任務。

       

      一個任務能夠是一個函數(function)或者是一個block。 GCD的底層依然是用線程實現,不過這樣可讓程序員不用關注實現的細節。

      GCD會自動根據任務在多核處理器上分配資源,優化程序

       

      GCD中的FIFO隊列稱爲dispatch queue,它能夠保證先進來的任務先獲得執行。

       


      15.數據結構,堆棧問題
      16.循環引用
      17.線程,進程
      17.最後一個arc非arc,自動釋放池(重點)
    • 4
          這些問題並不難,網上也是一搜一大把,你們一一對照着看。
         仍是那句話,答案小學生都能背,重要是表述,必定要邏輯清楚,回答問題時應該不只僅回答問題自己,理應作出適當延展,顯露出你的知識面普遍。
    • 5 最後就到了考驗情商時刻了。 問題一:家住哪兒? 這可不是與你拉近乎!這考慮的是你工做的穩定心,如果本地則好回答啦!「我就定居住在xxxx」。外地怎麼辦呢,也簡單,就說我一直嚮往這個城市,大學時選取到了這個城市,之後也想定居在這。 問題二:你家人知道你來咱們這面試嗎,他們怎麼看,並接一問,定居在這,家人怎麼看? 回答:支持,支持,仍是TMD支持!(本身編一下,我就不教壞小孩子了) 問題三:有女友嗎? 回答:有,就在這個城市(穩定性問題,同一問) 問題四:你對薪酬怎麼看? 回答:我以爲做爲一個沒有任何工做經驗的應屆生,首先想的應該是對自我能力的提高,由於對於一個新人來講,獲取經驗很重要,現階段的我會把重點放到學習,融入公司上,而不是對薪酬的糾結上。我相信,公司會對個人能力有客觀準確的評價,對於我爲公司做出的貢獻不會視而不見。 問題五:你對加班怎麼看? 回答:我對加班是這樣看的,既然來工做,就必需要有責任心,因此,若是是由於工做須要而加班,固然沒問題。可是也應該注意提升工做效率,若是是由於工做拖沓而加班,那是不可取的。 問題六:你還有什麼問題嗎? 這個問題就顯水平了,你說沒有就太逗比了。 回答:1 我做爲一個剛出身社會的應屆生,我如今很看重對自我能力的培養,請問公司對新員工的培養是怎樣的? 2.公司之後在個人工做這塊上的發展側重點。
相關文章
相關標籤/搜索