2018 年 3月 iOS 面試總結(jié)

雖然前面已經(jīng)分享過比較多的面試題啄寡,但是最近很多人給我反應(yīng)還在找工作土全。

我想還是再總結(jié)一下關(guān)于面試的一些資料吧报嵌。

一.筆試題

筆試基本都有一兩道基礎(chǔ)題旷祸,比如說UITableView的重用機制糜颠,ARC的基本原理汹族,如何避免retain cycle,談?wù)剬VC的理解其兴,iOS內(nèi)存管理機制顶瞒、WebView與JS交互、安全機制元旬。這些大家應(yīng)該都很清楚了榴徐。筆試的內(nèi)容有幾種有選擇題,問答題匀归,難一點的就是多選題了坑资。我朋友面試了一家就是給了10道多選題,多選穆端,少選袱贮,錯選都不行,他說當(dāng)時做完以后就感覺不是很好体啰,有些題目題干就是一下哪些是對的攒巍,然后ABCD依次給4個不同的概念,這種一道題相當(dāng)于考了4個點荒勇∑饫颍總之遇到這種“惡心”的多選題也不要太慌,靜下心來一一甄別應(yīng)該能拿到不錯的成績沽翔。

下面這份面試清單請收下


圖一



圖二


圖三


圖四

上面的面試清單完全是小插曲

接下來說幾個答的不怎么好的題目兢孝,朋友當(dāng)時記了一下,和大家分享一下。

1.進程和線程的區(qū)別和聯(lián)系

朋友說西潘,這個其實是操作系統(tǒng)的問題卷玉,當(dāng)時一下子把他問的懵了,后來仔細回想了一下喷市,加上自己的理解就答了相种,下面說說稍微完整的答案,大家可以準備準備品姓,再問這種問題就可以完美作答了寝并。

進程是具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位.。線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源腹备。

一個線程可以創(chuàng)建和撤銷另一個線程衬潦;同一個進程中的多個線程之間可以并發(fā)執(zhí)行。

2.并行和并發(fā)的區(qū)別

并行是指兩個或者多個事件在同一時刻發(fā)生植酥;

并發(fā)是指兩個或多個事件在同一時間間隔內(nèi)發(fā)生镀岛。

3.談?wù)勀銓lock和delegate的理解

他當(dāng)時是這么答的,delegate的回調(diào)更多的面向過程友驮,而block則是面向結(jié)果的漂羊。如果你需要得到一條多步進程的通知,你應(yīng)該使用delegation卸留。而當(dāng)你只是希望得到你請求的信息(或者獲取信息時的錯誤提示)走越,你應(yīng)該使用block。(如果你結(jié)合之前的3個結(jié)論耻瑟,你會發(fā)現(xiàn)delegate可以在所有事件中維持state旨指,而多個獨立的block卻不能)

4.談?wù)?b>instancetype和id的異同

1、相同點

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

2喳整、不同點

①instancetype可以返回和方法所在類相同類型的對象谆构,id只能返回未知類型的對象;②instancetype只能作為返回值算柳,不能像id那樣作為參數(shù)

5.category中能不能使用聲明屬性低淡?為什么?如果能瞬项,怎么實現(xiàn)蔗蹋?

這種問題一問,我當(dāng)時就感覺肯定能實現(xiàn)的囱淋,但是實在不知道怎么做猪杭,后來回來查了一下,才知道是用到了Runtime的知識了妥衣。貼一下答案

給分類(Category)添加屬性

利用Runtime實現(xiàn)getter/setter 方法

@interface ClassName (CategoryName)@property (nonatomic, strong) NSString *str;@end//實現(xiàn)文件#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的區(qū)別

這個題目簡單皂吮,但是就是當(dāng)時緊張的情況下戒傻,別答反了。

isKindOfClass來確定一個對象是否是一個類的成員蜂筹,或者是派生自該類的成員

isMemberOfClass只能確定一個對象是否是當(dāng)前類的成員

7.block里面的如何防止retain cycle

使用弱引用打斷block里面的retain cycle

MRC中?_block?是不會引起retain需纳;但在ARC中?_block?則會引起retain。ARC中應(yīng)該使用?_weak或__unsafe_unretained弱引用

8.iOS多線程有哪幾種實現(xiàn)方法艺挪?GCD中有哪些隊列不翩?分別是并行還是串行?

iOS中多線程編程工具主要3有:

1.NSThread

2.NSOperation

3.GCD

dispatch queue分為下面3種:而系統(tǒng)默認就有一串行隊列main_queue和并行隊列g(shù)lobal_queue:

GCD中有三種隊列類型:

