2022年海歸人才網(wǎng)一個(gè)iOS程序員的BAT面試全記錄內(nèi)含百度網(wǎng)易阿里面試真題_第1頁
2022年海歸人才網(wǎng)一個(gè)iOS程序員的BAT面試全記錄內(nèi)含百度網(wǎng)易阿里面試真題_第2頁
2022年海歸人才網(wǎng)一個(gè)iOS程序員的BAT面試全記錄內(nèi)含百度網(wǎng)易阿里面試真題_第3頁
2022年海歸人才網(wǎng)一個(gè)iOS程序員的BAT面試全記錄內(nèi)含百度網(wǎng)易阿里面試真題_第4頁
2022年海歸人才網(wǎng)一個(gè)iOS程序員的BAT面試全記錄內(nèi)含百度網(wǎng)易阿里面試真題_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、【海歸人才網(wǎng)】一個(gè)iOS程序員的BAT面試全記錄(內(nèi)含百度+網(wǎng)易+阿里面試真題)作為 iOS 開發(fā)者,雖然 Swift 已經(jīng)發(fā)布了快兩年,但是大公司轉(zhuǎn)向 Swift 的動(dòng)作還不明顯,所以 Objective-C 幾乎是必備項(xiàng),Swift 都不一定能算是加分項(xiàng)。iOS 方面的知識(shí)也必不可少,雖然招聘信息上寫著如果基礎(chǔ)扎實(shí),零 iOS 基礎(chǔ)也可以,但是現(xiàn)實(shí)往往是比較殘酷的。我的面試經(jīng)歷分享一下我的面試經(jīng)歷,題目如下,破折線后面是簡單的解決思路。百度一面:約 1.5 小時(shí)首先是四個(gè)算法題:不用臨時(shí)變量怎么實(shí)現(xiàn) swap(a, b)用加法或者異或都可以二維有序數(shù)組查找數(shù)字劍指 offer 第 3題億級(jí)

2、日志中,查找登陸次數(shù)最多的十個(gè)用戶(不確定對(duì)不對(duì),我的思路是)先用哈希表保存登陸次數(shù)和ID,然后用紅黑樹保存最大的十個(gè)數(shù)。劍指 offer 第 30題簡述排序算法快排,partion函數(shù)的原理,堆排(不穩(wěn)定),歸并排序,基數(shù)排序。然后有一個(gè)智力題,沒完整的答出來,好像影響不是很大。最后是 iOS 相關(guān),面試官問的很開放,都是談?wù)勛约旱睦斫猓赫f說你對(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)引用的原理和解決

3、方案。說說你對(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-

4、C,因?yàn)闇?zhǔn)備比較充分,基本上答出來 80% 吧。大約一周后突然二面。二面:約 0.5 小時(shí)二面比較突然,先是簡單的自我介紹,然后問了三個(gè)問題:野指針是什么,iOS 開發(fā)中什么情況下會(huì)有野指針?野指針是不為 nil,但是指向已經(jīng)被釋放的內(nèi)存的指針,不知道什么時(shí)候會(huì)有,如果有知道的讀者還望提醒。介紹 block。 (接第一問) 我讓面試官提示我一下什么時(shí)候會(huì)有野指針,他說用 block 時(shí),我表示還是不知道,只知道 block 會(huì)有循環(huán)引用。于是就扯回了一面的問題。說說你是怎么優(yōu)化 UITableView 的。還是一面的問題。三面:北京 onsite,約 2.5 小時(shí)首先是給一個(gè)小時(shí),手寫算法:給

5、一個(gè)字符串,如何判斷它是否是合法的 IP 地址,比如 “” 就是合法的。說說大數(shù)相加的思路,動(dòng)手寫代碼實(shí)現(xiàn)。沒能寫完,主要是大數(shù)相加的時(shí)候需要考慮負(fù)數(shù),耽擱了一點(diǎn)時(shí)間。然后讓我簡述 TCP 建立和關(guān)閉連接時(shí),握手的過程。還問了前者為什么是三次,后者需要四次?接下來是設(shè)計(jì)了一個(gè)實(shí)際場(chǎng)景,為了簡化問題,我們考慮這個(gè)問題:假設(shè)有 10W 條電話號(hào)碼,如何通過輸入電話號(hào)碼的某一段內(nèi)容,快速搜索出來。比如輸入234,以下兩個(gè)號(hào)碼都會(huì)顯示在搜索結(jié)果中:其實(shí)最簡單的解決方案是遍歷所有字符串,然后用 KMP 算法。但是這樣的問題是需要遍歷 10W 個(gè)元素,效率比較低。我想到的是辦法是使用索引。建立 100 個(gè)

