七月底收到網易雲音樂的內推碼,並不抱希望能進去,就想着鍛鍊一下,做好了簡歷進行了投遞,也是第一次投遞,沒想到經過層層篩選拿到了offer,本人用了幾年網易雲音樂,也快十級了,能拿到這個offer真像做夢一樣
以下問題僅供參考,因爲每個人Android主要學的方向不一樣,所以每個人問到的問題肯定也會有所不同
8月中網易筆試
筆試是在牛客網上進行的,20道單選一共20分, 4道算法題一共80分, 2道問答題一共20分, 算法題一道也沒做出來, 第一題基本快做出來了, 問答題問了一道AIDL的, 我平時沒涉及到過,就沒做, 第二道題是問Handler, message, looper的, 大二跟着一篇博文好好看了一下源碼,有點印象,就答上了。
過幾天後網易一面
筆試完後其實就覺得自己掛了,畢竟一道算法題都沒做出來,這幾天也沒好好複習Android的,面試實屬來得有點突然,很多都是憑以前項目得記憶在答,其過程也比較緊張, 說話吞吞吐吐的,盡力去表達自己的想法
題目及回答:
- 自我介紹(簡單介紹了自己從大一入學到現在大三找工作期間的所學所做)
- 介紹項目及其所用技術(剛開始有點緊張,說得有點不清楚,說自己用到了多線程,netty,service, okhttp, 自定義View等,反正能說的儘量說)
- 多線程怎麼同步的(我說netty, notify, 消費者, 生產者模式, 阻塞隊列,又是能說的儘量說)
- Synchorized關鍵字修飾靜態方法與實例方法的區別(我直接就懵逼,跳過,後來去看了,主要是鎖的對象不同)
- 有沒有了解okhttp的底層(沒有, 不清楚, 又跳過, 其實很久以前看過一點點, 但都忘了)
- 網絡編程用了哪些(我說:okhttp, service, AsyncTask)
- http的header知道哪些(沒去看,pass)
- http code(當時懵逼了,就pass了,其實自己知道,就是200, 404 ,500這些code)
- TCP, UDP區別 (說:UDP是盡最大力量傳輸,協議簡單協議頭好像就8字節(其實就是8字節), TCP較複雜, 有擁塞控制,滑動窗口,三次握手,四次揮手,且面向連接)
- Android oom怎麼解決,有啥工具(我:handler內部類會與外部類綁定,可能會OOM,要記得在OnDestory中解綁與取消註冊等,使用軟引用或弱引用,在Application類中onLowMenory方法中釋放一些不必呀的資源,工具的話確實沒用過就說不知道)
- final關鍵字作用(我:修飾方法和類後使之不可改變,修飾變量時JVM會對其有所優化(這個是聽別人說的,其實自己並不清楚))
- 不小心提到了JVM,於是被問JVW GC(我不是很瞭解JVM就強答了一下,以前看過回收機制,說了python的引用計數,然後又說了Java的圖不可達)
- dp, sp, px的區別,其分別指代什麼(我:sp用於文字, dp和px差不多有2倍差距,具體多少記不得了, 但用過)
- 聽說你用過圖片裁剪,請問怎麼裁剪圖片的一部分(不太清楚,跳過)
- Android四種啓動模式與使用場景(基礎知識,恰好又複習到了,就直接答上)
- HashMap get與put實現(說了hash表的衝突解決,怎呢確定位置等)
- Android事件分發機制(以前跟着一篇博文好好看了源碼,但忘了很多了,想細說,但又說不清,面試官就叫我不要死扣細節,然後我就簡單說了個大概)
- handler, looper, message(大概說了looper啓動時就創建, handler發送message對象給messageQueue中,然後looper會調用loop方法去循環處理messageQueue中的message)
- 你說你使用到了換膚框架,你對換膚原理有所瞭解麼(我:以前看過,好像是重啓Activity,其他的也記不得了)
- Java堆和棧的區別(很久以前看過,也忘了,當時也沒答上)
最後問我有啥問題,我就問面試完後還有幾輪面試,我這次面試結果多久能出來(當時沒準備這些,也不知道怎麼問,就隨便問了)
整個面試過程差不多半個多小時,主要問題就是第一次面試緊張,沒經驗,不瞭解底層
兩天後小米一面
- 接口和抽象類的區別(看過, 說了面向接口編程,回調,抽象類能幫子類進行一些邏輯封裝等)
- Java裏屬於值傳遞還是引用傳遞(我說都有,然後還分析了一波,結果他說只有值傳遞…)
- Java基本數據類型有哪些
- hashMap實現原理
- Synchorized關鍵字作用
- ==和equals區別
- 主方法中有一個String a = “一個字符串”, 傳入一個方法中 a = new String(“另一個字符串”),那麼a = ?
- Android四種啓動模式及其應用
- Android中從A活動到B活動的執行生命週期
- 反射有了解麼,在Android中的應用?
- OOM可以被捕獲麼?(很奇怪的問題,當時分析了一波,分析到了Android虛擬機和內核,說可以被捕獲,其實確實可以被捕獲,try…catch中的可以)
- 斐波那契數的遞歸會導致什麼異常(Stackoverflow)
- 一道算法題(一個人站在一棵二叉樹哦的左邊,問能看到哪些節點,打印出來,面試官很好,引導我,然後我寫了一個層次遍歷,還是沒做出來,但也沒做多久)
- 講一下設計模式六大原則
- ArrayList和LinkedList區別
- Android6.0, 7.0, 8.0 新特新
- 重寫equals與重寫hashcode
小米一面的收穫很大,首先第一個問題就告訴我不要着急回答問題,你可以思考一下,然後很多問題其實都是一起在答,或者說引導我,比如設計模式那個,還問我面向接口編程,接下一句話,我說:不要面向實現,而且自從小米一面後,我的網易二面及現場面都不緊張了,回答不上的問題,想一下再說,不要急
不久後網易二面
- 叫我不要緊張,自我介紹(還是介紹自己大一到大三所學所做)
- 讓我講述一下第一個項目,用了什麼技術,有自己覺得做的很好的地方麼,有哪些難點?(第一個項目有點久遠了,介紹了一些遇到的困難,主要是邏輯很複雜,然後又是因爲這是自己初學Android的第一個項目,感覺做得有點難受)
- 你多線程用在哪?線程同步體現哪?
- AsyncTask源碼有看麼(我說:沒看,但我知道它其實就是一個擁有5個核心線程128個最大線程的線程池)
- 在那個項目中爲什麼不用線程池(沒必要,線程不多,也不會經常創建刪除,另外就是當時剛做這個時不太瞭解線程池)
- okhttp使用過程講一下(因爲一面問過我,所以我連源碼都去看了,先講了全局共享的okhttpClient然後講了okhttp中有一個線程池,然後講了一下使用流程)
- 你講講第二個APP你主要用了什麼技術,怎麼實現的(第二個APP我全程操刀,還重構了一次代碼,所以印象較爲深刻,然後主要講了自定義View,事件分發機制,其實用的東西並不多,主要是界面)
- 我看你APP中有很多按鈕都是文字加圖標的形式,你是怎麼實現的(相對佈局加drawable文件中的layer)
- 你爲什麼用TextView放圖標,你的圖片爲啥不用ImageView(我說我用的圖標都是矢量圖)
- 你首界面的View是怎麼實現的,用到了canvas的旋轉麼?(沒用,講了Android座標系,然後說我都是用數學的方式計算出位置來的,比如距離頂部1/16 * height等等)
- 自定義View怎麼實現(複雜的View可以繼承自ViewGroup,在裏面可以做很多操作,比如layout佈局,添加其他View控件,或者是View的onDraw方法,直接進行繪製我那個自定義View就是這麼實現的)
- 你說到了ViewGroup,你說下ViewGroup中經常重寫的幾個方法(onLayout用於佈局,onMeasure用於測量控件大小,還有就是構造方法中可以自定義xml屬性等)
- 你怎麼實現取色的?(我說:不是有一個十字麼?移動放大縮小圖片中自己想要的點到十字處去,然後通過數學的方式,計算這個點對應圖片中點的位置,取出其RGB值)
- 你講講事件分發機制,你怎麼用的?(我:在切換頁卡時滑動事件可能會與圖片的滑動事件相沖突,所以這裏就要對點擊滑動事件進行判斷,判斷其點擊位置,然後確定是滑動圖片還是滑動頁卡)
- 你這個彈窗是怎麼實現的?(我:popWindow)那你講一下(就簡單講了一下)
- 用過Dialog麼?(我:用過)瞭解麼?(我:不太瞭解,平時就只是把它當作普通的對話框使用)
- dp, px,sp(複習漏了…)
- 你說你有參加過ACM比賽,講一下(我:12月份去交通大學參加的,當時我做了一道題,是說一個m * n的矩形,判斷是否能夠折成一個正方體,題目給出了邊長爲1的正方體的所有展開圖,其實算不上什麼算法,應該算是根據小問題推解大問題的過程,當時險些做出來,就差零點零幾毫秒)
- 除此之外,你還做了哪些東西?(我:做了很多demo,跟着網上的教程還做了一個電商APP,學到了簡單的組件化開發,學做了一個網絡請求框架,接觸了Fragment的一個框架,還知道了Fragment懶加載)
- Fragment講一下,懶加載怎麼實現的?(簡單回答)
- 你爲什麼不在你的第二個APP中使用Fragment呢?
- 你最近有學什麼新技術麼?
我的問題:
23. 你覺得我在這次面試中有哪些回答得較好,哪些回答較差(他說:總的來說還不錯,挺好的)
24. 你覺得對於我這種應屆生, 所應聘的這個崗位,我還差哪點,哪些技術棧(他說,其實的話,主要還是缺乏實踐,真正的項目不像你平時做的demo那樣,會考慮到很多,必須測試通過,還需要很多項目經驗)
25. 日常問面試結果通知時間
8月28號網易現場HR面
到了現場面其實反而不緊張了
- 自我介紹
- 講一下你最得意的APP(第二個)
- 這個APP有哪些技術難點(數學計算困難)
- 你是怎麼學習Android的(csdn, 簡書, GitHub拉項目看代碼)
- 你覺得杭州怎麼樣
- 你有哪些興趣愛好
- 你有哪些缺點
- 對於上午的宣講你有什麼建議
- 你單身麼?
- 你爲什麼不去實習
- 你有沒有想過考研
8月28號網易現場總監面
總監面感覺很難,很多都答不上
- 自我介紹
- 創新實驗室是什麼?
- ViewPager滑動卡頓(已經懶加載,頁面自定義View也優化)
- okhttp源碼
- handler, message, looper
- 裁剪圖片
- http, header中與緩存相關的頭
- cookie是個啥
- OKIO有了解麼
- 數據庫索引
- 組件化開發,什麼是組件化,組件應該滿足什麼條件
- 日常生活中你是如何避免重複工作的
- View動畫實現方式
- 最近有在瞭解新技術麼
- 怎麼學習Android的?
- 換膚原理,有了解換膚框架原理麼?
- 爲什麼大三不實習
- 爲什麼想搞一個換膚呢?具體需求?
- 自定義View中有一個四參構造方法,請問後兩個形參作用?
另外本人雙非大學,連四級都沒過,但現在大四,打算大學裏面把它過了,能拿到offer真的很意外也很高興,也感謝網易,讓我第一次做了飛機,哈哈哈,坐飛機去的,然後又做動車回來,賊累,網易食堂確實好吃,但是人蠻多的,特別又是夏天,比較熱,也祝大家都能拿到心儀的offer
最後貼上幾張自己做的那個APP的截圖吧