簡單易懂iOS大廠面試篇

来源:https://www.cnblogs.com/simplepp/archive/2020/04/22/12751989.html
-Advertisement-
Play Games

引言 目前經濟增速的放緩,到處都在鼓吹互聯網發展進入下半場。今年跳槽季的遭遇想必大家也是感受到了一絲寒意。筆者有一個朋友在阿裡工作,今年3月底開始請他幫忙內推,也許是阿裡的大前端戰略,也許真的是互聯網的寒意。對於一個三年的iOSer上海這邊一直沒有合適的崗位可推,即便是有也是招P7級別,統統被拒的命 ...


 

 

引言

目前經濟增速的放緩,到處都在鼓吹互聯網發展進入下半場。今年跳槽季的遭遇想必大家也是感受到了一絲寒意。筆者有一個朋友在阿裡工作,今年3月底開始請他幫忙內推,也許是阿裡的大前端戰略,也許真的是互聯網的寒意。對於一個三年的iOSer上海這邊一直沒有合適的崗位可推,即便是有也是招P7級別,統統被拒的命運。我也是放棄了希望,開始找其它渠道推銷自己,不過最終還是找到了心儀的工作,現在終於可以做一下總結了。

一、概述

前期面試還是很有激情的,每次面試完畢都會回憶並記錄,總結,再學習。其實這個過程也是一個非常有效的學習過程。不過代價有點大,你可能會失去一次機會。最好的方式,還是做好充足的準備。我在說什麼?好吧,好像是一些感慨之類的。能體會到的讀者,就請點個贊吧,哈哈!沒體會到的讀者就當沒看到吧,反正僅僅是感慨而已,哈哈嗝!

二、個人總結

1. 經歷總結

還是簡單再說下,這段時間的經歷吧。首先這段經歷是從老司機周報開始的,因為之前就和周報的峰哥有些聯繫,所以看到周報的內推時,也就自然而然的聯繫峰哥內推了。首先就是位元組跳動,不過簡歷篩選都沒通過。幫忙內推的曾鳴大佬說出了原因:

  1. 沒有大廠背景
  2. 不是985院校畢業(筆者本人211院校畢業)
  3. 簡歷沒有亮點

沒辦法,確實沒亮點。之後峰哥也是幫忙指導了簡歷,我也儘量按照STAR法則修改了簡歷,通過其他渠道投遞了位元組跳動不過也都沒有機會。可能是有失敗記錄,半年或三個月內都不能通過篩選了吧。後來掘金的內推群有位前百度、美團的現頭條大佬說他內推的成功率高,還不受之前簡歷鎖定影響,投遞之後仍然沒有消息。不過後來北京位元組跳動的HR聯繫了我,問我有沒有興趣去北京,我當即來了個沒興趣。通完電話才想到即便是不去也應該增加一下遠程面試經驗呀...這讓我想到之前看到的一篇文章說上海的位元組跳動比北京門檻高,現在來看確實如此了。

接下來就是阿裡的內推了。朋友在口碑做的前端,在連續一周多都沒有合適投遞崗位的情況下,朋友給我分析了一下原因。口碑大概有2000多人,前端有40~50人,iOS只有6個人。阿裡的大前端戰略和所謂的不裁人策略,也導致很多轉崗。所以阿裡目前在招的大多是P7級別的專家,又是一個無可奈何。

在這兩家開始遭遇不順時,我就已經開始了招聘網站的簡歷投遞。接下來就進入了面試,回憶記錄,總結,學習研究的輪迴,直到終於拿到了心儀的工作。

2. 知識總結

知識總結我是通過MindNode處理的,有些詳細,有些僅僅一提,但是都能從看到的知識點展開回答。每次看一遍內心就覆述一遍,基本都背下來了。當然這隻是部分知識,還有很多沒有總結,以後我也會繼續為它添磚加瓦的。如果有朋友想要加入的話我非常歡迎,大家也可以自己下載自行添加知識點。或者自己創建都行,我只是感覺以這種方式完善知識體系很不錯。當然這裡不能做詳細展開,所以最好也有適合自己的筆記總結。例如:我使用印象筆記收藏相關模塊的高質量文章作為相關知識點的擴展。

 

 

這裡放出源文件的地址:iOS面試,如果沒有安裝MindNode可以到應用商店安裝,或者這裡精品MAC應用分享(個人最愛)

關於演算法練習我們都會想到去LeetCode刷題。雖然LeetCode支持Swift答題,但是讓人不爽的是有些處理字元串的題,用Swift作答會超時,所以筆者在練習時主要使用C和Swift作答。有時也會使用OC先理清思路,再使用其他語言進行作答。畢竟有些題需要邊寫邊想,還有些需要進行調試才行。所以這也是用Playground不方便的地方,它不能進行斷點調試。有了這些前提我就在想怎麼才能使用現在工具,更好的進行演算法題的練習呢?我想到了Xcode的單元測試,我們知道在繼承自XCTestCase的類中實現以test為首碼的方法時,該方法前會生成一個菱形指示符,滑鼠置於其上時會顯示運行按鈕,我們就可以通過該按鈕運行測試用例,同時還支持斷點調試。例如下圖中的判斷是否為迴文數一題:

 

