iOS----BAT網易筆試&面試題&參考答案

阿里B2B - 一面 

1,load方法執行順序,分類和主類的load方法順序,兩個分類的load方法順序,跟main函數的順序

 2,sqllite的跟orcale這些大型的數據庫的機制有什麼不同的? 

3,sqllite用FMDB,FMDB是怎麼實現防止多線程操作數據庫的?(回答用了隊列),用隊列會不會用性能問題,比較慢?怎麼做? 

4,如果多個線程同時操作同張表,會造成什麼問題? 

5,同時上傳9張圖片(三四M)原圖,你有什麼設計思路做的比較好的性能。 6,項目怎麼做的模塊化?用過路由轉發跳轉頁面嗎?怎麼做的?

網易一面iOS: 

1.你一般學習iOS是如何學習的? 

2.app內存你是如何分析的? 

3.用過 TableView 嗎,平時怎麼解決 TableView 滑動卡頓問題的? 

4.網絡模型瞭解麼?有哪幾種?說說你的看法?

 5.block本質是什麼?

 6.KVC機制是如何通過key找到value。 

7.說說你最熟悉的第三方,知曉其原理麼?

網易一面參考思路:http://url.cn/5PLSqYj

1.使用了第三方庫, 有看他們是怎麼實現的嗎? 

2.強連通量算法瞭解嘛? 

3.遇到tableView卡頓嘛?會造成卡頓的原因大致有哪些? 

4.M、V、C相互通訊規則你知道的有哪些?

 5.NStimer準嗎?談談你的看法?如果不準該怎樣實現一個精確的NSTimer? 

騰訊一面參考答案地址:http://url.cn/5Hv8Jlv 

iOS學習視頻下載地址:http://url.cn/5iAe35k

騰訊二面:

1.編譯過程做了哪些事情; 

2.字典大致實現原理;

 3.block和函數指針的理解;

 4.一般開始做一個項目,你的架構是如何思考的?

 5.你瞭解的UIKit結構?

騰訊二面參考答案:http://www.jianshu.com/p/dd17bdcff9f7

1.騰訊二面:http://www.jianshu.com/p/dd17bdcff9f7 

2.騰訊一面:http://www.jianshu.com/p/0e9e7486e1a7 

3.BAT內推:http://www.jianshu.com/p/73be68baa1ac

1.騰訊二面:http://www.jianshu.com/p/dd17bdcff9f7 

2.騰訊一面:http://www.jianshu.com/p/0e9e7486e1a7 

3.網易一面:http://www.jianshu.com/p/fe6c1606a9ba 

4.阿里一面:http://www.jianshu.com/p/de1418dc031a

騰訊三面:

 1.OC你瞭解的鎖有哪些?在你回答基礎上進行二次提問; 追問一:自旋和互斥對比? 追問二:使用以上鎖需要注意哪些? 追問三:用C/OC/C++,任選其一,實現自旋或互斥?口述即可! 

2.內存泄漏可能會出現的幾種原因,聊聊你的看法? 追問一:非OC對象如何處理? 追問二:地圖類內存若泄漏,如何處理? 追問三:若常用框架出現內存泄漏如何處理? 

3.容錯處理你們一般是怎麼做的? 

4.項目開始容錯處理沒做?如何防止攔截潛在的崩潰?

騰訊三面:http://www.jianshu.com/p/3a50d1805655

網易面試題: 

1.MRC和ARC 運行時有啥不同? 

2.在流程A,比如支付的時候如何不被流程B,比如其他請求打斷?

騰訊三面參考思路:http://www.jianshu.com/p/3a50d1805655

3.阿里P6二面:http://www.jianshu.com/p/fe6c1606a9ba

【鏈接】IOS視頻編輯功能詳解上篇-添加水印 http://www.hudongdong.com/ios/546.html 清華課程數據結構視頻:鏈接: https://pan.baidu.com/s/1c100aJ2 密碼: fpji

C++算法視頻:鏈接: https://pan.baidu.com/s/1c2fH6mc 密碼: bvnf

西北工業大學算法設計:鏈接: https://pan.baidu.com/s/1i59t31N 密碼: jkuu

麻省理工學院算法導論:鏈接: https://pan.baidu.com/s/1i59t31N 密碼: jkuu

中科大數據結構算法:鏈接: https://pan.baidu.com/s/1gfKmT5h 密碼: gftv

小甲魚數據結構和算法:鏈接: https://pan.baidu.com/s/1hsmuR7e 密碼: 7k51

七月算法合集:鏈接: https://pan.baidu.com/s/1eSIndlg 密碼: rcgw

浙江大學數據結構:鏈接: https://pan.baidu.com/s/1jIePpNw 密碼: wtmg

Java數據結構和算法:鏈接: https://pan.baidu.com/s/1eSriCcq 密碼: 694g nsmutableSet %lu

GCD

