Linux下C++開發

Linux下C++開發

Linux 系統介紹

簡介

  1. Linux屬于多用戶多任務操作系統,而Windows屬于單用戶多任務操作系統
  2. Linux一切皆文件
  3. 目錄結構
    • bin 存儲二進制可執行文件
    • dev 存放的是外接設備,例如磁盤,光盤等。在其中的外接設備是不能直接被使用的,需要掛載
    • etc 主要存儲一些配置文件
    • home 表示除了root用戶以外,其它用戶的家目錄,類似于Windows下的User/用戶目錄
    • proc 全稱process,表示進程,該目錄存儲的是Linux運行時候的進程
    • root 該目錄是root用戶自己的家目錄
    • sbin 全稱super binary,該目錄也存儲一些可被執行的二進制文件,但必須得有super權限的用戶才能執行
    • tmp 當系統運行時候產生的臨時文件會存放在這個目錄
    • usr 存放的是用戶自己安裝的軟件。類似于Windows下的program files
    • var 該目錄存放程序/系統日志文件
    • mnt 當外接設備需要掛載的時候,就需要掛載在mnt目錄下

常用命令

  1. time ./hello 測試hello程序執行的時間
  2. ls -lah /home ./ 以列表形式顯示多個目錄,-h表示以可讀性較高的形式顯示
  3. mkdir -p a/b/c 表示一次性創建多層不存在的目錄
  4. mkdir a b c 創建多個目錄
  5. man 全稱an interface to the system reference manuals
    • 作用:包含了Linux中全部命令手冊
    • man man 查看man命令的手冊
    • man ls 查看ls命令的手冊
  6. reboot 立即重啟
  7. shutdown -h now 立即關機
  8. gedit a.txt 用可視化文本編輯器打開a.txt

常用快捷鍵

  1. ctrl+l 清屏
  2. ctrl+c 退出當前行
  3. ctrl+w 刪除當前行一個單詞
  4. ctrl+shift+'+' 放大TerminalUbuntu
  5. ctrl+'-' 縮小TerminalUbuntu
  6. ctrl+'+' 放大TerminalMingw64
  7. ctrl+'-' 縮小TerminalMingw64
  8. ctrl+alt+t 開啟Terminal

安裝常用軟件

  1. sudo apt update 安裝軟件前,最好更新軟件庫
  2. sudo apt install tree 安裝可以以樹形方式瀏覽多層目錄
  3. sudo apt install build-essential gdb 安裝好gcc,g++,gdb
    • 查看是否安裝成功:
      • gcc --version
      • g++ --version
      • gdb --version
  4. sudo apt install cmake 安裝cmake
  5. sudo apt install libboost-dev 安裝boost

開發環境搭建

GCC編譯器

- 編譯過程

  1. 預處理-Pre-Processing // .i文件
    # -E 選項指示編譯器僅對輸入文件進行預處理
    g++ -E test.cpp -o test.i    // .i文件
    
  2. 編譯-Compiling // .s文件
    # -S 選項告訴g++在為C++代碼產生了匯編語言文件后停止編譯
    # g++ 產生的匯編語言的默認擴展名為 .s
    g++ -S test.i -o test.s
    
  3. 匯編-Assembling // .o文件
    # -c 選項告訴g++僅把源代碼編譯為機器語言的目標代碼
    # 默認情況下,g++建立的目標文件有一個 .o 的擴展名
    g++ -c test.s -o test.o
    
  4. 鏈接-Linking // bin文件
    # -o 選項指定將來的可執行文件的文件名
    g++ test.o -o test
    

