日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

javaAPI解讀

01、Object常用的方法


Object常用的方法有clone、equals、hashCode、notify、notifyAll、

toString、wait、finalize。

02、String與StringBuffer區(qū)別


String與StringBuffer在JAVA中都是用來進行字符串操作的。String是一個很特別的類,它被final修飾,意味著String類不能被繼承使用,一旦聲明是一個不可變的類。

StringBuffer是一個長度可變的,通過追加的方式擴充,并且是線程安全;尤其在迭代循環(huán)中對字符串的操作,性能一般優(yōu)于String。但線程安全意味著開銷加大,性能下降,所以在線程安全的情況下一般用StringBuilder來代替StringBuffer使用,StringBuilder的速度要優(yōu)于StringBuffer。

 

03、Vector、ArrayList、LinkedList的區(qū)別


1、Vector、ArrayList都是以類似數(shù)組的形式存儲在內存中,LinkedList則以鏈表的形式進行存儲。

2、Vector線程同步,ArrayList、LinkedList線程不同步;后兩者一般用在線程安全的地方,也可以通過Collections.synchronizedList(……);實現(xiàn)線程同步。

3、LinkedList適合指定位置插入、刪除操作,不適合查找;ArrayList、Vector適合查找,不適合指定位置的插入、刪除操作。

4、ArrayList在元素填滿容器時會自動擴充容器大小的50%,而Vector則是100%,因此ArrayList更節(jié)省空間。

5、LinkedList 還實現(xiàn)了 Queue 接口,該接口比List提供了更多的方法,包括 offer(),peek(),poll()等,多與一些線程池一起使用.

 補充:以上都實現(xiàn)了序列化接口,這點在對象遠程傳輸時很重要;而Vector,ArrayList實現(xiàn)了AccessRandom接口,這是一個標記接口,此接口的主要目的是允許一般的算法更改其行為,從而在將其應用到隨機或連續(xù)訪問列表時能提供良好的性能。

 注意: 默認情況下ArrayList的初始容量非常小,所以如果可以預估數(shù)據(jù)量的話,分配一個較大的初始值屬于最佳實踐,這樣可以減少調整大小的開銷。

04、HashTable、HashMap區(qū)別


1、HashTable線程同步,key,value值均不允許為空;HashMap非線程同步,key,value均可為空,HashTable因為線程安全的額外開銷會造成性能下降,而HashMap由于線程不安全,在多線程的情況下,一般要加鎖,或者使用Collections.synchronizedMap()來創(chuàng)建線程安全的對象。

2、HashTable繼承的父類是Dictionary,而HashMap繼承的父類是AbstractMap,而且又都實現(xiàn)了Map接口,所以Map接口中提供的方法,他們都可以使用;HashTable的遍歷是通過Enumeration,而HashMap通常使用Iterator實現(xiàn)。

3、HashTable有一個contains(Object value)的方法,其功能和HashMap的containsValue(Object value)一樣,而HashMap提供的更加細致還有一個取Key值的方法為containsKey(Object key)。

4、哈希值的使用不同,HashTable直接使用對象的hashCode,代碼是這樣的:

 

javaAPI解讀

 

 

 

05、Equals()和HashCode()作用


這兩個方法都是Object類的方法,equals通過用來判斷兩個對象是否相等。HashCode就是一個散列碼,用來在散列存儲結構中確定對象的存儲地址。HashMap,HashSet,他們在將對象存儲時,需要確定它們的地址,而HashCode就是做這個用的。在默認情況下,由Object類定義的hashCode方法會針對不同的對象返回不同的整數(shù),這一般是通過將該對象的內部地址轉換成一個整數(shù)來實現(xiàn)的。

在java中equals和hashCode之間有一種契約關系:

1. 如果兩個對象相等的話,它們的hashcode必須相等。

2. 但如果兩個對象的hashcode相等的話,這兩個對象不一定相等。

