Linux命令之top命令介紹

来源:https://www.cnblogs.com/qiangshangkeji/archive/2020/05/30/12994458.html
-Advertisement-
Play Games

Linux命令之top命令介紹 top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。下麵詳細介紹它的使用方法。 top是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程式為 ...


Linux命令之top命令介紹

       top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。下麵詳細介紹它的使用方法。

       top是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程式為止.比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.記憶體使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過互動式命令或者在個人定製文件中進行設定

1.命令格式:

top [參數]

2.命令功能:

顯示當前系統正在執行的進程的相關信息,包括進程ID、記憶體占用率、CPU占用率等

3.命令參數:

-b 批處理

-c 顯示完整的觸發命令(即commont欄位內容的切換,貌似顯示為請求類型與完整的該進程的觸發命令行內容之間切換) 顯示整個命令行而不只是顯示命令名,這裡指的是command欄位的列信息,將顯示完整的開啟該進程的命令行的信息。 開啟前:mysqld,開啟後:/usr/libexec/mysqld --basedir=/usr --datadir=/newdata/mysqldata --user=mysql --log

-I 忽略失效過程

-s 保密模式。

-S 累積模式。

-i<時間> 設置間隔時間。

-u<用戶名> 指定用戶名。

-p<進程號> 指定進程。

-n<次數> 迴圈顯示的次數。

4.使用實例:

實例1:顯示進程信息

[root@TG1704 log]# top

top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35

Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie

Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st

Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers

Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                

28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java                                                                   

18249 root      18   0 3201m 1.9g  11m S 35.9  6.0 569:39.41 java                                                                   

 2808 root      25   0 3333m 1.0g  11m S 24.3  3.1 526:51.85 java                                                                   

25668 root      23   0 3180m 704m  11m S 14.0  2.2 360:44.53 java                                                                   

  574 root      25   0 3168m 611m  10m S 12.6  1.9 556:59.63 java                                                                   

 1599 root      20   0 3237m 1.9g  11m S 12.3  6.2 262:01.14 java                                                                   

 1008 root      21   0 3147m 842m  10m S  0.3  2.6   4:31.08 java                                                                   

13823 root      23   0 3031m 2.1g  10m S  0.3  6.8 176:57.34 java                                                                   

28218 root      15   0 12760 1168  808 R  0.3  0.0   0:01.43 top                                                                    

29062 root      20   0 1241m 227m  10m S  0.3  0.7   2:07.32 java                                                                   

    1 root      15   0 10368  684  572 S  0.0  0.0   1:30.85 init                                                                   

    2 root      RT  -5     0    0    0 S  0.0  0.0   0:01.01 migration/0                                                            

    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                            

    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                             

    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.80 migration/1                                                            

    6 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1                                                            

    7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1                                                             

    8 root      RT  -5     0    0    0 S  0.0  0.0   0:20.59 migration/2                                                            

    9 root      34  19     0    0    0 S  0.0  0.0   0:00.09 ksoftirqd/2                                                            

   10 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/2                                                             

   11 root      RT  -5     0    0    0 S  0.0  0.0   0:23.66 migration/3                                                            

   12 root      34  19     0    0    0 S  0.0  0.0   0:00.03 ksoftirqd/3                                                            

   13 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/3                                                             

   14 root      RT  -5     0    0    0 S  0.0  0.0   0:20.29 migration/4                                                            

   15 root      34  19     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/4                                                            

   16 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/4                                                             

   17 root      RT  -5     0    0    0 S  0.0  0.0   0:23.07 migration/5                                                            

   18 root      34  19     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/5                                                            

   19 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/5                                                             

   20 root      RT  -5     0    0    0 S  0.0  0.0   0:17.16 migration/6                                                            

   21 root      34  19     0    0    0 S  0.0  0.0   0:00.05 ksoftirqd/6                                                            

   22 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/6                                                             

   23 root      RT  -5     0    0    0 S  0.0  0.0   0:58.28 migration/7

統計信息區前五行是當前系統情況整體的統計信息區。下麵我們看每一行信息的具體意義。

