Linux環境基礎開發工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 軟件包管理器-yum

什么是軟件包及安裝方式

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

安裝程序的方式有:

  1. 源碼安裝,自己進行編譯執行,生成程序。
  2. rmp安裝,可能存在大量軟件相互依賴問題,安裝較為麻煩
  3. yum安裝,相當于window下的軟件商店(會處理好依賴問題)

安裝包
yum就類似一個應用的商店。

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

連網

查看軟件包

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

yum list | grep lrzsz

yum list
解析(了解):

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

如何安裝軟件

上面已經說了yum可以理解為一個應用商店,那么我們就可以通過 yum進行一些工具的安裝。如lrzsz

這個工具用于 windows 機器和遠端的 Linux 機器通過 XShell 傳輸文件

install

安裝軟件需要使用root權限,這里提權使用(需要在信任名單)。
輸入:

sudo yum install lrzsz

之后就會要求你輸入y確認,輸入y之后,出現complete字樣則說明安裝成功。

如何卸載軟件

仍然是一條命令:

sudo yum remove lrzsz

remove
輸入y后出現complete字樣完成卸載。

實現本地機器和云服務器之間的文件互傳

借助剛才安裝的lrzsz實現本地機器和云服務器之間的文件互傳。
將本地文件傳到云服務器
指令:rz

z
rz

將云端服務器文件傳到本地:
指令:sz 文件名
sz

tree查看

之前說了Linux下的文件系統是一顆多叉樹,一般形式查看目錄效果不好,這里推薦使用tree 來查看目錄。
tree
要想使用tree,就需要到yum里安裝

sudo yum install tree

用法:

tree 目錄

Linux編輯器-vim

vim的基本概念:

這里我們講解vim的三種模式(其實有好多模式,目前掌握這3種即可),分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)各模式的功能區分如下:

  • 正常/普通/命令模式(Normal mode)
    控制屏幕光標的移動,字符、字或行的刪除,移動復制某區段及進入Insert mode下,或者到 last line mode
  • 插入模式(Insert mode)
    只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令行模式。該模式是我們后面用的最頻繁的編輯模式。
  • 末行模式(last line mode)
    文件保存或退出,也可以進行文件替換,找字符串,列出行號等操作。 在命令模式下,shift+: 即可進入該模式。要查看你的所有模式:打開vim,底行模式直接輸入
    :help vim-modes

vim的模式切換

進入vim,在系統提示符號輸入vim及文件名稱后,就進入vim全屏幕編輯畫面:

vim test.c

不過有一點要特別注意,就是你進入vim之后,是處于[正常模式]你要切換到[插入模式]才能夠輸入文字

  • [正常模式]切換至[插入模式]

    • 輸入a
    • 輸入i
    • 輸入o
  • [插入模式]切換至[正常模式]

    • 按Esc
  • [正常模式]切換至[末行模式]

    • 「shift + ;」, 其實就是輸入「:」
  • 退出vim及保存文件,在[正常模式]下,按一下「:」冒號鍵進入末行模式「Last line mode」,例如:

    • w (保存當前文件)
    • wq (輸入「wq」,存盤并退出vim)
    • q! (輸入q!,不存盤強制退出vim)
    • wq! (輸入wq!,存盤并強制退出vim)

vim正常模式命令集

  • 插入模式

    1. 按「i」切換進入插入模式「insert mode」,按“i”進入插入模式后是從光標當前位置開始輸入文件;
    2. 按「a」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字;
    3. 按「o」進入插入模式后,是插入新的一行,從行首開始輸入文字。
    • 記一個就好了,推薦使用i
  • 從插入模式切換為命令模式

    1. 按「ESC」鍵。