gcd: 它是蘋果爲多核的並行運算提出的解決方案,會自動管理線程的生命週期,使用的也是c語言,不過由於使用了 Block,使用起來更加方便,而且靈活. 串行隊列和並行隊列 dispatchqueuecreate 

  • 串行:傳入DISPATCHQUEUESERIAL 
  • 並行:傳入DISPATCHQUEUECONCURRENT 兩種執行方式 同步sync和異步async

什麼情況下使用:GCD在多核CPU上線程切換的時間比較短效率相對高些.NSOperation是建立在GCD之上的雖然使用起來比較複雜但是在線程併發管理優先級上有着GCD無法比擬的優勢.

利用dispatch_once創建單例:代碼僅會被運行一次,而且還是線程安全的.

gcd 同步,異步,串行/並行,由誰控制

異步:隊列是用來提交block的對象,當block提交到隊列後,鏈表保存所有提交的 block,按照先進先出的順序處理,系統在GCD底層維護一個線程池,用來執行block


同步:利用了線程專屬信號量,保證了每次只有一個 block 被執行。 如果向當前串行隊列提交任務就會走到上述分支,導致死鎖。如果是向其它串行隊列提交 block,則會利用原子性操作來實現,因此不會有死鎖問題。

gcd的簡單表現在哪些方面:

延遲執行,dispatchafter 重複執行次數:dispatchapply GCD提供一個易於使用的併發模型而不僅僅只是鎖和線程,以幫助我們避開併發陷阱,而且因爲基於block,它能極爲簡單得在不同代碼作用域之間傳遞上下文。 *能自動根據系統負載來增減線程數量,這就減少了上下文切換以及增加了計算效率。

gcd與隊列的區別:

棧和隊列的特點與區別

1.隊列先進先出,棧先進後出。 棧一端進行插入和刪除。 隊列在一端插入,另一端進行刪除。

控制部分任務完成如何操作

runtime

使用runtime實現json->object轉換:

使用class_copyPropertyList獲取Model的所有屬性列表, 遍歷該列表使用property_getName即可得到所有屬性名. 對於Model中定義的屬性, 使用KVC即可將dict中的值賦給該屬性.

NSMutableArray *keys = [[NSMutableArray alloc] init];

    u_int count = 0;
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    for (int i = 0; i < count; i++) {
        objc_property_t property = properties[i];
        const char *propertyCString = property_getName(property);
        NSString *propertyName = [NSString stringWithCString:propertyCString encoding:NSUTF8StringEncoding];
        [keys addObject:propertyName];
    }
    free(properties);

    for (NSString *key in keys) {
        if ([dict valueForKey:key]) {
            [self setValue:[dict valueForKey:key] forKey:key];
        }
    }

使用runtime實現object->json轉換:

將自定義類的實例化對象轉爲字典,轉data,轉json

音視頻

設計模式:

目前常用的幾種設計模式:代理模式、觀察者模式、MVC模式、單例模式、策略模式、工廠模式、MVVM

  • 工廠模式 場景:工廠方式創建類的實例,多與proxy模式配合,創建可替換代理類。 “專門定義一個類來負責創建其他類的實例,被創建的實例通常具有共同的父類。” 世界上就是由一個工廠類,根據傳入的參數,動態地決定創建出哪一個產品類的實例。

  • 單例 場景:確保程序運行期某個類,只有一份實例,用於進行資源共享控制。

即時通訊 :

即時通訊 Socket:實時性(監視和檢測),斷線重連,註銷手動關閉。 

  • 1.連接:全局單例數據共性,定時發送長連接(NSTimer)指令(指令與信息數據格式服務器來制定),沒有收到服務器返回消息,得到失去連接的消息,在失去連接的回調方法中重新連接。 
  • 2.斷開與重連:兩種可能枚舉type:服務器掉線0;用戶斷開連接1(退出登錄或程序退出);我們在cut前對socket的userData賦予一個值來標記爲用戶退出,這樣我們可以在收到斷開信息時判斷究竟是什麼原因導致的掉線。 實現代理方法掉線重連,用戶斷開不重連(return)。 
  • 3.發送接收數據:socket發送數據是以棧的形式存放。先發送或接收長度,再接收數據。 Xmpp:基於xml的協議,可以通過發送擴展的信息來處理用戶需求,建立內容發佈系統和基於地址的服務應用程序,包含了針對服務器端的軟件協議。功能是用TCP傳xml流。 環信:消息構造,文字,圖片,位置,語音視頻文件,插入消息更新。 會話:創建、刪除、獲取會話、未讀消息數、 解析:圖片文字文件(縮略圖自動下載)的遠程路徑,本地路徑,長寬,下載狀態。下載失敗主動調用asyncFetchMessageThumbnail:progress方法主動獲取。下載方法:同步方法,block回調方法,. IChatManagerDelegate異步方法。 已讀回執:收到的”已讀回執”對象,包括 from, to, chatId等

socket

優化有哪些 優化cpu

  • 對象創建:
    • 使用輕量對象:比如 CALayer 比 UIView 要輕量許多。
    • 不涉及 UI 操作的放到後臺線程創建
    • 延遲創建時間
    • 儘量複用對象

