2022最新常問iOS面試題

前言:

都說今年互聯(lián)網(wǎng)行情很差,作為被大家喊了好幾年“iOS開發(fā)沒人要了”的iOS行情更差。那真實情況是什么樣的呢,以我的經(jīng)歷給大家分析下。

應某個朋友建議,去掉這一句啊,目前iOS崗位還是挺多的,你可以這么想只要蘋果爸爸不倒,iOS開發(fā)就不會沒人要。但另一方面,招聘方對iOS開發(fā)的要求是在不斷提高的,我們不能固步自封,滿足現(xiàn)狀,只有不斷學習,不斷進步,才能保持自身競爭力。

我的面試的階段基本都在6月份,準備的階段則要再往前推個半個月吧。期間約到了不少一二線互聯(lián)網(wǎng)公司面試機會,前期由于準備不足也錯失了一些機會,在之后的面試中不斷總結經(jīng)驗,越來越有信心了,最終選擇了愛奇藝。整體來看求職情況還算可以,不是很好但也不是很差,其中會帶有一定運氣成分,所以要換工作的話一定不要裸辭。

這里總結下這段時間的面試經(jīng)歷和一些心得,后面會附上期間遇到的面試題,大家可以嘗試作答一下。

博主總結了一系列大廠面試中常問的面試技術點,深入解析以及答案,將為最近準備面試的各開發(fā)者去大廠保駕護航!!

《大廠最新常問iOS面試題+答案》:iOS中高級進階之路

求職準備

如果確定了想要換工作就應該為求職做準備了。

知識準備

在確定了換工作的想法之后,我們就應該為面試做準備了。在回顧知識點的時候我建議分類去梳理:OC語法,Runtime,Runloop,多線程,性能優(yōu)化等,這些是優(yōu)先級高的內容,其次是網(wǎng)絡知識,數(shù)據(jù)結構與算法等計算機通識知識。

有一本書非常推薦:《Objective-C高級編程》,建議精讀。

開源庫的話看Runtime(最新為可編譯799.1版本)吧,把類的定義,Runloop,weak,Autoreleasepool相關的代碼都看下。
網(wǎng)絡的知識點可以參考我的那篇:iOS面試備戰(zhàn)-網(wǎng)絡篇。數(shù)據(jù)結構與算法,按照類別刷個幾十題應該能應付大多數(shù)情況了,iOS面試一般不會有太難的算法題。

簡歷

簡歷是求職的第一步,也是你能否獲得面試機會的敲門磚,我們一定要好好打磨下。下面是我在脈脈上看到的HR在篩選簡歷時主要關注的點:

image

我在今年3月份的時候嘗試投過幾次簡歷,并沒有太好的結果,后來進行了一些調整優(yōu)化。6月份再投的時候相對好了些,陸續(xù)收到了些回應。本人之前并沒有大廠經(jīng)歷,不是一流本科,但也能收到不少大廠的面試機會,所以我感覺自己的簡歷內容還是起到了一定的作用的。如果想?yún)⒖嘉液啔v的話,可以關注公眾號:「iOS成長之路」,回復:簡歷,進行下載。

上面有提到“高光時刻”,可以理解成亮點。怎么讓自己的簡歷跟同能力水平的求職者不同,那就是找到屬于我們的亮點。有一個建議,我們在寫簡歷時,可以刻意夸大自己的能力,或者寫我們想成為的樣子,再之后我們就對著簡歷讓這些內容一一實現(xiàn),讓它們變成自己的亮點。一定要注意不能只吹牛,不落實,因為被發(fā)現(xiàn)“造假”可是很嚴重的。

簡歷投遞

以我的經(jīng)歷來說,相對靠譜的簡歷投遞方式有:Boss直聘、脈脈、內推。

需要注意的是,Boss直聘和脈脈只有別人聯(lián)系你,你再投遞,反饋率才會高一些。如果是你主動聯(lián)系的招聘方,那大概率是不會收到回應的。推測很多企業(yè)并沒有很多的招聘崗位也會把招聘信息掛在上面,這種時候HR是不會關注投遞的簡歷的。這也是為什么能看到很多人曬出投遞上百個簡歷確一個回應的都沒有的情況,不要氣餒,這不一定代表你能力不行。

等招聘者聯(lián)系是相對被動的,主動出擊會更有效。那就是尋找內推,一般公司內推都有獎勵的,所以公司內部人員都樂意去發(fā)布職位獲取內推人選。脈脈,掘金,V2EX,一些知名公眾號都能發(fā)現(xiàn)不少內推崗位,我們可以自己去挖掘。

面試流程

