后端知識(理解背誦)

文章目錄

  • 🍺 來源
  • 🍺 C++
    • 🍻 new 和 malloc 的區別?+2
    • 🍻 delete 和 delete[] 的區別?+0
    • 🍻 內存泄漏是什么?如何避免?+1
  • 🍺 計算機網絡
    • 🍻 URL 輸入后發生了什么?+1
    • 🍻 TLS 握手的過程?+1
    • 🍻 三次握手為什么不能為兩次?+1
    • 🍻 四次揮手為什么不能為三次?+1
    • 🍻 TCP 和 UCP 的區別?應用場景?+1
    • 🍻 HTTP 1.0、1.1 和 2.0 的區別?
  • 🍺 操作系統
    • 🍻 進程、線程和協程的區別?+1
    • 🍻 線程間的通信方式有哪些?+2
    • 🍻 如何查看磁盤空間?+1
    • 🍻 如何通過端口號查找進程?+1
    • 🍻 缺頁中斷是什么?+0
  • 🍺 MySQL
    • 🍻 InnoDB 和 MylSAM 的區別?+1
    • 🍻 索引的注意事項?+1
  • 🍺 算法
    • 🍻 實現線程池?+0

🍺 來源

[蘇小妍]、[快手]、

🍺 C++

🍻 new 和 malloc 的區別?+2

🔸 new 是 C++ 的關鍵字,需要編譯器支持;而 malloc 是庫函數,需要頭文件支持。
🔸 new 申請動態內存時不需要指定大小,編譯器會自動計算;而 malloc 申請動態內存時,需要手動計算大小。
🔸 new 分配內存成功時,會返回一個指向對象的指針;而 malloc 會返回一個 void* 類型的指針,需要強制類型轉換為其他類型。
🔸 new 分配內存失敗時,會拋出異常;而 malloc 則會返回 NULL。
🔸 new 分配內存時,會調用 operator new 申請足夠多的內存,然后調用對象的構造函數初始化成員變量;而 malloc 只能申請動態,無法進行對象的構造工作。

🍻 delete 和 delete[] 的區別?+0

🍻 內存泄漏是什么?如何避免?+1

🔸 內存泄漏通常是指堆中內存的泄漏,當使用 new,malloc 分配堆中內存時,使用完畢后未使用 delete,free 進行釋放,導致這塊內存就無法被再次使用。

🔸 采用記數法,當使用 new 或 malloc 時,讓計數器加一,當是用 delete 或 free 時,讓計數器減一,程序執行完畢后檢查計數器,如果不為 0 則存在內存泄漏。
🔸 析構函數需要聲明為虛函數,防止父類指針指向子類對象時,編輯器實施靜態綁定只會調用父類的析構函數,造成子類對象的析構不完全,導致內存泄漏。
🔸 使用智能指針,自動釋放動態內存,避免內存忘記釋放而導致的內存泄漏。

🍺 計算機網絡

🍻 URL 輸入后發生了什么?+1

🔸 首先瀏覽器會對 URL 進行解析,生成發送給服務器的請求報文。
🔸 查詢服務器域名對應的 IP 地址,瀏覽器會先查詢本地緩存,本地緩存沒有的話,就從通過 DNS 服務器進行查詢。
🔸 查詢到服務器的 IP 地址后,向服務器請求連接,進行 TCP 的三次握手,連接后始終保持通信。
🔸 期間瀏覽器可以向服務器發送 GET,POST 等請求,比如獲取、修改數據庫中的信息等。
🔸 服務器會對瀏覽器的請求進行處理,并生成響應報文發送給瀏覽器。
🔸 瀏覽器獲取響應報文,并進行內容的解析,渲染網頁呈現在屏幕上。

🍻 TLS 握手的過程?+1

🔸 TLS 采用混合加密機制,首先采用非對稱密鑰來加密用于傳輸的對稱密鑰,確保對稱密鑰傳輸的安全性。之后使用對稱密鑰來加密傳輸的數據,確保數據通信的效率。

