Java的基本數據類型和引用數據類型

Java的基本數據類型和引用數據類型

Java中的基本數據類型包括整數類型、浮點類型、字符類型和布爾類型,而引用數據類型主要包括類、接口、數組和枚舉。具體介紹如下:

  1. 基本數據類型
  • 整數類型:包括byteshortintlong,它們分別占用不同的存儲空間,范圍從8位到64位不等。
  • 浮點類型floatdouble,用于存儲帶有小數的數值。
  • 字符類型char,用于存儲單個字符。
  • 布爾類型boolean,表示邏輯值真或假。
  1. 引用數據類型
  • :用戶定義的類型,包括像String這樣的內置類。
  • 接口:定義了方法的集合,實現它的類需要提供這些方法的具體實現。
  • 數組:可以存儲多個同類型的元素。
  • 枚舉:限定了一組具名的常量。

Java中的基本數據類型和引用數據類型的區別主要體現在存儲位置、傳遞方式和默認值上。具體分析如下:

  1. 存儲位置:基本數據類型存儲在棧(stack)中,而引用數據類型在棧中存儲的是一個地址,這個地址指向堆(heap)中的實際數據。
  2. 傳遞方式:基本數據類型是按值傳遞,即傳遞的是值的副本;引用數據類型是按引用傳遞,傳遞的是對象的引用或地址。
  3. 默認值:基本數據類型的默認值是0或false,而引用數據類型的默認值是null。

Java 的四種權限 Public、Private、Default、Protected

Java中的四種訪問權限分別是Public、Private、Default(包訪問權限)、Protected。具體介紹如下:

  1. Public:這是最寬松的訪問控制級別,它允許任何其他類訪問public修飾的類、方法或變量。如果一個類被聲明為public,那么它對所有類都是可見的。
  2. Private:Private是封裝性最強的訪問控制級別,它只允許同一個類內部的方法或變量訪問private修飾的成員。這有助于隱藏對象的具體實現細節,僅對外提供必要的接口。
  3. Default(包訪問權限):Default訪問權限(沒有關鍵字),意味著只有在同一個包內部的類可以訪問default修飾的成員。此權限不限制類本身,但會限制不同包中的類訪問權限。
  4. Protected:Protected訪問權限介于public和default之間。它允許同一個包內的所有類以及該類的子類(即使子類在不同的包中)訪問protected修飾的成員。這種權限主要用于支持繼承。

Java 中 final、finally、finalize 關鍵字

Java中的finalfinallyfinalize雖然聽起來相似,但它們的用途和功能有很大的區別。具體介紹如下:

  1. final
  • 修飾變量:被final修飾的變量表示它是一個常量,一旦被賦值后就不能更改。這適用于基本數據類型和對象引用。
  • 修飾方法:當一個方法被final修飾時,它不能被子類覆蓋(重寫)。這通常用于確保方法的行為不會在子類中改變,以維護安全性或遵守某種契約。
  • 修飾類:當一個類被聲明為final,它不能被繼承。這是為了確保這個類不會被其他類改變其核心行為。
  1. finally
  • 異常處理finally是異常處理結構的一部分,與trycatch語句一起使用。無論是否捕獲到異常,finally塊中的代碼都會被執行。這對于釋放資源(如關閉文件、網絡連接)非常有用,以確保這些資源總是得到妥善清理。
  1. finalize
  • 清理工作finalizeObject類中的一個方法,它在垃圾收集器準備回收對象所占用的內存之前被調用。這個方法的存在是為了允許對象在被銷毀前執行一些清理工作,例如釋放非內存資源。然而,Java官方已經不推薦使用finalize方法,因為它的行為可能會導致不確定的資源管理問題。

ArrayList 和 LinkedList 的優缺點

ArrayList和LinkedList是Java中常用的兩種List集合,它們各有優缺點。具體如下:

ArrayList的優點

  1. 快速訪問:由于ArrayList是基于數組實現的,可以通過下標直接訪問元素,因此在隨機訪問時具有很高的效率。
  2. 內存連續:ArrayList使用的內存是連續的,這有助于提高緩存的命中率,進一步提升訪問速度。
  3. 迭代器:使用Iterator迭代器更加快速且方便。

