Java學習-Java基礎

1.重寫與重載的區別

  • 重寫發生在父子類之間,重載發生在同類之間
  • 構造方法不能重寫,只能重載
  • 重寫的方法返回值,參數列表,方法名必須相同
  • 重載的方法名相同,參數列表必須不同
  • 重寫的方法的訪問權限不能比父類方法的訪問權限更低

2.接口和抽象類的區別

  • 接口是interface,抽象類是abstract
  • 接口的權限修飾符必須是public,抽象類可以是public default protected
  • 接口是被實現的,可以進行多繼承,抽象類是用來被繼承的,只能是單繼承
  • 接口里面可以不有構造方法,抽象類里面可以有構造方法

3.權限修飾符

  • public:全局都可以使用
  • default:不同包的子類可以使用
  • protected:同一個包內可以使用
  • private:同一個類內可以使用

4.深拷貝與淺拷貝

  • 淺拷貝:拷貝對象的引用,新對象的引用類型屬性與原始對象共享同一個對象。
  • 深拷貝:拷貝所有引用類型的屬性,使原始對象和拷貝對象完全獨立。
  • 在 Java 中,默認的 clone() 方法是淺拷貝,需要手動實現深拷貝。

5.強軟弱虛

  • 強引用定義:Object obj=new Object();,這里obj就是對Object對象的強引用。不會被垃圾回收,內存不足,JVM 拋出OOM。
  • 軟引用定義:通過SoftReference類來實現。當內存不足時,垃圾回收器會回收這些對象。應用場景:常用于實現內存敏感的緩存。
  • 弱引用定義:使用WeakReference類來創建。垃圾回收規則:無論當前內存是否充足,弱引用關聯的對象都會被回收。應用場景:常用于解決內存泄漏問題,例如在ThreadLocal中使用弱引用存儲鍵,當外部強引用消失時,ThreadLocal中的弱引用對象能被及時回收。
  • 虛引用定義:通過PhantomReference類實現,且必須和引用隊列(ReferenceQueue)聯合使用垃圾回收規則:在任何時候都可能被垃圾回收器回收。應用場景:主要用于在對象被垃圾回收時進行一些額外的清理操作,例如管理直接內存(DirectMemory),在對象被回收時釋放其占用的直接內存。

6.super和this的區別

  • super是指代調用父類的構造方法,方法,成員變量等
  • this是指代類本身,可以調用本類的構造方法,方法,變量
  • 使用super調用構造方法的時候,必須放在第一行,保證父類先進行加載
  • 使用this調用本類其他構造方法時候也必須放在第一行,避免部分加載的情況

7.sleep和wait區別

  • sleep屬于Thread類中的方法
  • sleep釋放cpu給其它線程不釋放鎖資源 sleep(1000) 等待超過1s被喚醒
  • wait屬于Object類中的方法釋放cpu給其它線程,同時釋放鎖資源
  • wait(1000) 等待超過1s被喚醒wait() 一直等待需要通過notify或者notifyAll進行喚醒wait 方法
  • wait必須配合 synchronized 一起使用,不然在運行時就會拋出IllegalMonitorStateException異常

8.自動拆裝箱 int和Integer區別

  • 裝箱:將基本類型轉換成包裝類對象
  • 拆箱:將包裝類對象轉換成基本類型的值

為什么引入自動裝拆箱功能?

主要是用于java集合中,List list=new ArrayList();list集合如果要放整數的話,只能放對象,不能放基本類型,因此需要將整數自動裝箱成對象。

Integer-128和+127的問題

Integer對-128到127之間的數字進行緩存,如果在這個范圍比較直接取出緩存對象進行比較,如果超出了范圍就新建對象,所以說==在范圍內有效,超出范圍就要用equals

==和equals區別

  • ==比較的是兩個基本數據類型的值或者引用數據類型的地址
  • equals沒重寫之前比較的是兩個對象的地址,重寫一般比較對象屬性的值

String能被繼承嗎

  • 不能被繼承,因為String類有final修飾符,而final修飾的類是不能被繼承的。
  • 為了安全。String 類中有native關鍵字修飾的調用本地方法,如果方法可以重寫,可能被植入惡意代碼,破壞程序。Java 的安全性也體現在這里。

String a = “abc” String a = new String(“abc”),在內存中的區別

  • String a = “123"會先檢查常量池中是否有"abc”,有的話直接讓a指向這個字符串,沒有的話就創建放入常量池
  • String a = new String(“abc”)是在堆內存中創建String對象

常量池的作用以及工作原理

  • 緩存字符串對象,避免字符串重復創建,節省空間
  • 當創建字符串時候,JVM先檢查常量池,存在就復用,不存在就創建并放入
  • 對于new的字符串對象,也可以通過intern方法放入常量池