- g++重要的編譯參數

  1. -g 編譯帶調試信息的可執行文件
    # -g 選項告訴GCC產生能被GNU調試器GDB使用的調試信息,以調試程序
    g++ -g test.cpp
    
  2. -O[n] 優化源代碼
    # -O0 表示不做優化
    # -Og 表示不做優化 【有些g++版本不支持】
    # -O1 為默認優化
    # -O2 除了完成-O1的優化之外,還進行一些額外的調整工作,如指令調整等
    # -O3 包括循環展開和其它一些與處理特性相關的優化工作
    g++ -O2 test.cpp
    
  3. -l 和 -L 指定庫文件 | 指定庫文件路徑
    # -l參數(小寫) 指定程序要鏈接的庫名
    # 在/lib和/usr/lib和/usr/local/lib里的庫直接用-l參數就能鏈接
    g++ -glog test.cpp# 如果庫文件沒有放在/lib和/usr/lib和/usr/local/lib,需要使用-L參數(大寫)指定庫文件所在的目錄
    g++ -L/home/balingshang/mylibfolder -lmylib test.cpp
    
  4. -I 指定頭文件搜索目錄
    # /usr/include目錄一般不需要指定,g++知道去那里找
    # 其它目錄需要自己指定
    g++ -I/myinclude test.cpp
    
  5. -Wall 打印警告信息s
    g++ -Wall test.cpp
    
  6. -w 關閉警告信息
    g++ -w test.cpp
    
  7. -std=c++11 設置編譯標磚
    # 使用 c++11 標準編譯 test.cpp
    g++ -std=c++11 test.cpp
    
  8. -o 指定輸出文件名
    g++ test.cpp -o test
    
  9. -D 定義宏
    # 在使用gcc/g++編譯的時候定義宏# 常用場景:
    # -DDEBUG定義DEBUG宏,可能文中有DEBUG宏部分的相關信息,用-DDEBUG來選擇開啟或者關閉DEBUG
    
    #include <iostream>
    int main(int argc, char** argv)
    {
    #ifdef DEBUGstd::cout << "In Debug" << std::endl;
    #elsestd::cout << "Not In Debug" << std::endl;
    #endif
    }
    // 1. 在編譯的時候,使用 g++ -DDEBUG main.cpp
    // 2. 輸出:In Debug
    
  10. man g++ 查看其它編譯選項
    man g++
    

- 生成靜態鏈接庫

  1. g++ -c mylib.cpp
  2. ar rs libmylib.a mylib.o
  3. 使用
    g++ main.cpp -lmylib -Lmylibfolder -Iinclude -o main
    

- 生成動態鏈接庫

  1. g++ swap.cpp -Iinclude -fPIC -shared -o libswap.so
  2. g++ main.cpp -lswap -Lmysharedlibfolder -Iinclude -o dynamic_main
  3. 使用
    LD_LIBRARY_PATH=mysharedlibfolder ./dynamic_main
    

GDB調試器

- 常用調試命令參數

開始調試:執行gdb [exefilename],進入gdb調試程序,其中exefilename為要調試的可執行文件名

## 以下命令后括號內為命令的簡化使用,比如run(r),直接輸入r就代表命令run$(gdb)help(h) # 查看命令幫助,如:help set$(gdb)run(r)  # 重新開始運行(run-text:加載文本文件,run-bin:加載二進制文件),如果沒有加斷點,程序就直接運行結束了$(gdb)start   # 單步執行,運行程序,停在第一行執行語句 $(gdb)list(l) # 查看源代碼(list-n,從第n行開始查看代碼。list+函數名:查看具體函數)$(gdb)set     # 設置變量的值$(gdb)next(n) # 單步調試(逐過程,函數直接執行)$(gdb)step(s) # 單步調試(逐語句:跳入自定義函數內部執行)$(gdb)backtrace(bt) # 查看函數調用的棧幀和層級關系$(gdb)frame(f) # 切換函數的棧幀$(gdb)info(i)  # 查看函數內部局部變量的數值$(gdb)finish   # 結束當前函數,返回到函數調用點$(gdb)continue(c) # 繼續運行,相當于F5$(gdb)print(p) # 打印值及地址$(gdb)quit(q) # 退出gdb
$(gdb)break(b)+num     # 在第num行設置斷點$(gdb)info breakpoints # 查看當前設置的所有斷點$(gdb)delete(d) breakpoints num # 刪除第num個斷點$(gdb)display          # 追蹤查看具體變量值$(gdb)undisplay        # 取消追蹤查看變量$(gdb)watch            # 被設置觀察點的變量發生修改時,打印顯示$(gdb)i watch          # 顯示觀察點$(gdb)enable breakpoints  # 啟用斷點$(gdb)disable breakpoints # 禁用斷點$(gdb)x                # 查看內存 x/20xw 顯示20個單元,16進制,每個單元4字節$(gdb)run argv[1] argv[2] # 調試時命令行傳參$(gdb)set follow-fork-mode child # Makefile項目管理:選擇跟蹤父子進程(fork())