單元測試如何找到對應的元素

    [[app.textFields elementBoundByIndex:i] typeText:@“張三"];

XCTest完整簡單案例及分析

動畫包括哪些:轉場動畫,基礎動畫,關鍵幀動畫,組動畫,轉場動畫

多線程包括哪些

  • NSThread:

    • 優點:NSThread 比其他兩個輕量級,使用簡單
    • 缺點:需要自己管理線程的生命週期、線程同步、加鎖、睡眠以及喚醒等。線程同步對數據的加鎖會有一定的系統開銷
  • NSOperation:

    • 不需要關心線程管理,數據同步的事情,可以把精力放在自己需要執行的操作上
    • NSOperation是面向對象的
  • GCD:

    • Grand Central Dispatch是由蘋果開發的一個多核編程的解決方案。iOS4.0+才能使用,是替代NSThread, NSOperation的高效和強大的技術

死鎖是什麼?如何解決死鎖?

死鎖通常指有兩個線程A和B都卡住了,並等待對方完成某些操作。GCD同步執行時,在串行隊列中添加了block,block一直等到前面的任務處理完纔會執行,從而導致了死鎖。

如何用C語言模擬MRC?

進程與線程的特點與區別?

1)進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的併發性。 (2)進程和線程的主要差別在於它們是不同的操作系統資源管理方式。 進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。 共享變量可以實現線程調用另一個線程。

鏈表有哪些特點?用指針連接

  • 數組是將元素在內存中連續存放,由於每個元素佔用內存相同,可以通過下標迅速訪問數組中任何元素。

  • 鏈表恰好相反,鏈表中的元素在內存中不是順序存儲的,而是通過存在元素中的指針聯繫到一起。

嵌套數據庫語法 left

排序的複雜度 最小複雜度

樹的遍歷方法?

typeof 被棄用了,新的方法是什麼

assign 和 weak,block,weak的簡單說明 delegate:ARC 使用weak,MRC 使用assign 保證安全。 __block通過指針地址修改變量。在多線程中防止在block中self 已釋放掉。ARC,MRC模式都可以用,可以修飾對象,也可以修飾基本數據類型。 __block typeof(self) = weakself __weak修飾對象,不修飾基本數據類型,只能在ARC模式下使用

weak弱引用,對象消失後,會自動將對象置nil

core Data 或者sqlite的讀寫是分線程的嗎?

tcp與udp

進程管理優化

內存管理優化

  • 使用ARC
  • 使用reuseIdentifier
  • 重用和延遲加載View

- 緩存

2018第一波面試題已更新

阿里一面: 

  1. MVC具有什麼樣的優勢,各個模塊之間怎麼通信,比如點擊 Button 後 怎麼通知 Model? 

  2. 兩個無限長度鏈表(也就是可能有環) 判斷有沒有交點 

  3. UITableView的相關優化 

  4. KVO、Notification、delegate各自的優缺點,效率還有使用場景 

  5. 如何手動通知KVO 

    重寫Controller裏面某個屬性的setter方法,聯動給View賦值,使用Controller監控Model裏面某個值的變化,在controller的dealloc函數中用一行代碼了結:removeObserver。

  6. Objective-C 中的copy方法 

  7. runtime 中,SEL和IMP的區別 

    方法名 SEL – 表示該方法的名稱; 一個 types – 表示該方法參數的類型; 一個IMP – 指向該方法的具體實現的函數指針,說白了IMP就是實現方法。

  8. autoreleasepool的使用場景和原理 

  9. RunLoop的實現原理和數據結構,什麼時候會用到 

  10. block爲什麼會有循環引用 

  11. 使用GCD如何實現這個需求:A、B、C 三個任務併發,完成後執行任務 D。 

  12. NSOperation和GCD的區別 

  13. CoreData的使用,如何處理多線程問題 

  14. 如何設計圖片緩存? 

  15. 有沒有自己設計過網絡控件? 

[[UIApplication sharedApplication] statusBarFrame].size.height 這個是狀態欄高度

螞蟻金服面試

1:在KVO中,他是怎麼知道監聽的對象發生了變化?

2:字典的工作原理 ?怎100w箇中是怎麼快速去取value?

3:一個上線的項目,知道這個方法可能會出問題,在不破壞改方法前提下,怎麼搞?

4:Block和函數指針的區別?

支付寶面試題:1.iOS多線程有哪些?他們之間各有什麼區別,優劣性?2.UIView和NSObject這兩個類,所有裏面的方法和原理都需要了解一下。3.Runloop和線程的關係?4.Runloop的作用?RunloopMode的原理?

搜狗iOS面試題: 1.iOS應用的文件目錄都是什麼?緩存文件存在哪個文件裏?它的上一層是什麼?

2.SDWebImage圖片處理原理?

3.SDWebImage在iOS9 3dtouch下出現的問題?

4.NSArray和NSMutableArray在Copy和MutableCopy下的內存是怎樣的?

5.用戶下載一個圖片,圖片很大,需要分成很多份進行下載,使用GCD應該如何實現?使用什麼隊列?

