Java基礎知識題(二)

系列文章目錄

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");

總結

以上就是今天的內容~

歡迎大家點贊👍,收藏?,轉發🚀,
如有問題、建議,請您在評論區留言💬哦。

最后:轉載請注明出處!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43324.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43324.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43324.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java # JVM

一、1.8之前 運行時數據區(進程共享) 運行時常量池為什么要有方法區: jvm完成類裝載后,需要將class文件中的常量池轉入內存,保存在方法區中為什么是常量: 常量對象操作較多,為了避免頻繁創建和…

圖像去雨-雨線清除-圖像處理-(計算機作業附代碼)

背景 多年來,圖像去雨已經被廣泛研究,使用傳統方法和基于學習的方法。然而,傳統方法如高斯混合模型和字典學習方法耗時,并且無法很好地處理受到嚴重雨滴影響的圖像塊。 算法 通過考慮雨滴條狀特性和角度分布,這個問…

【Leetcode】98. 驗證二叉搜索樹

一、題目 1、題目描述 給你一個二叉樹的根節點 root ,判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下: 節點的左子樹只包含 小于 當前節點的數。節點的右子樹只包含 大于 當前節點的數。所有左子樹和右子樹自身必須也是二叉搜索樹。示例1: 輸入:root = …

馬上七夕到了,用各種編程語言實現10種浪漫表白方式

目錄 1. 直接表白:2. 七夕節表白:3. 猜心游戲:4. 浪漫詩句:5. 愛的方程式:6. 愛心Python:7. 心形圖案JavaScript 代碼:8. 心形并顯示表白信息HTML 頁面:9. Java七夕快樂:…

QT的布局與間隔器介紹

布局與間隔器 1、概述 QT中使用絕對定位的布局方式,無法適用窗口的變化,但是,也可以通過尺寸策略來進行 調整,使得 可以適用窗口變化。 布局管理器作用最主要用來在qt設計師中進行控件的排列,另外,布局管理…

Android 遠程真機調研

背景 現有的安卓測試機器較少,很難滿足 SDK 的兼容性測試及線上問題(特殊機型)驗證,基于真機成本較高且數量較多的前提下,可以考慮使用云測平臺上的機器進行驗證,因此需要針對各云測平臺進行調研、比較。 …

服裝定制小程序

如今,人們對時尚的追求已不僅僅停留在傳統的購買與穿搭上,而是更加注重個性化和定制化的需求。為滿足這一需求,喬拓云網推出了一款創新的服裝定制小程序,為用戶提供定制專屬時尚的全新旅途。 通過進入【喬拓云】后臺,用…

Ordinals 之后,以太坊銘文協議 Ethscriptions 如何再塑 NFT 資產形態

隨著加密市場的發展,NFT 賽道逐漸形成了其獨有的市場。但在加密熊市的持續影響下,今年 NFT 賽道的發展充滿坎坷與挑戰。據 NFTGO 數據顯示,截至 8 月 7 日,與去年相比,NFT 市值總計約 56.4 億美元,過去 1 年…

搜狗拼音暫用了VSCode及微信小程序開發者工具快捷鍵Ctrl + Shit + K 搜狗拼音截圖快捷鍵

修改搜狗拼音的快捷鍵 右鍵--更多設置--屬性設置--按鍵--系統功能快捷鍵--系統功能快捷鍵設置--取消Ctrl Shit K的勾選--勾選截屏并設置為Ctrl Shit A 微信開發者工具設置快捷鍵 右鍵--Command Palette--刪除行 微信開發者工具快捷鍵 刪除行:Ctrl Shit K 或…

無腦入門pytorch系列(四)—— scatter_

本系列教程適用于沒有任何pytorch的同學(簡單的python語法還是要的),從代碼的表層出發挖掘代碼的深層含義,理解具體的意思和內涵。pytorch的很多函數看著非常簡單,但是其中包含了很多內容,不了解其中的意思…

element問題總結2

20.隱藏el-calendar 的多余的日子 /deep/ .el-calendar-table:not(.is-range) td.next {display: none;}/deep/ .el-calendar-table:not(.is-range) td.prev {visibility: hidden;}/deep/ .el-calendar-table td {border: 1px solid #dfe6ec;} 21.點擊今天,上個月,下個月的時候…

深入理解內存 —— 函數棧幀的創建與銷毀

前言 一位優秀的程序員,必須對內存的分布有深刻的理解,在初學編程的時候,往往有諸如以下很多問題困擾著初學者,而通過今天的分享,我們就可以通過自己的觀察,將這些問題統統解決掉 局部變量是怎么創建的&…

keepalived集群

keepalived概述 keepalived軟件就是通過vrrp協議來實現高可用功能。 VRRP通信原理 VRRP就是虛擬路由冗余協議,它的出現就是為了解決靜態路由的單點故障。 VRRP是通過一種競選一種協議機制來將路由交個某臺VRRP路由器。 VRRP 用IP多播的方式(多播地…

微信小程序中pdf的上傳、下載及excel導出

微信小程序中pdf的上傳、下載及excel導出 pdf上傳上傳1&#xff1a;上傳2&#xff1a; pdf下載導出excel pdf上傳 上傳兩種方法&#xff1a; 上傳1&#xff1a; 1.用vant weapp組件&#xff1a; //pdf上傳--vant weapp組件 <view class"content"><van-u…

推薦算法知識

有志者&#xff0c;事竟成 1. 聯盟的含義 2. Attention 3. Transformer 4. Learning to rank的三種方式 1. point-wise 2. pair-wise 3. list-wise 5. 推薦系統中的校準&#xff08;如保序回歸等&#xff09; 6. 推薦系統中的偏差與處理&#xff08;如位置偏差等&#xff09…

C#中的泛型約束可以用在以下幾個地方?

1.泛型類型參數&#xff1a; 在定義泛型類型或泛型方法時&#xff0c;可以使用泛型約束來限制泛型類型參數的類型。這可以確保類型參數滿足特定的條件&#xff0c;從而在編譯時捕獲錯誤并提供更安全和可靠的代碼。 public class MyClass<T> where T : IComparable<T&…

【React學習】React中的setState方法

1. setState概述 setState 是React框架中&#xff0c;用于更新組件狀態的方法。 setState 方法由React組件繼承自 React.Component 類的一部分。通過調用 setState&#xff0c;可以告訴 React要更新組件的狀態&#xff0c;并觸發組件的重新渲染。 this.setState(newState, ca…

C語言中常見的一些語法概念和功能

常用代碼&#xff1a; 程序入口&#xff1a;int main() 函數用于定義程序的入口點。 輸出&#xff1a;使用 printf() 函數可以在控制臺打印輸出。 輸入&#xff1a;使用 scanf() 函數可以接收用戶的輸入。 條件判斷&#xff1a;使用 if-else 語句可以根據條件執行不同的代碼…

【力扣每日一題】2023.8.15 字符中的查找與替換

目錄 題目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代碼&#xff1a; 題目&#xff1a; 示例&#xff1a; 分析&#xff1a; 題目很長&#xff0c;簡而言之就是檢查字符串中對應索引的位置是否有特定的字符串&#xff0c;如果有&#xff0c;那么替換&#xff0c;返…

Ceph如何操作底層對象數據

1.基本原理介紹 1.1 ceph中的對象(object) 在Ceph存儲中&#xff0c;一切數據最終都會以對象(Object)的形式存儲在硬盤&#xff08;OSD&#xff09;上&#xff0c;每個的Object默認大小為4M。 通過rados命令&#xff0c;可以查看一個存儲池中的所有object信息&#xff0c;例如…