Linux學習筆記(五)--Linux基礎開發工具使用

在Linux中軟件包通常是指一個包含了軟件程序、元數據、依賴關系信息和安裝腳本的壓縮文件??。

因為在Linux上如果沒有軟件包管理器,那么想要下載軟件會非常麻煩,不僅需要自己去手動編譯和安裝,而且難以卸載和管理,所以軟件包的出現解決了這些問題.軟件包一般是由程序文件(編譯好的可執行文件、庫文件等。)和配置文件(軟件默認的配置。)元數據(包含軟件名稱、描述、版本、維護者等信息。) 依賴列表(列出該軟件正常運行所必須的其他軟件包。)以及??安裝前/后腳本?(在安裝或卸載前后自動運行的腳本,用于完成一些特定任務(如創建用戶、啟動服務等)。)?

apt/dpkt--(Ubuntu中的軟件包管理器)

dpkt:是底層的包管理工具,負責實際??安裝、查詢、驗證??單個?.rpm文件。但它??無法自動解決依賴關系??。

apt??:是??高層??的包管理工具,它基于?rpm,它的核心功能是??自動解決依賴關系??和??從網絡倉庫獲取軟件包??。yum 最終還是會調用?rpm命令來完成具體的安裝和卸載操作。

apt常用命令:

功能

??Ubuntu / Debian (APT)??

說明

??安裝軟件??

??sudo apt install <包名>??

安裝指定軟件包

??更新軟件列表??

??sudo apt update??

從軟件源服務器獲取最新的軟件包列表??(??apt??必須先執行此命令)??

??更新所有軟件??

??sudo apt upgrade??

更新所有已安裝的軟件包(??注意命令不同??)

??卸載軟件??

??sudo apt remove <包名>??

卸載軟件包,??保留配置文件??

??徹底卸載??

??sudo apt purge <包名>??

卸載軟件包,??同時刪除配置文件??

??搜索軟件??

??apt search <關鍵詞>??

在倉庫中搜索軟件包

??列出已安裝??

??apt list --installed??

列出所有已安裝的包

??獲取包信息??

??apt show <包名>??

顯示軟件包的詳細信息

??清理緩存??

??sudo apt clean?? 或 ??sudo apt autoclean??

清理下載的軟件包緩存

關于rzsz工具:

rz和?sz是 Linux 系統中用于??通過終端(命令行)進行文件上傳和下載??的兩個實用工具,通常用于 ??ZMODEM 協議?? 的文件傳輸。它們特別適合在 ??SSH 終端??(如 Xshell、SecureCRT、PuTTY 等)中使用,方便用戶在不依賴 FTP/SFTP 的情況下快速傳輸文件。

作用:

命令

功能

適用場景

??rz??

??Receive ZMODEM??(接收文件)

從本地計算機上傳文件到遠程 Linux 服務器

??sz??

??Send ZMODEM??(發送文件)

從遠程 Linux 服務器下載文件到本地計算機

使用rzsz:

(1)上傳文件到Linux(rz)

在遠程終端執行rz命令,跳轉出一個選擇文件的頁面,點擊你所需要上傳的文件

(2)從Linux下載文件:

在遠程終端執行:

sz <文件名>

你的終端會自動彈出文件保存對話框,選擇保存位置即可下載。

Linux開發工具:

Linux編輯器--vim:

vim是 Linux/Unix 系統中最強大的??文本編輯器??之一

vim的基本模式:vim有三種主要模式,分別是命令模式(command mode)、插 入模式(Insert mode)和底行模式(last line mode),各模式的功能區分如下:

模式

進入方式

功能

??普通模式(Normal Mode)??

啟動?vim或按?Esc

執行??命令??(如復制、粘貼、刪除、保存等)

??插入模式(Insert Mode)??

按?i,?a,?o

??輸入/編輯文本??(類似普通編輯器)

??命令行模式(Command Mode)??

在普通模式下按?:

執行??保存、退出、搜索、替換??等操作

基本操作:

(1)打開文件

vim 文件名       # 打開文件(如果不存在則新建)
vim +10 文件名   # 打開文件并跳轉到第 10 行
vim -O2 文件1 文件2  # 左右分屏打開兩個文件

(2)保存和退出

命令

功能

:w