移動光標

  1. vim可以直接用鍵盤上的光標來上下左右移動,但正規的vim是用小寫英文字母「h」、「j」、「k」、「l」,分別控制光標左、下、上、右移一格。
  2. 按「G」:移動到文章的最后
  3. 按「 $ 」:移動到光標所在行的“行尾”
  4. 按「^」:移動到光標所在行的“行首”
  5. 按「w」:光標跳到下個字的開頭
  6. 按「e」:光標跳到下個字的字尾
  7. 按「b」:光標回到上個字的開頭
  8. 按「#l」:光標移到該行的第#個位置,如:5l,56l
  9. 按[gg]:進入到文本開始
  10. 按[shift+g]:進入文本末端
  11. 按「ctrl」+「b」:屏幕往“后”移動一頁
  12. 按「ctrl」+「f」:屏幕往“前”移動一頁
  13. 按「ctrl」+「u」:屏幕往“后”移動半頁
  14. 按「ctrl」+「d」:屏幕往“前”移動半頁

刪除文字

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

復制

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

替換

  1. 「r」:替換光標所在處的字符。
  2. 「R」:替換光標所到之處的字符,直到按下「ESC」鍵為止

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

  • 「ctrl + r」: 撤銷的恢復

更改

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

跳至指定的行

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

vim底行模式各命令匯總

在使用末行模式之前,請記住先按「ESC」鍵確定您已經處于正常模式,再按「:」冒號即可進入末行模式。

列出行號

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

跳到文件中的某一行

  • 「#」:「#」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字15,再回車,就會跳到文章的第15行。

查找字符

  • 「/關鍵字」: 先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往后尋找到您要的關鍵字為止。
  • 「?關鍵字」:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往前尋找到您要的關鍵字為止。

保存文件

  • 「w」: 在冒號輸入字母「w」就可以將文件保存起來

離開vim

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

vim操作實用總結

對于以上這么多操作,我們只需要掌握經常使用的即可。以下列舉常常使用的操作。(正常模式下)

跳躍移動操作:

  • shift+g:移動到文本的最后面。
  • gg:移動到文本的最前面。
  • n+shift+g:移動到指定行數。(n為具體數字,最好用主鍵盤的,功能區的有可能不行)。
  • shift+$:移動到當前行末尾。
  • shift+^:移動到當前行最前面。

移動操作:

  • 可以直接用鍵盤上的光標來上下左右移動,但正規的vim是用小寫英文字母「h」、「j」、「k」、「l」,分別控制光標左、下、上、右移一格。

剪切操作(也可作為刪除操作)

  • dd:刪除光標所在行。
  • n+dd:從光標所在行開始刪除n行。
  • x:每按一次,刪除光標所在位置的一個字符。
  • n+x:刪除光標所在位置的“后面(包含自己在內)”n個字符。

拷貝操作

  • yy:拷貝光標所在行到緩沖區。
  • n+yy:拷貝從光標所在的該行“往下數”n行文字。

粘貼操作

  • p;將緩沖區內的字符貼到光標所在位置。注意:所有與“y”有關的復制命令都必須與“p”配合才能完成復制與粘貼功能。

簡單vim配置

當你vim進入編輯時,會發現vim寫代碼時十分矬,跟個記事本一樣,要想使vim用得順手,就需要自己去配置。

配置文件的位置

  • 在目錄 /etc/ 下面,有個名為vimrc的文件,這是系統中公共的vim配置文件,對所有用戶都有效。
  • 而在每個用戶的主目錄下,都可以自己建立私有的配置文件,命名為:“.vimrc”。例如,/root目錄下,通常已經存在一個.vimrc文件,如果不存在,則創建之。
  • 切換用戶成為自己執行 su ,進入自己的主工作目錄,執行 cd ~
  • 打開自己目錄下的.vimrc文件,執行 vim .vimrc

但是以上操作不僅有難度,而且需要自己一個一個配置,實在太麻煩了,所以這里推薦執行以指令完成配置。

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

執行該指令建議使用普通用戶執行,不要用root賬號,只為當前用戶配置。不影響其他用戶。

配置
配置

空格數

