前言
首先介紹一下我的我是雙非本科計算機專業畢業的,從畢業時候簡歷被拒,到現在拿下字節跳動的offer,我花了一年時間。
印象中的今日頭條
給的錢多,筆試也賊難
參加過頭條筆試的同學都知道,頭條筆試可以筆試三次,就是不論你有沒有參加都有三次機會。筆試就5道算法題,兩個小時,去年第一次看到算法題就自閉了,第一次掛了。第二次又很認真地做,做到一半放棄了。沒過幾天又邀請我做第三次,有一種強行被侮辱的感覺。
內推被拒
就像我在前面所說的,簡歷被拒。去年3月份在知乎上看到一個頭條大佬說可以內推春季實習,于是私信并發了簡歷給他。看了我簡歷之后說頭條競爭激烈,我背景不夠,點到為止。。(打擾了)我直接心態崩了。
準備面試
背面試題
總的來說,我自己是非常不甘心的,小鎮做題家即使努力也不會有結果嗎,我開始給自己制定計劃,泡圖書館,背面試題,我想著總有一天我能去頭條工作。毫不夸張的說,圖書館的凳子就差沒被我坐凹進去了。以下是我當時給自己制定的計劃。
第1~3個月:基礎知識與核心概念
每周目標: 熟悉Android開發的基礎知識和核心概念,如Activity、Service、BroadcastReceiver、Content Provider等。
具體任務: 每天背誦并理解Android組件的生命周期和用途。 學習并熟悉AndroidManifest.xml文件的結構和作用。 掌握Android中的基本布局和控件使用。 學習并理解Intent和Intent Filter的使用。
第4~6個月:進階知識與技術
每周目標: 學習Android開發中的進階知識和技術,如Fragment、Handler、多線程、網絡請求等。
具體任務: 學習Fragment的使用和最佳實踐。 掌握Handler和Looper在Android中的應用。 學習并理解Android中的多線程編程,如AsyncTask和IntentService。 熟悉常用的網絡請求庫,如Retrofit、OkHttp等。 月末檢測:完成一些進階的面試題練習,檢查自己對進階知識的掌握程度。
第7~9個月:系統架構與設計模式
每周目標: 學習并掌握Android系統架構和設計模式,提升代碼質量和可維護性。
具體任務:
學習并理解MVC、MVP、MVVM等架構模式。 掌握常見的設計模式,如單例模式、工廠模式、觀察者模式等。 學習性能優化和內存管理的相關知識。 月末檢測:完成一些涉及系統架構和設計模式的面試題練習,檢查自己的理解和應用能力。
第10~12個月:實戰經驗與項目準備
每周目標: 結合實戰經驗和項目準備,提升面試中的實際表現。 具體任務: 回顧自己參與過的項目,總結經驗和教訓。 準備一些常見的面試項目,如新聞閱讀器、社交應用等,并深入分析其實現原理和優化策略。 模擬面試場景,進行面試練習和反思。
在整個一年的學習過程中我還會定期參加一些知識類和技術類型的分享活動,也會和一些在大廠實習的同學交流。
攢面試經驗
1、多參加面試
我在這一年里,不完全是每天都只是在學習,同時,我也會一遍投遞簡歷,可能在一開始,大多數都是小廠,畢竟多多攢經驗才是重要的。后來我也會去投遞一些大廠,也遇到過一些大廠的面試。主要是為了鍛煉面試時候不慌張,穩住自己的心態。
2、面試復盤
我會把崗位上面試官習慣性問的問題記錄下來,每一次的面試都是一次經驗,不斷地總結不斷地復盤,對照自己這段時間以來的學習成果,就知道自己缺少哪一塊的知識點。
今日頭條一面
python和java的相同點及各自的特性
和其他業務方合作時,一般誰來owner
介紹一下你自己的Android項目,存在哪些問題
你說自己做的東西存在很多冗余代碼,結合你之前的代碼同構經歷,怎么復用代碼?
你剛才提到了繼承,它和組合相比有哪些優勢和劣勢?
TCP、UDP全套
開發過程中用到的設計模式,舉例
剛才提到單例模式,說下Android中單例內存泄漏的原因(從生命周期的角度闡述
除了MVP還了解過其他架構么?說下MVVM?
學校里的項目和公司的項目,在開發過程中的區別(學校的只考慮了可用性,頭條要考慮穩定性和可靠性,還要注重頂層設計
Android前沿知識有跟進么?源碼看得多么?
看你有算法經歷,之后的規劃是做開發還是算法
相交鏈表,手寫鏈表,新建的時候注意相交的部分使用相同一個對象
今日頭條二面
項目介紹
view的事件傳遞機制
activity的生命周期
restart方法的調用時機,按home鍵的調用時機,恢復的調用時機,銷毀的調用時機
on save/restore instate的時機,誰調用,怎么調用
bundle的數據結構,如何存儲
listview內點擊buttom并移動的事件流完整攔截過程
多點觸控如何傳遞
service的意義
android的IPC通信方式,是否使用過
service如何實現跨進程通信
android的多線程機制
asynctask的原理
handler原理
app啟動后是怎樣運行的(我答的是mainlooper死循環)
線程池的種類,有沒有用過
http的版本有幾種
http請求包結構,有幾種ContentType
http返回碼的分類,400和500的區別
編程 按XML格式打印view和它的子view
今日頭條三面
自我介紹
Collections和Map的區別,講講常用的工具類還有set,map的區別,代替vector的并發類。
多線程同步,說了一下理解,然后問怎么解決,答了鎖然后問對象鎖和方法鎖的區別,說說可重入鎖
view的分發機制
n個數中找出m的和,講了一下思路,問能不能優化
怎么在List中刪除一個數,要寫代碼
launchMode(這里實習時還花時間總結過,面試時發現不太記得清楚了....)
Activity跳轉的生命周期
實習項目
java的反射
java中為什么有虛地址(好像是這樣問的,就記得關鍵詞是虛地址....)
簡歷上提到的框架原理。RxJava的好處,原理。
面試經驗總結
1、簡歷是一塊敲門磚
簡歷相當于門面,意味著在篩選簡歷的時候能否收到面試邀約。簡歷的好壞,至少影響這次面試結果的30%。
簡歷的注意事項也有蠻多。一定要主要自己有些什么成果及項目經歷要及時的更新到自己的簡歷里面。簡歷的書寫需要符合邏輯性,最好按結構化思維、金字塔原理、STAR原理等進行簡歷的結構編排。也需要注意好細節,簡歷里面不要出現錯別字。對自己的項目經歷要簡短清晰的描述,能夠數據化呈現就更好。模棱兩可往往會讓人覺得不自信不靠譜。
2、過硬的核心知識
過硬的核心知識是面試官衡量求職者是否符合崗位需求的關鍵指標。在面試過程中,面試官往往會針對崗位的核心職責和要求提出一系列的專業問題,如果求職者能夠準確深入的回答問題,那么無疑會大大提高面試成功的概率。快速獲得面試官的認可。
寫在最后
為了助力朋友們跳槽面試、升職加薪、職業困境,提高自己的技術,本文給大家整了一套涵蓋Android所有技術棧的快速學習方法和筆記。