Java數組,這一篇文章就真夠了,rabbitmq原理及做用

}java

// 對List求和git

public static int sum(List<Integer> datas) {程序員

int sum = 0;面試

for (Integer data : datas) {算法

// 拆箱操做

sum += data;

}編程

return sum;數組

} 緩存

在上述兩個方法中,影響性能的最大地方即是List中的Integer對象的拆箱和裝箱操做,特別是數據量比較大的時候。咱們都知道基礎類型是在棧內存中操做的,而對象是在堆內存中操做的。棧內存的特色是速度快、容量小,堆內存的特色是速度慢、容量大,所以從性能上來說,基本類型的處理佔優點。

有同窗可能會說了有整型緩存池的存在。但整型緩存池容納的是﹣128到127之間的Integer對象,超過這個範圍便須要建立Integer對象了,而超過這個容納範圍基本上是大機率事件。

[](https://gitee.com/vip204888/java-p7)數據變量定義

-------------------------------------------------------------------------

下面來講說數組的名稱定義,咱們能夠經過兩種形式來進行聲明數組:

int[] a;markdown

int b[]; 數據結構

其中後一種格式符合C和C++程序員的習慣,若是你是Java開發人員,建議統一使用前一種。爲何呢?由於前一種從語義上來講更合理,它表示「一個int型數組」。

拓展一下:若是你懂一些其餘編程語言,好比C語言,你會看到相似以下的聲明。

int A[10];

Java中卻不能如此聲明。思考一下爲何?

這個要回到Java的「引用」問題上。咱們在上述代碼中聲明的只是數組的一個引用,JVM會爲該引用分配存儲空間。可是,這個引用並無指向任何對象,也就是說沒有給數組對象自己分配任何空間。只有在數組真正建立時纔會分配空間。所以,編譯器不容許在此指定數組的大小。

[](https://gitee.com/vip204888/java-p7)數組的建立與初始化

----------------------------------------------------------------------------

數組的建立與初始化有兩種形式:

// 方式一的建立

int[] a = new int[5];

// 方式一的初始化

a[1] = 1;

a[2] = 2;

a[3] = 3;

a[4] = 4;

// 方式二(建立+初始化)

int[] b = {0, 1, 2, 3, 4};

第一種方式經過new關鍵字建立一個指定長度(爲5)的數組,而後經過數組下標對內容進行逐一初始化。那麼,若是不進行逐一初始化會怎樣?默認會採用int類型的默認值,也就是0進行初始化。

第二種方式,建立與初始化融爲一體,其實也採用了new關鍵字進行建立,只不過是編譯器負責來作,更加方便一些。

拓展一下:咱們能夠經過方式二的形式進行數組的建立和初始化,那麼爲何還提供了int\[\] a這種基於數組引用的聲明呢?

這是由於在Java中,能夠將一個數組的引用賦值給另一個數組。好比,咱們能夠以下方式使用:

int[] c;

int[] b = {0, 1, 2, 3, 4};

c = b;

通過c=b的操做,數組c的引用一樣指向了b。這裏又會出現一個咱們常見的面試題。看看下面代碼打印的結果是什麼:

public static void main(String[] args) {

String[] strings = {"a","b","c"};

String string = "abc";

change(strings,string);

System.out.println(strings[1]);

System.out.println(string.charAt(1));

}

public static void change(String[] strings,String string){

strings[1] = "e";

string = "aec";

}

想好答案了吧?如今公佈答案:第一行打印的是「e」,第二行打印的「b」。這與上面所說的數組的引用有密切關聯,數組傳遞進入change方法的是引用,而String類型的參數傳遞的只是值的copy。

> 須要更多大廠面試資料的話也能夠[點擊直接進入,免費獲取!](https://gitee.com/vip204888/java-p7)暗號:CSDN

[](https://gitee.com/vip204888/java-p7)數組的存儲結構

--------------------------------------------------------------------------

這裏咱們再以一張簡單的圖展現一下,數組在內存中存儲的形式。  

![在這裏插入圖片描述](https://s2.51cto.com/images/20210811/1628683099329335.jpg)  

上圖需注意的是數組使用的存儲空間是連續的。其中建立的對象一般位於堆中,上圖對堆中的數據存儲進行了簡化示意。

[](https://gitee.com/vip204888/java-p7)數組的長度

------------------------------------------------------------------------

在好久以前,面試的時候還出現這樣的面試題:如何獲取數組的長度?

固然,咱們知道該面試題考察的就是經過length屬性獲取數組長度與經過size()方法獲取集合長度的區別。

全部的數組都有一個固定的成員,能夠經過它來獲取數組的長度,這即是length屬性。在使用的過程當中咱們須要注意的是數組的下標是從0開始計算的。所以,咱們在遍歷或修改數組的時候,須要注意數組的下標最大值是length-1,不然,會出現數組越界的問題。

[](https://gitee.com/vip204888/java-p7)數組的處理

------------------------------------------------------------------------

針對數組,Java標準類庫裏特地提供了Arrays類,咱們能夠經過該類提供的方法進行數組的處理。

[](https://gitee.com/vip204888/java-p7)數組的打印

------------------------------------------------------------------------

可經過Arrays.toString()方法對數組的內容進行打印。下面經過示例咱們來對比一下經過toString方法和直接打印的區別。

String[] strings = {"a","b","c"};

System.out.println(strings);

System.out.println(Arrays.toString(strings));

打印結果:

[Ljava.lang.String;@36baf30c

[a, e, c]

能夠看到,若是直接打印則打印出來的是strings數組的引用,而並非真實的內容。

[](https://gitee.com/vip204888/java-p7)數組的排序

------------------------------------------------------------------------

可經過Arrays.sort()方法對數組進行排序,但對於數組中的元素有必定的要求,要實現Comparable接口。看下面的實例:

String[] sorts = {"c","b","a"};

Arrays.sort(sorts);

System.out.println(Arrays.toString(sorts));

打印結果:

[a, b, c]

很明顯已經進行正常排序了。爲何String能夠直接進行排序?那是由於String已經實現了Comparable接口。

public final class String

implements java.io.Serializable, Comparable<String>, CharSequence {}
另外,對於數組的排序還有常見的:冒泡排序、快速排序、選擇排序、插入排序、希爾(Shell)排序、堆排序等。面試過程當中的排序每每也是基於數組來進行展開的。感興趣的朋友可拿數組來練習一下排序的算法。

> 須要更多大廠面試資料的話也能夠[點擊直接進入,免費獲取!](https://gitee.com/vip204888/java-p7)暗號:CSDN

[](https://gitee.com/vip204888/java-p7)數組轉集合

------------------------------------------------------------------------

經過Arrays.asList()方法,可將數組轉化爲列表。

String[] sorts = {"程序","新","視界"};

List<String> list = Arrays.asList(sorts);

System.out.println(list);

打印結果:

[程序, 新, 視界]

關於asList的源碼以下:

public static <T> List<T> asList(T... a) {

return new ArrayList<>(a);

}

看到asList源碼,你能想到什麼?是否是發現該方法的參數爲可變參數,而且支持數組做爲參數傳入。

固然,這裏也能夠轉化爲Set集合,但需建立一個Set的實現類(這裏用HashSet),將asList的結果做爲參數傳入:

Set<String> sets = new HashSet<>(Arrays.asList(sorts));

[](https://gitee.com/vip204888/java-p7)數組內容查找

-------------------------------------------------------------------------

能夠經過Arrays.binarySearch()方法來對數據中的元素進行查找,顧名思義,這裏是經過二分查找法進行查找的。

String[] sorts = {"c","a","b"};

Arrays.sort(sorts);

int index = Arrays.binarySearch(sorts,"b");

System.out.println(index);

System.out.println(sorts[index]);

打印結果:

1

b

結果中的"1"指的是字符串所在的下標值,經過下標能夠得到對應位置的值。這裏須要注意的是,既然是二分查找法,那麼在查找以前一定須要進行排序,否則二分查找的意義便不存在了。

[](https://gitee.com/vip204888/java-p7)數組的拷貝

------------------------------------------------------------------------

能夠經過Arrays.copyOf()方法對數組進行復制,其中第一個參數是被複制數組,第二個參數爲新數組的長度,返回的結果爲新的數組。示例以下:

# 最後的內容

在開頭跟你們分享的時候我就說,面試我是沒有作好準備的,全靠平時的積累,確實有點臨時抱佛腳了,以致於我本身仍是挺懊惱的。(準備好了或許能夠拿個40k,沒作準備只有30k+,大家懂那種感受嗎)

**如何準備面試?**

**一、前期鋪墊(技術沉積)**

程序員面試實際上是對於技術的一次摸底考試,你的技術牛逼,那你就是大爺。大廠對於技術的要求主要體如今:基礎,原理,深刻研究源碼,廣度,實戰五個方面,也只有將原理理論結合實戰才能把技術點吃透。

下面是我會看的一些資料筆記,但願能幫助你們由淺入深,由點到面的學習Java,應對大廠面試官的靈魂追問,**有須要的話就戳這裏:[藍色傳送門](https://gitee.com/vip204888/java-p7)打包帶走吧。**

> 這部份內容過多,小編只貼出部份內容展現給你們了,見諒見諒!

*   Java程序員必看《Java開發核心筆記(華山版)》

![](https://s2.51cto.com/images/20210811/1628683099311772.jpg)

*   Redis學習筆記

![](https://s2.51cto.com/images/20210811/1628683100547557.jpg)

*   Java併發編程學習筆記

四部分,詳細拆分併發編程——併發編程+模式篇+應用篇+原理篇

![](https://s2.51cto.com/images/20210811/1628683101800522.jpg)

*   Java程序員必看書籍《深刻理解 ava虛擬機第3版》(pdf版)

![](https://s2.51cto.com/images/20210811/1628683101196400.jpg)

*   大廠面試必問——數據結構與算法聚集筆記

![](https://s2.51cto.com/images/20210811/1628683102888885.jpg)

其餘像Spring,SpringBoot,SpringCloud,SpringCloudAlibaba,Dubbo,Zookeeper,Kafka,RocketMQ,RabbitMQ,Netty,MySQL,Docker,K8s等等我都整理好,這裏就不一一展現了。

![](https://s2.51cto.com/images/20210811/1628683103977489.jpg)

**二、狂刷面試題**

技術主要是體如今平時的積累實用,面試前準備兩個月的時間再好好複習一遍,緊接着就能夠刷面試題了,下面這些面試題都是小編精心整理的,貼給你們看看。

①大廠高頻45道筆試題(智商題)

![](https://s2.51cto.com/images/20210811/1628683103661915.jpg)

②BAT大廠面試總結(部份內容截圖)

![](https://s2.51cto.com/images/20210811/1628683104695554.jpg)

![](https://s2.51cto.com/images/20210811/1628683104592452.jpg)

③面試總結

![](https://s2.51cto.com/images/20210811/1628683105161214.jpg)

![](https://s2.51cto.com/images/20210811/1628683105159183.jpg)

**三、結合實際,修改簡歷**

程序員的簡歷必定要多下一些功夫,尤爲是對一些字眼要再三斟酌,如「精通、熟悉、瞭解」這三者的區別必定要區分清楚,不然就是在給本身挖坑了。固然不會包裝,我能夠將個人簡歷給你參考參考,若是還不夠,那下面這些簡歷模板任你挑選:

![](https://s2.51cto.com/images/20210811/1628683106722093.jpg)

以上分享,但願你們能夠在金三銀四跳槽季找到一份好工做,但千萬也記住,技術必定是平時工做種累計或者自學(或報班跟着老師學)經過實戰累計的,千萬不要臨時抱佛腳。

另外,面試中遇到不會的問題不妨嘗試講講本身的思路,由於有些問題不是考察咱們的編程能力,而是邏輯思惟表達能力;最後平時要進行自我分析與評價,作好職業規劃,不斷摸索,提升本身的編程能力和抽象思惟能力。

**以上文章中,說起到的全部的筆記內容、面試題等資料,都可以避免費分享給你們學習,有須要的話就[戳這裏打包帶走](https://gitee.com/vip204888/java-p7)吧。**
相關文章
相關標籤/搜索