第一行,任務隊列信息,該行同linux命令行uptime 命令的執行結果,詳細參見本手冊的uptime命令,具體參數說明情況如下:

14:06:23 — 當前系統時間

up 70 days, 16:44 — 系統已經運行了70天16小時44分鐘(在這期間系統沒有重啟過的吆!)

 2 users — 當前有2個用戶登錄系統

load average: 1.15, 1.42, 1.44 — load average後面的三個數分別在剛剛過去的1分鐘、5分鐘、15分鐘的負載情況,詳細參見uptime命令。

load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。

第二行Tasks — 任務(進程),具體信息說明如下:

206 total,  系統現在共有206個進程

 1 running, 其中處於運行中的有1個

 205 sleeping, 205個在休眠(sleep)

 0 stopped, stoped狀態的有0個

 0 zombie  zombie狀態(僵屍)的有0個

第三行,cpu狀態信息,具體屬性說明如下(關於cpu的使用率的計算,指的是一段時間內統計的處於在用狀態的cpu時間片占該統計時間段的比例。比如linux的top命令貌似預設3秒統計一次。詳細參考子節點cpu使用率):

 5.9%us — 記憶體的用戶空間部分程式占用CPU的百分比

 3.4% sy — 記憶體的內核空間部分程式占用CPU的百分比。

 0.0% ni — 改變過優先順序的進程占用CPU的百分比

 90.4% id — 空閑CPU百分比

 0.0% wa — IO等待占用CPU的百分比等待輸入輸出的CPU時間百分比

 0.0% hi — 硬中斷(Hardware IRQ)占用CPU的百分比,CPU服務於硬體中斷所耗費的時間總額

 0.2% si — 軟中斷(Software Interrupts)占用CPU的百分比,CPU服務軟中斷所耗費的時間總額

 0.0%st    虛擬機占用百分比

備註:在這裡CPU的使用比率和windows概念不同,需要理解linux系統記憶體區劃的用戶空間和內核空間的相關知識,參見本節點的子節點介紹!

第四行,記憶體狀態,具體信息如下:

32949016k total — 物理記憶體總量(32GB)

14411180k used — 使用中的記憶體總量(14GB)【使用中的記憶體總量(used)指的是現在系統內核控制的記憶體數,這裡可以理解為特指分配給應用進程的記憶體+物理記憶體的buffers+物理記憶體的caches這3個的和,應用進程有最高優先順序,當物理記憶體不足時,系統會將buffers緩存的數據寫入到磁碟,將caches緩存的數據寫入到交換區的chaches,從而為程式運行提供更多記憶體使用。也就是說,判斷記憶體是否夠用,主要的指標是判斷訪問高峰期,是否可以給應用程式運行提供足夠的記憶體-亞強

18537836k free — 空閑記憶體總量(18GB)【空閑記憶體總量(free)是內核還未納入其管控範圍的數量。納入內核管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重覆利用的記憶體,內核並不把這些可被重新使用的記憶體交還到free中去,因此在linux上free記憶體會越來越少,但不用為此擔心。】

169884k buffers — 緩存的記憶體量 (169M),用於暫時存放要寫入到磁碟的數據,等待系統資源充足時候一次性寫入磁碟速度更快。從而不必每次程式寫入動作無需等待真正寫入磁碟成功,將要寫入的數據先存放到記憶體buffers緩衝區,程式直接繼續執行下麵的動作。

備註:關於真正的機器的可用記憶體,如果出於習慣去計算真正的可用記憶體數,這裡有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached(這個參數本身代表swap交換區的一段存儲空間,只是該存儲空間的大小也等於物理記憶體中系統開闢的cached存儲區間,也就是交換區與物理記憶體都有cached緩衝區-亞強),按這個公式此台伺服器的可用記憶體:18537836k +169884k +3612636k = 22GB左右。

對於記憶體監控,在top里我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行記憶體和swap的數據交換,這是真正的記憶體不夠用了。

第五行,swap交換分區信息(也叫做虛擬物理記憶體,即在硬碟上開闢的一段空間,用於類似於記憶體功能,但是存取速度遠低於記憶體,可以用於記憶體不足時使用),具體信息說明如下:

