20年初失業後敗下陣的Android中大廠面試經歷,整理打包成了多份面試題分享出來

在2019年10月初,公司倒閉,後來無奈走上找工作的道路,不想自己平時圖安逸,不思進取,再次找工作才發現,Android行業也不是站在風口上,豬也能吹上天的世道了。作爲技術小菜的我,再找工作那幾個月真是戰戰兢兢,被打擊得信心全無。記錄下我的面試經歷,分享給需要的人。勉勵自己要時時進步,纔不會被淘汰。

獵豹移動(有筆試)

  • atomicinteger內存模型
  • static編譯時有啥不同,static 語句塊,static變量,static方法,構造初始化順序(靜態綁定)
  • animation和animator的用法,概述實現原理
  • Handler,looper,messagequeue,thread,message,每個類功能,關係?
  • Mvc,mvp的差異
  • app閃退的原因有哪些?每種情況簡述分析過程
  • 如果一個app存在多進程,請列出全部的ipc方法
  • 操作系統中進程和線程有什麼聯繫和區別,系統什麼時候會在用戶態和內核態中切換?- 如何加載ndk庫?如何在jni中註冊native函數,有幾種註冊方式?
  • 一個app如果性能不好,怎麼分析?

餓了麼(無筆試)

  • 設計的六大原則
  • 如果hashmap key不一樣,但是hashcode一樣會怎麼樣?
  • okhttp有什麼優秀的設計模式?builder模式有什麼好處?責任鏈模式有什麼好處?
  • 懶漢模式單例爲什麼加volaitle?
  • hashmap是否線程安全?不安全會出什麼問題?
  • concurrenthashmap讀寫分別是啥情況?
  • bindservice和startservice生命週期有啥不同?
  • 廣播有幾種?廣播是觀察者模式?跨進城廣播也是觀察者模式嗎?
  • ams是怎麼找到啓動的那個activity的?
  • a-b-c界面,其中b是singleinstance的,那麼c界面點back返回a界面,爲什麼?怎麼管理棧的?
  • 紅黑樹有啥特性?
  • 在oncreate裏面可以得到view的寬高嗎?
  • view的getwidth和getmesurewidth有啥區別?
  • 遍歷hashmap的原理?
  • 23種設計模式

中園博林(有筆試)

  • 如何避免out of menmory和anr?
  • arraymap和hashmap的區別?
  • 如何實現線程同步?
  • 簡述android事件分發機制
  • 簡述view繪製流程
  • 用兩個棧實現一個隊列
  • 口頭問viewpager嵌套滑動衝突怎麼解決?
  • svg動畫
  • 屬性動畫畫一個拋物線怎麼弄?

立思辰(無筆試)

  • 爲了適配多分辨率,引入什麼開源框架?
  • 閱讀界面書架用什麼控件實現?
    -佈局怎麼做到每行的文字左右對齊?
  • 直播界面,微信對話界面實現?
  • 性能優化怎麼弄?

vv音樂(有筆試)

  • sax解析xml的優點
  • Contentvalue 鍵值類型
  • androiddvm的進程與linux的進程說法正確的是?(選擇題)
  • Android:gravity和android:layout_gravity的區別?
  • assets與res/raw的區別?
  • 解釋layout_weight的作用view如何刷新?
  • animation.animationlistner幹什麼用的?
  • android常用佈局及排版效率
  • collection與collections的區別
  • 匿名內部類是否可以extends其他類?是否可以implement interface(接口)
  • 補間動畫常見的效果?有哪幾個常見的插入器?
  • override與overload的區別?overloaded的方法是否可以改變返回值的類型?
  • sleep與wait有什麼區別?
  • 在android中,請簡述jni的調用過程?請結束android.mk的作用,並試寫一個android.mk文件(包含一個.c源文件即可)
  • 冒泡排序(代碼實現)
  • 猴子偷桃問題代碼實現
  • 給出兩個鏈表的頭指針比如p1,p2,判斷這兩個鏈表是否相交,寫出主要思路即可
