Android實習面經彙總+總結——百度+字節跳動+創業公司(字節跳動+創業公司offer)

開場廢話

咳咳,介紹一下,我是來自西北地區某不知名一本郵電類院校的大三學生,在大一加入了移動應用開發實驗室,找實習階段面了三家,分別是百度、字節跳動和創業公司,拿到了字節和創業公司的offer,百度那邊,目前還在備胎池裏面泡着,問了兩次發佈招聘的那個人,都說三面消息還沒通知。創業公司是我第一個投用來熟悉面試的,畢竟人生第一次工作面試嘛。

實習差不多就這樣了,也不想當什麼offer收割機,字節跳動是我比較喜歡的公司,最終選擇去字節跳動。百度那邊就放棄了,本來也不想去百度,不喜歡他們的企業文化,對百度沒啥好印象,去年學長實習了兩週就被裁了,剛回到學校準備期末考試,結果就打電話說不用來了…

8、9、10、11月真的是超雞累,8月17暑假留校結束了,其他同學基本都回去了,而我又跑到學校來了,每天LeetCode10+道題目+35英語單詞。9月先是匆忙的趕完自己的第二個項目,然後就每天在整理補充學習過知識,寫筆記,寫博客,做簡歷,熟悉簡歷,面試準備…

到了週末也閒不下來,週六早早起來繼續學習。週日也是早早起來,刷幾個題,然後打LeetCode周賽,算法很重要啊,現在面試都比較重視算法能力,自己也比較喜歡做題練練思維。

下面兩張就是我近幾月的 contributions 、blogs,內推的時候也是收到了肥美二字好評。
在這裏插入圖片描述
在這裏插入圖片描述

我的一些感悟

  • 在做算法題時一定不要慌,儘量先暴力寫,寫的過程中思考思考怎麼優化,最後面試官肯定會問你還有優化的方法沒
  • 對於不熟悉的領域,不要直接說不會,儘量先扯一扯相關自己瞭解的,說不定就扯到自己熟悉的領域了
  • 對面試官的態度一定要好,根據面試官的性格,適度表現個人性格吧
  • 另外,對於複習,一定要紮實,不是說看一兩遍寫一兩遍就ok的,如果拿到自己的文章目錄,能做到流暢的將一系列知識講下來,這樣才能保證,面試中不卡殼。
  • 簡歷上的東西要很熟悉,不要埋坑
  • 還有就是需要準備一些智力題和擴展類的題目,我都不知道面試還會問這種問題,面試官說了一個智力題,我第一反應用hash做,但是面試官說讓我拋開計算機思維,這是一個高中生都能回答上來的問題。

百度一面面經

數據結構:

數組鏈表的區別、理解

棧和隊列理解

認爲最快的排序,快排思想、複雜度、二叉樹的理解、前中後遍歷

哈夫曼樹,順帶問了安卓的文件壓縮

穩定排序的理解

動態規劃、深搜廣搜,回溯

Java:

抽象類、接口的理解和區別

多態理解

面向對象的理解

hashmap的實現,計算hash、衝突解決、紅黑樹的理解

==和equal

值傳遞和引用傳遞

static、final關鍵字,拋出一個使用的場景分析

多線程

操作系統

線程進程理解、區別

Android中的多進程如何寫

Android:

上來先來一波四大組件,生命週期,場景分析

進程相關,應用默認幾個進程,如何實現多進程

Fragment理解,生命週期,項目如何使用的

RecyclerView相對ListView的優化,局部刷新,複用策略

Service的理解作用,所處的線程

ASyncTask實現,線程池和Handler

消息機制的原理

內存泄漏、OOM場景及解決

我項目View的優化,嵌套層次,性能檢測

介紹第二個項目,爲什麼寫這個項目。。一波亂吹

講了富文本的實現,圖片的加載

項目插件化的具體實現

分析了ClassLoader和部分Activity啓動流程

Intent如何替換的

插件資源如何加載,這個有些地方忘記了沒講清,整體邏輯沒問題