6.現有兩個人和一張桌子,兩個人依次在桌子上放硬幣,硬幣不能疊放、立着,若一方找不到放的位置則失敗。若你在玩這個遊戲,設計一個算法必贏。

7.現有n個物品和一個體積爲V的包,每件物品的體積是ci,價格是wi,現在請你往包中放,每件物品只能放一次,怎麼放能讓包的價格最大。

百度iOS面試題:

 1.Delegate 、Notification和KVO比較各自的優缺點 

2.在一個UI的正中間實現一個正方形的紅色視圖有幾種方式?

 3.手觸碰到屏幕的時候,響應機制是怎樣的?第一響應者是誰?追問 UIView和UIResponse的關係是什麼?

4。UIViewController的生命週期是什麼?追問 UIViewController 只alloc而沒用到的時候,UIViewController 的view是否加載了?如果沒有加載那什麼時候加載? 

5.直接用UILabel和自己用DrawRect畫UILabel,哪個性能好?爲什麼?哪個佔用的內存少?爲什麼? 

6.AFNetworking是否支持ipv6? 7.項目採用64位,爲什麼要用64位?怎麼修改成64位?i386是什麼?他們有什麼關係? 

8.iOS的應用程序有幾種狀態?追問,退到後臺代碼是否可以執行?雙擊home鍵,代碼是否可以執行? 

9.一般使用的圖標內存爲多大?比如200×300的圖片,內存應該佔用多少比較合理?

 10.說說你對內存泄漏的看法,追問,block爲什麼容易引起內存泄漏?

 11.[object copy]是淺拷貝還是深拷貝?爲什麼是淺拷貝?copy是實現了哪個協議? 是淺拷貝,地址不變。

淺複製:不拷貝對象本身,僅僅是拷貝指向對象的指針. 深複製:是直接拷貝整個對象內存到另一塊內存中. 一般來說像這種使用‘=’號賦值的對象,基本上都是淺複製. 內存地址一樣的-->淺複製 copy:修改源對象或者副本的屬性及行爲,不影響副本或源對象。 對nsstring mutableCopy, 內容不變,地址變了。

12.Images.xcassets和直接用圖片有什麼不一樣?

一、首先一點:用法和原來一樣,用[UIImage imageNamed:]來加載圖片; 而且圖片更換名字的時候不用再代碼中更換圖片名字。比如說,在images.xcassets中開始有一張名爲aaaa.png的圖片,[UIImage imageNamed:@"aaaa"] 然後在images.xcassets中把這張圖替換爲bbbb.png的圖片,代碼是不用改的。 二、不用再爲多像素的圖片命名。mages.xcassets會自動的排列不同像素的圖片。 三、可以輕鬆的生產出不同像素的圖片,這就需要xcode的一個插件,mages.xcassets RTImageAssets插件的簡介:本項目是一個Xcode插件,用來生成@3x的圖片資源對應的@2x和@1x 版本,只要拖拽高清圖到 @3x 的位置上,然後按Ctrl+Shift+A即可自動生成兩張低清的補全空位。當然你也可以從@2x 的圖生成@3x 版本,如果你對圖片質量要求不高的話。另外給大家推薦一個多像素圖片生產工具:Prepo,這是一款免費的使用工具。 四、一個重要的改變:圖片是被放到Images.xcassets裏面 1.app支持版本在>=iOS7的時候,打包的資源包中的圖片會被放到Assets.car.圖片有被壓縮;此時若用[[NSBundle MainBundle] pathForResource: ofType: ]來訪問時訪問不到的。同時你也無法像平常一樣輕易的拿到被人的圖片資源了。 2.app支持版本在<iOS7的時候,打包的資源包中的圖片會被放在MainBudnle裏面.圖片沒有被壓縮 3.圖片是被直接拖入項目當中,無論部署版本是多少,都會被放到mainBudnle裏面.圖片沒有被壓縮

上週剛出爐的汽車之家面試題

對大量數據列表有什麼優化方案?

內存優化,開啓tableviewcell的重用機制在tableview的heightforrow函數中不要在調用cellforrow方法,應該把之前計算到的行高緩存起來,避免cellforrow被調用很多次

對加載的數據進行存儲,將加載過的數據存儲到數據庫中,及時清空內存中的數據

進行分頁處理,異步加載更多數據 如何檢查app的內存和CPU的使用情況?檢查有問題的時候如何處理?

使用analyze檢查代碼有無內存泄露的可能產生

使用leaks檢查程序是否有內存泄露產生

Xcode的instrument可以檢測到app在運行時候的內存消耗,當內存佔用量過大的時候即使釋放掉不用的對象 app上有一數據列表,客戶端和服務器都沒有緩存服務器有數據更新的時候在wifi下能刷新到數據在4G下刷新不到數據,請分析可能產生的原因?

用戶禁止了該app使用蜂窩移動數據

代碼中可能爲了省流量,對網絡類型做了判斷,只在wifi狀態下發送請求

當前維護app的崩潰率是多少?怎麼最終並解決的?如何解決線上的閃退

