Linux篇:開發工具yum/vim/gcc/g++/Makefile/gdb

一. yum:軟件包管理器

什么是軟件包?
????????在Linux 下安裝軟件 , 一個通常的辦法是下載到程序的源代碼 , 并進行編譯 , 得到可執行程序 .
但是這樣太麻煩了, 于是有些人把一些常用的軟件提前編譯好 , 做成軟件包 (可以理解成windows 上的安裝程序) 放在一個服務器上 , 通過包,管理器可以很方便的獲取到這個編譯好的軟件包 , 直接進行安裝 . 軟件包和軟件包管理器, 就好比 "App" " 應用商店 " 這樣的關系 .
yum(Yellow dog Updater, Modified) Linux 下非常常用的一種包管理器 . 主要應用 Fedora,RedHat, Centos等發行版上 .
關于 rzsz
這個工具用于 windows 機器和遠端的 Linux 機器通過 XShell 傳輸文件 .
安裝完畢之后可以通過拖拽的方式將文件上傳過去 .
注意事項
關于 yum 的所有操作必須保證主機 ( 虛擬機 ) 網絡暢通 !!!
可以通過 ping 指令驗證
查看軟件包
通過 yum list 命令可以羅列出當前一共有哪些軟件包 . 由于包的數目可能非常之多 , 這里我們需要使用 grep 命令只
篩選出我們關注的包 . 例如 :
yum list | grep lrzsz

結果如下:

lrzsz.x86_64 0.12.20-36.el7 @base

注意事項:

軟件包名稱: 主版本號.次版本號.源程序發行號-軟件包的發行號.主機平臺.cpu架構.

"x86_64" 后綴表示 64 位系統的安裝包 , "i686" 后綴表示 32 位系統安裝包 . 選擇包時要和系統匹配 .
"el7" 表示操作系統發行版的版本 . "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6.
最后一列 , base 表示的是 " 軟件源 " 的名稱 , 類似于 " 小米應用商店 ", " 華為應用商店 " 這樣的概念 .
如何安裝軟件
通過 yum, 我們可以通過很簡單的一條命令完成 gcc 的安裝 .
sudo yum install lrzsz
yum 會自動找到都有哪些軟件包需要下載 , 這時候敲 "y" 確認安裝 .
出現 "complete" 字樣 , 說明安裝完成 .
注意事項 :
安裝軟件時由于需要向系統目錄中寫入內容 , 一般需要 sudo 或者切到 root 賬戶下才能完成 .
yum 安裝軟件只能一個裝完了再裝另一個 . 正在 yum 安裝一個軟件的過程中 , 如果再嘗試用 yum 安裝另外 一個軟件, yum 會報錯。
如何卸載軟件
仍然是一條命令 :
sudo yum remove lrzsz

二. vim:多模式編輯器

2.1 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 ,底行模式直接輸入

2.2. vim的基本操作

進入 vim, 在系統提示符號輸入 vim 及文件名稱后,就進入 vim 全屏幕編輯畫面 :
vim 文件名
不過有一點要特別注意,就是你進入 vim 之后,是處于 [ 正常模式 ] ,你要切換到 [ 插入模式 ] 才能夠輸入文 字。
[ 正常模式 ] 切換至 [ 插入模式]????????
????????輸入a
????????輸入i
????????輸入o
[ 插入模式 ] 切換至 [ 正常模式 ]
目前處于 [ 插入模式 ] ,就只能一直輸入文字,如果發現輸錯了字 , 想用光標鍵往回移動,將該字刪除,可 以先按一下「ESC 」鍵轉到 [ 正常模式 ] 再刪除文字。當然,也可以直接刪除。
[ 正常模式 ] 切換至 [ 末行模式 ]
shift + ; , 其實就是輸入「 :
退出 vim 及保存文件 , [ 正常模式 ] 下,按一下「 : 」冒號鍵進入「 Last line mode , 例如 :
: w (保存當前文件)
:? wq ( 輸入「 wq , 存盤并退出 vim)
: q! ( 輸入 q!, 不存盤強制退出 vim)

2.3. vim正常模式命令集