目前互聯(lián)網(wǎng)公司大部分是2輪技術面+1輪HR,或三輪技術面+1輪HR。目前的面試形式多為視頻面試,也有些是電話面試。視頻面試的話,如果是通過Zoom,企業(yè)微信,釘釘?shù)纫话闶遣豢疾焓謱懘a的。如果是通過??途W(wǎng),一般是會考察手寫代碼的。對于手寫代碼,僅有算法題會要求準確性,可運行,對于設計類題目,我們寫出偽代碼即可。

如果到了HR輪基本說明我們已經(jīng)通過了面試,如果確定入職,接下來就是背調,薪資證明,學歷證明,入職體檢等一系列操作。

面試題

以下是我面試過程中遇到的面試題,其中網(wǎng)絡多線程問題已經(jīng)分成兩篇單獨講解了,這里就去除了這兩部分。

Swift

因為我最近兩年多一直在用Swift,面試開始的自我介紹環(huán)節(jié),我也會著重提這一點。但是很不幸,我得到的答案基本都是:面試主要考察OC。這也說明了大部分公司對Swift態(tài)度還是非常保守的,所以除非招聘信息里寫了要求Swift技能,否則我們是沒有必要專門準備Swift相關面試的。

當然面試過程中也遇到了幾個Swift問題:

1、Swift中struct和class有什么區(qū)別?

2、Swift中的方法調用有哪些形式?

3、Swift和OC有什么區(qū)別?

4、從OC向Swift遷移的時候遇到過什么問題?

5、怎么理解面向協(xié)議編程?

OC語法

1、Block是如何實現(xiàn)的?Block對應的數(shù)據(jù)結構是什么樣子的?__block的作用是什么?它對應的數(shù)據(jù)結構又是什么樣子的?

2、GCD中的Block是在堆上還是棧上?

3、NSCoding協(xié)議是干什么用的?

4、KVO的實現(xiàn)原理

5、NSOperation有哪些特性比著GCD有哪些優(yōu)點,它有哪些API?

6、NSNotificaiton是同步還是異步的,如果發(fā)通知時在子線程,接收在哪個線程?

UI

1、事件響應鏈是如何傳遞的?

2、什么是異步渲染?

3、layoutsubviews是在什么時機調用的?

4、一張圖片的展示經(jīng)歷了哪些步驟?

5、什么是離屏渲染,什么情況會導致離屏渲染?

6、CoreAnimation這個框架的作用什么,它跟UIKit的關系是什么?

引用計數(shù)

1、ARC方案的原理是什么?它是在什么時候做的隱式添加release操作?

2、循環(huán)引用有哪些場景,如何避免?

3、為什么當我們在使用block時外面是weak 聲明一個weakSelf,還要在block內部使用strong再持有一下?

4、Autoreleasepool是實現(xiàn)機制是什么?它是什么時候釋放內部的對象的?它內部的數(shù)據(jù)結構是什么樣的?當我提到哨兵對象時,會繼續(xù)問哨兵對象的作用是什么,為什么要設計它?

5、哪些對象會放入到Autoreleasepool中?

6、weak的實現(xiàn)原理是什么?當引用對象銷毀是它是如何管理內部的Hash表的?(這里要參閱weak源碼)

Runtime

1、消息發(fā)送的流程是怎樣的?

2、關聯(lián)對象時什么情況下會導致內存泄露?

3、消息轉發(fā)的流程是什么?

4、category能否添加屬性,為什么?能否添加實例變量,為什么?

5、元類的作用是什么?

6、類方法是存儲到什么地方的?類屬性呢?

7、講幾個runtime的應用場景

Runloop

1、講一下對Runloop的理解?

2、可以用Runloop實現(xiàn)什么功能?

性能優(yōu)化

1、對TableView進行性能優(yōu)化有哪些方式?

2、Xcode的Instruments都有哪些調試的工具?

3、講一下你做過的性能優(yōu)化的事情。

4、如何檢測卡頓,都有哪些方法?

5、縮小包體積有哪些方案?

計算機相關

1、項目編譯的流程是什么?手機上的應用程序自點擊圖標開始到首屏內容展示都經(jīng)歷了哪些步驟?

2、對于基本數(shù)據(jù)類型,一般是存儲到棧中的,它有沒有可能存在堆上,什么情況下會存儲到堆上?

3、數(shù)據(jù)庫中的事務是什么意思?

4、使用過什么數(shù)據(jù)庫(我回答的Sqlite,Realm),Realm在使用時有哪些注意事項,如何實現(xiàn)批量操作?

5、LRU算法是否了解,如何實現(xiàn)一套LRU算法?

6、知道哪些設計模式,怎么理解設計模式的作用?

7、如果有1000萬個Int類型的數(shù)字,如何對他們排序?

8、設計一套數(shù)據(jù)庫方案,實現(xiàn)類似微信的搜索關鍵詞能快速檢索出包含該字符串的聊天信息,并展示對應數(shù)量(聊天記錄的數(shù)據(jù)量較大)。

簡歷相關問題

1、Lottie實現(xiàn)動畫效果的原理是什么?