我們努力把崩潰率控制在5/1000 一下 ,使用plcrashreport第三方框架統計用戶崩潰日誌 什麼是事件響應鏈,當用戶和手機屏幕觸摸的時候都發生了什麼?事件是如何傳遞的。

發生觸摸事件後系統將觸摸事件加入UIApplication管理的事件隊列中,

UIApplication會從事件隊列中取出最前面的事件在將事件發送出去,通常會發給keywindow

主窗口會在視圖層次結構中找到最合適的視圖來處理觸摸事件

找到合適的視圖控件後,就會調用視圖控件的touches方法來作事件的具體處理:touchesBegin... touchesMoved...touchesEnded等

會順着響應者鏈條往子控件傳遞 UIView不能接收觸摸事件情況有哪些:

1.不接受用戶交互:userInteractionEnabled = NO;

2.隱藏:hidden = YES;

3.透明:alpha = 0.0~0.01 如何找到最合適的控件來處理事件呢?有什麼原則?

自己是否能接受觸摸事件

觸摸點是否在自己身上

從後往前遍歷子控件,重複上面的兩個步驟

如果沒有符合條件的子控件,那麼自己最適合處理 runloop是什麼?,使用runloop的目的是什麼?使用runloop要注意什麼?何時使用?

阿里iOS面試初體驗:

本人畢業之後,一直從事的是java開發,外包公司到國美,再到京東。當時在國美的時候,還在做java。當時移動開發正火,經不住誘惑,放棄了java,在家自學一個月的iOS開發,那段時間,真是一個月沒出家門。一個月之後感覺時機成熟,出去面試。

好好的把簡歷修飾了一翻,就開始投簡歷。當時收到阿里文娛的面試邀請,很是意外,也很是擔心,因爲我從沒有經驗變成了二年開發經驗。(聲明一下,在此我並不是讓大家僞造工作經驗)

當時共經歷了四輪面試,最開始是電話面試 -> 一輪面聊 -> 二輪面聊 ->人事面試

電話面試比較簡單大概是這些問題 :

Object-c中copy和mutableCopy 區別

ViewController之間怎麼傳值

內存管理原則,MRC 和 ARC

應用的啓動過程

推送原理(本地推送和遠程推送)

定位 一輪面聊,問題大概是這些:

當畫了一個圖,就是subview有一部分view飄出來了,問點擊飄出來的部分能不能響應點擊事件?

xcode中怎麼給系統方法打斷點

xcode簽名原理

怎麼將符號轉換成代碼

字典模型的轉換。引出MJExtension框架,問了MJExtension的原理,以前使用過程中有沒有bug(我猜他在使用過程中發現了MJExtension 框架中的bug所以才這麼問)

1.面試上百個求職者後的感受:    https://pan.baidu.com/s/1i4BeY5R

2.支付寶生活圈開發:https://pan.baidu.com/s/1qYx9J5M

3.融雲即時通訊講解:https://pan.baidu.com/s/1c1FsZOs

4.微信朋友圈開發:https://pan.baidu.com/s/1qYJo7UW

5.Runtime精講:https://pan.baidu.com/s/1i505T2l

6.MJ淺談逆向:https://pan.baidu.com/s/1miBVipq

7.帶你玩轉Github:https://pan.baidu.com/s/1i5tKt85

8.求職心態篇:https://pan.baidu.com/s/1eSEjopO

我朋友未回答 NSRunLoop是IOS消息機制的處理模式

NSRunLoop的主要作用:控制NSRunLoop裏面線程的執行和休眠,在有事情做的時候使當前NSRunLoop控制的線程工作,沒有事情做讓當前NSRunLoop的控制的線程休眠。

NSRunLoop 就是一直在循環檢測,從線程start到線程end,檢測inputsource(如點擊,雙擊等操作)異步事件,檢測timesource同步事件,檢測到輸入源會執行處理函數,首先會產生通知,corefunction向線程添加runloop observers來監聽事件,意在監聽事件發生時來做處理。

runloopmode是一個集合,包括監聽:事件源,定時器,以及需通知的runloop observers runloop與線程的關係?

只有在爲你的程序創建次線程的時候,才需要運行run loop。對於程序的主線程而言,run loop是關鍵部分。Cocoa提供了運行主線程run loop的代碼同時也會自動運行run loop。IOS程序UIApplication中的run方法在程序正常啓動的時候就會啓動run loop。如果你使用xcode提供的模板創建的程序,那你永遠不需要自己去啓動run loop

在多線程中,你需要判斷是否需要run loop。如果需要run loop,那麼你要負責配置run loop並啓動。你不需要在任何情況下都去啓動run loop。比如,你使用線程去處理一個預先定義好的耗時極長的任務時,你就可以毋毋需啓動run loop。Run loop只在你要和線程有交互時才需要 進程和線程的區別?

一個應用程序有且只有一個進程,一個進程有1個和多個線程 線程生命週期

當我們創建一個線程實例對象的時候,這個線程是創建狀態

當調用了start的方法的時候,線程被啓動,此時進入就緒狀態,等待CUP來執行

