系列文章目錄
Java基礎知識題(一)
文章目錄
系列文章目錄
前言
1. Java中的?組合、聚合和關聯有什么區別?
2. 解釋為什么Java被稱作是“平臺無關的編程語言”?
3. 簡述什么是值傳遞和引用傳遞?重點
4. 詳細闡述Java進程和線程的區別??重點
5. Java語言創建線程有幾種不同的方式?重點
6. 概括的解釋下Java線程的幾種可用狀態?重點
7. 簡述Java同步方法和同步代碼塊的區別??重點
8. 為何使用同步?
二 Java校招題型
1. Java語言寫成 public static void寫成static public void會如何 ?
2. Java怎么判斷數組是null還是為空?
3. 請計算 math.round(11.5)等于多少?math.round(-11.5)等于多少?
4. 寫Java方法,實現字符串的替換,如:輸入bbbwlirbbb,輸出bbbhhtccc ?
總結
前言
本文主要講解Java的基礎知識
1. Java中的?組合、聚合和關聯有什么區別?
如果兩個對象彼此有關系,就說他們是彼此相關聯的。組合和聚合是面向對象中的兩種形式的關聯。組合是一種比聚合更強力的關聯。組合中,一個對象是另一個的擁有者,而聚合則是指一個對象使用另一個對象。如果對象?A?是由對象?B?組合的,則?A?不存在的話,B一定不存在,但是如果?A?對象聚合了一個對象?B,則即使?A?不存在了,B?也可以單獨存在。
2. 解釋為什么Java被稱作是“平臺無關的編程語言”?
Java虛擬機是一個可以執行Java字節碼的虛擬機進程,Java源文件被編譯成能被Java虛擬機執行的字節碼文件。
Java被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。Java虛擬機讓這個變為可能,因為它知道底層硬件平臺的指令長度和其他特性。
跨平臺原理:
不同的操作系統,有自己專門識別的軟件格式.比如Windows系統只識別.exe的.編寫的Java程序就沒有辦法直接在Window當中運行.如果只編寫一個Java程序是無法辦法在各個系統上運行.
Java單獨開發了一套(各個平臺)一個Java虛擬機的程序,編寫的Java程序不需要運行在系統當中,而是運行在系統安裝的Java虛擬機當中.各個平臺上的Java虛擬機都能識別編寫的Java程序.
在每一個平臺當中,都安裝了一個JVM軟件.?我們編寫的Java程序全部都運行在JVM軟件當中,這樣就可以辦到寫一份程序在各個平臺都可以直接運行啦!
3. 簡述什么是值傳遞和引用傳遞?重點
1.值傳遞:方法調用時,實際參數把它的值傳遞給對應的形式參數,方法執行中形式參數值的改變不影響實際參?數的值。
2.引用傳遞:也稱為傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,在方法執行中,對形式參數的操作實際上就是對實際參數的操作,方法執行中形式參數值的改變將會影響實際參數的值。
4. 詳細闡述Java進程和線程的區別??重點
進程:指在系統中正在運行的一個應用程序;程序一旦運行就是進程;或者更專業化來說:進程是指程序執行時的一個實例,即它是程序已經執行到課中程度的數據結構的匯集。從內核的觀點看,進程的目的就是擔當分配系統資源(CPU時間、內存等)的基本單位。
線程:系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元執行流。進程——資源分配的最小單位,線程——程序執行的最小單位。
線程進程的區別體現在4個方面:
1、因為進程擁有獨立的堆棧空間和數據段,所以每當啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這對于多進程來說十分“奢侈”,系統開銷比較大,而線程不一樣,線程擁有獨立的堆棧空間,但是共享數據段,它們彼此之間使用相同的地址空間,共享大部分數據,比進程更節儉,開銷比較小,切換速度也比進程快,效率高,但是正由于進程之間獨立的特點,使得進程安全性比較高,也因為進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。一個線程死掉就等于整個進程死掉。
2、體現在通信機制上面,正因為進程之間互不干擾,相互獨立,進程的通信機制相對很復雜,譬如管道,信號,消息隊列,共享內存,套接字等通信機制,而線程由于共享數據段所以通信機制很方便。
3、體現在CPU系統上面,線程使得CPU系統更加有效,因為操作系統會保證當線程數不大于CPU數目時,不同的線程運行于不同的CPU上。
4、體現在程序結構上,舉一個簡明易懂的列子:當我們使用進程的時候,我們不自主的使用if?else嵌套來判斷pid,使得程序結構繁瑣,但是當我們使用線程的時候,基本上可以甩掉它,當然程序內部執行功能單元需要使用的時候還是要使用,所以線程對程序結構的改善有很大幫助。
5. Java語言創建線程有幾種不同的方式?重點
有三種方式可以用來創建線程:
1?繼承Thread類
2?實現Runnable接口
3?應用程序可以使用Executor框架來創建線程池
實現Runnable接口這種方式更受歡迎,因為這不需要繼承Thread類。在應用設計中已經繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實現接口。同時,線程池也是非常高效的,很容易實現和使用。"
6. 概括的解釋下Java線程的幾種可用狀態?重點
線程在執行過程中,可以處于下面幾種狀態:
1?就緒(Runnable):線程準備運行,不一定立馬就能開始執行。
2?運行中(Running):進程正在執行線程的代碼。
3?等待中(Waiting):線程處于阻塞的狀態,等待外部的處理結束。
4?睡眠中(Sleeping):線程被強制睡眠。
5?I/O阻塞(Blocked?on?I/O):等待I/O操作完成。
6?同步阻塞(Blocked?on?Synchronization):等待獲取鎖。
7?死亡(Dead):線程完成了執行。"
7. 簡述Java同步方法和同步代碼塊的區別??重點
區別:
同步方法默認用this或者當前類class對象作為鎖;
同步代碼塊可以選擇以什么來加鎖,比同步方法要更細顆粒度,我們可以選擇只同步會發生同步問題的部分代碼而不是整個方法;
同步方法使用關鍵字?synchronized修飾方法,而同步代碼塊主要是修飾需要進行同步的代碼,用?synchronized(object){代碼內容}進行修飾;
8. 為何使用同步?
java允許多線程并發控制,當多個線程同時操作一個可共享的資源變量時(增刪改查),將會導致數據的不準確,相互之間產生沖突。類似于在atm取錢,銀行數據確沒有變,這是不行的,要存在于一個事務中。因此加入了同步鎖,以避免在該線程沒有結束前,調用其他線程。從而保證了變量的唯一性,準確性。
1.同步方法:
即有synchronized?(同步,美?['s??kr?na?zd]?)?修飾符修飾的方法。
由于java的每個對象都有一個內置鎖,當用此關鍵字修飾方法時,內置鎖會保護整個方法。在調用給方法前,要獲取內置鎖,否則處于阻塞狀態。
例:public?synchronized?getMoney(){}
注:synchronized修飾靜態方法,如果調用該靜態方法,將鎖住整個類。
2.同步代碼塊
即有synchronized修飾符修飾的語句塊,被該關鍵詞修飾的語句塊,將加上內置鎖。實現同步。
例:synchronized(Object?o?){}
同步是高開銷的操作,因此盡量減少同步的內容。通常沒有必要同步整個方法,同步部分代碼塊即可。
同步方法默認用this或者當前類class對象作為鎖。
同步代碼塊可以選擇以什么來加鎖,比同步方法要更顆粒化,我們可以選擇只同步會發生問題的部分代碼而不是整個方法
?
二 Java校招題型
1. Java語言寫成 public static void寫成static public void會如何 ?
程序正常編譯及運行
將public和static修飾符的位置進行調換,即將"public static"寫成"static public",并不會改變方法的功能或含義。這是因為修飾符的順序并不影響方法的定義和執行。無論是"public static void"還是"static public void",都表示該方法是一個公共的靜態方法,可以被其他類直接調用,且無需創建類的實例。所以兩種寫法是等效的。
2. Java怎么判斷數組是null還是為空?
在Java中,我們經常需要判斷一個數組是否為空。一個空數組指的是沒有任何元素的數組,即數組的長度為0。本篇文章將介紹如何使用Java語言來判斷數組是否為空。
流程
下面我們將介紹判斷數組是否為空的流程,可以使用以下表格展示步驟:
步驟 描述
1. 聲明一個數組變量
2. 使用條件語句判斷數組是否為null
3. 使用數組的length屬性判斷數組的長度是否為0
代碼實現
步驟1:聲明一個數組變量
首先,我們需要聲明一個數組變量。你可以使用以下代碼示例來聲明一個整型數組:
int[] array;
步驟2:使用條件語句判斷數組是否為null
在Java中,我們可以使用條件語句判斷一個數組是否為null。如果數組為null,那么它一定是空數組。你可以使用以下代碼示例來判斷數組是否為null:
if (array == null) {
System.out.println("數組為空");
}
步驟3:使用數組的length屬性判斷數組的長度是否為0
如果數組不為null,我們還需要進一步判斷它的長度是否為0。數組的長度可以通過數組的length屬性獲取。你可以使用以下代碼示例來判斷數組的長度是否為0:
if (array != null && array.length == 0) {
System.out.println("數組為空");
}
完整代碼示例
下面是一個完整的示例代碼,展示如何判斷一個數組是否為空:
public class ArrayEmptyCheck {
public static void main(String[] args) {
int[] array = new int[0];
if (array == null) {
System.out.println("數組為空");
} else if (array.length == 0) {
System.out.println("數組為空");
} else {
System.out.println("數組不為空");
}
}
}
在上面的示例中,我們首先聲明了一個長度為0的整型數組。然后,我們使用條件語句判斷數組是否為null,如果是null,則打印"數組為空"。接著,我們使用數組的length屬性判斷數組的長度是否為0,如果是0,則打印"數組為空"。如果數組不為null且長度不為0,則打印"數組不為空"。
3. 請計算 math.round(11.5)等于多少?math.round(-11.5)等于多少?
代碼實現思路如下:
Math.round()對數字進行四舍五入
Math.round(11.5)=12
Math.round(-11.5)=11
4. 寫Java方法,實現字符串的替換,如:輸入bbbwlirbbb,輸出bbbhhtccc ?
代碼實現思路如下:
String s="bbbwlirbbb";
s.replaceAll("wlirbbb","hhtccc");
總結
以上就是今天的內容~
歡迎大家點贊👍,收藏?,轉發🚀,
如有問題、建議,請您在評論區留言💬哦。
最后:轉載請注明出處!!!