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

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

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,阿裡面試題、面試經驗,討論技術, 大家一起交流學習成長!

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

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

-Advertisement-
Play Games
更多相關文章
  • 從監控工具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 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...