插入模式
????????按「i 」切換進入插入模式「 insert mode 」,按 “i” 進入插入模式后是從光標當前位置開始輸入文件;
????????按「a 」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字;
????????按「o 」進入插入模式后,是插入新的一行,從行首開始輸入文字。
從插入模式切換為命令模式
????????按「ESC 」鍵。
移動光標
vim可以直接用鍵盤上的光標來上下左右移動,但正規的 vim 是用小寫英文字母「 h 」、「 j 」、「 k 」、 「l 」,分別控制光標左、下、上、右移一格
按「 G 」:移動到文章的最后
按「 $ 」:移動到光標所在行的 行尾
按「 ^ 」:移動到光標所在行的 行首
按「 w 」:光標跳到下個字的開頭
按「 e 」:光標跳到下個字的字尾
按「 b 」:光標回到上個字的開頭
按「 #l 」:光標移到該行的第 # 個位置,如: 5l,56l
按[ gg ]:進入到文本開始
按[ shift g ]:進入文本末端
按「 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 」:替換光標所在處的字符。
R 」:替換光標所到之處的字符,直到按下「 ESC 」鍵為止。
撤銷上一次操作
u 」:如果您誤執行一個命令,可以馬上按下「 u 」,回到上一個操作。按多次 “u” 可以執行多次回
復。
ctrl + r : 撤銷的恢復
更改
cw 」:更改光標所在處的字到字尾處
c#w 」:例如,「 c3w 」表示更改 3 個字
跳至指定的行
ctrl + g 」列出光標所在行的行號。
#G 」:例如,「 15G 」,表示移動光標至文章的第 15 行行首。

2.4. vim末行模式命令集

在使用末行模式之前,請記住先按「 ESC 」鍵確定您已經處于正常模式,再按「:」冒號即可進入末行模式。
列出行號
「set nu : 輸入「 set nu 」后,會在文件中的每一行前面列出行號。
跳到文件中的某一行
# : # 」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行了,如輸入數字 15 , 再回車,就會跳到文章的第15 行。
查找字符
/ 關鍵字」 : 先按「 / 」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按 「n 」會往后尋找到您要的關鍵字為止。
? 關鍵字」:先按「 ? 」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直
按「 n 」會往前尋找到您要的關鍵字為止。
問題:/ 和 ?查找有和區別?
  1. 在命令模式下按下?/?后輸入要搜索的關鍵詞,然后按 Enter 鍵,Vim 會從光標所在位置向文件末尾方向查找匹配該關鍵詞的內容。按下 n 鍵可繼續向后查找下一個匹配項,按下 N 鍵可向前查找下一個匹配項。
  2. 使用 ? 進行反向搜索:

    在命令模式下按下???后輸入要搜索的關鍵詞,然后按 Enter 鍵,Vim 會從光標所在位置向文件開頭方向查找匹配該關鍵詞的內容。按下 n 鍵可繼續向前查找下一個匹配項,按下 N 鍵可向后查找上一個匹配項。
保存文件
w : 在冒號輸入字母「 w 」就可以將文件保存起來
離開 vim
q 」:按「 q 」就是退出,如果無法離開 vim ,可以在「 q 」后跟一個「 ! 」強制離開 vim
wq 」:一般建議離開時,搭配「 w 」一起使用,這樣在退出的時候還可以保存文件。

2.5. vim操作總結

三種模式: 正常模式? ?插入模式? ?底行模式

2.6. 簡單vim配置

配置文件的位置
在目錄 /etc/ 下面,有個名為 vimrc 的文件,這是系統中公共的 vim 配置文件,對所有用戶都有效。
而在每個用戶的主目錄下,都可以自己建立私有的配置文件,命名為: “.vimrc” 。例如, /root 目錄下,
通常已經存在一個 .vimrc 文件 , 如果不存在,則創建之。
切換用戶成為自己執行 su ,進入自己的主工作目錄 , 執行 cd ~
打開自己目錄下的 .vimrc 文件,執行 vim .vimrc
常用配置選項 , 用來測試
設置語法高亮 : syntax on
顯示行號 : set nu
設置縮進的空格數為 4: set shiftwidth=4
可以自行到網上查找一些好用的配置

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

1. 背景知識
1. 預處理(進行宏替換 )
2. 編譯(生成匯編 )
3. 匯編(生成機器可識別代碼)
4. 連接(生成可執行文件或庫文件 )
2. gcc 如何完成
格式 gcc [ 選項 ] 要編譯的文件 [ 選項 ] [ 目標文件 ] 例如:
g++ -o process process.c

