前言
2019年年初的時候我就開始偷偷投簡歷了。因爲在現在的從事的即時通訊企業做的不開心了,客戶產品善變,公司開會賊多。當然最關鍵的還是工資沒給到位,事情都做了,卻TMD不給升職加薪,因此心裏窩火,也爲了再次向社會證明我的價值和能力。
移動互聯網的普及和智能終端設備的廣泛應用,短視頻、直播、在線教學1V1等各類形式的實時音視頻通信模式風靡大衆,成爲人們日常溝通的新模式。
已經形成南抖音北快手格局。音視頻火熱興起,因此我把目光也瞄準了這兩個企業。
面試快手 初嘗失敗滋味
-
自我介紹 + 項目
-
解釋一下 JNI 中全局引用和局部引用的區別和使用
-
Linux幾個常用的跟進程和線程有關的命令(具體的也記不清了)
-
怎麼定位 NDK 中的問題和錯誤
-
http請求過程,http和https的區別
-
七層和四層分別是啥,TCP和UDP特點和使用場景
-
DNS存在的意義(當時感覺有點懵,直接說了忘了,後來看了一下賊簡單,悔恨+++++++)
-
線程和進程的區別,特點
-
死鎖
-
進程間通信方式
-
指針和引用的區別
-
指針常量和常量指針的區別
-
多態(balabala一大堆),繼承和封裝的特點和區別
-
創建一個進程操作系統內部都幹了啥
-
進程pid怎麼做到唯一標識的(不會)
-
根進程有哪些(開始這三個問題答得都不好,心都涼了,感覺他想刷掉我了,然後開始寫代碼)
-
第一個:孿生素數(三種解決思路吧,當時第一種可能效率不是最優的,說了第二種,面試官:還有什麼提高效率的,我:???有點沒看出來 ,最後他給我說了一個小點,捨去重複計算的一行代碼)
-
第二個:場景題。(面試官:我看你參加了幾次說學建模,說一個場景,你覺得他像什麼模型。我:像多級緩存器吧。面試官:方向是對的,不過你說的是***,但是這道題是一個buffer。大概講了一下buffer的使用)大概就是地鐵早高峯一般會加一個屏障類的東西,問最大人流量之類的,考慮的因素比較多,但是難度還可以,大概模擬了一下,寫了一個簡單的代碼,主要是爲了標明思路。
-
第三個:棋盤從左上到右下的走法(比較常見),說的是遞歸的方式,不過我最後寫還是用dp寫的,主要也是比較慫,害怕遞歸的邊界條件出錯。
-
線程死鎖,發生的情況(記不清了,就大概說了兩種場景)
-
從鍵盤輸入一個字符到顯示在屏幕上發生了啥(說了一下大概,沒細說)
-
直接說前面的代碼寫的還不錯,算法應該還可以,那就再寫幾個吧。我:。。。我盡力寫吧
-
第一個:二叉樹前序遍歷的同時輸出深度(不能用遞歸),我分開寫的前序遍歷和深度,他就說效率有點低吧,我:深度的話平時用遞歸比較多,不用遞歸的話暫時就能考慮折磨多了。面試官人很nice,說了一個小點
-
第二個:手動實現strlen,代碼挺簡單地,四行就行。但是問到一個很難形容的點。面試官:64位下,假設字符長度爲8,實際操作過程中是把這8位從64位中剪出來處理之後又放回64位中,怎麼才能手動提高效率,就是去掉剪裁的過程。這個感覺面的時候很懵逼,題目甚至理解錯了,最後說了一個思路,但可能效率不太高,第二種思路是錯的。
-
第三個:問了說指針訪問內存越界,系統或者說編譯器是怎麼判斷它出現越界的,訪問情況啥的
-
這個大概說了一下,感覺一般很少去編譯器的角度看一些細節,說的淺一點是對的,深一點的話,我給他測試了一下,說了想法,感覺沒什麼問題,但是可能一些細節還是不太對,這個可能還要在研究一下(本人比較菜,沒辦法)
-
第四個:邏輯題:地球(正球體)上某一個點,向北100m,向東100m,向南100m。走完這三步,回到了原點,這個原點的位置在哪。 說了一個,問還有那個點,當時想不到了,現在發現這個點還挺多的(就感覺面試的時候腦子被吃了)
-
第五個:一個整型數組,每一個元素形成的值類比到柱狀圖上,最大蓄水量
-
大概說了思路,考慮的幾種情況,跟自己做過的某一類數學題的思路有相似之處,兩個題考慮的情況有什麼不同(面試官:思路是正確的,但是應該不是最優的。我:的確不是最優的,但是可能是我現在想的太複雜了,我只是覺得考慮的情況可能會很多,暫時的話沒有想到更好的)
-
最後,還有什麼問題問我
面試準備
經歷過,失敗了,當然會彷徨失落,生活終歸要繼續前進,說好的證明自己呢?現在豈不是讓別人看笑話,能力不行,想拿高薪?呵呵…
工作了幾年 ,多少也養成了良好的工作習慣,先查找問題是什麼、再分析問題的可能影響因素,接着尋求對應的解決方案,最後按照影響關聯因子最大的解決方案按計劃去執行好了。
失敗原因一:面試刷題準備不充分
刷題我從常見Android基礎知識面試題,刷到了Java面試題,繼而攻堅Android高級面試題,以及突破學習Flutter相關熱點技術面試題(不是很難),最後總攻近期大廠面試真題總結。這份面試題精編含答案解析我已經整理到了一份PDF文檔裏,共370頁。
下載地址
失敗原因二:Android框架體系架構源碼原理
越來越多的大企業現在面試都開始關注底層框架源碼、原理分析。多年的CV經驗,對於理解和分析源碼始終停留在膚淺的層面。沒有真正意義上去注重源碼分析。
現在網上博客資源水平參差不齊,源碼原理分析不夠全面,因此我特意購買了和蒐集了一些源碼和原理的視頻教程。
下載地址
這套源碼分析教程主要包括:
-
Okhttp網絡庫深入解析和相關面試題分析
-
Retrofit網絡庫深入解析和相關面試題分析
-
LeakCanary內存泄漏框架解析和相關面試題分析
-
butterknife依賴注入框架源碼解析
-
blockcanary UI卡頓優化框架源碼解析
…
字節跳動面經,收穫成功
-
自我介紹,大概就是說些簡歷上沒有的亮點還有跳槽原因等,從各個方面彰顯自己優勢和技術
-
手寫代碼 (1)計算View樹上所有view的數量 (2)參數ViewGroup (3)補全空方法返回view數量(就是數據結構多叉樹遞歸層序遍歷+Android View基本api調用)
-
主線程Looper一直循環查消息爲何沒卡主線程?
-
RecyclerView相對ListView區別?
-
好像還有Bitmap resize相關,就是設置option,然後decode等等等等吧
-
用MultiDex解決何事?
-
其根本原因在於?
-
Dex如何優化?
-
主Dex放哪些東西?
-
主Dex和其他Dex調用、關聯
-
Odex優化點在於啥?
-
Dalvik和Art虛擬機區別?
-
多渠道打包如何實現(Flavor、Dimension應用)?
-
從母包生出渠道包實現方法?渠道標識替換原理?
-
Android打包哪些類型文件不能混淆?
-
Retrofit主要實現機制?
-
動態***靜態***區別?
-
思維、架構:模塊化怎麼做的?怎麼設計的? 19.接口發現暴露怎麼做? 基於什麼思想?
-
MVC、MVP、MVVM應用和彼此本質區別?
-
Glide緩存特點?
-
你擅長Android中哪個方向呢?這問題我其實是按Android UI動畫方面和移動端後臺交互方案制定來預想過的,然鵝說完他挑了Android UI,幸好我有準備。
-
你看我這手機上這個launcher裏應用抽屜(就是很多ROM都有的把很多APP管理歸類的二級菜單功能)他在這ROM前一版是有個毛玻璃效果背景的,從系統ROM角度說下怎麼做吧? UI相關的兩個大問題:實時的水面倒影效果怎麼做?這裏面實時更新的UI性能如何保證?(我也沒做過,估計面試官也知道,所有就說了一下思路啥的,最後也認可了我的思路策略以及知識遷移解決問題能力吧)
-
偏UI基礎的考察:Measure、Layout、draw大流程、繪製順序,基於這些說下TagLayout(FlowLayout)怎麼寫?
-
算法題:倆線程分別持續打印奇數和偶數,實現倆線程的交替打印(從小到大)
-
設計個IM客戶端以及數據庫架構,架構每一層都是啥,互相怎麼交互工作?
最後
感謝大家能耐着性子,看完我囉哩囉嗦的面經過程,以上僅是個人的觀點。但要記住的是,學習是不能落下的,因爲時代在進步,技術在更新,只有更新了自己的知識庫,纔不會被行業所淘汰。
以上所整理的學習文檔均可以分享給大家,共勉!
直接點擊我免費獲取哦!
分享不易 喜歡本文的別忘了關注+點贊喔