【Linux】環境基礎和開發工具

Linux 軟件包管理器 yum

什么是軟件包

在Linux下安裝軟件, 一個通常的辦法是下載程序的源代碼, 并進行編譯, 得到可執行程序.
但是這樣太麻煩了, 于是有些人把一些常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝程序)放在一個服務器上, 通過包管理器可以很方便的獲取到這個編譯好的軟件包, 直接進行安裝.軟件包和軟件包管理器, 就好比 "App" 和 "應用商店" 這樣的關系. yum(Yellow dog Updater, Modified)是Linux下非常常用的一種包管理器(類比應用商店). 主要應用 Fedora,RedHat,?Centos等發行版上.

注意事項
關于 yum 的所有操作必須保證主機(虛擬機)網絡暢通
可以通過 ping 指令驗證

查看軟件包

通過 yum list 命令可以羅列出當前一共有哪些軟件包. 由于包的數目可能非常之多, 這里我們需要使用 grep 命令只篩選出我們關注的包. 例如

?注意事項:

1、軟件包名稱: 主版本號.次版本號.源程序發行號-軟件包的發行號.主機平臺.cpu架構.?
2、"x86_64" 后綴表示64位系統的安裝包, "i686" 后綴表示32位系統安裝包. 選擇包時要和系統匹配.
3、"el7" 表示操作系統發行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6.
4、最后一列, base 表示的是 "軟件源" 的名稱, 類似于 "小米應用商店", "華為應用商店" 這樣的概念.

如何安裝和卸載軟件

安裝軟件

通過 yum, 我們可以通過很簡單的一條命令完成軟件的安裝.

yum install ?[選項] 軟件名

yum 會自動找到都有哪些軟件包需要下載, 這時候敲 "y" 確認安裝.在安裝時
出現 "complete" 字樣, 說明安裝完成.

常用選項:

-y 不要詢問直接安裝

注意事項:

1、安裝軟件時由于需要向系統目錄寫入內容, 一般需要 sudo 或者切到 root 賬戶下才能完成.
2、yum安裝軟件只能一個裝完了再裝另一個. 正在yum安裝一個軟件的過程中, 如果再嘗試用yum安裝另外一個軟件, yum會報錯.

卸載軟件?

yum remove [選項] 軟件名

常用選項:

-y 不要詢問直接卸載

yum 是如何知道該去哪里下載軟件的?

原因是 yum 內置了軟件的下整鏈接,它們保存在 /etc/yum.repos.d 中:

關于 rzsz

