iOS秋招面經---我是如何經過多家公司的面試 | 掘金技術徵文

基本狀況

  • 本人從七月下旬開始實習跑路,回到學校準備秋招,一開始海投了大概四五十家公司,前期收到面試的公司基本都收到了意向書或offer,包括阿里,百度,猿輔導等等。fail掉的公司爲騰訊,二面掛後轉崗到騰訊北京,後放棄面試。後決定好本身去向以後基本沒有再繼續面試,也推了十幾家公司的面試邀請,包括美團,貝殼,快手等。我的秋招在八月下旬基本結束,如今但願把本身在秋招的面試經驗總結出來,幫助更多的小夥伴。

通用必備基礎知識

  • 拋開iOS 開發這一項技能,咱們最基礎的本質仍是一名軟件開發工程師,因此基礎的部分必不可少,本篇面經中,不會具體總結出每一個公司每一面具體考的內容,而是會根據不一樣的知識點將面試真題分爲不一樣的專題部分來具體分析。

計算機網絡

  • 對於大前端類,計算機網絡主要考量的仍是傳輸層和應用層部分的知識。前端

  • 瀏覽器輸入url到網頁顯示經歷了什麼過程?git

  • TCP三次握手:具體是怎麼握手?爲何要三次握手?兩次行不行?爲何不行?三次握手,第二次和第三次分別由於什麼?面試

  • TCP是如何保持可靠傳輸的(擁塞控制,慢啓動等等概念的理解)算法

  • TCP爲何要四次揮手,TIME_WAIT爲何至少設置兩倍的MSL時間?sql

  • TCP三次握手的詳細數據傳遞,四次揮手詳細數據內容,數據包組成、TIME_WAIT狀態,2MSL,RTT,重傳、滑動窗口、擁塞原理等等shell

  • TCP、UDP面向鏈接、無鏈接具體理解,他們的區別,如何將 UDP 改形成和 TCP 功能類似數據庫

  • TCP/IP四層協議,OSI七層協議,每層都有啥對應的協議,原理是啥編程

  • http報文結構,http中超文本超是啥意思,http請求的組成設計模式

  • http 報文頭部含有什麼,multipart瞭解嗎瀏覽器

  • http的狀態碼,200,304,301,http請求報文,響應報文

  • get和post請求的區別?什麼狀況下用到?POST傳輸的數據都有哪些格式呢(這裏須要搞定http各類請求傳輸的數據格式)

  • 描述一次完整的http請求

  • 什麼是cookie,什麼是session,區別聯繫,cookie的本質是什麼

  • http1.0,1.1,2.0的區別

  • https有幾回握手和揮手?https的原理。http有幾回揮手和握手?TLS在哪一網絡層,基本原理是什麼?

  • https與中間人攻擊

  • HTTPS,安全層除了SSL還有,最新的? 參數握手時首先客戶端要發什麼額外參數

  • HTTPS是什麼?握手過程,SSL原理,非對稱加密瞭解多少

  • 證書是幹什麼用的

算法

  • 劍指 offer 上面的題目都是面試過程當中的算法高頻題,特別是二叉樹和字符串,棧隊列,鏈表,跳臺階問題必定要弄懂而且熟練。
  • 八大排序算法的複雜度,概念,最好最壞狀況,手寫都是必需要掌握的,其中的重點是快排和堆排序,對於快排的優化,快排的基礎原理,系統 API 快排的實現原理等都是必需要掌握的基礎知識。
  • 二分查找在面試過程當中也比較常見,由於比較簡單,包括二分查找的變種。
  • 二叉樹的前中後序的遞歸與非遞歸遍歷方式,以及層序遍歷和蛇形遍歷都是重點。
  • 海量數據如何找到重複次數最多的那個 優化
  • 海量數據,可是都是1~100之間的,如何找到重複次數最多的那個
  • 面試算法題通常不難,掌握技巧很重要。二叉樹相關的算法題基本都要往二叉樹的遍歷上靠,鏈表相關的算法題基本都要往額外的「幫助指針」上面靠。

數據結構

  • 在面試過程當中這一類主要是和算法來一塊兒考,數據結構通常主要會問棧與堆的區別,棧與隊列的區別等等,在前端的面試中,紅黑樹這類的不多被問到。

編譯原理

  • 主要須要瞭解程序的編譯過程的基礎概念就OK。

操做系統

  • 操做系統老生常談的就是進程,線程的概念和區別,幾個狀態,以及他們的調度方式,通訊方式,保持安全等等知識點,基本面試都會被考到一點,這一部分須要緊緊掌握,實在理解不了就背下來。
  • 說說遞歸和普通的循環方式有什麼區別
  • 計算機存儲系統是指?哪些存儲系統能提升程序執行的效率?
  • 段錯誤和棧溢出分別在何時會出現,爲何
  • 其餘方面的包括頁置換等等基礎知識,知道概念就OK,在前端面試過程當中這部分不是特別重點考量的點。

數據庫

  • 數據庫這部分也比較簡單,主要就是 ACID 等基礎概念,幾大範式,簡單的 sql 語句。

設計模式

  • 工廠方法,抽象工廠,簡單工廠的區別和聯繫
  • 裝飾者
  • 觀察者
  • 代理模式等等

機率論

  • 三門問題
  • 紅黑球等等常見問題百度便可

Linux

  • 主要包括基本的 shell 編程,基本的腳本命令,重點是 grep,ps,top,free等

版本控制

  • 版本控制主要包括 Git 和 SVN
  • git 的基礎概念,基本命令,包括 merge 和 rebase 的區別等。
  • Git 和 SVN 的區別,異同點
  • 平時開發中,版本控制的流程是怎麼樣的

