1.面向對象(OOP):針對業(yè)務處理過程的實體及其屬性和行為進行抽象封裝以獲得高效清晰的邏輯單元劃分庵朝。
三大特性:①封裝(隱藏對象的屬性和實現細節(jié),僅對外提供公共訪問方式侮腹,將變量隔離便于使用嘲碧,提高代碼的服用小和安全性);②繼承(提高代碼的復用性父阻,繼承是多態(tài)的前提)愈涩;③多態(tài)(父類或接口定義的引用變量可以指向子類或具體實現類的形象,提高了程序的拓展性)至非。
五大原則:單一職責钠署、開放封閉、里氏替換荒椭、依賴倒置谐鼎、接口分離。
2.數據類型:byte 1個字符趣惠,short 狸棍、char2 個字符,int 味悄、float 4個字符草戈,long 、double 8個字符侍瑟。
volatile是一個類型修飾符(type specifier)volatile的作用是作為指令關鍵字唐片,確保本條指令不會因編譯器的優(yōu)化而省略丙猬,且要求每次直接讀值。(from百度)
volatile的變量是說這變量可能會被意想不到地改變费韭,這樣茧球,編譯器就不會去假設這個變量的值了。
在JDK1.7之前星持,switch語句僅支持byte抢埋、short、char督暂、int揪垄,在JDK1.7之后,枚舉逻翁、字符串類型都可以饥努,通過String.hashcode轉成int進行判斷。
String不可變原因:字符串常量池的需要卢未;運行String對象緩存HashCode肪凛,提高效率;多線程安全辽社。
String 轉integer的方法和原理
?①Integer.parseInt(String str)調用Integer內部的;
②Integer.parseInt(String s, int radix)parseInt內部首先判斷字符串是否包含符號(-或者+)翘鸭,則對相應的negative和limit進行賦值滴铅,然后再循環(huán)字符串,對單個char進行數值計算
③Character.digit(char ch, int radix)?返回指定基數中字符表示的數值就乓。函數肯定進入到0-9字符的判斷(相對于string轉換到int)汉匙,否則會拋出異常,數字就是如上面進行拼接然后生成的int類型數值生蚁。
限定參數類型的上界:參數類型必須是T或T的子類型
<? super T> 限定參數類型的下界:參數類型必須是T或T的超類型
3.equal和==的區(qū)別:equal 比較對象噩翠,==比較原生類型
equal:存儲空間的值是否相同,字符串內容比較邦投,值是否相同
==:是否為同一內存空間伤锚,內存空間是否相同,引用是否相同
如果一個類重寫了equals()方法志衣,則一定也要重寫hashCode()方法屯援,原因是:雖然equals()方法重寫可以保證正確判斷兩個對象在邏輯是否相同,但是hashCode()方法映射的物理地址是不相同的念脯,依然會將邏輯上相同的兩個元素存入集合狞洋,但是第二個對象的內容會是Null.
參考文章:關于java中Object類中的equals()和hashCode()方法的使用個人總結 - 張森(ZhangSen) - 博客園
4.字符串運行速度:StringBuilder > StringBuffer (線程安全)> String ,String為常量绿店,其它為變量吉懊,所以運行慢庐橙。
? ? StringBuffer對象則代表一個字符序列可變的字符串,當一個StringBuffer被創(chuàng)建以后借嗽,通過StringBuffer提供的append()态鳖、insert()、reverse()淹魄、setCharAt()郁惜、setLength()等方法可以改變這個字符串對象的字符序列。一旦通過StringBuffer生成了最終想要的字符串甲锡,就可以調用它的toString()方法將其轉換為一個String對象兆蕉。StringBuffer對象是一個字符序列可變的字符串,它沒有重新生成一個對象缤沦,而且在原來的對象中可以連接新的字符串虎韵。
StringBuilder和StringBuffer基本相似,兩個類的構造器和方法也基本相同缸废。不同的是:StringBuffer是線程安全的包蓝,而StringBuilder則沒有實現線程安全功能,所以性能略高
5.Queue 隊列:先進先出企量,Stack 棧:后進先出测萎。Collect -->List/Set/Map
6.ListView機制:用到的適配器有ArrayAdapter、SimpleAdapter届巩、BaseAdapter
BaseAdapter 重寫的方法getCount()硅瞧、getItem()、getItemId()恕汇、getView()腕唧,每繪制一次就調用一次getView(),在getView()中將事先定好的layout布局確定顯示的效果并返回一個view對象作為一個item 顯示出來瘾英,getItem()枣接、getItemId()在調用LIstView響應方法時調用。
7.Fragment生命周期?
參考文章:Fragment各種情況的生命周期 - 貓吻魚的博客 - CSDN博客
onAttach(): 完成Fragment和Activity的綁定缺谴,參數中的Activity即為要綁定的Activity但惶,可以進行賦值等操作。
onCreate() : 完成Fragment的初始化
onCreateView() : 加載Fragment布局瓣赂,綁定布局文件
onActivityCreated() : 表名與Fragment綁定的Activity已經執(zhí)行完成了onCreate榆骚,可以與Activity進行交互操作。
onStart() : Fragment變?yōu)榭梢姞顟B(tài)
onResume() : Fragment變?yōu)榭山换顟B(tài)
onPause(): Fragment變?yōu)椴豢山换顟B(tài)(不代表不可見)
onSaveInstanceState():保存當前Fragment的狀態(tài)煌集。記錄一些數據妓肢,比如EditText鍵入的文本,即使Fragment被回收又重新創(chuàng)建苫纤,一樣能恢復EditText之前鍵入的文本碉钠。
onStop(): Fragment變?yōu)椴豢梢姞顟B(tài)
onDestroyView() : 銷毀Fragment的有關視圖纲缓,但并未和Activity解綁,可以通過onCreateView()重新創(chuàng)建視圖喊废。Fragment銷毀時或者ViewPager+Fragment情況下會調用
onDestroy() : 銷毀Fragment時調用
onDetach() : 解除和Activity的綁定祝高。Fragmen銷毀最后一步。
8.四大引用類型
強引用:?是指創(chuàng)建一個對象并把這個對象賦給一個引用變量污筷。?強引用有引用變量指向時永遠不會被垃圾回收工闺,JVM寧愿拋出OutOfMemory錯誤也不會回收這種對象。
軟引用(SoftReference):如果一個對象具有軟引用瓣蛀,內存空間足夠陆蟆,垃圾回收器就不會回收它;如果內存空間不足了惋增,就會回收這些對象的內存叠殷。只要垃圾回收器沒有回收它,該對象就可以被程序使用诈皿。軟引用可用來實現內存敏感的高速緩存,比如網頁緩存林束、圖片緩存等。使用軟引用能防止內存泄露稽亏,增強程序的健壯性壶冒。SoftReference的特點是它的一個實例保存對一個Java對象的軟引用, 該軟引用的存在不妨礙垃圾收集線程對該Java對象的回收截歉。也就是說依痊,一旦SoftReference保存了對一個Java對象的軟引用后,在垃圾線程對 這個Java對象回收前怎披,SoftReference類所提供的get()方法返回Java對象的強引用。另外瓶摆,一旦垃圾線程回收該Java對象之 后凉逛,get()方法將返回null。
弱引用(WeakReference):弱引用也是用來描述非必需對象的群井,當JVM進行垃圾回收時状飞,無論內存是否充足,都會回收被弱引用關聯的對象书斜。在java中诬辈,用java.lang.ref.WeakReference類來表示。
虛引用(PhantomReference):虛引用和前面的軟引用荐吉、弱引用不同焙糟,它并不影響對象的生命周期。在java中用java.lang.ref.PhantomReference類表示样屠。如果一個對象與虛引用關聯穿撮,則跟沒有引用與之關聯一樣缺脉,在任何時候都可能被垃圾回收器回收。要注意的是悦穿,虛引用必須和引用隊列關聯使用攻礼,當垃圾回收器準備回收一個對象時,如果發(fā)現它還有虛引用栗柒,就會把這個虛引用加入到與之 關聯的引用隊列中礁扮。程序可以通過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收瞬沦。如果程序發(fā)現某個虛引用已經被加入到引用隊列太伊,那么就可以在所引用的對象的內存被回收之前采取必要的行動。
對于強引用蛙埂,我們平時在編寫代碼時經常會用到倦畅。而對于其他三種類型的引用,使用得最多的就是軟引用和弱引用绣的,這2種既有相似之處又有區(qū)別叠赐。它們都是用來描述非必需對象的,但是被軟引用關聯的對象只有在內存不足時才會被回收屡江,而被弱引用關聯的對象在JVM進行垃圾回收時總會被回收芭概。
9.線程是進程的子集,一個進程可有多個線程惩嘉。
線程間通訊方式:①共享變量罢洲;②管道;③handler文黎;④runOnUiThread(Runnable)惹苗;⑤view.post(Runnable)。
?進程間通訊方式:①管道耸峭;②FIFO桩蓉;③消息隊列;④信號量劳闹;⑤共享內存區(qū)院究;⑥套接字socket信號。
?Activity間的通信方式:①Intent本涕;②借助類的靜態(tài)變量业汰;③借助全局變量/Application;④借助外部工具(SharedPreference菩颖、SQLite样漆、File、剪貼板)位他;⑤借助Service氛濒。
10.PackageManagerService APP安裝有關的service产场,WindowManagerService APP調用窗口相關的service,ActivityManagerService 系統(tǒng)的引導服務舞竿,支持應用進程的啟動京景、切換、調度骗奖、四大組件的啟動和管理确徙。
自定義系統(tǒng)服務:在ServiceManager注冊,在Framework/base增加JNI执桌,C++ 文件鄙皇,在build 配置mk文件,全部編譯仰挣,才可調用伴逸。
上一篇:Android面試總結
下一篇:Android基礎知識總結(二)