需要使用Swift解答也採用同樣的策略,就個人來說,這麼練題實在是太爽了(LeetCode)。

當然完善知識體系看書也是必須的,例如圖解HTTP、劍指offer、Effective Objective-C 2.0、Objective-C高級編程等大家都推薦到爛的書都是必須的,但是技術也是有時效性的。所以例如高級編程中的一些知識,就需要在它指導的思想上實踐出目前的實現原理。

所以請記住兩點:基礎一定要扎實,原理一定要理解。

三、面試題

接下來貼出一些面試題,前面也說道前期很認真的記錄,學習。面了一段時間這些問題很熟悉了,也就沒有詳細記錄了。大家瞭解一下主要方向就可以了,畢竟很多問題會從你的簡歷中提問:

  • 小莫運動

    • 項目經歷
    • 試題
    • 遞歸反轉字元串
    - (void)testReserveStr {
        NSLog(@"--%@", [self func:@"Antyum"]);
    }
    
    - (NSString *)func:(NSString *)str {
        return str.length ? [NSString stringWithFormat:@"%@%@",[self func:[str substringFromIndex:1]],[str substringToIndex:1]] : @"";
    }
    
    
    • 快排過程描述和時間複雜度
    • weak用法,以及不採用時產生的問題
    • notification,delegate,block的區別
    • ...
  • 小紅書

    • 電話

    • 說一下你做過的東西

    • 對鏈表和數組的認識,應用場景

    • weak和assign的區別

    • assign可以修飾OC對象嗎

    • weak置為nil是如何實現的

    • GCD中的Block用到的屬性是否需要__weak修飾

    • Block中對數組增刪怎麼操作

    • +load和+initilaze在分類,父類,子類和main函數的調用順序

      +load載入順序:父類,子類,分類。如果多個分類會按照PBXSourcesBuildPhase中順序逐個調用。
      main()
      +initialize載入順序:首先有分類時,最後被load的分類會覆蓋類的該方法。然後先父類,再子類,直到第一次被調用的類。

    • 為什麼要把+load中的邏輯放到+initilize

    • ...

  • 浦發

    • 單例的實現方式,還有其他方式嗎
    • abc三個任務,執行完刷新UI,怎麼處理?除了你說的group還有其他方式嗎
    • 單行多個Label,中間可壓縮,怎麼添加約束
    • 輪播圖實現要點
    • 定時器什麼時候銷毀,一些通知,KVO放在哪裡銷毀
    • 看過哪些第三方框架,AF2和3有什麼區別
    • 離屏渲染底層角度
    • 如何讓Cell中的Button被點擊時同時響應
    • ...
  • 愛回收

    • KVO底層實現
    • GCD相關,NSOperation相關
    • OSI七層協議,TCP/IP協議簇四層模型,每層的協議,Http相關
    • HEAD請求作用
    • 項目相關
    • 講一講響應者鏈條,如何處理點擊範圍和響應的兩個方法分別是
    • weak如何自動置為nil
    • 屬性關鍵字
    • 如何處理迴圈引用
    • 對runtime的認識
    • 鏈表成環判斷
    • 二叉搜索樹
    • 關聯對象原理
    • 方法交換原理
    • 你博客中挑一篇主要寫了什麼
    • 值類型和引用類型,和swift中它們的應用
    • json支持的類型
    類型描述
    數字型(Number) JavaScript 中的雙精度浮點型格式
    字元串型(String) 雙引號包裹的 Unicode 字元和反斜杠轉義字元
    布爾型(Boolean) true 或 false
    數組(Array) 有序的值序列
    值(Value) 可以是字元串,數字,true 或 false,null 等等
    對象(Object) 無序的鍵:值對集合
    空格(Whitespace) 可用於任意符號對之間
    null
    • 如何一次連接多個請求
    • ...
  • 京東

    • weak如何自動置為nil
    • 屬性關鍵字
    • 可變對象copy
    • 項目相關
    • OC中用到的設計模式
    • 三種Block
    • 通知,代理,block的應用場景
    • MVVM的認識
    • KVO的實現原理,被創建內部類有什麼特點
    • 項目中遇到的印象最深的問題
    • 如何對一個微信聊天界面分工
    • 微信語音轉文字如何實現的
    • 項目中提到的支持核心動畫如何實現的
    • 單例模式
    • 應用埋點
    • 控制器生命周期
    • ...
  • 攜程

    • 電話
    • KVO與autoreleasepool
    • 深淺copy
    • 屬性關鍵字
    • ...
  • 匯正財經

    • oc的反射機制
    • 面向對象的特征
    • block和delegate的區別
    • NSString的copy和strong屬性關鍵字的影響
    • NSOperation和GCD的區別
    • runloop
    • weak和assign的區別
    • ...
  • 攜程

    • KVO的底層
    • KVC的認識
    • oc中記憶體的分配
    • weak置nil的實現
    • 深淺copy
    • runtime的認識
    • 消息轉發的認識
    • 消息轉發的應用
    • 事件鏈的認識
    • 離屏渲染問題
    • 設計模式的認識
    • 同一行lable左右約束佈局問題
    • 設計架構的應用
    • 深度優先和廣度優先
    • (簡歷中有寫道)XMPP的認識
    • 謂詞的認識
    • UICollectionView的應用
    • ...