這個工具用于 windows 機器和遠端的 Linux 機器通過 XShell 相互傳輸文件.需要通過 yum 指令安裝 lrzsz.x86_64。(yum install lrzsz.x86_64

rz 指令:將 windows 的文件上傳到 Linux

也可以通過直接拖拽的方式上傳

sz 文件名 指令:將 LInux 的文件上傳到 windows

Linux編輯器-vim的使用

vim的基本操作

用 vim 打開文件

使用 vim + 文件名 來打開:

如果該文件不存在,那么如果該文件經過編輯(有內容),此時保存并退出會自動創建該文件。

vim 的常見模式

vim 是多模式編輯器,常見的有三種模式,分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區分如下:

命令模式(Normal mode)
用 vim 打開文件后所處的模式,此時用戶的所有輸入都會被當做命令,不會作為文本輸入。控制屏幕光標的移動,字符、字或行的刪除,移動復制某區段及進入Insert mode下,或者到 last line mode
?

插入模式(Insert mode)
在命令模式按 i 進入。只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令行模式。該模式是我們后面用的最頻繁的編輯模式。
?

底行模式(last line mode)
在命令模式按 shift 和 : 即可進入該模式。該模式主要進行文件保存(輸入 w)或退出 vim(輸入 q,此時若文件沒有保存會報錯)或保存文件并退出(輸入 wq),也可以進行文件替換,找字符串,列出行號等操作,按「ESC」鍵可回到命令行模式。 要查看所有模式,可以在底行模式輸入:help vim-modes

命令模式命令集

切換到插入模式
按「i」切換進入插入模式「insert mode」,按“i”進入插入模式后是從光標當前位置開始輸入文件;
按「a」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字;
按「o」進入插入模式后,是插入新的一行,從行首開始輸入文字。

從插入模式切換為命令模式
按「ESC」鍵。

移動光標

vim可以直接用鍵盤上的光標來上下左右移動,但正規的vim是用小寫英文字母「h」、「j」、「k」、「l」,分別控制光標左、下、上、右移一格
「w」:光標跳到下個單詞的開頭
「e」:光標跳到下個單詞的字尾
「b」:光標回到上個單詞的開頭
「#l」:光標移到該行的第#個位置,如:5l,56l
? [ gg ] :光標移動到文本的開頭

[shift+g]:光標移動到文本末端

? [ (num) + p ]? :粘貼 ( num 行) 到光標所在行的下一行

? [ u?] :撤銷?

? [ ctrl + r ] :取消撤銷

? [ shift + $ ] : 光標移動到當前行的結尾

? [ shift + ^?] : 光標移動到當前行的開頭

? [ shift + ~ ] :將光標所在的大寫字符變為小寫字符,將小寫字符變為大寫字符

? [ (num?+)? r + 字符]:將光標 (包括) 所在的字符(及以后的共num個字符)變為r后輸入的字符

? [ shift + r ] :(替換模式)將輸入作為光標所在字符的替換,按 Esc 退出

「ctrl」+「b」:屏幕往“后”移動一頁
「ctrl」+「f」:屏幕往“前”移動一頁
「ctrl」+「u」:屏幕往“后”移動半頁
「ctrl」+「d」:屏幕往“前”移動半頁

刪除文字
「x」:每按一次,刪除光標所在位置的一個字符
「#x」:例如,「6x」表示刪除光標所在位置的后面(包含自己在內)6個字符
「X」:大寫的X,每按一次,刪除光標所在位置的前面一個字符
「#X」:例如,「20X」表示刪除光標所在位置的前面20個字符
「dd」:剪切光標所在行
「#dd」:從光標所在行開始刪除#行

復制
「yw」:將光標所在之處到字尾的字符復制到緩沖區中。
「#yw」:復制#個字到緩沖區
「yy」:復制光標所在行到緩沖區。
「#yy」:例如,「6yy」表示拷貝從光標所在的該行“往下數”6行文字。
「p」:將緩沖區內的字符貼到光標所在位置。注意:所有與“y”有關的復制命令都必須與“p”配合才能完成復制與粘貼功能。

替換
「r + 字符」:替換光標所在處的字符。
? [ shift + r ] :(替換模式)將輸入作為光標所在字符的替換,按 Esc 退出

撤銷上一次操作
「u」:如果您誤執行一個命令,可以馬上按下「u」,回到上一個操作。按多次“u”可以執行多次回復。
「ctrl + r」: 撤銷的恢復

更改
「cw」:更改光標所在處的字到字尾處
「c#w」:例如,「c3w」表示更改3個字

跳至指定的行
「ctrl」+「g」列出光標所在行的行號。
「#gg」:例如,「15gg」,表示移動光標至文章的第15行行首。

底行模式命令集

在使用底行模式之前,請記住先按「ESC」鍵確定您已經處于命令模式,再按即可進入底行模式。

列出行號

「set nu」: 輸入「set nu」后,會在文件中的每一行前面列出行號。

?[ set nonu ] : 去掉行號
跳到文件中的某一行
「#」:「#」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15,再回車,就會跳到文章的第15行。

查找字符
「/關鍵字」: 先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往后尋找到您要的關鍵字為止。
「?關鍵字」:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往前尋找到您要的關鍵字為止。
問題:/ 和 ?查找有和區別?操作實驗一下

多文件分屏

[ vs 文件名 ]:將當前文件與另一文件一起分屏

[ ctrl?+ ww ]:將光標移動到另一個文件?

保存文件
「w」: 在冒號輸入字母「w」就可以將文件保存起來,可以在「w」后跟一個「!」強制保存

編譯運行代碼

[ gcc + 文件名] :?編譯該文件

[ ./ + 文件名] :?運行

離開vim
「q」:按「q」就是退出,如果無法離開vim,可以在「q」后跟一個「!」強制離開vim。
「wq」:一般建議離開時,搭配「w」一起使用,這樣在退出的時候還可以保存文件,可以在「wq」后跟一個「!」強制保存并退出。?

配置 vim?

配置的原理

在用戶的家目錄中創建一個名為 .vimrc 的隱藏文件,在里面寫入 set? nu 保存并退出,以后用 vim 打開文件默認顯示行號了。一個用戶的 vim 配置文件不會影響到其他用戶。

Linux編譯器-gcc/g++使用

我們為什么能夠在windows或者linux上進行C/C++或者其他形式的開發呢?

我們的系統中一定要提前或者后續安裝上,C/C++開發相關的頭文件,庫文件
C/C++開發環境不僅僅指的是vs,gcc、g++,更重要的是,語言本身的頭文件和庫文件!
其實我們下載vs2019、vs2022時,同步也在下載c的頭文件和庫文件

復習:程序環境與預處理
?

使用方法

gcc 只能編譯 c 語言代碼,而 g++ 既能編譯 c 也能編譯 c++,但建議用 g++ 編譯 c++,c 用 gcc 編譯。

下面只講解 gcc 的使用方法,g++ 與 gcc 的使用在指令方面一模一樣,只需將 gcc 的 cc 改為 ++

使用 gcc 的基本格式:

gcc [選項] 要編譯的文件 [選項] [目標文件]

常見選項:

-E? 只激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件里面
-S ?編譯到匯編語言不進行匯編和鏈接
-c ?編譯到目標代碼
-o 文件輸出到文件


直接生成可執行程序:

gcc 文件名 (此時默認生成 a.out 文件,會覆蓋其他代碼生成的 a.out 文件)

直接生成可執行程序并自定義命名:

gcc?文件名 -o 自定義文件名

或 :gcc? -o 自定義文件名 文件名

對代碼只進行到預處理:

gcc -E 文件名?-o 文件名.i(gcc -E 文件名 :默認輸出到屏幕)

對代碼只進行到編譯而不進行匯編:

gcc -S 文件名?-o 文件名.s

對代碼只進行到匯編而不進行鏈接:

gcc -c 文件名 -o 文件名.o ,

文件名.o 全稱可重定位目標二進制文件,簡稱目標文件,不可以獨立執行,需要經過鏈接才能執行,該文件用 vim 打開是亂碼,得用 od 指令打開


-static 此選項對生成的文件優先采用靜態鏈接,把所有的鏈接要求變成靜態鏈接

例:gcc -c 文件名 -o 自定義文件名 -static
-g 生成調試信息,GNU 調試器可利用該信息。以 debug 版發布,不加該選項,默認以 release 版發布。

例:gcc -c 文件名 -o 自定義文件名 -g

-static 和 -g 可以同時使用:

gcc -c 文件名 -o 自定義文件名 -g?-static
-shared 此選項將盡量使用動態庫,所以生成文件比較小,但是需要系統由動態庫.
-O0
-O1
-O2
-O3 編譯器的優化選項的4個級別,-O0表示沒有優化,-O1為缺省值,-O3優化級別最高
-w ?不生成任何警告信息。
-Wall 生成所有警告信息。

鏈接詳解(庫詳解)

我們的C程序中,并沒有定義“printf”的函數實現,且在 “stdio.h” 中也只有該函數的聲明,而沒有函數的實現,那么,是在哪里實現“printf”函數的呢?

最后的答案是:系統把這些函數實現都被做到系統的某個文件中去了,庫就是一些函數的具體實現。

在程序的所有源文件都生成目標文件時,通過鏈接器將目標文件與庫鏈接最終形成一個可執行文件

頭文件提供方法的聲明,庫文件提供方法的實現 +你的代碼 = 你的軟件

庫一般分為靜態庫和動態庫兩種。

靜態庫

優點:在程序運行時不再需要庫文件。

缺點:編譯鏈接時,把庫文件的代碼全部加入到可執行文件中,因此生成的文件比較大,

在 Linux 下其后綴名一般為“.a”,windows 下其后綴名一般為 .lib

安裝靜態庫:

動態庫(共享庫)

優點:編譯鏈接時并沒有把庫文件的代碼加入到可執行文件中,而是在程序執行時由運行時鏈接文件加載庫(在運行時跳轉到庫執行,執行完后再返回函數調用處),這樣可以節省磁盤空間、內存空間,安裝包體積小,

缺點:一個動態庫可能被多個程序使用,一旦庫缺失,可能影響多個程序。

在 Linux 下其后綴名一般“.so”,windows 下其后綴名一般為 .dll 。gcc 在編譯時默認使用動態庫。完成了鏈接之后,gcc 就可以生成可執行文件

gcc默認生成的二進制程序,是默認優先動態鏈接的,這點可以通過 file 指令驗證:

一個程序也可能既鏈接了靜態庫,由鏈接了動態庫

庫的命名規則

一般是 :lib + 名稱 + .后綴( 比如 .so)+ 版本

查看一個可執行程序所依賴的動態庫

ldd 指令:

語法:ldd 可執行程序名

許多指令都是用 c 語言實現的,因為它們依賴 c 語言的庫

在 Linux 下如何運行程序

任何一個程序在 Linux 下是否能夠運行的前提該文件能否在 Linux 找到

  • 如果該文件在當前目錄下,使用 ./文件名 的方式來運行程序
  • 可以使用該文件的絕對路徑來運行程序,如一個程序的絕對路徑是 /home/dir/test ,在命令行輸入?/home/dir/test 也可以運行該程序

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

背景

  • 會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力
  • 一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作
  • makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
  • make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。
  • make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構建。

示例?

在當前目錄下創建一個 c 源文件,用 vim 編寫代碼:

再創建一個名為 makefile (或 Makefile,首字母忽略大小寫)的文件:

?

用 vim 在 makefile 中輸入以下內容然后保存退出:?

在命令行輸入 make:

清理工作:不能在命令行直接用 rm 指令刪除源文件,而應該這樣:

在命令行輸入 make clean:

依賴關系和依賴方法

依賴關系:在 makefile 文件中,有這樣一句話:test:test.c?它的意思是最終形成的 test 文件是來自 test.c 的

語法:A :B1 B2 B3 ....?,A 是目標文件,B1、B2、B3是目標文件所依賴的源文件(源文件可以有多個,用空格分隔。

依賴方法:光有依賴關系是不行的,就像叫了別人名字而不告訴他你要做什么,依賴方法就是告訴如何將?test.c 文件形成 test 文件的:gcc -o test test.c

可以在依賴方法中使用的符號:在依賴方法中,可以用

$@ 表示依賴關系冒號左邊的目標文件,

$^?表示依賴關系冒號右邊的源文件

@?加在依賴方法前表示該依賴方法在 make 指令被執行后不顯示在屏幕上。

原理

為了更好的理解 make 是如何工作的,將以上示例寫得更加復雜一些:

makefile 文件內容:

makefile 保存并退出后,在命令行輸入 make:?

可以看出,make 執行依賴方法的順序與 makefile 文件中的依賴方法的聲明順序相反,?

make是如何工作的,在默認的方式下,也就是我們只輸入make命令。那么,

1. make會在當前目錄下找名字叫“Makefile”或“makefile”的文件
2. 如果找到,它會看文件中聲明的第一個目標文件(target),在上面的例子中,他會看到“test”這個文件,并把這個文件作為最終的目標文件,這個最終的目標文件是單獨輸入 make 之后生成的文件(如果把 clean 聲明的依賴關系放在第一個,單獨輸入 make 之后,會執行 clean 的依賴方法),如果要生成其他文件,比如上面例子的 test.o ,可以輸入 make test.o。
3. 如果 test 文件不存在,或是?test 存在但 test 所依賴的 test.o 文件的修改時間(Modify 時間)要比?test 文件新(可以用 touch 測試),那么,他就會執行后面所定義依賴方法來生成?test 文件。
4. 如果?test 所依賴的?test .o 文件不存在,那么make會在當前文件中找目標為 ?test .o 文件的依賴性,如果找到則再根據那個依賴方法生成 ?test .o 文件。(這有點像一個堆棧的過程)
5. make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。
6. 在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么 make 就會直接退出,并報錯,而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。
7. make 只管文件的依賴性,如果在找了依賴關系之后,冒號后面的文件還是不在,make 就不工作了。

8. make 是否執行成功與 makefile 里依賴方法的聲明順序無關,make 會自動推導文件對應的依賴關系

9. makefile 里的依賴關系并不一定總是被執行,如果要讓 make 指令忽略導致依賴方法沒有被執行的情況,強制讓該依賴方法被執行,可以在依賴關系的的前面添加 .PHONY 關鍵字,

讓該目標文件成為偽目標。但為了提醒程序員使用最新的源文件來編譯,.PHONY 一般不加在目標文件,而加在 clean 。

有關文件的時間問題

stat 指令

語法:stat 文件名

示例:

  • Access:文件最近被訪問的時間(用 cat 打印,用 vim 編輯)
  • Modify:文件內容最近被修改的時間
  • Change:文件屬性最近被修改的時間(文件權限,文件大小)

這三個時間一般不會單獨改變:用 vim 編輯,文件的大小改變,?Access,Modify,Change就都改變了,但也可以單獨改變,比如用 cat 打印,只有 Access 改變。

另外,由于 Access 改變得最頻繁,而磁盤文件的訪問比較慢,為了提高效率,一般 Modify 和 Change 改變一定次數 Access 才會改變。

項目清理

  • 工程是需要被清理的
  • 像 clean 這種,沒有被第一個目標文件直接或間接關聯,那么它后面所定義的命令將不會被自動執行,不過,我們可以顯式要 make 執行。即命令—— “make clean”,以此來清除所有的目標文件,以便重新編譯。
  • 但是一般我們這種 clean 的目標文件,我們將它設置為偽目標,用 .PHONY 修飾,偽目標的特性是總是被執行的。

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

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

相關文章

多模態進化論:GPT-5V圖文推理能力在工業質檢中的顛覆性應用

前言 前些天發現了一個巨牛的人工智能免費學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站 🚀《多模態進化論:GPT-5V圖文推理能力在工業質檢中的顛覆性應用》 副標題:2025年實測報告顯…

Linux實現一主二從模式

主從復制: 復制概念中分為兩類數據庫,一類是主數據庫(master),一類是從數據(slave),主 數據庫可以進行讀寫操作,并把寫的操作同步給從數據庫,一般從數據庫是只…

大勢智慧亮相第十八屆中國智慧城市大會

6月26日-28日,第十八屆中國智慧城市大會在武漢盛大舉行。本次大會以“數智賦能城市創新協同共治發展藍圖”為主題,匯聚了李德仁、劉經南等八位院士及全國智慧城市領域的專家學者、行業精英,共同探討行業發展新方向。作為實景三維技術領域領軍…

Xbox One 控制器轉換為 macOS HID 設備的工作原理分析

Xbox One 控制器轉換為 macOS HID 設備的工作原理分析 源代碼在 https://github.com/guilhermearaujo/xboxonecontrollerenabler.git 這個工程的核心功能是將 Xbox One 控制器(macOS 原生不支持的設備)轉換為 macOS 可識別的 HID 設備。這里通過分析代…

Notepad++ 復制宏、編輯宏的方法

Notepad具有宏的功能,能夠記錄當下所有操作,后續只需要一鍵就可以重復執行,大大減少工作量。 比如我需要把很多文件里面的字符完成替換,那我只需要把替換的過程錄制成宏,后續打開文件就可以一鍵替換了。 但是Notepad的…

Oracle:報錯jdbc:oracle:thin:@IP地址:端口:實例名, errorCode 28001, state 99999

報錯原因是oracle密碼過期,根本解決辦法是讓密碼不再過期,永久有效。具體操作記錄一下。 cmd命令行輸入: sqlplus / as sysdba修改Oracle密碼期限為無限: SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;SQL&…

Apipost 簽約中原消費金融:共建企業級 API 全鏈路協作平臺,推動接口管理與測試智能化升級

隨著企業數字化轉型的不斷深化,API 正在從技術細節演變為業務協作的核心樞紐。特別是在金融行業,微服務架構、系統聯動、合規要求等多重因素交織下,接口數量激增、管理復雜度提升、質量保障難度加大。近日,Apipost 與中原消費金融…

AntV L7 之LarkMap 地圖

一、安裝$ npm install -S antv/l7 antv/larkmap # or $ yarn add antv/l7 antv/larkmap二、引入包import type { LarkMapProps, LineLayerProps } from antv/larkmap; import { LarkMap, LineLayer, Marker } from antv/larkmap;三、config配置const layerOptions:Omit<Lin…

客戶案例 | 某新能源車企依托Atlassian工具鏈+龍智定制開發服務,打造符合ASPICE標準的研發管理體系

客戶案例 ASPICE標準已成為衡量整車廠及供應商研發能力的重要標尺。某知名車企在其重點項目研發過程中&#xff0c;面臨著ASPICE 4.0評估認證的挑戰——項目團隊缺乏體系經驗、流程規范和數字化支撐工具。 為幫助該客戶團隊順利通過ASPICE認證并提升研發合規性&#xff0c;At…

stm32的USART使用DMA配置成循環模式時發送和接收有著本質區別

stm32的USART使用DMA配置成循環模式時發送和接收有著本質區別&#xff0c;不要被網上誤導了。發送數據時會不停的發送數據&#xff0c;而接收只有有數據時才會接收&#xff0c;沒有數據時就會掛起等待。 一、觸發機制的差異? ?發送方向&#xff08;TX&#xff09;——狀態驅…

銀河麒麟系統上利用WPS的SDK進行WORD的二次開發

目錄 1.下載安裝包 2.安裝WPS 3.獲取示例代碼 4.編譯示例代碼 5.完整示例代碼 相關鏈接 1.下載安裝包 去wps的官網 https://www.wps.cn/ 下載linux版本。 下載的安裝包名稱為&#xff1a;wps-office_12.8.2.21176.AK.preload.sw_amd64.deb, 官網有介紹適用于Ubuntu、麒麟…

人工智能之數學基礎:如何判斷正定矩陣和負定矩陣?

本文重點 正定矩陣和負定矩陣是線性代數中的重要概念,在優化理論、數值分析、統計學等領域有廣泛應用。 正定矩陣(負定矩陣) 如上所示,我們可以看到滿足上面的性質的時候,我們可以認為矩陣A稱為正定矩陣(負定矩陣) 舉例: 半正定(半負定) 如果≥或者≤的時候,我們認為矩…

匯編基礎介紹——ARMv8指令集(四)

一、CMP 指令 CMP 指令用來比較兩個數的大小。在 A64 指令集的實現中&#xff0c;CMP 指令內部調用 SUBS 指令來實現。 1.1、使用立即數的 CMP 指令 使用立即數的 CMP 指令的格式如下。 CMP <Xn|SP>, #<imm>{, <shift>} 上述指令等同于如下指令。 SUBS …

深入剖析 Electron 性能瓶頸及優化策略

Electron 是一個流行的跨平臺桌面應用開發框架&#xff0c;基于 Chromium 和 Node.js&#xff0c;使得開發者可以使用 Web 技術&#xff08;HTML、CSS、JavaScript&#xff09;構建跨平臺的桌面應用。許多知名應用如 VS Code、Slack、Discord 和 Figma 都采用了 Electron。然而…

Qt的前端和后端過于耦合(0/7)

最近在寫一個軟件&#xff0c;這個軟件稍微復雜一些&#xff0c;界面大概需要十幾個&#xff0c;后端也是要開多線程讀各種傳感器數據。然后鼠鼠我呀就發現一個致命的問題&#xff0c;那就是前端要求的控件太多了&#xff0c;點一下就需要通知后端&#xff0c;即調用后端的函數…

碰一碰發視頻源碼搭建定制化開發:支持OEM

在移動互聯網與物聯網深度融合的當下&#xff0c;“碰一碰發視頻” 作為一種創新的信息交互方式&#xff0c;正逐漸應用于營銷推廣、產品展示、社交互動等多個領域。其核心在于通過近場通信技術&#xff08;如 NFC、藍牙&#xff09;實現設備間的快速連接&#xff0c;無需復雜操…

機器學習文本特征提取:CountVectorizer與TfidfVectorizer詳解

一、文本特征提取概述 在自然語言處理&#xff08;NLP&#xff09;和文本挖掘任務中&#xff0c;文本特征提取是將原始文本數據轉換為機器學習模型可以理解的數值特征的關鍵步驟。scikit-learn提供了兩種常用的文本特征提取方法&#xff1a;CountVectorizer&#xff08;詞頻統…

【PHP】.Hyperf 框架-collection 集合數據(內置函數歸納-實用版)

&#x1f4cc; Article::query()->where(article_id, 6)->select()->first()?? 進行數據結果的循環&#xff0c;遍歷 1.each() 方法遍歷集合中的項目并將每個項目傳遞給閉包&#xff0c;進行處理數據 Article::query()->get()->each(function ($item) {// 可…

巨獸的陰影:大型語言模型的挑戰與倫理深淵

當GPT-4這樣的龐然大物能夠流暢對話、撰寫詩歌、編寫代碼、解析圖像&#xff0c;甚至在某些測試中媲美人類專家時&#xff0c;大型語言模型&#xff08;LLM&#xff09;仿佛成為了無所不能的“智能神諭”。然而&#xff0c;在這令人目眩的成就之下&#xff0c;潛藏著復雜而嚴峻…

vue根據鏈接生成二維碼 qrcode

vue根據鏈接生成二維碼 qrcode js 需求&#xff1a;后端返回一個完整鏈接&#xff0c;前端根據鏈接生成一個二維碼 1、安裝qrcode插件 npm install qrcode2、引入qrcode,并且使用完整代碼 <template> <div><img :src"qrcodeData" class"qrcode…