送給非科班iOS開發,一份面試題(附答案)

来源:https://www.cnblogs.com/IOSkf/archive/2020/07/06/13255319.html
-Advertisement-
Play Games

iOS行業在經歷了過去幾年的爆發期後,現在到了一個相對冷靜的時期,一個良幣驅逐劣幣、去偽存真的階段。只有持續的專註和付出,才能夠在激烈的競爭中脫穎而出,成為強者。正如狄更斯所言,“這是一個最壞的時代,也是最好的時代” 。 對於這些面試題,不要死記硬背,應該舉一反三,深刻理解實現機制(這也是科班和非科 ...


iOS行業在經歷了過去幾年的爆發期後,現在到了一個相對冷靜的時期,一個良幣驅逐劣幣、去偽存真的階段。只有持續的專註和付出,才能夠在激烈的競爭中脫穎而出,成為強者。正如狄更斯所言,“這是一個最壞的時代,也是最好的時代” 

對於這些面試題,不要死記硬背,應該舉一反三,深刻理解實現機制(這也是科班和非科班的區別之一)。面試題答案只是參考,如有錯誤請指正。

如果讓你實現屬性的weak,如何實現的?

runtime對註冊的類會進行佈局,對於weak修飾的對象會放入一個hash表中。用weak指向的對象記憶體地址作為key,當此對象的引用計數為0的時候會dealloc,假如weak指向的對象記憶體地址是a,那麼就會以a為鍵在這個weak表中搜索,找到所有以a為鍵的weak對象,從而設置為nil

如果讓你來實現屬性的atomic,如何實現?

- (void)setCurrentImage:(UIImage *)currentImage
{
    @synchronized(self) {
        if (_currentImage != currentImage) {
            [_currentImage release];
            _currentImage = [currentImage retain];
            // do something
        }
    }
}
- (UIImage *)currentImage
{
    @synchronized(self) {
        return _currentImage;
    }
}

KVO為什麼要創建一個子類來實現?

Runtime動態生成一個NSKVONotifying_Class子類,可以動態地添加willChangeValueForKeydidChangeValueForKey觀察所有屬性的變化

類結構體的組成,isa指針指向了什麼?(這裡應該將元類和根元類也說一下)

isa:是一個Class 類型的指針. 每個實例對象有個isa的指針,他指向對象的類,而Class里也有個isa的指針, 指向meteClass(元類)。元類保存了類方法的列表。當類方法被調用時,先會從本身查找類方法的實現,如果沒有,元類會向他父類查找該方法。同時註意的是:元類(meteClass)也是類,它也是對象。元類也有isa指針,它的isa指針最終指向的是一個根元類(root meteClass).根元類的isa指針指向本身,這樣形成了一個封閉的內迴圈。

  image

RunLoop有幾種事件源?有幾種模式?

Runloop(消息迴圈)的目的:

 1\.    基本作用:保持程式的持續運行,保證程式不退出
 2\.    處理App中的各種事件(比如觸摸事件,定時器事件,Selector事件)
 3\.    節省CPU資源,提高程式性能:該做事時做事,該休息是休息

  • 事件源:輸入源和定時源
  • 模式:有4種模式 第一種就是預設模式: 也就是一般的方法調用使用的模式。第二種就是跟蹤模式: 用於scrollview追蹤觸摸滑動, 使其不受其他模式的影響, 可以共存。 第三種就是當程式啟動時第一次開啟的運行迴圈模式。第四種的話一般開發中沒聽到過。沒有去研究過。其實還有一種占位模式。不過沒什麼太大用處。

方法列表的數據結構是什麼?

struct objc_method_list
{
  struct objc_method_list*  method_next; /* 這個變數用來鏈接另一個單獨的方法鏈表 */
  int            method_count;            /* 結構中定義的方法數量 */
  struct objc_method method_list[1];      /* 可變長度的結構 */
};

分類是如何實現的?它為什麼會覆蓋掉原來的方法?

因為分類方法加入類中這一操作是在運行期系統載入分類時完成的,運行期系統會把分類中所實現的每一個方法都加入類的方法列表中

  • category的實例方法、協議以及屬性添加到類上
  • category的類方法和協議添加到類的metaclass上

category的方法被放到了新方法列表的前面,而原來類的方法被放到了新方法列表的後面,所以category的方法會“覆蓋”掉原來類的同名方法。

希望我所分享的經驗能對您有所幫助,也希望您終能如願以償進入心儀的企業工作。

結交人脈

最後推薦個我的高級iOS交流群:1001906160 ,有一個共同的圈子很重要,結識人脈!裡面都是iOS開發,全棧發展,歡迎入駐,共同進步!(群內會免費提供一些群主收藏的免費學習書籍資料以及整理好的幾百道面試題和答案文檔!)


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

-Advertisement-
Play Games
更多相關文章
  • Spark 分組取Top N運算 大數據處理中,對數據分組後,取TopN是非常常見的運算。 下麵我們以一個例子來展示spark如何進行分組取Top的運算。 1、RDD方法分組取TopN from pyspark import SparkContext sc = SparkContext() 準備數據 ...
  • MySQL實驗 內連接優化order by+limit 以及添加索引再次改進 在進行子查詢優化雙參數limit時我萌生了測試更加符合實際生產需要的ORDER BY + LIMIT的想法,或許我們也可以對ORDER BY + LIMIT 也進行適當優化 實驗準備 使用MySQL官方的大資料庫emplo ...
  • MySQL實驗 子查詢優化雙參數limit 沒想到雙參數limit還有優化的餘地,為了親眼見到,今天來親自實驗一下。 實驗準備 使用MySQL官方的大資料庫employees進行實驗,導入該示例庫見此 準備使用其中的employees表,先查看一下表結構和表內的記錄數量 mysql> desc em ...
  • mariadb的主從複製集群,預設情況下是把主庫上的所有庫進行複製,只要在主庫上產生寫操作,從庫基於主庫的二進位日誌做重放,從而實現把主庫的上的庫表複製到從庫;複製過濾器指的是我們僅複製一個或幾個資料庫相關的數據,而非所有;過濾器的作用就是來定義我們要複製那些庫,那些表,這種定義過濾器的方式叫白名... ...
  • SQL語言大致分為`DCL`、`DDL`、`DML`三種,本文主要介紹`MySQL 5.7`版本的`DCL`語句。 ...
  • 本文更新於2019-06-23,使用MySQL 5.7,操作系統為Deepin 15.4。 SQL語句 創建存儲過程或函數 創建存儲過程: CREATE PROCEDURE name ({[IN|OUT|INOUT] param type}[, ...]) [characteristic] body ...
  • 一、跨程式發送廣播 廣播是一種可以跨進程的通信方式; 我們來寫一個發送有序廣播的項目 首先先建立一個BroadcastTest3項目 然後寫一個接收廣播的類,繼承自BroadcastReceiver package com.example.broadcasttest3; import android ...
  • 如果在提交APPStore的時候,提交了加急,如果被拒了,還需要再提交加急嗎?答案:不需要。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...