熱文導讀| 點選标題閱讀
網際網路寒冬下,程式員如何突圍提升自己?
讓前端和Android開發者失業的技術:Flutter Web初體驗
程式員吐槽:在阿裡工作帶來光環,在京東卻帶來負面影響!
轉自:https://www.jianshu.com/p/e4ddc1686220
Java部分
一、八種資料類型以及他們的包裝類
二、abstract與interface的差別(抽象類和接口)
1、關鍵字:抽象類
三、重寫和重載的差別
四、return和break和continue的差別
1.break語句的使用場合主要是switch語句和循環結構。
在循環結構中使用break語句,如果執行了break語句,那麼就退出循環,接着執行循環結構下面的第一條語句。
如果在多重嵌套循環中使用break語句,當執行break語句的時候,退出的是它所在的循環結構,對外層循環沒有任何影響。如果循環結構裡有switch語句,并且在switch語句中使用了break語句,當執行switch語句中的break語句時,僅退出switch語句,不會退出外面的循環結構
break效果圖
2.continue:終止目前的一次循環過程,但是不跳出循環,而是繼續往下執行下一次循環。
continue執行個體
3.return:如果在程式中遇到return語句,那麼代碼就退出該函數的執行,傳回到函數的調用處
return效果圖
五、面向對象和面向過程
面向過程:就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實作,使用的時候一個一個依次調用就可以了
面向對象:是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描叙某個事物在整個解決問題的步驟中的行為
面向對象三個特征:
封裝,繼承,多态封裝:封裝:把客觀事物封裝成抽象的類,并且類可以把自己的資料和方法隻讓可信的類或者對象操作,對不可信的進行資訊隐藏。get()/set()方法繼承:子對象可以繼承父對象的屬性和行為,亦即父對象擁有的屬性和行為,其子對象也就擁有了這些屬性和行為這個很好了解,解析資料的時候,大家應該都有一個BaseBean,然後去繼承他,不用重複寫代碼,利于代碼的複用性多态:多态是指父對象中的同一個行為能在其多個子對象中有不同的表現。也就是說子對象可以使用重寫父對象中的行為,使其擁有不同于父對象和其它子對象的表現,這就是overriding(重寫)
多态存在的三個必要條件:
一、要有繼承;二、要有重寫;三、父類引用指向子類對象
多态的例子不勝枚舉。比方說按下 F1 鍵這個動作,如果目前在 Flash 界面下彈出的就是 AS 3 的幫助文檔;如果目前在 Word 下彈出的就是 Word 幫助;在 Windows 下彈出的就是 Windows 幫助和支援。同一個事件發生在不同的對象上會産生不同的結果。
六、equals()和==的差別
== 比較的是變量(棧)記憶體中存放的對象的(堆)記憶體位址,用來判斷兩個對象的位址是否相同,即是否是指相同一個對象。比較的是真正意義上的指針操作。
equals用來比較的是兩個對象的内容是否相等,由于所有的類都是繼承自java.lang.Object類的,是以适用于所有對象,如果沒有對該方法進行覆寫的話,調用的仍然是Object類中的方法,
而Object中的equals方法傳回的卻是==的判斷。
七、大路邊的幾個設計模式
工廠模式:
android中的demo展現:線程池
https://blog.csdn.net/nugongahou110/article/details/50425823這個連結,very good,對我來說,非常好了解,what is 工廠模式???我是在這兒學的,原諒我這個菜鳥吧,不會總結.最好把demo敲一遍,加深記憶,很好了解,雖然看也是可以看懂的.
建造者模式:https://blog.csdn.net/nugongahou110/article/details/50395698android中,大概build()結尾的都是吧.比如:Imagrloder,AlertDialog.Builder等等.
裝飾者模式:https://blog.csdn.net/nugongahou110/article/details/50413668
單例模式:餓漢式:
//隻有内部類可以為static。
懶漢式:
/***
* 一種常用的形式
*/
雙重鎖定:(這個一般在實際應用中用的比較多,以上,了解即可)
//将同步内容下方到if内部,提高了執行的效率,不必每次擷取對象時都進行同步,隻有第一次才同步,建立了以後就沒必要了。
九、String,StringBuffer,StringBuilder
關系圖
1、運作速度:StringBuilder > StringBuffer > String
原因: String為字元串常量,而StringBuilder和StringBuffer均為字元串變量,即String對象一旦建立之後該對象是不可更改的,每一次新的指派,都會重新建立對象,垃圾回收機制回收舊的對象,但後兩者的對象是變量,對變量進行操作就是直接對該對象進行更改,而不進行建立和回收的操作,是以速度要比String快很多。
2、線程安全:StringBuilder是線程不安全的,而StringBuffer是線程安全的 原因:StringBuffer中很多方法可以帶有synchronized關鍵字,是以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字,是以不能保證線程安全,有可能會出現一些錯誤的操作。是以如果要進行的操作是多線程的,那麼就要使用StringBuffer,但是在單線程的情況下,還是建議使用速度比較快的StringBuilder。
十、正規表達式
Pattern 類:pattern 對象是一個正規表達式的編譯表示。Pattern 類沒有公共構造方法。要建立一個 Pattern 對象,你必須首先調用其公共靜态編譯方法,它傳回一個 Pattern 對象。該方法接受一個正規表達式作為它的第一個參數。
Matcher 類:Matcher 對象是對輸入字元串進行解釋和比對操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要調用 Pattern 對象的 matcher 方法來獲得一個 Matcher 對象。PatternSyntaxException:PatternSyntaxException 是一個非強制異常類,它表示一個正規表達式模式中的文法錯誤。
十一、集合
整體關系圖
十二、I/O
I/O
十三、線程
線程的生命周期
建立狀态:
使用 new 關鍵字和 Thread 類或其子類建立一個線程對象後,該線程對象就處于建立狀态。它保持這個狀态直到程式 start() 這個線程。
就緒狀态:當線程對象調用了start()方法之後,該線程就進入就緒狀态。就緒狀态的線程處于就緒隊列中,要等待JVM裡線程排程器的排程。
運作狀态:如果就緒狀态的線程擷取 CPU 資源,就可以執行 run(),此時線程便處于運作狀态。處于運作狀态的線程最為複雜,它可以變為阻塞狀态、就緒狀态和死亡狀态。
阻塞狀态:如果一個線程執行了sleep(睡眠)、suspend(挂起)等方法,失去所占用資源之後,該線程就從運作狀态進入阻塞狀态。在睡眠時間已到或獲得裝置資源後可以重新進入就緒狀态。可以分為三種:等待阻塞:運作狀态中的線程執行 wait() 方法,使線程進入到等待阻塞狀态。同步阻塞:線程在擷取 synchronized 同步鎖失敗(因為同步鎖被其他線程占用)。其他阻塞:通過調用線程的 sleep() 或 join() 發出了 I/O 請求時,線程就會進入到阻塞狀态。當sleep() 狀态逾時,join() 等待線程終止或逾時,或者 I/O 處理完畢,線程重新轉入就緒狀态。
死亡狀态:一個運作狀态的線程完成任務或者其他終止條件發生時,該線程就切換到終止狀态。Java 提供了三種建立線程的方法: 通過實作 Runnable 接口; 通過繼承 Thread 類本身; 通過 Callable 和 Future 建立線程。
程序和線程的差別:程序是應用程式,線程是一條執行路徑程序有獨立的記憶體空間,崩潰不會影響其他程式,線程沒有獨立的空間,多個線程在同一個程序的空間,可能會影響其他線程一個程序中,至少有一個線程
run和start的差別
run
沒有開辟新的棧空間,沒有新線程,都是主線程在執行
start
開辟了新的棧空間,在新的棧空間啟動run()方法
sleep和pield的差別:
sleep
線程進入被阻塞的狀态
yeild
線程轉入暫停執行的狀态
打斷線程的終止方式1、用标記,當終止線程時,會執行完run方法2、stop()方法,不建議使用,會執行不到特定的代碼3、interrupt(),隻能中斷正在休眠的線程,通過抛異常的方法中斷線程的終止。InputStream inputStream=System.in;int m=inputStream.read();myThread2.interrupt();//通過外界輸入打斷
十四、資料庫
"com.mysql.jdbc.Driver");
十五、網絡
一、HttpClient:HttpClient 是Apache的一個三方網絡架構,網絡請求做了完善的封裝,api衆多,用起來比較友善,開發快。實作比較穩定,bug比較少,但是正式由于其api衆多,是我們很難再不破壞相容性的情況下對其進行擴充。是以,Android團隊對提升和優化httpclient積極性并不高。android5.0被廢棄,6.0逐漸删除。
二、HttpURLConnectionHttpURLConnection是一個多用途、輕量級的http用戶端。它對網絡請求的封裝沒有HttpClient徹底,api比較簡單,用起來沒有那麼友善。但是正是由于此,使得我們能更容易的擴充和優化的HttpURLConnection。不過,再android2.2之前一直存在着一些令人煩的bug,比如一個人可讀的inputstream調用它的close方法的時候,會使得連接配接池實效,通常的做法就是禁用連接配接池。是以,在android2.2之前建議使用穩定的HttpClient,android2.2之後使用更容易擴充和優化的HttpURLConnection。
三、okhttp支援Android 2.3及其以上版本;支援Java JDK 1.7以上版本;okhttp是專注于提升網絡連接配接效率的http用戶端。1、它能實作同一ip和端口的請求重用一個socket,這種方式能大大降低網絡連接配接的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了伺服器伺服器的壓力。2、okhttp 對http和https都有良好的支援。3、okhttp 不用擔心android版本變換的困擾。4、成熟的網絡請求解決方案,比HttpURLConnection更好用。4、缺點,okhttp請求網絡切換回來是線上程裡面的,不是在主線程,不能直接重新整理UI,需要我們手動處理。封裝比較麻煩。
十六、json和html
XML的三種原生解析方式
DOM,SAX,PULL
DOM:
記憶體消耗大 但是便于周遊.打開文檔,将其轉化為節點樹,然後在其用循環的方式,周遊節點,一一查找.
SAX:
速度快,戰記憶體少.但是檔案結構資訊會丢失,采用的是流的處理方式.從起始标簽開始一一往下逐個查找.起始标簽與結尾标簽作為标記來将一組資料存入一個集合中,想水流一樣一直到最尾,然後最後傳回集合,集合中就存下了所有的資料(這也應該就是所謂的流處理方式吧).
PULL:
是Android内置,推薦的一種,相對來說有點類似SAX,也是從上往下,但是它還是已文檔開始與結尾為條件,在其中間進行查找處理,然後分為不同标簽開始逐一查找.
JSON的三種解析方式原始解析:JSONObjectgoogle的
Gson:
Gson gson = new Gson(); String str = gson.toJson(obj);阿裡的
Fastjson:
JSON.parseObject(result,MenuBean.class);
Android部分
1、MVC、MVP、MVVM
推薦連結:http://blog.csdn.net/hudan2714/article/details/50990359
MVC
模型(model)-視圖(view)-控制器(controller)
MVC
資料關系:
View 接受使用者互動請求View 将請求轉交給ControllerController 操作Model進行資料更新資料更新之後,Model通知View更新資料變化View 更新變化資料
使用:MVC中的View是可以直接通路Model的!進而,View裡會包含Model資訊,不可避免的還要包括一些業務邏輯。在MVC模型裡,更關注的Model的不變,而同時有多個對Model的不同顯示,及View。是以,在MVC模型裡,Model不依賴于View,但是 View是依賴于Model的。不僅如此,因為有一些業務邏輯在View裡實作了,導緻要更改View也是比較困難的,至少那些業務邏輯是無法重用的。
MVP
Model提供資料,View負責顯示,Controller/Presenter負責邏輯的處理
MVP
資料關系:View 接收使用者互動請求View 将請求轉交給 PresenterPresenter 操作Model進行資料更新Model 通知Presenter資料發生變化Presenter 更新View資料
使用:MVP的實作會根據View的實作而有一些不同,一部分傾向于在View中放置簡單的邏輯,在Presenter放置複雜的邏輯;另一部分傾向于在presenter中放置全部的邏輯。這兩種分别被稱為:Passive View和Superivising Controller。
MVVM
Model-View-ViewModel
MVVM
資料關系:View 接收使用者互動請求View 将請求轉交給ViewModelViewModel 操作Model資料更新Model 更新完資料,通知ViewModel資料發生變化ViewModel 更新View資料
使用:可以相容你當下使用的 MVC/MVP 架構。增加你的應用的可測試性。配合一個綁定機制效果最好。
2、四大元件
Activity、BroadcastReceiver、Service、ContentProvider
Activity:(活動)
生命周期:
onCreate():
每個活動都會重寫這份方法,他會在活動第一次建立的時間被調用,可完成初始化操作,加載布局,綁定事件。
onStart():
不可見變成可見的時候調用。
onResum():
這個方法是在活動準備好和使用者進行互動的時候調用。
onPause():
這個方法是系統準備去啟動或者回複另一個活動的時候調用,使用者不可見,這裡需要儲存一些關鍵資料。
onStop():
這個方法在活動完全不可見的時間調用,被下一個activity覆寫。和onPause()的差別就是,若啟動的新活動是個對話框,onPause會執行,onStop不會執行.
onDestory():
這個在活動被銷毀錢調用,之後變成銷毀狀态。
onRestart():
這個方法在活動停止狀态變成運作狀态之前調用.onRestart->inStart->onResum啟動模式:
standard:
預設啟動方式,每次啟動都會建立一個新的活動。A啟動A,啟動一次建立一個。
singleTop:
在啟動界面時,如果發現該活動位于棧頂,則不會建立新的活動,直接使用它。A啟動A,隻會建立一個A。當A不位于棧頂時,啟動A,則會建立新的A。
singleTask:
每次啟動活動時,系統首次會在棧中檢查是否存在該活動的執行個體,如果發現已存在,則直接使用該執行個體,并把這個活動之上的所有活動統統出棧,如果發現沒有,則建立新的活動執行個體。A啟動B,B在啟動A,B銷毀(onDestory()),A重新位于棧頂(onRestart())。
singleInstance:
啟動一個新的棧來管理活動。程序間的通訊,别的程式和我們的程式可以共享這個活動。
BroadcastReceiver:(廣播)
注冊廣播的兩種方式:
靜态注冊:
我們需要生成一個類去繼承BroadcastReceiver,并複寫onReceiver()方法,并且在清單檔案中注冊Receiver,在标簽中定義action唯一辨別屬性。
動态注冊:
建立一個類繼承BroadcastReceiver,重寫onReceiver()方法.然後再Activity當中複寫onStart()和onStop()方法,在onStart()當中,我們需要構造一個IntentFilter對象,并執行這個對象的addAction方法,參數為action辨別符,再執行registerReceiver()方法,參數為廣播接收器對象和IntentFilter對象。在onStop()中執行unregisterReceiver()方法,參數為廣播接收器對象。
發送廣播:
無序廣播:
sendBroadcast()
有序廣播:
sendOrderedBroadcast()
本地廣播:
LocalBroadcastManager來管理廣播注意:1.廣播接收者的生命周期是非常短暫的,在接收到廣播的時候建立,onReceive()方法結束之後銷毀2.廣播接收者中不要做一些耗時的工作,否則會彈出Application No Response錯誤對話框3.最好也不要在廣播接收者中建立子線程做耗時的工作,因為廣播接收者被銷毀後程序就成為了空程序,很容易被系統殺掉4.耗時的較長的工作最好放在服務中完成
ContentProvider:(内容提供器)
跨程式共享資料功能通路其他程式:ContentResolver,增删改查,讀取聯系人功能建立自己的内容提供器供其他程式使用。繼承ContentProvider清單檔案必須注冊才能使用
Service(服務)
清單檔案必須注冊才能使用
1.Context.startService()
onCreate() -> onStartCommand() -> onDestroy()onCreate()該方法在服務被建立時調用,該方法隻會被調用一次onStart() 隻有采用Context.startService()方法啟動服務時才會回調該方法。該方法在服務開始運作時被調用。多次調用startService()方法盡管不會多次建立服務,但onStartCommand () 方法會被多次調用。onDestroy()該方法在服務被終止時調用。
2、Context.bindService()
onCreate() -> onBind() -> onUnbind() -> onDestroy()onCreate()該方法在服務被建立時調用,該方法隻會被調用一次onBind()隻有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,多次調用Context.bindService()方法,onBind()方法并不會導緻被多次調用。onUnbind()隻有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務解除綁定時被調用。onDestroy()該方法在服務被終止時調用。注意:如果先采用startService()方法啟動服務,又調用bindService()方法綁定到服務,必須同時調用stopService()和unbindSetvice(),服務才能停掉。Service和IntentService的差別是什麼?1.Service在預設情況下将會運作在主線程當中2.IntentService在收到請求後,将會執行onHandlerIntent方法,該方法運作在workerThread當中3.Service和IntentService的第二項差別是當Intent收到多次請求時,這些請求将會在消息隊列當中排隊,依次由onHandlerIntent處理
3、Android的資料存儲方式--持久化技術
檔案存儲、SharedPreference存儲、資料庫存儲
檔案存儲存儲簡單的文本或者二進制資料,流的方式存儲openFileOutput()openFileInput()
SharedPreference鍵值對的方式存儲三種方法擷取SharedPreference對象1.Context類中的getSharedPreference()方法2.Activity類中的getPreference()方法3.PreferenceManager類中的getSharedPreference()方法
資料庫存儲複雜的資料SQLiteSQLiteOpenHelper
4、異步消息處理機制--Message、Handler、MessageQueue、Lopper
1.在主線程,建立handler對象.2.在子線程,資料封裝在Message對象中,handler執行發送的動作(發送到handler所在的主線程)3.在主線程,message對象發送到messagequeue()中,looper調用loop()方法不斷監聽消息隊列,如果有資料,則取出,調用handler和dispatchmessage()方法将消息分發帶指定handler中.4.在主線程,dispatchmessage()方法中,将接收到的message對象交給handlemessage()方法處理.5.重寫handlermeaage()方法,做出實際的動作處理.
5、XML和JSON格式資料解析
XMLPullSaxDomJSONFastjson(阿裡)Gson(谷歌)jackson(SpringMVC自帶)
6、Intent和PendingIntent的差別
Intent:立即執行某個動作PendingIntent:在某個合适的時機去執行某個動作,延遲執行的intent
7、三種動畫
Drawable Animation(幀動畫)主要涉及類:AnimationDrawable1、通過 XML 檔案實作
<?xml version="1.0" encoding="utf-8"?>
java代碼開啟:
2、隻通過 Java 代碼實作
new AnimationDrawable();
View Animation(補間動畫)使用詳解 補間動畫,主要是向View對象設定動畫效果,包括AlphaAnimation 、RotateAnimation 、ScaleAnimation 、TranslateAnimation 這4種效果,對應的xml标簽分别是alpha、rotate、scale、translate。通過為動畫設定初始和終止對應的值,根據插值器和duration計算動畫過程中間相應的值實作平滑運動,即設定初始和終止狀态,插值器來計算填補初始狀态到終止狀态間的動畫。使用:1、設定相應動畫效果的起點值、終點值、duration(時長)、Interpolator(加速度)。(注:RotateAnimation還需要設定旋轉中心坐标值)2.Interpolator:插值器,随時間流逝動畫路程所應走過的百分比。比如,若設定為LinearInterpolator(勻速),時間過一半則插值器的值是0.5;若設定的是DecelerateInterpolator(加速插值器),時間過一半則插值器的值大于0.5.實作的方式:(例子,隻舉例子AlphaAnimation .其它三個,一模一樣)1、通過XML定義
<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:fromAlpha="0"android:toAlpha="1"android:duration="2000">
Java代碼調用:
null;
2、隻使用Java代碼調用
//在代碼中定義 動畫執行個體對象
roperty Animation(屬性動畫) 咳咳.這個動畫就太強大了,哀家實力有限,又要放大招了,那就是看别人的,哈哈哈哈~~~ 屬性動畫可以對任何對象的屬性做動畫而不僅僅是View,甚至可以沒有對象。除了作用對象進行擴充外,屬性動畫的效果也加強了,不僅能實作View動畫的4中效果,還能實作其它多種效果,這些效果都是通過ValuAnimator或ObjectAnimator、AnimatorSet等來實作的。 ValueAnimator :值動畫執行類,常配合AnimatorUpdateListener使用。 ObjectAnimator :對象動畫執行類。繼承自ValueAnimator,要指定一個對象及該對象的一個屬性,當屬性值計算完成時自動設定為該對象的相應屬性,不需要設定監聽,底層自動完成,一般會用ObjectAnimator來改變某一對象的某一屬性. 實作的方式: 1、xml
<?xml version="1.0" encoding="utf-8"?>
java代碼調用:
null;
2、Java代碼
"scaleX",
8、Design的使用
Design控件:Toolbar、CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout、TabLayout、TextInputLayout、NavigationView、FloatingActionButton、Snackbar。推薦學習連結:https://blog.csdn.net/lavor_zl/article/details/51295364
9、Fragment的生命周期
onAttach()
fragment已經關聯到activity
onCreate()
系統建立fragment的時候回調他,在他裡面執行個體化一些變量
onCreateView()
第一次使用的時候 fragment會在這上面畫一個layout出來 onActivityCreated() 當Activity中的onCreate方法執行完後調用。
onStart()
和activity一緻 啟動, Fragement 啟動時回調, 此時Fragement可見;
onResume()
和activity一緻 在activity中運作是可見的
onPause()
和activity一緻 其他的activity獲得焦點,這個仍然可見
onStop()
和activity一緻fragment不可見的,
onDestroyView()
Fragment中的布局被移除時調用。
onDestroy()
銷毀fragment對象
onDetach()
Fragment和Activity解除關聯的時候調用。
10、清單檔案裡面的内容包括哪些?
應用程式的包名,該包名作為該應用的唯一辨別。應用包含的元件,如Activity,Service,Broadcastreceiver和ContentProvider.應用程式使用系統所需的權限聲明。其他程式通路該程式所需的權限聲明。
11、如何相容不同的版本
在使用高于minSdkVersion API level的方法需要:用
@TargeApi($API_LEVEL)
使可以編譯通過, 不建議使用
@SuppressLint("NewApi")
;運作時判斷API level; 僅在足夠高,有此方法的API level系統中,調用此方法;保證功能完整性,保證低API版本通過其他方法提供功能實作。
12、如何配置第三方的sdk
1、依賴注入2、導入moudle
13、fragment的切換方式
如果用
replace()
就會每次都初始化Fragment正确的切換方式是
add()
,切換時
hide()
,
add()
另一個Fragment;再次切換時,隻需
hide()
目前,
show()
另一個。這樣就能做到多個Fragment切換不重新執行個體化
14、點選事件的分發機制
首先會手勢在螢幕上傳遞事件,會先走到最外層的布局的
dispatchTouchEvent
--》然後通過
onInterceptTouchEvent
的傳回值,判斷是否攔截,如果攔截,就不走子視圖當中的事件響應了,而執行自己的
onTouchEvent
方法,如果不攔截,就會走子視圖
dispatchTouchEvent
--
onTouch
--
onTouchEvent
方法,如果
onTouchEvent
的傳回值為true,那麼這個事件此子視圖負責消費,否則就會回傳到上一視圖的
onTouchEvent
當中來處理,如果上一視圖傳回為
true
,則其消費,否則事件回收不做處理。在
onTouchListener
當中的
onTouch
方法裡,判斷傳回值,然後決定是否執行
onTouchEvent
方法,然後在onTouchEvent方法的ACTION_DOWN操作中通過判斷時間和标志位,決定是否執行
onLongClickListener
當中
onLongClick
操作,然後在
onLongClick
方法中通過判斷傳回值,來确定
onClickListener
的
onClick
方法是否會執行,如果傳回
false
,都能執行,如果傳回
true
,
onClick
不執行。
15、消息推送原理以及實作過程
用戶端和伺服器一直保持長連結推薦連結:https://www.jianshu.com/p/da4529fd4675
16、map集合的存儲原理
通過鍵值對的方式進行存取資料的
17、自定義View的隻要重寫的方法名有哪些?
有三個構造方法(一個參數、兩個參數、三個參數),其中兩個參數的構造方法必須有。onDraw()方法必須有,是用來繪制View圖像的如果要改變View 的大小,需要重寫onMeasure()方法。如果要改變View在父控件中的位置,需要重寫onLayout()方法
18、Alipay的支付流程?
支付寶支付流程
19、怎麼讓viewpager不滑動?
大緻就是重寫ViewPager,覆寫ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法和onTouchEvent(MotionEvent arg0)方法,這兩個方法的傳回值都是boolean類型的,隻需要将傳回值改為false,那麼ViewPager就不會消耗掉手指滑動的事件了,轉而傳遞給上層View去處理或者該事件就直接終止了。
20、如何避免記憶體洩露(造成記憶體洩漏的原因)?
資源對象沒關閉造成的記憶體洩漏,如查詢資料庫後沒有關閉遊标cursor構造Adapter時,沒有使用 convertView 重用Bitmap對象不在使用時調用recycle()釋放記憶體
21、下拉重新整理的實作?
1.原生的SwipeRefreshLayout設定監聽,寫onRefresh()方法,然後設定setrefreshing(true),重新整理完之後設定成false.2.第三方架構. PullToRefresh.在布局檔案中添加PullToRefresh控件,比如PullToRefreshListView; 在Activity中,設定監聽器OnRefreshListener以響應使用者下拉操作; 在監聽器的onRefresh()方法中執行資料重新整理操作,可以通過AsyncTask來實作; 在AsyncTask中擷取到資料後,記得調用onRefreshComplete()方法通知PullToRefresh控件資料已擷取完畢,可以結束重新整理操作。
22、側滑菜單的實作?(抽屜效果)
1.DrawerLayout.第一個控件是主題内容,第二個控件是側滑菜單内容.與toolbar連用,使用開關.ActionBarDraweerTohhle.2.SlidingPaneLayout第一個控件為左側側滑菜單,第二個為主題内容Toolbar和SlidingPaneLayout不能夠直接互相配合使用,要通過actionbar和slidingpaneLayout的監聽事件才能關聯起來
23、java虛拟機jvm和android虛拟機Dalvik的差別?
java虛拟機:java虛拟機運作的是java位元組碼。(java類會被編譯成一個或多個位元組碼.class檔案,打包到.jar檔案中,java虛拟機從相應的.class檔案和.jar檔案中擷取相應的位元組碼)android虛拟機:Dalvik運作的是自定義的.dex位元組碼格式。(java類被編譯成.class檔案後,會通過一個dx工具将所有的.class檔案轉換成一個.dex檔案,然後dalvik虛拟機會從其中讀取指令和資料)
24、Java當中的加密解密技術?
1、md5加密,該加密算法是單向加密,即加密的資料不能再通過解密還原。保證資料的完整性.相關類包含在java.security.MessageDigest包中。2、DES加密,該加密算法是可逆的,解密方可以通過與加密方約定的密鑰匙進行解密。相關類包含在javax.crypto.*包中。3、base64編碼,是用于傳輸8bit位元組代碼最常用的編碼方式。相關類在sun.misc.BASE64Decoder 和sun.misc.BASE64Encoder 中。4、URLEncoder編碼,是一種字元編碼,保證被傳送的參數由遵循規範的文本組成。相關類在java.net.URLEncoder包中。5.RSA. 公鑰加密,私鑰加密.互為加解密,自己不可以解密非對稱加密6. Sign:摘要算法+不對稱加密算法保證資料的安全性,用對方的公鑰加密,發送成功後,用對方的私鑰解密
25、螢幕适配的方法
螢幕适配
推薦文章:https://blog.csdn.net/wangwangli6/article/details/63258270/
26、圖檔的三級緩存
記憶體緩存,優先加載,速度最快本地緩存,次優先加載,速度快網絡加載,不優先加載,速度慢,浪費流量
原理:
圖檔緩存流程
推薦連結:https://www.jianshu.com/p/2cd59a79ed4a
27、适配全面屏
1、App AndroidManifest的Application标簽下面增加下面一段代碼:
2、更換部分被拉伸的圖檔資源檔案(相對布局采用XML的方式,或者.9圖的解決方案)3、布局檔案的優化建議(使用百分比布局)
28、AIDL的使用
全名:Android Interface Definition Language作用:為了實作程序間通信. 這個對我來說,用的很少,但是面試的時候會被問到,主要是實作了程序間的通信問題,一般一項目,一個程序,除非業務邏輯比較多,運作記憶體不夠用的情況下,會使用AIDL.總體來說,主要是通過,定義接口的形式來實作,用戶端服務端的資料互動,下面的連結,跟着敲一遍,基本上就明白啥事了.推薦位址:https://github.com/leavesC/AIDLSamples
29、視訊的相關内容
1、使用第三方庫ijkPlayer。github位址:https://github.com/bilibili/ijkplayer,這是一個解碼器,配合surfaceView可以播放視訊,然後界面上的進度條,暫停,開始,聲音等等功能,還是需要自己的去寫的。
2、我沒做過視訊的項目,了解不是很深。推薦一個比較好的第三方庫,https://github.com/jiajunhui/PlayerBase,這個視訊做的挺好的,功能很齊全。
更多學習和讨論,歡迎加入我們的知識星球,這裡有1000+小夥伴,讓你的學習不寂寞~·
看完本文有收獲?請轉發分享給更多人
我們的知識星球第三期開期了,已達到1100人了,能連續做三期已很不容易了,有很多老使用者續期,目前續期率達到50%,說明了大家對我們的知識星球還是很認可的,歡迎大家加入盡早我們的知識星球,更多星球資訊參見:
歡迎加入Java和Android架構社群
如何進階成為Java的Android版和架構師?
說兩件事
微信掃描或者點選上方二維碼領取的Android \ Python的\ AI \的Java等進階進階資源
更多學習資料點選下面的
謝謝老闆,點個好看↓