ArrayList的缺點

  1. 插入刪除效率低:在ArrayList中插入和刪除元素時,需要移動其他元素以保持連續性,這會導致效率較低。
  2. 內存碎片化:頻繁的插入和刪除操作可能導致內存碎片化,影響性能。

LinkedList的優點

  1. 插入刪除快:LinkedList基于鏈表結構,插入和刪除時只需要更改前后節點的引用,因此在這些操作上比ArrayList更高效。
  2. 無內存碎片化:由于LinkedList不需要連續內存,因此不會出現內存碎片化的問題。

LinkedList的缺點

  1. 訪問慢:LinkedList在內存中存儲不連續,每次訪問元素都需要從頭開始遍歷或者通過復雜的計算來定位元素,導致隨機訪問效率低下。
  2. 占用空間大:每個節點除了存儲數據外,還需要額外的空間來存儲指向前后節點的指針,這使得LinkedList相比ArrayList占用更多的內存空間。

綜上所述,如果應用場景需要頻繁的隨機訪問操作,ArrayList可能是更好的選擇;而如果應用場景中插入和刪除操作更為頻繁,LinkedList可能會提供更好的性能。在選擇使用ArrayList或LinkedList時,應根據具體的應用場景和性能需求來決定。

由于ArrayList是基于數組實現的,可以通過下標直接訪問元素,因此在隨機訪問時具有很高的效率

ArrayList使用的內存是連續的,這意味著它在計算機內存中占用的是一塊連續的空間,這種存儲方式有助于提高緩存的命中率。具體分析如下:

  • 內存連續的優勢:連續的內存空間允許CPU更高效地讀取數據。因為數組在內存中是連續存放的,所以可以通過索引直接計算出元素的內存地址,這樣可以快速定位和訪問元素。
  • 緩存命中率的提升:當CPU需要從內存中讀取數據時,它會將一部分數據載入到緩存中。如果數據在內存中是連續的,那么相鄰的數據更有可能一起被加載到緩存中。這樣,當程序需要訪問這些相鄰的數據時,它們已經在緩存中了,從而減少了CPU再次從內存中讀取數據的次數,提高了緩存的命中率。
  • 性能的提升:由于上述原因,連續內存的使用可以顯著提高程序的性能,尤其是在處理大量數據時。這是因為緩存的命中率高意味著數據處理速度更快,響應時間更短。

總的來說,ArrayList之所以能夠提供快速的數據訪問,很大程度上得益于其底層數組結構在內存中的連續存儲方式。這種特性使得ArrayList在隨機訪問元素時非常高效,但在進行大量的插入和刪除操作時可能不如LinkedList那樣靈活。

由于LinkedList不需要連續內存,因此不會出現內存碎片化的問題

LinkedList不會導致內存碎片化是因為它的內存分配方式不需要連續的內存空間

內存碎片化是指內存中存在許多小的、不連續的空閑區域,這些區域無法被有效地利用,可能導致內存的使用效率降低。在Java中,ArrayList等基于數組的數據結構可能會遇到內存碎片化的問題,因為它們需要連續的內存空間來存儲元素。當數組增長時,可能需要重新分配更大的連續內存區域,并在其中復制原有元素,這個過程可能會產生內存碎片。

相比之下,LinkedList是一種雙向鏈表數據結構,它由一系列節點組成,每個節點包含對前一個和后一個節點的引用,以及存儲的數據。這種結構允許LinkedList在內存中以非連續的方式存儲數據,因為每個節點可以獨立地存儲在內存的任何位置。由于LinkedList不需要連續的內存空間,所以在動態分配和釋放內存時不會產生內存碎片。

總的來說,LinkedList的內存管理方式使其在處理頻繁的插入和刪除操作時具有優勢,因為它不受內存碎片化的影響,可以更靈活地管理內存。然而,這也意味著訪問LinkedList中的元素可能比ArrayList慢,因為不能通過索引直接定位到元素的內存地址,而是需要從頭節點或尾節點開始遍歷。

Spring對事務的支持:應該從spring事務的使用方式;事務傳播行為等方面繼續講述