Tips:

  1. 編譯時加上-g,才能用gdb進行調試
  2. 回車鍵:重復上一命令

- 調試流程

  • 方法1

    • gdb myexe
    • b 13
    • run
    • 調試會在第13行停住
  • 方法2

    • gdb myexe
      • gdb myexe -p pid
        • continue ?
    • set args conf/gs_conf1.xml # 設置參數
    • show args # 顯示參數
    • start
    • 調試會停在第1行
  • 方法3

    • gdb --args test
    • break main
    • run

VSCode

- 安裝

直接在Ubuntu軟件中心下載即可,因為vscodeUbuntu中是首推軟件

- 工程(文件夾)

打開工程(文件夾)

  • 控制臺進入工程目錄,然后輸入 code . 把當前目錄作為工程打開

關閉工程(文件夾)

  • File->Close Folder

- 界面布局

  1. 菜單欄
    • File->Preferences 一些偏好設置
    • View->Show Minimap 右側打開預覽縮略圖
    • View->Editor Layout 分屏操作
    • Go->Go to File... 打開搜索文件面板
    • Go->Go to Symbol in Workspace... 打開在工程搜索符號面板
    • Terminal->New Terminal 打開一個命令終端
    • Terminal->Split Terminal 把打開的命令終端,再分一個屏出來
      • 點擊垃圾箱按鈕就可以把其中一個終端關閉
    • Help->Welcome 打開Welcome界面,在Welcom面板,你可以找到最近打開的工程
  2. 側邊欄
  • Explorer
    • OPENEDITORS 展示當前打開了哪些文件
    • XXX 打開的文件夾名字,以大寫字母形式展示
    • OUTLINE 展示當前打開文件的大綱,比如有哪些類,每個類有哪些成員
    • TIMELINE 當你的倉庫是用git來管理的時候,可以展示一些修改的記錄
  • Search
    • 在整個文件夾中整體查找
  • Source Control
    • git進行代碼管理
    • 可以查看更改,丟棄更改
  • Run and Debug
  • Extensions
    • 可以搜索插件
    • INSTALLED 已經安裝了哪些插件
    • POPULAR 有哪些流行的插件
    • RECOMMENDED 有哪些推薦的插件給你
  1. 編輯區
  • 編輯代碼
  1. 狀態欄
  • 光標當前所在行和列
  • 空格是多少個字符
  • UTF8編碼
  • LF 行尾只有換行符,這是在Linux環境下
  • C++ 表示你當前的編輯語言是C++
  • Linux 表示我們當前的系統是Linux

- 安裝插件

  • C/C++ Microsoft出品
  • CMake twxs出品
  • CMake Tools Microsoft出品

- 快捷鍵