String buffer和String builder區別

  • StringBuffer 中的方法大都采用了 synchronized 關鍵字進行修飾,因此是線程安全的,效率低。
  • StringBuilder 沒有這個修飾,可以被認為是線程不安全的。效率高

為什么有了String還要StringBuilder

  • String是不可變的,每次對String進行修改都會創建新的對象,消耗資源
  • StringBuilder是可變的,能在原有對象上修改內容,節省時間

final、finally、finalize

  • final:修飾符(關鍵字)有三種用法:修飾類、變量和方法。修飾類時,意味著它不能再派生出新的子類,即不能被繼承,修飾變量時,該變量使用中不被改變,即為常量。修飾方法時,不能在子類中被重寫。
  • finally:通常放在try…catch的后面構造終執行代碼塊,這就意味著程序無論正常執行還是發生異常,這里的代碼都能執行
  • finalize:Object類中定義的方法,這個方法是由垃圾收集器在銷毀對象時調用的

Object中有哪些方法(說出5個即可)

  • protected Object clone()—>創建并返回此對象的一個副本。
  • boolean equals(Object obj)—>指示某個其他對象是否與此對象“相等
  • protected void finalize()—>當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
  • Class<? extendsObject> getClass()—>返回一個對象的運行時類。
  • int hashCode()—>返回該對象的哈希碼值。
  • void notify()—>喚醒在此對象監視器上等待的單個線程。
  • void notifyAll()—>喚醒在此對象監視器上等待的所有線程。
  • String toString()—>返回該對象的字符串表示。

線程的狀態生命周期

  • 新建狀態(New) :線程對象被創建后,就進入了新建狀態。Thread thread = new Thread()。
  • 就緒狀態(Runnable): 調用了該對象的start()方法,從而來啟動該線程。隨時準備被CPU調度執行。
  • 運行狀態(Running):線程獲取CPU權限進行執行。
  • 阻塞狀態(Blocked):等待阻塞 – 通過調用線程的wait()方法,讓線程等待某工作的完成。同步阻塞 – 線程在獲取synchronized同步鎖失敗(因為鎖被其它線程所占用),它會進入同步阻塞狀態。其他阻塞 – 通過調用線程的sleep()或join()或發出了I/O請求時,線程會進入到阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。
  • 死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

IO流分為哪兩種

  • 字節流和字符流字節流里面有inputstream和outputstream,字符流里面有reader和writer

BIO NIO AIO區別

  • BIO:阻塞式IO,傳統的同步阻塞 I/O 模型,每個連接都需要一個獨立的線程進行處理。
  • NIO:非阻塞IO,采用多路復用(Selector 機制),一個線程可以處理多個連接,不需要為每個連接創建獨立線程。采用 Buffer 進行數據讀寫,Channel 負責數據傳輸
  • AIO:異步非阻塞IO,采用異步回調(基于事件驅動),I/O 操作完成后會自動觸發回調方法,無需等待。適用于高并發、高吞吐的場景,如高性能 Web 服務器。

反射是什么

在Java運行時環境中,對于任意一個類,可以知道這個類有哪些屬性和方法。對于任意一個對象,可以調用它的任意一個方法。

Class.forName()和ClassLoader.loadClass()有什么區別?

  • Class.forName()默認會觸發類的靜態代碼塊(static{}執行)。適用于 JDBC 驅動加載(注冊數據庫驅動時)。
    僅加載類,不執行靜態代碼塊。
  • ClassLoader.loadClass(“com.example.MyClass”)適用于框架動態加載類(如插件機制)

GET和POST的區別

  • 參數 :GET:用于獲取數據請求參數會顯示在 URL 上。POST:用于提交數據數據放在請求體中傳輸。
  • 安全性 :GET:參數暴露在 URL 中,不安全。POST:參數在請求體中,相對安全。
  • 數據長度 :GET:URL 長度有限制,傳輸的數據量較小。不同瀏覽器和服務器對 URL 長度限制不同,一般不超過 2KB。POST:理論上無數據長度限制,可傳輸大量數據。
  • 緩存 :GET:請求會被瀏覽器主動緩存,下次相同請求可能直接從緩存獲取數據。POST:默認不會被緩存。

Cookie 和Session的區別

  • Cookie 是 web 服務器發送給瀏覽器的一塊信息,瀏覽器會在本地一個文件中給每個 web 服務器存儲 cookie。以后瀏覽器再給特定的 web 服務器發送請求時,同時會發送所有為該服務器存儲的cookie
  • Session 是存儲在 web 服務器端的一塊信息。session 對象存儲特定用戶會話所需的屬性及配置信息。當用戶在應用程序的
  • Web 頁面之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去