Spring對事務的支持主要體現在以下幾個方面:

  1. Spring事務的使用方式

Spring提供了兩種事務管理方式:編程式事務和聲明式事務。

編程式事務:通過編寫代碼來實現事務管理,需要使用TransactionTemplate或者PlatformTransactionManager接口。編程式事務在代碼中具有較強的侵入性,但靈活性較高。

聲明式事務:通過配置的方式來實現事務管理,可以使用XML配置或者注解的方式。聲明式事務相對于編程式事務,具有較低的侵入性和較高的可維護性。

  1. 事務傳播行為

Spring定義了7種事務傳播行為,用于控制事務在不同方法調用之間的傳播。這些傳播行為包括:

  • PROPAGATION_REQUIRED:如果當前沒有事務,則創建一個新的事務;如果已經存在一個事務,則加入到該事務中。這是默認的傳播行為。
  • PROPAGATION_SUPPORTS:支持當前事務,如果當前沒有事務,則以非事務方式執行。
  • PROPAGATION_MANDATORY:支持當前事務,如果當前沒有事務,則拋出異常。
  • PROPAGATION_REQUIRES_NEW:創建一個新的事務,如果當前存在事務,則把當前事務掛起。
  • PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,則把當前事務掛起。
  • PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。
  • PROPAGATION_NESTED:如果當前存在事務,則在嵌套事務內執行;如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。
  1. 事務隔離級別

Spring支持4種事務隔離級別,用于控制并發事務之間的隔離程度。這些隔離級別包括:

  • ISOLATION_DEFAULT:使用數據庫默認的隔離級別。
  • ISOLATION_READ_UNCOMMITTED:允許讀取未提交的數據。
  • ISOLATION_READ_COMMITTED:只允許讀取已提交的數據。
  • ISOLATION_REPEATABLE_READ:確保多次讀取同一行數據時,結果是一致的。
  • ISOLATION_SERIALIZABLE:確保每個事務都是串行執行的。
  1. 事務超時設置

可以通過設置事務超時時間來控制事務的最大執行時間,超過該時間限制的事務將被自動回滾。可以使用@Transactional注解的timeout屬性或者TransactionTemplatesetTimeout方法來設置事務超時時間。

  1. 異常回滾規則

Spring默認只對運行時異常(RuntimeException)及其子類進行回滾。如果需要對其他類型的異常進行回滾,可以使用@Transactional注解的rollbackFor屬性來指定需要回滾的異常類。同時,可以使用noRollbackFor屬性來指定不需要回滾的異常類。

Linux常見的命令:顯示進程占用資源的命令;管道符命令;用于查找文件的命令

在Linux系統中,ps、top和lsof命令可用于顯示進程占用資源的情況。具體如下:

  1. ps命令能夠提供進程的瞬間狀態信息,通過它我們可以了解到哪些進程正在運行以及它們占用的資源情況。
  2. top命令則提供了實時動態的進程信息,它可以持續監視并動態刷新進程的狀態,包括CPU使用率、內存占用等關鍵指標。這個命令非常適合用來監控系統中最消耗資源的進程。
  3. lsof命令可以用來查看特定進程打開的文件、目錄、網絡套接字等資源占用情況。配合-n-P參數可以分別關閉DNS解析和端口解析,專注于進程所占用的具體資源信息。

管道符是Linux中強大的命令行工具之一,它允許我們將一個命令的輸出直接作為另一個命令的輸入。這極大地增加了命令行的靈活性和功能性。例如,你可以組合多個簡單的命令來完成復雜的任務,這種工作方式類似于流水線,每個環節處理特定的任務,然后將結果傳遞給下一個環節。

當需要在Linux系統中查找文件時,find命令是一個非常實用的工具。它允許用戶根據不同的條件來搜索文件或目錄,如文件名、類型甚至是文件大小等屬性。例如,使用find /home -name "*.c"可以查找/home目錄下所有以.c為后綴的文件。另外,which命令用于查找具有執行權限的命令文件的位置,非常適用于查找系統命令所在路徑。