常用快捷鍵

  1. ctrl+shift+p 打開命名面板
  2. ctrl+p 打開搜索文件面板
    • 直接輸入文件名,跳轉到文件
    • ? 列出當前可執行的動作
    • ! 顯示ErrorsWarnings,也可以ctrl+shift+m
    • : 跳轉到行數,也可以ctrl+g直接進入
    • @ 跳轉到symbol(搜索變量或者函數),也可以ctrl+shift+o直接進入
    • @: 根據分類跳轉到symbol,查找變量或者函數,也可以ctrl+shift+o后輸入:進入
    • # 根據名字查找symbol,也可以ctrl+t
  3. ctrl+t 打開在工程搜索符號面板
  4. ctrl+反點 打開終端
  5. ctrl+b 關閉/打開 側邊欄
  6. ctrl+w 關閉當前文件
  7. alt+上下箭頭 當前行上下移動
  8. F2 變量統一重命名,類似于重構變量命名
  9. F12 轉到定義處

快捷鍵:編輯器與窗口管理

  1. 打開一個新窗口:ctrl+shift+n
  2. 關閉窗口:ctrl+shift+w
  3. 新建文件:ctrl+n
  4. 切換出一個新的編輯器(最多3個):ctrl+\ (也可以按住ctrl,然后點擊Explorer里的文件名)
  5. 左中右3個編輯器的快捷鍵:ctrl+1 ctrl+2 ctrl+3

快捷鍵:代碼編輯相關

  1. 代碼格式化:shift+alt+f,或crtl+shift+p后輸入format xxx
  2. 向上向下復制一行:shift+alt+upshift+alt+down
  3. 列選擇:shift+alt+鼠標選擇

快捷鍵:光標相關

  1. 定義處縮略圖:只看一眼而不跳轉過去alt+f12
  2. 同時選中所有匹配:ctrl+shift+l

快捷鍵:重構代碼

  1. 找到所有的引用:shift+f12
  2. 跳轉到下一個ErrorWarning:當有多個錯誤時可按f8逐個跳轉

快捷鍵:查找替換

  1. 查找:ctrl+f
  2. 查找替換:ctrl+h
  3. 整個文件夾中查找:ctrl+shift+h

快捷鍵:顯示相關

  1. 全屏:f11
  2. ZoomIn/ZommOut:ctrl +/-

- 調試

launch.json

創建launch.json
  1. 點擊Run and Debug圖標,快捷鍵是ctrl+shift+d
  2. 點擊creae a launch.json 超鏈接
  3. 點擊C++(GDB/LLDB)
  4. launch.json生成在.vscode目錄下
修改launch.json文件
  1. 修改program${workspaceFolder}/build/mycmakeexe
  2. 加入"preLaunchTask": "Build"
  3. 加入"miDebuggerPath": "/usr/bin/gdb",如果gdb可以默認找到,就不需要配置

tasks.json

創建tasks.json
  1. 點擊Terminal
  2. 點擊Configure Default Build Task...
  3. 點擊Create tasks.json file from template
  4. 點擊Others
修改tasks.json
  1. 刪除自動生成的的tasks.json文件
  2. 輸入如下內容:
    {"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{"type": "shell","label": "cmake","command": "cmake","args": [".."]},{"label": "make","group": {"kind": "build","isDefault": true},"command": "make","args": []},{"label": "Build","dependsOrder": "sequence","dependsOn": ["cmake","make"]}]
    }
    

- 集成Git

安裝Git

  1. sudo apt update
  2. sudo apt install git
  3. git config --global user.name "xxx"
  4. git config --global user.email "xxx@qq.com"
  5. git config --list 檢查是否配置完成

CMake

- 語法特性介紹

  • 基本語法格式:指令(參數1 參數2…)
    • 參數使用圓括弧括起
    • 參數之間使用空格分號分開
  • 指令是大小寫無關的,參數和變量是大小寫相關的
    set(HELLO hello.cpp)
    add_executable(hello main.cpp hello.cpp)
    ADD_EXECUTABLE(hello main.cpp ${HELLO})
    
  • **變量使用${}方式取值,但是在IF控制語句是直接使用變量名

- 重要指令和常用變量