🔸 首先客戶端會生成一個隨機數,給出協議版本號和自己支持的加密算法。
🔸 服務端確認好雙方的加密算法后,會生成一個隨機數,給出自己的數字證書。
🔸 客戶端確認數字證書有效后,會生成一個新的隨機數,并使用數字證書中的公鑰加密這個新隨機數。
🔸 服務端通過自己的私鑰,對客戶端發送來的新隨機數進行解密。
🔸 最后客戶端和服務端使用之前所生成的三個隨機數,生成對話密鑰,用來加密之后的整個對話過程。

🍻 三次握手為什么不能為兩次?+1

🔸 第一次握手主要是為了說明客戶端有發送的能力,服務端有接收的能力。第二,三次握手主要是為了說明服務端和客戶端具有發送和接收的能力。因此需要三次握手才能確保客戶端和服務端的發送接收能力都是正常的。
🔸 兩次握手還會出現歷史連接的問題。當客戶端發送的 SYN 被網絡阻塞,同時客戶端宕機時,客戶端重啟后會重新發送一個新的 SYN。由于服務端并不知道先前的 SYN 是歷史連接,會進行無效的數據傳輸,造成資源浪費。

🍻 四次揮手為什么不能為三次?+1

🔸 當服務器收到客戶端發送的 FIN 報文時,會先發送一個 ACK 表示自己已經收到信息。
🔸 但此時服務端可能還有數據沒有處理完,所以并不會馬上關閉連接。只有當服務端的數據全部處理完畢后,才發送 FIN 報文,因此這兩個報文通常不會合并發送。

🍻 TCP 和 UCP 的區別?應用場景?+1

🔸 TCP 是面向連接的協議,傳輸前需要先建立連接;而 UDP 可以不建立連接直接傳輸。
🔸 TCP 具有可靠性,數據可以無差錯,有序,完整的傳輸;而 UDP 是盡最大可能的交付,不具備可靠性。
🔸 TCP 是一對一的點到點服務;而 UDP 支持一對一,一對多,多對一的服務。
🔸 TCP 有流量控制,擁塞控制,可以調節發送方的發送速率;而 UDP 沒有。
🔸 TCP 首部長,開銷較大,至少 20 字節;而 UDP 首部較小,只有固定 8 字節。
🔸 TCP 是基于字節流的傳輸,無邊界但是有序;而 UDP 是基于包的傳輸,有邊界但是無序。

🔸 TCP 是面向連接且可靠的,因此主要用于文件傳輸這種對數據完整性要求高的場景;而 UDP 是無連接不可靠但數據傳輸比較快的,可以用于音視頻通話這種對實時性要求比較高的場景。

🍻 HTTP 1.0、1.1 和 2.0 的區別?

🔸 HTTP 1.0 是一種無狀態協議,瀏覽器每次請求都需要與服務器建立一個 TCP 連接,處理完請求之后立即斷開連接,不記錄過去的狀態。
🔸 HTTP 1.1 支持長連接,在一個 TCP 連接期間可以同時處理多個 HTTP 請求和響應,減少了網絡延遲。
🔸 HTTP 2 增加了二進制分幀,多路復用和請求優先級等功能,網絡的傳輸效率得到很大的提高。

🍺 操作系統

🍻 進程、線程和協程的區別?+1

🔸 進程是資源分配的基本單位;線程是 CPU 調度的基本單位;協程是輕量級線程,是線程內部調度的基本單位。
🔸 進程擁有 CPU 資源,內存資源,文件資源等;而線程和協程只擁有自己的寄存器,棧等資源。
🔸 進程和線程的切換內容都保存在用戶態,切換時會涉及到用戶態到內核態的切換,但是因為線程需要的切換內容比較少,所以效率會更高些;協程的切換內容保存在用戶態中,不涉及用戶態到內核態的切換,因此切換效率更高。
🔸 進程和線程的切換者是操作系統,切換時機由系統決定;而協程的切換者是用戶,切換時機由用戶來決定。

🍻 線程間的通信方式有哪些?+2

