1. 程式人生 > >騰訊社招iOS面試記錄

騰訊社招iOS面試記錄

點選上方“iOS開發”,選擇“置頂公眾號”

關鍵時刻,第一時間送達!

640?640?wx_fmt=gif

    先不說楚楓的這般年紀,能夠踏入元武一重說明了什麼,最主要的是,楚楓在剛剛踏入核心地帶時,明明只是靈武七重,而在這兩個月不到的時間,連跳兩重修為,又跳過一個大境界,踏入了元武一重,這般進步速度,簡直堪稱變態啊。

    “這楚楓不簡單,原來是一位天才,若是讓他繼續成長下去,絕對能成為一號人物,不過可惜,他太狂妄了,竟與龔師兄定下生死約戰,一年時間,他再厲害也無法戰勝龔師兄。”有人認識到楚楓的潛力後,為楚楓感到惋惜。

    “哼,何須一年,此子今日就必敗,巫九與龔師兄關係甚好,早就看他不順眼了,如今他竟敢登上生死臺挑戰巫九,巫九豈會放過他?”但也有人認為,楚楓今日就已是在劫難逃。

    “何人挑戰老子?”就在這時,又是一聲爆喝響起,而後一道身影自人群之中掠出,最後穩穩的落在了比鬥臺上。

    這位身材瘦弱,身高平平,長得那叫一個猥瑣,金鉤鼻子蛤蟆眼,嘴巴一張牙帶色兒,說話臭氣能傳三十米,他若是當面對誰哈口氣,都能讓那人跪在地上狂嘔不止。

    不過別看這位長得不咋地,他在核心地帶可是鼎鼎有名,劍道盟建立者,青龍榜第九名,正是巫九是也。

    “你就是巫九?”楚楓眼前一亮,第一次發現,世間還有長得如此奇葩的人。

    巫九鼻孔一張,大嘴一咧,拍著那乾癟的肚子,得意洋洋的道:“老子就是巫九,你挑戰老子?”

    “不是挑戰你,是要宰了你。”楚楓冷聲笑道。

    “好,老子滿足你這個心願,長老,拿張生死狀來,老子今日在這裡瞭解了這小子。”巫九扯開嗓子,對著下方吼了一聲。

    如果他對內門長老這麼說話,也就算了,但是敢這麼跟核心長老說話的,他可真是算作膽肥的,就連許多核心弟子,都是倒吸了一口涼氣,心想這楚楓夠狂,想不到這巫九更狂。

    不過最讓人無言的就是,巫九話音落下不久,真有一位核心長老自人群走出,緩緩得來到了比鬥臺上,左手端著筆墨,右手拿著生死狀,來到了巫九的身前。

    “我去,這巫九什麼身份,竟能這般使喚核心長老?”有人吃驚不已,那長老修為不低,乃是元武七重,比巫九還要高兩個層次,但卻這般聽巫九的話,著實讓人吃驚不已。

    “這你就不知道了吧,巫九在前些時日,拜了鍾離長老為師尊,已正式得到鍾離長老的親傳。”有人解釋道。

    “鍾離長老?可是那位性情古怪的鐘離一護?”

    “沒錯,就是他。”

    “天哪,巫九竟然拜入了他的門下?”

    人們再次大吃一驚,那鍾離一護在青龍宗可是赫赫有名,若要是論其個人實力,在青龍宗內絕對能夠排入前三,連護宗六老單打獨鬥都不會是他的對手。

    只不過那鍾離一護,如同諸葛青雲一樣,也是一位客卿長老,所以在青龍宗內只是掛個頭銜,什麼事都不管,更別說傳授宗內弟子技藝了,如今巫九竟然能拜入他老人家門下,著實讓人羨慕不已。

    “恩怨生死臺,的確可以決鬥生死,但必須要有所恩怨,你們兩個人,可有恩怨?”那位長老開口詢問道。

畢業好幾年了,上週傳送了簡歷給騰訊,參加了騰訊面試。具體部門這邊就不說了。這次面試還是收穫到了很多。

一面電話面試:

