阿里飛豬Java後臺-電話面(40min)已涼

1:自我介紹

本碩就讀院校,參加過的競賽、項目

2:C語言和Java語言的核心區別,有什麼特點?

C面向過程,Java面向對象

C需要自己管理內存,Java自動實現(挖了個坑)

C不能跨平臺,Java可以跨平臺

3:Java資源(內存)管理是怎麼管理的?

Java的內存管理就是對象的分配和釋放問題。(兩部分)

分配 :內存的分配是由程序完成的,程序員需要通過關鍵字new 爲每個對象申請內存空間 (基本類型除外),所有的對象都在堆 (Heap)中分配空間。

釋放 :對象的釋放是由垃圾回收機制決定和執行的,這樣做確實簡化了程序員的工作。但同時,它也加重了JVM的工作。因爲,GC爲了能夠正確釋放對象,GC必須監控每一個對象的運行狀態,包括對象的申請、引用、被引用、賦值等,GC都需要進行監控。

4:Java跨平臺的核心是什麼?

Java虛擬機

5:數據結構中的常見排序算法

冒泡、快排、直接插入排序、歸併排序、堆排序、選擇排序(時間複雜度、穩定性)

6:假如機器內存500M,比較大的文件超過500M,文件中放的整數,對整數找出N個最小的,怎麼做?

將文件分割,用歸併排序

用堆排序,大頂堆和小頂堆,能找到前N個

追問:內存有限的話怎麼辦?(沒答上來...)

7:Java裏的接口和抽象類的區別?

抽象類中可以有抽象方法,也可以有非抽象方法共存

接口,jdk1.8之前只能有抽象方法,jdk1.8之後可以存在一個默認default方法

抽象類只能單繼承,接口可以實現多個父接口

抽象類可以存在普通成員變量,接口只能存在static final的變量,必須初始化

8:final關鍵字定義一個變量或對象,不可變是什麼不可變?

問懵了,沒答上,答了個地址不可變

9:C中有指針,指向地址,java定義對象的這個存儲結構是不是這樣?

補充

Java內存劃分爲5個部分:

1、棧:存的都是方法中的局部變量,方法的運行一定要在棧當中。

局部變量:方法的參數,或者是方法內部的變量

作用域:一旦超出作用域,立刻從棧內存消失

2、堆:凡是new出來的東西,都在堆中

堆內存裏面的東西都有一個地址值:16進制

3、方法區:存儲.class相關信息,包含方法的信息

4、本地方法棧:與操作系統相關

5、寄存器:與CPU相關

答了JVM中的方法區、堆、棧

Java中的集合,哪些線程安全,哪些不安全?

說了Map、Collection(List、Set)

HashMap、Hashtable、HashSet等

HashMap不安全、Hashtable安全、ConcurrentHashMap安全、ArrayList不安全、Vector安全(棄用)

線程安全是底層什麼在起作用?

回答了加鎖可以實現,在就沒問了

回答了同步

追問:同步是指用鎖還是別的什麼?

HashMap和ConcurrentHashMap底層有哪些不一樣的?

HashMap:數組+鏈表(jdk1.7)+紅黑樹(jdk1.8)

ConcurrentHashMap:Segement+HashEntry(jdk1.7),數組+鏈表+紅黑樹(jdk1.8)

想追問紅黑樹、B+、B、平衡二叉樹之類的

抽了,說了個沒有太深入瞭解,以爲會問一些東西,結果直接過了

Java多線程裏創建線程池,提供哪些接口?

補充

說了個ThreadPoolExecutor........

newCachedThreadPool 創建一個可緩存的線程池,如果線程池長度超過處理需求,可靈活回收空閒線程,若無可回收,則新建線程

newFixedThreadPool 創建一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待

newScheduledThreadPool 創建一個定長線程池,支持定時及週期性任務執行

newSingleThreadExecutor 創建一個單線程化的線程池,它只會唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO,LIFO,優先級)執行

使用線程池的時候,最關心的是什麼,線程池會導致內存溢出,怎麼防止?

........

答:排隊策略,超過限制,被拒絕。

設置核心參數,設置線程數

代碼上做清除(答了些啥...)

創建一個無限隊列,會出現內存溢出麼,怎麼解決?

最大線程數100,在重複的加入任務,造成阻塞,一直加會導致內存溢出麼,有什麼方法防止一直加?

超過線程池大小直接屏蔽麼?

項目問題,哪個項目遇到技術挑戰的,怎麼解決的?

最後嘮了15多分鐘


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章