5月20日,位元組跳動創始人張一鳴釋出內部全員信,宣佈卸任CEO一職。位元組跳動聯合創始人梁汝波將接任成為新CEO。
對於張一鳴的卸任原因,網友們紛紛猜測。有人根據全員信猜測,是不是去年okr完成得不好被優化了?
也有程式設計師擔憂位元組的offer還能不能接?
這個程式設計師在憂慮這offer能不能接,而我面試位元組卻慘遭撲街.....簡直不要太難受!
面試撲街經歷
一面問的 Java 和 Android 基礎
Jvm虛擬機器messageQueue會不會阻塞ui執行緒物件鎖和類鎖之字形列印樹還有其他的記不清了,主要是我對二面印象太深刻了。二面問的 Flutter 和 Dart
dart是值傳遞還是引用傳遞Widget和element和RenderObject之間的關係widget的root節點mixin extends implement之間的關係(除了extends其他的沒怎麼用過。。)jvm記憶體模型(感覺這個是面試官可憐我,看我什麼都不會才問的=。=)Future和microtask執行順序dart中..的用法(基本沒用過。。)await for(沒用過。。)說實話,第一個、第三個、第六個我準備的話應該能答出來的,但是一個多月沒碰Flutter了,忘了都差不多。。。
此外GitHub和部落格維護好很重要,像我這種demo隨手寫,隨手刪的人直接GG。。
三面問的Android擴充套件技術
描述下事件攔截機制hanlder 機制ui卡頓 卡頓的原因 如何監控熱修復的原理是什麼聊聊元件化ndk 有沒有寫過(肯定沒寫過啊)sharedperfence原理 commit apply之間的差別 如果寫入失敗了會怎麼樣如何做包體積最佳化,如果讓你做dex包體積最佳化你會怎麼做apt 和gradle transform的差別是什麼apt生成的是java的class,而且不能更改原始的類,而transform這個東西你可以為所欲為,但是畢竟操作的是位元組碼,風險係數更高,面試官還特地問了我下是不是有classnotfound問題,其實貌似真的發生過,但是想想感覺有些丟人沒敢承認,畢竟有點一知半解。
.class .java .dex之間的區別是什麼吐了,虛擬機器什麼的我面試的時候都給忘了。哎,太難了。.java是給開發看的,.class是給機器看的,而.dex是給安卓虛擬機器看的。當然這邊更多是想問安卓虛擬機器相關的,反正答的稀爛
okhttp 的攔截器機制 如果讓你監控網路請求的耗時你會怎麼寫把責任鏈說了,寫了關鍵字得分了,面試官也沒繼續往下問,其實還是可以聊聊dispatcher什麼的,okhttp的原始碼說實話有點深。
kotlin 協程和java的執行緒有什麼區別啟動最佳化是如何做的我個人拙見哦,啟動的東西要麼延遲,要換快取。時間軸總長其實比較難以最佳化,我們參考的是阿里的starup的任務圖模式。
如何只拉起推送程序而不拉起app的程序死亡題目,完全不知道答案。
TraceView 和 Systrace直接的區別哈哈哈,之前看過,然後忘了,這種東西一陣子不用吧就真的會忘掉。
面試總結:
對於這次的面試我的看法就是真的好難啊。要準備基礎還要刷演算法題,不僅問Android,還要問jvm虛擬機器,順便問問併發,還要會kotlin,最好還能來個flutter,給各位跪了。
下面是我在這次面試之後做出的一些反思以及對之後面試的一個學習複習方法:
技術儲備不夠面試被懟
為什麼有些程式設計師就算是開發很多年了,去面試依舊會被懟呢?
大部分原因都來自於:技術儲備不夠。
太多程式設計師在平時都是做著crud的工作,有些技術都是等到工作上要用到了才去學習,就是因為大家平時用到什麼去學習什麼,以至於面試的時候面試官問點延伸性或者他需要的人才技術就回答不上了。
簡單來說就是:只有當下公司的業務能力,沒有解決技術的能力,缺少技術創新的能力。
以至於最後只敢找跟之前公司差不多性質的,縮短了自己的職業規劃,工作越找越不滿意。
平時應該如何進行技術儲備、高效複習呢?
那些底層知識都很枯燥,每次學完就忘,一合上書就忘得差不多了,不知道要怎樣學才好了。
其實造成這樣的現象最主要的原因是沒有掌握系統的學習方法,也沒有系統的資料輔助理解和學習。
知識點就是那些,基本上,翻來覆去就是那些換湯不換藥的問法。但是現在大家上班要寫業務程式碼,下班又是家庭瑣碎,要想自己靜下心來好好學習根本不可能,僅僅只是有用資訊的篩選就足夠麻煩。
1、去學習「自己知道自己不會」的知識
其實在開發過程中,總有一些自己想學但是因為專案壓力或者其他原因,然後自己打算放在以後 再學的東西,也就是所謂「自己知道自己不會」的知識。
例如:
比較常用的一些框架,比如客戶端的網路請求、圖片載入框架常用的一些類和集合的原始碼,比如 ArrayList、LinkedList、HashMap(面試必問)覺得自己無法清晰表達出來的概念,如「記憶體洩露」、「Java 併發」這個階段是一個對自己當前知識體系查漏補缺的一個階段,你要做的,就是把自己不會的東西完 整的列出來,然後逐個擊破。
2、全方位的學習,構建自己的「知識體系」
其實很多人在平時學習技術和日常開發過程中,學了非常多的東西,但很少有人會去系統地複習,從而構建自己的知識體系,導致自己學到的很多知識點沒辦法更好的產生聯絡,而且可能會 導致學了某個知識點沒過多久就忘了。
那如何構建我們的「知識體系」呢?
Android 裡面所謂的「知識體系」,我認為主要包含這幾個部分:
Java 和 Anroid 基礎計算機網路作業系統設計模式資料結構和演算法也就是說我們需要將這幾個部分逐步擊破,慢慢完善我們的知識體系,這個階段是最花時間和精力的,但是堅持下來會讓我們的基礎變得更加紮實,而且能最大限度的構建我們的知識體系。
3、學習「自己不知道自己不會」的知識
這時候面試題的作用就出來了,「面向面試題程式設計」其實是一個查漏補缺、增強自己程式設計基礎的非常好的方式。
在做面試題的時候,你會遇到很多奇奇怪怪的問題,很多都是你「之前沒有接觸過」或者「有接觸過卻沒有往那方面想」的問題。
剛開始遇到這些面試題確實很讓人很不舒服,但是這些面試題也確實能夠最大限度地提升我們對知識之間聯絡的理解以及引發我們對一些具體使用場景的思考。
當然更重要的是我們可以透過刷往年各大網際網路公司的面試題,讓我們對於公司面試題有一個大致的認識而且也能提前瞭解到面試官面試時候的一些套路和做法。
**遇到不懂的面試題直接回答不懂,但最好能將面試官的思路往我們會的東西帶 **
在面試的時候,切勿不懂裝懂
我們面試的是技術崗位,有幾斤幾兩,面試官問幾個問題就知道 了,如果面試官問到的某個知識點,你只是有點印象或者沒多少了解的話,直接回答這個知識不是很熟就行了。不然被面試官針對這個知識點追加幾個問題的話,分分鐘打你臉。
當然,在說對這個知識不是很熟之後,可以試著將面試官的面試思路往我們會的東西帶,例如我 在阿里二面的時候,面試官問我有沒有用過 B 樹,因為我對 B 樹不是很熟,所以我當時是這麼講 的:“對於 B 樹不是很熟悉,但之前在看 HashMap 原始碼的時候,有研究過紅黑樹,對紅黑樹比較熟。” 然後成功地將面試官的問題轉向了我熟悉的紅黑樹和 HashMap 的原始碼上面。
總結
想要拿到滿意的 offer,「堅持」是最重要的,拋開了努力和堅持,其他的一切方法論都毫無用處。
最後很多人在剛接觸這個行業的時候或者是在遇到瓶頸期的時候,總會遇到一些問題,比如學了一段時間感覺沒有方向感,不知道該從那裡入手去學習,下面的學習路線幫你解決問題!
知己知彼才能突破難關,所以這裡分享我整理的這份10+家大廠面試真題送給大家:
Android學習路線圖
模組化學習資源
接下來是每個模組我整理出來的文件學習資料,幫助大家更細緻化的學習。
《Android彙總複習資料—Java》
《Android彙總複習資料—Android》
《Android彙總複習資料—Android擴充套件》
《Android彙總複習資料—Kotlin》
《Android彙總複習資料—Flutter》
《Android彙總複習資料—演算法》
除了上面的學習路線,還可以額外的配合以下方式學習,效果翻倍~
Android進階學習
①看影片進行系統學習
前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因為Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以透過影片來學習,效果更好,也更全面。關於影片學習,個人可以推薦去B站進行學習,B站上有很多學習影片,唯一的缺點就是免費的容易過時。
另外,我自己也珍藏了好幾套影片,有需要的我也可以分享給你。
②讀原始碼,看實戰筆記,學習大神思路
“程式語言是程式設計師的表達的方式,而架構是程式設計師對世界的認知”。所以,程式設計師要想快速認知並學習架構,讀原始碼是必不可少的。閱讀原始碼,是解決問題 + 理解事物,更重要的:看到原始碼背後的想法;程式設計師說:讀萬行原始碼,行萬種實踐。
面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,演算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。
關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:
④2020大廠面試高頻知識點
圖片網路和安全機制資料庫外掛化、模組化、元件化、熱修復、增量更新、Gradle架構設計和設計模式效能最佳化Android FrameworkAndroid優秀三方庫原始碼