百度/阿里/網(wǎng)易 iOS 面經(jīng) 寫的非常好

鏈接:https://www.nowcoder.com/discuss/21022?type=2&order=0&pos=1&page=1

以下文章是我去年拿到 Offer 以后的總結(jié),最近可能是春招開始了抹竹,我發(fā)現(xiàn)文章的閱讀數(shù)量又大幅度提高线罕,所以復(fù)制過來希望幫助到有需要的同學(xué)。?

我的博客:bestswifter

簡(jiǎn)書原文:讓 BAT 的 Offer 不再難拿

我的微博:bestswifter

歡迎求職中的小伙伴加入 Q 群討論窃判,有 BAT 的老司機(jī)帶:605586927?

作為一名 iOS 開發(fā)者钞楼,我所理解的基礎(chǔ)是 操作系統(tǒng)、網(wǎng)絡(luò)和算法這三大塊袄琳,

關(guān)于簡(jiǎn)歷的書寫询件,推薦兩篇文章:如何寫面向互聯(lián)網(wǎng)公司的求職簡(jiǎn)歷程序猿簡(jiǎn)歷模板唆樊。你也可以參考我的簡(jiǎn)歷宛琅,沒有亮點(diǎn),就當(dāng)是拋磚引玉逗旁。?

百度?

一面:約 1.5 小時(shí)?

首先是四個(gè)算法題:?

不用臨時(shí)變量怎么實(shí)現(xiàn) swap(a, b)——用加法或者異或都可以

二維有序數(shù)組查找數(shù)字——?jiǎng)χ?offer 第 3題

億級(jí)日志中嘿辟,查找登陸次數(shù)最多的十個(gè)用戶——(不確定對(duì)不對(duì)舆瘪,我的思路是)先用哈希表保存登陸次數(shù)和ID,然后用紅黑樹保存最大的十個(gè)數(shù)红伦。劍指 offer 第 30題

簡(jiǎn)述排序算法——快排英古,partion函數(shù)的原理,堆排(不穩(wěn)定)昙读,歸并排序召调,基數(shù)排序。

然后有一個(gè)蛮浑,沒完整的答出來唠叛,好像影響不是很大。?

最后是 iOS 相關(guān)沮稚,面試官問的很開放艺沼,都是談?wù)勛约旱睦斫猓?

說說你對(duì) OC 中l(wèi)oad方法和initialize方法的異同∽吵妫——主要說一下執(zhí)行時(shí)間澳厢,各自用途环础,沒實(shí)現(xiàn)子類的方法會(huì)不會(huì)調(diào)用父類的囚似?

說說你對(duì) block 的理解∠叩茫—— 三種 block饶唤,棧上的自動(dòng)復(fù)制到堆上,block 的屬性修飾符是 copy贯钩,循環(huán)引用的原理和解決方案募狂。

說說你對(duì) runtime 的理解〗抢祝——主要是方法調(diào)用時(shí)如何查找緩存祸穷,如何找到方法,找不到方法時(shí)怎么轉(zhuǎn)發(fā)勺三,對(duì)象的內(nèi)存布局雷滚。

說說你對(duì) MVC 和 MVVM 的理解÷鸺幔—— MVC 的 C 太臃腫祈远,可以和 V 合并,變成 MVVM 中的 V商源,而 VM 用來將 M 轉(zhuǎn)化成 V 能用的數(shù)據(jù)车份。

說說 UITableView 的調(diào)優(yōu)∧党梗——一方面是通過 instruments 檢查影響性能的地方扫沼,另一方面是估算高度并在 runloop 空閑時(shí)緩存。

談?wù)勀銓?duì) ARC 的理解。ARC 是編譯器完成的充甚,依靠引用計(jì)數(shù)以政,談?wù)剮讉€(gè)屬性修飾符的內(nèi)存管理策略,什么情況下會(huì)內(nèi)存泄露伴找。

一面的問題非秤基礎(chǔ),主要是算法和 Objective-C技矮,因?yàn)闇?zhǔn)備比較充分抖誉,基本上答出來 80% 吧。大約一周后突然二面衰倦。?

二面:約 0.5 小時(shí)?

二面比較突然袒炉,顯示簡(jiǎn)單的自我介紹,然后問了三個(gè)問題:?

野指針是什么樊零,iOS 開發(fā)中什么情況下會(huì)有野指針我磁?——野指針是不為 nil,但是指向已經(jīng)被釋放的內(nèi)存的指針驻襟,不知道什么時(shí)候會(huì)有夺艰,如果有知道的讀者還望提醒。

介紹 block沉衣∮舾保—— (接第一問) 我讓面試官提示我一下什么時(shí)候會(huì)有野指針,他說用 block 時(shí)豌习,我表示還是不知道存谎,只知道 block 會(huì)有循環(huán)引用。于是就扯回了一面的問題肥隆。