簡單介紹了VirtualAPK,說說其他的插件化方案

面了差不多一個小時,整體來說這個面試官很好,我答得也不錯,最後聊了點其他的,然後直接問我什麼時間能二面。

百度二面面經

這個面試官 emm 真能問,連問我1小時20分鐘,整整的80分鐘技術面,按着我的簡歷一個一個問,給問懵逼了

介紹第一個項目,介紹第二個項目,介紹平板端

講講LeakCanary的機制和源碼

講講OOM,除了內存不足還有哪些情況出現OOM

講講四大引用

Gson和自帶的解析庫的區別

View怎麼優化的

WebSocket怎麼寫的

token怎麼驗證的

斷點下載怎麼寫的

Handler機制,然後給了我很多問題讓我分析

Glide源碼

MVP、MVC

AMS有了解沒

hook的實現

插件化的實現

項目的適配

屏幕適配,UI適配

兩個題目

一根繩子1小時燒完,怎樣記錄30分鐘

一個數組的次大值

設計判斷一個應用進入了後臺的方法

GC、GCRoot

Android的ClassLoader

雙親委派

h5有用過沒

APP應用崩潰、ANR信息後臺收集

介紹ARouter

如何增快Activity的啓動速度

設計模式學過沒

觀察者模式

註解分類

學過C++沒

JNI瞭解不

View事件分發

自定義View寫過沒

百度三面

目前還在百度的備胎池裏面泡着,問了面試官兩次,都說三面還沒通知,結果出來會立刻打電話的

北京展心展力面經

這是一個創業公司,面試官人也挺好的。原本是面這個來試試的,結果先給百度我打電話了。

只有一面,面完有兩個HR加我微信,給我說了挺多的,很想留我到他們的公司,但是我還是希望去大廠,和HR也解釋了一些情況。

給我發了一個騰訊文檔鏈接,讓我先來做兩道題。

第一道,看程序寫結果。。
考了trycatch、++a、a++

第二道,求一個數的平方根的整數部分,很簡單,一個二分的題

但是面試官總說我的代碼有問題。我給他講了好幾波,最後面試官說他想錯了,嘿嘿

然後問了下熱更新

分別講了基於Instant Run和類加載的方案

講完面試官一時還沒反應過來Instant Run是啥

最後面試官也就沒多問其他東西,隨便聊了聊公司的情況。

字節跳動一面面經

感覺面試官超好,自我感覺,答的也不錯

自我介紹

介紹比賽

OKHttp源碼

AsyncTask原理

OKHttp的WebSocket,講了Websocket協議,還有OKHttp的封裝

RecyclerView的回收複用

LeakCanary原理源碼

OOM、內存泄漏,哈哈,每場面試必問套餐

Handler原理、Handler帶來的內存泄漏

MVP

ARouter原理源碼

如何加載插件中的class

如何實現插件中的資源加載

相比百度,字節問的Android問題輕鬆多了,就問了上面那麼多,主要針對簡歷問的,剛好簡歷也準備的特熟

講着講着,面試官都不讓我擴展講了,哈哈哈

然後考了幾個算法題

第一題 是一個看程序寫結果

記得沒錯的話應該就是下面這個

public static void main(String[] args) {
	Map<Short, Integer> map = new HashMap<>();
	for (Short i = 0; i < 100; i++) {
		map.put(i, 100 - i);
		map.remove(i - 1);
	}
	System.out.println(map.size());
}

沒答好,還以爲有坑

這個題考了自動拆裝箱和泛型,面試官最後問了我泛型的原理

第二題,一個文件,數據很多不能直接加載到內存,讓設計一個算法

我以前絕對看到過這個問題…但是。。沒打上來

我大概說了一下,肯定需要分組排序,最後還需要合併一下,好像和沒說一樣hh

面試官提示了一下,說可以使用文件臨時存一下結果

嗯,還是不會…

最後網上看了一下,發現差不多也就是我說的那個思路,只不過在最終歸併的時候,是使用文件指針,當所有的分支文件都訪問完時,那麼整體也就合併完了

