Ⅰ android面試題會出現什麼內容
這是一篇介紹android面試題的文章,下面就讓我們一起來了解一下吧!
1.android dvm 的進程和linux的進程,應用程序的進程是否為同一個概念:
答:dvm是dalivk虛擬機。每一個android應用程序都在自己的進程中運行,都擁有一個dalivk虛擬機實例。而每一個dvm都是在linux的一個進程。所以說可以認為是同一個概念。
2.android的動畫有哪幾種?他們的特點和區別是什麼?
答:兩種,一種是tween動畫,一種是frame動畫。tween動畫,這種實現方式可以使視圖組件移動,放大或縮小以及產生透明度的變化。frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。
3.handler進制的原理:
答:android提供了handler和looper來滿足線程間的通信。Handler先進先出原則。looper用來管理特定線程內對象之間的消息交換(message Exchange).
1)looper:一個線程可以產生一個looper對象,由它來管理此線程里的message queue(消息隊列)
2)handler:你可以構造一個handler對象來與looper溝通,以便push新消息到messagequeue里;或者接收looper(從messagequeue里取出)所送來的消息。
3)messagequeue:用來存放線程放入的消息。
4)線程:UI thread 通常就是main thread,而android啟動程序時會為它建立一個message queue.
4.android view的刷新:
答:Android中對View的更新有很多種方式,使用時要區分不同的應用場合。我感覺最要緊的是分清:多線程和雙緩沖的使用情況。
1).不使用多線程和雙緩沖
這種情況最簡單了,一般只是希望在View發生改變時對UI進行重繪。你只需在Activity中顯式地調用View對象中的invalidate()方法即可。系統會自動調用 View的onDraw()方法。
2).使用多線程和不使用雙緩沖
這種情況需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報:android.view.ViewRoot$:Only the originalthread that created a view hierarchy can touch its views.
這時候你需要創建一個繼承了android.os.Handler的子類,並重寫handleMessage(Messagemsg)方法。android.os.Handler是能發送和處理消息的,你需要在Activity中發出更新UI的消息,然後再你的Handler(可以使用匿名內部類)中處理消息(因為匿名內部類可以訪問父類變數,你可以直接調用View對象中的invalidate()方法 )。也就是說:在新線程創建並發送一個Message,然後再主線程中捕獲、處理該消息。
3).使用多線程和雙緩沖
Android中SurfaceView是View的子類,她同時也實現了雙緩沖。你可以定義一個她的子類並實現SurfaceHolder.Callback介面。由於實現SurfaceHolder.Callback介面,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中lockCanvas()方法可以鎖定畫布,繪制玩新的圖像後調用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。
5.說說mvc模式的原理,它在android中的運用:
答:android的官方建議應用程序的開發採用mvc模式。何謂mvc?
mvc是model,view,controller的縮寫,mvc包含三個部分:
l模型(model)對象:是應用程序的主體部分,所有的業務邏輯都應該寫在該層。
2視圖(view)對象:是應用程序中負責生成用戶界面的部分。也是在整個mvc架構中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結果。
3控制器(control)對象:是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,想用用戶出發的相關事件,交給m哦得了處理。
android鼓勵弱耦合和組件的重用,在android中mvc的具體體現如下:
1)視圖層(view):一般採用xml文件進行界面的描述,使用的時候可以非常方便的引入,當然,如何你對android了解的比較的多了話,就一定 可以想到在android中也可以使用javascript+html等的方式作為view層,當然這里需要進行java和javascript之間的通 信,幸運的是,android提供了它們之間非常方便的通信實現。
2)控制層(controller):android的控制層的重 任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業務邏輯層處理, 這樣做的另外一個原因是android中的acitivity的響應時間是5s,如果耗時的操作放在這里,程序就很容易被回收掉。
3)模型層(model):對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對業務計算等操作也是必須放在的該層的。
6.Activity的生命周期:
答:onCreate: 在這里創建界面,做一些數據 的初始化工作
onStart: 到這一步變成用戶可見不可交互的
onResume:變成和用戶可交互 的,(在activity 棧系統通過棧的方式管理這些個Activity的最上面,運行完彈出棧,則回到上一個Activity)
onPause: 到這一步是可見但不可交互的,系統會停止動畫 等消耗CPU 的事情從上文的描述已經知道,應該在這里保存你的一些數據,因為這個時候你的程序的優先順序降低,有可能被系統收回。在這里保存的數據,應該在
onstop: 變得不可見,被下一個activity覆蓋了
onDestroy: 這是activity被幹掉前最後一個被調用方法了,可能是外面類調用finish方法或者是系統為了節省空間將它暫時性的幹掉
7.讓Activity變成一個窗口:
答:Activity屬性設定:有時候會做個應用程序是漂浮在手機主界面的。這個只需要在設置下Activity的主題theme,即在Manifest.xml定義Activity的地方加一句:
android :theme="@android:style/Theme.Dialog"
如果是作半透明的效果:
android:theme="@android:style/Theme.Translucent"
8.Android中常用的五種布局:
答:LinearLayout線性布局;AbsoluteLayout絕對布局;TableLayout表格布局;RelativeLayout相對布局;FrameLayout幀布局;
9.Android的五種數據存儲方式:
答:sharedPreferences;文件;SQLite;contentProvider;網路
10.請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系:
答:Handler獲取當前線程中的looper對象,looper用來從存有Message的Message Queue里取出message,再由Handler進行message的分發和處理。
11.AIDL的全稱是什麼?如何工作?能處理哪些類型的數據?
答:AIDL(AndroidInterface Definition Language)android介面描述語言
12.系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由:
答:通過直接發送Uri把參數帶過去,或者通過manifest里的intentfilter里的data屬性。代碼如下:
Intent intent = new Intent();
Intent.setAction(「android.intent.action.View」);
Uri uriBrowsers = Uri.parse(「http://www.sina.com.cn」);
Intent.setData(uriBrowsers);
//包名、要打開的activity
intent.setClassName(「com.android.browser」,」com.android.browser.BrowserActivity」);
startActivity(intent);
13.什麼是ANR,如何避免?
答:ANR的定義:
在android上,如果你的應用程序有一段時間響應不移靈敏,系統會向用戶提示「應用程序無響應」(ANR:application Not Responding)對話框。因此,在程序里對響應性能的設計很重要,這樣,系統不會顯示ANR給用戶。
如何避免:
首先來研究下為什麼它會在android的應用程序里發生和如何最佳構建應用程序來避免ANR.
android應用程序通常是運行在一個單獨的線程(例如:main)里,這就意味你的應用程序所做的事情如果在主線程里佔用了大長時間的話,就會引發ANR對話框,因為你的應用程序並沒有給自己機會來處理輸入事件或者Intent廣播。
因此,運行在主線程里的任何訪求都盡可能少做事情。特別是,activity應該在它的關鍵生命周期方法(onCreate()和onResume())里盡可能少的去作創建操作。潛在的耗時操作,例如網路或資料庫操作,或者高耗時的計算如改變點陣圖尺寸,應該在子線程里(或者以資料庫操作為例,通過非同步請求的方式)來完成。然而,不是說你的主線程阻塞在那裡等待子線程的完成---也不是調用Thread.wait()或者Thread.sleep()。替代的方法是:主線程應該為子線程提供一個Handler,以便完成時能夠提交給主線程。以這種方式設計你的應用程序,將能保證你的主線程保持對輸入的響應性並能避免由5秒輸入事件的超時引發的ANR對話框。這種做法應該在其它顯示UI的線程里效仿,因為它們都受相同的超時影響。
IntentReceiver執行時間的特殊限制意味著它應該做:在後台里做小的、瑣碎的工作,如保存設定或注冊一個Notification。和在主線程里調用的其它方法一樣,應用程序應該避免在BroadcastReceiver里做耗時的操作或計算,但也不是在子線程里做這些任務(因為BroadcastReceiver的生命周期短),替代的是,如果響應Intent廣播需要執行一個耗時的動作的話,應用程序應該啟動一個Service。順便提及一句,你也應該避免在Intent Receiver里啟動一個Activity,因為它會創建一個新的畫面,並從當前用戶正在運行的程序上搶奪焦點。如果你的應用程序在響應Intent廣播時需要向用戶展示什麼,你應該使用Notification Manager來實現。
一般來說,在應用程序里,100到200ms是用戶能感知阻滯的時間閾值,下面總結了一些技巧來避免ANR,並有助於讓你的應用程序看起來有響應性。
如果你的應用程序為響應用戶輸入正在後台工作的話,可以顯示工作的進度(ProgressBar和ProgressDialog對這種情況來說很有用)。特別是游戲,在子線程里做移動的計算。如果你的程序有一個耗時的初始化過程的話,考慮可以顯示一個Splash Screen或者快速顯示主畫面並非同步來填充這些信息。在這兩種情況下,你都應該顯示正在進行的進度,以免用戶認為程序被凍結了。
14.什麼情況會導致Force Close?如何避免?能否捕獲導致其的異常?
答:如空指針等可以導致ForceClose;可以看Logcat,然後找到對應的程序代碼來解決錯誤。
15.橫豎屏切換時候的activity的生命周期:
答:
1) 新建一個activity,並把各個生命周期列印出來
2) 運行activity,得到如下信息:
onCreate()à
onStart()à
onResume()à
3) 按ctrl+F12切換成橫屏時
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
4) 再按ctrl+f12切換成豎屏時,發現列印了兩次相同的Log
onSaveInstanceState()à
onPause()à
onStop()à
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
onSaveInstanceState()à
onPause()à
onStop()à
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
5) 修改AndroidManifest.xml,把該Activity添加android:configChanges=「orientation」,執行步驟3
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
6) 修改AndroidManifest.xml,把該Activity添加android:configChanges=「orientation」,執行步驟4,發現不會再列印相同信息,但多列印了一行onConfigChanged
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
onConfigurationChanged()à
7) 把步驟5的android:configChanges=「orientation」改成
android:configChanges=「orientation|keyboradHidden」,執行步驟3,就只列印onConfigChanged
onConfigurationChanged()à
8) 把步驟5的android:configChanges=「orientation」改成
android:configChanges=「orientation|keyboradHidden」,執行步驟4
onConfigurationChanged()à
onConfigurationChanged()à
總結:
1) 不設置activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次。
2) 設置activity的android:configChanges=「orientation」時, 切屏會重新調用各個生命周期,切橫屏、豎屏時都只會執行一次,但是豎屏最後多列印一條onConfigurationChanged()
3) 設置activity的android:configChanges=「orientation|keyboardHidden」時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged(),橫屏一次,豎屏兩次
再總結下整個activity的生命周期:
1) 當前activity產生事件彈出Toast和AlertDialog的時候Activity的生命周期不會有改變
2) Activity運行時按下HOME鍵(跟被完全覆蓋一樣的)
onSavaInstanceStateà
onPauseà
onStopà
onRestartà
onStartà
onResumeà
3) 未被完全覆蓋,只是失去焦點:
onPauseà
onResumeà
16.如何將SQLite資料庫(.db文件)與apk文件一起發布?
答:可以將.db文件復制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件。可以將.db文件復制到res aw目錄中
17.如何將打開res aw目錄中的資料庫文件?
答:在Android中不能直接打開res aw目錄中的資料庫文件,而需要在程序第一次啟動時將該文件復制到手機內存或SD卡的某個目錄中,然後再打開該資料庫文件。復制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對象,然後將該InputStream對象中的數據寫入其他的目錄中相應文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite資料庫文件。
18.android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區別:
答:XML解析主要有三種方式,SAX、DOM、PULL。常規在PC上開發我們使用Dom相對輕鬆些,但一些性能敏感的資料庫或手機上還是主要採用SAX方 式,SAX讀取是單向的,優點:不佔內存空間、解析屬性方便,但缺點就是對於套嵌多個分支來說處理不是很方便。而DOM方式會把整個XML文件載入到內存 中去,這里Android開發網提醒大家該方法在查找方面可以和XPath很好的結合如果數據量不是很大推薦使用,而PULL常常用在J2ME對於節點處 理比較好,類似SAX方式,同樣很節省內存,在J2ME中我們經常使用的KXML庫來解析。
19.DDMS和TraceView的區別?
答:DDMS是一個程序執行查看器,在裡面可以看見線程和堆棧等信息,TraceView是程序性能分析器
20.談談Android的IPC機制:
答:IPC是內部進程通信的簡稱,是共享"命名管道"的資源。Android中的IPC機制是為了讓Activity和Service之間可以隨時的進行交互,故在Android中該機制,只適用於Activity和Service之間的通信,類似於遠程方法調用,類似於C/S模式的訪問。通過定義AIDL介面文件來定義IPC介面。Servier端實現IPC介面,Client端調用IPC介面本地代理。
21.NDK是什麼:
答:NDK是一系列工具的集合
NDK提供了一系列的工具,幫助開發者迅速的開發C/C++的動態庫,並能自動將so和java應用打成apk包
NDK集成了交叉編譯器,並提供了相應的mk文件和隔離cpu,平台等的差異,開發人員只需簡單的修改mk文件就可以創建出so
22.描述一下android的系統架構:
答:android系統架構分從下往上為Linux內核層、運行庫、應用程序框架層和應用程序層。
Linux內核層:負責硬體的驅動程序、網路、電源、系統安全以及內存管理等功能。
運行庫和androidruntion:運行庫:即c/c++函數庫部分,大多數都是開放源代碼的函數庫,例如webkit,該函數庫負責android網頁瀏覽器的運行;例如標準的c函數庫libc、openssl、sqlite等,當然也包括支持游戲開發的2dsgl和3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,如mpeg4、h.264、mp3、aac、amr、jpg和png等眾多的多媒體文件格式。Androidruntion負責解釋和執行生成的dalvik格式的位元組碼
應用軟體架構:java應用程序開發人員主要是使用該層封裝好的api進行快速開發的。
應用程序層:該層是java的應用程序層,android內置的googlemaps、email、IM、瀏覽器等,都處於該層,java開發人員工發的程序也處於該層,而且和內置的應用程序具有平等的地位,可以調用內置的應用程序,也可以替換內置的應用程序
Ⅱ 2022史上最全Android面試題歸納匯總(附答案解析)
我經歷過這么多年的摸爬滾打,面試過也被面試過。現總結與歸納Android開發相關面試題:
1、Activity啟動模式有哪些,分別有什麼不同?
2、Service啟動模式有哪些,對應的生命周期?IntentService呢?
3、ContentProvider的作用,是否支持多線程和多進程
4、Broadcast的注冊方式,對應的生命周期是什麼,有序和無序那種可以中斷廣播?
5、AsyncTask的作用,如何使用(包括有哪些方法,能說出同步非同步,能說出不同Android版本下的區別加分)
6、有哪些非同步的方式?
7、Handler機制
8、Dialog的使用及其生命周期
9、Activity的生命周期,能否改?
10、Fragment的生命周期,能否改?
11、Activity和Fragment如何通信
12、View的繪制機制
13、View的事件傳遞機制
14、如何監聽手勢
15、ImageView設置圖片顯示有哪幾種模式,有什麼區別?
16、有哪些存儲方式
17、SharedPreferences是否支持多進程、多線程
別看以上常問的是入門級的,但是有兩三年開發經驗能回答圓滿的人不多。
1、如何理解Activity的任務親和性
2、如何讓Service為單獨的進程
3、IntentService的實現原理
4、LocalBroadcast的作用,實現原理,相對於Broadcast的優勢在哪,劣勢在哪
5、Handler的缺點,會不會造成內存泄漏,有則如何解決
6、Fragment與Activity的區別和聯系
7、Fragment如何緩存布局
8、Fragment與ViewPager的搭配使用,有沒有問題重疊問題,怎麼解決
9、同時提供側滑和上下滑動,如何解決事件傳播問題
10、是否使用過Design包
11、嵌套滑動理解
12、behavior的原理
13、對設計模式有什麼看法,經常使用的有哪些?
中級的稍微偏底層一些,這個主要考察平時是否關注而不是一味地懟業務需求
1、Activity的啟動過程
2、Service創建為單獨進程會有哪些問題?
3、簡述AIDL的構建過程
4、IPC機制有哪些?
5、android多進程通信方式,內部原理
6、App啟動的入口在哪?
7、LRU緩存演算法
8、Bitmap的有哪幾種壓縮演算法,有啥區別?
9、圖片在手機本地存儲大小和在內存大小是否一致,為什麼,Android默認像素一般占幾個位元組?
10、第三方框架的熟練程度,如:
11、SharedPreference內部實現原理
12、模塊化、插件話、組件化等分別有什麼區別,對用有什麼好處
13、說說MV * 模式,並畫出做過項目的架構圖
14、對跨平台方案有哪些了解,使用過哪些? 比如RN
15、對大前端有什麼看法,了解多少?使用過什麼?
16、對其他語言的了解,kotlin,python、php、c++等
17、興趣愛好是什麼?對未來有什麼規劃?
目前是一些經常會被問到的,當然只是列舉了Android 開發方向的,Java的一些還沒列舉,比如異常、網路、多線程、JCF等等
以上問題的答案在下面都有詳細解答,我們不僅整理了這些資料,而且還有一份長達"635頁"的Android資料匯總:
包括:底層原理+項目實戰+面試專題
雖說Android早已不像過去那般火爆,但各大廠對於中高級開發者仍舊是求賢若渴,想要獲取更豐厚的薪資,打鐵還得自身硬。對於框架、源碼、原理、項目實操經驗,都必須有足夠的知識儲備,才可以在面試中擊敗面試官。但是由於網上的資料魚龍混雜,也不成體系,很多人在自我提升的過程中都頭疼不已。 這里就給大家分享一份位元組大佬整理的《Android中高級面試題匯總(2022)》,幫助大家系統的梳理中高級Android知識!裡麵包含了所有Android面試的知識點,刷完進大廠妥妥的 !
(含:靜態內部類和非靜態內部類的比較,多態的理解與應用, java方法的多態性理解,java中介面和繼承的區別,線程池的好處,詳解,單例,線程池的優點及其原理,線程池的優點,為什麼不推薦通過Executors直接創建線程池,創建線程或線程池時請指定有意義的線程名稱,方便出錯時回溯,深入理解ReentrantLock與Condition,Java多線程:線程間通信之Lock,Synchronized 關鍵字原理,ReentrantLock原理,HashMap中的Hash沖突解決和擴容機制, JVM常見面試題, JVM內存結構,類載入機制/雙親委託…)
(含:Activity知識點, Fragment知識點, Service知識點, Intent知識點…)
(含:屏幕適配,主要控制項優化,事件分發與嵌套滾動…)
(含:MVP架構設計,組件化架構…)
(含:啟動優化,內存優化,繪制優化,安裝包優化…)
(含:開源庫源碼分析,Glide源碼分析,OkHttp源碼分析,Retrofit源碼分析,RxJava源碼分析…)
(含:開源文檔,面試合集…)
Ⅲ Android面試:位元組飛書5輪面試Android Framework層的源碼就問了4輪!
說起位元組跳動的這次面試經歷,真的是現在都讓我感覺背脊發涼,簡直被面試官折磨的太難受了。雖然已經工作了三年,但是也只是純粹的在寫業務,對底層並沒有一個很深的認識,這次面試經歷直接的讓我感受到我和那些一線大廠開發之間的差距,說句實話,是真的很難受。
也不多說什麼了吧,我們還是來回顧一下我在位元組跳動的這次面試經歷。 一共是面了5輪,至於為什麼面了5輪的原因,可能是面試官還是想試試我的技術水平吧 。
雖然說最終還是沒能拿到offer,但是這次的面試經歷讓我更加直觀的了解了我和大廠Android開發之間的差距,算是收益頗豐吧 。
總體來講,一面還是答得不錯的,或許是面試官覺得小瞧了我,接下來的四輪面試我彷彿遭到了嚴打
最後嘮叨幾句,希望各位沒拿到offer的真的不要灰心,可能你之前所有的失敗都是你成功的墊腳石,我面掛的時候也曾經自閉過,但更多的是反思,如何調整自己的復習計劃。在復習的時候一定要有自己的強項,能把這個知識點理解的很透徹並且把相關的知識點拓展出去。另一方面就是讓面試官看到你對這個崗位的熱情,能夠自發性地去學習與崗位相關的東西,下面給大家分享一份我珍藏的《2022最新Android中高級面試題合集》質量非常搞,希望能對你有幫助!
內容概要 :包括 Handler、Activity相關、Fragment、service、布局優化、AsyncTask相關、Android 事件分發機制、 Binder、Android 高級必備 :AMS,WMS,PMS、Glide、 Android 組件化與插件化等面試題和技術棧!內容特點:條理清晰,含圖像化表示更加易懂。
Android Framework 開發雖然比較偏底層,圈子窄,但是能掌握一些原理的東西,可以觸類旁通,往應用層發展也可以。目前大公司的app開發都要基於模塊化、層次化、組件化、控制項化的思路來設計架構,而這一切的基礎都建立在Android Framework系統框架底層原理實現之上。
Ⅳ 騰訊大佬整理推薦《Android Framework 開發揭秘》突破面試!(附面試寶典)
隨著 Android 開發者越來越多,企業在篩選 Android 程序員時越來越看中一個程序員對於 Android 底層原理的理解和思考。
經常面試的人就知道,現在 Framework 算是面試必問知識點了,比如下面一些大廠面試題:
Framework 為開發應用程序提供了非常多的 API,通過調用特殊的 API 構造 APP,滿足業務上的需求。正因為有了 Framework 層,應用開發才能事半功倍,專注於業務邏輯實現。
這里給大家分享一份由 騰訊大佬整理推薦的《Android Framework 開發揭秘》以及《2022最新Android中高級面試題合集》。
這份1932頁的《2022Android中高級面試題匯總》是總結了2020-2021期間大廠面試中的高頻面試題匯總,其中包括騰訊、位元組、美團、阿里、網路…等一線互聯網大廠。
資料包含: Java基礎、Android基礎、UI控制項、網路通信、架構設計、性能優化、源碼流程…
想要深入學習了解 Framework ,突破面試難關,那麼這兩份《Android Framework 開發揭秘》《2022最新Android中高級面試題合集》一定不要錯過。
Ⅳ Android大廠面試經驗分享(OPPO,位元組,華為,阿里)
我是從小公司跳出來的,最終入職OPPO,說實話這段時間的經歷讓我深深地感受到,我們為跳槽做的一些臨時抱佛腳的提升跟那些大佬的沉澱比起來太渺小了。我們都知道找資料學習、刷面試題,但也許只能應付這一次的面試,後面還是會技術發愁,那些短時間背下來的東西遲早會忘掉, 大家還是做好長期提升自己的准備,好好沉澱的東西最後才是屬於自己的。
說說當時的面試過程,我是內推獲得的面試機會,很感謝當時幫我內推的兄弟,總共三輪面試,兩輪技術,一輪HR面,當天面試結束。
我10:10分到的公司,10:30開始面試,第一輪面試將近一個小時,聊的點我基本上都答得上來,自我感覺良好。然後面試官讓我等一下,他去叫他們老大來給我二面,我等了有二十幾分鍾吧,二面有一個多小時,這次問的比較深,有些地方答的有些嗑吧,總體來說我自己是滿意的。HR面約到下午了,整個流程下來每輪面試官都讓人感覺很不錯,我自己做的准備也讓我面試感覺下來很爽。
我把面試遇到過的以及自己學慣用到過相關內容都整理到一起了,方便自己進行復盤和後續的查漏補缺:
一、 Java基礎
1.1 靜態內部類和非靜態內部類的比較
1.2 多態的理解與應用
1.3 java方法的多態性理解
1.4 java中介面和繼承的區別
1.5 線程池的好處,詳解,單例(絕對好記)
1.6 線程池的優點及其原理
1.7 線程池的優點(重點)
1.8 為什麼不推薦通過Executors直接創建線程池
1.9 不怕難之BlockingQueue及其實現
1.10 深入理解ReentrantLock與Condition
1.11 Java多線程:線程間通信之Lock
1.12 Synchronized 關鍵字原理
1.13 ReentrantLock原理
1.14 HashMap中的Hash沖突解決和擴容機制
1.14 Java並發
1.15 Java虛擬機
1.16 JVM常見面試題
1.17 JVM內存結構
1.18 類載入機制/雙親委託
二、 Android基礎
2.1 Activity知識點(必問)
2.2 Fragment知識點
2.3 Service知識點
2.4 Intent知識點
2.5 數據存儲
三、UI控制項篇
3.1 屏幕適配
3.2 主要控制項優化
3.3 事件分發與嵌套滾動
3.4 動態化頁面構建方案
四、網路通信篇
4.1 網路協議
五、架構設計篇
5.1 MVP架構設計
5.2 組件化架構
六、性能優化篇
6.1 啟動優化
6.2 內存優化
6.3 繪制優化
6.4 安裝包優化
七、源碼流程篇
7.1 開源庫源碼分析
7.2 Glide源碼分析
7.3 day 20 面試題:Glide面試題
7.4 聊一聊關於Glide在面試中的那些事
7.5 面試官:簡歷上如果寫Glide,請注意以下幾點…
7.6 Glide OOM問題解決方法匯總
7.7 LeakCanary源碼分析
7.8 OkHttp源碼分析
7.9 okhttp連接池復用機制
7.10 okhttp 流程和優化的實現
7.11 一篇讓你受用的okhttp分析
7.12 OkHttp面試之–OkHttp的整個非同步請求流程
7.13 OkHttp面試之–HttpEngine中的sendRequest方法詳解
7.14 OkHttp解析大總結
7.15 Okhttp任務隊列工作原理
7.16 Android高頻面試專題 - 架構篇(二)okhttp面試必知必會
7.17 Android 網路優化,使用 HTTPDNS 優化 DNS,從原理到 OkHttp 集成
7.18 Retrofit源碼分析
7.19 RxJava源碼分析
7.20 RxJava原理與源碼分析
7.21 RxJava如何進行線程切換的?
7.22 Rxjava內存泄漏防止方案——RxLifecycle,AutoDispose,RxLife框架
7.23 Tinker源碼分析
7.24 ARouter源碼分析
7.25 Android框架層源碼解析
7.26 演算法設計
八、新技術篇
8.1 實戰問題篇
九、面試篇
9.1 開源文檔
9.2 面試文獻
以上就是我的學習和面試積累,有自己面試經歷過的,也有整理的一些大廠面試題,篇幅有限,具體內容就不展示了,我已經整理成文檔了。
還是開頭說的,僅靠面試期間臨時抱佛腳和刷題對自身發展不是長久之計,做好長期提升的規劃,好好沉澱每一次的學習和面試經歷,把這些最終都轉化成屬於自己的東西才是實質上對自己最有用的。