日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java entropy_java面试

發布時間:2024/3/13 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java entropy_java面试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. java語言的特點

Java是一種簡單的,面向對象的,分布式的,解釋型的,健壯安全的,結構中立的,可移植的,性能優異、多線程的靜態語言。

2. hashmap和treemap、hashset和treeset、hashmap和hashset

2.1?hashmap和treemap

HashMap通過hashcode對其內容進行快速查找,而 TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。

HashMap:基于哈希表實現。使用HashMap要求添加的鍵類明確定義了hashCode()和equals()[可以重寫hashCode()和equals()].

TreeMap:基于紅黑樹實現。TreeMap沒有調優選項,因為該樹總處于平衡狀態。

HashMap:適用于在Map中插入、刪除和定位元素。

Treemap:適用于按自然順序或自定義順序遍歷鍵(key)。

2.2?hashset和treeset

1. HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的,只不過Set用的只是Map的key

2. Map的key和Set都有一個共同的特性就是集合的唯一性.TreeMap更是多了一個排序的功能.

3. hashCode和equal()是HashMap用的, 因為無需排序所以只需要關注定位和唯一性即可.

a. hashCode是用來計算hash值的,hash值是用來確定hash表索引的.

b. hash表中的一個索引處存放的是一張鏈表, 所以還要通過equal方法循環比較鏈上的每一個對象

才可以真正定位到鍵值對應的Entry.

c. put時,如果hash表中沒定位到,就在鏈表前加一個Entry,如果定位到了,則更換Entry中的value,并返回舊value

4. 由于TreeMap需要排序,所以需要一個Comparator為鍵值進行大小比較.當然也是用Comparator定位的.

a. Comparator可以在創建TreeMap時指定

b. 如果創建時沒有確定,那么就會使用key.compareTo()方法,這就要求key必須實現Comparable接口.

c. TreeMap是使用Tree數據結構實現的,所以使用compare接口就可以完成定位了.

2.3 hashmap和hashset

1 HashSet底層采用的是HashMap進行實現的,但是沒有key-value,只有HashMap的key set的視圖,HashSet不容許重復的對象

2 HashMap可以將空值作為一個表的條目的key或者value,HashMap中由于鍵不能重復,因此只有一條記錄的Key可以是空值,而value可以有多個為空,但HashTable不允許null值(鍵與值均不行)

3 Hashtable是基于Dictionary類的,而HashMap是基于Map接口的一個實現

4 Hashtable里默認的方法是同步的,而HashMap則是非同步的,因此Hashtable是多線程安全的

3. int和Integer的區別

int 是基本數據類型

Integer是其包裝類,注意是一個類。

為什么要提供包裝類呢???

一是為了在各種類型間轉化,通過各種方法的調用。否則 你無法直接通過變量轉化。

比如,現在int要轉為String

int a=0;

String result=Integer.toString(a);

在java中包裝類,比較多的用途是用在于各種數據類型的轉化中。

4. 單例模式

java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這里主要介紹三種:懶漢式單例、餓漢式單例、登記式單例。單例模式有以下特點:1、單例類只能有一個實例。2、單例類必須自己創建自己的唯一實例。3、單例類必須給所有其他對象提供這一實例。單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。

//懶漢式單例類.在第一次調用的時候實例化自己

public classSingleton {privateSingleton() {}private static Singleton single=null;//靜態工廠方法

public staticSingleton getInstance() {if (single == null) {

single= newSingleton();

}returnsingle;

}

}

5. Collection和Collections

1、java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現。Collection接口的意義是為各種具體的集合提供了最大化的統一操作方式。

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

2、java.util.Collections 是一個包裝類。它包含有各種有關集合操作的靜態多態方法。此類不能實例化,就像一個工具類,服務于Java的Collection框架。

6. 支持排序的集合

Collection

List

Set

HashSet

TreeSet 是(用二叉樹排序)

Map使用key-value來映射和存儲數據,Key必須惟一,

其中List和Set繼承自Collection接口。

Set不允許元素重復。HashSet和TreeSet是兩個主要的實現類。

List有序且允許元素重復。ArrayList、LinkedList和Vector是三個主要的實現類。