獲取CPU的資源正在執行,這個時候進入運行狀態

當線程執行完畢,或者被其他線程殺死的時候這個時候線程進入死亡狀態,死亡狀態的線程不可能在進入等待執行的就緒狀態

由於某些原因,線程需要暫停自己,讓出CPU的資源,這個時候線程進入阻塞狀態

淘寶-P6

 1.查找字符串算法 

2數組匹配算法

 3.代碼文件編譯生成過程,編譯和鏈接有什麼區別,鏈接做了什麼事情

 4.用C語言實現一個通知流程 

5.A B 線程執行到一半去執行C線程,用OC和C各自怎麼實現。 

6.用過GCD什麼方法 7對什麼技術比較感興趣 

8.tableview怎麼優化,優化後還是感覺卡怎麼辦

 9.怎麼定位到野指針的地方。如果還沒定位到,這個對象被提前釋放了,怎麼知道該對象在什麼地方釋放的 

10.ARC的實現原理,什麼情況下用MRC比ARC好 

11.懂視頻技術嗎 

12.16進制的FF + 2後 等於什麼 有哪幾種情況?

1.介紹下內存的幾大區域? 

2.你是如何組件化解耦的?

 3.runtime如何通過selector找到對應的IMP地址 

4.runloop內部實現邏輯? 

5.你理解的多線程? 

6.GCD執行原理? 

7.怎麼防止別人動態在你程序生成代碼 

8.YYAsyncLayer如何異步繪製? 

9.優化你是從哪幾方面着手?

OC 使用.a靜態庫 swift使用 frameworks 動態庫

各大互聯網公司招聘官網
阿里招聘:https://job.alibaba.com 騰訊招聘:http://hr.tencent.com 百度招聘:http://talent.baidu.com 京東招聘:http://zhaopin.jd.com 小米招聘:http://hr.xiaomi.com 樂視招聘:http://job.letv.com 網易招聘:http://hr.163.com 唯品會招聘:http://job.vip.com 攜程招聘:http://job.ctrip.com 360招聘:http://hr.360.cn

二輪面聊:

問的技術方向並不多,主要是https原理,這個問的相當細,包括單向雙向認證。其它的就是扯別的啦。

整體感覺面試官人相當不錯,詳細的介紹了團隊情況公司文化 人事面試,問的問題如下:

這裏重點說一下人事面試,阿里的人事權力真的很大,哪怕是前面的技術面試全部通過,她也有一票否決權。而且阿里人事處處設陷阱,應該被她發現了我的簡歷有假的成份。面了沒有多長時間讓我回去等消息,過了幾天收到了拒絕郵件!

今日更新阿里三面面試題參考答案,需要的留意下

1.dSYM你是如何分析的? 

2.多線程有哪幾種?你更傾向於哪一種? 

3.單例弊端? 

4.如何把異步線程轉換成同步任務進行單元測試? 

5.介紹下App啓動的完成過程? 

6.比如App啓動過慢,你可能想到的因素有哪些? 

7.0x8badf00d表示是什麼?

 8.怎麼防止反編譯? 

9.說說你遇到到的技術難點? 

10.說說你瞭解的第三方原理或底層知識?

1.Nsstring佔用多少內存? 

2.SD最大支持多少個下載數? 

3.yykit如何異步渲染? 

4.runtime動態創建一個類,需要注意什麼? 

5.runloop和線程有和關係?

 6.你平時做過什麼有技術難點的東西,然後解決難點 

7.你是如何學習iOS,看什麼網站,列舉幾個國外的學習網站? 

8.技術架構如何搭建? 

9.還有一個很長字符串,你用什麼算法搜索到abc的位置? 

10.字符串如何預處理? 

11.https和ssl在握手方向有什麼區別? 

12.還有,你平時很忙,怎麼學習和積累技術 

13.怎麼防止別人動態在你程序生成代碼 

14.怎麼防止反編譯

1, 查找字符串算法 

2,數組匹配算法 

3,代碼文件編譯生成過程,編譯和鏈接有什麼區別,鏈接做了什麼事情 

4,用C語言實現一個通知流程 

5,A B 線程執行到一半去執行C線程,用OC和C各自怎麼實現。 

6,用過GCD什麼方法 

7,對什麼技術比較感興趣 

8,tableview怎麼優化,優化後還是感覺卡怎麼辦 

9,怎麼定位到野指針的地方。如果還沒定位到,這個對象被提前釋放了,怎麼知道該對象在什麼地方釋放的 

10,ARC的實現原理,什麼情況下用MRC比ARC好 

11,懂視頻技術嗎 

12,16進制的FF + 2後 等於什麼 有哪幾種情況

p6 - 淘寶 - 二面 

1,我說我做過一個C的日誌庫,他說怎麼優化你的日誌庫性能,上傳到後臺怎麼實現斷點續傳,斷點續傳的代碼實現 

2,怎麼找野指針,已經發布的app包怎麼定位到野指針,野指針的堆棧內存是怎麼樣的 

3,類的內存結構有哪些 

