1. 程式人生 > >2019 年 3 月 iOS程序員面試心得總結,請大家多多指教!

2019 年 3 月 iOS程序員面試心得總結,請大家多多指教!

quest 一道 找到 數據集 ade rec sqlite scrip 不錯

序言:

今年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的異同

1、相同點

都可以作為方法的返回類型

2、不同點

①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全面進階學習資料,希望你能找到理想中的工作。

文章來源於網絡,如有侵權,請聯系小編刪除。

2019 年 3 月 iOS程序員面試心得總結,請大家多多指教!