面試官主要是針對iOS相關的基礎問題。

  1. 先簡單自我介紹一下自己

  2. 對mrc和arc的理解

  3. 談談對自動釋放池的理解

  4. 自動釋放池在mrc和arc區別

  5. 多層自動釋放池巢狀的物件在哪一層釋放

  6. 對於block,理解,mrc和arc下有什麼區別,使用注意事項

  7. 對於深拷貝和淺拷貝的理解

  8. 對於strong weak,atomic等等理解

  9. weak原理

  10. 如果屬性完全不加修飾詞入weak,atomic,系統會怎麼處理

  11. 簡述下block的實現

  12. 描述下IM系統如何保證訊息不丟

  13. IM資料庫如何設計表

  14. C++引用和指標有什麼區別

  15. Http協議30x的錯誤是什麼

  16. 談談你懂runloop得理解:由淺入深

  17. 談談對多執行緒理解:由淺入深

  18. 談談category和extension區別,系統如何底層實現category

  19. 談談訊息轉發機制實現

  20. 談談事件響應鏈,如何響應view之外的事件

  21. 介面效能優化

整個面試大約1個半小時。整體上,回答的還算OK,自動釋放池這塊,不夠清楚底層實現。另外atomic是在屬性沒有寫的情況下系統預設的。Block的底層實現也表達的不夠準確。

一面之後過了幾天,給了二面通知。

二面視訊面試:

這次面試官相對於一面,更加側重於過往專案。

1.開頭都是簡短的自我介紹   2.聊一聊過往專案中你覺得收穫最大的一個模組。

突然遇到這個問題,心理是有點懵逼的呀,我不禁反想了一下,過去這些個專案,零零散散收穫了不少知識和經驗,可是具體到哪一個模組,完整的思考還是沒有過的。

答: 就說了上個專案做類似朋友圈的優化思路,談到了空間換時間,快取,渲染相關的技術點。

不得不驚歎騰訊的面試官的邏輯條理,很快抓住了問題的本質。

需求痛點:介面卡頓,體驗不好 解決方案:探索的思路-》解決方案。

該模組引申到的新話題還涉及到了增量更新,記憶體快取,本地快取。

細節上還談到了富文字繪製,Coretext框架的使用,哎,說來慚愧,上次使用coretext已經是兩年前,連框架的核心API都已經不記得了。再加上專案中使用的是YYLabel的開源框架。最後只能憑藉印象大概說了下繪製的流程,其實面試官都是由淺入深的,如果這邊回答的不夠深入。那麼後面也就不會有更深入的探討了。

3.上個專案中存在視訊裁剪,錄製等功能。 面試官對這塊有些興趣,就聊到了視訊裁剪的實現,因為我們專案中使用了ffmpeg做的裁剪功能。包括視訊下載,資料裁剪封裝,引申聊到了邊預覽邊裁剪,因為我之前的專案並沒有做到預覽裁剪這塊。也就沒有深入聊下去了。期間簡單談到了rstp協議,和HLS,rtmp等協議的對比,信令協議。雖然之前都有看過協議的大致實現和預覽,但是實際使用的是SDK,沒有實踐加持。這部分知識是很容易忘記的。大致聊了下總體差別。

4.專案中有用到過DLNA投屏協議 說來又是慚愧,自己完整做過的專案,過去了兩年,居然連流程,協議都只是零零散散的記起來了,很勉強的說出了大概實現流程。知道最後才記起來是soap協議。當初為了做這個可是研究了整整兩週的。面試官應該也實現過這個需求,提到了視訊盒子斷線如何檢測做處理,什麼原因導致的。由於之前我們的產品需求比較簡單,沒有特別完善。這裡我也只能說了大概。

5.專案做過視訊播放需求,使用的AVPlayer框架(重點聊) 面試官問到,AVPlayer怎麼監聽視訊緩衝狀態的,有哪幾種狀態。說來又是慚愧,我只記得是KVO監聽的。具體的API已經記不清了。 接著面試官問到這個需求遇到過哪些坑,怎麼解決的。 這個還真的有,首先是回撥播放進度在拖動時候錯亂,載入某些小視訊的適配,首幀出圖很慢。KVO的模式不靈活。緩衝進度不受我們控制。短視訊可能直接迅速緩衝到底。 還是之前的思路 需求痛點有了 解決方案:探索的思路-》解決方案。 不得不說之前做的產品,都是需求驅動,解決了需求,很多時候就沒有極客精神,在深入的去探討。這塊真的是差!

