iOS開發如何面對疫情過後的面試高峰期 !

来源:https://www.cnblogs.com/Julday/archive/2020/03/24/12558837.html

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:跨平臺能力

跨平臺的方案有很多:

 

如上表所示,RNWeex採用的技術方案大體相同,它們都使用JavaScript作為編程語言,然後通過中間層轉換為原生的組件後再利用Native 渲染引擎執行渲染操作。而 Flutter 直接使用 skia來渲染視圖,而Flutter Widget則使用現代響應式框架來構建,和平臺沒有直接的關係。

從性能方面來說,Flutter 的性能理論上是最好的,RNWeex次之,並且都好於傳統的 WebView方案

而從社群和社區的活躍來看,RN和Flutter無疑是最活躍的

總結:我個人針對現在的行情比較推薦大家學習:Flutter

 
  • 同時現在很多人也開始著手學習了

  • 如何存托你的優勢,我個人還要推薦在平時入門到項目的過程,不妨花點時間探索了一下背後的原理:渲染的流程,Flutter和原生的共存通訊優化

  • 下麵這張思維導圖大家可以參考學習

 

3.4.5:技術儲備以及加分項

現在的iOS開發為什麼會遇到瓶頸是因為:前面儲備過少,坐吃山空! 技術不斷更新的時代,我希望你沉下心來與時俱進,不斷儲備技能為自己加分

這裡我推薦學習:視覺方向! 無論直播還是小視頻,圖形圖像處理成為必然的技能,未來5G時代的來臨,這一塊技術必將成為你與其他開發人員差距的賽點!

 

同時也推薦大家學習:應用安全攻防方向 逆向安全這些年越來越被我們熟知並且需要!一個高質量安全的應用程式必將是你薪酬翻番的談資!

五、總結

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:1012951431 不管你是小白還是大牛歡迎入駐 ,分享BAT,阿裡面試題、面試經驗,討論技術, 大家一起交流學習成長!

另附上一份各好友收集的大廠面試題,進群可自行下載!

 
 

 
 

您的分享是我們最大的動力!

更多相關文章
  • 從監控工具DPA中發現一個資料庫(SQL Server 2008 R2)的等待事件突然彪增,下鑽分析發現資料庫執行存儲過程sp_MailItemResultSets時,引起了非常嚴重的等待(High Wait),而主要的等待事件為PREEMPTIVE_OS_WAITFORSINGLEOBJEC。 如... ...
  • 2.3 NiFi Processor應用介紹對於NiFi的使用者來說,如果想要創建一個高效的數據流,那麼就需要瞭解什麼樣的單元處理器才最適合這個數據流。NiFi擁有大量的可以用於各種業務場景的單元處理器可供使用者挑選和使用,這些單元處理器主要提供例如系統之間數據的傳輸,數據的路由,數據的轉換、處理、... ...
  • 面試階段大家基本都會問一些mysql的題,具體的高深理論以後再慢慢補充,但是刷題是不可避免的,下麵直接上貨 創建/刪除表和索引系列 創建表 sql CREATE TABLE if not exists ( int(11) NOT NULL AUTO_INCREMENT, date DEFAULT N ...
  • 首先,SQL語句應該考慮哪些安全性? 第一,防止SQL註入,對特殊字元進行過濾、轉義或者使用預編譯的SQL語句綁定變數。 第二,當SQL語句運行出錯時,不要把資料庫返回的錯誤信息全部顯示給用戶,以防止泄露伺服器和資料庫相關信息。 其次,什麼叫做SQL註入呢,如何防止呢? 舉個例子: 你後臺寫的Jav ...
  • 今天上課要用管理員系統驗證登錄 Oracle,提示我許可權不足,上網搜了下,問題應該是當前用戶未在 ora_dba 組下,得勒,把它添加進去不就行了 找了半天,坑爹地發現 win10 家庭版它就沒有 本地用戶和組 的圖形界面,這氣人玩意兒,再去找管理本地用戶和組的 Dos 命令,把本此添加過程記錄下 ...
  • 目錄 "臟讀(Dirty reads)" "不可重覆讀(Non repeatable reads)" "幻影讀(Phantom reads)" "可重覆讀級別下防止幻讀" "可串列化級別杜絕幻讀" "總結" MySQL8中隔離級別的變數跟之前的版本不一樣,之前是tx_isolation,MySQL8 ...
  • 先上效果圖,預設的實在是太醜了,搜查 Share Extension 自定義界面相關文章大部分都會引導你用 NSExtensionPrincipalClass ,然後繼承 UIViewController ,然後全都是手寫代碼,但是我想用 Storyboard 啊!其實很簡單: 不用改 NSExte ...
  • 自定義marker與infoWindow窗體 1.展示地圖佈局的xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" an ...
一周排行
  • 背景 習慣使用markdown的人應該都知道Typora這個神器,它非常簡潔高效。雖然博客園的線上markdown編輯器也不錯,但畢竟是網頁版,每次寫東西需要登錄系統-進後臺-找到文章-編輯-保存草稿。。。非常難受。。。 但是使用Typora來寫的話,文章圖片又是個問題,本地寫完粘貼到網站上,圖片全 ...
  • 案例:修改預設線程個數 1.NameValueCollection System.Collections.Specialized.NameValueCollection collection = new System.Collections.Specialized.NameValueCollecti ...
  • // from https://stackoverflow.com/questions/35381238/how-to-use-custom-fonts-in-emgucv string text = "塗聚文(Geovin Du)"; // 下麵定義一個矩形區域 int rectWidth = t ...
  • 場景 ASP.NET中新建Web網站並部署到IIS上(詳細圖文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199747 前面講過將ASP.NET的項目部署到本機的IIS上。 但是如果將其部署到伺服器上Window ...
  • 在不同的區域中使用Convert.ToDouble可能會產生問題。 string str = "20.0"; double val = Convert.ToDouble(str); 比如在某些區域語言中得到的結果是200,如: Thread.CurrentThread.CurrentCulture ...
  • 1、前言 ​ 不知道你是否對.NET裡面的定時器產生過一些疑問,以下是武小棧個人的一些總結。 2、官方介紹 在.NET的框架之內定時器有四種,先看一下微軟官方對他們各自特點介紹: System.Timers.Timer,它將觸發事件,並定期在一個或多個事件接收器中執行代碼。 類旨在用作多線程環境中基 ...
  • 筆試考試系統需求分析 1. 引言 1.1編寫目的 項目需求分析目的是使用戶和軟體開發者雙方對項目開發目標有一個共同的理解,便於對軟體開發各個過程的控制與管理,通過對項目開發目標的描述,使開發人員能夠正確理解用戶需求,明確該系統應具有的功能。性能與界面要求。 需求分析作為項目開放的基礎和依據,其預期讀 ...
  • 使用Topshelf部署.net core windows服務 首先新建一個.net core的模板worker程式 過程 略 打開Program.cs namespace TopshelfDemo { public class Program { public static void Main(s ...
  • xaml裡面使用很簡單 xmlns:i="http://schemas.microsoft.com/xaml/behaviors" <i:Interaction.Behaviors> <i:MouseDragElementBehavior/> </i:Interaction.Behaviors> 後 ...
  • Application Insignhts是微軟開發的一套監控程式。他可以對線上的應用程式進行全方位的監控,比如監控每秒的請求數,失敗的請求,追蹤異常,對每個請求進行監控,從http的耗時,到SQL查詢的耗時,完完整整的被記錄下來。當對程式進行優化跟排錯時非常好使。它原來是visualstudio ...