中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

2020面試必知:中高級工程師面試題集整理(題目+答案)

發布時間:2020-08-18 01:48:54 來源:ITPUB博客 閱讀:295 作者:yilian 欄目:移動開發
這些面試題是我準備換工作的時候整理,沒有重點。包括java基礎,數據結構,網絡,Android相關等等。

適合中高級工程師。由于內容過多,將會分為上下兩部分。

希望能夠幫到一些朋友,如果幫助到你,希望能夠點個贊。沒有單獨分出來,面試題目都是穿插的。因為有些事外面試過程中遇到的,我就又加上去了。總之你弄懂了這些,基本是沒有問題了。如果是bat那些企業,你還得準備算法,jvm這些知識。好了,廢話不多說了。

1、java中==和equals和hashCode的區別

基本數據類型的==比較的值相等.

類的==比較的內存的地址,即是否是同一個對象,在不覆蓋equals的情況下,同比較內存地址,原實現也為 == ,如String等重寫了equals方法.

hashCode也是Object類的一個方法。返回一個離散的int型整數。在集合類操作中使用,為了提高查詢速度。(HashMap,HashSet等比較是否為同一個)

如果兩個對象equals,Java運行時環境會認為他們的hashcode一定相等。

如果兩個對象不equals,他們的hashcode有可能相等。

如果兩個對象hashcode相等,他們不一定equals。

如果兩個對象hashcode不相等,他們一定不equals。

2、int與integer的區別

int 基本類型

integer 對象 int的封裝類

3、String、StringBuffer、StringBuilder區別

String:字符串常量 不適用于經常要改變值得情況,每次改變相當于生成一個新的對象

StringBuffer:字符串變量 (線程安全)

StringBuilder:字符串變量(線程不安全) 確保單線程下可用,效率略高于StringBuffer

4、什么是內部類?內部類的作用

內部類可直接訪問外部類的屬性

Java中內部類主要分為成員內部類局部內部類(嵌套在方法和作用域內)、匿名內部類(沒構造方法)、靜態內部類(static修飾的類,不能使用任何外圍類的非static成員變量和方法, 不依賴外圍類)

5、進程和線程的區別

6、final,finally,finalize的區別

final:修飾類、成員變量和成員方法,類不可被繼承,成員變量不可變,成員方法不可重寫

finally:與try...catch...共同使用,確保無論是否出現異常都能被調用到

finalize:類的方法,垃圾回收之前會調用此方法,子類可以重寫finalize()方法實現對資源的回收

7、Serializable 和Parcelable 的區別

Serializable Java 序列化接口 在硬盤上讀寫 讀寫過程中有大量臨時變量的生成,內部執行大量的i/o操作,效率很低。

Parcelable Android 序列化接口 效率高 使用麻煩 在內存中讀寫(AS有相關插件 一鍵生成所需方法) ,對象不能保存到磁盤中

8、靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?

可繼承 不可重寫 而是被隱藏

如果子類里面定義了靜態方法和屬性,那么這時候父類的靜態方法或屬性稱之為"隱藏"。如果你想要調用父類的靜態方法和屬性,直接通過父類名.方法或變量名完成。

9、成員內部類、靜態內部類、局部內部類和匿名內部類的理解,以及項目中的應用

10、string 轉換成 integer的方式及原理

String ?integer Intrger.parseInt(string);

Integer?string Integer.toString();

11、哪些情況下的對象會被垃圾回收機制處理掉?

12、靜態代理和動態代理的區別,什么場景使用?

靜態代理類:

由程序員創建或由特定工具自動生成源代碼,再對其編譯。在程序運行前,代理類的.class文件就已經存在了。動態代理類:在程序運行時,運用反射機制動態創建而成。

14、Java中實現多態的機制是什么?

答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現

重寫Overriding是父類與子類之間多態性的一種表現

重載Overloading是一個類中多態性的一種表現.

16、說說你對Java反射的理解

17、說說你對Java注解的理解

18、Java中String的了解

在源碼中string是用final 進行修飾,它是不可更改,不可繼承的常量。

19、String為什么要設計成不可變的?

20、Object類的equal和hashCode方法重寫,為什么?

21、List,Set,Map的區別

26、ArrayMap和HashMap的對比

1、存儲方式不同

HashMap內部有一個HashMapEntry[]對象,每一個鍵值對都存儲在這個對象里,當使用put方法添加鍵值對時,就會new一個HashMapEntry對象,

2、添加數據時擴容時的處理不一樣,進行了new操作,重新創建對象,開銷很大。ArrayMap用的是copy數據,所以效率相對要高。

3、ArrayMap提供了數組收縮的功能,在clear或remove后,會重新收縮數組,是否空間

