膜拜大牛!HTTPS面試常問全解析,吊打面試官系列!

寫在前面

1月初失業,找了近2個多月的工作了,還沒找到心儀的工作,感覺心好慌,不知道該怎么辦了?找不到工作的時候壓力很大,有人說自信會很受打擊,還有人說會很絕望,是人生的低谷……盡管很多時候我們自己知道,我不是找不到工作,只是找不到理想中的好工作。但這也不能改變你的空白期正在一天一天變長,不妥協的那份堅定正在一天一天動搖的事實。

朋友推薦給我這份文檔,狂刷五遍之后,最近剛剛獲得字節跳動等多家公司的offer,今天將這份文檔分享給大家,希望正在找工作或準備找工作的朋友都可以獲得自己心儀公司的offer。

正文如下

  • Activity面試題
  • Fragment面試題
  • Service面試題
  • Broadcast Receiver面試題
  • WebView面試題
  • Binder面試題
  • Handler面試題
  • AsyncTask面試題
  • HandlerThread面試題
  • IntentService面試題
  • 視圖工作機制面試題
  • 事件分發機制面試題
  • ListView面試題
  • Android項目構建面試題(由于篇幅太長,今天就先分享到這里)
  • ANR面試題
  • OOM面試題
  • Bitmap面試題
  • UI卡頓面試題
  • 內存泄漏面試題
  • 內存管理面試題
  • 冷啟動和熱啟動面試題
  • 其他優化面試題
  • 架構模式面試題
  • 插件化面試題
  • 熱更新面試題
  • 進程保活面試題
  • Lint面試題
  • Kotlin面試題

Activity面試題

1、Activity是什么

Activity是四大組件之一,它提供一個界面讓用戶點擊和各種滑動操作,這就是Activity

2、Activity四種狀態

  • runing
  • paused
  • stopped
  • killed

3、Activity生命周期

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestroy()
  • onRestart()

4、進程的優先級

  • 空進程
  • 后臺進程
  • 服務進程
  • 可見進程
  • 前臺進程

5、Activity任務棧

  • 先進后出

6、Activity啟動模式

  • standard
  • singletop
  • singletask
  • singleinstance

7、scheme跳轉協議

Android中的scheme是一種頁面內跳轉協議,通過定義自己的scheme協議,可以跳轉到app中的各個頁面

  • 服務器可以定制化告訴app跳轉哪個頁面
  • App可以通過跳轉到另一個App頁面
  • 可以通過H5頁面跳轉頁面

Fragment面試題

1、Fragment為什么被稱為第五大組件

Fragment比Activity更節省內存,其切換模式也更加舒適,使用頻率不低于四大組件,且有自己的生命周期,而且必須依附于Activity

2、Activity創建Fragment的方式

  • 靜態創建
  • 動態創建

3、FragmentPageAdapter和FragmentPageStateAdapter的區別

  • FragmentPageAdapter在每次切換頁面的的時候,是將Fragment進行分離,適合頁面較少的Fragment使用以保存一些內存,對系統內存不會多大影響

  • FragmentPageStateAdapter在每次切換頁面的時候,是將Fragment進行回收,適合頁面較多的Fragment使用,這樣就不會消耗更多的內存

4、Fragment生命周期

  • onAttach()
  • onCreate()
  • onCreateView()
  • onActivityCreated()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestroyView()
  • onDestroy()
  • onDetach()

5、Fragment的通信

  • Fragment調用Activity中的方法:getActivity
  • Activity調用Fragment中的方法:接口回調
  • Fragment調用Fragment中的方法:FragmentManager.findFragmentById

6、Fragment的replace、add、remove方法

  • replace:替代Fragment的棧頂頁面
  • add:添加Fragment到棧頂頁面
  • remove:移除Fragment棧頂頁面

Service面試題

1、Service是什么

Service是四大組件之一,它可以在后臺執行長時間運行操作而沒有用戶界面的應用組件

2、Service和Thread的區別

  • Service是安卓中系統的組件,它運行在獨立進程的主線程中,不可以執行耗時操作。Thread是程序執行的最小單元,分配CPU的基本單位,可以開啟子線程執行耗時操作

  • Service在不同Activity中可以獲取自身實例,可以方便的對Service進行操作。Thread在不同的Activity中難以獲取自身實例,如果Activity被銷毀,Thread實例就很難再獲取得到

3、Service啟動方式

  • startService
  • bindService

