前言
一眨眼又到年底了,每到這個時候,我們都會慢慢反思,這一年都做了什麼?有什麼進步?年初的計劃都實現了嗎?明年年初有跳槽的底氣了嗎?
況且2020年我們經歷了新冠疫情的洗禮,很多程序員都經歷了失業,找工作的恐慌。導致今年的互聯網環境太差,需要自己有足夠的知識儲備,才能夠應對這凌冽的寒風。
本文主要是整理了中高級Android需要會的(或者說面試被頻繁問到的內容), 主要作爲參考大綱,之後會陸續更新每個詳細部分,供大家參考,互相學習。
面試參考大綱知識圖譜
2020面試題精選分享
騰訊面試題分享
一面 42min 電話面試
- 項目經歷,開發中遇到什麼問題,最後怎麼解決的
- TCP三次握手,擁塞控制
- 一面更多的是聊項目,面試官沒有問太多基礎的知識,面試官主要是在我介紹自己項目的時候切入問問題,整個過程氛圍很開心。
二面 45min 視頻面試 3.21
- 安卓的設計模式有沒有了解,工廠模式之類的
- IPC,多線程
- hashmap相關
- 擴容因子
- hashmap與hashtable區別
- hashmap重寫了equals方法但是不重寫hashcode方***怎麼樣
- haspmap查找的時間複雜度,可不可以優化
- 我說把鏈表改成雙向鏈表,還可以改成avl樹,b樹,b+樹,減少查找的時間複雜度。
- 計網三次握手,四次揮手
- 兩道算法
- 一個簡單博弈問題,兩個人分別選擇最大的數直到選完,求最後兩個手上數的和之差,實際上是排序就行了,重點在排序算法的選擇,可以直接用C++的sort函數,我自己手寫了歸併排序來用。
- 提供一種大小爲N的CD,還告訴你有兩種大小A,B的歌,每種歌的數量也告訴你爲x,y,往CD裏放歌,儘量利用CD的空間能放多少放多少,每首歌不可拆分放,可用的CD總數不限,求有多少種排列方式。最後理了思路,就是用遞歸就行了。
- 項目相關,開發中遇到的問題及解決辦法
- 問面試官問題,問的是面試官您認爲哪些能力是更重要的,面試官說是基礎更重要——數據結構,計網,算法。
三面 2h10min 視頻面試 3.25
- 操作系統相關知識
- 棧內存,堆內存
- 進程,線程
- 競爭
- 計網
- TCP三次握手
- TCP擁塞控制
- 瀏覽器訪問網址,具體發生了什麼
- DNS協議怎麼工作的
- 安卓相關知識
- activity生命週期
- 爲什麼要有任務棧,任務棧有什麼作用
- viewholder的作用
- view繪製過程
- view,window和activity之間的區別
- OOM什麼情況會發生,怎麼解決
- 兩道算法題
- a[100]中逐個填1~100的隨機數,且不能重複
- 大數相乘
- 項目經歷,開發中遇到的問題及解決辦法
- 談談你的優點
- 你之前騰訊面試失敗,是爲什麼,那兩道題爲什麼沒做出來
- 那道題是輸入一個字符串,從中刪除n個字符,剩下的字符構成迴文串,求n的最小值,確實難;另一題是無權圖中兩點最短路徑,思路很簡單就是BFS
- 最後問問題環節
- 第一個問題問的依舊是,面試官您認爲哪方面的能力或者是能力更重要,面試官說基礎,操作系統,計網,數據結構算法這些。其實我的操作系統真的不夠好,這次面試最大的問題就是這個了。
- 最後問了面試官才知道,是QQ部門的。。。
阿里巴巴
電話一面
- 起手式:自我介紹
- 介紹下簡歷上的項目
- 線程池的使用,線程池如何實現的,線程池的原理
- Thread 的join 函數的作用
- java 線程間通信的方法有哪些
- Android handler 機制,源代碼
- juc atomicInteger 類爲什麼能保持線程安全,普通的變量爲什麼不能保證線程安全
- java 內存模型(問了我有沒有閱讀過JSR 133的官方文檔?並沒有,很慚愧,感覺學的路子有點野)
- java 內存分區
- concurrentHashMap 的原理
- 100以內,10萬以內,10萬到無窮個數,三種情況排序,選擇排序算法
- 你有什麼要問我的?(問了一些技術相關的問題)
一面是在過完年後回實驗室第一天就面了,過了年,很多知識都忘記了,回答得比較一般,所以碼代碼這事兒,真是和醫生的手術刀一樣,要天天摸着纔是好。
電話二面
一面和二面隔得確實比較久,期間讓老同學幫我查了進度,所以喊我再等等。三週後,迎來了阿里二面。二面的面試官是手淘的負責人,面試中給人一種感覺是比較開放,自由的,感覺到了一種高水準技術流派的畫風。
- 願意不願意來杭州
- 自我介紹
- java的gc(gc工作原理,gc回收機制,gc內存分配)
- http和https區別
- http報文結構
- http 報文頭部含有什麼
- 你最拿手的項目是什麼(回答了和同學做的開源項目,並且介紹瞭如何做的)
- 手寫代碼:跳臺階問題
- 你有什麼問題要問我嗎?
電話三面(有點忘記了)
三面是淘寶技術部的老大,整個人感覺思維縝密,對細節很注重。
- 自我介紹
- 問項目,問有沒有看過項目裏面的底層源代碼
- Nodejs 到了什麼水平,大致說下對Nodejs的理解
- 你有什麼問題要問我嗎?
電話交叉面
交叉面是阿里北京部門的,當時接到面試電話的時候,還是有點驚訝,沒有做好交叉面的準備,感覺交叉面就面得不那麼理想
- 自我介紹
- SS助手是什麼項目,大致說下
- 有實習經歷嗎
- 白盒是個什麼概念?白盒的安全性依靠什麼保證?白盒可以用於網絡流傳輸嗎?
- ImageLoader的框架,淘寶app圖片的緩存設計方案(沒有回答上來)
- 你有什麼問題要問我嗎?
hr面
風景如畫的小姐姐,說話很溫柔,問了些和生活,個人規劃相關的問題。
- 你對阿里面試官的印象如何?你從面試官上學到了哪些東西
- 你每天的生活安排是什麼樣子的?
- 你爲什麼選擇來阿里?
- 阿里的開源框架用了哪些呢?說說weex?
- 你以後的技術規劃是什麼樣的?
- 你最有成就的項目是哪個?
- 爲什麼選擇android開發?
- 爲什麼選擇nodejs開發作爲第二條技術路線?
- 你有什麼要問我的嗎?(問了面試官入職培訓)
今日頭條
一面:
協變
線程間通信?有幾種同步/加鎖方式?
進程間通信?答了三個只知道概念的和安卓的AIDL。
又問這“三個”中任選一個闡述原理
hashCode()方法實現
hashCode()方法 equals()方法相互聯繫?
ActivityA啓動ActivityB,兩者的生命週期分別是怎樣的,是順序執行的嗎?
用過哪些框架,答曰RxJava,Retrofit,Realm,問哪一個熟悉一點?都不太熟……就隨便挑了一個OKHttp來問:http請求中keep-alive保存長連接的實現原理是怎樣的?
LRUCache原理,如何實現?
手撕代碼,股票買入買進最佳時機,LeetCode上原題(有6道變形)
二分查找,寫的遞歸,要求轉成循環方式
二面:
內部類和外部類有什麼區別?
靜態內部類和非靜態的有什麼區別?
內部類爲什麼可以訪問外部類的變量?
垃圾回收:如果兩個變量互相引用是否還會回收它們?爲什麼?
標記整理算法是怎樣的?爲什麼要前挪整理?
HashMap不是線程安全的,那麼用什麼替代?(本來是知道的,結果我多問了一句傻話面試官就跳過這個問題了……
(因爲項目提到)Realm版本管理?更新表?
CoordinatorLayout與通常的FrameLayout和RelativeLayout相比有什麼特點
View的繪製過程
(這次面試電腦麥克風出了問題 在手機面的)草草問了一下跳臺階問題
三面:
(因爲項目提到)SurfaceView的特點?瞭解相關的TextureView嗎?
HashMap的結構是怎樣的,怎麼存value,遇到相同的hash值的key,其value又怎麼存。
手撕代碼,想第二種解法,想第三種解法;
用快排來解決這個問題,優化,再優化。
有什麼想問的?問建議學習路線,面試官建議就死磕官方源碼就好,開源庫的源碼也多看。看不懂看別人解析也可以。
總結:面試和必備的技能
這裏只簡單列舉一些東西,可能不是特別全,但是卻特別適用,也不一定按照下面的流程,有可能是穿插的,也有可能都有,根據公司的規模以及面試官的心情而定(哈哈哈 ,你們就自求多福吧)。建議大家還是要將下面的東西全部掌握,沒事寫寫代碼,練練手,在項目中能用到的地方一定要用,有可能會遇到很多坑,一定要自己想辦法填坑,之後回憶起這段經歷,肯定可以敢理直氣壯的跟別人討論。如果你說的頭頭是道,那麼對方會先輸一層,然後在心裏對你佩服。
1.一般情況下第一輪都是基礎面試,需要紮實的基礎
- 最常用的Android 基礎知識
- Java 基礎知識
- 瞭解一些 常用東西的原理,例如:handler, thread 等
- 項目中的技術點
2.第二輪的時候需要了解更深層次的東西
- Android 事件分發機制原理
- Android 繪圖機制原理
- WindowManager 的相關知識
- 進程間傳輸方式
- Java 內存管理機制
- 一些常用的 list,map 原理,以及子類之間的差別
3.能進入第三輪基本沒什麼問題,但是要注意以下問題
- 該輪一般是 老大或者部門負責人,問的問題一般都看 深度與廣度
- 當問及薪水的時候,要說一個合適的,小公司隨意,大公司一定要慎重,當心裏沒底的時候,可以告訴對方,讓對方給一個合理的薪資。一般都是在原工資基礎之上增長,聽獵頭說一般漲幅都在15%-30%,超 NB 的可以要30%及以上,如果感覺自己還不錯的,挺厲害的,建議最高20%,一般人就定在15% 左右最靠譜。公司內部一般有一套機制,根據公司情況而定。
- 我們的面試原則就是拿到合理薪資,得到 offer
- 個人發展情況,這個問題很難回答,如果和公司方向不符合,極有可能和公司無緣。建議多試探性的問問公司缺少什麼,你能否給予公司對應的東西。當然對於有自我追求的人,那可以放心大膽的提。我的方向就是架構師,哈哈哈,挺極端的,別學我哦。我感覺選擇都是雙向的,因此我知道自己需要的是什麼。
- 你最擅長什麼UI 還是其他什麼?這個問題更不好回答。你要說你擅長 UI,是不是意味着你其他能力就不行?雖然我不知道面試官的用意,但是我能感覺到,這個問題不是那麼好回答,我會回答說自己都行,來什麼業務接什麼需求。可能回答不太好,總之和公司的職位吻合就行,這樣總不至於出錯吧。
尾聲
每個程序員朋友都有自己的架構師夢,可往往夢想是美好的,現實又是殘酷至極的。不努力不奮鬥,可能就會在基層一輩子止步不前。也許有很多朋友還會說,程序員也是乾的年輕飯,年紀大了也就爬不上了,腦子跟身體都跟不上了。那既如此,又爲何不趁着自己還年輕,好好把握機會,努力一把,美好的未來纔有機會和你招手!當然咯,這也僅僅代表我個人的觀點,畢竟一百個人有一百個不同的腦子,就會有成千上萬種不同的想法。
不過,只一句,如果你還在做這一行,還是一名程序猿(媛),想走上坡路的你,也許我這到手的學習進階筆記 可能會對你有所幫助。
-
自行下載直達領取鏈接:【點擊我,即可獲得!】
《Android高級架構師面試指導+2020大廠面試真題》
四份大廠面試題(基礎+中高級+HR面)+面試指導2537頁 合集