四、面試套路

關於面試套路,我這邊沒有特別多的方法。目前主要有一個方法吧,化被動為主動。這個怎麼講呢?首先我們看一下下麵的自我介紹:

  • 我叫xx,16年畢業於xx大學計科專業。上大學時就已經開始自學iOS了,到現在也已經工作三年了,一直都是從事的iOS開發工作。16年3月份加入一家2C的創業公司,主要學習研究了UI的處理。17年加入目前2B的做企業服務公司,主要學習研究了架構,設計模式,記憶體管理這些東西。目前我主要在探索OC的一些設計實現的原理,在學習的過程中發現網上,很多文章對一些知識的認識都是錯誤的。等忙完這段時間面試,我就要發幾篇文章來指正一下這些問題。

幾乎所有聽完這個自我介紹的面試問題都是:那你說的那些認識錯誤的問題都有哪些呢?這時就是你主動表現你深入研究過知識點的時候了。
當你被問到一個不會的問題時,不要含糊回答,直接說明你對這個問題認識不深,或者不太清楚。但是我知道...(回答與之相關的知識)
再有可以思考幾個常用問題,例如:你認為工作中遇到過印象最深的問題?你還有哪些可以介紹的亮點?你有什麼問題想問我嗎?這些問題幾乎每次都會被問到,提前思考主動準備還是非常有必要的。

更多的關於這方面的總結推薦大家可以看下麵兩篇文章:
百度/阿裡/網易 iOS 面經(已入職)
大三iOSer春招總結(騰訊螞蟻頭條京東網易)

結語

文章寫到這裡也就到了該結束的時候了,總之一句話機會留給有準備的人。面試題持續整理更新中,需要拿到第一手大廠面試題及答案文檔可以加入iOS技術交流群,群號:789143298 !結實人脈、討論技術你想要的這裡都有!

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

-Advertisement-
Play Games
更多相關文章
  • 今天分享一個如何把name和model的值一起顯示 name的值是(棉線,網布,蕾絲等) model的值是(A21-4321,12343,B123a等) 1 select concat(Name,Model)as ss from jsh_material 運行結果: ...
  • 原因: pymysql在連接資料庫的時候會有一個參數autocommit,表示執行完SQL語句是否自動提交到真正的資料庫,預設為False,不自動提交,所以執行SQL語句後提示成功,但實際沒有操作資料庫。 解決: 方法一:創建資料庫連接對象時設置autocommit=True 1 message = ...
  • 1.概念名稱及含義channel 頻道:生產者和消費者直接操作的對象publish 生產者:向channel發送消息subscribe 消費者:訂閱一個或多個channelpsubscribe 消費者:匹配訂閱一個或多個channelpunsubscribe 退訂:匹配退訂,無參數則退訂全部chan ...
  • NVL(exp1,exp2)函數時判斷判斷某個值是否為null。若為null,則返回exp2,否則返回exp1 格式1 select nvl(exp1,exp2) from db_table 例子 select monthid,decode(nvl(sale,6000),6000,'NG','OK' ...
  • 前言: 最近也在玩資料庫,感覺普通機子搞資料庫,還是差了點,全文查找,慢的要查一分鐘更久。 但是搞cmd5庫很不錯,億級資料庫,毫秒級。 qq 944520563好吧,下麵開始,首先你得需要一個mysql資料庫,推薦 環境 : apmserv5.2.6 php+mysql Navicat for M ...
  • # Android Sugar ORM (2) ### Android Sugar ORM 實體 #### 1. 創建一個實體類 `Sugar ORM`在創建一個實體的時候, 僅需要使這個實體類繼承於`SugarRecord`即可 ```java public class Book extends ... ...
  • 很簡單,只需要新建一個 drawable 文件 效果概念拓展stroke 是用來處理邊框的,可以修改邊框粗細 和 顏色等等; corners 可以設置邊框的圓角顯示,也可以只是設置某一個圓角; android:bottomLeftRadius -> 設置左下圓角; android:bottomRig... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...