重要指令(大小寫無關)

  • cmake_minimum_required-指定CMake的最小版本要求
    • 語法:cmake_minimum_required(VERSION versionNumber [FATAL_ERROR])
      # CMake最小版本要求為3.0
      cmake_minimum_required(VERSION 3.0)
      
  • project-定義工程名稱,并可指定工程支持的語言
    • 語法:project(projectname [CXX] [C] [Java])
      # 指定工程為`HELLOWORLD`
      project(HELLOWORLD)
      
  • set-顯式的定義變量
    • 語法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
      # 定義SRC變量,其值為main.cpp hello.cpp
      set(SRC main.cpp hello.cpp)
      
  • include_directories-向工程添加多個特定的頭文件搜索路徑
    • 相當于指定g++編譯器的-I參數
    • 語法:include_directories[[AFTER|BEFORE] [SYSTEM] dir1 dir2...]
      # 將/usr/include/myincludefolder 和 ./include 添加到頭文件搜索路徑
      include_directories(/usr/include/myincludefolder ./include)
      
  • link_directories-向工程添加多個特定的庫文件搜索路徑
    • 相當于指定g++編譯器的-L參數
    • 語法:link_directories(dir1 dir2...)
      # 將/usr/lib/mylibfolder 和 ./lib 添加到庫文件搜索路徑
      link_directories(/usr/lib/mylibfolder ./lib)
      
  • add_library-生成庫文件
    • 語法:add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
      # 通過變量 SRC 生成 libhello.so 共享庫
      add_library(hello SHARED ${SRC})
      
  • add_compile_options-添加編譯參數
    • 語法:add_compile_options(…)
      # 添加編譯參數
      add_compile_options(-Wall -std=c++11 -O2)
      
  • add_executable-生成可執行文件
    • 語法:add_executable(exename source1 source2...sourceN)
      # 編譯main.cpp生成可執行文件
      add_executable(main main.cpp)
      
  • target_link_libraries-為target添加需要鏈接的共享庫
    • 等同于g++編譯器的-l參數
    • 語法:target_link_libraries(target library1<debug|optimized> library2...)
    # 將hello動態庫鏈接到可執行文件main
    target_link_library(main hello)
    
  • add_subdirectory-向當前工程添加存放源文件的子目錄,并可以指定中間二進制和目標二進制存放的位置
    • 語法:add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
      # 添加src子目錄,src中需有一個CMakeLists.txt
      add_subdirctory(src)
      
  • aux_source_directory-發現一個目錄下所有的源代碼文件并將列表存儲在一個變量中,這個指令臨時被用來自動構建源文件列表
    • 語法:aux_source_directory(dir VARIABLE)
      # 定義SRC變量,其值為當前目錄下所有的源代碼文件
      aux_source_directory(. SRC)
      # 編譯SRC變量所代表的源代碼文件,生成main可執行文件
      add_executable(main ${SRC})
      

常用變量

  • CMAKE_C_FLAGS gcc編譯選項
  • CMAKE_CXX_FLAGS g++編譯選項
    # 在CMAKE_CXX_FLAGS編譯選項后追加-std=c++11
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    
  • CMAKE_BUILD_TYPE 編譯類型(Debug,Release)
    # 設定編譯類型為Debug,調試時需要選擇Debug
    set(CMAKE_BUILD_TYPE Debug)
    # 設定編譯類型為Release,發布時需要選擇Release
    set(CMAKE_BUILD_TYPE Release)
    
  • 二進制目錄
    • CMAKE_BINARY_DIR
    • PROJECT_BINARY_DIR
    • <projectname>_BINARY_DIR
      • 這三個變量指代的內容是一致的
      • 如果是in source build,指的就是工程頂層目錄
      • 如果是out of source編譯,指的是工程編譯發生的目錄
      • PROJECT_BINARY_DIR 跟其它兩個稍有區別,不過現在,你可以理解為他們是一致的
  • 源代碼目錄
    • CMAKE_SOURCE_DIR
    • PROJECT_SOURCE_DIR
    • <projectname>_SOURCE_DIR
      • 這三個變量指代的內容是一致的,不論采用何種編譯方式都是工程頂層目錄
      • 也就是在in source build時,它跟CMAKE_BINARY_DIR等變量一致
      • PROJECT_SOURCE_DIR 跟其它兩個稍有區別,不過現在,你可以理解為他們是一致的
  • CMAKE_C_COMPILER:指定C編譯器
  • CMAKE_CXX_COMPILER:指定C++編譯器
  • EXECUTABLE_OUTPUT_PATH:可執行文件輸出的存放路徑
  • LIBRARY_OUTPUT_PATH:庫文件輸出的存放路徑