🔸 線程之間資源共享,所以線程間通信的主要目的是為了線程同步。

🔸 互斥鎖:它是為了在任意時間內,僅有一個線程可以訪問共享資源。比如當線程 A 加鎖成功時,那么線程 B 再加鎖就會失敗并進入阻塞睡眠狀態,并會釋放 CPU 讓給其他線程。等待鎖被釋放后,內核會喚醒線程 B 去加鎖繼續執行業務。
🔸 自旋鎖:它也是為了在任意時間內,僅有一個線程可以訪問共享資源。但是當線程獲取自旋鎖失敗時,不會立即釋放CPU,而是一直循環嘗試獲取鎖,直到獲取鎖成功。因此自旋鎖一般用于加鎖時間很短的場景,減少了線程上下文切換的開銷。
🔸 讀寫鎖:它由讀鎖和寫鎖兩部分構成,如果只讀取共享資源用讀鎖加鎖,如果需要修改共享資源則需要用寫鎖加鎖,可以同時有多個線程進行讀,但是最多只能有一個線程進行寫。它主要用于可以明確區分讀操作和寫操作的場景,在讀多寫少的場景下可以發揮出優勢。
🔸 條件變量:條件變量是一種同步機制,可能使線程進入阻塞狀態,并在滿足某個條件時解除阻塞繼續執行業務。
🔸 信號量:它是一個整形的計數器,主要用于實現進程間的互斥和同步。信號量的值代表可用資源的數量,控制信號量的方式有 P 操作和 V 操作,分別發生在進入共享資源,離開共享資源時。
🔸 信號:它是線程間的一種異步通信機制,可以在任何時候發送信號給某一線程。信號的來源有硬件來源(ctrl+c 終止進程)和軟件來源(kill 命令)等。

🍻 如何查看磁盤空間?+1

🔸 可以用 df 和 du 命令查看磁盤空間。

🔸 df 以磁盤分區為單位查看文件系統,可以獲取硬盤被占用了多少空間,還剩下多少空間。
🔸 du 用于查看當前目錄下磁盤空間的使用情況。

🍻 如何通過端口號查找進程?+1

🔸 可以通過 ps 和 netstat 查找到進程。

🔸 ps -ef | grep $pid
🔸 netstat -ntp | grep $pid

🍻 缺頁中斷是什么?+0

🍺 MySQL

🍻 InnoDB 和 MylSAM 的區別?+1

🔸 InnoDB 支持事務,具有 ACID 屬性;而 MyISAM 不支持事務,適用于讀多寫少的場景。
🔸 InnoDB 支持行級鎖,僅鎖定實際需要的數據;而 MyISAM 只支持表級鎖,需要對整張表鎖定。
🔸 InnoDB 支持外鍵,建立表與表之間的聯系,保障了數據的完整性;而 MyISAM 不支持外鍵。
🔸 InnoDB 在崩潰后可以自動恢復;MyISAM 崩潰后需要手動恢復,比較麻煩。
🔸 InnoDB 支持熱備份,即在數據庫運行的時候進行備份;MyISAM 只支持冷備份。

🍻 索引的注意事項?+1

🔸 不要在列上使用函數,運算符,否定操作符,這將會導致索引失效而進行全局掃描。
🔸 進行單列的索引合不能有效提高數據的查詢效率,應該使用多列的組合索引。
🔸 使用組合索引應該遵循最左前綴原則,即查詢中使用了組合索引的第一個字段,索引才會被使用。
🔸 如果索引中存在所查詢字段的值,此時會使用覆蓋索引,根據索引的查詢結果直接返回數據,而不需要回表二次查詢。
🔸 對于某一列如果有 NULL 值存在,則不會去使用索引。對于組合索引,只要某列出現 NULL 值,該列對于組合索引就是無效的。
🔸 當查詢條件左右兩端的數據類型不匹配時,會進行隱式類型轉換,可能會導致索引失效而全表掃描。
🔸 當使用 like 進行模糊查詢時,查詢只有右邊有 % 的數據時支持索引,如果左右兩邊都有 % 會導致索引失效進行全表掃描。