4、Service生命周期

  • startService
    • onCreate()
    • onStartCommand()
    • onDestroy()
  • bindService
    • onCreate()
    • onBind()
    • onUnbind()
    • onDestroy()

Broadcast Receiver面試題

1、Broadcast Receiver是什么

Broadcast是四大組件之一,是一種廣泛運用在應用程序之間傳輸信息的機制,通過發送Intent來傳送我們的數據

2、Broadcast Receiver的使用場景

  • 同一App具有多個進程的不同組件之間的消息通信
  • 不同App之間的組件之間的消息通信

3、Broadcast Receiver的種類

  • 普通廣播
  • 有序廣播
  • 本地廣播
  • Sticky廣播

4、Broadcast Receiver的實現

  • 靜態注冊:注冊后一直運行,盡管Activity、進程、App被殺死還是可以接收到廣播

  • 動態注冊:跟隨Activity的生命周期

5、Broadcast Receiver實現機制

  • 自定義廣播類繼承BroadcastReceiver,復寫onReceiver()
  • 通過Binder機制向AMS進行注冊廣播
  • 廣播發送者通過Binder機制向AMS發送廣播
  • AMS查找符合相應條件的廣播發送到BroadcastReceiver相應的循環隊列中
  • 消息隊列執行拿到廣播,回調BroadcastReceiver的onReceiver()

6、LocalBroadcastManager特點

  • 本地廣播只能在自身App內傳播,不必擔心泄漏隱私數據
  • 本地廣播不允許其他App對你的App發送該廣播,不必擔心安全漏洞被利用
  • 本地廣播比全局廣播更高效
  • 以上三點都是源于其內部是用Handler實現的

WebView面試題

1、WebView安全漏洞

API16之前存在遠程代碼執行安全漏洞,該漏洞源于程序沒有正確限制使用WebView.addJavascriptInterface方法,遠程攻擊者可通過使用Java反射機制利用該漏洞執行任意Java對象的方法

2、WebView銷毀步驟

WebView在其他容器上時(如:LinearLayout),當銷毀Activity時,需要在onDestroy()中先移除容器上的WebView,然后再將WebView.destroy(),這樣就不會導致內存泄漏

3、WebView的jsbridge

客戶端和服務端之間可以通過Javascript來互相調用各自的方法

4、WebViewClient的onPageFinished

WebViewClient的onPageFinished在每次完成頁面的時候調用,但是遇到未加載完成的頁面跳轉其他頁面時,就會一直調用,使用WebChromeClient.onProgressChanged可以替代

5、WebView后臺耗電

在WebView加載頁面的時候,會自動開啟線程去加載,如果不很好的關閉這些線程,就會導致電量消耗加大,可以采用暴力的方法,直接在onDestroy方法中System.exit(0)結束當前正在運行中的java虛擬機

6、WebView硬件加速

Android3.0引入硬件加速,默認會開啟,WebView在硬件加速的情況下滑動更加平滑,性能更加好,但是會出現白塊或者頁面閃爍的副作用,建議WebView暫時關閉硬件加速

7、WebView內存泄漏

由于WebView是依附于Activity的,Activity的生命周期和WebView啟動的線程的生命周期是不一致的,這會導致WebView一直持有對這個Activity的引用而無法釋放,解決方案如下

  • 獨立進程,簡單暴力,不過可能涉及到進程間通信(推薦)

  • 動態添加WebView,對傳入WebView中使用的Context使用弱引用

Binder面試題

1、Linux內核的基本知識

  • 進程隔離/虛擬地址空間:進程間是不可以共享數據的,相當于被隔離,每個進程被分配到不同的虛擬地址中

  • 系統調用:Linux內核對應用有訪問權限,用戶只能在應用層通過系統調用,調用內核的某些程序

  • binder驅動:它負責各個用戶的進程,通過binder通信內核來進行交互的模塊

2、為什么使用Binder

  • 性能上,相比傳統的Socket更加高效
  • 安全性高,支持協議雙方互相校驗

3、Binder通信模型

  • Service服務端通過Binder驅動在ServiceManager的查找表中注冊Object對象的add方法

  • Client客戶端通過Binder驅動在ServiceManager的查找表中找到Object對象的add方法,并返回proxy的add方法,add方法是個空實現,proxy也不是真正的Object對象,是通過Binder驅動封裝好的代理類的add方法

  • 當Client客戶端調用add方法時,Client客戶端通過Binder驅動將proxy的add方法,請求ServiceManager來找到Service服務端真正對象的add方法,進行調用