說說你是怎么優(yōu)化 UITableView 的既荚。——還是一面的問題栋艳。恰聘。。嘱巾。憨琳。。旬昭。篙螟。。问拘。遍略。

雖然通過了惧所,但是幾乎又問了一遍一面的問題讓我感覺對(duì)方不太認(rèn)真。?

三面:北京 onsite绪杏,約 2.5 小時(shí)?

首先是給一個(gè)小時(shí)下愈,手寫算法:?

首先是給一個(gè)小時(shí),手寫算法兩個(gè)算法題蕾久。接下來問了 TCP 握手相關(guān)的势似。最后問了 OC 的一些細(xì)節(jié)問題。?

網(wǎng)易?

筆試?

主要是計(jì)算機(jī)方面的大雜燴僧著,涉及操作系統(tǒng)履因,網(wǎng)絡(luò),移動(dòng)開發(fā)盹愚,算法等栅迄。難度不大,目測(cè)是為了淘汰渾水摸魚的人皆怕,就不列出題目了毅舆,算法有三題,直接在線寫(木有 IDE 表示很憂傷):?

很長(zhǎng)一道題愈腾,讀了很久才讀懂憋活,目測(cè)是 DFS,但是最后沒時(shí)間了顶滩,寫了個(gè)思路余掖。

把 "www.zhidao.baidu.com" 這樣的字符串改成 "com/baidu/zhidao/www"寸爆〗嘎常——老題目了,劍指 offer 的赁豆,兩次逆序排列即可仅醇。

求數(shù)組中和為某個(gè)值的所有子數(shù)組,比如數(shù)組是[5,5,10,2,3]一共有四個(gè)子數(shù)組的和是 15魔种,比如[5,10]析二,[5,10],[10,2,3]节预,[5,5,2,3]叶摄。這個(gè)就是簡(jiǎn)單的遞歸了,分兩種情況安拟,當(dāng)前位置的數(shù)字在子數(shù)組中蛤吓,以及不在子數(shù)組中。

一面?

全部是 iOS 題糠赦,可能是覺得算法已經(jīng)面過了:?

介紹 block会傲」兀——我提到棧上的 block 在 ARC 下會(huì)自動(dòng)復(fù)制到堆上,面試官問我從 iOS 4 還是 5 開始支持這一特性淌山,表示不知道裸燎,我又不是學(xué) OC 歷史的,后來想想可能是公司內(nèi)部老項(xiàng)目有這個(gè)坑泼疑。

ARC 會(huì)對(duì)代碼做什么優(yōu)化德绿?——比如NSString *s2 = s1; s2 = nil這樣的語句,可能就不會(huì)有retain和release方法了退渗。

介紹一下 MVVM 和 RAC脆炎。——可能是我簡(jiǎn)歷的某個(gè)角落寫了用過 RAC氓辣,被挖出來了秒裕,大概談了一下,結(jié)果面試官問我數(shù)據(jù)的雙向綁定怎么做钞啸,bind函數(shù)了解過么几蜻,果斷說已經(jīng)忘了??????

介紹自己用過哪些開源庫√逭叮——Masonry 和 SnapKit梭稚,AFNetWorking,MKNetworkKit絮吵,Alamofire运杭,Mantle妙痹,SDWebImage

如果讓你寫,你能實(shí)現(xiàn)么?——當(dāng)然不能玄坦,不然還要實(shí)習(xí)咳秉?

讀過某個(gè)庫的源碼么窄潭?——扯了一點(diǎn) SDWebImage沐批,后來被告知這個(gè)庫用了 runloop 來保證滑動(dòng)是加載數(shù)據(jù)的流暢性,自己看了源碼后表示沒有發(fā)現(xiàn)瘪校,唯一用到 runloop 地方是保證后臺(tái)線程一直跑澄暮,也有可能是我理解錯(cuò)了,如果錯(cuò)誤歡迎指正阱扬。

SDWebImage 下載了圖片后為什么要解碼泣懊?——當(dāng)時(shí)蒙住了,面試官很 nice 的解釋了一下麻惶,說是要把 png 文件建立一個(gè)什么內(nèi)存映射馍刮,目前還不太懂,有空研究一下用踩。

本來以為面的這么差肯定是掛了渠退,沒想到還是過了一面忙迁。過了不到一個(gè)小時(shí),HR 電話打過來碎乃,約了兩天后二面姊扔。?

二面?

純數(shù)學(xué)和算法:?

下面這段代碼的輸出結(jié)果是:?

int main() {

? ? int a[5]={1,2,3,4,5};

? ? int *ptr=(int *)(&a+1);?

? ? printf(“%d,%d”,*(a+1),*(ptr-1));

? }

答案是 2 和 5。a是指向數(shù)組開頭元素的指針梅誓,a + 1就是指向下一個(gè)元素的指針恰梢,所以星號(hào)求值以后是 2。&a相當(dāng)于是數(shù)組的指針梗掰,&a + 1是數(shù)組后面一個(gè)數(shù)組的指針嵌言,然后轉(zhuǎn)換成int *類型是 5 這個(gè)數(shù)字后面的一個(gè)數(shù)字的指針。再減一就是指向 5 的指針及穗,所以星號(hào)求值以后是 5摧茴。?