32764556k total — 交換區總量(32GB)

0k used — 使用的交換區總量(0K)

32764556k free — 空閑交換區總量(32GB)

3612636k cached — 緩衝的交換區總量(3.6GB),物理記憶體中的內容被換出到swap交換區,而後又被換入到物理記憶體,但使用過的swap交換區尚未被覆蓋(註意這些尚未被覆蓋的存儲空間不計入第五行的used參數值,貌似被計入了第五行的free中,因為這段記憶體空間如果系統需要,就會被覆蓋掉,因此被計入到了free變數),該數值即為這些內容已存在於物理記憶體中的交換區的大小,相應的記憶體,再次被換出時可不必再對swap交換區寫入。也就是該參數值得記憶體中的一段存儲空間,這段空間中存儲著在交換區的一段空間數據,但是註意該交換區的數據實際已經被註銷掉,成為空閑空間free,你知道即使成為空閑空間,那麼如果沒有新數據寫入覆蓋掉該段存儲空間,那麼這段空間的數據是不會丟失的,因此當與之對應的記憶體中的當時調入記憶體中的同樣的數據由於系統調用再次被調出到swap交換區(這段數據已經存在於交換區),那麼系統不會重新將這段數據寫入交換區,而是將原來已經存在於交換區的數據標誌為可用即可。

綜上:【亞強】緩衝交換區cached是swap交換區中的一段空間,該空間存儲著從物理記憶體調入到swap交換區且又被物理記憶體調回到物理記憶體的數據且尚未被從物理記憶體新調入到swap交換區的數據覆蓋掉的在swap交換區所占存儲空間。當系統需要再次調出物理記憶體中的這些已經存在於cached中的數據到swap交換區,那麼系統不會重新寫入數據到swap交換區,而是將原來的這些存在於cached中的註銷標記改為數據可用即可(從而加快了數據交互速度)。這些用於cached緩衝交換區的存儲空間,當從物理記憶體中調入交換區swap的數據量很大時,那麼新調入的數據就可能要覆蓋掉這些cached所占空間的有註銷標記的數據。因此cached緩衝交換區單獨拿出來,不被計入到used參數下,而是計入到free參數下,因為cached仍然是可以被使用的。

亞強(強商科技)註釋:關於linux記憶體管理機制(物理記憶體(分為程式使用的記憶體和buffers,cached)和虛擬記憶體(swap交換分區)),詳細參見本階段下麵的【linux記憶體管理機制】節點。

第六行,空行

第七行以下:各進程(任務)的狀態監控,項目列信息說明如下:

預設情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下麵的快捷鍵來更改顯示內容。 