Map也屬于集合系統,但和Collection接口不同。Map是key對value的映射集合,其中key列就是一個集合。key不能重復,但是value可以重復。HashMap、TreeMap和Hashtable是三個主要的實現類。

SortedSet和SortedMap接口對元素按指定規則排序,SortedMap是對key列進行排序。

7. java泛型

8. final、finally、finalized

final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。

將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。

被聲明為final的方法也同樣只能使用,不能重載。

finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)。

finalize—方法名。finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,供垃圾收集時的其他資源回收,例如關閉文件等。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

9. native

Java不是完美的,Java的不足除了體現在運行速度上要比傳統的C++慢許多之外,Java無法直接訪問到操作系統底層(如系統硬件等),為此Java使用native方法來擴展Java程序的功能。

可以將native方法比作Java程序同C程序的接口,其實現步驟:

1、在Java中聲明native()方法,然后編譯。

2、用javah產生一個.h文件。

3、寫一個.cpp文件實現native導出方法,其中需要包含第二步產生的.h文件(注意其中又包含了JDK帶的jni.h文件)。

4、將第三步的.cpp文件編譯成動態鏈接庫文件。

5、在Java中用System.loadLibrary()方法加載第四步產生的動態鏈接庫文件,這個native()方法就可以在Java中被訪問了。

JAVA的native方法適用的情況:

1、為了使用底層的主機平臺的某個特性,而這個特性不能通過JAVA API訪問。

2、為了訪問一個老的系統或者使用一個已有的庫,而這個系統或這個庫不是用JAVA編寫的。

3、為了加快程序的性能,而將一段時間敏感的代碼作為本地方法實現。

10. 多線程

JAVA多線程實現方式主要有三種:繼承Thread類、實現Runnable接口、使用ExecutorService、Callable、Future實現有返回結果的多線程。其中前兩種方式線程執行完后都沒有返回值,只有最后一種是帶返回值的。

繼承Thread類

實現Runnable接口

應用程序可以使用Executor框架來創建線程池

實現Runnable接口這種方式更受歡迎,因為這不需要繼承Thread類。在應用設計中已經繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實現接口。同時,線程池也是非常高效的,很容易實現和使用。

11. java中實現同步(線程安全的方法)

在Java語言中,每一個對象有一把鎖。線程可以使用synchronized關鍵字來獲取對象上的鎖。synchronized關鍵字可應用在方法級別(粗粒度鎖)或者是代碼塊級別(細粒度鎖)。

(1)同步方法

即有synchronized關鍵字修飾的方法。

由于java的每個對象都有一個內置鎖,當用此關鍵字修飾方法時,

內置鎖會保護整個方法。在調用該方法前,需要獲得內置鎖,否則就處于阻塞狀態。

代碼如:

public synchronized void save(){}

注: synchronized關鍵字也可以修飾靜態方法,此時如果調用該靜態方法,將會鎖住整個類

(2)同步代碼塊

即有synchronized關鍵字修飾的語句塊。

被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步

代碼如:

synchronized(object){

}

注:同步是一種高開銷的操作,因此應該盡量減少同步的內容。

通常沒有必要同步整個方法,使用synchronized代碼塊同步關鍵代碼即可。

(3)使用特殊域變量(volatile)實現線程同步

a.volatile關鍵字為域變量的訪問提供了一種免鎖機制,

b.使用volatile修飾域相當于告訴虛擬機該域可能會被其他線程更新,

c.因此每次使用該域就要重新計算,而不是使用寄存器中的值

d.volatile不會提供任何原子操作,它也不能用來修飾final類型的變量

(4)使用局部變量實現線程同步

如果使用ThreadLocal管理變量,則每一個使用該變量的線程都獲得該變量的副本,

副本之間相互獨立,這樣每一個線程都可以隨意修改自己的變量副本,而不會對其他線程產生影響。

ThreadLocal 類的常用方法

ThreadLocal() : 創建一個線程本地變量

get() : 返回此線程局部變量的當前線程副本中的值

initialValue() : 返回此線程局部變量的當前線程的"初始值"

set(T value) : 將此線程局部變量的當前線程副本中的值設置為value

12.java中實現PV操作

總結

以上是生活随笔為你收集整理的java entropy_java面试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。