主頁 > 後端開發 > 【必須收藏】別再亂找TiDB 集群部署教程了,這篇保姆級教程來幫你!!| 博學谷狂野架構師

【必須收藏】別再亂找TiDB 集群部署教程了,這篇保姆級教程來幫你!!| 博學谷狂野架構師

2023-03-28 07:32:26 後端開發

TiDB 基礎使用

Database of Databases - TiDB

TiDB dashboard使用

TiDB Dashboard 是 TiDB 自 4.0 版本起提供的圖形化界面,可用于監控及診斷 TiDB 集群,TiDB Dashboard 內置于 TiDB 的 PD 組件中,無需獨立部署,

image-20210309181206197

集群概況

查看集群整體 QPS 數值、執行耗時、消耗資源最多的幾類 SQL 陳述句等概況資訊,

該頁面顯示了整個集群的概況,包含以下資訊:

  • 整個集群的 QPS
  • 整個集群的查詢延遲
  • 最近一段時間內累計耗時最多的若干 SQL 陳述句
  • 最近一段時間內運行時間超過一定閾值的慢查詢
  • 各個實體的節點數和狀態
  • 監控及告警資訊
QPS

該區域顯示最近一小時整個集群的每秒成功和失敗查詢數量

image-20210310134900484

注意:該功能僅在部署了 Prometheus 監控組件的集群上可用,未部署監控組件的情況下會顯示為失敗,

延遲

該區域顯示最近一小時整個集群中 99.9%、99% 和 90% 查詢的延遲:

image-20210310134921004

注意:該功能僅在部署了 Prometheus 監控組件的集群上可用,未部署監控組件的情況下會顯示為失敗,

Top SQL 陳述句

該區域顯示最近一段時間內整個群集中累計耗時最長的 10 類 SQL 陳述句,查詢引數不一樣但結構一樣的 SQL 會歸為同一類 SQL 陳述句,在同一行中顯示

image-20210310135140342

注意:該功能僅在開啟了 SQL 陳述句分析功能的集群上可用,

最近的慢查詢

該區域默認顯示最近 30 分鐘內整個集群中最新的 10 條慢查詢

image-20210310135240284

默認情況下運行時間超過 300ms 的SQL 查詢即會被計為慢查詢并顯示在該表格中,

集群資訊

該頁面上允許用戶查看整個集群中 TiDB、TiKV、PD、TiFlash 組件的運行狀態及其所在主機的運行狀態,

實體串列

實體串列列出了該集群中 TiDB、TiKV、PD 和 TiFlash 組件所有實體的概況資訊,

image-20210310135617023

表格列解釋

表格包含以下列:

  • 地址:實體地址
  • 狀態:實體的運行狀態
  • 啟動時間:實體的啟動時間
  • 版本:實體版本號
  • 部署路徑:實體二進制檔案所在目錄路徑
  • Git 哈希值:實體二進制對應的 Git 哈希值
實體狀態解釋

實體的運行狀態有:

  • 在線 (Up):實體正常運行,
  • 離線 (Down) 或無法訪問 (Unreachable):實體未啟動或對應主機存在網路問題,
  • 已縮容下線 (Tombstone):實體上的資料已被完整遷出并縮容完畢,僅 TiKV 或 TiFlash 實體存在該狀態,
  • 下線中 (Offline):實體上的資料正在被遷出并縮容,僅 TiKV 或 TiFlash 實體存在該狀態,
  • 未知 (Unknown):未知的實體運行狀態,
主機串列

主機串列列出了該集群中 TiDB、TiKV、PD 和 TiFlash 組件所有實體對應主機的運行情況,

image-20210310135820510

表格列解釋

表格包含以下列:

  • 地址:主機 IP 地址
  • CPU:主機 CPU 邏輯核心數
  • CPU 使用率:主機當前 1 秒的用戶態和內核態 CPU 使用率
  • 物理記憶體:主機總計的物理記憶體大小
  • 記憶體使用率:主機當前記憶體使用率
  • 部署磁盤:主機上運行實體所在磁盤的檔案系統和磁盤掛載路徑
  • 磁盤使用率:主機上運行實體所在磁盤的空間使用率
SQL陳述句分析

該頁面可以查看所有 SQL 陳述句在集群上執行情況,常用于分析總耗時或單次耗時執行耗時較長的 SQL 陳述句,

執行串列頁

