文章目錄
1. Linux常用基本命令 檔案管理 用戶管理 行程管理 軟體倉庫搭建 遠程登陸服務器 檔案傳輸 定時任務/延遲任務
2. C++基礎知識 面向物件的四大特征 C++和C語言有什么不同 new/delete 和 malloc/free 的區別 類與結構體的區別 建構式和解構式 拷貝建構式和賦值運算子多載 指標和參考的區別 幾種關鍵字 繼承順序和構造順序 虛函式 多載和覆寫的區別 定義和宣告的區別 記憶體的存盤內容 記憶體泄漏和記憶體溢位的區別 vector的記憶體增長問題
3. Linux系統編程
1. Linux常用基本命令
檔案管理
命令 功能 touch 創建檔案 mkdir 創建目錄 rm 洗掉檔案 / 目錄 vim 檔案編輯 cat 檔案查看 cp 復制 mv 移動 file 查看檔案型別 wc 檔案容量 pwd 當前位置 cd 切換到指定目錄下 ls 顯示指定目錄下的內容
用戶管理
命令 功能 id 查當前id su 切換當前用戶 usermod 修改用戶資訊 passwd 設定密碼
/etc/passwd 用戶檔案位置 /etc/group 用戶組檔案位置 /etc/shadow 認證資訊檔案位置
行程管理
命令 功能 ps 查看行程 pgrep 指定顯示 top 動態查看 nice 更改優先級 renice 更改優先級狀態 Ctrl+z 當前行程打入后臺 jobs 查看后臺行程 bg 調到前臺(不占用shell) fg 調到前臺 kill 關閉行程 systemctl start sshd 開啟sshd服務 w -i 顯示誰登陸過last
軟體倉庫搭建
下載安裝包,hostnamectl 查看系統版本 創建目錄,mount 掛載鏡像 cd /etc/yum.repos.d/ 下建檔案,名以repo結尾,兩個倉庫AppStream和BaseOS dnf install gcc 安裝
dnf list 列出軟體資訊 dnf install 安裝軟體 yumdownloader httpd -destdir=/mnt 下載倉庫中的安裝包到目錄
遠程登陸服務器
shh -l root 192.168.0.10 連接
檔案傳輸
上傳 scp 檔案名 root @ 192.168.0.10:/root/路徑 下載 scp root @ 192.168.0.10:/root/路徑 有的不復制,沒有的復制 rsync -lr
打包: tar cf 檔案 壓縮: zip / gzip / bzip / xz 解壓: unzip / gunzip 直接打包: tar zcf / tar zxf
定時任務/延遲任務
命令 功能 at 01:52 設定延時任務 at -c 1 查看任務 at -r 1 取消任務 mail 查看輸出
白名單: /etc/at.allow 黑名單: /etc/at.deny
crontab -e 定時任務(crond服務) 秒 分 時 天 月 周
系統級任務: 進目錄 cd /etc/cron.d 寫檔案
2. C++基礎知識
面向物件的四大特征
抽象:抽出具體事物的普遍特性; 封裝:把資料和處理都包在一起; 繼承:可以給別的函式使用; 多型:同一個函式的多種形態,
C++和C語言有什么不同
序號 方向 C C++ 1 面向 面向程序——解決問題 面向物件——找誰解決 2 頭檔案 #include<stdio.h> #include<iostream> 3 函式多載 函式名不允許相同 函式名相同但其他引數不同,則兩個函式不同 4 命名空間 無此概念 using namespace std; 5 輸入輸出 需要寫變數型別 cin/cout 不用寫變數型別,可以自動識別 6 動態記憶體 malloc / free new / delete
new/delete 和 malloc/free 的區別
屬性:new是關鍵字,需要編譯器支持;malloc是庫函式,需要頭檔案支持; 引數:new申請記憶體時不用指定記憶體塊的大小,編譯器會根據型別計算; 回傳型別:new回傳物件型別指標;malloc回傳void*,需要強制轉換; 分配失敗:new會拋出bas_alloc例外;malloc分配失敗會回傳NULL; 記憶體區域:new會在自由存盤區申請記憶體;malloc會在堆上申請記憶體,
類與結構體的區別
序號 方向 結構體 類 1 存盤位置 堆疊存盤 堆存盤 2 公有私有 默認public 默認private 3 保護宣告 不能宣告protected 可以宣告protected 4 建構式 不能宣告默認的建構式 不限制宣告建構式 5 型別不同 值型別 參考型別
當函式引數或區域變數與成員變數重名時,就必須用 this
建構式和解構式
建構式的特點:
創建物件時呼叫 ; new可呼叫; 必須與類同名; 沒有回傳值; 可以有多個建構式,
默認建構式:如果沒有創建建構式就會有一個隱藏的不帶引數的建構式, 作用:
建立標識; 開辟記憶體空間; 完成成員初始化,
解構式的特點:
離開作用域時呼叫; delete可呼叫; 與類同名并加 ~ ; 沒有引數; 沒有回傳值; 只能有一個解構式,
拷貝建構式和賦值運算子多載
拷貝建構式:防止二次釋放
類之間直接復制; 函式值傳遞; 作為回傳值傳遞,
賦值運算子多載: stack s; stack t; t = s;
指標和參考的區別
序號 指標 參考 1 指向一塊記憶體,內容是地址 某塊記憶體的別名 2 定義后還可以變 只能在定義時初始化(必須初始化) 3 需要解參考 不需要解參考 4 sizeof指標是指標大小 sizeof參考是對應型別大小
幾種關鍵字
友元宣告friend: 其他類或外部函式要訪問類中私有成員 特點:單向性;不可傳遞性,
const限定符: 變數:只讀,不可修改;定義時必須初始化; #define宏定義:預處理時替換,沒有型別,不分配記憶體,const相反, 指標:指標常量,不可修改地址; 參考:別名; 函式:非const型別引數不接受const變數; 類:const成員變數,要初始化;const成員函式,表示不修改成員變數
static限定符: 變數:靜態變數,改變作用域和生存周期; 函式:只源檔案內部使用的函式; 成員變數:物件共享變數; 成員函式:類提供的函式,靜態成員物件的介面,
行內函式inline:如同整個函式體替換在主函式中
inline是放在函式體前才能宣告為行內函式; 類中成員函式默認為內斂函式; 編譯器會決定是否為行內函式,
繼承順序和構造順序
繼承順序:
<style>#mermaid-svg-BHpMBC6v6Wn5r44N .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .label text{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .node rect,#mermaid-svg-BHpMBC6v6Wn5r44N .node circle,#mermaid-svg-BHpMBC6v6Wn5r44N .node ellipse,#mermaid-svg-BHpMBC6v6Wn5r44N .node polygon,#mermaid-svg-BHpMBC6v6Wn5r44N .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-BHpMBC6v6Wn5r44N .node .label{text-align:center;fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .node.clickable{cursor:pointer}#mermaid-svg-BHpMBC6v6Wn5r44N .arrowheadPath{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-BHpMBC6v6Wn5r44N .flowchart-link{stroke:#333;fill:none}#mermaid-svg-BHpMBC6v6Wn5r44N .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-BHpMBC6v6Wn5r44N .edgeLabel rect{opacity:0.9}#mermaid-svg-BHpMBC6v6Wn5r44N .edgeLabel span{color:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-BHpMBC6v6Wn5r44N .cluster text{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-BHpMBC6v6Wn5r44N .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-BHpMBC6v6Wn5r44N text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-BHpMBC6v6Wn5r44N .actor-line{stroke:grey}#mermaid-svg-BHpMBC6v6Wn5r44N .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-BHpMBC6v6Wn5r44N #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .sequenceNumber{fill:#fff}#mermaid-svg-BHpMBC6v6Wn5r44N #sequencenumber{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N #crosshead path{fill:#333;stroke:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .messageText{fill:#333;stroke:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-BHpMBC6v6Wn5r44N .labelText,#mermaid-svg-BHpMBC6v6Wn5r44N .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-BHpMBC6v6Wn5r44N .loopText,#mermaid-svg-BHpMBC6v6Wn5r44N .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-BHpMBC6v6Wn5r44N .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-BHpMBC6v6Wn5r44N .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-BHpMBC6v6Wn5r44N .noteText,#mermaid-svg-BHpMBC6v6Wn5r44N .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-BHpMBC6v6Wn5r44N .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-BHpMBC6v6Wn5r44N .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-BHpMBC6v6Wn5r44N .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-BHpMBC6v6Wn5r44N .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .section{stroke:none;opacity:0.2}#mermaid-svg-BHpMBC6v6Wn5r44N .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-BHpMBC6v6Wn5r44N .section2{fill:#fff400}#mermaid-svg-BHpMBC6v6Wn5r44N .section1,#mermaid-svg-BHpMBC6v6Wn5r44N .section3{fill:#fff;opacity:0.2}#mermaid-svg-BHpMBC6v6Wn5r44N .sectionTitle0{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .sectionTitle1{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .sectionTitle2{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .sectionTitle3{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-BHpMBC6v6Wn5r44N .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .grid path{stroke-width:0}#mermaid-svg-BHpMBC6v6Wn5r44N .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-BHpMBC6v6Wn5r44N .task{stroke-width:2}#mermaid-svg-BHpMBC6v6Wn5r44N .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .taskText:not([font-size]){font-size:11px}#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-BHpMBC6v6Wn5r44N .task.clickable{cursor:pointer}#mermaid-svg-BHpMBC6v6Wn5r44N .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-BHpMBC6v6Wn5r44N .taskText0,#mermaid-svg-BHpMBC6v6Wn5r44N .taskText1,#mermaid-svg-BHpMBC6v6Wn5r44N .taskText2,#mermaid-svg-BHpMBC6v6Wn5r44N .taskText3{fill:#fff}#mermaid-svg-BHpMBC6v6Wn5r44N .task0,#mermaid-svg-BHpMBC6v6Wn5r44N .task1,#mermaid-svg-BHpMBC6v6Wn5r44N .task2,#mermaid-svg-BHpMBC6v6Wn5r44N .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutside0,#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutside2{fill:#000}#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutside1,#mermaid-svg-BHpMBC6v6Wn5r44N .taskTextOutside3{fill:#000}#mermaid-svg-BHpMBC6v6Wn5r44N .active0,#mermaid-svg-BHpMBC6v6Wn5r44N .active1,#mermaid-svg-BHpMBC6v6Wn5r44N .active2,#mermaid-svg-BHpMBC6v6Wn5r44N .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-BHpMBC6v6Wn5r44N .activeText0,#mermaid-svg-BHpMBC6v6Wn5r44N .activeText1,#mermaid-svg-BHpMBC6v6Wn5r44N .activeText2,#mermaid-svg-BHpMBC6v6Wn5r44N .activeText3{fill:#000 !important}#mermaid-svg-BHpMBC6v6Wn5r44N .done0,#mermaid-svg-BHpMBC6v6Wn5r44N .done1,#mermaid-svg-BHpMBC6v6Wn5r44N .done2,#mermaid-svg-BHpMBC6v6Wn5r44N .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-BHpMBC6v6Wn5r44N .doneText0,#mermaid-svg-BHpMBC6v6Wn5r44N .doneText1,#mermaid-svg-BHpMBC6v6Wn5r44N .doneText2,#mermaid-svg-BHpMBC6v6Wn5r44N .doneText3{fill:#000 !important}#mermaid-svg-BHpMBC6v6Wn5r44N .crit0,#mermaid-svg-BHpMBC6v6Wn5r44N .crit1,#mermaid-svg-BHpMBC6v6Wn5r44N .crit2,#mermaid-svg-BHpMBC6v6Wn5r44N .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-BHpMBC6v6Wn5r44N .activeCrit0,#mermaid-svg-BHpMBC6v6Wn5r44N .activeCrit1,#mermaid-svg-BHpMBC6v6Wn5r44N .activeCrit2,#mermaid-svg-BHpMBC6v6Wn5r44N .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-BHpMBC6v6Wn5r44N .doneCrit0,#mermaid-svg-BHpMBC6v6Wn5r44N .doneCrit1,#mermaid-svg-BHpMBC6v6Wn5r44N .doneCrit2,#mermaid-svg-BHpMBC6v6Wn5r44N .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-BHpMBC6v6Wn5r44N .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-BHpMBC6v6Wn5r44N .milestoneText{font-style:italic}#mermaid-svg-BHpMBC6v6Wn5r44N .doneCritText0,#mermaid-svg-BHpMBC6v6Wn5r44N .doneCritText1,#mermaid-svg-BHpMBC6v6Wn5r44N .doneCritText2,#mermaid-svg-BHpMBC6v6Wn5r44N .doneCritText3{fill:#000 !important}#mermaid-svg-BHpMBC6v6Wn5r44N .activeCritText0,#mermaid-svg-BHpMBC6v6Wn5r44N .activeCritText1,#mermaid-svg-BHpMBC6v6Wn5r44N .activeCritText2,#mermaid-svg-BHpMBC6v6Wn5r44N .activeCritText3{fill:#000 !important}#mermaid-svg-BHpMBC6v6Wn5r44N .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-BHpMBC6v6Wn5r44N g.classGroup text .title{font-weight:bolder}#mermaid-svg-BHpMBC6v6Wn5r44N g.clickable{cursor:pointer}#mermaid-svg-BHpMBC6v6Wn5r44N g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-BHpMBC6v6Wn5r44N g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-BHpMBC6v6Wn5r44N .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-BHpMBC6v6Wn5r44N .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-BHpMBC6v6Wn5r44N .dashed-line{stroke-dasharray:3}#mermaid-svg-BHpMBC6v6Wn5r44N #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N .commit-id,#mermaid-svg-BHpMBC6v6Wn5r44N .commit-msg,#mermaid-svg-BHpMBC6v6Wn5r44N .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-BHpMBC6v6Wn5r44N g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-BHpMBC6v6Wn5r44N g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-BHpMBC6v6Wn5r44N g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-BHpMBC6v6Wn5r44N .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-BHpMBC6v6Wn5r44N .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-BHpMBC6v6Wn5r44N .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-BHpMBC6v6Wn5r44N .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-BHpMBC6v6Wn5r44N .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-BHpMBC6v6Wn5r44N .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-BHpMBC6v6Wn5r44N .edgeLabel text{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-BHpMBC6v6Wn5r44N .node circle.state-start{fill:black;stroke:black}#mermaid-svg-BHpMBC6v6Wn5r44N .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-BHpMBC6v6Wn5r44N #statediagram-barbEnd{fill:#9370db}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-state .divider{stroke:#9370db}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-BHpMBC6v6Wn5r44N .note-edge{stroke-dasharray:5}#mermaid-svg-BHpMBC6v6Wn5r44N .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-BHpMBC6v6Wn5r44N .error-icon{fill:#522}#mermaid-svg-BHpMBC6v6Wn5r44N .error-text{fill:#522;stroke:#522}#mermaid-svg-BHpMBC6v6Wn5r44N .edge-thickness-normal{stroke-width:2px}#mermaid-svg-BHpMBC6v6Wn5r44N .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-BHpMBC6v6Wn5r44N .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-BHpMBC6v6Wn5r44N .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-BHpMBC6v6Wn5r44N .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-BHpMBC6v6Wn5r44N .marker{fill:#333}#mermaid-svg-BHpMBC6v6Wn5r44N .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style>
<style>#mermaid-svg-BHpMBC6v6Wn5r44N {
color: rgba(0, 0, 0, 0.75);
font: ;
}</style>
多重繼承
菱形繼承
使用虛繼承
構造順序:
虛函式
虛函式: 父子類有相同函式;如果呼叫父類那就呼叫父類自己的函式;如果呼叫子類,看子類有沒有virtual,沒有呼叫父類中的函式,有則呼叫子類中的函式, 本質:虛函式表 純虛函式:定義抽象表virtual int GetLength() const = 0;
多載和覆寫的區別
序號 多載 覆寫 1 函式名相同,但其他引數有不同 函式名和所有的引數都相同 2 同一個類中不同成員函式之間的關系 父類與子類中不同成員函式的關系 3 根據參考串列決定 根據物件型別決定 4 在編譯時確定呼叫 在執行時確定呼叫
定義和宣告的區別
定義:變數分配存盤空間,為變數指定初始值,只有一個定義; 宣告:向程式表明變數的型別和名字,
記憶體的存盤內容
記憶體泄漏和記憶體溢位的區別
記憶體泄漏: 在動態申請記憶體空間時,對指標申請了空間,但使用完后未進行釋放,指標變為野指標,形成記憶體泄漏, 記憶體溢位: 記憶體泄漏的堆積會導致記憶體溢位,記憶體溢位是你要的記憶體空間超過系統給分配的空間,
vector的記憶體增長問題
vector的記憶體增長問題,其中 size() 和 capacity() 問題,vector的記憶體分配是按照2的倍數分配記憶體的,當前容量對插入元素不夠時,分配一塊新的記憶體(2倍),然后復制舊記憶體,釋放舊記憶體,會多次涉及拷貝建構式和解構式,
3. Linux系統編程
行程和執行緒的區別
序號 方向 行程 執行緒 1 定義 程式的執行程序 執行的每一個任務 2 包含 包含多個執行緒 只屬于一個執行緒(本身) 3 地址 有自己的地址空間 沒有地址空間,他包含在行程的地址空間中 4 資源 消耗更多的計算機資源 開銷代價更小 5 共享 不同行程間資料很難共享 同一行程下不同執行緒資料容易共享
行程
fork() 父子行程:父行程回傳值是子行程的pid;子行程回傳值是0,
特點:
并發進行:兩行程同時跑,互不干擾; 相同但獨立的地址空間:系統會把虛擬記憶體拷貝一份出來,兩行程名自有堆和堆疊; 加static地址會短,靜態變數在資料區,地址較小,
休眠:sleep(1)
僵尸行程:子行程退出,父行程未獲得子行程狀態資訊;在父行程呼叫wait;有害 孤兒行程:父行程先于子行程退出;init行程為新父行程;無害
執行緒
比行程更小的獨立運行的基本單位,是并發 的;
執行緒標識: pthread_self() 創建: pthread_creat(id,NULL,函式,函參)
執行緒共用全域變數 也共用區域變數
使用執行緒合并 :pthread_join(id,返值) 主行程等待子行程跑完
鎖
信號量: 讓父行程和子行程有序列印 sem_wait(&sem) 上鎖 sem_post(&sem) 解鎖
互斥量: pthread_mutex 定義互斥量 pthread_mutex_lock(&互斥量) 加鎖 pthread_mutex_unlock(&互斥量) 解鎖
信號量 互斥量 物件:執行緒和行程 物件:執行緒 可由不同執行緒完成 加解鎖由同一執行緒使用 用于執行緒同步 用于執行緒互斥
條件變數: 完成條件后再執行執行緒 pthread_cond_t 條件變數 = PTHREAD_COND_INITIALIZER; 條件等待:pthread_cond_wait(&條件變數,&互斥量) 單個激活:pthread_cond_signal(&條件變數)
讀寫鎖: 讀取程序共同讀,提高作業效率 讀鎖:讀程序中其他讀也可以進行讀操作 寫鎖:寫程序中不能進行其他操作
HTTP網路編程
HTTP是應用層上的協議,HTTP是基于TCP/IP通信協議來傳遞資料,可以使用建立socket的方式來監聽某一埠(8080埠),來實驗這個web服務器,基于socket來實作客戶端和服務器的交流,
HTTP協議是超文本傳輸協議,通過http請求可以訪問服務器上的HTML檔案、圖片等,
請求報文: 客 => 服
GET是客戶端把密碼或檢索資訊發給服務器,發給URL
回應報文: 服 => 客
注意:文本格式去掉,可回應各種型別的檔案
狀態碼:
狀態碼 對應英文 意義 200 OK 請求成功 301 Moved Permanently 資源被永久轉移到其他URL 404 Not Found 請求資源不存在 500 Internal Server Error 服務器內部錯誤,無法完成請求
HTTP服務器
啟動服務器; 啟動客戶端(網頁)輸入 http://127.0.0.1:8080,發送請求報文給服務器,服務器端收到報文; 服務器端向服務器發送回應報文,客戶端(網頁)資訊欄可以看到報文首部資訊,頁面上可以看到報文主題,