第三題,一道很簡單的設計題

設計一個類似於優先隊列的結構,題目大概是這樣

實現一個PriorityQueue
一組優先級不同的任務進入隊列,出隊列的總是當前隊列中優先級最大的任務
示例:2、5、1、11、7依次入隊列,出隊列順序依次爲11、7、5、2、1
要求:實現入隊列、出隊列操作

面試官最後說可以用堆寫,不是特別熟悉優先隊列,不過我二分也是logN

字節跳動二面面經

這個面試官給我一種巨佬的感覺,emmm,很有氣場

都沒讓我自我介紹。。而且問的都是我不太熟悉的。。幾乎沒問我簡歷上的東西。

面試官全程不做記錄,到最後做題的時候,哐哐哐才敲鍵盤。

有用過Android的新佈局沒

常用那些佈局?然後圍繞着線性佈局和相對佈局說的挺多

問法和其他面試官不太一樣,再加上沒準備佈局面試相關的東西,答得不是很好,但是差不多能說出個一二

接着問了我平時寫佈局時,都做了那些優化,emmm,只好講項目做過的優化,但是不是他想要聽的回答

後來說到卡頓丟幀了,終於問道熟悉的了,然後我主動問他,需要我講一講framework層和native層之間屏幕刷新的本質嗎?我有看過安卓底層刷新的源碼。

然後分析了一下整個的請求邏輯,面試官聽後,感覺還是比較滿意的,就問我,平時是不是對framework研究挺多的?我瞬間就感到這是個坑,我就說,也不是太多,一般用到了就會追蹤到源碼看看實現。

然後就不問了,下來就是計網。

都問啥,記得不是很清楚了,大概有下面這些

tcp、udp 區別 + 應用

介紹一下http協議

瀏覽器輸入一個url發生了啥

DNS查詢

四揮

常見的響應碼

post和get的區別 + 應用

如何將get變爲post

一個報文基本的頭

這個面試官很摳細節,一些稍微不嚴謹的地方都會指出來

然後時間差不多了,問了三道算法題。

第一道

一個集合中,有數字1~1024,其中的數字是亂序的,現隨機插入一個x,求這個x
答得不是很好,面試官提示了一下才打上來

第二道

版本號比較,一個原題,很簡單,但是這個面試官很愛摳細節

第三道

一個沒有重複元素的數組,給一個target,求兩個數字和爲target的對數。

也很簡單,講了三種解法,O(n2)+O(nlogn)+O(n)

nlogn的要用到排序,順勢問了一下排序,然後讓我寫快排,此時已經面了1小時10分鐘了。。。

那還能怎樣呢,寫唄,寫了兩分鐘,面試官等不及了,說算了,假如現在這個數組就是有序的。

最後寫完後,又扣了幾個細節

最後就問幾個問題聊了聊。說還會有一常偏技術的面試…

字節跳動三面 + HR面

來自國外的一場三面,二面結束後刷了一波面經,基本上三面還是技術面,所以就準備了一些智力題,然後複習了一下以前做過的題

這個面試官人挺好的,苗總說是大leader,四大組件問的比較多,我ContentProvider沒有怎麼複習,被問到了,唉

四大組件還是好好複習,我把簡歷上的東西準備的特別熟悉,但是四大組件複習的不到位

項目中View做的優化

LeakCanary原理

Activity和Fragment的生命週期

Activity通信+傳值,startActivityForResult、EventBus(原理不知道)

Service是否會ANR

遠程Service、本地Service

對Service通信

Android跨進程通信,AIDL

常見的遠程Service

兩個進程通過一個文件實現跨進程通信什麼什麼的,問題記不太清了,我當時也沒答上來,應該是關於ContentProvider的

Bundle、Binder原理,不會

沒問算法,直接讓寫一個完整的生產者消費者模型,跪了,基本亂寫,以前就沒看過這個啊!爲啥會讓寫這個呢。。。最後瞭解到,Handler框架中是存在一個生產者消費者模型的,而我的簡歷上寫了對Handler消息框架有了更深入的理解…