預處理 ( 進行宏替換 )
預處理功能主要包括宏定義 , 文件包含 , 條件編譯 , 去注釋等。
預處理指令是以 # 號開頭的代碼行。
實例 : gcc –E hello.c –o hello.i
選項 “-E”, 該選項的作用是讓 gcc 在預處理結束后停止編譯過程。
選項 “-o” 是指目標文件 ,“.i” 文件為已經過預處理的 C 原始程序。
編譯(生成匯編)
在這個階段中 ,gcc 首先要檢查代碼的規范性、是否有語法錯誤等 , 以確定代碼的實際要做的工作 , 在檢查
無誤后 ,gcc 把代碼翻譯成匯編語言。
用戶可以使用 “-S” 選項來進行查看 , 該選項只進行編譯而不進行匯編 , 生成匯編代碼。
實例 : gcc –S hello.i –o hello.s
匯編(生成機器可識別代碼)
匯編階段是把編譯階段生成的 “.s” 文件轉成目標文件
讀者在此可使用選項 “-c” 就可看到匯編代碼已轉化為 “.o” 的二進制目標代碼了
實例 : gcc –c hello.s –o hello.o
連接(生成可執行文件或庫文件)
在成功編譯之后 , 就進入了鏈接階段。
實例 : gcc hello.o –o hello
在這里涉及到一個重要的概念 : 函數庫
我們的 C 程序中,并沒有定義 “printf” 的函數實現 , 且在預編譯中包含的 “stdio.h” 中也只有該函數的聲明 , 而 沒有定義函數的實現, 那么 , 是在哪里實 “printf” 函數的呢 ?
答案是 : 系統把這些函數實現都被做到名為 libc.so.6 的庫文件中去了 , 在沒有特別指定時 ,gcc 會到
系統默認的搜索路徑 “/usr/lib” 下進行查找 , 也就是鏈接到 libc.so.6 庫函數中去 , 這樣就能實現函
“printf” , 而這也就是鏈接的作用
函數庫一般分為靜態庫和動態庫兩種。
靜態庫是指編譯鏈接時 , 把庫文件的代碼全部加入到可執行文件中 , 因此生成的文件比較大 , 但在運行時也 就不再需要庫文件了。其后綴名一般為“.a”
動態庫與之相反 , 在編譯鏈接時并沒有把庫文件的代碼加入到可執行文件中 , 而是在程序執行時由運行時 鏈接文件加載庫, 這樣可以節省系統的開銷。動態庫一般后綴名為 “.so”, 如前面所述的 libc.so.6 就是動態 庫。gcc 在編譯時默認使用動態庫。完成了鏈接之后 ,gcc 就可以生成可執行文件 , 如下所示。 gcc hello.o –o hello
gcc 默認生成的二進制程序,是動態鏈接的,這點可以通過 file 命令驗證。
下載動靜態庫
sudo?yum?install?-y?glibc-static
sudo?yum?install?-y?libstbc++-static
gcc 選項
-E 只激活預處理 , 這個不生成文件 , 你需要把它重定向到一個輸出文件里面
-S? 編譯到匯編語言不進行匯編和鏈接
-c? 編譯到目標代碼
-o 文件輸出到 文件
-static 此選項對生成的文件采用靜態鏈接
-g? 生成調試信息。 GNU 調試器可利用該信息。
-shared? 此選項將盡量使用動態庫,所以生成文件比較小,但是需要系統由動態庫 .
-O0
-O1
-O2
-O3 編譯器的優化選項的 4 個級別, -O0 表示沒有優化 ,-O1 為缺省值, -O3 優化級別最高
-w? 不生成任何警告信息。
-Wall 生成所有警告信息。

四. Linux調試器-gdb使用

1. 背景
程序的發布方式有兩種, debug 模式和 release 模式
Linux gcc/g++ 出來的二進制程序,默認是 release 模式
要使用 gdb 調試,必須在源代碼生成二進制程序的時候 , 加上 - g 選項
2. 開始使用
gdb binFile 退出: ctrl + d quit 調試命令:
list l 行號:顯示 binFile 源代碼,接著上次的位置往下列,每次列 10 行。
list l 函數名:列出某個函數的源代碼。
r run :運行程序。
n next :單條執行。
s step :進入函數調用
break(b)? 行號:在某一行設置斷點
break? 函數名:在某個函數開頭設置斷點
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 :取消對先前設置的那些變量的跟蹤
until X 行號:跳至 X
breaktrace( bt) :查看各級函數調用及參數
info i)?locals :查看當前棧幀局部變量的值
quit :退出 gdb
readelf?-S?文件名:讀取可執行程序二進制構成的文件debug
在Makefile文件中chang常在依賴關系后加后綴-g,讓可執行程序以debug方式發布。
以debug方式發布的可執行程序具有調試信息。