4、AIDL

  • 客戶端通過aidl文件的Stub.asInterface()方法,拿到Proxy代理類

  • 通過調用Proxy代理類的方法,將參數進行封包后,調用底層的transact()方法

  • transact()方法會回調onTransact()方法,進行參數的解封

  • 在onTransact()方法中調用服務端對應的方法,并將結果返回

Handler面試題

1、Handler是什么

Handler通過發送和處理Message和Runnable對象來關聯相對應線程的MessageQueue

2、Handler使用方法

  • post(runnable)
  • sendMessage(message)

3、Handler工作原理

4、Handler引起的內存泄漏

原因:非靜態內部類持有外部類的匿名引用,導致Activity無法釋放

解決:

  • Handler內部持有外部Activity的弱引用
  • Handler改為靜態內部類
  • Handler.removeCallback()

AsyncTask面試題

1、AsyncTask是什么

它本質上就是一個封裝了線程池和Handler的異步框架

2、AsyncTask使用方法

三個參數

  • Params:表示后臺任務執行時的參數類型,該參數會傳給AysncTask的doInBackground()方法

  • Progress:表示后臺任務的執行進度的參數類型,該參數會作為onProgressUpdate()方法的參數

  • Result:表示后臺任務的返回結果的參數類型,該參數會作為onPostExecute()方法的參數

五個方法

  • onPreExecute():異步任務開啟之前回調,在主線程中執行

  • doInBackground():執行異步任務,在線程池中執行

  • onProgressUpdate():當doInBackground中調用publishProgress時回調,在主線程中執行

  • onPostExecute():在異步任務執行之后回調,在主線程中執行

  • onCancelled():在異步任務被取消時回調

3、AsyncTask工作原理

4、AsyncTask引起的內存泄漏

原因:非靜態內部類持有外部類的匿名引用,導致Activity無法釋放

解決:

  • AsyncTask內部持有外部Activity的弱引用
  • AsyncTask改為靜態內部類
  • AsyncTask.cancel()

5、AsyncTask生命周期

在Activity銷毀之前,取消AsyncTask的運行,以此來保證程序的穩定

6、AsyncTask結果丟失

由于屏幕旋轉、Activity在內存緊張時被回收等情況下,Activity會被重新創建,此時,舊的AsyncTask持有舊的Activity引用,這個時候會導致AsyncTask的onPostExecute()對UI更新無效

7、AsyncTask并行or串行

  • AsyncTask在Android 2.3之前默認采用并行執行任務,AsyncTask在Android 2.3之后默認采用串行執行任務

  • 如果需要在Android 2.3之后采用并行執行任務,可以調用AsyncTask的executeOnExecutor()

HandlerThread面試題

1、HandlerThread產生背景

當系統有多個耗時任務需要執行時,每個任務都會開啟一個新線程去執行耗時任務,這樣會導致系統多次創建和銷毀線程,從而影響性能。為了解決這一問題,Google提供了HandlerThread,HandlerThread是在線程中創建一個Looper循環器,讓Looper輪詢消息隊列,當有耗時任務進入隊列時,則不需要開啟新線程,在原有的線程中執行耗時任務即可,否則線程阻塞

2、HanlderThread的特點、

  • HandlerThread本質上是一個線程,繼承自Thread
  • HandlerThread有自己的Looper對象,可以進行Looper循環,可以創建Handler
  • HandlerThread可以在Handler的handlerMessage中執行異步方法
  • HandlerThread優點是異步不會堵塞,減少對性能的消耗
  • HandlerThread缺點是不能同時繼續進行多任務處理,需要等待進行處理,處理效率較低
  • HandlerThread與線程池不同,HandlerThread是一個串行隊列,背后只有一個線程。

IntentService面試題

1、IntentService是什么

IntentService是繼承自Service并處理異步請求的一個類,其內部采用HandlerThread和Handler實現的,在IntentService內有一個工作線程來處理耗時操作,其優先級比普通Service高。當任務完成后,IntentService會自動停止,而不需要手動調用stopSelf()。另外,可以多次啟動IntentService,每個耗時操作都會以工作隊列的方式在IntentService中onHandlerIntent()回調方法中執行,并且每次只會執行一個工作線程

2、IntentService使用方法

  • 創建Service繼承自IntentService
  • 覆寫構造方法和onHandlerIntent()方法
  • 在onHandlerIntent()中執行耗時操作

小結

有了這么多優秀的開發工具,可以做出更高質量的Android應用。

當然了,“打鐵還需自身硬”,想要寫出優秀的代碼,最重要的一點還是自身的技術水平,不然用再好的工具也不能發揮出它的全部實力。