在該頁面中,結構一致的 SQL 查詢(即使查詢引數不一致)都會被歸為同一個 SQL 陳述句,例如 SELECT * FROM employee WHERE id IN (1, 2, 3)select * from EMPLOYEE where ID in (4, 5) 都屬于同一 SQL 陳述句 select * from employee where id in (...)

image-20210310140600074

執行詳情頁面

在串列中點擊任意一行可以進入該 SQL 陳述句的詳情頁查看更詳細的資訊,這此資訊包括三大部分:

  • SQL 陳述句概況:包括 SQL 模板,SQL 模板 ID,當前查看的時間范圍,執行計劃個數以及執行所在的資料庫(下圖區域 1)
  • 執行計劃串列:如果該 SQL 陳述句有多個執行計劃,則顯示該串列,可以選擇不同的執行計劃,在串列下方會顯示選中的執行計劃詳情;如果只有一個執行計劃,則該串列不顯示(下圖區域 2)
  • 執行計劃詳情:顯示選中的執行計劃的詳細資訊,具體見下一小節(下圖區域 3)

image-20210310140919328

慢查詢

該頁面上能檢索和查看集群中所有慢查詢,

默認情況下,執行時間超過 300ms 的 SQL 查詢就會被視為慢查詢,被記錄到慢查詢日志中,并可通過本功能對記錄到的慢查詢進行查詢,可調整 tidb_slow_log_threshold SESSION 變數或 TiDB slow-threshold 引數調整慢查詢閾值,

若關閉了慢查詢日志,則本功能不可用,慢查詢日志默認開啟,可通過修改 TiDB 配置 enable-slow-log 開啟或禁用,

慢查詢串列頁

可按時間范圍、慢查詢陳述句關聯的資料庫、SQL 關鍵字、SQL 型別、顯示的慢查詢陳述句數量等條件過濾,篩選慢查詢句,如下所示,默認顯示 30 分鐘內最近 100 條慢查詢,

image-20210310141242904

查看執行詳情