以debug方式發布的可執行程序比以默認(release)方式發布的可執行程序略大(多了調試信息)

gdb+可執行程序名:進入調試模式

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

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

1、make是一條指令,makefile當前目錄下的一個文件

2、依賴關系、依賴方法


Makefile注釋用#
Make會自動退到makefile中的依賴關系棧式結構

Make會自頂向下掃描makefile,形成的第一個目標文件充當為Make的默認動作

3、問:為什么重復編譯不通過?答:提供編譯效率!
問:怎么做到的?
答:原理如下:
一定是源文件形成可執行,現有源文件,才有可執行。一般而言,源文件的最近修改時間比可執行成文件要老!如果我們修改了原文件,歷史上曾經還有可執行,那么原文件的最近修改時間,一定要比可執行程序要新!
只需要比較,可執行程序的最近修改時間和源文件的最近修改時間:.exe新于.c源文件,不需要重新編譯,.exe老于.c源文件,需要重新編譯。

4、Access(最后一次訪問時間)、Modify(最后一次被修改時間)與Change(權限最后一次修改時間)
文件=文件內容(Modify)+文件屬性(Change)

touch后面如果跟已存在文件,則將所有時間(access、modify、change)更新為最新
touch -a 文件名:更新Access
touch -m 文件名:更新Modify
touch -c 文件名:更新Change

總結:make會根據源文件和目標文件的新舊判定是否需要重新執行依賴關系進行編譯。

若需要總是執行的呢?

5、.PHONY(偽目標):mycode依賴關系,依賴方法總是被執行

編譯效果:


特殊符號:
$@:目標文件
$^:依賴文件
@:不回顯依賴方法

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

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

相關文章

Linux C++ 字符編碼轉換 GBK與UTF8互轉

