常用面試題

1,請做一個簡單的自我介紹

面試官,你好,我叫XXX,我是2015年計算機專業(yè) 本科畢業(yè),畢業(yè)之后一直從事iOS開發(fā)工作,主要使用的語言是OC。
在過往的工作中,擔(dān)任過北京紅云融通技術(shù)有限公司iOS開發(fā),我們公司的主要產(chǎn)品是紅云會議以及sdk,這是一款類似于騰訊會議的產(chǎn)品,我的主要工作是,主導(dǎo)紅云會議APP和SDK迭代開發(fā)已經(jīng)上架發(fā)布任務(wù),期間優(yōu)化了千人入會的會議入會場景,從入會40+s 優(yōu)化到2s,修復(fù)了現(xiàn)有版本中的內(nèi)存泄漏,解決程序異常閃退問題。
此前在成都御順投資參與重構(gòu)CRM系統(tǒng),這是 是款姐內(nèi)部員工使用的一款客戶管理 app,完成了多分公司不同功能的業(yè)務(wù)場景。
在之前。就職于成都博智維訊技術(shù)有限公司 期間獨立完成水井坊公司的展銷類APP英雄匯開發(fā)任務(wù),從開發(fā)到上架都是獨立完成的,再之前還參與過南京SFA洋和項目,以及1919配送端的項目開發(fā),集成百度地圖導(dǎo)航模塊,完成了到目的地的路徑規(guī)劃功能。
另外在工作中我也參與過安卓,前端,flutter的部分頁面的開發(fā)工作,對其他語言有一定的了解,期待能在貴公司發(fā)揮我的專業(yè)技能,創(chuàng)造價值。

2.你在項目中遇到過什么比較難的問題,怎么解決的

當(dāng)時我們做視頻會議SDK時,碰到一個挺頭疼的問題:App開千人大會的時候,入會特別慢(要十幾秒),還動不動就閃退。用低配iPhone的用戶經(jīng)常抱怨,一進(jìn)會議手機就發(fā)燙,甚至直接卡死。
后來經(jīng)過排查我發(fā)現(xiàn)主要問題是:入會時一次性加載太多東西,而且進(jìn)退會之后內(nèi)存沒有釋放完全,造成內(nèi)存暴漲APP閃退。
最終的解決方案是,修復(fù)了頁面加載機制,原來是按照入會人數(shù)創(chuàng)建視圖,后面創(chuàng)建了一個試圖控制的類,用一個數(shù)組來存儲一個對象,實現(xiàn)按需加載,最多只創(chuàng)建6個試圖,將入會時間縮短到2s內(nèi),另外關(guān)于內(nèi)存泄露的問題,根據(jù)xcode 工具,發(fā)現(xiàn)是很多循環(huán)引用的錯誤,采用weak strong關(guān)鍵字解決內(nèi)存泄漏問題,避免的APP的閃退

3,你覺得你的優(yōu)勢是什么

我認(rèn)為自己的優(yōu)勢有幾點,
第一,因為開發(fā)ios已經(jīng)多年,遇到過很多性能優(yōu)化和內(nèi)存泄漏方面的問題,所以對于這類問題的定位和解決有經(jīng)驗。
第二,常規(guī)任務(wù)完成迅速,在界面搭建上,寫過很多純代碼以及xib的操作,能夠快速響應(yīng)開發(fā)任務(wù)并且快速交付。
第三,獨立完成過多個項目,熟悉ios從開發(fā)到上架的全部流程
第四,樂于接受新事務(wù),能夠利用ai工具,例如gpt deepseek尋找解決問題的辦法
第五,對其他語言也有所接觸,能夠快速上手開發(fā)

4,你有研究過第三方庫的源碼嗎? 有什么收獲

我讀過一些第三方庫的源碼,印象比較深刻的是SDWebImage這個庫
其中印象深刻的是緩存管理這塊,iOS的緩存一般包括 內(nèi)存緩存和硬盤緩存兩方面
SD為減少網(wǎng)絡(luò)流量,下載完圖片后存儲到本地,下次再獲取同一張圖片時,直接從本地獲取,提升用戶體驗,能快速從本地獲取呈現(xiàn)給用戶。

SDWebImage的圖片緩存實現(xiàn)主要基于內(nèi)存和磁盤兩級緩存,結(jié)合高效的資源管理策略。具體實現(xiàn)可以分為以下幾個關(guān)鍵點:

內(nèi)存緩存(快速響應(yīng))

使用NSCache存儲最近訪問的圖片,它會在內(nèi)存不足時自動清理低頻數(shù)據(jù),避免應(yīng)用被系統(tǒng)終止。
通過URL生成唯一的哈希鍵(如MD5處理),以O(shè)(1)時間復(fù)雜度快速查找圖片,類似于字典的結(jié)構(gòu)。

