2020年本應該是一個 "愛你、愛你"的年份!卻因為 黑天鵝 給我們帶來非常大的影響! 一、2020年iOS招聘數據分析 這裡是 2020年3月份BOSS直聘 北京iOS招聘前幾頁數據 薪資待遇崗位個數年限要求公司規模 15K左右 35份 1-3年 20-99 20K左右 78份 3-5年 100- ...
2020年本應該是一個 "愛你、愛你"的年份!卻因為 黑天鵝
給我們帶來非常大的影響!
一、2020年iOS招聘數據分析
這裡是 2020年3月份BOSS直聘
北京iOS招聘前幾頁數據
薪資待遇 | 崗位個數 | 年限要求 | 公司規模 |
---|---|---|---|
15K左右 | 35份 | 1-3年 | 20-99 |
20K左右 | 78份 | 3-5年 | 100-499 |
30K左右 | 63份 | 3-5年 | 100-499-1000以上 |
30K以上 | 66份 | 5年以上 | 499-1000以上 |
下麵是2019年10月份我統計的數據
薪資待遇 | 崗位個數 | 年限要求 | 公司規模 |
---|---|---|---|
15K左右 | 40份 | 1-3年 | 20-99 |
20K左右 | 63份 | 3-5年 | 100-499 |
30K左右 | 93份 | 3-5年 | 100-499-1000以上 |
30K以上 | 33份 | 3-5-以上 | 499-1000以上 |
我做了一個圖標以供大家參考(查看直觀)
15K左右
開發崗位的確有所下降;- 但是
20K左右
崗位卻上升了不上; - 受
黑天鵝
影響30K左右
下降了不少; 30K以上
這個崗位有所上升,這裡數據不准確,因為我是知道的,在BOSS上面為提供知名度,肯定會有所假數據的,這一點我相信大家也心知肚明!- 畢竟行業在進步,以及物價在上升,大家工作也是必然要上漲的!
-
底層原理毫無疑問還是iOS開發現在必備能力。
- 對象底層原理
- 指針與記憶體的一些相關面試
weak
弱引用block
的原理AutoreleasePool
原理Runloop
的原理Runtime
相關、消息轉發- ....
-
性能優化以及架構能力相對比之前要求越來越多!
- ①性能優化方面:
tableView的優化
->界面卡頓原理
->app 性能分析
->項目優化
- ②架構方面: 設計模式、解耦手段、組件化....
- ①性能優化方面:
-
多線程、網路能力也是占有一個非常大的比例 !
- 多線程的原理
- 線程池
- GCD
- 鎖相關原理
- 線程生命周期
- 網路設計
- 網路框架的一些理解
- 開發過程中一些需求結合多線程或者網路設計!
-
數據結構演算法能力占比也比較大。通常一般大公司都會有一些筆試:雖然不在核心崗位對於數據結構演算法要求不是非常嚴格,但是也會有一些常規的數據結構和演算法的題
- 排序
- 數據結構設計
- 複雜度討論
- 一些腦經急轉彎的演算法題
- .....
-
跨平臺能力要求多了!比如騰訊很明顯就要求
Flutter
開發能力 (畢竟2019年Flutter
太火了!)
估計大家看到這裡,也是內心OA: 面試是造航母啊!哈哈哈...
二、現在iOS都在問什麼
下麵我總結2020某些大廠以及小公司的面試題!
2.1、iOS 基礎題
1,分類和擴展有什麼區別?可以分別用來做什麼?分類有哪些局限性?分類的結構體裡面有哪些成員?
2,講一下atomic的實現機制;為什麼不能保證絕對的線程安全(最好可以結合場景來說)?
3,被weak修飾的對象在被釋放的時候會發生什麼?是如何實現的?知道sideTable麽?裡面的結構可以畫出來麽?
4,Autoreleasepool 所使用的數據結構是什麼? AutoreleasePoolPage 結構體瞭解麽?
5,講一下對象,類對象,元類,跟元類結構體的組成以及他們是如何相關聯的?為什麼對象方法沒有保存的對象結構體里,而是保存在類對象的結構體里?
6,iOS 中內省的幾個方法? class 方法和 objc_getClass 方法有什麼區別?
7,RunLoop的作用是什麼?它的內部工作機制瞭解麽?(最好結合線程和記憶體管理來說)
8,哪些場景可以觸發離屏渲染?(知道多少說多少)
2.2、iOS 實戰題
1,有哪些場景是NSOperation比GCD更容易實現的?(或是NSOperation優於GCD的幾點,知道多少說多少)
2,App 啟動優化策略?最好結合啟動流程來說(main()函數的執行前後都分別說一下,知道多少說多少)
3,App 無痕埋點的思路瞭解麽?你認為理想的無痕埋點系統應該具備哪些特點?(知道多少說多少)
4,你知道有哪些情況會導致app崩潰,分別可以用什麼方法攔截並化解?(知道多少說多少)
5,你知道有哪些情況會導致app卡頓,分別可以用什麼方法來避免?(知道多少說多少)
複製代碼
2.3、網路題
1,App 網路層有哪些優化策略?
2,TCP為什麼要三次握手,四次揮手?
3,HTTPS的握手流程?為什麼密鑰的傳遞需要使用非對稱加密?雙向認證瞭解麽?
4,HTTPS是如何實現驗證身份和驗證完整性的?
5,如何用Charles抓HTTPS的包?其中原理和流程是什麼?
2.4、電腦系統題
1,瞭解編譯的過程麽?分為哪幾個步驟?
2,靜態鏈接瞭解麽?靜態庫和動態庫的區別?
3,static和const有什麼區別?
4,什麼時候會出現死鎖?如何避免?
5,有哪幾種鎖?各自的原理?它們之間的區別是什麼?最好可以結合使用場景來說
2.5、設計模式題
1,除了單例,觀察者設計模式以外,還知道哪些設計模式?分別介紹一下
2,iOS SDK 裡面有哪些設計模式的實踐?
3,設計模式的成員構成以及工作機制是什麼?
2.6、架構 & 設計題
1,MVC和MVVM的區別?MVVM和MVP的區別?
2,面向對象的幾個設計原則瞭解麽?最好可以結合場景來說。
3,可以說幾個重構的技巧麽?你覺得重構適合什麼時候來做?
4,你覺得框架和設計模式的區別是什麼?
5,看過哪些第三方框架的源碼,它們是怎麼設計的?設計好的地方在哪裡,不好的地方在哪裡,如何改進?(這道題的後三個問題的難度已經很高了,如果不是太N的公司不建議深究)
2.7、數據結構&演算法題
1,鏈表和數組的區別是什麼?插入和查詢的時間複雜度分別是多少?
2,哈希表是如何實現的?如何解決地址衝突?
3,排序題:冒泡排序,選擇排序,插入排序,快速排序(二路,三路)能寫出那些?
4,鏈表題:如何檢測鏈表中是否有環?如何刪除鏈表中等於某個值的所有節點?
5,數組題:如何在有序數組中找出和等於給定值的兩個元素?如何合併兩個有序的數組之後保持有序?
6,二叉樹題:如何反轉二叉樹?如何驗證兩個二叉樹是完全相等的?
複製代碼
三、iOS開發者我們該如何破冰!
⚠️此時此刻,我只想強調一件事:⚠️
多年的應用層開發經驗不足以應付現在的iOS市場!
多年的應用層開發經驗不足以應付現在的iOS市場!
多年的應用層開發經驗不足以應付現在的iOS市場!
複製代碼
3.1 iOS的囧狀
在本人看來,現在最尷尬的就是iOS開發 3-5年 甚至5年以上的開發人員,比上不足,比下有餘!
- 開發這麼多年經驗了,薪資要求肯定不能滿足現狀,我相信大家都是極度渴望突破:20K 甚至 30K 坎~
- 想去大廠,發現不光學歷不行,就連最拿得出手的技術也只能屢屢受挫!
- 自己平時工作,家庭都很忙,學習成了自己內心一閃而過的念頭!
- 開始學習,發現自己方向不夠清晰,不知道自己應該學習什麼!
- 好不容易找到了方向,發現自己能難堅持下來!
- 就算堅持了一段時間,發現好多問題無法攻剋!
- 終於學習了一段時間,發現還是面試被打擊!
- ☹️☹️☹️
3.2 學習的必要性
希望保持初心,繼續往前面走!畢竟我們所從事的行業:IT行業
.技術與行業必然是不斷更新變化!雖然IT行業高薪,但是你也要看到這個行業內的淘汰率也是不容小覷的!
換句話說:人家面試題一天比一天難,難道你的技術要保持原地?
3.3 學習的方法
學習的方法千萬條,進步第一條
- 博客學習 : 我覺得這應該是我們最喜歡的方式!建議大家平時上班下班路上休閑時間就可以看看大牛的博客,文章!畢竟這些都是來自人家的總結探索分享,很具學習性!同時如果有條件的,不妨針對你學習的東西都能有所學習總結
- 講座-分享會:這個也是比較好的!能夠第一時間吸取的技術的新潮流!
- 看書:我個人也是比較喜歡看書的,雖然有點慢,但是每天書本的輸入也成我現在汲取養分的一個重要渠道
- 公司、團隊分享會:能夠滿足現在公司業務技術拓展,還能看到自己周邊人的學習狀態!
- 知識付費:現在信息爆炸,知識付費學習是目前最為潮流的方式,學習方式簡單,成效快,知識比較系統!可能很多人都知道我本人比較喜歡得到,在得到平臺經常吸取一些自己技術乃至職業方面的知識!
3.4 推薦學習方向
3.4.1:底層探索能力
很多人會諷刺:面試造航母,上班擰螺絲! 其實不然,面試的高要求對於一家優秀的iOS需求單位來說是必須的!
-
iOS開發實現的確有很多的方式,但是一個真正懂得原理的開發人員在日後的開發工作中是非常重要。我見過一些開發人員:遇到BUG都是直接面向百度,不知道為什麼直接
command + c
/command + V
OK,解決了,打版走人,下次又遇到了還是要面向百度,其中浪費的時間和小伙伴之間的溝通成本可想而知! -
底層原理只是你在工作開發中偷懶而逃避選擇使用而已(或者全然不太瞭解)
-
技術不斷更新,底層原理是永恆根基
-
底層原理是非常重要的,只有真正掌握原理才能迎接未來無限可能。
下麵是我推薦大家學習的內容:
OC 底層探索篇也是大家熟悉而又陌生的地方,平時處處用,就是不知道為什麼!
3.4.2:性能優化以及架構能力
只要你面試要求 20-30K
必然要求性能優化能力!
-
怎麼優化啟動速度,應用包的瘦身!
-
界面優化(卡頓檢測以及分析解決)
-
記憶體管理方面也是面試以及平時開發的重災區!
-
架構並不屬於性能優化,但是我要求每一個
3年以上開發
都要有一定的架構思維!
3.4.3:數據結構演算法
數據結構演算法應該是每一個程式員必備的根據。我記得我的導師跟我說過:一個程式員需要兩樣東西:智商和勤奮
-
英文能力體現你的勤奮度
-
數據結構演算法反饋你的智商等級
數據結構與演算法並不只是抽象的概念,掌握好的話可以寫出更高效、運行得更快的代碼,這對於如今盛行的網頁和移動應用開發來說尤為重要。如果你最近一次使用演算法是在大學課堂上或求職面試時,那你應該還沒見識到它的真正威力!
這個主題的大多數資料都有一種通病——晦澀難懂。滿紙的數學術語,我覺得一種有趣的學習方式也是非常重要的!
3.4.4:跨平臺能力
跨平臺的方案有很多:
如上表所示,RN
、Weex
採用的技術方案大體相同,它們都使用JavaScript
作為編程語言,然後通過中間層轉換為原生的組件後再利用Native
渲染引擎執行渲染操作。而 Flutter
直接使用 skia
來渲染視圖,而Flutter Widget
則使用現代響應式框架來構建,和平臺沒有直接的關係。
從性能方面來說,Flutter
的性能理論上是最好的,RN
和Weex
次之,並且都好於傳統的 WebView方案
而從社群和社區的活躍來看,RN和Flutter無疑是最活躍的
總結:我個人針對現在的行情比較推薦大家學習:Flutter
-
同時現在很多人也開始著手學習了
-
如何存托你的優勢,我個人還要推薦在平時入門到項目的過程,不妨花點時間探索了一下背後的原理:渲染的流程,
Flutter
和原生的共存通訊優化 -
下麵這張思維導圖大家可以參考學習
3.4.5:技術儲備以及加分項
現在的iOS開發為什麼會遇到瓶頸是因為:前面儲備過少,坐吃山空! 技術不斷更新的時代,我希望你沉下心來與時俱進,不斷儲備技能為自己加分
這裡我推薦學習:視覺方向! 無論直播還是小視頻,圖形圖像處理成為必然的技能,未來5G時代的來臨,這一塊技術必將成為你與其他開發人員差距的賽點!
同時也推薦大家學習:應用安全攻防方向 逆向安全這些年越來越被我們熟知並且需要!一個高質量安全的應用程式必將是你薪酬翻番的談資!
五、總結
作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:1012951431 不管你是小白還是大牛歡迎入駐 ,分享BAT,阿裡面試題、面試經驗,討論技術, 大家一起交流學習成長!
另附上一份各好友收集的大廠面試題,進群可自行下載!