在這里我也分享一份大佬自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料這些都是我閑暇還會反復翻閱的精品資料。在腦圖中,每個知識點專題都配有相對應的實戰項目,可以有效的幫助大家掌握知識點。

總之也是在這里幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習

造方法和onHandlerIntent()方法

  • 在onHandlerIntent()中執行耗時操作

小結

有了這么多優秀的開發工具,可以做出更高質量的Android應用。

當然了,“打鐵還需自身硬”,想要寫出優秀的代碼,最重要的一點還是自身的技術水平,不然用再好的工具也不能發揮出它的全部實力。

在這里我也分享一份大佬自己收錄整理的Android學習PDF+架構視頻+面試文檔+源碼筆記,還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料這些都是我閑暇還會反復翻閱的精品資料。在腦圖中,每個知識點專題都配有相對應的實戰項目,可以有效的幫助大家掌握知識點。

總之也是在這里幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習

如果你有需要的話,可以點擊這里領取

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386335.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vSphere HA 原理與配置

內容預覽: 1. vSphere HA 概述 2. vSphere HA 提供的保護級別 3. vSphere HA運行原理 4. vSphere HA 故障支持場景 5. vSphere HA接入控制策略 6. 如何選擇vSphere HA 的接入控制策略 7. 配置vSphere HA的基礎條件 8. 虛擬機組件保護 9. 開啟vSphere HA功能 1. v…

自學Android!Android高級工程師面試題-字節跳動,附答案

前言 大廠面試一直都是程序員圈內摸魚時間津津樂道的話題,進大廠想必也是無數程序員的夢想。 關于“原理”的問題,幾乎是現如今Android開發崗必問的問題,尤其在大廠面試中更為突出。有過大廠面試經驗的小伙伴應該知道:大廠的面試…

WEB可以調節的框架頁

<html> <head><meta HTTP-EQUIV"Content-Type" CONTENT"text/html; charsetgb2312"><title>主框架[www.tecsoon.com]</title></head><frameset cols"30%,*"> <frame name"dir" target&…

被面試官問的Android問題難倒了,成功入職字節跳動

感悟 這個世界有一個“二八原則”在好多地方都發揮著作用&#xff0c;在Android開發上我認為也一樣有用。做一個Android開發&#xff0c;你也許只會用到Android開發知識中的20%&#xff0c;有80%其實你學了也不一定會用。 而面試官也一樣&#xff0c;他也可能只掌握了20%的知…

PANEL中顯示窗體

var frm: TForm2;//定義窗口類begin PageControl1.activepage:tabsheet1; if Panel1.ControlCount 0 then begin frm : Tform2.Create(self); frm.Parent : Panel1; frm.BorderStyle : bsnone; frm.WindowState : wsmaximized; if skindata1.active…

被面試官問的Android問題難倒了,系列篇

本篇將由 環境搭建、實現原理、編程開發、插件開發、編譯運行、性能穩定、發展未來 等七個方面&#xff0c;對當前的 React Native 和 Flutter 進行全面的分析對比&#xff0c;希望能給你更有價值的參考。 前言 移動端跨平臺在經歷數年沉浮之后&#xff0c;如今還能在舞臺聚光…

使用screen管理后臺程序

我們常需要SSH 或者telent 遠程登錄到Linux 服務器&#xff0c;經常運行一些需要很長時間才能完成的任務&#xff0c;在此期間不能關掉窗口或者斷開連接&#xff0c;否則這個任務就會被殺掉&#xff0c;一切半途而廢了。這時&#xff0c;我們可以用screen命令解決這個問題。 Sc…

被面試官問的Android問題難倒了,面試必會

開頭 1、一定要把基本的數據結構&#xff0c;經典的算法&#xff0c;Unix編程&#xff0c;程序編譯鏈接及計算機原理等基礎知識扎牢&#xff0c;這些會長遠影響你的職業發展。 2、 推薦從C語言入門&#xff0c;不單是因為很多操作系統、網絡協議棧開源代碼由C/C實現&#xff…

jquery checkbox 實現單選

最近在用javascript的時候發現網上實現checkbox單選的代碼都已經過時了。 用著幾年前的代碼發現根本不行了 原因是jquery api已經更改 http://api.jquery.com/prop/ 這里是新的代碼 $(function(){$(":checkbox").each(function(){$(this).click(function () {if ($(t…

覆蓋所有面試知識點,建議收藏

