如何面試 iOS 工程師?

2021-02-24 我愛程式設計師

本文系《開發者頭條》7 月 27 日好評文章,作者 張之誠 ,感謝 @ASCE1885 投稿。

歡迎自薦、投稿,採用就送IO幣

原文地址:http://toutiao.io/r/oc7wq


開發者必裝的 App,你裝了沒?http://toutiao.io/download

這個問題已經有很多優秀的答案了,但最近一周面試了很多iOS開發,也準備了一些題目,忍不住發上來...

首先需要聲明的是,此次的面試者大多在有1~3年的iOS開發經驗,並非需要找一個真正的大牛,所以我準備的題目,自己覺得大多數還是比較基礎,比較能夠看出這個層次的人的水準的。如果你也是個有3年左右開發經驗的從業者,不妨一試。

面試開始的時候,我會讓面試者選擇一個他最熟悉的項目,給我們介紹一下它的技術架構,以及面試者在其中參與的模塊和具體工作。因為我本人很討厭面試上來做自我介紹,所以我一般開門見山,直接開始講項目了。事實上,很多開發者並不明白我提到的「架構」的具體意思,有些人說了一大堆產品的功能,還有人說的非常籠統(比如,遵循MVC架構之類),一般這種時候我會打斷他們,直接讓他們給我講一下這個APP的層次結構,或者是核心模塊等。


之後我會問兩個問題:
1. 講述一次在這個APP中,用戶觸發了一個事件,引起了一個服務請求,然後獲取服務端返回,並且更新前端界面的過程。請說的詳細一點,比如數據經過了哪些類的處理,每一次傳遞時的格式是怎麼樣的?

2. 你參與的APP,是如何處理多個服務的同步發起的?
隨後讓面試者說一下APP的界面架構,這個比較隨意。

問完了項目,就開始基礎知識題啦~

Model層:

數據持久化存儲方案有哪些?

沙盒的目錄結構是怎樣的?各自一般用於什麼場合?

SQL語句問題:inner join、left join、right join的區別是什麼?

sqlite的優化

網絡通信用過哪些方式(100%的人說了AFNetworking...)

如何處理多個網絡請求並發的情況

在網絡請求中如何提高性能

在網絡請求中如何保證安全性

語言與基礎知識:

內存中的棧和堆的區別是什麼?那些數據在棧上,哪些在堆上?

#define和const定義的變量,有什麼區別

什麼情況下會出現內存的循環引用

block中的weak self,是任何時候都需要加的麼?

GCD的queue,main queue中執行的代碼,一定是在main thread麼?

NSOperationQueue有哪些使用方式

NSThread中的Runloop的作用,如何使用?

.h文件中的變量,外部可以直接訪問麼?(注意是變量,不是property)

講述一下runtime的概念,message send如果尋找不到相應的對象,會如何進行後續處理 ?

TCP和UDP的區別是什麼?

MD5和Base64的區別是什麼,各自場景是什麼?

二叉搜索樹的概念,時間複雜度多少?

架構:(我們招的不是架構師,這方面問的不多,而且從之前對APP的架構介紹裡可以邊聽邊問)

哪些類不適合使用單例模式?即使他們在周期中只會出現一次。

Notification的使用場景是什麼?同步還是異步?

簡單介紹一下KVC和KVO,他們都可以應用在哪些場景?

APP相關:

如何添加一個自定義字體到工程中

如何製作一個靜態庫/動態庫,他們的區別是什麼?

Configuration中,debug和release的區別是什麼?

簡單介紹下發送系統消息的機制(APNS)

UI:

系統如何尋找到需要響應用戶操作的那個Responder

多屏幕尺寸的適配

UIButton的父類是什麼?UILabel呢?

push view controller 和 present view controller的區別

描述下tableview cell的重用機制

UIView的frame和bounds的區別是什麼

最後是幾道場景題,也是我最喜歡問的:

發送10個網絡請求,然後再接收到所有回應之後執行後續操作,如何實現?

實現一個第三方控制項,可以在任何時候出現在APP界面最上層

實現一個最簡單的點擊拖拽功能。

上面那個拖拽之外,如果在手放開時,需要根據速度往前滑動呢?

如何減小一個應用程式的尺寸?

如何提高一個性用程序的性能?

不同版本的APP,資料庫結構變化了,如何處理?


平心而論,這些題目並沒有特別難,沒有講到黑科技,也沒有講到ACM算法題,都是iOS的基礎概念以及很容易遇到的場景。可能也是因為我們招的目標,也只是一個可以完成業務開發的3年左右經驗的人而已,所以大部分面試者水平並不如意,能答出以上大半題目,同時思路清晰態度積極向上的人,不到四分之一吧...