通用語言基礎

  • 面向對象的多態。多態的幾種方式
  • 各個語言中的單例模式
  • 內存管理方式
  • static 和 const 的做用和區別
  • C 語言的內存分段

iOS專業知識點

  • iOS 的面試過程當中,雖然知識點不少很雜,可是老生常談的仍是那些比較陳舊的知識,只要對他們有較好的理解,經過面試通常不成問題。

內存管理

  • ARC 和 MRC 的區別
  • 屬性的關鍵字,他們具體的底層實現以及區別,被問爛的知識點包括 copy, 淺拷貝和深拷貝的區別, weak 的底層實現。稍微新穎一點的 assgin 和 weak,unsafe_unretained 具體有什麼區別,assgin是否能夠用來修飾對象。這一部分是面試必問,必定要弄懂。
  • Autorelease pool的底層實現原理,與 Runloop 的關係, autoreleasing 關鍵字。

Block

  • 本質,基礎概念
  • 使用時要注意的地方
  • block的實現,如何截獲自動變量的,如何修改自動變量的值的,block的幾種形式
  • __block的本質
  • forwarding 指針
  • block怎麼避免循環引用。是否是全部的block都會產生循環引用,block裏面怎麼避免被提早釋放

多線程

  • iOS 中多線程的幾種方式,區別,使用場景,基本概念,同步異步,串行並行的區別。
  • GCD,寫一個死鎖,並行和串行隊列,同步和異步的區別,GCD怎麼控制最大併發數
  • 怎麼讓子線程定時執行一個方法,具體的實現方法
  • 如何控制線程的最大併發數爲10,而後加載十個圖片最後展現出來,具體方法
  • 子線程的runloop是怎麼執行的,它裏面的 autoreleasepool 是怎麼執行的。
  • NSMutableArray 怎麼保證線程安全的。
  • GCD怎麼避免block中的變量被提早釋放

Runtime

  • 消息的動態轉發
  • 給 Category 添加屬性,關聯對象都有幾種形式
  • method swizzling
  • 說一說類的結構,運行時中的class都有什麼屬性,property都有什麼屬性
  • 說一說isa指到NSObject的那個過程
  • Category的本質,load方法何時加載,Category重寫了父類的方法會怎樣,底層源碼 ,若是兩個Category和一個基類,都有同名方法,先執行哪一個
  • property會自動生成什麼,若是此時已經有下劃線_name的實例變量了那會生成什麼
  • load 和 initialize

Runloop

  • runloop實現原理

  • source 類型

  • 線程保活的方式

  • runloop和多線程的關係,以及timer的關係

第三方庫的源碼

  • AFNetWorking, SDWebImage,YYModel 都是很是常見,基本面試必問
  • 舉例:SDWebImage懟源碼,實現原理,若是正在請求一個地址的圖片,這個時候又同時另外一個請求,這個時候會再發送一個請求嗎?
  • 如何本身實現一個 YYModel,具體使用的方法,延伸到 runtime 的源碼

生命週期

  • app 的生命週期
  • 控制器的生命週期
  • 視圖的生命週期

UI

  • UICollectionView 瀑布流
  • UITableView 相關的優化,底層原理等
  • 頁面佈局
  • layoutSubViews 和 drawInRect 等的區別
  • 本身實現一個 UIScrollView
  • 事件的傳遞鏈和響應鏈
  • 界面很是卡頓怎麼定位到具體的類和方法
  • UIView和CALayer區別

數據存儲

  • 數據持久化都有什麼,用過什麼,歸檔,偏好設置均可以存儲什麼樣的類型

架構

  • MVC,MVVM等,他們的區別和聯繫,優缺點
  • 從 0 到 1 實現一個 app 的思路
  • 對於項目從 main 函數執行以前到以後啓動優化,卡頓優化和界面優化。

OC 語言特性

  • OC 與 C 的區別, OC 與 Java, C++ 的區別。
  • iOS中的協議
  • OC 動態性
  • C語言如何動態的交換兩個方法的實現

其餘

  • KVO 的底層原理,本身實現
  • KVC 的底層原理,本身實現
  • NSNotificationCenter 的底層原理,是同步仍是異步,如何實現一個,若是在子線程接收一個通知能不能接收到
  • 幾種頁面傳值方式的區別
  • 界面很是卡頓怎麼定位到具體的類和方法
  • 一個 int 類型的值,被@(10) 包裝成 NSNumber 類型,傳遞到一個接受 id 類型的方法參數中,這個值能不能保持正確
  • 在 iPad 上面,分屏功能,拖拽 wps 的文件到qq的這個過程是怎麼實現的(進程間通訊的方法)
  • 如何實現dispatch_once
  • Instrument 的使用
  • 熱修復用過麼,平時版本是怎麼迭代的,線上bug是怎麼修復的
  • 實習期的一些內容。

必備書單

  • 圖解 TCP/IP, 圖解 HTTP
  • 劍指offer
  • Effective Objective-C
  • iOS 與 OSX 高級編程
  • 以上都是必需要重複看不少遍的書單,其餘不過重要的暫不列出。

總結

  • 對於秋招來講,因爲面向的都是學生,因此主要仍是考量的基礎,最最重要的包括計算機網絡和數據結構算法。對於iOS 開發的同窗來講,上面已經包括了大部分我面試中遇到的點以及我認爲很是重要的知識點,但願個人面經能給你們帶來一些幫助!

另:歡迎你們參加掘金技術正文大賽👉 秋招求職時,寫文就有好禮相送 | 掘金技術徵文 - 掘金

相關文章
相關標籤/搜索