序言:程序員
今年2月中下旬由於我的緣由,換了一份工做,3月初期間面試了有3,4家,基本都是D輪或者剛剛上市的公司,也有上榜的BAT,也從他們的面試筆試中看到了本身的一些不足,因而就想寫出來和你們分享一下,若是能幫到正在面試的小夥伴更好。從面試題中,其實能夠看到一些行業的發展,以及整體人才需求是怎樣的了。面試
一.筆試題算法
筆試基本都有一兩道基礎題,好比說UITableView的重用機制,ARC的基本原理,如何避免retain cycle,談談對MVC的理解,iOS內存管理機制、WebView與JS交互、安全機制。這些你們應該都很清楚了。數據庫
作爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個個人iOS交流羣638302184,無論你是小白仍是大牛歡迎入駐,你們一塊兒交流學習,羣裏免費提供阿里面試題及各大BAT面試題,iOS全面進階學習資料,但願你能找到理想中的工做。
筆試的內容有幾種有選擇題,問答題,難一點的就是多選題了。我面試了一家就是給了10道多選題,多選,少選,錯選都不行,當時作完之後就感受不是很好,有些題目題幹就是一下哪些是對的,而後ABCD依次給4個不一樣的概念,這種一道題至關於考了4個點。編程
總之遇到這種「噁心」的多選題也不要太慌,靜下心來一一甄別應該能拿到不錯的成績。安全
接下來我說幾個我當時答的不怎麼好的題目,我當時記了一下,和你們分享一下。網絡
1.進程和線程的區別和聯繫數據結構
這個實際上是操做系統的問題,當時一會兒把我問的懵了,後來仔細回想了一下,加上本身的理解就答了,下面說說稍微完整的答案,你們能夠準備準備,再問這種問題就能夠完美做答了。多線程
進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位. 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源.併發
一個線程能夠建立和撤銷另外一個線程;同一個進程中的多個線程之間能夠併發執行.
2.並行和併發的區別
並行是指兩個或者多個事件在同一時刻發生;
併發是指兩個或多個事件在同一時間間隔內發生。
3.談談你對Block和delegate的理解
我當時是這麼答的,delegate的回調更多的面向過程,而block則是面向結果的。若是你須要獲得一條多步進程的通知,你應該使用delegation。而當你只是但願獲得你請求的信息(或者獲取信息時的錯誤提示),你應該使用block。(若是你結合以前的3個結論,你會發現delegate能夠在全部事件中維持state,而多個獨立的block卻不能)
4.談談instancetype和id的異同
一、相同點
均可以做爲方法的返回類型
二、不一樣點
①instancetype能夠返回和方法所在類相同類型的對象,id只能返回未知類型的對象;②instancetype只能做爲返回值,不能像id那樣做爲參數
5.category中能不能使用聲明屬性?爲何?若是能,怎麼實現?
這種問題一問,我當時就感受確定能實現的,可是實在不知道怎麼作,後來回來查了一下,才知道是用到了Runtime的知識了。貼一下答案
給分類(Category)添加屬性
利用Runtime實現getter/setter 方法
@interface ClassName (CategoryName)@property (nonatomic, strong) NSString str;@end//實現文件#import "ClassName + CategoryName.h"#importstatic void strKey = &strKey;
@implementation ClassName (CategoryName)
-(void)setStr:(NSString *)str
{objc_setAssociatedObject(self, & strKey, str, OBJC_ASSOCIATION_COPY);}
-(NSString *)str
{ return objc_getAssociatedObject(self, &strKey);}
@end
6.isKindOfClass和isMemberOfClass的區別
這個題目簡單,可是就是當時緊張的狀況下,別答反了。
isKindOfClass來肯定一個對象是不是一個類的成員,或者是派生自該類的成員
isMemberOfClass只能肯定一個對象是不是當前類的成員
7.block裏面的如何防止retain cycle
使用弱引用打斷block裏面的retain cycle
MRC中 _block 是不會引發retain;但在ARC中 _block 則會引發retain。ARC中應該使用 _weak或__unsafe_unretained弱引用
8.iOS多線程有哪幾種實現方法?GCD中有哪些隊列?分別是並行仍是串行?
iOS中多線程編程工具主要3有:
1.NSThread
2.NSOperation
3.GCD
dispatch queue分爲下面3種:而系統默認就有一串行隊列main_queue和並行隊列global_queue:
GCD中有三種隊列類型:
The main queue:與主線程功能相同。實際上,提交至main queue的任務會在主線程中執行。main queue能夠調用dispatch_get_main_queue()來得到。由於main queue是與主線程相關的,因此這是一個串行隊列。
Global queues:全局隊列是併發隊列,並由整個進程共享。進程中存在三個全局隊列:高、中(默認)、低三個優先級隊列。能夠調用dispatch_get_global_queue函數傳入優先級來訪問隊列。
用戶隊列:用戶隊列 (GCD並不這樣稱呼這種隊列, 可是沒有一個特定的名字來形容這種隊列,因此咱們稱其爲用戶隊列) 是用函數 dispatch_queue_create
建立的隊列. 這些隊列是串行的。正由於如此,它們能夠用來完成同步機制, 有點像傳統線程中的mutex。
9.談談NSString的時候用copy和strong的區別?
這個題目當時問出來,真的是一會兒就傻了,平時雖然用的多,可是真的沒有注意比較過他們倆,看來平時學習仍是多要問問因此然!
10.Core Data是數據庫麼?有哪些重要的類?
我當時一看問到是否是的問題,我就留神,感受應該不是常理的,當時仔細想了想,Core Data確實不是一個數據庫,只是把表和OC對象進行的映射,當時並非進進映射那麼簡單,底層仍是用的Sqlite3進行存儲的,因此Core Data不是數據庫。
有如下6個重要的類:
(1)NSManagedObjectContext(被管理的數據上下文)
操做實際內容(操做持久層)
做用:插入數據,查詢數據,刪除數據
(2)NSManagedObjectModel(被管理的數據模型)
數據庫全部表格或數據結構,包含各實體的定義信息
做用:添加實體的屬性,創建屬性之間的關係
操做方法:視圖編輯器,或代碼
(3)NSPersistentStoreCoordinator(持久化存儲助理)
至關於數據庫的鏈接器
做用:設置數據存儲的名字,位置,存儲方式,和存儲時機
(4)NSManagedObject(被管理的數據記錄)
至關於數據庫中的表格記錄
(5)NSFetchRequest(獲取數據的請求)
至關於查詢語句
(6)NSEntityDescription(實體結構)
至關於表格結構
以上是我3月份面試遇到的問到的我一會兒沒有答全或者沒答好的問題,大神所有都會的話請忽略哈。而後還有2個開放性的問題,那基本就是徹底考驗實力和本身理解的深度了。一個是談談你對Runtime的理解,另外一個是談談你對Runloop的理解,因爲我我的這兩個理解都不是很深,這裏就不貼個人理解了。你們若是也感受欠缺的,就趕忙去網上多看看吧!
今年面試多了這些問題,也讓我眼前一亮,也感嘆,2年技術發展之快,面試現在都會涉及到算法,不會算法和數據結構的程序員的道路會越走越窄。
算法題,我遇到的都不難,畢竟不是BAT那種公司,簡單的就是直接要你寫一個算法出來,稍微高級點的就是有一個背景,而後要你解決問題,其實就是和ACM題目同樣的,不過就是沒有那麼複雜。我貼幾段問的最多的算法,太難的題只能考本身的算法功底了。
數據結構的題目我就遇到了鏈表翻轉,實現一個棧的結構,先進後出的,樹先跟,中跟,後跟遍歷,圖的DFS和BFS。代碼就不貼了,太長了。若是有忘記的,能夠再去翻翻回顧一下。
面試:
面試基本都是問你以前作過什麼項目,遇到了哪些問題,本身如何解決的。談談對XXX的見解等等這些問題,只要平時認真完成項目,其實面試反而問的東西更好答,由於都是關於你項目的,這些你最瞭解和清楚了。
好了,到此就是2019年3月上海地區除了BAT公司,招聘iOS開發工程師的行情了,比2年前,最大的體會就是面試面更廣了,要求更高了。
如今要求除了會OC,還要懂算法和數據結構,還有要麼會ReactNative,或者PhoneGap一系列混合開發的框架,或者熟悉Swift,程序員要一直跟上主流才能不能被時代淘汰。才能具備競爭力。這也是我面試了這些公司的感悟,活到老學到老!最後但願你們都和我交流交流,我也是個iOS菜鳥,請你們多多指教!
作爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個個人iOS交流羣638302184,無論你是小白仍是大牛歡迎入駐,你們一塊兒交流學習,羣裏免費提供阿里面試題及各大BAT面試題,iOS全面進階學習資料,但願你能找到理想中的工做。
文章來源於網絡,若有侵權,請聯繫小編刪除。