編寫一個(gè)java程序 一道java面試題,20億數(shù)字的文本排序,如何取前100?
一道java面試題,20億數(shù)字的文本排序,如何取前100?既然是java題,這就是經(jīng)典的topk問題。先取前100個(gè)數(shù),建立一個(gè)最小堆,剩下的數(shù)依次從堆頂插入元素,同時(shí)調(diào)整堆。最后堆中的100個(gè)元素即
一道java面試題,20億數(shù)字的文本排序,如何取前100?
既然是java題,這就是經(jīng)典的topk問題。先取前100個(gè)數(shù),建立一個(gè)最小堆,剩下的數(shù)依次從堆頂插入元素,同時(shí)調(diào)整堆。最后堆中的100個(gè)元素即為結(jié)果。空間復(fù)雜度為k,時(shí)間復(fù)雜度為nlogk
java的反射到底是有什么用處?怎么用?
Java反射說的是在運(yùn)行狀態(tài)中,對(duì)于任何一個(gè)類,我們都能夠知道這個(gè)類有哪些方法和屬性。對(duì)于任何一個(gè)對(duì)象,我們都能夠?qū)λ姆椒ê蛯傩赃M(jìn)行調(diào)用。我們把這種動(dòng)態(tài)獲取對(duì)象信息和調(diào)用對(duì)象方法的功能稱之為反射機(jī)制。
可以不通過new關(guān)鍵字獲取對(duì)象并且使用類對(duì)象中的成員變量,方法,修飾符等等,在這里舉例獲取類。
第一種:使用Class.forName(String classPath) ClassPath:寫需要反射的類名,一般是以包名.類名。如:Class clazz = Class.forName("com.entity.Example")
第二種:直接使用Class clz = 類名.class
這種情況一般在我們知道有這個(gè)類的時(shí)候去使用。如:Class clz = Example.class
第三種:Class clz = 對(duì)象. getClass()
前提是對(duì)象已經(jīng)被實(shí)例化出來了 。如:
Example ex = new Example()
Class clz = ex.getClass()
這三種方法都有各自的優(yōu)點(diǎn),一般我們使用第一種比較多,按照自己的實(shí)際需求去使用才是最好的。反射有啥用?有啥應(yīng)用場(chǎng)景?
1.spring框架的ioc是基于java的反射機(jī)制。
2.JDBC 的數(shù)據(jù)庫的連接注冊(cè)驅(qū)動(dòng),獲取連接也是基于Java反射。
3.Hibernate,Mybatis都有運(yùn)用到反射。
Java如何讀取pdf的內(nèi)容?
這個(gè)對(duì)于Java開發(fā)者來說簡(jiǎn)直是簡(jiǎn)單不能再簡(jiǎn)單的問題,以至于我不知道提問的人為何要提問,在百度一搜一大堆,也可能提問者想到一個(gè)最好的回答。下面我來說說怎么讀取。3種方法:
1. 開源框架 pdfbox 2. 國(guó)產(chǎn)的框架
Spire.PDF
3. iTika第一步:引入依賴
第二步:Junit測(cè)試用例
1. pdfBox
2. spire
3. Tika
其實(shí)我認(rèn)為這些api都大同小異,各有各的優(yōu)勢(shì)吧,不過個(gè)人更傾向于apache的,畢竟大平臺(tái)。