保存文件

:q

退出 vim

:wq或?:x

保存并退出

:q!

??強制退出(不保存)??

:w 新文件名

另存為新文件

(3)光標移動

按鍵

功能

hjkl

左、下、上、右移動

Ctrl + f/?Ctrl + b

向下/向上翻頁

gg

跳轉到文件??第一行??

G

跳轉到文件??最后一行??

10G或?:10

跳轉到第 10 行

$

跳轉到??行尾??

^或?0

跳轉到??行首?

(4)編輯文本

按鍵

功能

i

在??光標前??進入插入模式

a

在??光標后??進入插入模式

o

在??下一行??插入新行并進入插入模式

dd

??刪除當前行??

yy

??復制當前行??

p

??粘貼??

u

??撤銷(Undo)??

Ctrl + r

??重做(Redo)?

(5)搜索和替換

命令

功能

/關鍵詞

??向下搜索??(按?n跳轉到下一個匹配)

?關鍵詞

??向上搜索??

:%s/舊內容/新內容/g

??全局替換??(所有匹配)

:10,20s/舊內容/新內容/g

??替換第 10-20 行的內容?

(6)分屏操作

命令

功能

:sp 文件名

??水平分屏??

:vsp 文件名

??垂直分屏??

Ctrl + w + 方向鍵

切換分屏

Ctrl + w + c

關閉當前分屏

(7)末行模式命令集

vim的 ??末行模式(Command-Line Mode)?? 是在 ??普通模式(Normal Mode)?? 下輸入?:進入的,用于執行文件操作、搜索替換、設置選項等高級命令。

命令功能作用
set nu輸入「set nu」后,會在文件中的每一行前面列出行號。列出行號
#「#」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15, 再回車,就會跳到文章的第15行。跳到文件中的某一行
/關鍵字先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按 「n」會往后尋找到您要的關鍵字為止。查找字符
?關鍵字先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直 按「n」會往前尋找到您要的關鍵字為止。查找字符
w在冒號輸入字母「w」就可以將文件保存起來保存文件
q按「q」就是退出,如果無法離開vim,可以在「q」后跟一個「!」強制離開vim。離開vim
wq一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以保存文件離開vim

Linux編輯器:gcc/g++使用(用來編譯C語言和C++程序)

(1)安裝gcc/g++(Ubuntu)

sudo apt update
sudo apt install gcc g++   # 安裝 gcc 和 g++

(2)驗證安裝是否成功

gcc --version
g++ --version

(3)背景知識

在C/C++中要想將代碼轉換成可執行文件需要經過預處理,編譯,匯編和鏈接四個步驟.

預處理階段:

