前言
前段時間在看機會,本文就是我對求職程序的一個總結,
同時,也作為一個面試官,來說說求職中需要注意的點,
- 各大廠的面試會考核哪些知識點
- 5年開發應該具備哪些技術要點
- 當下市場行情如何,真的很卷嗎
- 寫簡歷需要注意什么
- 自我介紹怎么準備
- 關于為什么離職
- 未來職業規劃問題如何避坑
- 被問到自閉,如何調整心態
- 我個人的學習方法
- 其他注意事項
面試題
先上主菜
一面技術
京東
- GC原理,有哪幾種GC方式
- HashMap原理
- Hybrid開發流程、機制
- WebView記憶體泄露
- 包體積優化
- 自定義View需要注意哪些
- 事件分發機制
- ViewModel原理
- 螢屏旋轉ViewModel怎么做到保存資料的
- LiveData原理
- Flutter執行緒機制,單執行緒多執行緒
- 組件化開發
- 介紹一個自己的開源專案
- 有參與過別人的開源專案嗎
位元組跳動
- 瀏覽器輸入一個地址,按下回車,這個程序是什么樣的
- 簡單介紹一下TCP
- 簡單介紹一下Https
- 說說對稱加密和非對稱加密,說說公鑰
- 并發操作如何保證執行緒安全
- 鎖有哪些
- 簡單介紹一下HashMap
- Arraylist是執行緒安全的嗎
- 知道CAS、原子性嗎
- AtomicBoolean和boolean的區別
- 用過哪些設計模式
- 介紹一下觀察者模式
- 用過哪些排序演算法
- 介紹一下貪心演算法
- 介紹一下快排原理
- 演算法,給定一個有序不重復陣列,使用時間復雜度小于N方的方法,找到所有兩兩相加等于target值的組合:
int[] a={1,2,3,4,5,6,7,8}
int target=7
美團
- Java物件生命周期
- GC機制
- Glide快取機制
- Glide對Bitmap是怎么優化的
- Okhttp請求流程
- Retrofit中的設計模式
- App啟動流程
- Apk打包流程
- 重構做了哪些作業
- 記憶體泄露,舉例場景
- LeakCanary實作原理
- Handler訊息機制
- 執行緒有哪些狀態
- Hybrid開發介紹
- Js功底怎么樣
- 未來職業規劃
嗶哩嗶哩
- MVC,MVP,MVVM的區別
- 使用MVVM有遇到什么問題嗎
- 協程原理
- 協程并發怎么處理的
- 熱修復原理
- 用熱修復的程序中有遇到什么問題嗎
- 啟動優化
- 包體積優化
- 繪制優化
- 全埋點是怎么做的
- Apk更新流程
- 多渠道打包
- 怎么辨別華為的包更新別的應用市場的包
- 演算法,插入排序原理
聲網
- 覺得做的最好的專案
- Jetpack用了哪些組件
- ViewModel如何資料共享
- ViewModel在Activity旋轉時如何保存資料的
- ViewModel怎么創建的,存在哪
- 使用ViewModel程序中有沒有遇到什么問題
- LiveData原理,怎么派發資料的
- postValue是怎么執行的
- 使用LiveData的程序中有沒有遇到什么問題
- 自定義View有哪些注意事項
- 簡單介紹一下協程
- 多個協程怎么保證資料安全的
- 演算法,輸入(H?O) ×2,輸出h4o2
掌門教育
- 筆試邏輯題
- Java有哪些資料結構
- Arraylist是執行緒安全的嗎
- String,StringBuilde,StringBuffer的區別
- Java中的鎖介紹一下,同步鎖舉例
- 四大參考區別,場景舉例
- Activity生命周期
- Fragment生命周期
- Fragment銷毀生命周期執行順序
- 自定義流程,舉例
- 自定義View重繪方式有哪些,執行流程
- 事件分發原理,舉例,延伸
- 滑動沖突怎么解決
- 怎么自己實作一個長按事件
- Service是哪個執行緒,怎么通信
- Handler訊息機制
- Handler發送訊息是一定立即執行的嗎
- Handler運行在哪個執行緒
- 子執行緒可以創建Handler嗎,寫法有哪些區別
- Kotlin定義變數的方式有哪些
- lateinit怎么確保使用時已經初始化
- let,run,apply介紹,區別
- inline原理
- 簡單介紹下協程
- 協程并發怎么處理
- 協程底層是怎么實作的
- 記憶體泄露原理,舉例場景
- 啟動優化
傳音控股
- 做的最有成就感的專案是哪個
- 印象最深刻的專案是哪個
- LiveData底層實作原理
- 啟動優化
- 包體積優化
- 自定義View流程
- View異步加載
- 有用過哪些設計模式
- 介紹一下單例,餓漢式,懶漢式,雙重鎖
- 代理模式和裝飾模式的區別
- 策略模式和狀態模式的區別
- 說說觀察者模式
- 有看過哪些三方庫的原始碼
- Glide四層快取機制
- AMS了解多少
得物
- 簡單介紹一下HashMap
- HashMap呼叫put的執行流程
- Activity啟動流程
- Binder機制
- Handler訊息機制
- Handler是怎么實作主執行緒和子執行緒的通信的
- Looper卡死為什么不會造成主執行緒的阻塞
- 了解過記憶體泄露嗎
- 是怎么發現記憶體泄露的,怎么處理的
- 線上的記憶體泄露是怎么監控的
- LeakCanary實作原理
- 軟參考和弱參考的區別
- 了解過ANR嗎
- 什么原因會造成ANR
- Activity的回應時間為什么是5s
- 事件分發機制
- 怎么解決滑動沖突的
- 錄音功能是怎么做的
- 編碼解碼相關
- 包體積優化做了哪些作業
哈啰出行
- 挑一個專案詳細說一下,以及相關技術堆疊
- 介紹一下協程機制
- 說一下Dispatchers,withContext,Scope他們的作用
- 說一下你理解的MVP,MVVM
- Flutter相關
- 性能優化做了哪些作業
- 編譯速度怎么提升的
- 記憶體泄露
- LeakCanary檢測原理
- 熱修復,Sophix原理,ClassLoader
- Apk打包流程
- 多執行緒并發,如何保證執行緒安全
- synchronized修飾方法和修飾代碼塊有什么區別
小紅書
- 技術調研你是怎么做的,會考慮哪些因素
- 說一下MVVM
- 用過Jetpack中的哪些組件
- LiveData是怎么做資料派發的
- ViewModel螢屏旋轉的時候怎么做到不丟失資料的
- 使用MVVM的程序中有遇到什么問題嗎
- 性能優化做了哪些作業
- 記憶體泄露有哪些場景
- LeakCanary檢測原理
- 如果讓你做一個自動化的工具去檢測圖片過大并自動壓縮你會怎么做
- 自定義View畫板是怎么做的
- 怎么檢測頁面的FPS
- Handler在onCreate中發送大量資料會導致主執行緒卡頓嗎
- LayoutInflater.inflate有幾個引數,分別是什么意思
其他廠整理補充
- Android中的Context了解多少
- Application里面可以彈窗嗎
- Activity、Window、View三者的關系
- OkHttp中有哪些設計模式
- Retrofit中有哪些設計模式
- Retrofit.create做了哪些作業
- 自定義一個圓角View
- 協程launch有哪些引數
- 說說by關鍵字
- 代理和委托的區別
- 雙親委托模式
- 有幾種獲取view寬高的方式
- view.post為什么可以獲取到
- getWidth和getMesureWidth的區別
- 手寫遍歷二叉樹
- 手寫雙重鎖單例
- 手寫插入排序
- 手寫雙陣列去重并排序
- 如何判斷鏈表有環
還有一些公司的沒有記,比如蔚來、中歐基金、阿里等,如果上面這些你能掌握大部分,自然也不在話下,
二面、三面技術
都是偏專案和綜合能力,因人而異就直接整理了,
- 你負責專案中的哪些模塊
- 介紹一下xx功能的流程
- 專案的架構是怎樣的
- Kotlin和Java混編有哪些需要注意的
- 專案中有遇到哪些難點
- 如果讓你重構,你會怎么做
- 學習的途徑有哪些
- 你覺得什么樣的代碼是好代碼
- 團隊是怎么分工的
- 怎么做需求管理
- 期望什么樣的團隊
- 怎么看待大前端方向
- 一個新技術如何在團隊里推廣
- 未來的規劃是什么,你打算怎么實作
- 認為自己的優點是什么,缺點是什么
- 為什么離職
HR面
整理,
- 為什么離職
- 介紹一下過往的作業經歷
- 在上家公司你有什么識訓嗎
- 目前看機會會考慮哪些因素
- 你在之前的團隊中是怎樣一個角色
- 有什么興趣愛好嗎
- 最有成就感的一件事
- 有沒有做過什么不可思議的事
- 你認為自己的優點是什么
- 最近有在看什么書嗎,有什么感想
- 你一般遇到問題都是怎么解決的
- 未來的職業規劃是什么
- 你對未來的公司有什么期望嗎
- 目前薪資
- 期望薪資
- 還有什么想要問我的嗎
技術要點
針對上面的問題,我總結了一下面試前需要掌握的一些知識點:
- Java基礎、Kotlin基礎、Android基礎(重要)
- App啟動流程
- Handler訊息機制
- View繪制流程
- 事件分發機制
- Jetpack常用組件原理
- Kotlin協程原理
- 性能優化
- 多執行緒、并發
- 組件化開發
- 熱修復原理
- 常用三方庫原理
- 常見的設計模式
- 資料結構和演算法
建議面前多練練手寫演算法,最好是拿筆在紙上寫,
關于演算法,不過是基于資料結構去操作資料的思想而已,
如果說限制了復雜度而想不出來的話,可以先寫再看如何優化,
Author : yechaoa
市場行情
目前并不是招聘旺季,但機會還是有的,
可能有些同學看了上面的面試題覺得卷,正常的,
現在市場越來越成熟穩定,對面試者的要求也更高,加上技術更新又快,從Java到Kotlin、到Flutter、到Compose等等,確實有很多東西要學,很多同學都表示學不動了,我覺得,盲目跟風不如好好沉淀,
另外,再從面試官的角度聊聊,
雖然說大部分面試確實是各種底層實作、底層原理、手寫演算法什么的,不過作為面試官來說,其實有些也并不是要你都掌握的,問的深,一方面是校驗八股文,另一方面主要是技術摸底,看看你的技術邊際在哪,所以說,一場面試下來,能答上大部分即是通過了,當然,越多越加分,
只要技術夠硬,都是機會,
如何寫好簡歷
簡歷是開啟面試的第一步,重要性不言而喻,一方面反應你的實力,另一方面也反應跟目標崗位的匹配度,不過很多JD都是復制粘貼,我個人也沒有動態改簡歷,
如何寫好簡歷,一定要簡潔且突出重點,我也面過不少人了,看過7-8頁的簡歷,有些專案經歷是沒必要全都往上寫的,面試官也看不過來,最好是保持在3頁左右比較合適,專案經歷比較豐富的同學,可以挑重點來寫,
我個人簡歷大概模板:
- 個人資訊
- 技能清單
- 作業經歷/專案經歷
- 開源專案/博客
- 教育經歷
我是MD排版,PDF格式,參考模板
投簡歷時有一個建議,不要開放簡歷,要主動投遞,開放簡歷會有各種邀請面試,也不好拒絕,就可能會因為沒準備好而錯失一些機會,可以先去其他公司找找感覺,再面心儀的公司,
另外,一定要對自己簡歷上寫的東西做到熟練,沒用過的,不會的就別寫了,萬一問了不會,就是在給自己挖坑,
自我介紹
自我介紹需要好好準備,因為這可能是你整個面試環節中唯一的主動機會,也是引導面試官的第一步,可以介紹最近的專案經歷啥的,以及相關技術堆疊等等,引導面試官往你擅長的領域提問,
挑重點不要啰嗦,時間控制在兩分鐘左右,
離職原因
這個其實大家都心知肚明,但是回答的時候還是委婉些的好,不抱怨原則,
不過HR總是有很多種問法,比如:
- 你在上家公司才做了一年多,為什么選擇離職呢?
- 你在上家公司已經做了四年多,為什么選擇離職呢?
回答建議:
- 想去更好的平臺
- 薪資與個人付出不成正比
- 公司業務方向與個人職業規劃出現偏離
關于公司倒閉,我個人覺得沒問題,但如果是干一家倒一家,那HR可能會否你…
職業規劃
很多都會問這個問題,相似問題,你最近在學什么技術,看什么書,
這塊很多同學其實會放松警惕,看似無關緊要,實則暗藏玄機,因為在求職程序中,在學在看的,可能是自己薄弱的地方,
比如你說未來想研究一下主流三方庫的原始碼,學習優秀的設計理念,看似好像很努力很上進,其實面試官聽到的是,主流三方庫我只會用,不知道原理,我就是個API呼叫師,(尬不尬?)
所以這塊的回答一定要有深度或者廣度,要有想象空間,但是不能太離譜,需要好好斟酌,
回答建議:
- 技術方向:要么全要么精,全堆疊或細分領域專家
- 管理方向:有較強的溝通能力、協作能力,希望能做團隊的領頭羊
關于心態
- 準備前,可能有些同學看到面試題已經不自信了,感覺自己一半都答不上來,這是正常的,人的記憶是有限的,慢慢復習就好了,放平心態,
- 面試中,可能有些同學會被問到自閉,其實大可不必,東邊不亮西邊亮,總有面試官會挖掘出你的亮點,而且面試中除了技術之外,也有很多客觀因素,比如面試官的心情、你的狀態等等,
- 面試后,好與壞都坦然接受,及時做好復盤,查漏補缺,才能在下一次面試中有更好的發揮,這也是一個
愈戰愈勇的程序,
學習方法
我個人是梳理知識樹,不會的就去補充,制定學習計劃,
我個人的學習方式:
- 看官方檔案,比如Kotlin檔案,第一遍快讀,有個大概印象,第二遍精讀,關注一些細節,
- 看書,還是Kotlin,先快讀,再重點精讀,我覺得比看視頻方便,可以劃重點記筆記,隨時可以停下來進入思考狀態,也很方便反復閱讀,主要是沒有干擾,
- 看相關開源專案,學習優秀的設計理念、代碼風格,三人行必有我師,
- 看一些針對性的博客,
- 實踐,這個很重要,紙上得來終覺淺,絕知此事要躬行,
其他注意事項
- 盡量不要遲到,不管是現場還是視頻,
- 如果是現場面試,記得關注當天的天氣,提前查一下路線,
- 如果要修改面試時間,提前一天跟HR溝通,
- 如果不去,不要直接放鴿子,跟HR說一聲,
- 手機電量保持充足,面前可以臨陣磨槍,
- 面試登記,字盡量寫的好認一些,個人作為面試官時,不好認的扣分,字如其人,代碼同理,
- 不要作假,編造一個謊言往往需要更多的謊言去圓它,
- 大廠一般面試周期較長,注意時間安排,
- 保持自信,保持自信,保持自信,
寄語
多思考,看問題盡量看透本質,
技術上的問題都能找到解決辦法,如何在思維上打通才是需要思考的,
舉個例子:
說一下Android系統啟動流程,
可能很多同學對這個問題沒有頭緒,或者看了也記不住,
回想一下Android平臺架構,相信大家對下面這張圖應該是很熟悉了,

ok,再次回到問題,簡單流程就是從電源鍵觸發喚醒Linux內核,然后虛擬機、Framework,最后System Apps,
先理解大致流程,再去串聯細節,比如其中涉及到的Zygote、AMS、Launcher等等,
最后
ok,終于啰嗦完了,不過句句發自肺腑,真心希望能幫助到一些同學,
祝大家都能在心儀的公司,拿著不錯的薪水,開心的寫bug~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/294198.html
標籤:java
上一篇:基于JavaSwing ATM取款機系統的設計和實作
下一篇:Java 陣列的使用