由于java.lang.Object的規(guī)范,如果兩個對象根據(jù)equals()方法是相等的,那么這兩個對象中的每一個對象調用hashCode方法都必須生成相同的整數(shù)結果。(下面作為解釋內容可以不必回答,理解使用)

舉例說,在HashSet中,通過被存入對象的hashCode()來確定對象在HashSet中的存儲地址,通過equals()來確定存入的對象是否重復,hashCode()和equals()都需要重新定義,因為hashCode()默認是由對象在內存中的存儲地址計算返回一個整數(shù)得到,而equals()默認是比較對象的引用,如果不同時重寫他們的話,那么同一個類產(chǎn)生的兩個完全相同的對象就都可以存入Set,因為他們是通過equals()來確定的,這就是HashSet失去了意義。面試時簡單的說,HashSet的存儲是先比較HashCode,如果HashCode相同再比較equals,這樣做的目的是提交儲存效率。所以換句方式問,如果用對象來做為Key值的話,要滿足什么條件呢?答要重寫equals和HashCode方法。

06、Sleep()和Wait()區(qū)別


1、wait()是Object類的方法,在每個類中都可以被調用;而sleep()是線程類Thread中的一個靜態(tài)方法,無論New成多少對象,它都屬于調用的類的。

2、sleep方法在同步對象中調用時,會持有對象鎖,其它線程必須等待其執(zhí)行結束,如果時間不到只能調用interrupt()強行打斷;在sleep時間結束后重新參與cpu時間搶奪,不一定會立刻被執(zhí)行。

3、wait()方法在同步中調用時,會讓出對象鎖。通常與notify,notifyAll一起使用。

 

07、IO與NIO的區(qū)別


IO是早期的輸入輸出流,而NIO全名是New IO在IO的基礎上新增了許多新的特性。提供的新特性包括:非阻塞I/O,字符轉換,緩沖以及通道。

1、IO是面向流的,NIO是面向緩沖區(qū)的。 Java IO面向流意味著每次從流中讀一個或多個字節(jié),直至讀取所有字節(jié),它們沒有被緩存在任何地方。如果需要前后移動從流中讀取的數(shù)據(jù),需要先將它緩存到一個緩沖區(qū)。 Java NIO的緩沖導向方法略有不同。數(shù)據(jù)讀取到一個它稍后處理的緩沖區(qū),需要時可在緩沖區(qū)中前后移動。

2、Java IO的各種流是阻塞的。這意味著,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些數(shù)據(jù)被讀取,或數(shù)據(jù)完全寫入。該線程在此期間不能再干任何事情了。 Java NIO的非阻塞模式,使一個線程從某通道發(fā)送請求讀取數(shù)據(jù),但是它僅能得到目前可用的數(shù)據(jù),如果目前沒有數(shù)據(jù)可用時,就什么都不會獲取。線程通常將非阻塞IO的空閑時間用于在其它通道上執(zhí)行IO操作,所以一個單獨的線程現(xiàn)在可以管理多個輸入和輸出通道(channel)。雖然是非阻塞的,但也會遇到一個問題就是服務器對最大連接的支持,但在線用戶連接數(shù)大于系統(tǒng)支持數(shù)時,NIO的默認實現(xiàn)是并不管是否還有足夠的可用連接數(shù),而是直接打開連接。在netty框架中經(jīng)常會看到一個open too many files異常就是由此引起的,所以要靈活使用,合適配置。

3、Java NIO的選擇器允許一個單獨的線程來監(jiān)視多個輸入通道,你可以注冊多個通道使用一個選擇器,然后使用一個單獨的線程來“選擇”通道:這些通道里已經(jīng)有可以處理的輸入,或者選擇已準備寫入的通道。這種選擇機制,使得一個單獨的線程很容易來管理多個通道。

08、Final、Finally、Finalize的區(qū)別


Final是Java中一個特別的關鍵字(修飾符),final修飾的類不能被繼承,final修飾的變量不能被修改(是常量),final修飾的方法不能被重寫,所以使用final要考慮清楚使用場景。