某個(gè)地方天氣有如下規(guī)律:如果第一天和第二天都不下雨,則第三天下雨的概率為30%埂陆;如果第一天和第二天中有任 意一天下雨,則第三天下雨的概率為60%苛白。問如果周一周二都沒下雨,那么周四下雨的概率為_焚虱。?

簡(jiǎn)單的概率題购裙,答案是:30% * 60% + 70% * 30% = 39%?

某癡迷撲克的小團(tuán)體喜歡用23456789TJQKA來計(jì)數(shù),A后面是22,23,...,2A,32,...,AA,222,... 依次類推鹃栽。 請(qǐng)用C/C++或Java寫個(gè)程序躏率,將用字符串表示這種計(jì)數(shù)法轉(zhuǎn)換成字符串表示的10進(jìn)制整數(shù)。其中民鼓,該計(jì)數(shù)法的2就對(duì)應(yīng)于十進(jìn)制的2薇芝,之后依次遞增。C/C++函數(shù)接口: charpokToDec(char?)?

我的解決思路是進(jìn)制轉(zhuǎn)換摹察,類似于 16 進(jìn)制轉(zhuǎn)換 10 進(jìn)制這種恩掷,最后再把數(shù)字轉(zhuǎn)成char *類型倡鲸。?

然后好像沒結(jié)果了供嚎,可能是編程實(shí)現(xiàn)太渣了??

其他我知道的面試題?

阿里一面:?

MVC具有什么樣的優(yōu)勢(shì)峭状,各個(gè)模塊之間怎么通信克滴,比如點(diǎn)擊 Button 后 怎么通知 Model?

兩個(gè)無限長(zhǎng)度鏈表(也就是可能有環(huán)) 判斷有沒有交點(diǎn)

UITableView的相關(guān)優(yōu)化

KVO优床、Notification劝赔、delegate各自的優(yōu)缺點(diǎn),效率還有使用場(chǎng)景

如何手動(dòng)通知KVO

Objective-C 中的copy方法

runtime 中胆敞,SEL和IMP的區(qū)別

autoreleasepool的使用場(chǎng)景和原理

RunLoop的實(shí)現(xiàn)原理和數(shù)據(jù)結(jié)構(gòu)着帽,什么時(shí)候會(huì)用到

block為什么會(huì)有循環(huán)引用

使用GCD如何實(shí)現(xiàn)這個(gè)需求:A杂伟、B、C 三個(gè)任務(wù)并發(fā)仍翰,完成后執(zhí)行任務(wù) D赫粥。

NSOperation和GCD的區(qū)別

CoreData的使用,如何處理多線程問題

如何設(shè)計(jì)圖片緩存予借?

有沒有自己設(shè)計(jì)過網(wǎng)絡(luò)控件越平?

阿里二面:?

怎么判斷某個(gè)cell是否顯示在屏幕上

進(jìn)程和線程的區(qū)別

TCP與UDP區(qū)別

TCP流量控制

數(shù)組和鏈表的區(qū)別

UIView生命周期

如果頁面 A 跳轉(zhuǎn)到 頁面 B,A 的viewDidDisappear方法和 B 的viewDidAppear方法哪個(gè)先調(diào)用灵迫?

block循環(huán)引用問題

ARC的本質(zhì)

RunLoop的基本概念秦叛,它是怎么休眠的?

Autoreleasepool什么時(shí)候釋放瀑粥,在什么場(chǎng)景下使用挣跋?

如何找到字符串中第一個(gè)不重復(fù)的字符

哈希表如何處理沖突

面試收獲?

1. 算法題怎么答?

面試官可能會(huì)問到你聞所未聞的算法,這時(shí)候你不應(yīng)該自己瞎想狞换,而是先和面試官把問題討論清楚浆劲。要知道,通過溝通弄明白復(fù)雜的問題也是一種能力哀澈,在和面試官交流的過程中牌借,不僅僅可以搞清楚題目真正的意思是什么,還可以展現(xiàn)自己良好的交流溝通能力割按。所以千萬不要因?yàn)榫o張或者害羞而浪費(fèi)這次大好的機(jī)會(huì)膨报。?

有些題目似曾相識(shí),但是暫時(shí)沒有思路适荣。這時(shí)候不妨告訴面試官现柠,給我一些時(shí)間思考這個(gè)題。然后不要急弛矛,不要慌够吩,就當(dāng)他不存在,拿出紙和筆慢慢算(這充分說明了面試戴耳機(jī)的重要性)丈氓。你一定要堅(jiān)定一個(gè)信念:“任何一道稍微有難度的算法題周循,除非做過,否則一定是需要時(shí)間想的”万俗。所以湾笛,合理的安排思考時(shí)間吧。如果十幾分鐘都想不出來闰歪,可以直接放棄嚎研。?