一、前言 剛拿到字節offer&#xff0c;經歷了5次面試&#xff0c;其中4輪技術面&#xff0c;1輪HR面試。在這里分享一下自己的面試經驗和學習心得。希望能夠幫助更多的小伙伴。 我本科畢業于四川師范學院計算機系&#xff0c;剛畢業時也是小白&#xff0c;也是一步步成成起來…

Codeforces- Educational Codeforces Round 69

A題 DIY Wooden Ladder 簽到題&#xff0c;求n-2和第二大的最小值 #include<bits/stdc.h> using namespace std; int arr[100020]; int main() {int t,n;cin>>t;while(t--){cin>>n;for(int i0;i<n;i)cin>>arr[i];sort(arr,arrn);cout<<min(ar…

覆蓋所有面試知識點,持續更新中

我所接觸的Android開發者&#xff0c;百分之九十五以上 都遇到了以下幾點致命弱點&#xff01; 如果這些問題也是阻止你升職加薪&#xff0c;跳槽大廠的阻礙。 那么我確信可以幫你突破瓶頸&#xff01; 應屆坎坷求職路 一個廣州非985/211普通本科生&#xff0c;計算機科學…

cloudera-quickstart-vm-5.13.0-0-virtualbox 中文顯示亂碼

1.如果沒有中文語言呢 可以通過網上下載安裝中文語言包yum groupinstall chinese-support配置中文的阿里云服務器&#xff0c;根據cetos版本來配置。思路&#xff1a;rm -fr /etc/yum.repo.d/* #刪除下面內容我的版本是6.7的cat /etc/issue 執行wget http://mirrors.aliyun.c…

覆蓋所有面試知識點,趕緊收藏!

前言 近日&#xff0c;字節跳動正式啟動了2021屆秋季校園招聘&#xff0c;為應屆畢業生開放超過6000個工作崗位。這一數字超過了該公司往年秋招規模&#xff0c;并與其今年春招規模持平。全年校招人數共計超過1萬2千人&#xff0c;遠高于同類型互聯網公司&#xff0c;體現了字…

實現技術3次作業 謝筱 1101220759

3次作業 謝筱 1101220759 作業一 要求&#xff1a; &#xff08;1&#xff09; 寫一個博客, 列出你發現的微軟學術搜索的功能性的缺陷 (bug), 至少一個. 用專業的語言描述 解答&#xff1a; &#xff08;1&#xff09; 缺陷一&#xff1a; 缺少中文關鍵字搜索功能&#…

覆蓋所有面試知識點,送大廠面經一份!

自己項目中一直都是用的開源的xUtils框架&#xff0c;包括BitmapUtils、DbUtils、ViewUtils和HttpUtils四大模塊&#xff0c;這四大模塊都是項目中比較常用的。最近決定研究一下xUtils的源碼&#xff0c;用了這么久總得知道它的實現原理吧。我是先從先從BitmapUtils模塊開始的。…

MEF初體驗之九:部件生命周期

理解MEF容器中部件的生命周期及其含義是非常重要的。鑒于MEF重點在開放端應用程序&#xff0c;這將變得尤其重要的&#xff0c;一旦app ships和第三方擴展開始運行&#xff0c;作為應用程序的開發者將很好地控制這一系列的部件。生命周期可以被解釋為這樣一個部件期望的共享物&…

ASP.NET MVC中在Action獲取提交的表單數據方法總結 (4種方法,轉載備忘)

有Index視圖如下&#xff1a; 視圖代碼如下&#xff1a; [html] view plaincopyprint?<% Page Language"C#" MasterPageFile"~/Views/Shared/Site.Master" Inherits"System.Web.Mvc.ViewPage" %> <asp:Content ID"Content1&qu…

解析底層原理!Android開發者面試如何系統復習?幫你突破瓶頸

現狀 后端轉 Android 我該從何處下手&#xff0c;現在學習 android 晚嗎&#xff1f; 我的回答是晚還不至于&#xff0c;因為目前是市場趨于穩定正常&#xff0c;這個是市場發展的比如趨勢&#xff0c;現在火爆大家都看好的人工智能&#xff0c;大數據&#xff0c;猶如2010年…

SpringMVC與Struts2區別與比較總結

SpringMVC與Struts2區別與比較總結 1、Struts2是類級別的攔截&#xff0c; 一個類對應一個request上下文&#xff0c;SpringMVC是方法級別的攔截&#xff0c;一個方法對應一個request上下文&#xff0c;而方法同時又跟一個url對應&#xff0c;所以說從架構本身上SpringMVC就容易…