磁盤緩存(持久化存儲)

圖片以文件形式存儲在Library/Caches目錄,文件名通過URL哈希處理,避免命名沖突。
根據(jù)圖片格式(如JPEG/PNG)選擇最優(yōu)壓縮方式存儲,減少磁盤占用。

多級緩存策略(高效查詢)
  • 查詢流程:先查內(nèi)存緩存 → 未命中則異步查磁盤 → 仍無數(shù)據(jù)才觸發(fā)網(wǎng)絡(luò)下載。
  • 淘汰機制:
    • 內(nèi)存緩存基于NSCache的LRU(最近最少使用)策略自動清理。
    • 磁盤緩存默認(rèn)7天有效期,并限制最大緩存容量,定期清理舊文件。
      防重復(fù)下載與線程安全

使用URLCallbacks字典記錄所有進(jìn)行中的下載任務(wù)。當(dāng)多個請求同一URL時,通過回調(diào)數(shù)組復(fù)用下載任務(wù),避免重復(fù)網(wǎng)絡(luò)請求。
通過GCD的屏障隊列(barrierQueue)保證對URLCallbacks的線程安全讀寫,確保多線程環(huán)境下不會出現(xiàn)競爭。

性能優(yōu)化細(xì)節(jié)

后臺解碼:下載完成后在子線程解碼圖片,避免主線程卡頓。
異步存儲:磁盤緩存寫入通過串行隊列異步執(zhí)行,不阻塞主線程。
靈活的緩存控制

通過SDWebImageOptions參數(shù)支持多種場景:

SDWebImageRefreshCached:強制跳過緩存重新下載(適用于圖片可能更新的場景)。
SDWebImageCacheMemoryOnly:僅使用內(nèi)存緩存(臨時數(shù)據(jù)避免磁盤占用)。
SDWebImageQueryDataWhenInMemory:內(nèi)存命中時仍校驗數(shù)據(jù)有效性(如ETag)。

5,你對性能優(yōu)化有什么想法

關(guān)于性能優(yōu)化,可以從5個方面入手,

  • cpu過載
    復(fù)雜的計算,大量的數(shù)據(jù)處理,同步任務(wù)的阻塞主線程造成過載,我們可以使用緩存和預(yù)處理等方式減少不必要的計算
  • GPU 過載
    高復(fù)雜的圖形操作,紋理資源過多,過度繪制等會造成GPU過載
    我們需要避免過度繪制,確保UI層次結(jié)構(gòu)簡單,減少復(fù)雜的圖形操作,優(yōu)化圖形資源的使用以及使用合適的圖形框架和技術(shù),比如metal和core aniamation ,提高渲染效率
  • 內(nèi)存壓力
    過多的內(nèi)存分配,內(nèi)存的釋放不及時,以及資源的泄漏等會造成內(nèi)存壓力,我們可以通過減少內(nèi)存的分配,及時釋放資源,使用autoreleasepool 控制內(nèi)存使用,避免內(nèi)存泄漏,確保圖形資源的的有效管理,避免不必要紋理和緩存
  • 主線程的阻塞
    長時間的同步任務(wù),網(wǎng)絡(luò)請求,文件的I/O 等造成過載主線程的阻塞,
    我們要避免在主線程進(jìn)行同步操作,比如網(wǎng)絡(luò)請求,文件的IO等,將主線程任務(wù)移動到后臺線程,使用GCD是處理異步任務(wù)等
  • 過度繪制
    復(fù)雜的視圖層級,冗余的UI元素等,錯誤的參數(shù)導(dǎo)致的沖突等會造成過度繪制,我們需要確保參數(shù)的合理,避免動畫時間過長或過短,避免動畫沖突,確保動畫的順序和邏輯,使用合適的動畫工具,如core Animaiton uikit 動畫等,確保動畫流暢
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1,對于OC的動態(tài)性你有什么理解 動態(tài)綁定在運行時而不是在編譯時確定方法的調(diào)用和函數(shù)的應(yīng)用,通過msg send ...
    Edviin_2de8閱讀 567評論 0 0
  • 200道常用的iOS題目[http://m.itdecent.cn/p/6b23e809e322?utm_c...
    白菜的大豬豬閱讀 533評論 1 3
  • redis支持的數(shù)據(jù)類型 string, hash, list, set, zset redis持久化 1.RDB...
    元氣蛋蛋閱讀 555評論 0 1
  • 1.document.write和innerHTML的區(qū)別; 答:document.write是直接寫入到頁面的內(nèi)...
    徐十八_MR閱讀 1,050評論 2 14
  • 共208道 一、Java 基礎(chǔ) 1.JDK 和 JRE 有什么區(qū)別? 2.== 和 equals 的區(qū)別是什么? ...
    行者_(dá)zm閱讀 159評論 0 0

友情鏈接更多精彩內(nèi)容