很多時候,我們作為面試者其實也是很盲目的在參加面試,如果我們了解了面試官的心理,以及面試官會針對那些問題對我們進行提問,我們前期做好相應的準備,在我們的面試過程中會有很大幫助的,下面是我在網上搜索一些關于面試官會對iOS開發工程師進行相關面試的一些整理。希望對大家有用。也希望和大家進行交流。
1.簡歷上的描述以及項目要是最熟悉的,講自己熟悉的東西容易讓面試官進入狀態,展示自己好的一面。(面試官主要考察兩方面,一是有沒有在某些點上有過深入研究。二是對項目整體了解如何)。
2.在描述項目的時候選幾個自己能夠清晰描述的功能點。(面試官主要是了解候選人在這塊功能點深入的程度,從思路到方法,從上層?API?調用到框架流程再到底層實現。如果我們在講述時有一條邏輯主線,例如講述業界普遍是怎么做的,自己在業界方案基礎上做了什么改進,怎樣做到更好,進一步改進的思路是怎樣,這是最好的。如果還能把解決問題的方法歸納起來運用在其他地方,能舉一反三,包裝成通用解決方案,或者做開源貢獻,就更好了。)
3.面對面試官體提問我們哪一個項目技術點最能體現自己的技術,然后不停追問技術細節,例如做了一個相冊項目,覺得列表優化是最能體現技術點的,會問這里優化的思路是什么,怎樣評估,遇到過什么困難,怎么解決的,如果用到圖片緩存開源項目,說說它具體做了什么事,緩存策略是什么,從下載到顯示的整個流程是怎樣的,還有沒有更好的方案,追問到一定程度后也會發散去問跟這個話題相關聯的問題,例如如果有部分用戶反饋圖片顯示不了,你會怎樣排查問題,排查修復后怎樣監控,就會過度到一些網絡和運營監控方面的內容,也會順便問到一些基礎知識。
4.通過上面的了解,面試官會選擇項目的大致架構以及核心功能進行提問,我們最好能畫出項目的大致結構,也會問網絡層和數據層是怎樣實現的,為什么這樣實現,項目最核心功能是怎樣實現的,例如做讀書的至少要知道項目里的排版引擎的大致實現方式,做?QQ?的要知道消息收發的機制,如果不知道,也可以說說如果自己實現會怎么做。這里主要看看有沒有技術好奇心,會不會積極主動了解項目里已有的非職責范圍內的技術點,主動和好學這兩點是很重要的。
5.到最后面試官會問一些基礎知識,如果前面的回答的都很好,這塊應該會減少很多。基礎知識比如像內存?/?網絡?/?存儲?/?線程等,例如?ARC?是怎樣做到自動管理內存的,跟?java/js?的垃圾回收的區別,網絡?http?協議是怎樣的,用過什么數據庫框架,db?索引是什么,多線程開發要注意什么,跟?runloop?的關系是什么等等。數據結構和算法在筆試時會涉及,面試會比較少,如果問算法的話只會問問思路,一般我覺得如果項目經歷方面不太好,才會考慮考考算法作為輔助判斷。
6.一些通用能力像邏輯思維能力,溝通能力,自我驅動能力等都可以在上面那些問題的交流中表現出來,另外像團隊協作能力、抗壓能力和性格特征這些也會看情況考察一下,比如會問如果產品做的個設計,你覺得不靠譜,會怎樣做,設計讓你做個很難實現的效果,你會怎樣評估等。
7.作為程序員,如果我們有?GitHub?開源項目是最好的,直接可以看到代碼風格,代碼質量,處理?issue?和?PR?的方式,如果有技術博客也是很好的,可以提前看到平時的一些技術積累,省了很多事。但如果?GitHub?內容是培訓班的那種仿寫?APP,博客內容是摘抄文章什么的就是負分了。
總結:其實面試就是公司想低成本找到合適在團隊里一起工作的人,因為如果通過一起工作一段時間去判斷是否合適,成本太高。這種低成本的代價就是會誤判,有些工程師是理論型,有些是實踐型,面試的方式會對實踐型的人不利,盡管我們如果被招進去是適合的人,而且人會在不同環境下會有不同的表現,只根據過去的經歷去判斷有時是不準確的。對于面試官只能盡量采取一些措施去減少誤判的概率,例如公司會提高面試官的判斷能力,或多幾輪面試。一般如果不是急招,策略都會是寧殺錯不放過,所以其實就算面試被否了,也不一定代表能力不行。