有時(shí)候面試官會(huì)要求在線編程,相信我库倘,他不會(huì)無聊到盯著你的代碼看的临扮,面試官一般都很忙论矾,他也有自己的工作要完成,所以你就當(dāng)是用自己的 IDE 就好杆勇。在線編程往往是一個(gè)中等難度的問題拇囊,所以不要自己嚇唬自己。同時(shí)要注意代碼格式的規(guī)范靶橱,適當(dāng)?shù)淖⑨屃认崆熬帉懞脺y(cè)試用例等,即使沒有解決問題关霸,也至少要把自己良好的編程習(xí)慣展示給面試官传黄。?

2. 遇到不會(huì)的問題怎么處理?

這個(gè)問題有可能是面試官故意說得含糊不清,考察你的交流能力队寇,也有可能是無意的膘掰,或者是你的理解方式出現(xiàn)了偏差。不管是以上哪種問題佳遣,你都應(yīng)該先和面試官交流识埋,直到你搞懂了面試官要問你什么,而不是按照自己的理解說了一堆無用的東西零渐。?

舉個(gè)例子窒舟,面試官可能會(huì)問了一道算法題:“如何判斷兩個(gè)無限長(zhǎng)度的鏈表是否有交點(diǎn)?”诵盼。對(duì)于“無限長(zhǎng)度”可以有不同的理解惠豺,如果真的是有無窮多個(gè)節(jié)點(diǎn),那顯然這個(gè)問題是無法解決的风宁。但如果鏈表僅僅是有環(huán)洁墙,那么還是可以解決的。如果面試官的本意是鏈表有環(huán)戒财,但你錯(cuò)誤的理解成了無窮多個(gè)節(jié)點(diǎn)热监,那么必然會(huì)導(dǎo)致無法回答這個(gè)問題。而且這并非能力不足饮寞,而是屬于交流溝通方面的失誤孝扛,這也正是我想分享的“技巧”。?

還有一些問題骂际,雖然你沒有接觸過疗琉,但是由于對(duì)類似的問題或者情況有過思考,所以可以合理假設(shè)歉铝。比如面試官問 “ARC 會(huì)對(duì)代碼做什么樣的優(yōu)化?”凑耻。我們知道 ARC 的本質(zhì)就是在合適的地方插入retain和release等方法太示,那么就應(yīng)該從這個(gè)角度出發(fā)去思考問題柠贤。?

顯然分別執(zhí)行retain和release操作是沒有必要的,那么就可以構(gòu)造出相應(yīng)的例子:?

NSString *s1 = @"hello";

NSString *s2 = s1;

NSString *s2 = nil;

由于這種問題我們沒有真正實(shí)踐過类缤,所以可以委婉的告訴面試官:“根據(jù)我的推理臼勉,可能會(huì)有……”。?

3. 遇到真的不會(huì)的問題怎么處理?

遇到不會(huì)的問題果斷承認(rèn)啊餐弱。如果是基本問題宴霸,比如問你哈希表怎么實(shí)現(xiàn),你說不會(huì)膏蚓,那么這次面試可能就懸了瓢谢。如果是有一定難度的問題,那么你承認(rèn)不會(huì)驮瞧,也是一種明智之舉氓扛,畢竟人無完人,一個(gè)問題不會(huì)并不能全盤否定一個(gè)人的能力论笔。?

但是比較糟糕的一種情況是采郎,面試者由于過分緊張,擔(dān)心答不上面試官的問題會(huì)有嚴(yán)重后果狂魔,所以嘗試著去敷衍面試官蒜埋。比如:“我猜是 xxx 吧”,“我覺得可能是 ……”最楷,更有甚者直接裝逼:“這個(gè)我試過理茎,不就是 xxx 么”。要知道管嬉,此時(shí)的你皂林,由于緊張,在心態(tài)上已經(jīng)輸給了面試官蚯撩,更何況面試官問你的問題一定是他有把握的础倍,你覺得這時(shí)候你負(fù)隅頑抗會(huì)有幾成勝算呢??

所以胎挎,面試官問我“堆排序”的細(xì)節(jié)時(shí)沟启,由于我當(dāng)時(shí)忘了堆排序是怎么實(shí)現(xiàn)的,所以我直接告訴他我記不清了犹菇。另一個(gè)主動(dòng)認(rèn)輸?shù)睦邮敲嬖嚬賳栁?RAC 如何實(shí)現(xiàn)雙向綁定德迹,我告訴他這個(gè)是我當(dāng)時(shí)學(xué)習(xí)的時(shí)候?qū)戇^的 demo,因?yàn)椴怀S媒疑郑呀?jīng)只記得一些簡(jiǎn)單的概念了胳搞。?