Http和Https的區別

  • 端口: http默認是80,https默認是443
  • 安全性: http傳輸不加密不安全,https傳輸進行加密,相對安全
  • 證書: http沒有證書,https有權威機構發布的證書

Http1.0和Http1.1區別

  • http1.0使用的是短連接,每個請求-響應都會新建一個 TCP 連接,請求結束后立即斷開(無連接)
  • http1.1使用的是長連接,支持持久連接,可復用 TCP 連接,減少建立連接的開銷
  • http1.0:僅支持 GET、POST、HEAD
  • http1.1支持PUT、DELETE、OPTIONS、TRACE等請求

TCP和UDP有什么區別

  • TCP面向連接的,UDP不是
  • TCP保證可靠,UDP不保證(收到消息不確認)
  • TCP傳輸字節流,UDP傳輸報文
  • TCP傳輸準確性比較高的東西(文件,郵件),UDP適用一些比如視頻,語音,直播

TCP三次握手,四次揮手

  • 第一次握手:客戶端發送SYN給服務端,告訴服務端,請求連接,客戶端進入等待回復狀態
  • 第二次握手:服務端收到了請求,返回給客戶端SYN+ACK包,說明可以進行連接,服務端進入等待
  • 第三次握手:客戶端收到了服務端返回來的可以連接信息,重新給服務端發送ACK,建立連接
  • 第一次揮手:客戶端發送報文告訴服務端需要斷開連接,進入等待回復
  • 第二次揮手:服務端接收到斷開連接請求,發送給客戶端收到了請求并告訴等一會,然后處理服務端自己的事情第三次揮手:服務端處理完事情,再次發送報文給客戶端,告訴可以斷開連接了
  • 第四次揮手:客戶端發送報文說可以斷開了,服務端斷開,客戶端等一會也斷開

瀏覽器輸URL到頁面展示過程

  • 瀏覽器輸入URL瀏覽器經過DNS解析出URL轉換成IP地址
  • 瀏覽器得到IP地址后,通過一個隨機端口向服務端發起TCP連接(握手)
  • 瀏覽器發送get請求,服務器接受到請求返回http響應報文瀏覽器收到報文后,渲染html

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

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

相關文章

BG開發者日志0427:故事的起點

1、4月26日晚上&#xff0c;BG項目的gameplay部分開發完畢&#xff0c;后續是細節以及試玩版優化。 開發重心轉移到story部分&#xff0c;目前剛開始&#xff0c; 確切地說以前是長期擱置狀態&#xff0c;因為過去的四個月中gameplay部分優先開發。 --- 2、BG這個項目的起點…

頭歌實訓之游標觸發器

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 種一棵樹最好是十年前&#xff0c;其次是現在&#xff01; &#x1f680; 今天來學習C語言的相關知識。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c;分享給更…

【深度學習】多頭注意力機制的實現|pytorch

博主簡介&#xff1a;努力學習的22級計算機科學與技術本科生一枚&#x1f338;博主主頁&#xff1a; Yaoyao2024往期回顧&#xff1a;【深度學習】注意力機制| 基于“上下文”進行編碼,用更聰明的矩陣乘法替代笨重的全連接每日一言&#x1f33c;: 路漫漫其修遠兮&#xff0c;吾…

java16

1.API續集 可以導入別人寫好的clone的jar包 注意&#xff1a;方法要有調用者&#xff0c;如果調用者是null就會報錯 2.如何導入別人寫好的jar包 復制jar包然后粘貼在lib里面&#xff0c;然后右鍵點擊jar包再點擊下面的add 3.關于打印java中的引用數據類型

PostgreSQL的擴展 credcheck

PostgreSQL的擴展 credcheck credcheck 是 PostgreSQL 的一個安全擴展&#xff0c;專門用于強制實施密碼策略和憑證檢查&#xff0c;特別適合需要符合安全合規要求的數據庫環境。 一、擴展概述 1. 主要功能 強制密碼復雜度要求防止使用常見弱密碼密碼過期策略實施密碼重復使…

MyBatis中的@Param注解-如何傳入多個不同類型的參數

mybatis中參數識別規則 默認情況下,MyBatis 會按照參數位置自動分配名稱:param1, param2, param3, ...或者 arg0, arg1。 // Mapper 接口方法 User getUserByIdAndName(Integer id, String name); 以上接口在XML中只能通過param1或者arg0這樣的方式來引用,可讀性差。 &l…

DIFY教程第一集:安裝Dify配置環境