🍺 算法

🍻 實現線程池?+0

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

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

相關文章

【Day62】代碼隨想錄之單調棧_739. 每日溫度_496.下一個更大元素 I

文章目錄 1. 739. 每日溫度2. 496.下一個更大元素 I 1. 739. 每日溫度 參考文檔:代碼隨想錄 分析: 找下一個更高溫度出現在幾天后,即當前位置右側出現的一個比它更大的值,如果是暴力搜索,兩層for,時間復雜度…

基于JAVA的畢業設計分配選題系統 開源項目

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 專業檔案模塊2.2 學生選題模塊2.3 教師放題模塊2.4 選題審核模塊 三、系統展示四、核心代碼4.1 查詢專業4.2 新增專業4.3 選擇課題4.4 取消選擇課題4.5 審核課題 五、免責說明 一、摘要 1.1 項目介紹 基于JAVAVueSpri…

vmware虛擬機centos中/dev/cl_server8/root 空間不夠

在使用vmware時發現自己的虛擬機的/dev/cl_server8/root空間不夠了,沒辦法安裝新的服務。所以查了一下改空間的辦法。 1.在虛擬機關閉的狀態下,選中需要擴容的虛擬機->設置->硬件-> 硬盤->擴展->填寫擴大到的值。 2.打開虛擬機&#xff…

jxls——自定義命令設置動態行高

文章目錄 前言依賴引入繪制 jxls 批注的 excel 模板測試類編寫自定義命令關于自動換行 前言 之前的博客中都簡單說了數據的渲染和導出excel文件。包括固定的 表頭結構,以及動態 表頭和表數據等方式。 本篇博客主要說明自定義命令的方式,控制輸出excel文…

Unity AssetBundle詳解,加載本地包、加載網絡包代碼全分享

在Unity中,AssetBundle(簡稱AB包)是一種將多個文件或資源打包到一個文件中的方式,用于優化資源的加載和管理。使用AB包,可以按需加載資源,減少應用的初始加載時間,并可以實現熱更新等功能。下面是一個基本的流程,展示如何在Unity中加載AB包并顯示其中的資源。 步驟1:…

springboot 實現本地文件存儲

springboot 實現本地文件存儲 實現過程 上傳文件保存文件(本地磁盤)返回文件HTTP訪問服務器路徑給前端,進行效果展示 存儲 服務端接收上傳的目的是提供文件的訪問服務,對于SpringBoot而言,其對靜態資源訪問提供了很…

H3C防火墻安全授權導入

一、防火墻授權概述 前面我們已經了解了一些防火墻的基本概念,有講過防火墻除了一些基本功能,還有一些高級安全防護,但是這些功能需要另外獨立授權,不影響基本使用。這里以H3C防火墻為例進行大概了解下。 正常情況下,防…

深度學習_15_過擬合欠擬合

過擬合和欠擬合 過擬合和欠擬合是訓練模型中常會發生的事,如所要識別手勢過于復雜,如五角星手勢,那就需要更改高級更復雜的模型去訓練,若用比較簡單模型去訓練,就會導致模型未能抓住手勢的全部特征,那簡單…

[云原生] K8s之pod進階