4,app啓動流程慢了,怎麼判斷哪個地方比較慢,讓你做個工具類去監聽啓動流程哪段程序比較慢你這麼做,講出你代碼的實現步驟 

5,ios崩潰的情況有哪些?selector異常奔潰流程,怎麼防止奔潰 

iOS阿里三面參考答案:http://url.cn/5lCGZQE

iOS學習視頻鏈接:http://url.cn/5BbKBkX

【鏈接】<精華篇>:iOS葵花寶典4.0版(專人更新) http://www.jianshu.com/p/5dddc0e643ec

 阿里-p6-一面

1.介紹下內存的幾大區域?

 2.你是如何組件化解耦的? 

3.runtime如何通過selector找到對應的IMP地址 

4.runloop內部實現邏輯? 

5.你理解的多線程? 

6.GCD執行原理? 

7.怎麼防止別人反編譯你的app? 

8.YYAsyncLayer如何異步繪製? 

9.優化你是從哪幾方面着手?

參考答案地址(學習視頻等資源也在公衆號內): http://url.cn/5YAhbxs

阿里招聘:https://job.alibaba.com 騰訊招聘:http://hr.tencent.com 百度招聘:http://talent.baidu.com 京東招聘:http://zhaopin.jd.com 樂視招聘:http://job.letv.com 網易招聘:http://hr.163.com 唯品會招聘:http://job.vip.com 攜程招聘:http://job.ctrip.com 360招聘:http://hr.360.cn 滴滴出行:http://job.didichuxing.com/ 愛奇藝:http://zhaopin.iqiyi.com/job-school.html 快手:https://www.kuaishou.com/joinus.html 今日頭條:https://job.toutiao.com/ 噹噹網:http://zhaopin.dangdang.com/ 聚美優品:http://www.jumei.com/about/hiring 美團:http://zhaopin.meituan.com/ 去哪兒:http://qunar.zhiye.com/ 陌陌:http://www.immomo.com/ 新浪:http://career.sina.com.cn/welcome.html

1.你一般學習iOS是如何學習的?

2.app內存你是如何分析的?

3.用過 TableView 嗎,平時怎麼解決 TableView 滑動卡頓問題的?

4.網絡模型瞭解麼?有哪幾種?說說你的看法?

5.block本質是什麼?

6.KVC機制是如何通過key找到value。

7.說說你最熟悉的第三方,知曉其原理麼?

OC的協議裏面只能有方法的申明,不能有方法的實現

每一個selector對應一個IMP指針

福利較好互聯網公司名單:http://url.cn/5OaBa0w (安卓/PHP/H5會最近更新到該公衆號,僅做學習使用)

https://developer.apple.com/app-store/review/guidelines/cn/ 蘋果審覈條款官網

控制器動態加載

對號入座,方便線下交流、聚會、跳槽內推! 對不上地區的直接加,請不要重複申請! 以下均5000人羣!

全國iOS羣:2466454 北京iOS開發羣:567907994
上海iOS開發羣:679742571 廣州iOS開發羣:681144583 深圳iOS開發羣:490783419 杭州iOS開發羣:415613181 合肥iOS開發羣:679751290

扯淡、鬥圖放鬆專區: iOS開發閒聊羣:628596529 

1.使用了第三方庫, 有看他們是怎麼實現的嗎? 2.強連通量算法瞭解嘛? 3.遇到tableView卡頓嘛?會造成卡頓的原因大致有哪些? 4.M、V、C相互通訊規則你知道的有哪些? 5.NStimer準嗎?談談你的看法?如果不準該怎樣實現一個精確的NSTimer? 

騰訊一面參考答案地址:http://url.cn/5Hv8Jlv 

iOS學習視頻下載地址:http://url.cn/5iAe35k

https://developer.apple.com/download/more/

阿里二面: 

1. 怎麼判斷某個cell是否顯示在屏幕上 2. 進程和線程的區別 3. TCP與UDP區別 

TCP:Transfer Control Protocol,傳輸控制協議.面向連接的、可靠的並且是精確控制的協議,主要是用在那些實時性不強、但要求不能出錯的應用. UDP:User Datagram Protocol,用戶數據報協議。這是一個不可靠的傳輸協議。因爲它不排序所要發送的數據段、不關心這些數據段到達目的方的順序(所以它纔不可靠),所以它在網絡的開銷要比TCP小很多。因此UDP適合用在那些實時性強、允許出錯的場合。

  1. TCP流量控制 

滑動窗口機制

  1. 數組和鏈表的區別 