這時候可以看到就有行號,語法高亮,語法提示,自動縮進,補齊等。
配置
但是它默認的空格數為2,和大家平時用的4有些區別,當然這也可以改。

上面的對應配置在.vimrc里面,進入并修改。

vim .vimrc

找到下面三個值,并將其改為4。
空格縮進

最好用wq!強制保存退出。

Linux編譯器-gcc/g++

一個可執行程序是由代碼經過以下步驟形成的:

  1. 預處理
  2. 編譯
  3. 匯編
  4. 鏈接

那么每一個步驟會見我們寫的代碼轉化成什么,最終形成一個可執行程序的呢?接下來以gcc為例,對以上步驟進行介紹。
一般使用gcc編譯C語言代碼,格式如下:

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

gcc編譯:
在這里插入圖片描述
以此為例,我們對該可執行程序的的預處理,編譯,匯編,鏈接步驟進行介紹。

gcc選項

  • -E 只激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件里面
  • -S 編譯到匯編語言不進行匯編和鏈接
  • -c 編譯到目標代碼
  • -o 文件輸出到 文件
  • -static 此選項對生成的文件采用靜態鏈接
  • -g 生成調試信息。GNU 調試器可利用該信息。
  • -shared 此選項將盡量使用動態庫,所以生成文件比較小,但是需要系統由動態庫

預處理(進行宏替換)

  • 預處理功能主要包括宏定義,文件包含,條件編譯,去注釋等。
  • 預處理指令是以#號開頭的代碼行。
  • 實例: gcc –E test.c –o test.i
    • 不帶選項會直接編譯成最終的可執行程序,這里為查看每一個步驟,需要編譯成對應階段的文件。
  • 選項“-E”,該選項的作用是讓 gcc 在預處理結束后停止編譯過程
  • 選項“-o”是指目標文件,“.i”文件為已經過預處理的C原始程序
    預處理

編譯(生成匯編)

  • 在這個階段中,gcc 首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤后,gcc 把代碼翻譯成匯編語言
  • 用戶可以使用“-S”選項來進行查看,該選項只進行編譯而不進行匯編,生成匯編代碼
  • 實例: gcc -S test.i -o test.s

編譯

匯編(生成機器可識別代碼)

  • 匯編階段是把編譯階段生成的“.s”文件轉成目標文件
  • 在此可使用選項“-c”就可看到匯編代碼已轉化為“.o”的二進制目標代碼了
  • 實例gcc -c test.s -o test.o

匯編

鏈接(生成可執行文件或庫文件)

  • 在成功編譯之后,就進入了鏈接階段。
  • 實例gcc test.o -o test.exe

鏈接

函數庫

上面提到的鏈接是和誰來鏈接呢?在這里就要涉及到一個重要的概念:函數庫

  • 我們的C程序中,并沒有定義“printf”的函數實現,且在預編譯中包含的“stdio.h”中也只有該函數的聲明,而沒有定義函數的實現,那么,是在哪里實“printf”函數的呢?
  • 最后的答案是:系統把這些函數實現都被做到名為 libc.so.6 的庫文件中去了,在沒有特別指定時,gcc 會到系統默認的搜索路徑“/usr/lib”下進行查找,也就是鏈接到 libc.so.6 庫函數中去,這樣就能實現函數“printf”了,而這也就是鏈接的作用。

安裝靜態庫
云服務器一般是裝有動態庫的(默認連接方式),但是靜態庫一般那是沒有的,想要的話我們可以自己裝上,使用yum安裝。

sudo yum install -y glibc-static libstdc++-static