6、索引(00 到 99),比如輸入234時(shí)只需要在索引23對(duì)應(yīng)的區(qū)域查找即可,可以加快 100 倍速度。但是缺點(diǎn)是插入數(shù)據(jù)時(shí),需要更新多個(gè)索引,數(shù)據(jù)量會(huì)是原來的 10 倍。目前還沒有想到好的解決方案。有大神提醒說用字典樹,有空研究一番。最后問了 OC 的數(shù)組中,添加nil對(duì)象會(huì)有什么問題。當(dāng)時(shí)沒答上來,現(xiàn)在想想很不應(yīng)該,因?yàn)閿?shù)組是以nil結(jié)尾的,如果添加了nil,后續(xù)就不能添加對(duì)象了。網(wǎng)易筆試:主要是計(jì)算機(jī)方面的大雜燴,涉及操作系統(tǒng),網(wǎng)絡(luò),移動(dòng)開發(fā),算法等。難度不大,目測(cè)是為了淘汰渾水摸魚的人,就不列出題目了,算法有三題,直接在線寫(木有 IDE 表示很憂傷):很長一道題,讀了很久才讀懂,目測(cè)是

7、 DFS,但是最后沒時(shí)間了,寫了個(gè)思路。把 “.” 這樣的字符串改成 “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è)就是簡單的遞歸了,分兩種情況,當(dāng)前位置的數(shù)字在子數(shù)組中,以及不在子數(shù)組中。一面:全部是 iOS 題,可能是覺得算法已經(jīng)面過了:介紹 block。我提到棧上的 block 在 ARC 下會(huì)自動(dòng)復(fù)制到堆上,面試官問我從 iOS 4 還是 5 開始支持這一特性,表示不知道,我又不是學(xué) OC

8、 歷史的,后來想想可能是公司內(nèi)部老項(xiàng)目有這個(gè)坑。ARC 會(huì)對(duì)代碼做什么優(yōu)化?比如NSString *s2 = s1; s2 = nil這樣的語句,可能就不會(huì)有retain和release方法了。介紹一下 MVVM 和 RAC。可能是我簡歷的某個(gè)角落寫了用過 RAC,被挖出來了,大概談了一下,結(jié)果面試官問我數(shù)據(jù)的雙向綁定怎么做,bind函數(shù)了解過么,果斷說已經(jīng)忘了:joy:joy:joy:介紹自己用過哪些開源庫。Masonry 和 SnapKit,AFNetWorking,MKNetworkKit,Alamofire,Mantle,SDWebImage如果讓你寫,你能實(shí)現(xiàn)么?當(dāng)然不能,不然還要實(shí)

9、習(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é)果是:cint main() int a5=1,

10、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%。問如果周一周二都沒下雨,那么周四下雨的概率

11、為_。簡單的概率題,答案是:30% * 60% + 70% * 30% = 39%某癡迷撲克的小團(tuán)體喜歡用TJQKA來計(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ù)接口: char* pokToDec(char *)我的解決思路是進(jìn)制轉(zhuǎn)換,類似于 16 進(jìn)制轉(zhuǎn)換 10 進(jìn)制這種,最后再把數(shù)字轉(zhuǎn)成char *類型。然后好像沒結(jié)果了,可能是編程實(shí)在太渣了?其他我知道的面試題阿里一面:MVC具有什么樣的優(yōu)勢(shì),各個(gè)模塊之間怎么通信,

12、比如點(diǎn)擊 Button 后 怎么通知 Model?兩個(gè)無限長度鏈表(也就是可能有環(huán)) 判斷有沒有交點(diǎn)UITableView的相關(guān)優(yōu)化KVO、Notification、delegate各自的優(yōu)缺點(diǎn),效率還有使用場(chǎng)景如何手動(dòng)通知KVOObjective-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ì)圖片緩

13、存?有沒有自己設(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)該自己瞎想,而是先和面試官把問題討論清楚。要知道,通

14、過溝通弄明白復(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ì)無聊到盯著你的代碼看的,面試官一般都很忙,他也有

15、自己的工作要完成,所以你就當(dāng)是用自己的 IDE 就好。在線編程往往是一個(gè)中等難度的問題,所以不要自己嚇唬自己。同時(shí)要注意代碼格式的規(guī)范,適當(dāng)?shù)淖⑨?,提前編寫好測(cè)試用例等,即使沒有解決問題,也至 少要把自己良好的編程習(xí)慣展示給面試官。2. 遇到不會(huì)的問題怎么處理這個(gè)問題有可能是面試官故意說得含糊不清,考察你的交流能力,也有可能是無意的,或者是你的理解方式出現(xiàn)了偏差。不管是以上哪種問題,你都應(yīng)該先和面試官交流,直到你搞懂了面試官要問你什么,而不是按照自己的理解說了一堆無用的東西。舉個(gè)例子,面試官可能會(huì)問了一道算法題:“如何判斷兩個(gè)無限長度的鏈表是否有交點(diǎn)?”。對(duì)于“無限長度”可以有不同的理解,如果

16、真的是有無窮多 個(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)的

17、例子: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 吧”,“我覺

18、得可能是 ”,更有甚者直接裝逼:“這個(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)只記得一些簡單的概念了。最后,還需要保持一個(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)超其他面試者,讓一面面試官覺得自己

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論