The main queue:與主線程功能相同麻裳。實際上口蝠,提交至main queue的任務(wù)會在主線程中執(zhí)行。main queue可以調(diào)用dispatch_get_main_queue()來獲得津坑。因為main queue是與主線程相關(guān)的妙蔗,所以這是一個串行隊列。

Global queues:全局隊列是并發(fā)隊列疆瑰,并由整個進程共享眉反。進程中存在三個全局隊列:高、中(默認)乃摹、低三個優(yōu)先級隊列禁漓「疲可以調(diào)用dispatch_get_global_queue函數(shù)傳入優(yōu)先級來訪問隊列孵睬。

用戶隊列:用戶隊列 (GCD并不這樣稱呼這種隊列, 但是沒有一個特定的名字來形容這種隊列,所以我們稱其為用戶隊列) 是用函數(shù) dispatch_queue_create

創(chuàng)建的隊列伶跷,這些隊列是串行的掰读。正因為如此,它們可以用來完成同步機制, 有點像傳統(tǒng)線程中的mutex叭莫。

9.談?wù)凬SString的時候用copy和strong的區(qū)別蹈集?

這個題目當(dāng)時問出來,真的是一下子就傻了雇初,平時雖然用的多拢肆,但是真的沒有注意比較過他們倆,看來平時學(xué)習(xí)還是多要問問所以然靖诗!

10.Core Data是數(shù)據(jù)庫么郭怪?有哪些重要的類?

感覺應(yīng)該不是常理的刊橘,當(dāng)時仔細想了想鄙才,Core Data確實不是一個數(shù)據(jù)庫,只是把表和OC對象進行的映射促绵,當(dāng)時并不是進進映射那么簡單攒庵,底層還是用的Sqlite3進行存儲的嘴纺,所以Core Data不是數(shù)據(jù)庫。

有以下6個重要的類:

(1)NSManagedObjectContext(被管理的數(shù)據(jù)上下文)

操作實際內(nèi)容(操作持久層)

作用:插入數(shù)據(jù)浓冒,查詢數(shù)據(jù)栽渴,刪除數(shù)據(jù)

(2)NSManagedObjectModel(被管理的數(shù)據(jù)模型)

數(shù)據(jù)庫所有表格或數(shù)據(jù)結(jié)構(gòu),包含各實體的定義信息

作用:添加實體的屬性稳懒,建立屬性之間的關(guān)系

操作方法:視圖編輯器熔萧,或代碼

(3)NSPersistentStoreCoordinator(持久化存儲助理)

相當(dāng)于數(shù)據(jù)庫的連接器

作用:設(shè)置數(shù)據(jù)存儲的名字,位置僚祷,存儲方式佛致,和存儲時機

(4)NSManagedObject(被管理的數(shù)據(jù)記錄)

相當(dāng)于數(shù)據(jù)庫中的表格記錄

(5)NSFetchRequest(獲取數(shù)據(jù)的請求)

相當(dāng)于查詢語句

(6)NSEntityDescription(實體結(jié)構(gòu))

相當(dāng)于表格結(jié)構(gòu)

以上是我朋友3月份面試遇到的問到的一下子沒有答全或者沒答好的問題,大神全部都會的話請忽略哈辙谜。然后還有2個開放性的問題俺榆,那基本就是完全考驗實力和自己理解的深度了。一個是談?wù)勀銓untime的理解装哆,另一個是談?wù)勀銓unloop的理解罐脊,由于我個人這兩個理解都不是很深,這里就不貼我的理解了蜕琴。大家如果也感覺欠缺的萍桌,就趕緊去網(wǎng)上多看看吧!

10凌简,sprintf,strcpy,memcpy使用上有什么要注意的地方

二.機試

這個環(huán)節(jié)基本都是大公司上炎,或者是復(fù)試的時候會出現(xiàn),因為上機打代碼確實很很快區(qū)分出誰好誰壞雏搂,他面了一家這樣的公司藕施,就給一張白紙,全程都是手寫代碼凸郑,這就完全是考驗基本功了裳食,因為沒了代碼補全,沒有了編譯器告訴你哪里錯了芙沥,一切都要靠自己的基本功來了诲祸。

機試基本就是靠靠算法題了。當(dāng)然也有算法題在筆試的最后幾道題出現(xiàn)而昨,那就看公司面試怎么安排的救氯。

2年前我也是面試iOS,當(dāng)時對算法和 數(shù)據(jù)結(jié)構(gòu)要求很低的配紫,很多面試基本都不問這些径密,今年面試多了這些問題,也讓我眼前一亮躺孝,也感嘆享扔,2年技術(shù)發(fā)展之快底桂,面試如今都會涉及到算法,不會算法和數(shù)據(jù)結(jié)構(gòu)的程序員的道路會越走越窄惧眠。