序號  列名    含義
a PID 進程id
b PPID 父進程id
c RUSER Real user name
d UID 進程所有者的用戶id
e USER 進程所有者的用戶名
f GROUP 進程所有者的組名
g TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為
h PR 進程優先順序(本欄位介紹參加本手冊節點的子節點)
i NI nice值。負值表示高優先順序,正值表示低優先順序(本欄位介紹參加本手冊節點的子節點),即值越小優先順序越高,參見本手冊本節點的子節點。優先順序部分
j P 最後使用的CPU,僅在多CPU環境下有意義
k %CPU 上次更新到現在的CPU時間占用百分比,The task's share(分配) of the elapsed(消逝的) CPU time since the last screen
update, expressed as a percentage of total CPU time.  In a true SMP environment, if 'Irix mode' is Off, top will operate in 
'Solaris mode' where a task's cpu usage will be divided by  the  total number of CPUs.You toggle 'Irix/Solaris' modes with 
the 'I' interactive command.可以用I來切換Irix/Solaris模式,在多核心的cpu系統中,%cpu列將根據上一次更新時刻到本次更新時刻每個cpu的總時間
分為100份,即如果有n個cpu核心,那麼總時間份數為n*100份。那麼每個進程的份數累加最大可以達到n*100.如果運行在Irix模式下,那麼每個進程
的%cpu欄位的值為上一次更新時刻到本次更新時刻所有cpu核心處理器分配給該進程的份數總和與n*100的比例,即此種情況是相對於全部cpu的時間份數總
額的占比。如果運行在Solaris模式下,那麼每個進程的的%cpu欄位的值為上一次更新時刻到本次更新時刻所有cpu核心處理器分配給該進程的份數總和與100
的比例,即此種情況是相對於每個cpu時間份數總額的占比(這裡的cpu應該指的是邏輯cup格式,1個物理cpu可以有多個核心,著多個核心
也可以稱為多個邏輯cpu)
l    TIME 進程使用的CPU時間總計,單位秒,top命令的TIME/TIME+是指的進程所使用的CPU時間,不是進程啟動到現在的時間,因此,如果一個進程使
用的cpu很少,那即使這個進程已經存在N長時間,TIME/TIME+也是很小的數值。此外,如果你的系統有多個CPU,或者是多核CPU的話,那麼,進程占用多
個cpu的時間是累加的。 Total CPU time the task has used since it started. When ‘Cumulative mode’ is On, each process is listed with 
the cpu time that it and its dead children has used. You toggle ‘Cumulative mode’ with ‘S’, which is a command-line option and an 
interactive command. See the ‘S’ interactive command for additional information regarding this mode.
m TIME+ 進程使用的CPU時間總計,單位1/100秒,top命令的TIME/TIME+是指的進程所使用的CPU時間,不是進程啟動到現在的時間,因此,如果
一個進程使用的cpu很少,那即使這個進程已經存在N長時間,TIME/TIME+也是很小的數值。此外,如果你的系統有多個CPU,或者是多核CPU的話,那麼,
進程占用多個cpu的時間是累加的。CPU Time, hundredths The same as ‘TIME’, but reflecting more granularity through hundredths of
 a second
n %MEM 進程使用的物理記憶體百分比
o VIRT 進程使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
p SWAP 進程使用的虛擬記憶體中,被換出的大小,單位kb。
q RES 進程使用的、未被換出的物理記憶體大小,單位kb。RES=CODE+DATA,這裡指的是記憶體加數據。
r CODE 可執行代碼占用的物理記憶體大小,單位kb
s DATA 可執行代碼以外的部分(數據段+棧)占用的物理記憶體大小,單位kb
t SHR 共用記憶體大小,單位kb(本欄位介紹參加本手冊節點的子節點)
u nFLT 頁面錯誤次數
v nDRT 最後一次寫入到現在,被修改過的頁面數。
w S 進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程,詳細參見子節點【Linux進程狀態解析 之 R、S、D、T、Z、X (主要有三個狀態)】)
x COMMAND 觸發當前進程的命令名/命令行(可以用c來切換)
y WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
z Flags 任務標誌,參考 sched.h

其他使用技巧:

多U多核CPU監控

在top基本視圖中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況,下麵的cpu0,cpu1,cpu2,cpu3.....cpu15共計16個邏輯cpu:再按一下數字1,則返回主頁面,顯示cpu(s)的cpu性能。

觀察上圖,伺服器有16個邏輯CPU,實際上是4個物理CPU。再按數字鍵1,就會返回到top基本視圖界面。

高亮顯示當前運行進程

敲擊鍵盤“b”(打開/關閉加亮效果),top的視圖變化如下:()

   ​  

我們發現進程id為2570的“top”進程被加亮了,top進程就是視圖第二行顯示的唯一的運行態(runing)的那個進程,可以通過敲擊“y”鍵關閉或打開運行態進程的加亮效果。

進程欄位排序欄位高亮顯示

top  -x 

註意:使用-x開啟排序高亮功能後,還需要使用-b命令給出是否高亮顯示該排序的列。           

預設進入top時,各進程是按照CPU的占用量來排序的,在下圖中進程ID為28894的java進程排在第一(cpu占用142%),進程ID為574的java進程排在第二(cpu占用16%)。

      

    敲擊鍵盤“x”(打開/關閉排序列的加亮效果,如會將當前排序行,高亮顯示),top的視圖變化如下:

      ​ 