最后,還需要保持一個(gè)平穩(wěn)的心態(tài):“面試時(shí)盡力就好,遇到自己不會(huì)的問題也是正常情況”肌毅。如果面試者順利答對(duì)了所有問題筷转,難免會(huì)讓面試官感到一絲尷尬,面試者也有可能會(huì)產(chǎn)生一些別的情緒悬而。所以呜舒,我們要做的只是把自己的能力展示給面試官,做到不驕不躁笨奠。?

4. 準(zhǔn)備殺手锏?

除了能夠回答上面試官的問題以外袭蝗,我建議自己準(zhǔn)備一兩個(gè)殺手锏級(jí)別的話題。所謂的殺手锏般婆,至少具備以下幾個(gè)特征:?

你親自動(dòng)手試驗(yàn)過到腥。所謂實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),數(shù)據(jù)是不會(huì)說謊的腺兴。

問題有足夠的深度左电。一面的面試官可能是你的直接上司,二面一般就是更改級(jí)別的页响。你的深度一定要遠(yuǎn)超其他面試者篓足,讓一面面試官覺得自己沒有十足把握,讓二面面試官覺得這是一個(gè)好話題闰蚕,自己的手下都不一定能有這么獨(dú)到深刻的見解栈拖。

你對(duì)這個(gè)問題理解的足夠深入,無論是廣度還是深度都達(dá)到一定水平没陡。

以 iOS 中的UITableView的調(diào)優(yōu)為例涩哟,我自認(rèn)為對(duì)它有一定的理解,同為 iOS 開發(fā)者的讀者可以閱讀這篇文章:UIKit性能調(diào)優(yōu)實(shí)戰(zhàn)講解盼玄,同時(shí)我還仔細(xì)研究了 sunnyxx 大神的?優(yōu)化UITableViewCell高度計(jì)算的那些事贴彼。?

這一類的話題通常需要仔細(xì)研究官方文檔,iOS 開發(fā)者還可以觀看 WWDC 視頻埃儿,然后花上充足的時(shí)間去總結(jié)器仗。比如我寫?iOS自定義轉(zhuǎn)場(chǎng)動(dòng)畫實(shí)戰(zhàn)講解這篇文章就花了至少三天時(shí)間,包括大年初一一整天童番。?

由于此類話題數(shù)量不多精钮,所以準(zhǔn)備一個(gè)或數(shù)個(gè)即可,面試時(shí)可以有意識(shí)的將面試官引導(dǎo)到這些話題上去剃斧,從而充分的展示自己轨香。?

5. 心態(tài)?

通常情況下,面試結(jié)果都會(huì)在 1 - 3 天內(nèi)知道幼东。有的面試官會(huì)當(dāng)場(chǎng)告訴你通過了臂容,有的公司面試結(jié)束后幾個(gè)小時(shí)就能出結(jié)果科雳。?

但有些時(shí)候,由于某些原因(我也不清楚策橘。炸渡。娜亿。丽已。可能是比較忙买决?)沛婴,你遲遲無法獲知面試結(jié)果。這時(shí)候你可以選擇耐心等待督赤,獲知直接給 HR or 內(nèi)推者發(fā)送郵件嘁灯。一般來說面試結(jié)束后三天還沒收到通知,你可以發(fā)送郵件詢問或者再等等躲舌。?

復(fù)習(xí)資料?

對(duì)于讀到這一段的讀者丑婿,為了感謝你耐心的聽我廢話了這么久,送上一波精心整理的干貨和資料没卸。不敢說完全沒有錯(cuò)羹奉,但是應(yīng)該比自己去查要靠譜得多。主要涉及算法约计、網(wǎng)絡(luò)诀拭、操作系統(tǒng)、Objective-C 和 iOS 五個(gè)方面煤蚌。如果你不是 iOS 開發(fā)者耕挨,相信前三部分的資料也或多或少能夠幫上你。?

算法?

這一部分的內(nèi)容主要分為以下幾個(gè)部分:字符串尉桩、數(shù)組與查找筒占、鏈表、樹以及其他基礎(chǔ)問題蜘犁。?

總的來說翰苫,算法問題可以分為以下三類:?

基礎(chǔ)問題:即使是新手,一眼看過去就有思路沽瘦,只是實(shí)現(xiàn)的時(shí)候需要注意細(xì)節(jié)革骨。

普通問題:這些問題通常屬于以上分類中的某一類,需要面試者掌握一些常見的思路析恋,比如遞歸良哲、動(dòng)態(tài)規(guī)劃、BFS/DFS助隧、雙指針筑凫、二分搜索 等滑沧。或者是直接考察數(shù)據(jù)結(jié)構(gòu)的使用巍实,如:哈希滓技、棧和隊(duì)列、鏈表等棚潦,如果具備了這些基礎(chǔ)知識(shí)令漂,此類題目通常能夠比較快速的解決。

進(jìn)階問題:這些題的解題思路和普通問題相似丸边,但是需要你事先有對(duì)應(yīng)的知識(shí)積累叠必,否則難以直接看出問題的本質(zhì)。