第二天HR面,瞭解了一下學校的情況、實驗室,然後就介紹了一下工作的相關情況。

面試——自我介紹

面試官你好,我是來自西安郵電大學軟件工程系一名大三的學生。我由大一第一學期開始接觸計算機,在大一寒假通過閱讀書籍自學C語言,接着在大一第二學期加入了我們學校的移動應用開發實驗室,開始有規劃的學習安卓開發。

在加入實驗室後,首先是繼續熟悉、練習C語言,並完成了一個C語言版的圖書管理系統。接着在大一暑假,我們進行了暑假留校學習,通過大二學長給我們指定的計劃,開始學習Java基礎和安卓基礎。然後在大二開學,根據大三學長安排了一個仿寫任務,就是根據自己喜歡的APP進行UI和部分功能的仿寫。其主要是練習我們的UI編寫能力,熟悉Android四大組件。仿寫任務完成後,根據大三給我們安排的任務,我們繼續學習Android的一些進階知識,比如閱讀進階書籍,學習流行庫流行框架等等。

接下來,在大二寒假前有接觸到中國大學生服務外包創新創業大賽,我選擇了一個比較貼近安卓開發的一個命題,然後擔任項目負責人,尋找實驗室其他組內夥伴進行組隊。然後由寒假到大二的第二學期,就一直在準備比賽材料,籌備比賽的相關事宜,並完成自己的項目便捷會議,通過項目不斷擴充對安卓的學習。最終比賽也獲得了不錯的成績,拿到了全國二等獎。與此期間,我還擔任了我們實驗室安卓組的負責人,負責管理大一學生的學習計劃和學習任務。並對他們的學習情況定期進行考覈。

接着在大二的暑假留校期間,繼續擴充對Java、Android和其他知識的學習,提升自己的技術棧。並完成了個人第二個項目,我的貼吧。

面試——項目介紹

便捷會議 是一款可以簡化會議會議室管理的一套系統。他是企業根據一些現實問題提出的一個命題。整個大項目包括有四端,安卓客戶端、web客戶端、web管理端和門禁端(也就是安卓平板設備)。我完成了整個安卓客戶端的開發和部分門禁端的開發。

功能上。我的APP有比較完整的用戶系統,包括登錄註冊個人信息維護等,註冊時通過人臉識別,將人臉數據存放至後端,用於門禁端掃臉識別進行會議簽到。用戶可以選擇會議室,針對不同時段選擇預訂會議室。對於一場會議,用戶可以動態添加成員,上傳會議文件,預覽會議文件,發佈會議投票、編寫會議筆記等。當有會議和會議投票需要參與時,會提前給客戶發送通知。另外APP提供比較完整的數據可視化查詢,用戶可以根據不同的條件,查詢自己的出勤,各種會議信息。以圖表的形式直觀反饋給客戶。對於臨時遠程會議的需求,我們提供給用戶視頻會議,可以支持多用戶進行視頻通話。

技術上。整體UI基於導航欄+Fragment+ViewPager,網絡請求使用Okhttp,使用了webSocket建立長連接。使用RecyclerView展示各種會議會議室信息。使用AsyncTask+Service實現會議文件斷點下載。使用LeakCanary檢測內存泄漏解決應用OOM的問題。使用Handler更新UI。修改了部分View的嵌套層次,減輕主線程壓力,解決UI卡頓問題。另外,用戶操作使用token驗證保證操作安全。


我的貼吧 是一款貼吧類應用,功能上,用戶可以在社區發送相應話題的帖子,帖子內容支持富文本編輯,可以插入圖片文字超鏈接等等。其他用戶可以對帖子進行點贊收藏評論。用戶之間可以相互訪問資料並關注對方。另外有一個熱帖模塊,根據一些條件,篩選出熱度相對較高的帖子可供用戶查看。

技術上,項目採用MVP架構,使用ARouter進行組件化開發。利用SpannableString+各種Span+HTML實現富文本編輯和查看。對於熱帖模塊,手動實現插件化,動態加載APK。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章