2、OClint實現(xiàn)靜態(tài)分析的原理是什么,它是如何做到的?

3、MVVM和MVC有什么區(qū)別?

4、靜態(tài)庫和動態(tài)庫的區(qū)別是什么?

5、了解Flutter嗎?它有沒有使用UIKit?它是如何渲染UI的?

6、二進制重排的核心依據(jù)是什么?

7、如何設計一套切換主題的方案?

8、AVPlayer和IJKPlayer有什么區(qū)別?用IJKPlayer如何實現(xiàn)一個緩存視頻列表每條視頻前1s的內容?

9、類似微博的短視頻列表,滑動停留播放,如何實現(xiàn)?

10、使用python做過哪些事?如何理解腳本語言?

數(shù)據(jù)結構與算法

1、什么是Hash表,什么是Hash碰撞,解決Hash碰撞有什么方法?

2、如何遍歷二叉樹?

3、簡述下快速排序的過程,時間復雜度是多少?

4、有一個整數(shù)數(shù)組,如何只遍歷一遍就實現(xiàn)讓該數(shù)組奇數(shù)都在前面,偶數(shù)都在后面?

5、假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

6、給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進行反轉。leetcode 7

7、有紅、黃、藍三種顏色的氣球。在??屯鯂?個紅氣球+1個黃氣球+1個藍氣球可以兌換一張彩票。

2個紅氣球+1個黃氣球可以兌換1個藍氣球。

2個黃氣球+1個藍氣球可以兌換1個紅氣球。

2個藍氣球+1個紅氣球可以兌換1個黃氣球。

現(xiàn)在牛牛有a個紅氣球,b個黃氣球, c個藍氣球,牛牛想知道自己最多可以兌換多少張彩票。

軟技能

1、做過哪些工作職責之外的事情?

2、經(jīng)歷過最難的一次業(yè)務開發(fā)是什么樣的,最終怎么解決的?

3、最近有學習什么新技術嗎?有何收獲?

4、你最擅長iOS哪方面的知識?怎么體現(xiàn)出來的?

5、常用哪些開源庫,有沒有研究過他們的原理?

6、如何保持個人成長?

流程型問題

流程性問題基本都會包含下面四個,最好提前準備好

1、請做下自我介紹。

2、你有什么問題要問我的嗎?

3、為什么離職?

4、對下份工作的期望是什么樣的?

這些問題看似不起眼,但其實還挺重要的,很有可能面試官就是通過這幾個問題決定了要不要你通過面試。

自我介紹就不說了,簡明扼要介紹自己近幾年的經(jīng)歷和成績就行,控制在一分鐘以內。

第二個,最好不要直接說沒有問題了,提問面試官是我們整個面試過程中少有的掌握主動權的時刻,它可以體現(xiàn)我們自主思考的能力。最好提前了解下公司和招聘需求,準備幾個問題,或者面試過程中提出我們產(chǎn)生的一些疑問。

離職原因,這個如實回答即可,只要不說是因為錢或者跟領導同事不和基本都沒有問題。

下份工作的期望,這個就看各自的需求吧。

總結

通過這些面試題,我們可以看出一些端倪。

1、面試官更喜歡“刨根問底”,對著一個概念不斷的往深處延展,不斷深入的問。這類問題會有很大的區(qū)分度,第一問第二問第三問難度逐次提高,用于篩選不同的面試者。這也提醒我們某些知識點不光要知道原理,還要知道為什么這么設計,這么設計的好處是什么。

2、問題范圍更全面化,特別是二面時,問題不再局限于iOS端,而是更通用的計算機方向問題,這個需要我們平常多積累;還有就是開始重視個人軟技能,學習能力和上進心。

3、圍繞簡歷,還記得上面說過寫簡歷時要吹牛逼嗎。在面試的時候一定要把他們成為自己真正掌握的知識。

4、注重軟技能,這個比前面幾條作用稍微小些,但是如果被問到了,而我們也有很好的貼合點,那絕對就是加分項。我的一次經(jīng)歷是,當我向面試官說自己有寫博客的習慣,他問我是否知道m(xù)edium,我說知道,還翻譯過幾篇里面的文章,接著說了些我理解的國內外博客平臺的現(xiàn)狀分析。這種情況就屬于加分項了。

另外面試是一次考察自己知識掌握程度的考核,考的好能提升自己自信心,考的不好可以幫助我們定位自身問題,不管怎么說都是不虧的。面試還可以幫助我們了解市場行情,薪資待遇,自身競爭力,流行技術棧等一系列情況。所以真的建議即使不考慮換工作,每年固定時間也可以出去面試幾次。

為自己的面試,為自己的跳槽,加油吧 iOS開發(fā)

簡歷模板+最新iOS題目+提升視頻:docs.qq.com/doc/DVWlQam9Qd3B1cEF2

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容