疑難雜題:這類問題比較奇怪妹窖,解決它以后并不能給別的題目太多幫助纬朝,如果時(shí)間緊張可以暫時(shí)放棄。

一般來說骄呼,一類問題難度不大共苛,面試前簡(jiǎn)單復(fù)習(xí)一下,面試時(shí)小心仔細(xì)蜓萄,全面思考即可隅茎。二三類問題是面試重點(diǎn),需要提前準(zhǔn)備绕德。第四類問題通常出現(xiàn)較少患膛,即使不會(huì)做,對(duì)最終評(píng)價(jià)的負(fù)面影響也不會(huì)有前三類那么大耻蛇。?

如果時(shí)間充裕踪蹬,我建議閱讀《劍指 Offer》這本書并配合?Leetcode來鞏固知識(shí),在我的面試過程中臣咖,出現(xiàn)很多書上的原題或者變體跃捣,我自認(rèn)為沒有因?yàn)樗惴ǘ绊懭魏我淮蚊嬖嚨某煽?jī)。如果時(shí)間緊張夺蛇,你也可以只完成我列出的一些經(jīng)典題目疚漆,在“【】”中標(biāo)記了我對(duì)此題類型的分類,如果加星號(hào)表示此題在實(shí)際面試中出現(xiàn)過刁赦。?

PS: 最近有小伙伴被問到了哈希表的實(shí)現(xiàn)娶聘。這可以理解為算法,也可以歸類為計(jì)算機(jī)基礎(chǔ)知識(shí)甚脉⊥枭總的來說你至少需要明白哈希值的特點(diǎn)和兩種解決沖突的方式:拉鏈?zhǔn)胶烷_放尋址。?

字符串

【3】最長(zhǎng)回文子串

【3】最長(zhǎng)無重復(fù)子串

【1*】字符串轉(zhuǎn)數(shù)字

【4】KMP 算法

【2】字符串全排列

【2*】翻轉(zhuǎn)字符串

動(dòng)態(tài)規(guī)劃

【2】背包問題

【3】連續(xù)子數(shù)組的最大和

【4】實(shí)現(xiàn)簡(jiǎn)單的正則表達(dá)式匹配

數(shù)組

【3】求兩個(gè)等長(zhǎng)牺氨、有序數(shù)組的中位數(shù)(二分法)

【4】求兩個(gè)不等長(zhǎng)狡耻、有序數(shù)組的中位數(shù)

【3】旋轉(zhuǎn)數(shù)組求最小值墩剖、【3】旋轉(zhuǎn)數(shù)組求查找某個(gè)值是否存在(二分法)

【4*】每行從左到右,每列從上到下遞增的二維數(shù)組中夷狰,判斷某個(gè)數(shù)是否存在(劍指 offer 第 3 題)

【3*】數(shù)組中出現(xiàn)次數(shù)超過一半的數(shù)字

【3*】第 k 大的數(shù)(拓展:最大的 k 個(gè)數(shù))

【3*】有序數(shù)組中某個(gè)數(shù)字出現(xiàn)的次數(shù)(提示:利用二分搜索)

鏈表

【2】反轉(zhuǎn)鏈表(使用遞歸和迭代兩種解法岭皂,了解頭插法)

【3】刪除鏈表的當(dāng)前節(jié)點(diǎn)

【3】刪除倒數(shù)第 k 個(gè)節(jié)點(diǎn)

【1】?jī)蓚€(gè)有序鏈表合并

【4】復(fù)雜鏈表的復(fù)制

【2*】判斷鏈表是否有環(huán)

【3*】?jī)蓚€(gè)鏈表的第一個(gè)公共節(jié)點(diǎn)(提示:考慮鏈表有環(huán)的情況)

【3】刪除鏈表中重復(fù)節(jié)點(diǎn)

【3】根據(jù)中序和后序遍歷結(jié)果重建二叉樹【3】根據(jù)中序和前序遍歷結(jié)果重建二叉樹

【2】翻轉(zhuǎn)二叉樹

【2】從上往下打印二叉樹(BFS 的思想)

【3】判斷某個(gè)數(shù)組是不是二叉樹的后序遍歷結(jié)果 (劍指 offer 第 24 題)

【3】二叉樹中和為某個(gè)值的路徑

【3*】二叉樹中某個(gè)節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn) (強(qiáng)烈推薦準(zhǔn)備一下沼头,劍指 offer 第 58 題)

【2】用兩個(gè)棧實(shí)現(xiàn)隊(duì)列爷绘、【2】用兩個(gè)隊(duì)列實(shí)現(xiàn)棧

【2】實(shí)現(xiàn)一個(gè)棧,可以用常數(shù)級(jí)時(shí)間找出棧中的最小值

【3】判斷棧的壓棧瘫证、彈棧序列是否合法(劍指offer 第 22 題)