- CMake編譯工程

CMake目錄結構:項目主目錄存放一個CMakeLists.txt文件

兩種方式設置編譯規則:

  1. 包含源文件的子文件夾包含CMakeLists.txt文件,主目錄的CMakeLists.txt通過add_subdirectory添加子目錄即可
  2. 包含源文件的子文件夾未包含CMakeLists.txt文件,子目錄編譯規則體現在主目錄的CMakeLists.txt

編譯流程

在Linux平臺下使用CMake構建C/C++工程的流程如下:

  • 手動編寫CMakeLists.txt
  • 執行命令cmake PATH生成MakefilePATH是頂層CMakeLists.txt所在的目錄)
  • 執行命令make進行編譯

兩種構建方式

  • 內部構建(in-source build):不推薦使用

    內部構建會在同級目錄下產生一大堆中間文件,這些中間文件并不是我們最終所需要的,和工程源文件放一起會顯得雜亂無章

    ## 內部構建# 在當前目錄下,編譯本目錄的CMakeLists.txt,生成Makefile和其他文件
    cmake .
    # 執行make命令,生成target
    make
    
  • 外部構建(in-source build):推薦使用

    將編譯輸出文件與源文件放到不同的目錄中

    ## 外部構建# 1. 在當前目錄下,創建build文件夾
    mkdir build
    # 2. 進入build文件夾
    cd build
    # 3. 編譯上級目錄的CMakeLists.txt,生成Makefile和其它文件
    cmake ..
    # 4. 執行make命令
    

- CMake示例

  • 示例一
    ## 目錄結構:include/swap.h src/swap.cpp main.cpp build/# CMakeLists.txt
    cmake_minimum_required(VERSION 3.0)
    project(SWAP)
    include_directories(include)
    # 或者:include_directories(${CMAKE_SOURCE_DIR}/include)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O2 -Wall")
    # 或者:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
    #       set(CMAKE_BUILD_TYPE Debug)
    add_executable(main_cmake main.cpp src/swap.cpp)# 執行
    cd build
    cmake ..
    make
    ./main_cmake
    

安裝SSH

  • sudo apt-get install openssh-server
  • 檢查有沒有啟動:sudo ps -ef | grep ssh
    • 如果沒有啟動:sudo service ssh start
  • 開機啟動ssh:sudo systemctl enable ssh

xshell連接本地的wsl2

  • xshell連接本地的wsl2

延申閱讀

  • VSCode在Windows下的快捷鍵
  • VSCode在Linux下的快捷鍵

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

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

相關文章

Redis數據庫的可視化工具AnotherRedisDesktopManager使用+抖音直播小玩法實踐

一、它是什么 Another Redis DeskTop Manager 是一個開源項目&#xff0c;提供了以可視化的方式管理 Redis 的功能&#xff0c;可供免費下載安裝&#xff0c;也可以在此基礎上進行二次開發&#xff0c;主要特點有&#xff1a; 支持 Windows 平臺和 MacOS 平臺 支持查詢 Key、…

2023-08-17力扣每日一題

