通用必備基礎(chǔ)知識(shí)
- 拋開iOS 開發(fā)這一項(xiàng)技能,我們最基礎(chǔ)的本質(zhì)還是一名軟件開發(fā)工程師材诽,所以基礎(chǔ)的部分必不可少底挫,本篇面經(jīng)中,不會(huì)具體總結(jié)出每個(gè)公司每一面具體考的內(nèi)容脸侥,而是會(huì)根據(jù)不同的知識(shí)點(diǎn)將面試真題分為不同的專題部分來具體分析建邓。
計(jì)算機(jī)網(wǎng)絡(luò)
對(duì)于大前端類,計(jì)算機(jī)網(wǎng)絡(luò)主要考量的還是傳輸層和應(yīng)用層部分的知識(shí)睁枕。
瀏覽器輸入url到網(wǎng)頁(yè)顯示經(jīng)歷了什么過程?
TCP三次握手:具體是怎么握手官边?為什么要三次握手沸手??jī)纱涡胁恍校繛槭裁床恍凶⒉荆咳挝帐止薨保诙魏偷谌畏謩e因?yàn)槭裁?
TCP是如何保持可靠傳輸?shù)模〒砣刂疲龁?dòng)等等概念的理解)
TCP為什么要四次揮手滩援,TIME_WAIT為什么至少設(shè)置兩倍的MSL時(shí)間栅隐?
TCP三次握手的詳細(xì)數(shù)據(jù)傳遞,四次揮手詳細(xì)數(shù)據(jù)內(nèi)容玩徊,數(shù)據(jù)包組成租悄、TIME_WAIT狀態(tài),2MSL恩袱,RTT泣棋,重傳、滑動(dòng)窗口畔塔、擁塞原理等等
TCP潭辈、UDP面向連接、無(wú)連接具體理解澈吨,他們的區(qū)別把敢,如何將 UDP 改造成和 TCP 功能相似
TCP/IP四層協(xié)議,OSI七層協(xié)議谅辣,每層都有啥對(duì)應(yīng)的協(xié)議修赞,原理是啥
http報(bào)文結(jié)構(gòu),http中超文本超是啥意思桑阶,http請(qǐng)求的組成
http 報(bào)文頭部含有什么柏副,multipart了解嗎
http的狀態(tài)碼,200蚣录,304割择,301,http請(qǐng)求報(bào)文萎河,響應(yīng)報(bào)文
get和post請(qǐng)求的區(qū)別荔泳?什么情況下用到?POST傳輸?shù)臄?shù)據(jù)都有哪些格式呢(這里需要搞定http各種請(qǐng)求傳輸?shù)臄?shù)據(jù)格式)
描述一次完整的http請(qǐng)求
什么是cookie公壤,什么是session换可,區(qū)別聯(lián)系,cookie的本質(zhì)是什么
http1.0厦幅,1.1沾鳄,2.0的區(qū)別
https有幾次握手和揮手?https的原理确憨。http有幾次揮手和握手译荞?TLS在哪一網(wǎng)絡(luò)層瓤的,基本原理是什么?
https與中間人攻擊
HTTPS吞歼,安全層除了SSL還有圈膏,最新的? 參數(shù)握手時(shí)首先客戶端要發(fā)什么額外參數(shù)
HTTPS是什么篙骡?握手過程稽坤,SSL原理,非對(duì)稱加密了解多少
證書是干什么用的
算法
劍指 offer 上面的題目都是面試過程中的算法高頻題糯俗,特別是二叉樹和字符串尿褪,棧隊(duì)列,鏈表得湘,跳臺(tái)階問題一定要弄懂并且熟練杖玲。
八大排序算法的復(fù)雜度,概念淘正,最好最壞情況摆马,手寫都是必須要掌握的,其中的重點(diǎn)是快排和堆排序鸿吆,對(duì)于快排的優(yōu)化囤采,快排的基礎(chǔ)原理,系統(tǒng) API 快排的實(shí)現(xiàn)原理等都是必須要掌握的基礎(chǔ)知識(shí)伞剑。
二分查找在面試過程中也比較常見斑唬,因?yàn)楸容^簡(jiǎn)單,包括二分查找的變種黎泣。
二叉樹的前中后序的遞歸與非遞歸遍歷方式,以及層序遍歷和蛇形遍歷都是重點(diǎn)缤谎。
海量數(shù)據(jù)如何找到重復(fù)次數(shù)最多的那個(gè) 優(yōu)化
海量數(shù)據(jù)抒倚,但是都是1~100之間的,如何找到重復(fù)次數(shù)最多的那個(gè)
面試算法題一般不難坷澡,掌握技巧很重要托呕。二叉樹相關(guān)的算法題基本都要往二叉樹的遍歷上靠,鏈表相關(guān)的算法題基本都要往額外的“幫助指針”上面靠频敛。
數(shù)據(jù)結(jié)構(gòu)
- 在面試過程中這一類主要是和算法來一起考项郊,數(shù)據(jù)結(jié)構(gòu)一般主要會(huì)問棧與堆的區(qū)別,棧與隊(duì)列的區(qū)別等等斟赚,在前端的面試中着降,紅黑樹這類的很少被問到。
編譯原理
- 主要需要了解程序的編譯過程的基礎(chǔ)概念就OK拗军。
操作系統(tǒng)
操作系統(tǒng)老生常談的就是進(jìn)程任洞,線程的概念和區(qū)別蓄喇,幾個(gè)狀態(tài),以及他們的調(diào)度方式交掏,通信方式妆偏,保持安全等等知識(shí)點(diǎn),基本面試都會(huì)被考到一點(diǎn)盅弛,這一部分需要牢牢掌握钱骂,實(shí)在理解不了就背下來。
說說遞歸和普通的循環(huán)方式有什么區(qū)別
計(jì)算機(jī)存儲(chǔ)系統(tǒng)是指挪鹏?哪些存儲(chǔ)系統(tǒng)能提高程序執(zhí)行的效率见秽?
段錯(cuò)誤和棧溢出分別在什么時(shí)候會(huì)出現(xiàn),為什么
其他方面的包括頁(yè)置換等等基礎(chǔ)知識(shí)狰住,知道概念就OK张吉,在前端面試過程中這部分不是特別重點(diǎn)考量的點(diǎn)。
數(shù)據(jù)庫(kù)
- 數(shù)據(jù)庫(kù)這部分也比較簡(jiǎn)單催植,主要就是 ACID 等基礎(chǔ)概念肮蛹,幾大范式,簡(jiǎn)單的 sql 語(yǔ)句创南。
設(shè)計(jì)模式
工廠方法伦忠,抽象工廠,簡(jiǎn)單工廠的區(qū)別和聯(lián)系
裝飾者
觀察者
代理模式等等
概率論
三門問題
紅黑球等等常見問題百度即可
Linux
- 主要包括基本的 shell 編程稿辙,基本的腳本命令昆码,重點(diǎn)是 grep,ps邻储,top赋咽,free等
版本控制
版本控制主要包括 Git 和 SVN
git 的基礎(chǔ)概念,基本命令吨娜,包括 merge 和 rebase 的區(qū)別等脓匿。
Git 和 SVN 的區(qū)別,異同點(diǎn)
平時(shí)開發(fā)中宦赠,版本控制的流程是怎么樣的
通用語(yǔ)言基礎(chǔ)
面向?qū)ο蟮亩鄳B(tài)陪毡。多態(tài)的幾種方式
各個(gè)語(yǔ)言中的單例模式
內(nèi)存管理方式
static 和 const 的作用和區(qū)別
C 語(yǔ)言的內(nèi)存分段
iOS專業(yè)知識(shí)點(diǎn)
- iOS 的面試過程中,雖然知識(shí)點(diǎn)很多很雜勾扭,但是老生常談的還是那些比較陳舊的知識(shí)毡琉,只要對(duì)他們有較好的理解,通過面試一般不成問題妙色。
內(nèi)存管理
ARC 和 MRC 的區(qū)別
屬性的關(guān)鍵字桅滋,他們具體的底層實(shí)現(xiàn)以及區(qū)別,被問爛的知識(shí)點(diǎn)包括 copy燎斩, 淺拷貝和深拷貝的區(qū)別虱歪, weak 的底層實(shí)現(xiàn)蜂绎。稍微新穎一點(diǎn)的 assgin 和 weak,unsafe_unretained 具體有什么區(qū)別笋鄙,assgin是否可以用來修飾對(duì)象师枣。這一部分是面試必問,一定要弄懂萧落。
Autorelease pool的底層實(shí)現(xiàn)原理践美,與 Runloop 的關(guān)系, autoreleasing 關(guān)鍵字找岖。
Block
本質(zhì)陨倡,基礎(chǔ)概念
使用時(shí)要注意的地方
block的實(shí)現(xiàn),如何截獲自動(dòng)變量的许布,如何修改自動(dòng)變量的值的兴革,block的幾種形式
__block的本質(zhì)
forwarding 指針
block怎么避免循環(huán)引用。是不是所有的block都會(huì)產(chǎn)生循環(huán)引用蜜唾,block里面怎么避免被提前釋放
多線程
iOS 中多線程的幾種方式杂曲,區(qū)別,使用場(chǎng)景袁余,基本概念擎勘,同步異步,串行并行的區(qū)別颖榜。
GCD棚饵,寫一個(gè)死鎖,并行和串行隊(duì)列掩完,同步和異步的區(qū)別噪漾,GCD怎么控制最大并發(fā)數(shù)
怎么讓子線程定時(shí)執(zhí)行一個(gè)方法,具體的實(shí)現(xiàn)方法
如何控制線程的最大并發(fā)數(shù)為10且蓬,然后加載十個(gè)圖片最后展示出來怪与,具體方法
子線程的runloop是怎么執(zhí)行的,它里面的 autoreleasepool 是怎么執(zhí)行的缅疟。
NSMutableArray 怎么保證線程安全的。
GCD怎么避免block中的變量被提前釋放
Runtime
消息的動(dòng)態(tài)轉(zhuǎn)發(fā)
給 Category 添加屬性遍愿,關(guān)聯(lián)對(duì)象都有幾種形式
method swizzling
說一說類的結(jié)構(gòu)存淫,運(yùn)行時(shí)中的class都有什么屬性,property都有什么屬性
說一說isa指到NSObject的那個(gè)過程
Category的本質(zhì)沼填,load方法什么時(shí)候加載桅咆,Category重寫了父類的方法會(huì)怎樣,底層源碼 坞笙,如果兩個(gè)Category和一個(gè)基類岩饼,都有同名方法荚虚,先執(zhí)行哪個(gè)
property會(huì)自動(dòng)生成什么,如果此時(shí)已經(jīng)有下劃線_name的實(shí)例變量了那會(huì)生成什么
load 和 initialize
Runloop
runloop實(shí)現(xiàn)原理
source 類型
線程奔耄活的方式
runloop和多線程的關(guān)系版述,以及timer的關(guān)系
第三方庫(kù)的源碼
AFNetWorking, SDWebImage寞冯,YYModel 都是非常常見渴析,基本面試必問
舉例:SDWebImage懟源碼,實(shí)現(xiàn)原理吮龄,如果正在請(qǐng)求一個(gè)地址的圖片俭茧,這個(gè)時(shí)候又同時(shí)另一個(gè)請(qǐng)求,這個(gè)時(shí)候會(huì)再發(fā)送一個(gè)請(qǐng)求嗎漓帚?
如何自己實(shí)現(xiàn)一個(gè) YYModel母债,具體使用的方法,延伸到 runtime 的源碼
生命周期
app 的生命周期
控制器的生命周期
視圖的生命周期
UI
UICollectionView 瀑布流
UITableView 相關(guān)的優(yōu)化尝抖,底層原理等
頁(yè)面布局
layoutSubViews 和 drawInRect 等的區(qū)別
自己實(shí)現(xiàn)一個(gè) UIScrollView
事件的傳遞鏈和響應(yīng)鏈
界面非痴泵牵卡頓怎么定位到具體的類和方法
UIView和CALayer區(qū)別
數(shù)據(jù)存儲(chǔ)
- 數(shù)據(jù)持久化都有什么,用過什么牵署,歸檔漏隐,偏好設(shè)置都可以存儲(chǔ)什么樣的類型
架構(gòu)
MVC,MVVM等奴迅,他們的區(qū)別和聯(lián)系青责,優(yōu)缺點(diǎn)
從 0 到 1 實(shí)現(xiàn)一個(gè) app 的思路
對(duì)于項(xiàng)目從 main 函數(shù)執(zhí)行之前到之后啟動(dòng)優(yōu)化,卡頓優(yōu)化和界面優(yōu)化取具。
OC 語(yǔ)言特性
OC 與 C 的區(qū)別脖隶, OC 與 Java, C++ 的區(qū)別暇检。
iOS中的協(xié)議
OC 動(dòng)態(tài)性
C語(yǔ)言如何動(dòng)態(tài)的交換兩個(gè)方法的實(shí)現(xiàn)
其他
KVO 的底層原理产阱,自己實(shí)現(xiàn)
KVC 的底層原理,自己實(shí)現(xiàn)
NSNotificationCenter 的底層原理块仆,是同步還是異步构蹬,如何實(shí)現(xiàn)一個(gè),如果在子線程接收一個(gè)通知能不能接收到
幾種頁(yè)面?zhèn)髦捣绞降膮^(qū)別
界面非郴诰荩卡頓怎么定位到具體的類和方法
一個(gè) int 類型的值庄敛,被@ 包裝成 NSNumber 類型,傳遞到一個(gè)接受 id 類型的方法參數(shù)中科汗,這個(gè)值能不能保持正確
在 iPad 上面藻烤,分屏功能,拖拽 wps 的文件到qq的這個(gè)過程是怎么實(shí)現(xiàn)的(進(jìn)程間通信的方法)
如何實(shí)現(xiàn)dispatch_once
Instrument 的使用
熱修復(fù)用過么,平時(shí)版本是怎么迭代的怖亭,線上bug是怎么修復(fù)的
實(shí)習(xí)期的一些內(nèi)容涎显。
必備書單
《圖解 TCP/IP, 圖解 HTTP》
《劍指offer》
《Effective Objective-C》
《iOS 與 OSX 高級(jí)編程》
- 以上都是必須要重復(fù)看很多遍的書單,其他不太重要的暫不列出兴猩。
- 【書籍獲取】 可加iOS高級(jí)交流群:
624212887
期吓,群文件包含:iOS各類技術(shù)書籍,BAT面試題合集等
總結(jié)
- 面試中考量的基礎(chǔ)峭跳,最最重要的包括計(jì)算機(jī)網(wǎng)絡(luò)和數(shù)據(jù)結(jié)構(gòu)算法膘婶。對(duì)于iOS 開發(fā)的朋友來說,上面已經(jīng)包括了大部分我面試中遇到的點(diǎn)以及我認(rèn)為非常重要的基礎(chǔ)知識(shí)點(diǎn)蛀醉!