在串列中點擊任意一行可以顯示該慢查詢的詳細執行資訊,包含:

  • SQL:慢查詢 SQL 文本(
  • 執行計劃:慢查詢的執行計劃
  • 其他分類好的 SQL 執行資訊

image-20210310141345490

點擊展開 (Expand) 鏈接可以展開相應項的完整內容,點擊復制 (Copy) 鏈接可以復制完整內容到剪貼板,

集群診斷頁面

集群診斷是在指定的時間范圍內,對集群可能存在的問題進行診斷,并將診斷結果和一些集群相關的負載監控資訊匯總成一個診斷報告,診斷報告是網頁形式,通過瀏覽器保存后可離線瀏覽和傳閱,

生成診斷報告

如果想對一個時間范圍內的集群進行診斷,查看集群的負載等情況,可以使用以下步驟來生成一段時間范圍的診斷報告:

  1. 設定區間的開始時間
  2. 設定區間長度,例如 10 min ,
  3. 點擊開始,

建議生成報告的時間范圍在 1 min ~ 60 min 內,目前不建議生成超過 1 小時范圍的報告,

image-20210310141645985

點擊開始 (start) 后,會看到以下界面,生成進度 (progress) 是生成報告的進度條,生成報告完成后,點擊查看報告 (View Full Report) 即可,

image-20210310141816552

TIDB集群部署

環境要求

作業系統建議配置

TiDB 作為一款開源分布式 NewSQL 資料庫,可以很好的部署和運行在 Intel 架構服務器環境、ARM 架構的服務器環境及主流虛擬化環境,并支持絕大多數的主流硬體網路,作為一款高性能資料庫系統,TiDB 支持主流的 Linux 作業系統環境,

Linux 作業系統平臺 版本
Red Hat Enterprise Linux 7.3 及以上
CentOS 7.3 及以上
Oracle Enterprise Linux 7.3 及以上
Ubuntu LTS 16.04 及以上

服務器建議配置

TiDB 支持部署和運行在 Intel x86-64 架構的 64 位通用硬體服務器平臺或者 ARM 架構的硬體服務器平臺,對于開發,測驗,及生產環境的服務器硬體配置(不包含作業系統 OS 本身的占用)有以下要求和建議:

開發及測驗環境
組件 CPU 記憶體 本地存盤 網路 實體數量(最低要求)
TiDB 8 核+ 16 GB+ 無特殊要求 千兆網卡 1(可與 PD 同機器)
PD 4 核+ 8 GB+ SAS, 200 GB+ 千兆網卡 1(可與 TiDB 同機器)
TiKV 8 核+ 32 GB+ SSD, 200 GB+ 千兆網卡 3
TiFlash 32 核+ 64 GB+ SSD, 200 GB+ 千兆網卡 1
TiCDC 8 核+ 16 GB+ SAS, 200 GB+ 千兆網卡 1
生產環境
組件 CPU 記憶體 硬碟型別 網路 實體數量(最低要求)
TiDB 16 核+ 32 GB+ SAS 萬兆網卡(2 塊最佳) 2
PD 4核+ 8 GB+ SSD 萬兆網卡(2 塊最佳) 3
TiKV 16 核+ 32 GB+ SSD 萬兆網卡(2 塊最佳) 3
TiFlash 48 核+ 128 GB+ 1 or more SSDs 萬兆網卡(2 塊最佳) 2
TiCDC 16 核+ 64 GB+ SSD 萬兆網卡(2 塊最佳) 2
監控 8 核+ 16 GB+ SAS 千兆網卡 1

環境準備

準備一臺部署主機,確保其軟體滿足需求:

  • 推薦安裝 CentOS 7.3 及以上版本
  • Linux 作業系統開放外網訪問,用于下載 TiDB 及相關軟體安裝包

最小規模的 TiDB 集群拓撲

實體 個數 IP 配置
TiKV 3 192.168.64.146 避免埠和目錄沖突
TiDB 1 192.168.64.146 默認埠 全域目錄配置
PD 1 192.168.64.146 默認埠 全域目錄配置
TiFlash 1 192.168.64.146 默認埠 全域目錄配置
Monitoring & Grafana 1 192.168.64.146 默認埠 全域目錄配置

安裝TiUP

什么是TiUP

從 TiDB 4.0 版本開始,TiUP 作為新的工具,承擔著包管理器的角色,管理著 TiDB 生態下眾多的組件,如 TiDB、PD、TiKV 等,用戶想要運行 TiDB 生態中任何組件時,只需要執行 TiUP 一行命令即可,相比以前,極大地降低了管理難度,

安裝TiUP組件

使用普通用戶登錄中控機,以 tidb 用戶為例,后續安裝 TiUP 及集群管理操作均通過該用戶完成

TiUP 安裝程序十分簡潔,無論是 Darwin 還是 Linux 作業系統,執行一行命令即可安裝成功:

COPYcurl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

該命令將 TiUP 安裝在 $HOME/.tiup 檔案夾下,之后安裝的組件以及組件運行產生的資料也會放在該檔案夾下,同時,它還會自動將 $HOME/.tiup/bin 加入到 Shell Profile 檔案的 PATH 環境變數中,這樣你就可以直接使用 TiUP 了,

image-20210308095820951

配置TiUP環境

重新宣告全域環境變數

COPYsource .bash_profile
檢查TiUP 工具是否安裝
COPYwhich tiup

image-20210308100108540

安裝 cluster 組件
COPYtiup cluster

image-20210308100218193

升級cluster組件

如果機器已經安裝 TiUP cluster,需要更新軟體版本

COPYtiup update --self && tiup update cluster

預期輸出 “Update successfully!” 字樣,

image-20210308100305454

編輯部署檔案

請根據不同的集群拓撲,編輯 TiUP 所需的集群初始化組態檔,

常見的部署場景
最小拓撲架構

最基本的集群拓撲,包括 tidb-server、tikv-server、pd-server,適合 OLTP 業務,

增加 TiFlash 拓撲架構

包含最小拓撲的基礎上,同時部署 TiFlash,TiFlash 是列式的存盤引擎,已經逐步成為集群拓撲的標配,適合 Real-Time HTAP 業務,

增加 TiCDC 拓撲架構

包含最小拓撲的基礎上,同時部署 TiCDC,TiCDC 是 4.0 版本開始支持的 TiDB 增量資料同步工具,支持多種下游 (TiDB/MySQL/MQ),相比于 TiDB Binlog,TiCDC 有延遲更低、天然高可用等優點,在部署完成后,需要啟動 TiCDC,通過 cdc cli 創建同步任務,

增加 TiDB Binlog 拓撲架構

包含最小拓撲的基礎上,同時部署 TiDB Binlog,TiDB Binlog 是目前廣泛使用的增量同步組件,可提供準實時備份和同步功能,

增加 TiSpark 拓撲架構

包含最小拓撲的基礎上,同時部署 TiSpark 組件,TiSpark 是 PingCAP 為解決用戶復雜 OLAP 需求而推出的產品,TiUP cluster 組件對 TiSpark 的支持目前為實驗性特性,

混合部署拓撲架構

適用于單臺機器,混合部署多個實體的情況,也包括單機多實體,需要額外增加目錄、埠、資源配比、label 等配置,

單機極簡部署

部署主機軟體和環境要求:

  • 部署需要使用部署主機的 root 用戶及密碼
  • 部署主機關閉防火墻或者開放 TiDB 集群的節點間所需埠
單機極簡拓撲
實體 IP 開放埠
grafana 192.168.64.152 3000
pd 192.168.64.152 2379/2380
prometheus 192.168.64.152 9090
tidb 192.168.64.152 4000/10080
tiflash 192.168.64.152 9000/8123/3930/20170/20292/8234
tikv 192.168.64.152 20160/20180
tikv 192.168.64.152 20161/20181
tikv 192.168.64.152 20162/20182
編輯組態檔

按下面的配置模板,編輯組態檔,命名為 topo.yaml

  • user: "tidb":表示通過 tidb 系統用戶(部署會自動創建)來做集群的內部管理,默認使用 22 埠通過 ssh 登錄目標機器
  • replication.enable-placement-rules:設定這個 PD 引數來確保 TiFlash 正常運行
  • host:設定為本部署主機的 IP
COPY# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
 user: "tidb"
 ssh_port: 22
 deploy_dir: "/tidb-deploy"
 data_dir: "/tidb-data"

# # Monitored variables are applied to all the machines.
monitored:
 node_exporter_port: 9100
 blackbox_exporter_port: 9115

server_configs:
 tidb:
   log.slow-threshold: 300
 tikv:
   readpool.storage.use-unified-pool: false
   readpool.coprocessor.use-unified-pool: true
 pd:
   replication.enable-placement-rules: true
   replication.location-labels: ["host"]
 tiflash:
   logger.level: "info"

pd_servers:
 - host: 192.168.64.146

tidb_servers:
 - host: 192.168.64.146

tikv_servers:
 - host: 192.168.64.146
   port: 20160
   status_port: 20180
   config:
     server.labels: { host: "logic-host-1" }

 - host: 192.168.64.146
   port: 20161
   status_port: 20181
   config:
     server.labels: { host: "logic-host-2" }

 - host: 192.168.64.146
   port: 20162
   status_port: 20182
   config:
     server.labels: { host: "logic-host-3" }

tiflash_servers:
 - host: 192.168.64.146

monitoring_servers:
 - host: 192.168.64.146

grafana_servers:
 - host: 192.168.64.146

執行集群部署命令

命令格式

COPYtiup cluster deploy <cluster-name> <tidb-version> ./topo.yaml --user root -p
引數解釋
  • 引數 <cluster-name> 表示設定集群名稱
  • 引數 <tidb-version> 表示設定集群版本,可以通過 tiup list tidb 命令來查看當前支持部署的 TiDB 版本
  • 引數: --user root通過 root 用戶登錄到目標主機完成集群部署,該用戶需要有 ssh 到目標機器的權限,并且在目標機器有 sudo 權限,也可以用其他有 ssh 和 sudo 權限的用戶完成部署,

檢查TiDB最新版本

可以通過執行 tiup list tidb 來查看 TiUP 支持的版本

COPYtiup list tidb

經過執行發現 最新可用的TiDB版本是 v4.0.11

執行部署命令

COPYtiup cluster deploy tidb-cluster 4.0.11 ./topo.yaml --user root -p

下面輸入y繼續后輸入密碼進行安裝界面

image-20210308140623236

進入安裝界面,等待安裝即可

image-20210308102532412

如果出現deployed successfully表示部署成功,集群名稱是tidb-cluster

image-20210308103047705

啟動集群

COPYtiup cluster start tidb-cluster

image-20210308103329722

查看節點狀態

COPYtiup cluster display tidb-cluster

所有節點都是Up狀態說明都已經啟動就緒了

image-20210309113426102

測驗TiDB集群

Mysql連接集群

TiDB的連接埠默認是4000, 密碼是空,可用使用Mysql客戶端以及第三方工具進行連接

安裝MySql客戶端
COPYyum -y install mysql
MySql客戶端連接

訪問 TiDB 資料庫,密碼為空

COPYmysql -h 192.168.64.146 -P 4000 -u root

image-20210308104058321

第三方客戶端訪問Mysql

使用SQLyog訪問TiDB

創建TiDB連接

image-20210308104229510

連接后就可以操作資料庫了

image-20210308104434635

訪問Grafana監控

通過 http://{grafana-ip}:3000 訪問集群 Grafana 監控頁面,默認用戶名和密碼均為 admin,

image-20210308104706041

訪問Dashboard

通過 http://{pd-ip}:2379/dashboard 訪問集群 TiDB Dashboard監控頁面,默認用戶名為 root,密碼為空,

image-20210308104829297

查看集群串列

COPYtiup cluster list

image-20210308110936945

查看集群拓撲

COPYtiup cluster display tidb-cluster

image-20210308111048597

TiDB擴縮容

當前集群部署拓撲

實體 IP 存盤路徑 部署路徑
grafana 192.168.64.152 3000 /tidb-deploy/grafana-3000
pd 192.168.64.152 2379/2380 /tidb-data/pd-2379 /tidb-deploy/pd-2379
prometheus 192.168.64.152 9090 /tidb-data/prometheus-9090 /tidb-deploy/prometheus-9090
tidb 192.168.64.152 4000/10080 /tidb-deploy/tidb-4000
tiflash 192.168.64.152 9000/8123/3930/20170/20292/8234 /tidb-data/tiflash-9000 /tidb-deploy/tiflash-9000
tikv 192.168.64.152 20160/20180 /tidb-data/tikv-20160 /tidb-deploy/tikv-20160
tikv 192.168.64.152 20161/20181 /tidb-data/tikv-20161 /tidb-deploy/tikv-20161
tikv 192.168.64.152 20162/20182 /tidb-data/tikv-20162 /tidb-deploy/tikv-20162

擴容TiKV節點

需要擴容一個TiKV節點

實體 IP 存盤路徑 部署路徑
tikv 192.168.64.152 20163/20183 /tidb-data/tikv-20163 /tidb-deploy/tikv-20163
撰寫擴容腳本

在 scale-out.yaml 檔案添加擴容拓撲配置

COPYvi scale-out.yaml
COPYtikv_servers:
  - host: 192.168.64.152
    ssh_port: 22
    port: 20163
    status_port: 20183
    deploy_dir: /tidb-deploy/tikv-20163
    data_dir: /tidb-data/tikv-20163
    config:
        server.labels:
            host: logic-host-4
執行擴容命令
命令格式
COPYtiup cluster scale-out <cluster-name> scale-out.yaml -p
  • cluster-name:TiDB集群名稱
  • p:使用密碼方式登錄當前機器
執行命令
COPYtiup cluster scale-out tidb-cluster scale-out.yaml -p

輸入命令后,確認輸入機器密碼

image-20210308152355455

出現successfully表示節點擴容成功

image-20210308152524912

驗證擴容資訊
查看節點資訊
COPYtiup cluster display tidb-cluster

我們看到Tikv已經增加了一個節點

image-20210308152647801

通過dashboard查看

也可以看到擴容的節點資訊

image-20210308152905774

縮容TiKV節點

查看節點資訊
COPYtiup cluster display tidb-cluster

當前TiKV是4個節點

image-20210308152647801

執行縮容操作
縮容命令
COPYtiup cluster scale-in <cluster-name> --node 192.168.64.152:20163

引數解釋

  • cluster-name:集群名稱
  • node:需要洗掉的節點地址
執行命令
COPYtiup cluster scale-in tidb-cluster --node 192.168.64.152:20163

出現確認操作后,輸入y確認執行就可以執行縮容操作了

image-20210308153500262

驗證縮容資訊
查看節點資訊
COPYtiup cluster display tidb-cluster

我們看到需要縮容的節點狀態是Tombstone說明已經下線,下線需要一定時間,下線節點的狀態變為 Tombstone 就說明下線成功

image-20210308153639934

通過dashboard查看

也可以看到縮容的節點已經不存在了,說明縮容成功

image-20210308153901260

博客內容遵循 署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0) 協議

本文永久鏈接是:http://www.baiyp.ren/TIDB%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2.html

更新于:2021年5月27日

集群部署

TIDB

本文由傳智教育博學谷狂野架構師教研團隊發布,

如果本文對您有幫助,歡迎關注點贊;如果您有任何建議也可留言評論私信,您的支持是我堅持創作的動力,

轉載請注明出處!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548321.html

標籤:其他

上一篇:python中index()、find()方法

下一篇:第三部分:Spdlog 日志庫的實作原理

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more