Linux 下使用 iconv 命令可以轉換文件的編碼 iconv -f GBK -t UTF-8 input_file -o output_fileC 代碼 使用 iconv 函數 iconv 函數簽名: size_t iconv(iconv_t cd,、 char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 需要注意的是&…

Python基礎20 面向對象(3)多態、封裝、反射

文章目錄 一、多態1、什么是多態2、多態小實驗 二、封裝1、什么是封裝2、內部屬性的約定 三、反射1、什么是反射2、四個實現自省的函數(1)hasattr(object,name)(2)getattr(object,name,defaultNone)(3)seta…

神秘人暗訪:行政窗口為什么要開展神秘顧客調研

在競爭日益激烈的服務市場中,行政窗口作為公共服務的直接提供者,其服務質量的好壞直接關系到政府的形象和公眾對政府的信任度。為了更好地滿足市民的需求,提升服務質量,開展神秘顧客調查顯得尤為重要。神秘顧客調查的必要性包括以…

內網穿透的應用-如何本地部署Elasticsearch搜索分析引擎實現并發布公網遠程訪問

文章目錄 系統環境1. Windows 安裝Elasticsearch2. 本地訪問Elasticsearch3. Windows 安裝 Cpolar4. 創建Elasticsearch公網訪問地址5. 遠程訪問Elasticsearch6. 設置固定二級子域名 Elasticsearch是一個基于Lucene庫的分布式搜索和分析引擎,它提供了一個分布式、多…

探索Flask框架:打造優雅而強大的Web應用

在當今互聯網時代,Web應用的需求日益增長,而作為開發者,我們需要一個簡潔明快、靈活可擴展的框架來滿足這些需求。Flask框架作為一個Python微型框架,在其簡潔的設計理念和豐富的擴展生態系統之間找到了完美的平衡,為我…

洛谷--二分(Java實現)

洛谷 B3627 立方根 題目描述 給定正整數 n,求 √n?。答案向下取整。 輸入格式 僅一行,一個正整數 n。 輸出格式 僅一行,一個正整數,表示√n。向下取整輸出。 輸入輸出樣例 輸入 #1 27 輸出 #1 3 輸入 #2 100000 輸…

ORACLE之 decode函數

語法: DECODE(expression, search1, result1, search2, result2, ..., default_result) 其中,expression是要進行比較的表達式,search1, search2等是可能的值,result1, result2等是對應的結果。如果expression等于search1&#x…

Java類的成員、繼承、多態

當談論Java類的成員、繼承和多態時,我們談論的是面向對象編程的基本概念。讓我逐一介紹: 1. **成員**: - **字段(Field)**:也稱為屬性或變量,用于存儲對象的狀態信息。 - **方法&#xf…

防御保護第六次作業

需求: 8,分公司內部的客戶端可以通過域名訪問到內部的服務器 9,假設內網用戶需要通過外網的web服務器和pop3郵件服務器下載文件和郵件,內網的FTP服務器也需要接受外網用戶上傳的文件。針對該場景進行防病毒的防護。 10,我們需要針…

C++模板從入門到入土

1. 泛型編程 如果我們需要實現一個不同類型的交換函數,如果是學的C語言,你要交換哪些類型,不同的類型就需要重新寫一個來實現,所以這是很麻煩的,雖然可以cv一下,有了模板就可以減輕負擔。 下面寫一個適…

日常leetcode代碼思路總結(持續更新)

日常leetcode代碼思路總結(持續更新) 難易leecode題號題目描述思路簡單121. 買賣股票的最佳時機只準一次買賣0表示持有,1表示不持有;dp[0][i] max(dp[0][i-1], -prices[i]);dp[1][i] max(dp[1][i-1], dp[0][i] pric…

Openwrt刪除內核patch

環境說明 ubuntu-18.04 openwrt-21.02 安裝quilt sudo apt install quilt quilt指令說明 Usage: quilt [--trace[=verbose]] [--quiltrc=XX] command [-h] ...quilt --version Commands are:add fold mail refresh snapshotannotate fork new rem…

基于springboot+vue的中小企業設備管理系統(前后端分離)

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

H 橋逆變方式介紹(雙極性)

單極性控制和雙極性控制是說IGBT四個管子的控制 前面所說的單極性控制是其中一個管子開通、關閉另外一個管子持續開通 而雙極性是四個管子中的兩個管子同時導通,同時關斷。彼此交替變化 所以當方波出現低電平時,是一對管子同時導通,出現高電…

2.21 Qt day2 菜單欄/工具欄/狀態欄/浮動窗口、UI界面、信號與槽

思維導圖 使用手動連接,將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中,在自定義的槽函數中調用關閉函數 將登錄按鈕使用qt5版本的連接到自定義的槽函數中,在槽函數中判斷ui界面上輸入的賬號是否為"admin",…

成像光譜遙感技術中的AI革命:ChatGPT應用指南

“成像光譜遙感技術中的人工智能革命:ChatGPT應用指南”,這是一門旨在改變您使用人工智能處理遙感數據的方式。將最新的人工智能技術與實際的遙感應用相結合,提供不僅是理論上的,而且是適用和可靠的工具和方法。無論你是經驗豐富的…

golang實現延遲隊列(delay queue)

golang實現延遲隊列 1 延遲隊列:郵件提醒、訂單自動取消 延遲隊列:處理需要在未來某個特定時間執行的任務。這些任務被添加到隊列中,并且指定了一個執行時間,只有達到指定的時間點時才能從隊列中取出并執行。 應用場景&#xff1…

智慧驛站_智慧文旅驛站_輕松的驛站智慧公廁_5G智慧公廁驛站_5G模塊化智慧公廁

多功能城市智慧驛站是在智慧城市建設背景下,所涌現的一種創新型社會配套設施。其中,智慧公廁作為城市智慧驛站的重要功能基礎,具備社會配套不可缺少的特點,所以在應用場景上,擁有廣泛的需求和要求。那么,城…

高企認定的官方費用

高新技術企業認定并沒有直接的“官費”,但是在申請高新技術企業認定過程中,企業可能會涉及到一些與政府部門相關的費用,主要包括以下幾種情況: 1.知識產權相關費用:?申請專利、軟件著作權等知識產權時需要向國家知識…

#12解決request中getReader()和getInputStream()只能調用一次的問題

目錄 1、背景 2、解決方案 2.1、自定義HttpServletRequestWrapper 2.2、JsonRequestHeaderParamsHelper 2.3、HttpServletRequestReplacedFilter 2.4、使用 1、背景 當前系統Content-Type為application/json,參數接收方式采用RequestBody和RequestParam&#…