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