綜上所述,Linux系統提供了豐富的命令集合供用戶查詢和管理進程資源占用情況,管道符則能有效地連接多個命令以實現復雜邏輯,而find和which等命令則是定位文件的強大助手。掌握這些命令將有助于提升在Linux環境下的工作效率。

說一下索引失效的場景

索引失效通常指的是數據庫在查詢時沒有使用到索引,導致查詢效率降低。以下是一些可能導致索引失效的場景:

  1. 不滿足最左匹配原則:在使用聯合索引時,如果查詢條件中沒有包含聯合索引的最左側列,那么索引可能會失效。
  2. 使用OR條件:在某些情況下,OR條件會導致索引失效,因為它可能無法有效地利用索引來加速查詢。
  3. 進行不等比較:當使用<>!=進行不等比較時,索引可能不會生效,特別是在范圍查詢中使用這些操作符時。
  4. 范圍查詢:如果查詢涉及到范圍,如BETWEEN><等,且范圍較大,索引的效果可能會大打折扣。
  5. 模糊查詢:在使用LIKE進行模糊查詢時,如果通配符位于字符串的開頭,如'%abc',則索引不會生效。
  6. 函數或運算:在查詢條件中對字段進行函數運算或表達式計算,如UPPER(column) = 'VALUE',這會導致索引失效。
  7. 數據類型轉換:隱式的類型轉換可能會導致索引失效,因為數據庫需要對數據進行轉換才能進行比較。
  8. 多表查詢:在涉及多表連接的查詢中,如果沒有正確地使用索引,或者連接條件不適合使用索引,也可能導致索引失效。
  9. 排序和分組:在某些情況下,排序和分組操作可能會導致索引失效,尤其是在使用了非索引列進行排序或分組時。
  10. 使用IS NULL或IS NOT NULL:這些條件在某些情況下也可能導致索引失效。
  11. 頻繁更新的列上使用索引:如果一個列的數據頻繁更新,那么在這個列上使用索引可能不是最佳選擇,因為索引維護的成本會很高。
  12. 選擇性低的索引:如果一個索引的唯一性很差,即很多行都具有相同的索引值,那么這個索引的效率會很低。
  13. 鎖競爭:在高并發的環境中,如果索引導致的鎖競爭非常激烈,有時為了避免性能問題,可能會選擇讓索引失效。
  14. 臨時表:在某些查詢中,MySQL可能會創建臨時表,而在臨時表上索引通常不會被使用。
  15. 復雜的子查詢:在某些復雜的子查詢中,優化器可能無法有效地使用索引,導致索引失效。

總之,了解以上場景可以幫助開發者避免索引失效的問題,提高數據庫查詢的效率。在實際工作中,可以通過EXPLAIN命令來分析查詢語句的執行計劃,從而判斷是否使用了索引,以及索引的使用效果如何。如果發現索引失效,可以嘗試優化查詢語句或調整索引策略,以提高查詢性能。

說一下spring springmvc springboot的區別

Spring Framework, Spring MVC和Spring Boot都是Java開發者常用的框架,但它們之間存在一定的區別。具體分析如下:

  • Spring Framework:Spring是一個一站式的輕量級Java開發框架,其核心特性包括控制反轉(IoC)和面向切面編程(AOP)。它提供了全面的編程和配置模型,用于開發高效的、可重用的代碼。
  • Spring MVC:Spring MVC是基于Spring Framework的一個模塊,它實現了MVC(Model-View-Controller)設計模式,主要用于構建Web應用程序。與Spring Framework相比,Spring MVC專門針對Web層開發,提供了一套完整的Web應用開發解決方案。
  • Spring Boot:Spring Boot是在Spring Framework基礎上的一個擴展,旨在簡化新Spring應用的初始搭建以及開發過程。采用約定優于配置的理念,減少了配置工作量,并提供了內嵌的Tomcat服務器,使得開發者可以快速地通過一個命令來運行和測試Spring應用。它還提供了一系列自動配置的功能,可以根據項目的依賴自動進行配置。因此,Spring Boot特別適合于快速開發小型應用程序或微服務。

