摘要:內部類的作用成員內部類成員內部類可以無條件訪問外部類的所有成員屬性和成員方法包括成員和靜態成員。匿名內部類匿名內部類就是沒有名字的內部類靜態內部類指被聲明為的內部類,他可以不依賴內部類而實例,而通常的內部類需要實例化外部類,從而實例化。
大部分開發者進入公司,一個必備的環節就是面試,只有通過面試,才能知道求職者是否符合公司的要求,也只有通過面試,求職者才能有幸進入到企業里工作,那么怎么才能提高面試的成功率呢?對于開發者而言,顯然是技術的掌握水平,由于技術的面非常廣,我們并不可能全部的都掌握,但是,多多少少我們都有所了解,準備的越充足,意味著成功率也能大大的提高。
對于Android的面試,我們可以發現,要求的是越來越多,越來越嚴苛,面試如同造航母,已經遠不如14年15年那么好找了,對于一些點,不僅僅要會用,一些原理源碼性的東西,也必須得去研究掌握。
接下來的幾篇文章,主要羅列一下Android面試中常見的點,希望可以幫助到大家,這一篇主要針對java中常見的點。
問題 1:java中==和equals和hashCode的區別 答案【答案不唯一,可自己衡量】: equalsequals的作用是判斷兩個對象是否相等。
通過判斷兩個對象的地址是否相同來判斷。
====一般用于基本類型數據的比較,判斷兩個值是否相同
也可以用于類的比較,同樣也是比較兩個對象的內存地址。(就是兩個對象都是同一個對象)
所以在equals沒覆蓋的情況下,==和equals是等價的。
( 我們可以通過覆蓋equals來讓相同內容的對象來返回true。)
hashcode能夠高效率的產生一個離散的int值。
通過hashCode()來計算出兩個對象的hash值然后進行比較。
但是會出現不同的類也會有相同hash值,所以這不是安全、不可靠的。
?####總結
總的來說就是一般情況equals和==是等價的。
如果兩個對象相等,則他們一定是equals返回true。
如果兩個對象的hashCode相同,也不能 100%保證它們是相同的。
?
問題 2:int、char、long各占多少字節數 答案【答案不唯一,可自己衡量】: 問題 3:int與integer的區別 答案【答案不唯一,可自己衡量】:1 Integer是int的包裝類,int則是Java的一種基本數據類型
2 Integer變量必須實例化之后才可以使用,而int變量不需要
3 Integer實際是對象的引用,當new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲數據值
4 Integer的默認值是null,int的默認值是0
?
問題 4:談談對java多態的理解 答案【答案不唯一,可自己衡量】:打個比方 父親person有行為這個方法,里面包括幾個動作:吃飯,睡覺,走路 父親有三個兒子,三個兒子都繼承了父親的行為方法,所以三個兒子都有吃飯,睡覺,走路這些動作,但是三個兒子又分別有自己的動作--大兒子A會彈吉他,二兒子B會唱歌,三兒子C會打鼓 ...
1.Person person = new A(); 不是父類對象指向子類引用而是父類引用指向子類對象
2.這個對象不能調用子類A特有的彈吉他方法--person.guitar(); X
3.如果僅是這么寫程序,還不是多態,記住實現多態的三要素:繼承 重寫 父類引用指向子類對象
4.之后,如果你調用persion.guitar(),此時在代碼的編譯階段,persion調用的仍然是自己的guitar(),不是兒子的。而當程序運行時,就是java XXX, persion調用的卻是兒子的guitar()。這個動態的過程才是多態 。
Person person;
? ? ? ? ? //父類的引用指向子類的方法;
? ? ? ? ? person = new Student();
? ? ? ? ? //person類型引用做一個判斷
? ? ? ? ? //(1)if(person.eat().size==2 )
? ? ? ? ? {
? ? ? ? if(person instanceof Person)
? ? ? ? {? ? ?
? person.eat();
? ? ? }else if(person instanceof Student)? ? ? ? {
? ? ? ? Student stu = (Student)person;
? ? ? ? stu.eat();
? ? ? ? }? ? ? ? ?
? ? ? ? ? person.eat();//從代碼角度看,此時是父類的引用調用的是父類中的eat方法
? ? ? ? ? //(2)子類若覆蓋了父類的方法,eat動態綁定到父類的引用Person上,換個名字叫動態綁定
? ? ? ? ? //父類的引用可以調用子類的方法,我們把這一現象成為多態
? ? ? ? ? //從字面意思來理解person這個父類的引用一會是person一會是student
? ? ? ? ? //person有多種狀態;
? ? ? ? ? //也叫方法的動態綁定
? ? ? ? ? //繼承是通向多態的入口
? ? ? ? ? person.f2();
? ? ? ? ? person.gotobed();
? ? ? ? ? person.eat();
? ? ? ? ? Student stu = new Student();
? ? ? ? ? stu.eat();
? ? ? ? ? stu.gotobed();
? ? ? ? ? //父類的引用能夠調用子類的方法
? ? ? }??
Java中,父類的引用既可以指向父類的對象,也可以指向子類的對象。但子類的引用不能指向父類的對象。
引用類型也可以進行類型轉換。
但轉換的類型一定具有繼承關系,即僅允許父子類之間進行轉換。
如果嘗試將毫無關聯的兩個類型進行轉換,將會引發編譯錯誤。可以使用instanceof來判斷引用是否為指定的類型。
?
問題 5:String、StringBuffer、StringBuilder區別 答案【答案不唯一,可自己衡量】:我們先對比下String, StringBuffer, StringBuilder這三個類。他們的主要區別一般體現在線程安全和執行效率上。
String類是用final修飾符修飾的,它的值是不可修改的,因此是線程安全的。 如果一個StringBuffer對象在緩沖區被多個線程使用時,因為StringBuffer的方法都是帶有synchronized關鍵字的,所以可以保證線程安全,而StringBuilder的方法沒有該關鍵字,不能保證線程安全,因此可能會出現一些操作錯誤。多線程情況下建議使用StringBuffer,單線程建議使用速度較快的StringBuilder。
2.執行效率先看一段代碼:
?String str = "abcdef";
?str = str + "123456";
?System.out.println(str);
這段代碼輸出的結果是: “abcdef123456”, 看著好像是str被改變了,但實際上這是一種假象,JVM對上述代碼是這樣處理的。 1.執行第一行代碼:新建一個String對象“abcdef”(該對象保存在字符串常量池中)將“abcdef”對象的實例引用賦值給str(保存在棧中)。 2.執行第二行代碼: 再新建一個String對象str,用來執行str + "123456"操作,也就是說,str這個對象是沒有發生改變的(String不可變)。每當用String操作字符串時,實際上是在不斷的創建新的對象,而原來的對象就會變為垃圾被GC回收掉,可想而知這樣執行效率會有多低。 一個特殊例子:
String str = "This is a" + "special" + "example";
StringBuilder stringBuilder = new StringBuilder("This is a").append("special").append("example");
你會發現生成str對象的速度簡直太快了,而這個時候StringBuilder速度上根本一點都不占優勢。 其實這是JVM的一個把戲,實際上:String str = "This is a" + "special" + "example";其實就是:?String str = “This is a special example”;所以不需要太多的時間了。 要注意的是,如果你的字符串是來自另外的String對象的話,速度就沒那么快了,譬如:
String str2 = "This is a";
String str3 = "special";
String str4 = "test";
String str = str2 +str3 + str4;
這時候JVM會規規矩矩的按照原來的方式去做。
總結1.如果要操作少量的數據用 --> String 2.單線程操作字符串緩沖區 下操作大量數據 --> StringBuilder 3.多線程操作字符串緩沖區 下操作大量數據 --> StringBuffer
?
問題 6:什么是內部類?內部類的作用 答案【答案不唯一,可自己衡量】: 什么是內部類:將一個類定義在另一個類里面或者一個方法里面,這樣的類稱為內部類。
內部類的作用: 1.成員內部類成員內部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態成員)。
當成員內部類擁有和外部類同名的成員變量或者方法時,會發生隱藏現象,即默認情況下訪問的是成員內部類的成員。
局部內部類是定義在一個方法或者一個作用域里面的類,它和成員內部類的區別在于局部內部類的訪問僅限于方法內或者該作用域內。
3.匿名內部類匿名內部類就是沒有名字的內部類
4.靜態內部類指被聲明為static的內部類,他可以不依賴內部類而實例,而通常的內部類需要實例化外部類,從而實例化。靜態內部類不可以有與外部類有相同的類名。不能訪問外部類的普通成員變量,但是可以訪問靜態成員變量和靜態方法(包括私有類型)
一個 靜態內部類去掉static 就是成員內部類,他可以自由的引用外部類的屬性和方法,無論是靜態還是非靜態。但是不可以有靜態屬性和方法、
1.每個內部類都能獨立的繼承一個接口的實現,所以無論外部類是否已經繼承了某個(接口的)實現,對于內部類都沒有影響。內部類使得多繼承的解決方案變得完整,
2.方便將存在一定邏輯關系的類組織在一起,又可以對外界隱藏。
3.方便編寫事件驅動程序
4.方便編寫線程代碼
?
問題 7:抽象類和接口區別 答案【答案不唯一,可自己衡量】: 抽象類是什么:抽象類不能創建實例,它只能作為父類被繼承。抽象類是從多個具體類中抽象出來的父類,它具有更高層次的抽象。從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為其子類的模板,從而避免了子類的隨意性。
(1) 抽象方法只作聲明,而不包含實現,可以看成是沒有實現體的虛方法
(2) 抽象類不能被實例化
(3) 抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這個類聲明為抽象類
(4) 具體派生類必須覆蓋基類的抽象方法
(5) 抽象派生類可以覆蓋基類的抽象方法,也可以不覆蓋。如果不覆蓋,則其具體派生類必須覆蓋它們
接口是什么:(1) 接口不能被實例化
(2) 接口只能包含方法聲明
(3) 接口的成員包括方法、屬性、索引器、事件
(4) 接口中不能包含常量、字段(域)、構造函數、析構函數、靜態成員
接口和抽象類的區別:(1)抽象類可以有構造方法,接口中不能有構造方法。
(2)抽象類中可以有普通成員變量,接口中沒有普通成員變量
(3)抽象類中可以包含靜態方法,接口中不能包含靜態方法
(4) 一個類可以實現多個接口,但只能繼承一個抽象類。
(5)接口可以被多重實現,抽象類只能被單一繼承
(6)如果抽象類實現接口,則可以把接口中方法映射到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現接口中方法
接口和抽象類的相同點:(1) 都可以被繼承
(2) 都不能被實例化
(3) 都可以包含方法聲明
(4) 派生類必須實現未實現的方法
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75011.html
摘要:今天總結一下中常見的面試題與的區別比較變量內存地址和值是否相等,僅僅比較變量的值是否相等需要注意當變量的值較小時時,的值是,這是由于定義變量時底層的實現決定的,例如小整數對象池兩個變量的值就會相同,導致的值為。 今天總結一下python中常見的面試題: 1.is與==的區別is比較變量內存地址和值是否相等,==僅僅比較變量的值是否相等需要注意:當變量的值較小時(a=1, b=1時,a ...
摘要:常見面試題實現垂直水平居中前言面試中常常被問到,如何使用來實現一個元素的垂直水平方向上居中,特別是筆試題的時候,這道題目的出現頻率還是比較高的,當然,在我們的生活中,也常常會有垂直水平居中的需求。 常見面試題—css實現垂直水平居中 前言 面試中常常被問到,如何使用css來實現一個元素的垂直水平方向上居中,特別是筆試題的時候,這道題目的出現頻率還是比較高的,當然,在我們的生活中,也常常...
摘要:容器自動完成裝載,默認的方式是這部分重點在常用模塊的使用以及的底層實現原理。 對于那些想面試高級 Java 崗位的同學來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實際工作的題目就屬于真正的本事了,熱門技術的細節和難點成為了主要考察的內容。 這里說「天方夜譚」并不是說算法沒用,不切實際,而是想說算法平時其實很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結打磨了 70 道...
摘要:瀏覽器內核常用的塊元素和內聯元素數據類型語句前端優化方法會話跟蹤方法和區別循環輸出網站優化清除浮動方法,優缺點和區別截取長文本寫方法截取字符串響應式布局瀏覽器兼容正則表達式驗證身份證源碼自己如何封裝一個固定一個按鈕在右下角畫一個三角形同步和 1、瀏覽器內核2、常用的塊元素和內聯元素3、數據類型 *4、SQL語句5、前端優化方法 *6、會話跟蹤方法 *7、display : none 和...
閱讀 796·2021-11-24 09:38
閱讀 998·2021-11-11 11:01
閱讀 3236·2021-10-19 13:22
閱讀 1524·2021-09-22 15:23
閱讀 2828·2021-09-08 09:35
閱讀 2766·2019-08-29 11:31
閱讀 2119·2019-08-26 11:47
閱讀 1563·2019-08-26 11:44