4、ArrayMap采用二分法查找;

29、HashMap和HashTable的區別

1 HashMap不是線程安全的,效率高一點、方法不是Synchronize的要提供外同步,有containsvalue和containsKey方法。

hashtable是,線程安全,不允許有null的鍵和值,效率稍低,方法是是Synchronize的。有contains方法方法。Hashtable 繼承于Dictionary 類

30、HashMap與HashSet的區別

31、HashSet與HashMap怎么判斷集合元素重復?

HashSet不能添加重復的元素,當調用add(Object)方法時候,

首先會調用Object的hashCode方法判hashCode是否已經存在,如不存在則直接插入元素;如果已存在則調用Object對象的equals方法判斷是否返回true,如果為true則說明元素已經存在,如為false則插入元素。

33、ArrayList和LinkedList的區別,以及應用場景

34、數組和鏈表的區別

35、開啟線程的三種方式?

36、線程和進程的區別?

線程是進程的子集,一個進程可以有很多線程,每條線程并行執行不同的任務。不同的進程使用不同的內存空間,而所有的線程共享一片相同的內存空間。別把它和棧內存搞混,每個線程都擁有單獨的棧內存用來存儲本地數據。

38、run()和start()方法區別

這個問題經常被問到,但還是能從此區分出面試者對Java線程模型的理解程度。start()方法被用來啟動新創建的線程,而且start()內部調用了run()方法,這和直接調用run()方法的效果不一樣。當你調用run()方法的時候,只會是在原來的線程中調用,沒有新的線程啟動,start()方法才會啟動新線程。

39、如何控制某個方法允許并發訪問線程的個數?

semaphore.acquire() 請求一個信號量,這時候的信號量個數-1(一旦沒有可使用的信號量,也即信號量個數變為負數時,再次請求的時候就會阻塞,直到其他線程釋放了信號量)

semaphore.release() 釋放一個信號量,此時信號量個數+1

40、在Java中wait和seelp方法的不同;

Java程序中wait 和 sleep都會造成某種形式的暫停,它們可以滿足不同的需要。wait()方法用于線程間通信,如果等待條件為真且其它線程被喚醒時它會釋放鎖,而sleep()方法僅僅釋放CPU資源或者讓當前線程停止執行一段時間,但不會釋放鎖。

41、談談wait/notify關鍵字的理解

42、什么導致線程阻塞?線程如何關閉?

43、如何保證線程安全?

1.synchronized;

2.Object方法中的wait,notify;

3.ThreadLocal機制 來實現的。

44、如何實現線程同步?

1、synchronized關鍵字修改的方法。2、synchronized關鍵字修飾的語句塊3、使用特殊域變量(volatile)實現線程同步

45、線程間操作List

List list = Collections.synchronizedList(new ArrayList());

46、談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解

49、synchronized 和volatile 關鍵字的區別

51、ReentrantLock 、synchronized和volatile比較

ava在過去很長一段時間只能通過synchronized關鍵字來實現互斥,它有一些缺點。比如你不能擴展鎖之外的方法或者塊邊界,嘗試獲取鎖時不能中途取消等。Java 5 通過Lock接口提供了更復雜的控制來解決這些問題。 ReentrantLock 類實現了 Lock,它擁有與 synchronized 相同的并發性和內存語義且它還具有可擴展性。

53、死鎖的四個必要條件?

56、什么是線程池,如何使用?

57、Java中堆和棧有什么不同?

為什么把這個問題歸類在多線程和并發面試題里?因為棧是一塊和線程緊密相關的內存區域。每個線程都有自己的棧內存,用于存儲本地變量,方法參數和棧調用,一個線程中存儲的變量對其它線程是不可見的。而堆是所有線程共享的一片公用內存區域。對象都在堆里創建,為了提升效率線程會從堆中弄一個緩存到自己的棧,如果多個線程使用該變量就可能引發問題,這時volatile 變量就可以發揮作用了,它要求線程從主存中讀取變量的值。

58、有三個線程T1,T2,T3,怎么確保它們按順序執行?

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高邮市| 贵港市| 绥阳县| 饶河县| 广州市| 广汉市| 昭觉县| 揭阳市| 高安市| 诸暨市| 兰坪| 黔西县| 宝丰县| 安西县| 江西省| 乡城县| 陇南市| 天津市| 本溪市| 南丰县| 凤台县| 永嘉县| 建瓯市| 远安县| 金乡县| 礼泉县| 丹棱县| 安顺市| 婺源县| 饶阳县| 勐海县| 濮阳县| 长子县| 盐津县| 凤台县| 平利县| 尤溪县| 桑日县| 阜平县| 武义县| 雅安市|