阿里飛豬Java后臺(tái)-電話面(40min)已涼

1:自我介紹

本碩就讀院校,參加過(guò)的競(jìng)賽、項(xiàng)目

2:C語(yǔ)言和Java語(yǔ)言的核心區(qū)別,有什么特點(diǎn)?

C面向過(guò)程,Java面向?qū)ο?/p>

C需要自己管理內(nèi)存,Java自動(dòng)實(shí)現(xiàn)(挖了個(gè)坑)

C不能跨平臺(tái),Java可以跨平臺(tái)

3:Java資源(內(nèi)存)管理是怎么管理的?

Java的內(nèi)存管理就是對(duì)象的分配和釋放問(wèn)題。(兩部分)

分配 :內(nèi)存的分配是由程序完成的,程序員需要通過(guò)關(guān)鍵字new 為每個(gè)對(duì)象申請(qǐng)內(nèi)存空間 (基本類型除外),所有的對(duì)象都在堆 (Heap)中分配空間。

釋放 :對(duì)象的釋放是由垃圾回收機(jī)制決定和執(zhí)行的,這樣做確實(shí)簡(jiǎn)化了程序員的工作。但同時(shí),它也加重了JVM的工作。因?yàn)?,GC為了能夠正確釋放對(duì)象,GC必須監(jiān)控每一個(gè)對(duì)象的運(yùn)行狀態(tài),包括對(duì)象的申請(qǐng)、引用、被引用、賦值等,GC都需要進(jìn)行監(jiān)控。

4:Java跨平臺(tái)的核心是什么?

Java虛擬機(jī)

5:數(shù)據(jù)結(jié)構(gòu)中的常見(jiàn)排序算法

冒泡、快排、直接插入排序、歸并排序、堆排序、選擇排序(時(shí)間復(fù)雜度、穩(wěn)定性)

6:假如機(jī)器內(nèi)存500M,比較大的文件超過(guò)500M,文件中放的整數(shù),對(duì)整數(shù)找出N個(gè)最小的,怎么做?

將文件分割,用歸并排序

用堆排序,大頂堆和小頂堆,能找到前N個(gè)

追問(wèn):內(nèi)存有限的話怎么辦?(沒(méi)答上來(lái)...)

7:Java里的接口和抽象類的區(qū)別?

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

接口,jdk1.8之前只能有抽象方法,jdk1.8之后可以存在一個(gè)默認(rèn)default方法

抽象類只能單繼承,接口可以實(shí)現(xiàn)多個(gè)父接口

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

8:final關(guān)鍵字定義一個(gè)變量或?qū)ο?,不可變是什么不可變?/p>

問(wèn)懵了,沒(méi)答上,答了個(gè)地址不可變

9:C中有指針,指向地址,java定義對(duì)象的這個(gè)存儲(chǔ)結(jié)構(gòu)是不是這樣?

補(bǔ)充

Java內(nèi)存劃分為5個(gè)部分:

1、棧:存的都是方法中的局部變量,方法的運(yùn)行一定要在棧當(dāng)中。

局部變量:方法的參數(shù),或者是方法內(nèi)部的變量

作用域:一旦超出作用域,立刻從棧內(nèi)存消失

2、堆:凡是new出來(lái)的東西,都在堆中

堆內(nèi)存里面的東西都有一個(gè)地址值:16進(jìn)制

3、方法區(qū):存儲(chǔ).class相關(guān)信息,包含方法的信息

4、本地方法棧:與操作系統(tǒng)相關(guān)

5、寄存器:與CPU相關(guān)

答了JVM中的方法區(qū)、堆、棧

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

說(shuō)了Map、Collection(List、Set)

HashMap、Hashtable、HashSet等

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

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

回答了加鎖可以實(shí)現(xiàn),在就沒(méi)問(wèn)了

回答了同步

追問(wèn):同步是指用鎖還是別的什么?

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

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

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

想追問(wèn)紅黑樹、B+、B、平衡二叉樹之類的

抽了,說(shuō)了個(gè)沒(méi)有太深入了解,以為會(huì)問(wèn)一些東西,結(jié)果直接過(guò)了

Java多線程里創(chuàng)建線程池,提供哪些接口?

補(bǔ)充

說(shuō)了個(gè)ThreadPoolExecutor........

newCachedThreadPool 創(chuàng)建一個(gè)可緩存的線程池,如果線程池長(zhǎng)度超過(guò)處理需求,可靈活回收空閑線程,若無(wú)可回收,則新建線程

newFixedThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池,可控制線程最大并發(fā)數(shù),超出的線程會(huì)在隊(duì)列中等待

newScheduledThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池,支持定時(shí)及周期性任務(wù)執(zhí)行

newSingleThreadExecutor 創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)唯一的工作線程來(lái)執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO,LIFO,優(yōu)先級(jí))執(zhí)行

使用線程池的時(shí)候,最關(guān)心的是什么,線程池會(huì)導(dǎo)致內(nèi)存溢出,怎么防止?

........

答:排隊(duì)策略,超過(guò)限制,被拒絕。

設(shè)置核心參數(shù),設(shè)置線程數(shù)

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

創(chuàng)建一個(gè)無(wú)限隊(duì)列,會(huì)出現(xiàn)內(nèi)存溢出么,怎么解決?

最大線程數(shù)100,在重復(fù)的加入任務(wù),造成阻塞,一直加會(huì)導(dǎo)致內(nèi)存溢出么,有什么方法防止一直加?

超過(guò)線程池大小直接屏蔽么?

項(xiàng)目問(wèn)題,哪個(gè)項(xiàng)目遇到技術(shù)挑戰(zhàn)的,怎么解決的?

最后嘮了15多分鐘


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容