另外的感想就是,這個行業可能真的有點浮躁,很多面試者,連簡單的幾個場景題都答不出來,基礎知識更是一般,只會用幾個第三方庫,就開口要25~30w的年薪,還有一種愛理不理的感覺。也有些人,在原來的公司,自稱是技術負責人,但連APP的基本架構,包括哪些主要模塊都講不清楚,各種兜圈子,甚至有人講了半天的產品功能和亮點,我不得不一次次打斷才能繼續面試。

其實我從11年開始自學iOS,做的事情越多,越覺得自己有越多的東西要學,離大牛的標準也是越來越遠。而無論從深度還是廣度來看,iOS開發都是一個值得挖掘的技術領域。由於蘋果產品的火熱,市場上的iOS開發一直供不應求,但真正有能力,高素質的可能真的不那麼多。

(點擊閱讀原文完整閱讀)

《開發者頭條》應用下載地址(支持 iOS、Android):http://toutiao.io/download

開發者頭條 - 開發者的首選閱讀分享平臺

http://toutiao.io/

【微信號】 kaifazhetoutiao 歡迎關注!

相關焦點

  • 月薪3萬的iOS工程師總結的軟技能,你掌握了嗎?
    我們都知道,幾乎所有的軟體工程師都知道要關注技術的提高,但是忽視的軟技能很可能會影響你的職業生涯。軟技能對iOS程式設計師多重要?軟技能具體指什麼?1:學會如何學習學無止境。2:制定閱讀規劃程式設計師的生活常常沒有規劃。
  • 質量工程師面試技巧
    我們部門需要招聘一名質量工程師,從去年開始,歷時3個多月,面試了幾十人,才遇到心儀之人。為什麼這麼多人會面試失敗呢?
  • 一個靠譜的 iOS
    一個靠譜的簡歷簡歷非常能反映一個人的性格和水平,相比於你在學校獲得多少獎項,工作經歷、項目經歷、熟悉的技術等更加關鍵,如果還有博客和一些 Github 上的項目,好感度++,但記得在去面試前收拾下,我們真的會挨個文件 review 你的開原始碼的。
  • iOS 開發面試通關指南:67 個必知問題!
    ——不管你是第一次參加面試的新手,還是已經有幾年開發經驗做背書的業內人士,面試都會帶來壓力。作為一名面試者,你必須好好準備,以展現出自己最好的一面,而想要在一場1小時左右的談話中做到這一點是很困難的。作為開發人員,我們通常不情願去用心學習文檔,甚至很多簡單的東西還需要臨時去Google搜索。這沒關係,沒人會要求我們記住一切知識點……但如果是面試的話那就不一樣了。作為一名面試官,面試可能也不是那麼簡單的。你想為公司招募一個非常適合你們團隊的人,但你沒有太多時間去了解對方。
  • 工程師面試,標準答案!
    面試官問:「你懂C++,JAVA是吧? 那你知道什麼是'類'?」
  • 0經驗小白,如何逆襲FLAG大廠工程師?
    只要做好規劃、找對方法、努力學習,從零基礎小白到FLAF大廠Offer,絕對不是異想天開的白日夢~今天,咱們就來聊聊如何成為一名FLAG大廠軟體工程師!編程是成為軟體工程師的必備技能,也是最重要的一項技能。首先,咱們就來看看具體怎麼學習編程!
  • 小米、搜狗、TW等機器學習算法工程師面試總結
    以下機器學習算法工程師的面試題目,出自曉文學習筆記,閱讀更多文章,歡迎加入曉文的公眾號:一面:1、問項目
  • PCB Layout工程師面試經驗分享,值得大家參考!
    面試,是成為一名PCB Layout工程師的必經過程,即使是有經驗的PCB Layout工程師,也還是會經歷各種面試。那麼,在我們面試PCB Layout工程師時,一般都會被問到哪些問題呢?如果你是有經驗的PCB Layout工程師,那重點講一下你做過的項目,整個項目的流程是怎麼樣的,在項目中遇到什麼問題,怎麼解決的。在通過項目把你的技能點體現出來。
  • 從編程基礎到系統設計,這份數據工程師面試寶典全都有 | 資源
    木易 發自 凹非寺量子位 報導 | 公眾號 QbitAI面試職位之前,往往需要進行充分的準備,從理論知識到專業技能。
  • 自控工程師面試時怎樣談薪資?
    輕鬆學TIA博途SCL編程之結構化變量混跡工控界20年有餘,對於面試談薪酬這事兒,已經是司空見慣了。
  • Python工程師比前端工程師更好招?
    今天下線了前端招聘貼,部門變動之後的人員組織終於又告一段落了,然而這次Python工程師招聘的速度確實讓我驚奇。有了基礎層面的普及,再加上DevOps的興起,Python相關的崗位的增多也是市場上Python人才變多的原因。畢竟從大的概率上來講,好的公司,會有更好的/更適宜的環境培養/滋養出優秀的工程師。這是一個正向的循環。不過這些也是個人一些推測。因此,這次Python工程師的招聘才會比之前招聘的都有順利。當然,其實也是緣分。
  • 給工程師的求職簡歷建議
    如果你還沒有當過面試官就可能會覺得很驚訝──其實通常閱讀一份簡歷的初始目標,是找個理由放棄這個人。當你面前堆了一大迭簡歷時你就會知道,如果你夠幸運,裡面才會有一或兩個還不錯的候選人;而要是你比較不幸,最有效率的方法是只好隨便挑個不那麼完美切合職缺所需的面試者。
  • 如何擼一篇殺手級的軟體工程師簡歷
    網申是人們求職最常用的方法,在競爭環境下也是獲取面試機會最有效的方式。這也就正是我獲取到我所有面試機會的方式。我是如何完成的?—— Dale Carnegie,(《如何贏得朋友並影響他人》的作者)我們可以想到無法獲取面試的兩個解決方案:本篇文章將會著重講解前者,因為無論你最終採用那種方式來得到面試,實際上每家公司都是用你的簡歷來作為評估的基礎。因此,接下來我們一起仔細分析我的簡歷,並且著重學習如何寫一篇出色的簡歷。
  • 中國工程師如何獲得Google的工作機會?
    關於國內程式設計師如何直接獲得知名外企的國外工作機會,一直是一個好話題,可惜我自己沒什麼經驗,所以無從寫起。今天這篇文章是「100offer」根據 Mountain View Google 總部的華人工程師及 Google 中國 HR 提供的資料編撰而成,MacTalk 授權轉載,推薦給大家。
  • 學姐來襲- 月薪8K前端工程師的面試是怎麼拿下的?
    學姐畢業後去一家公司應聘前端工程師,最後薪資8K入職,但是將被稱為滅絕師太的HR收的服服帖帖的。
  • 算法工程師常見面試問題及相關資料匯總(附簡歷模板)
    阿里巴巴計算機視覺算法實習生視頻面試 website面試經驗AI算法工程師(面試官角度) website從零基礎到BAT算法崗SP——秋招準備攻略 website螞蟻金服/曠視/虹軟/騰訊優圖暑期實習offer面經 website我在美團的這兩年(附校招筆試/面試/面經分享) website1000 面試題,BAT
  • 面試 16個Behavior Questions的面試官解析及Tips
    例如,在程式設計師面試時,你可以強調一下自己學習新東西的能力、樂於解決並有能力解決Bug/難題。在回答時,你應該充分說明,你將如何運用你學到的技能和經驗(Skill & Experience)為這個職位做出貢獻。同時,你也可以提一下,你很喜歡面對挑戰,通過戰勝困難可以獲得成就感等。同時,你也有能力去解決難題。
  • 《Android 面試指南》
    文章包含對上訴這些公司的面試過程分享以及面試題的分享。2、《面試就是互相了解》作者:悅跑圈 Android 開發工程師鍵盤男;本文分享了作者對構造自己的知識框架、五年來的職業生涯、Android 工程師技術圖譜等分享。3、《Android 面試指南:算法面試心得》作者:宅男瀟澗,畢業於清大計算機系,目前是一名騰訊移動客戶端開發工程師。
  • 工程師應該這樣寫簡歷
    從他們還是青少年時期開始到現在已經長大成人,我總是鼓勵我的孩子們自己寫履歷,不過他們還是會拜託我修改,或是拿給少數信任的朋友看看;每當我感覺他們的履歷有需要修改,我會跟他們解釋原因,如此他們就會學到如何一些求職的技巧。  過去幾十年,我看過數不清的履歷,有些寫得很不錯、少數真的非常出眾,但有太多太多都沒有切中要點。
  • 如何成為一名優秀軟體工程師
    軟體工程師的職業生涯要歷經以下幾個階段:初級、中級,最後才是高級。這篇文章主要是講如何通過10個步驟助你成為一名高級軟體工程師。