一、Dify的介紹 https://dify.ai/ Dify 是一款創新的智能生活助手應用&#xff0c;旨在為您提供便捷、高效的服務。通過人工智能技術&#xff0c; Dify 可以實現語音 助手、智能家居控制、日程管理等功能&#xff0c;助您輕松應對生活瑣事&#xff0c;享受智慧生活。簡約的…

5、Rag基礎:RAG 專題

RAG 簡介 什么是檢索增強生成? 檢索增強生成(RAG)是指對大型語言模型輸出進行優化,使其能夠在生成響應之前引用訓練數據來源之外的權威知識庫。大型語言模型(LLM)用海量數據進行訓練,使用數十億個參數為回答問題、翻譯語言和完成句子等任務生成原始輸出。在 LLM 本就強…

GAMES202-高質量實時渲染(homework1)

目錄 Homework1shadow MapPCF(Percentage Closer Filter)PCSS(Percentage Closer Soft Shadow) GitHub主頁&#xff1a;https://github.com/sdpyy1 作業實現:https://github.com/sdpyy1/CppLearn/tree/main/games202 Homework1 shadow Map 首先需要完成MVP矩陣的構造&#xf…

JDK(Ubuntu 18.04.6 LTS)安裝筆記

一、前言 本文與【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安裝筆記】同批次&#xff1a;先搭建數據庫&#xff0c;再安裝JDK&#xff0c;后面肯定就是部署Web應用&#xff1a;典型的單機部署。“麻雀雖小五臟俱全”&#xff0c;善始善終&#xff0c;還是記下來吧。…

軟件測試之接口測試常見面試題

一、什么是(軟件)接口測試? 接口測試&#xff1a;是測試系統組件間接口的一種測試方法 接口測試的重點&#xff1a;檢查數據的交換&#xff0c;數據傳遞的正確性&#xff0c;以及接口間的邏輯依賴關系 接口測試的意義&#xff1a;在較早期開展&#xff0c;在軟件開發的同時…

Lua 第11部分 小插曲:出現頻率最高的單詞

在本章中&#xff0c;我們要開發一個讀取并輸出一段文本中出現頻率最高的單詞的程序。像之前的小插曲一樣&#xff0c;本章的程序也十分簡單但是也使用了諸如迭代器和匿名函數這樣的高級特性。 該程序的主要數據結構是一個記錄文本中出現的每一個單詞及其出現次數之間關系的表。…

軟件項目進度管理活動詳解

目錄 1. 活動定義&#xff08;Activity Definition&#xff09; 2. 活動排序&#xff08;Activity Sequencing&#xff09; 3. 活動資源估算&#xff08;Activity Resource Estimating&#xff09; 4. 活動歷時估算&#xff08;Activity Duration Estimating&#xff09; …

docker 國內源和常用命令

Ubuntu | Docker Docs 參考docker官方安裝docker # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt…

身份與訪問管理(IAM):零信任架構下的認證授權技術與實戰

身份與訪問管理&#xff08;IAM&#xff09;&#xff1a;零信任架構下的認證授權技術與實戰 在網絡安全防御體系中&#xff0c;身份與訪問管理&#xff08;Identity and Access Management, IAM&#xff09;是守護數字資產的“數字門禁系統”。隨著遠程辦公和多云架構的普及&a…

Maven進階知識

一、Maven 坐標 &#xff08;一&#xff09;概念 在 Maven 中坐標是構件的唯一標識&#xff0c;其元素包括 groupId、artifactId、version、packaging、classifier。其中 groupId、artifactId、version 是必定義項&#xff0c;packaging 默認為 jar。 &#xff08;二&#x…

網絡原理 ——TCP 協議

TCP 報文結構 TCP 頭部 20字節&#xff08;無選項&#xff09;&#xff0c;關鍵字段&#xff1a; 字段長度&#xff08;bit&#xff09;說明源端口16發送方端口目的端口16接收方端口序列號&#xff08;seq&#xff09;32數據字節的編號確認號&#xff08;ack&#xff09;32期…

C#使用sftp遠程拷貝文件

需要下載 的包&#xff1a;Core.Renci.SshNet 下載依賴包的時候需要注意版本&#xff0c;高版本的.net環境不支持會用不了&#xff0c;我用的.net5,所以下載的2021.10.2 功能的核心式創建一個SftpClient&#xff0c;并傳入所需要的參數&#xff1a;遠程IP地址&#xff0c;端口…

文本預處理(NLTK)

1. 自然語言處理基礎概念 1.1 什么是自然語言處理 自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智能領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學于…

socket編程基礎

上一篇 --- 網絡基礎概念&#xff08;下&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147320155?fromshareblogdetail&sharetypeblogdetail&sharerId147320155&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 理…