算法題籽懦,畢竟不是BAT那種公司,簡單的就是直接要你寫一個算法出來氛魁,稍微高級點的就是有一個背景暮顺,然后要你解決問題,其實就是和ACM題目一樣的秀存,不過就是沒有那么復(fù)雜捶码。我貼幾段問的最多的算法,太難的題只能考自己的算法功底了或链。

二分查找 θ(logn)

遞歸方法

int binarySearch1(int a[] , int low , int high , int findNum)

{? ?

? ? ? int mid = ( low + high ) / 2;? ? ?

? ? ? if (low > high)? ? ? ?

? ? ? ? ? ? return -1;?

? ?? else?

? ?? {? ? ? ?

? ? ? ? ? ? ? if (a[mid] > findNum)? ? ? ? ?

? ? ? ? ? ? ? ? ? ? return binarySearch1(a, low, mid - 1, findNum);? ? ? ?

? ? ? ? ? ? ? else if (a[mid] < findNum)? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? return binarySearch1(a, mid + 1, high, findNum);? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? else? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? return mid;?

? ? }

}

非遞歸方法

int binarySearch2(int a[] , int low , int high , int findNum)

{? ?

? ? ?? while (low <= high)

? ? ? {

? ? ? ? ? ? int mid = ( low + high) / 2;?? //此處一定要放在while里面

? ? ? ? ? ? if (a[mid] < findNum)? ? ? ? ?

? ? ? ? ? ? ? ? low = mid + 1;? ? ? ?

? ? ? ? ? ? else if (a[mid] > findNum)? ? ? ? ? ?

? ? ? ? ? ? ? ? high = mid - 1;? ? ?

? ? ? ? ? ?? else? ? ? ? ?

? ? ? ? ? ? ? ? return mid;? ?

? ? }? ? ?

? ? return? -1;

}

冒泡排序?? θ(n^2)

void bubble_sort(int a[], int n)

{

? ? int i, j, temp;

? ? for (j = 0; j < n - 1; j++)

? ? ? ? for (i = 0; i < n - 1 - j; i++) //外層循環(huán)每循環(huán)一次就能確定出一個泡泡(最大或者最斜鼓铡),所以內(nèi)層循環(huán)不用再計算已經(jīng)排好的部分

? ? ? ? {

? ? ? ? ? ? if(a[i] > a[i + 1])

? ? ? ? ? ? {

? ? ? ? ? ? ? ? temp = a[i];

? ? ? ? ? ? ? ? a[i] = a[i + 1];

? ? ? ? ? ? ? ? a[i + 1] = temp;

? ? ? ? ? ? }

? ? ? ? }

}

快速排序? 調(diào)用方法? quickSort(a,0,n);? θ(nlogn)

void quickSort (int a[] , int low , int high)

{

? ? if (high < low + 2)

? ? ? ? return;

? ? int start = low;

? ? int end = high;

? ? int temp;

? ? while (start < end)

? ? {

? ? ? ? while ( ++start < high && a[start] <= a[low]);//找到第一個比a[low]數(shù)值大的位子start

? ? ? ? while ( --end? > low? && a[end]? >= a[low]);//找到第一個比a[low]數(shù)值小的位子end

? ? ? ? //進行到此澳盐,a[end] < a[low] < a[start],但是物理位置上還是low < start < end祈纯,因此接下來交換a[start]和a[end],于是[low,start]這個區(qū)間里面全部比a[low]小的,[end,hight]這個區(qū)間里面全部都是比a[low]大的

? ? ? ? if (start < end)

? ? ? ? {

? ? ? ? ? ? temp = a[start];

? ? ? ? ? ? a[start]=a[end];

? ? ? ? ? ? a[end]=temp;

? ? ? ? }

? ? ? ? //在GCC編譯器下叼耙,該寫法無法達到交換的目的腕窥,a[start] ^= a[end] ^= a[start] ^= a[end];編譯器的問題

? ? }

? ? //進行到此,[low,end]區(qū)間里面的數(shù)都比a[low]小的,[end,higt]區(qū)間里面都是比a[low]大的筛婉,把a[low]放到中間即可

? ? //在GCC編譯器下簇爆,該寫法無法達到交換的目的,a[low] ^= a[end] ^= a[low] ^= a[end];編譯器的問題

? ? temp = a[low];

? ? a[low]=a[end];

? ? a[end]=temp;

? ? //現(xiàn)在就分成了3段了倾贰,由最初的a[low]樞紐分開的

? ? quickSort(a, low, end);

? ? quickSort(a, start, high);

}

注釋我也寫上了冕碟,這些算法基本上簡單的算法題都能應(yīng)對了。