從邏輯結構來看 1. 數組必須事先定義固定的長度(元素個數),不能適應數據動態地增減的情況。當數據增加時,可能超出原先定義的元素個數;當數據減少時,造成內存浪費;數組可以根據下標直接存取。 2. 鏈表動態地進行存儲分配,可以適應數據動態地增減的情況,且可以方便地插入、刪除數據項。(數組中插入、刪除數據項時,需要移動其它數據項,非常繁瑣)鏈表必須根據next指針找到下一個元素 從內存存儲來看 1. (靜態)數組從棧中分配空間, 對於程序員方便快速,但是自由度小 2. 鏈表從堆中分配空間, 自由度大但是申請管理比較麻煩 從上面的比較可以看出,如果需要快速訪問數據,很少或不插入和刪除元素,就應該用數組;相反, 如果需要經常插入和刪除元素就需要用鏈表數據結構了。 鏈表是動態進行存儲分配,不連續。數組是固定好數組長度,存儲空間是靜態連續的。

  1. UIView生命週期 
  2. 如果頁面 A 跳轉到 頁面 B,A 的viewDidDisappear方法和 B 的viewDidAppear方法哪個先調用? 
  3. block循環引用問題 
  4. ARC的本質 
  5. RunLoop的基本概念,它是怎麼休眠的? 
  6. Autoreleasepool什麼時候釋放,在什麼場景下使用? 
  7. 如何找到字符串中第一個不重複的字符 
  8. 哈希表如何處理衝突 

今日更新,阿里二面以及參考答案; 此後羣內會陸續更新iOS BAT最新面試題; 包括滴滴、京東、今日頭條、陸金所、攜程等!

包括北京、上海、廣州、深圳等全國各大城市iOS最新行情,靠實際行動、用數據說話!

敬請期待~

  1. 怎麼判斷某個cell是否顯示在屏幕上 答案以這個爲參考 http://www.cocoachina.com/bbs/read.php?tid=48777

餓了麼面試題: 你瞭解哪些iOS底層知識 * automic一定是線程安全的嗎

atomic所說的線程安全只是保證了getter和setter存取方法的線程安全,並不能保證整個對象是線程安全的。

  • iOS中的消息傳遞是怎麼一步一步實現的

  • category和extension有什麼區別

  • iOS中的私有屬性如何設置

  • 串行隊列和同步鎖兩者在保護線程安全上的性能對比

  • 並行隊列是同時執行的嗎

  • iOS中有哪些鎖,你瞭解多少

  • iOS中UIKit框架的架構

  • UIView和CALayer之間的關係

  • UIView、CoreAnimation和CoreGraphics的關係

  • 應該知道SegmentFault,這個在iOS中是什麼錯誤,那StackOverFlow呢

  • GCD、NSThread、NSOperation性能上有何區別

1.Nsstring佔用多少內存? 2.SD最大支持多少個下載數? 3.yykit如何異步渲染? 4.runtime動態創建一個類,需要注意什麼? 5.runloop和線程有和關係? 6.你平時做過什麼有技術難點的東西,然後解決難點 7.你是如何學習iOS,看什麼網站,列舉幾個國外的學習網站? 8.技術架構如何搭建? 9.還有一個很長字符串,你用什麼算法搜索到abc的位置? 10.字符串如何預處理? 11.https和ssl在握手方向有什麼區別? 12.還有,你平時很忙,怎麼學習和積累技術 13.怎麼防止別人動態在你程序生成代碼 14.怎麼防止反編譯

搜狗iOS面試題: 1.iOS應用的文件目錄都是什麼?緩存文件存在哪個文件裏?它的上一層是什麼?

2.SDWebImage圖片處理原理?

3.SDWebImage在iOS9 3dtouch下出現的問題?

4.NSArray和NSMutableArray在Copy和MutableCopy下的內存是怎樣的?

5.用戶下載一個圖片,圖片很大,需要分成很多份進行下載,使用GCD應該如何實現?使用什麼隊列?

6.現有兩個人和一張桌子,兩個人依次在桌子上放硬幣,硬幣不能疊放、立着,若一方找不到放的位置則失敗。若你在玩這個遊戲,設計一個算法必贏。

7.現有n個物品和一個體積爲V的包,每件物品的體積是ci,價格是wi,現在請你往包中放,每件物品只能放一次,怎麼放能讓包的價格最大。

筆試面試題 現場實拍:http://www.jianshu.com/p/f5a30acef5f0

技術筆試題: 

1、 改變view的frame,layer的frame是否會變化?改變layer.frame,view的frame是否會變化?請問原因是什麼? 

2、 autoreleasepool的釋放時機是什麼,什麼時候需要自己聲明一個autoreleasepool。 

3、 nsdictionry底層的數據結構是什麼,根據key找到value的時間複雜度是多少?

 4、 求一個整數數組中和最大的連續子數組,例如:[1, 2, -4, 4, 10, -3, 4, -5, 1]的最大連續子數組是[4, 10, -3, 4](需寫明思路,並編程實現)。 

5、 請簡述在iOS項目中遇到的最大的技術問題是什麼,如何解決的? 選做題(可四選一):  1、 請實現一個完善內存的圖片緩存工具,key爲url,value爲uimage。緩存最大可容納100張圖片,並有淘汰機制。(需編程實現) 2、 請用效率最高的方式繪製不同顏色的10w個的三角形(需編程實現) 3、 請用完善的代碼實現異步併發讀寫文件的接口函數(需編程實現) 4、 請實現視頻添加濾鏡的功能,其中視頻含音頻(需編程實現)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章