這里一步到位,將C/C++的靜態庫都裝上了。

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

  • 靜態庫是指編譯鏈接時,把庫文件的代碼全部加入到可執行文件中,因此生成的文件比較大,但在運行時也就不再需要庫文件了。其后綴名一般為“.a”
    大小
  • 動態庫與之相反,在編譯鏈接時并沒有把庫文件的代碼加入到可執行文件中,而是在程序執行時由運行時鏈接文件加載庫,這樣可以節省系統的開銷。
  • 動態庫一般后綴名為“.so”,如前面所述的 libc.so.6 就是動態庫。gcc 在編譯時默認使用動態庫, 若要靜態鏈接只用 -static選項對生成的文件采用靜態鏈接。完成了鏈接之后,gcc 就可以生成可執行文件.
  • gcc默認生成的二進制程序,是動態鏈接的,這點可以通過 file 命令驗證。
    file

動態鏈接:
?優點:省空間(磁盤的空間,內存的空間),bin體積小,加載速度快。
?缺點:依賴動態庫,程序可移植性較差。
靜態鏈接:
?優點:不依賴第三方庫,程序的可移植性較高。
?缺點:浪費空間。

我們還可以用ldd查看鏈接時依賴的庫
ldd
(圖中的/lib64/libc.so.6就是當前云服務器當中的C標準庫)

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

為什么要make/makefile

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

依賴關系和依賴方法

makefile

依賴關系:

  • 上面的mycode:code.c可以理解為mycode的實現是依賴于code.c的。

依賴方式

  • gcc -o mycode code.c其實就是我們使用gcc將code.c編譯mycode,是具體實現的方法。

make使用

1.在要編譯代碼的同級路徑下創建一個makefile/makefile的普通文件
makefile
2.使用vim編輯Makefile完成依賴關系和依賴方法
依賴關系
3. 使用make指令編譯
make
多個文件時
多問文件
小技巧
快捷方式

make原理

make是如何工作的,在默認的方式下,也就是我們只輸入make命令,為什么會自動編譯好?原理如下

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

make原理

  • 有點類似遞歸的過程。

Linux調試器-gdb使用

gdb使用須知

  • 程序的發布方式有兩種,debug模式和release模式。
  • Linux gcc/g++出來的二進制程序,默認是release模式。
  • 要使用gdb調試,必須在源代碼生成二進制程序的時候, 加上 -g 選項。
    debug
  • 可以看到帶-g的debug版確實比release版大。

gdb命令匯總

進入
指令: gdb?文件名

調試

  1. 「run/r」:運行代碼(啟動調試)。
  2. 「next/n」:逐過程調試。
  3. 「step/s」:逐語句調試。
  4. 「until?行號」:跳轉至指定行
  5. 「finish」:執行完當前正在調用的函數后停下來(不能是主函數)。
  6. 「continue/c」:運行到下一個斷點處。
  7. 「set?var?變量=x」:修改變量的值為x。

顯示

  1. 「list/l?n」:顯示從第n行開始的源代碼,每次顯示10行,若n未給出則默認從上次的位置往下顯示.。
  2. 「list/l?函數名」:顯示該函數的源代碼。
  3. 「print/p?變量」:打印變量的值。
  4. 「print/p?&變量」:打印變量的地址。
  5. 「print/p?表達式」:打印表達式的值,通過表達式可以修改變量的值。
  6. 「display?變量」:將變量加入常顯示(每次停下來都顯示它的值)。
  7. 「display?&變量」:將變量的地址加入常顯示。
  8. 「undisplay?編號」:取消指定編號變量的常顯示。
  9. 「bt」:查看各級函數調用及參數。
  10. 「info/i?locals」:查看當前棧幀當中局部變量的值。