總的來說,Spring Framework是基礎,Spring MVC是構建在其上的Web框架,而Spring Boot則是為了簡化Spring應用的開發和部署流程而產生的。在實際開發中,根據項目的需求和規模選擇適合的框架非常重要。

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

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

相關文章

k8s-prometheus監控部署 22

新建項目倉庫并上傳部署prometheus所需的鏡像 開始部署 修改svc訪問方式為LoadBalancer 查看用戶名和密碼 訪問grafana監控頁面 http://192.168.182.103/?????? 修改可視化模板 官方監控模板&#xff1a;https://grafana.com/grafana/dashboards 訪問prometheus監控頁面…

1. vue3-環境準備

1、安裝node.js 如果開發環境上面沒有安裝node.js&#xff0c;需要到node.js官方網站下載node.js。下載安裝后&#xff0c;可以通過npm --version查看nodejs版本 2. 開發工具 開發工具建議使用vscode

知識圖譜1——neo4j

2024年要搞知識圖譜&#xff0c;因此沒有辦法&#xff0c;只能將我之前固守的JDK1.8&#xff0c;升級到JDK21&#xff0c;因為JDK21也是LTS版本&#xff0c;neo4j高版本就不支持JDK8&#xff0c;因此沒有辦法&#xff0c;只有升級了。寫這篇只是一個搭建筆記&#xff0c;我的初…

AJAX 學習筆記(Day3)

「寫在前面」 本文為黑馬程序員 AJAX 教程的學習筆記。本著自己學習、分享他人的態度&#xff0c;分享學習筆記&#xff0c;希望能對大家有所幫助。推薦先按順序閱讀往期內容&#xff1a; 1. AJAX 學習筆記&#xff08;Day1&#xff09; 目錄 3 AJAX 原理 3.1 XMLHttpRequest 3…

springboot心靈治愈交流平臺源碼和論文

本論文主要論述了如何使用JAVA語言開發一個心靈治愈交流平臺 &#xff0c;本系統將嚴格按照軟件開發流程進行各個階段的工作&#xff0c;采用B/S架構&#xff0c;面向對象編程思想進行項目開發。在引言中&#xff0c;作者將論述心靈治愈交流平臺的當前背景以及系統開發的目的&a…

@Transactional--開啟事物后換源報錯

一、問題出現的場景 系統架構設計、每個企業一個企業庫、通過數據源切在平臺庫、和企業庫之間動態切換完成業務操作。 二、跨庫事物失效的原因 1、SpringTransactional不支持跨數據源事物&#xff0c;Spring 事物控制是基于數據庫鏈接進行的&#xff0c;當數據源切換后&#x…

SQL中把datetime 轉為字符串

在 SQL 中&#xff0c;將 datetime 類型的數據轉換為字符串可以使用不同的方法&#xff0c;具體取決于你使用的數據庫系統。以下是一些常見數據庫系統中將 datetime 轉換為字符串的示例&#xff1a; 1. MySQL 在 MySQL 中&#xff0c;你可以使用 DATE_FORMAT() 函數將 dateti…

SketchUp Pro 2023:顛覆傳統,重塑設計世界mac/win版

SketchUp Pro 2023是一款強大的三維建模軟件&#xff0c;專為設計師、建筑師和創意專業人士打造。這款軟件以其直觀易用的界面和強大的功能而著稱&#xff0c;為用戶提供了無限的創意空間。 SketchUp Pro 2023軟件獲取 SketchUp Pro 2023在用戶體驗方面進行了全面的優化&#…

SpringBoot整合rabbitmq-重復消費問題

說明&#xff1a;重復消費的原因大致是生產者將信息A發送到隊列中&#xff0c;消費者監聽到消息A后開始處理業務&#xff0c;業務處理完成后&#xff0c;監聽在告知rabbitmq消息A已經被消費完成途中中斷&#xff0c;也就時說我已經處理完業務&#xff0c;而隊列中還存在當前消息…

Qt|QTreewidget類下函數qt助手詳解說明示例(上)