Finally是Java異常處理try{}catch(..){}finally{}中的一部分,finally語句塊中的語句一定會被執(zhí)行到(Down機除外),通常用于進行資源的關閉操作,如數(shù)據(jù)連接關閉等。

Finalize是Object類中的一個方法,finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的,設計的初終是可以進行一些資源的關閉,但這個方法很少被重寫,因為垃圾回收器執(zhí)行時并不一定會調用,比如拋異常時,而且垃圾回收本身就是隨意的,不可控制的。

09、OverLoad與Override的區(qū)別


overload和override是多態(tài)的兩種表現(xiàn)形式;overload重載規(guī)則是同名不同參,方法名相同,參數(shù)類型、個數(shù)、順序至少有一個不相同(與返回值、參數(shù)名、拋出的異常都沒有關系);

overload可以發(fā)生在父類、同類、子類中。override重寫的規(guī)則是方法名、參數(shù)、返回值相同,發(fā)生在父子類之間,而且子類不能拋出比父類更多的異常,被重寫的方法一定不能定義成final。

10、Collection與Collections的區(qū)別


Collection是一個集合的超級接口,它定義了一些集合常用的操作方法,如add,size,remove,clear等,我們經(jīng)常用到的List(可重復集合),Set(不可重復集合)接口就是它的子接口。

Collections此類完全由在 collection 上進行操作或返回 collection 的靜態(tài)方法組成。它包含在 collection 上操作的多態(tài)算法,即“包裝器”,包裝器返回由指定 collection 支持的新 collection,以及少數(shù)其他內容。如果為此類的方法所提供的 collection 或類對象為 null,則這些方法都將拋出NullPointerException。常用到的方法如copy,sort,reverse,replaceall等。

11、Synchronized和Lock區(qū)別和用法


首先他們都是用來實現(xiàn)線程的同步操作的,synchronized是jdk1.2以來一直存在,而且Lock是jdk1.5的新增;具體區(qū)別如下:

1、Lock是JDK1.5才出現(xiàn)的,而在jdk1.5及之前的synchronized存在很大的性能問題,尤其在資源競爭激烈的條件下,性能下降十多倍,而此時的Lock還基本能維持常態(tài)。(synchronized在jdk1.5后的版本,作了很大的性能優(yōu)化)

2、使用synchronized時對象一定會被阻塞,其它線程必須等待鎖釋放后才能執(zhí)行,在高并發(fā)的情況下,很容易降低性能,而且控制不當還容易造成死鎖,所以要合適的利用Synchronized,并且盡可能的精確到最小的業(yè)務邏輯塊。而Lock提供了更細致的操作,其常用的實現(xiàn)類有讀寫鎖,這里以ReentrantLock 為例,它擁有Synchronized相同的并發(fā)性和內存語義,此外還多了鎖投票,定時鎖等候和中斷鎖等候等很多詳細的方法操作。 ReentrantLock獲取鎖定與三種方式:a) lock(), 如果獲取了鎖立即返回,如果別的線程持有鎖,當前線程則一直處于休眠狀態(tài),直到獲取鎖b) tryLock(), 如果獲取了鎖立即返回true,如果別的線程正持有鎖,立即返回false;c)tryLock(long timeout,TimeUnit unit),如果獲取了鎖定立即返回true,如果別的線程正持有鎖,會等待參數(shù)給定的時間,在等待的過程中,如果獲取了鎖定,就返回true,如果等待超時,返回false;d) lockInterruptibly:如果獲取了鎖定立即返回,如果沒有獲取鎖定,當前線程處于休眠狀態(tài),直到或者鎖定,或者當前線程被別的線程中斷。

3、synchronized是在JVM層面上實現(xiàn)的,不但可以通過一些監(jiān)控工具監(jiān)控synchronized的鎖定,而且在代碼執(zhí)行時出現(xiàn)異常,JVM會自動釋放鎖定,但是使用Lock則不行,lock是通過代碼實現(xiàn)的,要保證鎖定一定會被釋放,就必須將unLock()放到finally{}中。

 

分享到:
標簽:java API
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定