排序

了解以下排序的時(shí)間揉阎、空間復(fù)雜度庄撮,是否穩(wěn)定背捌,實(shí)現(xiàn)原理?

歸并排序、拓展:求數(shù)組中的逆序?qū)€(gè)數(shù)

快速排序重點(diǎn):partion函數(shù)的實(shí)現(xiàn)

堆排序

數(shù)組元素值域已知時(shí)洞斯,考慮?基數(shù)排序和?桶排序

位運(yùn)算

【2】給一個(gè)十進(jìn)制數(shù)字毡庆,求它的二進(jìn)制表示中,有多少個(gè) 1(n &= n - 1)

【3】給一個(gè)數(shù)組烙如,所有數(shù)字都出現(xiàn)了偶數(shù)次么抗,只有一個(gè)出現(xiàn)了一次,找出這個(gè)數(shù)

【4】給一個(gè)數(shù)組亚铁,所有數(shù)字都出現(xiàn)了三次蝇刀,只有一個(gè)出現(xiàn)了一次,找出這個(gè)數(shù)

【3】給一個(gè)數(shù)組徘溢,所有數(shù)組都出現(xiàn)了偶數(shù)次吞琐,只有兩個(gè)數(shù)字出現(xiàn)了一次,找出這兩個(gè)數(shù)

網(wǎng)絡(luò)層?

根據(jù)不同的面試崗位然爆,側(cè)重點(diǎn)略有不同站粟。對(duì) iOS 和 Android 開發(fā)者來說,HTTP 考的略少曾雕,以 TCP 和 UDP 為主奴烙。其實(shí) UDP 基本上只會(huì)考察和 TCP 的區(qū)別。?

當(dāng)然還有一些常見的基礎(chǔ)問題剖张,比如 Cookie 和 Session 的考察切诀,POST 和 GET 的考察,HTTPS 的簡(jiǎn)單了解等搔弄。這些問題在我的博客中都有簡(jiǎn)單的總結(jié)幅虑。?

總結(jié)了一些資料,數(shù)字序號(hào)越大的資料表示篇幅更長(zhǎng)肯污,耗時(shí)更久翘单,難度更大吨枉,講解更細(xì)致。破折線后表示預(yù)計(jì)需要多久可以讀完哄芜。?

【博客】我的六篇總結(jié)————不到一周

【書】圖解 TCP/IP————半個(gè)月

【書】TCP/IP 詳解————沒讀過貌亭,感覺至少需要一個(gè)月

【書】TCP/IP 協(xié)議簇————沒讀過,感覺至少需要一個(gè)月

光讀書是沒有用的认臊,一問到實(shí)際問題很容易懵逼圃庭,以下是我總結(jié)的一些問題:?

簡(jiǎn)介 TCP 和 UDP 區(qū)別,他們位于哪一層失晴?

路由器和交換機(jī)的工作原理大概是什么剧腻,他們分別用到什么協(xié)議,位于哪一層涂屁?

描述TCP 協(xié)議三次握手书在,四次釋放的過程。

TCP 協(xié)議是如何進(jìn)行流量控制拆又,擁塞控制的儒旬?

為什么建立連接時(shí)是三次握手,兩次行不行帖族?如果第三次握手失敗了怎么處理

關(guān)閉連接時(shí)栈源,第四次握手失敗怎么處理?

你怎么理解分層和協(xié)議竖般?

HTTP 請(qǐng)求中的?GET 和 POST 的區(qū)別)甚垦,Session 和 Cookie 的區(qū)別。

談?wù)勀銓?duì) HTTP 1.1涣雕,2.0 和 HTTPS 的理解艰亮。

操作系統(tǒng)與編譯?

我被問到的操作系統(tǒng)問題很少,所以僅僅總結(jié)了一些自認(rèn)為比較重要的問題胞谭。關(guān)于這一部分的知識(shí)垃杖,推薦閱讀《程序員的自我修養(yǎng)》,如果時(shí)間有限丈屹,你可以閱讀我的《程序員的自我修養(yǎng)讀書筆記》调俘,并思考這些問題:?

源代碼是怎么變成可執(zhí)行文件的,每一步的作用是什么旺垒?(預(yù)編譯彩库,詞法分析,語法分析先蒋,語義分析骇钦,中間語言生成目標(biāo)代碼生成,匯編竞漾,鏈接)

應(yīng)用層眯搭、API窥翩、運(yùn)行庫、系統(tǒng)調(diào)用鳞仙、操作系統(tǒng)內(nèi)核之間的關(guān)系是什么寇蚊?

虛擬內(nèi)存空間是什么,為什么要有虛擬內(nèi)存空間棍好。

靜態(tài)鏈接和動(dòng)態(tài)鏈接分別表示什么仗岸,大概是怎么實(shí)現(xiàn)的?

可執(zhí)行文件的結(jié)構(gòu)如何借笙?(分為哪些段)