該系列持續更新&#xff0c;喜歡請一鍵三連&#xff0c;感謝各位大佬。 QT5.14.2 參考官方QT助手 文章目錄 QTreeWidget ClasspropertiesPublic Functions默認構造函數默認析構函數添加根節點void addTopLevelItem(QTreeWidgetItem *item)添加多個根節點void addTopLevelItems…

LeetCode---【和的操作】

目錄 兩數之和我的答案在b站up那里學到的【然后自己復寫】 和為 K 的子數組在b站up那里學到的【然后自己復寫】 三數之和在b站up那里學到的【然后自己復寫】 兩數相加【鏈表】我的半路答案&#xff1a;沒有看到是鏈表在b站up那里學到的【復寫失敗后整理】 兩數之和 我的答案 …

Linux下的權限

1. 操作系統的外殼 在理解Linux權限之前&#xff0c;我們先來吃點小菜。 1.大部分指令都是文件&#xff0c;如果把指令對應的文件刪除了&#xff0c;那么這條指令就使用不了了。 2.用戶執行某種功能的時候&#xff0c;不是直接讓操作系統執行對應的指令的&#xff0c;而是先交…

IIC協議總結

1.基本理解 iic通信協議:雙線制串行通信協議,由時鐘線SCL和數據線SDA構成. 通信方式:主從模式,主設備發起通信,從設備響應通信 2.通信的基本步驟 a.主設備發送一個開始信號&#xff0c;表示開始通信&#xff0c;即啟動I2C 條件&#xff1a;SCL1&#xff0c;SDA出現下降沿 …

Python開源項目月排行 2024年2月

Python 趨勢月報&#xff0c;按月瀏覽往期 GitHub,Gitee 等最熱門的Python開源項目&#xff0c;入選的項目主要參考GitHub Trending,部分參考了Gitee和其他。排名不分先后&#xff0c;都是當前月份內相對熱門的項目。 入選公式&#xff1d;70%GitHub Trending20%Gitee10%其他 …

jvm面試題-背誦版

按照思維導圖抽查和記憶&#xff0c;答案見&#xff1a;四、面試-多線程/并發_scheduledfuture釋放-CSDN博客

Jmeter系列(4) 線程屬性詳解

線程屬性 線程組是配置壓測策略的一個重要環節線程組決定了測試執行的請求數量 線程數 在這里線程數相當于一個虛擬用戶每個線程數大約占內存1M特別注意?? 單臺機器最大線程數不要超過1000&#xff0c;不然可能會造成內存溢出 Ramp-Up時間 所有線程在多長時間內全部啟動…

【網絡工程設計】用GNS3和VMware搭建網絡環境

&#x1f4dd;本文介紹 本文主要是使用GNS3和VMware來搭建網絡環境 &#x1f44b;作者簡介&#xff1a;一個正在積極探索的本科生 &#x1f4f1;聯系方式&#xff1a;943641266(QQ) &#x1f6aa;Github地址&#xff1a;https://github.com/sankexilianhua &#x1f511;Gitee地…

計算機網絡-第2章 物理層

本章內容&#xff1a;物理層和數據通信的概念、傳輸媒體特點&#xff08;不屬于物理層&#xff09;、信道復用、數字傳輸系統、寬帶接入 2.1-2.2 物理層和數據通信的概念 物理層解決的問題&#xff1a;如何在傳輸媒體上傳輸數據比特流&#xff0c;屏蔽掉傳輸媒體和通信手段的差…

文獻閱讀筆記《Spatial-temporal Forecasting for Regions without Observations》13頁

目錄 目錄 目錄 發行刊物 ABSTRACT 1 INTRODUCTION 2 RELATED WORK&#xff08;相關工作 2.1 Spatial-temporal Forecasting&#xff08;時空預測 2.2 Spatial-temporal Forecasting withIncomplete Data&#xff08;不完全數據的時空預測 2.3 Graph Contrastive Lear…

藍橋杯集訓·每日一題2024 (前綴和)

筆記&#xff1a; 例題&#xff1a; #include<bits/stdc.h> using namespace std; const int N 5000010; char str[N]; int s[N]; int main(){int t;cin>>t;for(int a1;a<t;a){int n;cin>>n;scanf("%s",str1);for(int i1;i<n;i){s[i]s[i-1]…