最近換工作,面試了好幾家公司,終于拿到了滿意的offer,可惜進不了大廠,還需繼續努力。通過這次面試發現了太多的不足,基礎知識不夠扎實,只知道用,不知其原理,所以面試的時候都沒怎么發揮好。以后將重新學習iOS知識,建立自己的知識體系,提升自己的iOS技術,通過簡書來多總結自己的知識點,跟大家一起交流。并搭建了自己的個人博客?http://www.gzcopyright.cn/?。先來總結下這次面試中被問到的知識點,答案以后再慢慢補充。
項目相關
1.你覺得自己做的最滿意的APP是哪一個,亮點在哪里。
2.你在項目中擔任的角色是什么。
3.一個新的APP從0到1是怎么架構的,為什么要這樣做,說下MVC與MVVM。
4.如果讓你封裝一個網絡框架,你會怎么封裝,要考慮哪些方面。
5.怎么重構一個項目。
6.對APP做過哪些性能優化,怎么優化安裝包的大小。
7.什么是冷啟動,什么是熱啟動。
8.開發的時候碰到過什么問題讓你印象最深刻,你是怎么解決的,是怎么想到這解決文案的。
9.APP比較耗電是由于哪些因素引起的,怎么進行優化。
10.對小組成員是怎么分工的,怎么能保證分配的任務在規定時間內完成。
11.你是通過什么方式管理小組成員的,怎么挖掘他們的優點。
12.如果小組成員的技術比你好,然后又不太好管理,你該怎么做。
13.你自己做過什么好玩的APP。
14.怎么收集crash信息,哪些情況會出現crash,怎么減少程序的崩潰率。
15.出現卡頓怎么優化,有沒有做過卡頓監聽。
16.APP中有沒有進行日志收集。是怎么進行收集的,收集后通過什么規則來傳送的。
17.APP中有很多操作點擊后需要判斷是否登錄,你是怎么做的,有沒有什么更好的方案。
18.有沒有做過組件化,實現組件化有哪些方式。
19.做了這么久多年的開發,ios有哪些變化
20.RN/weex/小程序這些有什么區別。
21.有沒有學過flutter。他與RN又有什么區別,你怎么看待RN與flutter,如果讓你選擇其中一個進行開發,你會怎么去選擇。
22.你當時為什么選騰訊云的直播SDK,有沒有對比過其它廠家的,主要是通過哪方面進行對比。
23.你會那么多語言,你是怎么學習的,你覺得你的學習方法可以嗎。
24.做直播的時候你碰到過哪些問題,是怎么解決的。有沒有深入了解過推流、拉流、編碼、解碼。碼率是什么。
25.IM實現原理,用的是什么通信協議,如果讓你自己實現即時聊天,你會怎么做。
26.用過哪些開源框架,除了這些很常用的,還用過哪些。
27.看過哪些開源代碼,分別講下核心思想,SDWebImage框架實現原理是怎么樣的,本地緩存的圖片到期后是怎么自動清除的。
28.用過哪些設計模式,畫一個工廠模式的UML圖。
29.一個西瓜,只用3刀怎么切成8塊。
基礎知識
1.如果讓自己實現一個weak怎么實現
2.說下深拷貝淺拷貝
3.NSString定義的屬性為什么要使用copy。
OC跟C語言是什么區別,說下你對面向對象與面向過程的理解
4.C語言是一門動態的函數式語言,你覺得這話正確嗎
5.OC可以實現多繼承嗎。
6.KVC與KVO用的多嗎,實現原理是怎樣的。
7.Block實現原理。
8.delegate實現原理。
9.runloop實現原理,runloop能解決哪些問題。
10.分類有哪些用途,跟繼承有什么區別。分類實現原理。如果方法名相同,會調用哪個方法。
11.說一下你對CALayer的認識,他與UIView有什么區別。
12.講一下事件響應的過程,重點描述下事件響應鏈。事件響應傳遞的順序。怎么擴大一個按鈕的點擊范圍。
13.self與super的區別
14.怎么在block中修改一個變量的值,為什么要這么做。
15.UIWebView怎么跟原生進行交互,cookie怎么緩存,碰到過什么難點
16.WKWebView碰到過哪些坑,怎么解決的,有沒有用過JS注入。
17.UIWebView與OC進行交互是同步還是異步的。
18.通知和代理有什么區別。
19.用通知要注意什么。
20.block與delegate的區別。
21.APP中常用的數據存儲方式有哪些。
22.數據庫存儲文案你用的是fmdb還coredata。有沒有看過FMDB的源碼,是怎么進行多線程操作的。
23.你是怎么設計表的。設計表的三范式是什么。
24.runtime實現原理,你有沒有看過runtime的源碼。
25.你用runtime實現過哪些功能。
26.什么是元類。
27.oc中調用方式是怎么實現的,消息轉發機制是怎樣的流程。
數據結構與算法
1.數據結構的存儲一般常用的有幾種?各有什么特點?
2.怎么往鏈表的第N個結點添加一條數據。
3.數組與鏈表的區別。
4.什么是堆,什么是棧,什么是隊列。
5.分別講下時間復雜度和空間復雜度。
6.常用的排序算法有哪些,你用過哪些算法。
7.給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數
8.怎么快速寫入一個100M的文件。
9.怎么查找兩個子視圖的共同父視圖
多線程
1.ios中多線程實現方式有哪些,各有什么優點和缺點,你用哪個用的多。
2.ios中怎么做線程同步。
3.分別講一下進程與線線程。
使用多線程有什么優點和缺點。
4.為什么只能在主線程中更新UI。
5.多線程的并發與并行有什么區別,并發你用在哪些場景。
6.GCD中的信號量有沒有用過,用在哪些場景。
7.產生死鎖的必要條件。
8.怎么實現線程常駐。
9.如何實現一個線程安全的 NSMutableArray。
10.什么是自旋鎖,什么是互斥鎖。
11.使用多線程要注意哪些。
12.runloop與多線程的關系。
13.runloop實現原理及應用場景。
內存管理
1.iOS的內存管理方式
2.ARC與java中的垃圾回收有什么區別
3.怎么避免循環引用
4.retain與release的實現機制
5.說一下iOS中的自動釋放池,自動釋放池實現原理。
6.runloop中有用到自動釋放池嗎。
7.ARC在運行時和編譯時分別做了什么
8.什么是野指針。
9.你是怎么進行內存優化的。在 Obj-C 中,如何檢測內存泄漏?你知道哪些方式?
10.autoReleasePool?什么時候釋放?
11.內存中的5大區分別是什么。
網絡
1.從發送一個請求,到響應,中途經歷了什么,是怎么完成一個網絡請求流程的。
2.簡述?SSL?加密的過程用了哪些加密方法,為何這么作?
3.講一下三次握手與4次揮手,為什么握手是3次,揮手是4次。
4.網絡7層協議是哪幾層,每一次的用途。
5.get與post的區別,put與post的區別
6.TCP和UDP的區別
7.有沒有用過socket,說下實現原理。
8.DNS是什么,DNS解析過程是怎么樣的。
9.你用什么工具進行抓包,原理是什么,如果讓你自己寫個抓包工具怎么做。
10.怎么對網絡數據進行緩存
11.AFNetworking 底層原理分析
12.實際開發項目中,經常用到的網絡請求有哪些呢?
13.發起網絡請求后,怎么取消。如果沒請求完就退出界面,要怎么處理。
14.http與https的區別,為什么https更安全
15.詳細描述一下你對ipv4與ipv6的理解