鏈接&#xff1a; 1444. 切披薩的方案數 題意&#xff1a; 給定一個矩陣&#xff0c;其中含有多個蘋果&#xff0c;需要切割k-1次,每次可以切割多行/多列&#xff0c;需要保證切割兩個部分都有蘋果&#xff0c;移除靠上/靠右的部分&#xff0c;對留下部分進行后續的切割&…

QT中的按鈕控件Buttons介紹

目錄 Buttons 按鈕控件 1、常用屬性介紹 2、按鈕介紹 2.1QPushButton 普通按鈕 2.2QtoolButton 工具按鈕 2.3Radio Button單選按鈕 2.4CheckButton復選按鈕 2.5Commam Link Button命令鏈接按鈕 2.6Dialog Button Box命令鏈接按鈕 Buttons 按鈕控件 在Qt里&#xff0c;…

Viobot開機指南

0.前言 本篇旨在讓每個拿到Viobot設備的用戶都能夠第一時間測試它的效果&#xff0c;以及將設備配置到自己的環境下面。 1.上電 首先&#xff0c;我們先要把設備接上電源線和網線&#xff0c;最簡單的方式就是網線直連電腦。 電源選用12V1.5A設備自帶的電源即可。 2.配置網…

JavaScript中的this指向,call、apply、bind的簡單實現

JavaScript中的this this是JavaScript中一個特殊關鍵字&#xff0c;用于指代當前執行上下文中的對象。它的難以理解之處就是值不是固定的&#xff0c;是再函數被調用時根據調用場景動態確定的&#xff0c;主要根據函數的調用方式來決定this指向的對象。this 的值在函數被調用時…

深入學習前端開發,掌握HTML、CSS、JavaScript等技術

課程鏈接&#xff1a; 鏈接: https://pan.baidu.com/s/1WECwJ4T8UQfs2FyjUMbxig?pwdi654 提取碼: i654 復制這段內容后打開百度網盤手機App&#xff0c;操作更方便哦 --來自百度網盤超級會員v4的分享 課程介紹&#xff1a; 第1周&#xff1a;HTML5基礎語法與標簽 &#x1f…

web集群學習:搭建 LNMP應用環境

目錄 LNMP的介紹&#xff1a; LNMP組合工作流程&#xff1a; FastCGI介紹&#xff1a; 1、什么是 CGI 2、什么是 FastCGI 配置LNMP 1、部署LNMP環境 2、配置LNMP環境 LNMP的介紹&#xff1a; 隨著 Nginx Web 服務的逐漸流行&#xff0c;又岀現了新的 Web 服務環境組合—…

【Spring Cloud 八】Spring Cloud Gateway網關

gateway網關 系列博客背景一、什么是Spring Cloud Gateway二、為什么要使用Spring Cloud Gateway三、 Spring Cloud Gateway 三大核心概念4.1 Route&#xff08;路由&#xff09;4.2 Predicate&#xff08;斷言&#xff09;4.3 Filter&#xff08;過濾&#xff09; 五、Spring …

如何使用Kali Linux進行密碼破解?

今天我們探討Kali Linux的應用&#xff0c;重點是如何使用它來進行密碼破解。密碼破解是滲透測試中常見的任務&#xff0c;Kali Linux為我們提供了強大的工具來幫助完成這項任務。 1. 密碼破解簡介 密碼破解是一種滲透測試活動&#xff0c;旨在通過不同的方法和工具來破解密碼…

力扣初級算法(數組拆分)

力扣初級算法&#xff08;數組拆分&#xff09; 每日一算法&#xff1a; 力扣初級算法&#xff08;數組拆分&#xff09; 學習內容&#xff1a; 1.問題描述 給定長度為 2n 的整數數組 nums &#xff0c;你的任務是將這些數分成 n 對, 例如 (a1, b1), (a2, b2), …, (an, bn) …

機器人CPP編程基礎-03變量類型Variables Types