發散問到了:如果網路不好,首幀出圖之後,如何優化後續播放不卡頓 當時已經一臉懵逼了:就提到了可以適當加大緩衝區,等到足夠的I幀資料再開始播放。

甚至連常規的位元速率切換思路都沒想到。作為做音視訊相關產品的我太不應該了。

6.專案聊完了之後,又追問了iOS的一些基礎問題,屬性和成員變數區別,strong,atomic關鍵字,怎麼理解runloop,runloop有幾種狀態等等。

7.最後給出了一個非常有意思的演算法題

有15個瓶子,其中最多有一瓶有毒,現在有四隻老鼠,喝了有毒的水之後,第二天就會死。如何在第二天就可以判斷出哪個瓶子有毒 答:開始我想到的是常規思路二分法,717,和麵試官說了,發現四隻老鼠根本不夠,面試官友好的提示從老鼠面去想,這時候很快想到了一個老鼠有死和不死,也就0和1兩個狀態,四隻老鼠有16個組合,正好是足夠的。但是怎麼分配瓶子,還沒想好,演算了一會兒,因為面試官這邊時間有限,就說思路是正確的。下面有興趣在看怎麼分哈。面試就到此結束了。

二面持續了大約一個小時多一點。 二面自己感覺了很多欠缺,不夠深入。

面試總結

騰訊的面試官都非常的友好,邏輯性非常強。綜合素質很高。面試過程中雖然針對的都是技術問題,但是考察的包含了邏輯思維和產品思維以及溝通能力等綜合素質。特別是二面。

認識到了自己的不足:

1.不夠極客精神:還是需求驅動,之前的專案很多設計優化因為對產品的需求沒有那麼高精度,遇到痛點的時候:僅僅做了初步的探討,沒有形成完整的閉環

往往是做了一定的優化滿足了需求就結束整個過程了。這對於自我的成長是很不好的。比如一個API瞭解到百分之70,沒有到100.

2. 已有專案知識面深度不夠:專案中使用到了某些API,第一反應是先去看Demo,完成需求,事實上例如僅僅是一個簡單視訊播放,可能呼叫API很簡單就可以做到,但是中間包含的卻很多,從網路協議,到視訊解封裝,編解碼,渲染。音訊編解碼播放。

雖然每個環節都有去學習,也都知道流程,但是這是不夠。要深入進去。即使自己的專案沒有這塊實踐需求。也要自我驅動去做。

3.自我總結欠缺:以前都是渾渾噩噩的快樂開發,也自學了不少。每個專案,或者每個自我學習的過程走一段,都應該站在更高點去總結一下。

例如專案,要站在產品角度,自我學習,要站在整體框架角度。否則學習到的東西一段時間不用就忘記了。高度也不夠。沒有完全消化透。感覺什麼都懂一些,但是什麼都差一點火候

怎麼改善提高

  1. 多寫Blog分享,東西會做,和能寫出來是兩個層面。即使網上已經有很多實現了。消化好之後,用自己的思路表達出來,也有很大提高

  2. 遇到問題,無論是專案還是自己實踐,都要多問幾個為什麼,不能淺嘗輒止,站在產品角度。從原理層面理解問題,最重要是給出解決問題方案。demo不等於工程。

  3. 階段性總結知識點。古語: 學而時習之。

反思了很多:也清楚認識到自己的一些優點,有技術熱情,愛好學習。很好的邏輯思維。溝通能力。相信只要堅持努力。一定能獲得好的結果。也給自己打打氣。共勉之。

640.jpeg

  • 作者:AceDong

  • https://juejin.im/post/5b3c40f4e51d45191a0d0aae

  • iOS開發整理髮布,轉載請聯絡作者獲得授權