斷點

  1. 「break/b?n」:在第n行設置斷點。
  2. 「break/b?函數名」:在某函數體內第一行設置斷點。
  3. 「info?breakpoint/b」:查看已打斷點信息。
  4. 「delete/d?編號」:刪除指定編號的斷點。
  5. 「disable?編號」:禁用指定編號的斷點。
  6. [enable?編號」:啟用指定編號的斷點。

退出gdb

  1. 「quit/q」:退出gdb

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

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

相關文章

數據結構——棧(詳細分析)

目錄 🍉引言 🍉棧的本質和特點 🍈棧的基本操作 🍈棧的特點 🍍后進先出 🍍操作受限 🍍動態調整 🍈棧的優缺點 🍍優點 🍍缺點 🍉棧的應用…

002 遞歸評論 mongodb websocket消息推送

文章目錄 商品評論CommentController.javaComment.javaCommentServiceImpl.javaCommentRepository.javaCommentService.javaWebSocketConfig.javaWebSocketProcess.javaapplication.yamlproductReview.htmlindex.htmlindex.jsindex.css 訂單評論EvaluateMapper.xmlEvaluateMapp…

從零手寫實現 nginx-01-為什么不能有 java 版本的 nginx?

前言 大家好,我是老馬。很高興遇到你。 作為一個 java 開發者,工作中一直在使用 nginx。卻發現一直停留在使用層面,無法深入理解。 有一天我在想,為什么不能有一個 java 版本的 nginx 呢? 一者是理解 nginx 的設計…

HTTP 協議中 GET 和 POST 有什么區別?分別適用于什么場景?

HTTP 協議中 GET 和 POST 是兩種常用的請求方法,它們的區別如下: 1. 參數傳遞方式不同 GET 請求參數是在 URL 中以鍵值對的形式傳遞的,例如:http://www.example.com/?key1value1&k ey2value2。 而 POST 請求參數是在請求體中以鍵值對的…

SQOOP詳細講解

SQOOP安裝及使用 SQOOP安裝及使用SQOOP安裝1、上傳并解壓2、修改文件夾名字3、修改配置文件4、修改環境變量5、添加MySQL連接驅動6、測試準備MySQL數據登錄MySQL數據庫創建student數據庫切換數據庫并導入數據另外一種導入數據的方式使用Navicat運行SQL文件導出MySQL數據庫impo…

數據訪問與Spring Data JPA

數據訪問與Spring Data JPA 在現代Java應用程序中,持久化數據是核心功能之一。Spring Data JPA(Java Persistence API)為開發者提供了一種簡單且高效的方式來訪問和操作數據庫。在本博文中,我將向您展示如何使用Spring Data JPA來…

數據結構------二叉樹經典習題2

博主主頁: 碼農派大星. 關注博主帶你了解更多數據結構知識 1.非遞歸的前序遍歷 1.用棧來實現 2,前序遍歷是根左右, 先是根節點入棧,,然后不為空時向左遍歷,當為空時就返回向右遍歷,右為空時直接出棧,依次循環即可. public void preOrderNot(TreeNode root){Stack<TreeNo…

科技賦能,打破視障人士的溝通壁壘

在探索如何增強盲人群體的社會參與度與幸福感的旅程中&#xff0c;盲人社交能力提升策略成為了不容忽視的一環。隨著科技的不斷進步&#xff0c;像“蝙蝠避障”這樣的輔助軟件&#xff0c;不僅在日常出行中為盲人提供了實時避障和拍照識別的便利&#xff0c;也在無形中為他們拓…

華為數通 HCIP-Datacom(H12-821)題庫

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整題庫請掃描上方二維碼訪問&#xff0c;持續更新中。 BGP路由的Update消息中可不包含以下哪些屬性&#xff1f; A、Local Preference B、AS Path C、MED D、Origin 答案&#xff1a;AC 解析&#xff1a;as-path和ori…

深度學習訓練框架——監督學習為例

訓練框架 文章目錄 訓練框架1. 模型網絡結構2. 數據讀取與數據加載2.1Dataloater參數2.2 collate_fn 3. 優化器與學習率調整3.1 優化器3.2 學習率調度 4迭代訓練4.1 train_epoch4.2 train iteration 5.1 保存模型權重 本文內容以pytorch為例 1. 模型網絡結構 自定義網絡模型繼…

測試開發面試題

簡述自動化測試的三大等待 強制等待。直接使用time.sleep()方法讓程序暫停指定的時間。優點是實現簡單&#xff0c;缺點是不夠靈活&#xff0c;可能會導致不必要的等待時間浪費。隱式等待。設置一個固定的等待時間&#xff0c;在這個時間內不斷嘗試去查找元素&#xff0c;如果…

Java17 --- SpringCloud之Sentinel

目錄 一、Sentinel下載并運行 二、創建8401微服務整合Sentinel 三、流控規則 3.1、直接模式 3.2、關聯模式 3.3、鏈路模式 3.3.1、修改8401代碼 3.3.2、創建流控模式 3.4、Warm UP&#xff08;預熱&#xff09; ?編輯 3.5、排隊等待 四、熔斷規則 4.1、慢調用比…

【C++】09.vector

一、vector介紹和使用 1.1 vector的介紹 vector是表示可變大小數組的序列容器。就像數組一樣&#xff0c;vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問&#xff0c;和數組一樣高效。但是又不像數組&#xff0c;它的大小是可以動態改…

操作系統實驗四 (綜合實驗)設計簡單的Shell程序

前言 因為是一年前的實驗&#xff0c;很多細節還有知識點我都已經遺忘了&#xff0c;但我還是盡可能地把各個細節講清楚&#xff0c;請見諒。 1.實驗目的 綜合利用進程控制的相關知識&#xff0c;結合對shell功能的和進程間通信手段的認知&#xff0c;編寫簡易shell程序&…

Excel透視表:快速計算數據分析指標的利器

文章目錄 概述1.數據透視表基本操作1.1準備數據&#xff1a;1.2創建透視表&#xff1a;1.3設置透視表字段&#xff1a;1.4多級分類匯總和交叉匯總的差別1.5計算匯總數據&#xff1a;1.6透視表美化&#xff1a;1.7篩選和排序&#xff1a;1.8更新透視表&#xff1a; 2.數據透視-數…

【B站 heima】小兔鮮Vue3 項目學習筆記Day02

文章目錄 Pinia1.使用2. pinia-計數器案例3. getters實現4. 異步action5. storeToRefsx 數據解構保持響應式6. pinia 調試 項目起步1.項目初始化和git管理2. 使用ElementPlus3. ElementPlus 主題色定制4. axios 基礎配置5. 路由設計6. 靜態資源初始化和 Error lens安裝7.scss自…

Github 2024-05-24 開源項目日報 Top10

根據Github Trendings的統計,今日(2024-05-24統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目3非開發語言項目2TypeScript項目2JavaScript項目1Kotlin項目1C#項目1C++項目1Shell項目1Microsoft PowerToys: 最大化Windows系統生產…

軟件設計師備考筆記(十):網絡與信息安全基礎知識

文章目錄 一、網絡概述二、網絡互連硬件&#xff08;一&#xff09;網絡的設備&#xff08;二&#xff09;網絡的傳輸介質&#xff08;三&#xff09;組建網絡 三、網絡協議與標準&#xff08;一&#xff09;網絡的標準與協議&#xff08;二&#xff09;TCP/IP協議簇 四、Inter…

某神,云手機啟動?

某神自從上線之后&#xff0c;熱度不減&#xff0c;以其豐富的內容和獨特的魅力吸引著眾多玩家&#xff1b; 但是隨著劇情無法跳過&#xff0c;長草期過長等原因&#xff0c;近年脫坑的玩家多之又多&#xff0c;之前米家推出了一款云某神的app&#xff0c;目標是為了減少用戶手…

RedisTemplateAPI:String

文章目錄 ?1 String 介紹?2 命令?3 對應 RedisTemplate API???? 3.1 添加緩存???? 3.2 設置過期時間(單獨設置)???? 3.3 獲取緩存值???? 3.4 刪除key???? 3.5 順序遞增???? 3.6 順序遞減 ?4 以下是一些常用的API?5 應用場景 ?1 String 介紹 Str…