作用:處理源代碼中的 ??預處理指令??(以?#開頭的指令),比如?#include#define#ifdef等。

輸入??:.c或?.cpp文件

輸出??:.i文件(預處理后的代碼)

主要操作:

??宏替換??(#define定義的宏會被展開)

??頭文件包含??(#include的文件內容會被插入)

??條件編譯??(#ifdef#ifndef等決定哪些代碼會被編譯)

??刪除注釋??(所有注釋?//和?/* */會被移除)

使用命令(示例):

gcc -E main.c -o main.i//-E表示只進行預處理

編譯階段:

作用??:將預處理后的代碼 ??轉換成匯編代碼。

??輸入??:.i文件(或直接?.c文件)

??輸出??:.s文件(匯編代碼)

主要操作:

詞法分析??

??語法分析??

??語義分析??

??優化??

??生成匯編代碼?

使用命令(示例):

gcc -S main.i -o main.s//-S表示只編譯

匯編階段:

作用??:將匯編代碼 ??轉換成機器碼(二進制目標文件)??。

??輸入??:.s文件

??輸出??:.o文件(目標文件,Windows 上是?.obj

主要操作:

將匯編指令 ??逐條翻譯?? 成機器碼(0和?1

生成 ??可重定位目標文件

使用命令(示例)

gcc -c main.s -o main.o//-c表示只匯編

鏈接階段:

作用??:將多個目標文件(.o)和庫文件(.a或?.so) ??合并成一個可執行文件??。

??輸入??:.o文件 + 庫文件

??輸出??:可執行文件(如?a.out或?.exe

主要操作:

符號解析??:找到所有函數和變量的定義

??重定位??:調整代碼和數據的內存地址

??合并庫??(如?libc.solibstdc++.so

使用命令(示例)

gcc main.o -o myprogram//-o表示只鏈接

完整編譯流程:(gcc會自動完成所有步驟)

gcc main.c -o myprogram

(4)函數庫

函數庫是一組預編譯的函數、類或變量的集合,可以被其他程序調用。函數庫通常分為 ??靜態庫?? 和 ??動態庫?? 兩種形式。

特性

靜態庫(.a

動態庫(.so

??文件后綴??

.a(Unix/Linux)

.so(Unix/Linux),?.dll(Windows)

??編譯時行為??

庫代碼??直接嵌入??到可執行文件中

庫代碼??不嵌入??,僅記錄依賴信息

??運行時行為??

無需外部庫文件

需動態庫文件存在于系統路徑

??磁盤空間??

可執行文件較大(重復庫代碼)

可執行文件較小(共享庫代碼)

??內存占用??

每個進程獨立加載庫代碼

多個進程共享同一份庫代碼

??更新庫版本??

需重新編譯可執行文件

替換?.so文件即可生效

??加載速度??

較快(無運行時加載開銷)

稍慢(需運行時加載)

??依賴管理??

無外部依賴

需確保動態庫存在于系統路徑

創建靜態庫:

假設有兩個源文件:

add.c:實現加法函數

sub.c:實現減法函數

編譯為.o文件

gcc -c add.c -o add.o    # 生成 add.o
gcc -c sub.c -o sub.o    # 生成 sub.o

打包為靜態庫.a

ar rcs libmath.a add.o sub.o

ar:歸檔工具(Unix 靜態庫打包命令)。

rcs:選項組合(r替換舊文件,c創建庫,s生成索引)。

使用靜態庫:

gcc main.c -L. -lmath -o main

-L.:指定庫搜索路徑(.表示當前目錄)。

-lmath:鏈接名為?libmath.a的庫(省略?lib前綴和?.a后綴)。

gcc/g++常用編譯選項:

基礎編譯選項:

選項

作用

示例

-o <file>

指定輸出文件名

gcc hello.c -o hello

-c

只編譯不鏈接,生成?.o目標文件

gcc -c hello.c

-E

只運行預處理器(生成預處理后的代碼)

gcc -E hello.c > hello.i

-S

只編譯到匯編代碼(生成?.s文件)

gcc -S hello.c

-v

顯示詳細的編譯過程(調試用)

gcc -v hello.c

警告選項:

選項

作用

示例

-Wall

開啟所有常見警告

gcc -Wall hello.c

-Wextra

啟用額外警告(比?-Wall更嚴格)

gcc -Wextra hello.c

-Werror

將警告視為錯誤(強制修復)

gcc -Werror hello.c

-Wno-<warning>

禁用特定警告

gcc -Wno-unused-variable hello.c

調試選項:

選項

作用

示例

-g

生成調試信息(用于 GDB)

gcc -g hello.c -o hello

-ggdb

生成更詳細的 GDB 調試信息

gcc -ggdb hello.c

-p/?-pg

生成性能分析(gprof 用)

gcc -pg hello.c

優化選項:

選項

優化級別

說明

-O0

無優化

編譯速度快,適合調試

-O1

基礎優化

平衡代碼大小和執行速度

-O2

中等優化

推薦大多數場景使用

-O3

激進優化

可能增加代碼體積

-Os

優化代碼大小

嵌入式系統常用

-Ofast

激進優化(忽略嚴格標準)

可能影響精度

Linux調試器--gdb的使用:

(1)安裝gdb(Ubuntu)

sudo apt install gdb

(2)啟動gdb

gdb ./hello   # 調試可執行文件

(3)gdb基本命令

命令

功能描述

list/l [行號]

顯示源代碼。從指定行號(或上次位置)開始,每次列出10行。

list/l [函數名]

列出指定函數的源代碼。

run/r

開始運行程序。

next/n

單步執行(??不??進入函數體)。

step/s

單步執行(??會??進入函數體)。

break/b [行號]

在指定行設置斷點。

break/b [函數名]

在指定函數的開頭設置斷點。

info break

查看所有已設置的斷點信息(包括編號、位置等)。

finish

持續執行直至??當前函數返回??,然后暫停。

print/p [表達式]

打印表達式的值。表達式可為變量、或可調用函數。

p [變量]

打印變量的值。

set var [變量]=[值]

修改變量的值。

continue/c

從當前位置開始??連續??執行程序(而非單步),直到下一個斷點或結束。

run/r

??從頭開始??連續執行程序。

delete breakpoints

??刪除所有??斷點。

delete breakpoints [n]

刪除??指定序號 n?? 的斷點。

disable breakpoints

??禁用??所有斷點(斷點仍存在,但不會暫停)。

enable breakpoints

??啟用??所有斷點。

info/i breakpoints

查看當前設置的所有斷點信息。

display [變量名]

??持續跟蹤??查看一個變量,每次程序暫停時都會顯示其值。

undisplay

??取消??之前通過?display設置的變量跟蹤。

until [X行號]

持續運行直至??指定行 X??(用于跳出循環等場景)。

backtrace/bt

查看函數的??調用棧??(層層調用的關系)及參數。

info/i locals

查看??當前函數棧幀??內所有局部變量的值。

quit

退出 GDB 調試器。

Linux項目自動化構建工具--make/Makefile

make是Linux/Unix系統中一個強大的自動化構建工具,它通過讀取Makefile文件來自動化編譯和構建過程。make工具的主要功能包括:自動確定需要重新編譯的文件,根據依賴關系按正確順序編譯,只重新編譯修改過的文件及其依賴項.make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構建.

Makefile基礎語法:

target: prerequisitesrecipe

??target??:通常是生成的文件名,也可以是一個操作名稱(偽目標)

??prerequisites??:生成target所需的文件或目標

??recipe??:生成target需要執行的命令(必須以tab開頭)

示例:

#include <stdio.h>int main(){printf("hello Makefile!\n");return 0;}

makefile文件:

hello: hello.cgcc -o hello hello.cclean:rm -f hello

那么make的工作原理是怎樣的?

接下來為大家解釋一下:

make會在當前目錄下找名字叫“Makefile”或“makefile”的文件。如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“hello”這個文件, 并把這個文件作為最終的目標文件。如果hello文件不存在,或是hello所依賴的后面的hello.o文件的文件修改時間要比hello這個文件新(可 以用touch測試),那么,他就會執行后面所定義的命令來生成hello這個文件。如果hello所依賴的hello.o文件不存在,那么make會在當前文件中找目標為hello.o文件的依賴性,如果 找到則再根據那一個規則生成hello.o文件(這有點像一個堆棧的過程)。當然,你的C文件和H文件是存在的啦,于是make會生成 hello.o 文件,然后再用 hello.o 文件聲明 make的終極任務,也就是執行文件hello了。這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯, 而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。

流程圖如下:

行緩沖區概念:

行緩沖區的三種類型:

行緩沖:遇到換行符\n時刷新緩沖區,或緩沖區填滿時刷新(典型應用:終端標準輸出)

核心特點:

#include <stdio.h>
int main() {printf("This will be buffered");  // 行緩沖,未遇到\n不立即顯示printf(" until newline\n");       // 遇到\n,刷新緩沖區return 0;
}

行緩沖觸發的三種情況:

(1)遇到換行符\n

(2)緩沖區已滿(通常1024或4096字節)

(3)主動調用fflush(stdout)

例:

#include <stdio.h>int main(){printf("hello Makefile!");fflush(stdout);sleep(3);return 0;}

如果不調用fflush(),由于沒有\n,進度條可能不會實時顯示

編寫自己的第一個Linux小程序--進度條:

(1)先在這里設定好的目錄下建立一個cpp文件

vim progressbar.cpp

(2)編譯進度條代碼

(3)編譯文件

g++ -o progress progress.cpp

(4)運行文件

./progress

完成截圖

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

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

相關文章

數據結構(陳越,何欽銘) 第十講 排序(下)

10.1 快速排序 10.1.1 算法概述10.1.2 選主元10.1.3 子集劃分10.1.4 算法實現10.2 表排序 10.2.1 算法概述10.2.2 物理排序10.3 基數排序 10.3.1 桶排序10.3.2 基數排序10.3.3 多關鍵字的排序10.4 排序算法的比較

vue 使用print.js 打印文本,HTML元素,圖片,PDF

vue 使用print.js 打印文本,HTML元素,圖片,PDF 安裝 npm install print-js --save示例 <template><div class"print-example"><h2>Print.js 打印示例</h2><!-- 打印區域 --><div id"printableArea" class"printable…

jenkins審批機器人功能概述-Telegram版

Jenkins審批機器人 - 功能概述 代碼鏈接&#xff0c;私聊可得 項目簡介 Jenkins審批機器人是一個集成Jenkins CI/CD流程的自動化審批系統&#xff0c;通過Telegram機器人提供便捷的發布審批功能。該系統支持多環境部署審批、用戶權限管理、構建結果通知等完整的DevOps審批流程。…

Rust : 關于解引用“*”

關于解引用*操作符&#xff0c;謹供參考&#xff01; 一、主要代碼 use std::ops::Deref; fn main() {model_1();model_2();model_3();model_4();model_5();model_6();model_7();model_8();model_9(); }二、*操作符與常見的引用和解引用 fn model_1(){let reference:&St…

【高級終端Termux】在安卓手機/平板上使用Termux 搭建 Debian 環境并運行 PC 級 Linux 應用教程(含安裝WPS,VS Code)

Termux 搭建 Debian 環境并運行 PC 級 Linux 應用教程 一、前言 1. 背景 眾所周知&#xff0c;最新搭載澎湃OS和鴻蒙OS的平板都內置了PC級WPS&#xff0c;辦公效率直接拉滿&#xff08;板子終于從“泡面蓋”升級為“生產力”了&#xff09;。但問題來了&#xff1a;如果不是這…

從循環到矩陣運算:矢量化加速機器學習的秘訣

矢量化實現全解析&#xff1a;從原理到實戰 在學習數據科學、機器學習和深度學習的過程中&#xff0c;我們經常會聽到一個高頻詞——矢量化&#xff08;Vectorization&#xff09;。很多庫的官方文檔、教程里也不斷強調“要盡量使用矢量化操作&#xff0c;而不是顯式循環”。那…

大數據畢業設計-大數據-基于大數據的熱門游戲推薦與可視化系統(高分計算機畢業設計選題·定制開發·真正大數據)

&#x1f34a;作者&#xff1a;計算機編程-吉哥 &#x1f34a;簡介&#xff1a;專業從事JavaWeb程序開發&#xff0c;微信小程序開發&#xff0c;定制化項目、 源碼、代碼講解、文檔撰寫、ppt制作。做自己喜歡的事&#xff0c;生活就是快樂的。 &#x1f34a;心愿&#xff1a;點…

從零到一:用 Qt + libmodbus 做一個**靠譜**的 Modbus RTU 小工具(實戰總結)

文章目錄從零到一&#xff1a;用 Qt libmodbus 做一個**靠譜**的 Modbus RTU 小工具&#xff08;實戰總結&#xff09;你會得到什么快速背景&#xff1a;為什么是 Modbus RTU&#xff1f;協議速查&#xff08;夠用不啰嗦&#xff09;工程結構與 UI 組織連接“三板斧”&#xf…

使用Python創建本地Http服務實現與外部系統數據對接

在Python 3.10中創建一個能夠處理GET和POST請求的本地HTTP服務器&#xff0c;并提供一個默認的 index.html 頁面是完全可行的。Python的標準庫中的 http.server 模塊雖然簡單&#xff0c;但通過一些自定義擴展可以滿足這個需求。 下面我將提供一個實現方案&#xff0c;它包含一…

了解篇 | StarRocks 是個什么數據庫?

今天簡要介紹一下StarRocks 這個強大的數據庫。注意&#xff1a;本文章內容僅供個人學習&#xff0c;不包含任何推薦性質。StarRocks&#xff08;原名 Doris&#xff09;是一個高性能、全場景的MPP&#xff08;大規模并行處理&#xff09;分析型數據庫。它專為極速的多維聯機分…

SSL部署完成,https顯示連接不安全如何處理?

在部署 SSL 后&#xff0c;如果瀏覽器仍然顯示 “連接不安全” 或 “Not Secure”&#xff0c;通常是由以下幾種原因導致的。針對每種可能的原因和問題&#xff0c;以下提供了詳細的排查和解決方案。 1. 排查問題的可能原因 1.1 SSL 證書未正確安裝 如果 SSL 證書安裝不完整或…

LeetCode熱題100--105. 從前序與中序遍歷序列構造二叉樹--中等

1. 題目 給定兩個整數數組 preorder 和 inorder &#xff0c;其中 preorder 是二叉樹的先序遍歷&#xff0c; inorder 是同一棵樹的中序遍歷&#xff0c;請構造二叉樹并返回其根節點。 示例 1: 輸入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 輸出: [3,9,20,null,n…

【WitSystem】詳解JWT在系統登錄過程中前端做了什么事,后端又做了什么事?

要理解 JWT&#xff08;JSON Web Token&#xff09;登錄流程中前端與后端的職責分工&#xff0c;需先明確 JWT 的核心定位&#xff1a;它是一種無狀態的身份認證令牌&#xff0c;用于替代傳統 Session 認證&#xff0c;解決跨服務、跨域登錄的問題。其流程本質是“后端生成令牌…

MongoDB 在線安裝-一鍵安裝腳本(CentOS 7.9)

1. 腳本概述本腳本用于在 CentOS 7.9 系統上在線安裝 MongoDB&#xff0c;自動處理端口占用和重復安裝問題&#xff0c;并創建管理員用戶 test8&#xff0c;密碼 test123。2. 功能停止并關閉防火墻檢查 27017 端口占用并結束進程如果已安裝 MongoDB&#xff0c;卸載重裝配置 Mo…

樹形數據結構之樹狀基礎-算法賽

今天給分享的是一道算法決賽的題目&#xff0c;這道題目的綜合要求比較高&#xff0c;希望大家可以好好理解&#xff0c;同時這道題用到的是樹狀樹形結構的有關知識。可以用這幾天學的相關內容結合起來。問題描述給定兩個長度為 N的排列 A 和 B。若一對二元組下標 (i,j) 滿足以…

Jenkins 構建清理策略:自帶功能 vs Discard Old Build 插件,全場景實操指南

前言&#xff1a;在 Jenkins 持續集成過程中&#xff0c;構建記錄、工作空間、產物包會不斷積累&#xff0c;既占用磁盤空間&#xff0c;也會讓構建歷史變得臃腫。Jenkins 自帶的“丟棄舊的構建”功能和 Discard Old Build 插件&#xff0c;是兩種常見的構建清理方案。本文將詳…

Leetcode | Hot100

文章目錄兩數之和字母異位詞分組最長連續序列移動零盛水最多的容器三數之和接雨水無重復字符的最長子串找到字符串中所有字母異位詞和為 K 的子數組滑動窗口最大值最小覆蓋子串最大子數組和合并區間輪轉數組除自身以外數組的乘積缺失的第一個正數矩陣置零螺旋矩陣旋轉圖像搜索二…

【論文閱讀】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022)

論文題目&#xff1a;Uncertainty Modeling for Out-of-Distribution Generalization 論文來源&#xff1a;ICLR 2022 論文作者&#xff1a; 論文鏈接&#xff1a;https://arxiv.org/pdf/2202.03958 論文源碼&#xff1a;https://github.com/lixiaotong97/DSU ? 一、摘要…

分布式系統單點登錄(SSO)狀態管理深度解析:從Cookie+Session到JWT的演進之路

分布式系統單點登錄(SSO)狀態管理深度解析&#xff1a;從CookieSession到JWT的演進之路作者&#xff1a;默語佬 | CSDN博主 在分布式微服務架構盛行的今天&#xff0c;單點登錄已成為企業級應用的標準配置。本文將深入探討SSO狀態管理的技術演進&#xff0c;從傳統的CookieSess…

從 WPF 到 Avalonia 的遷移系列實戰篇7:EventTrigger 的遷移

從 WPF 到 Avalonia 的遷移系列實戰篇7&#xff1a;EventTrigger 的遷移 在 WPF 中&#xff0c;EventTrigger 是非常常用的功能&#xff0c;它可以讓我們直接在 XAML 中綁定事件與動畫或動作&#xff0c;實現 UI 的交互效果。例如按鈕點擊時旋轉、鼠標懸停時變色等。 然而&…