機器人CPP編程基礎-02變量Variables 全文AI生成。 C #include<iostream>using namespace std;main() {int a10,b35; // 4 bytescout<<"Value of a : "<<a<<" Address of a : "<<&a <<endl;cout<<"Val…

[Openwrt]一步一步搭建MT7981A uboot、atf、openwrt-21.02開發環境操作說明

安裝ubuntu-18.04 軟件安裝包 ubuntu-18.04-desktop-amd64.iso 修改ubuntu管理員密碼 sudo passwd [sudo] password for w1804: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 更新ubuntu源 備份源 sudo cp /etc/apt/so…

CentO7.9安裝Docker

文章目錄 CentO7.9安裝Docker刪除舊版本的Docker安裝Docker倉庫安裝Docker安裝最新版本安裝指定版本 Docker安裝個NGINX查看Docker鏡像運行查看Docker進程查看啟動端口停止Docker容器 CentO7.9安裝Docker 刪除舊版本的Docker sudo yum remove docker \docker-client \docker-…

Vue+ElementUI實現選擇指定行導出Excel

這里記錄一下&#xff0c;今天寫項目時 的一個需求&#xff0c;就是通過復選框選中指定行然后導出表格中選中行的Excel表格 然后這里介紹一個工具箱(模板)&#xff1a;vue-element-admin 將它拉取后&#xff0c;運行就可以看到如下界面&#xff1a; 這里面的很多功能都已經實現…

【NAS群暉drive異地訪問】使用cpolar遠程訪問內網Synology Drive「內網穿透」

文章目錄 前言1.群暉Synology Drive套件的安裝1.1 安裝Synology Drive套件1.2 設置Synology Drive套件1.3 局域網內電腦測試和使用 2.使用cpolar遠程訪問內網Synology Drive2.1 Cpolar云端設置2.2 Cpolar本地設置2.3 測試和使用 3. 結語 前言 群暉作為專業的數據存儲中心&…

jupyter切換conda虛擬環境

環境安裝 conda install nb_conda 進入你想使用的虛擬環境&#xff1a; conda activate your_env_name 在你想使用的conda虛擬環境中&#xff1a; conda install -y jupyter 在虛擬環境中安裝jupyter&#xff1a; conda install -y jupyter 重啟jupyter 此時我們已經把該安裝…

也許你正處于《孤注一擲》中的“團隊”,要留心了

看完這部電影&#xff0c;心情久久不能平靜&#xff0c;想了很多&#xff0c;倒不是擔心自己哪天也成為“消失的yaozi”&#xff0c;而是在想&#xff0c;我們每天所賴以生存的工作&#xff0c;跟電影里他們的工作比&#xff0c;差別在哪里呢&#xff1f; 目錄 1. 產品的本質…

Linux系統下的性能分析命令

在 Linux 系統下&#xff0c;有許多用于性能分析和調試的命令和工具&#xff0c;可以幫助您識別系統瓶頸、優化性能以及調查問題。本文將介紹在性能分析過程中&#xff0c;可能使用到的一些命令。 以下是一些常用的性能分析命令和工具匯總&#xff1a; 命令功能簡述top用于實…

2023-08-16力扣每日一題

鏈接&#xff1a; 2682. 找出轉圈游戲輸家 題意&#xff1a; 環形1到n&#xff0c;從1開始&#xff0c;每次移動 第i次*k &#xff0c;當移動到出現過的序號時停下&#xff0c; 求沒移動到的數字 解&#xff1a; 簡單模擬題&#xff0c;我也以為有數學做法&#xff0c;可…

docker安裝部署

目錄 docker安裝部署 1.環境 2.安裝步驟 1.安裝必要工具 2.配置軟件源 3.修改軟件源 4.更新并下載docker 5.設置開機自啟 3.啟動docker 1.配置docker鏡像加速器 2.啟動服務 docker安裝部署 1.環境 centos7 2.安裝步驟 1.安裝必要工具 yum install -y yum-utils dev…