可以看到,top預設的排序列是“%CPU”。

排序欄位: 通過”shift + >”或”shift + <”可以向右或左改變排序列(註意:該組合鍵是在開啟了top之後,運行時按下的)

下圖是按一次”shift + >”的效果圖,視圖現在已經按照%MEM來排序。

       ​  

實例2:顯示完整命令

命令:

top -c  //亞強:該行貌似與直接寫top效果一樣

輸出:

      

說明:

實例3:以批處理模式顯示程式信息(高亮顯示某些欄位,與-x結合,可以控制顯示當前排序欄位高亮)

命令:

top -b

輸出:

說明:

實例4:以累積模式顯示程式信息

命令:

top -S

輸出:

說明:

實例5:設置信息更新次數

命令:

  top -n  2

輸出:

說明:

表示更新兩次後終止更新顯示

實例6:設置信息更新時間,即間隔多少秒後更新,該參數支持浮點型數據,如top -d 0.2,每隔0.2秒刷新一次數據。

命令:

top -d 3

輸出:

說明:

表示更新周期為3秒

實例7:顯示指定的進程信息

命令:

top -p 574    //亞強:後面的數字是PID的值,即進程的id號

輸出:

說明:

     實例8:top交互命令(關於下麵需要輸入參數的命令如何返回到交互狀態初始化狀態,可以不輸入任何參數,然後按下enter即可,如果輸入參數,然後按下enter,那麼執行當前交互命令,對於其他交互動作,可以用enter確認執行,用esc取消執行)

 

在top 命令執行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了s 選項, 其中一些命令可能會被屏蔽。

h 顯示幫助畫面,給出一些簡短的命令總結說明,按任意鍵後返回到top列表界面。

k 終止一個進程。輸入pid參數+enter即可以殺死該pid對應的進程。我們可以直接按下enter返回到top界面。

i 忽略閑置和僵死進程。這是一個開關式命令。

q 退出程式,//退出top命令

r 重新安排一個進程的優先順序別

S 切換到累計模式

s 改變兩次刷新之間的延遲時間(單位為s),如果有小數,就換算成ms(比如0.1的效果是100ms)。輸入0值則系統將不斷刷新,預設值是3s(centos中)

f從當前顯示中添加或者刪除項目更改顯示內容通過 f 鍵可以選擇顯示的內容。按 f 鍵之後會顯示列的列表,按 a-z 即可顯示或隱藏對應的列,最後按回車鍵確定。

F或O:選擇當前排序欄位,按下a-z中的某個按鍵確定排序欄位,然後按下enter確認,按下esc取消。 

o或者O 改變顯示項目的順序//進入該模式後,系統用a,b,c,d,e...n標記代表每一列的表頭,我們通過按下【標記字母】,那麼該欄位後移動,按下【shift+標記字母】,則前移動。按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 A-Z 可以將相應的列向左移動。最後按回車鍵確定,按下esc取消。

l 字母l,切換顯示平均負載和啟動時間信息//top的第一行是否顯示

1 數字1,在top基本視圖中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況,下麵的cpu0,cpu1,cpu2,cpu3.....cpu15共計16個邏輯cpu:再按一下數字1,則返回主頁面,顯示cpu(s)的cpu性能。

m 切換顯示記憶體信息//top的第4,5行是否顯示

t 切換顯示進程和CPU狀態信息//top的第2,3行是否顯示