它是怎么裝載進(jìn)內(nèi)存的扒怖,為什么要分段,分頁业稼,頁錯(cuò)誤是什么盗痒?

進(jìn)程的內(nèi)存格局是怎樣的?(堆盼忌、棧积糯、全局/靜態(tài)區(qū),代碼區(qū)谦纱,常量區(qū))

堆和棧的區(qū)別,函數(shù)調(diào)用和棧的關(guān)系

進(jìn)程和線程的區(qū)別

異步和同步君编,串行跨嘉,并發(fā),并行的區(qū)別

多并發(fā)任務(wù)吃嘿,僅多線程能加快速度么(不能祠乃,會(huì)變慢,有線程切換的開銷)

多個(gè)線程之間可以共享那些數(shù)據(jù)

進(jìn)程之間如何通信

介紹幾種鎖兑燥,他們的用途和區(qū)別

關(guān)于多線程相關(guān)的亮瓷,推薦閱讀這篇文章的前面一小部分——iOS多線程編程——GCD與NSOperation總結(jié)

關(guān)于操作系統(tǒng)和編譯方面的文章,除了讀原書和我的讀書筆記外降瞳,還可以參考這篇文章——修改一個(gè)數(shù)字破解Mac上的應(yīng)用

OC

首先兩本必備的神書一定是要讀完的嘱支。一本是講 OC 的《Effective Objective-C 2.0》,中文名叫:“編寫高質(zhì)量 iOS 與 OS X 代碼的 52 個(gè)有效方法”挣饥。另一本書叫:《Objective-C 高級(jí)編程》除师。前者講解 OC 中各種細(xì)節(jié),后者主要講了 ARC扔枫、Block 和 GCD汛聚。?

光是讀書,思考不夠短荐,很容易在面試時(shí)被問懵逼倚舀,所以建議一遍嘗試回答面試真題叹哭,一邊閱讀以下總結(jié)性的文章,重要性不分先后:?

檢測(cè)內(nèi)存泄露

KVO與KVC原理痕貌、KVO话速、Notification、Delegate優(yōu)缺點(diǎn)芯侥、最推薦的官方文檔

GCD 與 NSOperation

Runtime

block

atomic 線程安全泊交、@synchronized

對(duì)象的深淺復(fù)制

招聘一個(gè)靠譜的iOS

消息傳遞機(jī)制

深入理解Objective-C:Category

強(qiáng)烈推薦第八篇文章,做完這上面的題目基本上可以應(yīng)付大多數(shù) OC 方面的問題了柱查。

iOS 開發(fā)?

RunLoop

Cell 圖片異步加載優(yōu)化

iOS 函數(shù)式編程的實(shí)現(xiàn) && 響應(yīng)式編程概念

內(nèi)存惡鬼drawRect

UIKit 性能調(diào)優(yōu)(主要是UITableView)

優(yōu)化UITableViewCell高度計(jì)算的那些事

高性能圖片架構(gòu)與設(shè)計(jì)

輕量化視圖控制器

UIView的生命周期

高效設(shè)置圓角

事件的傳遞和響應(yīng)機(jī)制

ReactiveCocoa 和 MVVM 入門

其中需要重點(diǎn)了解runloop廓俭,它不僅僅是簡(jiǎn)單的“跑圈”的 概念,很多問題其實(shí)都與它有關(guān)唉工,建議認(rèn)真閱讀 ibireme 大神的總結(jié)

其他面經(jīng)?

我是如何同時(shí)拿到阿里和騰訊offer的

大三學(xué)生拿到阿里,百度實(shí)習(xí)offer面試經(jīng)驗(yàn)分享

2016年1月TX電面題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末研乒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子淋硝,更是在濱河造成了極大的恐慌雹熬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谣膳,死亡現(xiàn)場(chǎng)離奇詭異竿报,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)继谚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門烈菌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人花履,你說我怎么就攤上這事芽世。” “怎么了诡壁?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵济瓢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我妹卿,道長(zhǎng)旺矾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任纽帖,我火速辦了婚禮宠漩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘懊直。我一直安慰自己扒吁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雕崩,像睡著了一般魁索。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盼铁,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天粗蔚,我揣著相機(jī)與錄音,去河邊找鬼饶火。 笑死鹏控,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肤寝。 我是一名探鬼主播当辐,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鲤看!你這毒婦竟也來了缘揪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤义桂,失蹤者是張志新(化名)和其女友劉穎找筝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慷吊,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袖裕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罢浇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陆赋。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嚷闭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赖临,我是刑警寧澤胞锰,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站兢榨,受9級(jí)特大地震影響嗅榕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吵聪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一凌那、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吟逝,春花似錦帽蝶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佃乘。三九已至,卻和暖如春驹尼,著一層夾襖步出監(jiān)牢的瞬間趣避,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工新翎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留程帕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓地啰,卻偏偏與公主長(zhǎng)得像愁拭,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子髓绽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容