口頭問
  • 簡述封裝,繼承,多態
  • 強軟弱虛引用的應用場合輸出一個數組,不重複?(有點忘記題目什麼意思了)
  • 用四個線程計算數組和(我說用join方法,或者countdownlatch,他說用線程池即可)
  • 什麼叫安全發佈對象(多線程裏面)final?
  • 策略模式和命令模式是啥?
  • 拓撲排序
  • 數組和鏈表在中間位置的插入效率
  • binder的原理
  • art和dvm在gc上有啥不同?有啥改進?
  • linux和windows下進程怎麼通信的?(完全不瞭解)
  • 性能優化做過什麼工作?
  • 一個類實現一個接口,接口引用指向這個類對象,可以不可以調用它的tostring方法?
  • 瀏覽器,輸入url匹配,假設有一億條url緩存,用什麼數據結構匹配?
  • recycleview緩存機制相比listview緩存機制有啥改進?
  • 一個長度爲10的arraylist和linklist,在第五條插入,哪個更快?
  • 子類複寫父類的equals方法,但是子類增加了一個成員變量int,請問equals方法咋整?

大數醫療(有筆試)

  • 手寫hashmap
  • 寫生產者消費者模式,不可用syncronized
  • treemap,hashmap應用場景

字節跳動(無筆試)

  • dvm和art的區別
  • 從framework的角度講activity的啓動流程(冷啓動)
  • 手寫算法,二維數組,每一行,每一列都是升序,找出某數的下標,沒有輸出[-1,-1],最好的時間複雜度是m+n(行數+列數)
  • zxing二維碼開源框架流程
  • contentprovider怎麼升級維護?
  • constaintlayout
  • bitmap有幾種格式,分別佔多少字節

滴滴出行(無筆試)

  • android事件分發機制,如何下發,如何上傳?
  • 一個界面下拉刷新要怎麼實現?
  • bitmap佔用內存多少怎麼計算?一個像素佔幾個字節?
  • threadlocal的原理?
  • framework加載activity的流程
  • arraylist和linkedlist的應用場景
  • 網絡請求相關的框架
  • 好幾萬條短信,滑動卡頓怎麼解決?
  • 有沒有了解過三方開源數據庫(好像是騰訊的什麼數據庫框架,不僅僅是懂sqlite)
  • 避免內存泄漏,爲什麼說handler用成員內部類會內存泄漏?activity不是已經到gcroot被切斷了嗎?還有靜態context持有activity的引用會內存泄漏,必須要持有怎麼辦?(及時釋放)
  • 計算viewgroup的層級,遞歸實現和非遞歸實現
  • 自己寫一個應用,包名就叫android行不行,爲什麼?
  • 主線程looper如果沒有消息,就會阻塞在那,爲什麼不回anr?
  • 系統進程可以用webview嗎?
  • 原子類的瞭解一個app多進程的好處
  • 一個arraylist,裏面全部是int,講所有值是2的整數的節點刪除
  • arraymap瞭解
  • binder機制
  • shareprefrence原理?是否線程安全和進程安全?
  • 一個app啓動頁另開一個進程,啓動頁10s後啓動mainactivity,請問5s的時候有幾個進程?
  • java內存結構,內存模型

融雲(有筆試)

  • 冒泡排序手寫
  • 如何判斷一個字符串是迴文字符串

梧桐車聯(電話面試沒過)

  • 爲什麼要引入activity這個組件
  • shareprefrence不是進程安全,假設一個apk兩個進程同時修改shareprefrence怎麼辦?
  • contenprovider已經是進程間通信,爲什麼還要引入broadcastreceiver?
  • a啓動b,b啓動c,怎樣可以在c界面點back退回到a?
  • startservice和bindservice生命週期有什麼不同?
  • 兩個應用同時註冊一個廣播,優先級都一樣,哪個會先收到廣播?(有序廣播?)
  • 還有些其他的,忘記了

螞蟻金服(電話面試沒過)

  • threadlocal原理
  • zxing有過優化提高識別率嗎?

京東

  • arraylist裏面可以不可以new一個t泛型的數組?
  • 補間動畫click事件還在原位怎麼解決?
  • 多線程併發
  • 隔代數據庫升級
  • 性能優化

面試大廠前的系統複習路線

有時候,選擇比努力更加重要,機遇比奮鬥更加重要。但是,機會只留給有準備的人。我們只有時刻準備着,才能在機會到來的時候,去抓住它。

這裏給大家分享一下我的面試複習路線,有需要的朋友可以參考一下:

1、看視頻進行系統學習

前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。

2、進行系統梳理知識,提升儲備

客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

系統學習方向:

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

3、讀源碼,看實戰筆記,學習大神思路

“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。

4、面試前夕,刷題衝刺

面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。

關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。

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