數(shù)據(jù)結(jié)構(gòu)的題目我就遇到了鏈表翻轉(zhuǎn)匆浙,實現(xiàn)一個棧的結(jié)構(gòu),先進后出的厕妖,樹先跟首尼,中跟,后跟遍歷言秸,圖的DFS和BFS软能。代碼就不貼了,太長了举畸。如果有忘記的查排,可以再去翻翻回顧一下。

三.面試

面試基本都是問你之前做過什么項目啦抄沮,遇到了哪些問題了跋核,自己如何解決的岖瑰。談?wù)剬XX的看法等等這些問題,只要平時認真完成項目砂代,其實面試反而問的東西更好答蹋订,因為都是關(guān)于你項目的,這些你最了解和清楚了刻伊。

好了露戒,到此就是2018年2月上海地區(qū)除了BAT公司,招聘iOS開發(fā)工程師的行情了捶箱,比2年前智什,最大的體會就是面試面更廣了,要求更高了《∈海現(xiàn)在要求除了會OC撩鹿,還要懂算法和數(shù)據(jù)結(jié)構(gòu),還有要么會ReactNative悦屏,或者PhoneGap一系列混合開發(fā)的框架节沦,或者熟悉Swift,程序員要一直跟上主流才能不能被時代淘汰础爬。才能具有競爭力甫贯。活到老學(xué)到老看蚜!最后希望大家都和我交流交流叫搁,我也是個iOS菜鳥,請大家多多指教供炎!

(其實做為一個開發(fā)者渴逻,有一個學(xué)習(xí)的氛圍跟一個交流圈子特別重要,這是一個我的iOS學(xué)習(xí)交流群605315994音诫,不管你是小白還是大牛歡迎入駐惨奕,大家一起交流學(xué)習(xí),加群私聊群主就可以領(lǐng)取2018最全梳理的面試寶典和資料)就是下圖這份資料,希望你能找到理想中的工作竭钝。


面試寶典

著作權(quán)歸作者所有梨撞。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處香罐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卧波,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子庇茫,更是在濱河造成了極大的恐慌港粱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旦签,死亡現(xiàn)場離奇詭異查坪,居然都是意外死亡寸宏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門咪惠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來击吱,“玉大人,你說我怎么就攤上這事遥昧「泊迹” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵炭臭,是天一觀的道長永脓。 經(jīng)常有香客問我,道長鞋仍,這世上最難降的妖魔是什么常摧? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮威创,結(jié)果婚禮上落午,老公的妹妹穿的比我還像新娘。我一直安慰自己肚豺,他們只是感情好溃斋,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吸申,像睡著了一般梗劫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上截碴,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天梳侨,我揣著相機與錄音,去河邊找鬼日丹。 笑死走哺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聚凹。 我是一名探鬼主播割坠,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妒牙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起对妄,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤湘今,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剪菱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摩瞎,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡拴签,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年泡躯,在試婚紗的時候發(fā)現(xiàn)自己被綠了侵俗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡件已,死狀恐怖上渴,靈堂內(nèi)的尸體忽然破棺而出岸梨,到底是詐尸還是另有隱情,我是刑警寧澤稠氮,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布曹阔,位于F島的核電站,受9級特大地震影響隔披,放射性物質(zhì)發(fā)生泄漏赃份。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一奢米、第九天 我趴在偏房一處隱蔽的房頂上張望抓韩。 院中可真熱鬧,春花似錦鬓长、人聲如沸谒拴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彪薛。三九已至,卻和暖如春怠蹂,著一層夾襖步出監(jiān)牢的瞬間善延,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工城侧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留易遣,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓嫌佑,卻偏偏與公主長得像豆茫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屋摇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 因為個人原因揩魂,換了一份工作,期間面試了有4炮温,5家火脉,基本都是D輪或者上市公司,也從他們的面試筆試中看到了自己的一些不...
    閑云清煙閱讀 287評論 0 2
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,724評論 0 33
  • 目錄 1. 棧和隊列1.用兩個隊列實現(xiàn)棧2.用兩個棧實現(xiàn)隊列3.實現(xiàn)一個棧倦挂,可以用常數(shù)級時間找出棧中的最小值4.判...
    MigrationUK閱讀 3,024評論 4 20
  • 離崗十歲長畸颅,玉府一相逢。 問姓驚初見方援,稱名億舊容没炒。 別來落日圓,語罷凌鐘響犯戏。 望塵呼額道送火,守邊衛(wèi)國防。
    MBF夢閱讀 119評論 0 1
  • 《東京物語》是日本導(dǎo)演小津安二郎1953年的作品笛丙。 整個片子咋一看給人的感覺如記流水賬一般漾脂,平淡無奇。對有些人來說...
    四和子閱讀 304評論 0 0