一、pod的狀態說明 (1)Pod 一直處于Pending狀態 Pending狀態意味著Pod的YAML文件已經提交給Kubernetes,API對象已經被創建并保存在Etcd當中。但是,這個Pod里有些容器因為某種原因而不能被順利創建。比如,調度不成功(…

原神搶碼,米游社搶碼-首發

本文章僅供學習使用-侵權請聯系刪除_2023年3月14日08:17:06 本來在深淵12層打不過的我偶然在刷到了一個dy的直播間,看到主播在搶碼上號幫忙打深淵還號稱痛苦號打不滿不送原石的旗號我就決定掃碼試試,在直播間內使用了兩部手機互相掃碼在掃了一下午的碼后…

自動駕駛技術詳解

🎬個人簡介:一個全棧工程師的升級之路! 📋個人專欄:自動駕駛技術 🎀CSDN主頁 發狂的小花 🌄人生秘訣:學習的本質就是極致重復! 目錄 一 自動駕駛視覺感知算法 1目標檢測 1.1 兩階…

代碼隨想錄算法訓練營第四五天 | dp[j] = min(dp[j], dp[j - coins[i]] + 1)

目錄 爬樓梯 (進階)零錢兌換完全平方數總結 LeetCode 70. 爬樓梯 (進階) LeetCode 322. 零錢兌換 LeetCode 279.完全平方數 爬樓梯 (進階) 好做 import java.util.*;public class Main{// dp[i] 爬到有…

css背景圖片屬性

基礎代碼&#xff1a; div {width: 200px;height: 200px;background: url(./css-logo.png); }<div></div> 1、background-repeat&#xff1a;默認是repeat 設置背景圖片在容器內是否平鋪。 background-repeat: repeat-y; background-repeat: repeat-x; background…

消息中間件之RocketMQ源碼分析(二十四)

事務消息 事務消息機制。 事務消息的發送和處理總結為四個過程: 1.生產者發送事務消息和執行本地事務 2.Broker存儲事務消息 3.Broker回查事務消息 4.Broker提交或回滾事務消息 生產者發送事務消息和執行本地事務。 發送過程分為兩個階段: 第一階段,發送事務消息 第二階段,發…

Spring Expression Language (SpEL)

Spring 表達語言&#xff08;SpEL&#xff09;&#xff0c;支持在運行時查詢和操作對象圖&#xff0c;可以用于數據綁定、屬性訪問、方法調用等。使用SpEL可以簡化代碼并提高應用程序的可維護性。 1 概覽 SpelExpressionParser是SpEL的一個核心組件&#xff0c;負責解析和編譯…

CentOS安裝編譯Python3.11.6

CentOs自帶python2版本太低&#xff0c;項目需要python3&#xff0c;于是自己安裝python 操作指南&#xff1a; 重新下載源代碼&#xff1a; # 刪除舊的 Python 源代碼文件&#xff08;如果有&#xff09; rm -rf Python-3.11.6.tar.xz # 下載 Python 3.11.6 的源代碼文件 wget…

Java泛型簡介

Java泛型簡介 Java泛型是在Java 5中引入的一個特性&#xff0c;它允許程序員在編譯時指定類、接口或方法能夠接受的類型。泛型的主要目的是提供編譯時類型安全檢查&#xff0c;避免在運行時因為類型轉換錯誤而導致的ClassCastException。 在沒有泛型之前&#xff0c;Java中的集…

如何利用動態靜態代理IP實現跨地域網絡營銷與市場研究

動態代理IP和靜態代理IP都可以在跨地域網絡營銷與市場研究中發揮關鍵作用&#xff0c;具體實現方式如下&#xff1a; ### 動態代理IP的應用&#xff1a; 1. 跨地域營銷活動測試&#xff1a; - 在進行網絡營銷時&#xff0c;尤其是要驗證廣告投放、SEO效果或A/B測試不同地區用戶…

Ubuntu系統使用Docker搭建Jupyter Notebook并實現無公網ip遠程連接

文章目錄 1. 選擇與拉取鏡像2. 創建容器3. 訪問Jupyter工作臺4. 遠程訪問Jupyter工作臺4.1 內網穿透工具安裝4.2 創建遠程連接公網地址4.3 使用固定二級子域名地址遠程訪問 本文主要介紹如何在Ubuntu系統中使用Docker本地部署Jupyter Notebook&#xff0c;并結合cpolar內網穿透…

C語言系列(所需基礎:大學C語言及格)-4-轉義字符/注釋/選擇語句

文章目錄 一、轉義字符二、注釋三、選擇語句 一、轉義字符 加上\會講原來的字符改變意思&#xff0c;即進行轉義 例如\t會使t變成\t用于表示轉義字符&#xff0c;使得t轉義成水平制表符 其他轉義字符&#xff1a; 三字母詞&#xff08;展示\&#xff1f;的用處&#xff09;…