c 切換顯示命令名稱和完整命令行(亞強:(即commont欄位內容的切換,貌似顯示為請求類型與完整的該進程的觸發命令行內容之間切換)顯示整個命令行而不只是顯示命令名 ,這裡指的是command欄位的列信息,將顯示完整的開啟該進程的命令行的信息/僅僅簡略顯示來切換顯示。

M 根據駐留記憶體大小進行排序

P 根據CPU使用百分比大小進行排序

T 根據時間/累計時間進行排序

R 改變排序方式(升序/降序)

”shift + >”或”shift + <”:可以向右或左改變排序列(註意:該組合鍵是在開啟了top之後,運行時按下的)

b 當前處於運行狀態的行高亮/取消高亮(控制當前排序的行是否高亮,需要首先使用x開啟排序高亮)

x 當前處於排序欄位的列高亮/取消高亮(有時候直接按下x無效果,此時首先按一下b執行高亮顯示)

I:切換Irix/Solaris模式,在多核心的cpu系統中,%cpu列將根據上一次更新時刻到本次更新時刻每個cpu的總時間分為100份,即如果有

n個cpu核心,那麼總時間份數為n*100份。那麼每個進程的份數累加最大可以達到n*100.如果運行在Irix模式下,那麼每個進程的的%cpu欄位的值為上一次更新時刻到本次更新時刻所有cpu核心處理器分配給該進程的份數總和與n*100的比例,即此種情況是相對於全部cpu的時間份數總額的占比。如果運行在Solaris模式下,那麼每個進程的的%cpu欄位的值為上一次更新時刻到本次更新時刻所有cpu核心處理器分配給該進程的份數總和與100的比例,即此種情況是相對於每個cpu時間份數總額的占比。

將當前設置寫入~/.toprc文件中   
 

附常用操作:

top   //每隔5秒顯式所有進程的資源占用情況
top -d 2 //每隔2秒顯式所有進程的資源占用情況
top -p 12345 -p 6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源占用情況
top -d 2 -c -p 123456 //每隔2秒顯示pid是12345的進程的資源使用情況,並顯式該進程啟動的命令行參數

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 二叉搜索樹 定義 二叉查找樹(英語:Binary Search Tree),也稱為二叉搜索樹、有序二叉樹(ordered binary tree)或排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹: 若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節 ...
  • 圖中是暗黑領域,非常牛逼的技能。 背景 DDD中出現的名詞: 領域,子領域,核心域,通用域,支撐域,限界上下文,聚合,聚合根,實體,值對象 都是關鍵概念,但是又比較晦澀,在開始DDD之前,搞清楚這些關鍵概念名詞非常的重要。 那它們作用體現在哪裡呢? 領域-子領域 領域是: 從事專門活動或者事業的範圍 ...
  • #include<vector> // 包含頭文件vector ... using namespace std; // vector包含在std中,因此必須包含std::vector vector <int> vi; // create a zero-size array of int int n; ...
  • python的變數是存在作用域的,在代碼中不同位置的變數作用的範圍會有所不同,比如有的變數在整段代碼中都可以使用,有的變數卻只在函數內部使用。python中把能夠在整段代碼任意位置有效的變數稱為全局變數,只在函數內部使用的變數稱作局部變數。 全局變數: a = 520 #此時a作為全局變數 def ...
  • 1. 應用測試的介紹 一般我們在寫完代碼之後,代碼的測試是會給專門的測試人員來測試的,如果一個測試跑到你的工位上對你說,你的代碼好像有Bug,你肯定會不爽,反正我就是這樣的🙃。所以為了顯示自己的代碼質量高一點,在功能提交給測試之前,我們會自己測試一下,接下來給大家介紹一下 Spring Boot ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 當需要進行大規模查詢時(比如目前遇到的情形:查詢某個省所有發債企業的YY評級分數),人工查詢顯然太過費時,那就寫個爬蟲吧。 由於該爬蟲實在過於簡單,就只簡單概述下。 一、請求 ...
  • 幾乎所有語言的第一個程式都是"HelloWorld" 就像所有單片機初學者一樣,點亮第一個LED燈開始 而起初我們編寫/學習Java程式,都是通過記事本來編寫的,這裡推薦一個Editplus(提取碼:qq1t)記事本文件給大家 這裡要分清楚一個概念,所有Java源程式的尾碼都是*.Java,可以新建 ...
  • 對於動漫愛好者來說,海賊王、火影、死神三大動漫神作你肯定肯定不陌生了。小編身邊很多的同事仍然深愛著這些經典神作,可見“中毒”至深。今天小編利用Python大法帶大家分析一下這些神作,看看這些神作到底在講些神馬。 人生苦短,我用Python。小編利用Python網路爬蟲爬取了豆瓣網,將網站上關於這三部 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...