主頁 > 後端開發 > CloudStack+KVM 虛擬機部署測驗詳細流程

CloudStack+KVM 虛擬機部署測驗詳細流程

2020-10-11 02:27:04 後端開發

目錄

基本介紹

部署準備

開始部署

1.查看并修改虛擬機網路

2.創建manager節點

2.配置manage節點

2.克隆為agent節點

3.配置NFS服務

4.安裝MySQL服務

5.設定網路橋接

6.安裝CloudStack

(1)網路源

(2)本地源

7.配置CloudStack

8.創建資源域

9.注冊ISO,添加實體,創建模板

可能遇到的問題


基本介紹

本文旨在介紹如何在本機虛擬機里部署一套CloudStack環境的測驗流程,包括一臺管理節點(manager)和一臺計算節點(agent),其中,manager節點會搭建作為二級存盤的NFS服務,agent會搭建用于鏡像下載的nginx服務器,

本文使用KVM創建虛擬機,通過libvirtd管理虛擬機,

最后一個部分,是常見的問題與解決方案,會持續更新一段時間,有問題可以自行去尋找,

部署準備

軟體安裝:

VMWare Workstation,XShell

資源下載:

CentOS-7-x86_64-Minimal-1810.iso //系統鏡像

cloudstack-common-4.13.1.0-1.el7.x86_64.rpm

cloudstack-management-4.13.1.0-1.el7.x86_64

cloudstack-agent-4.13.1.0-1.el7.x86_64.rpm

systemvmtemplate-4.11.3-kvm.qcow2.bz2

本文所用所有資源的百度云分享鏈接:https://pan.baidu.com/s/1AiuZUF5JvudgIgFjc_8j4Q 提取碼:oy3h

開始部署

1.查看并修改虛擬機網路

首先,打開Wmware Workstation,選擇選單欄“編輯”->虛擬網路編輯器,查看VMnet8的子網地址,

每臺機器VMnet8被分配的子網地址都不相同,但在每個網段中,本機都默認為1,網關都默認為2,

以本機“192.168.100.0”網段為例,在該網段中,默認本機的IP地址為“192.168.100.1”,默認網關的IP地址為“192.168.100.2”,

而若是“192.168.67.0”網段,則默認本機的IP地址為“192.168.67.1”,默認網關的IP地址為“192.168.67.2”,

請注意并修改后續操作中IP地址,以保證在VMnet8的網段中,

若想更改網段,可以點擊右下角“更改設定”,以管理員權限打開虛擬網路編輯器,修改左下角子網IP,

默認DHCP分配IP范圍為128-254,可以點擊“DHCP設定”調整,本文調整如下,開放地址范圍為192.168.100.100-192.168.100.254,

綜上,本機虛擬網路相關的資訊如下:

地址范圍:192.168.100.100-192.168.100.254
網關:192.168.100.2
子網掩碼:255.255.255.0

2.創建manager節點

本文先創建manager節點虛擬機,安裝必要的軟體后,會克隆該虛擬機作為agent節點,再分別部署各自節點,

本文manager節點IP設定為192.168.100.100,agent節點IP設定為192.168.100.101,可自行修改為其他,但注意必須在DHCP范圍內,

在VmWare Station 中新建虛擬機,在新建向導中依次選擇“典型”、“稍后安裝作業系統”、“Linux”、“CentOS 7 64位”,

命名該虛擬機為Manager,避免混淆,

磁盤容量為默認20G足可,在最后一步中點擊“自定義硬體”,按下圖配置,

Manager節點推薦記憶體為2G,

處理器內核2顆,開啟Intel VT-x/EPT,

CD驅動器加載CentOS的iso鏡像,并確定已勾選啟動時連接,

再洗掉多余的聲卡和列印機硬體,

點擊“關閉”并點擊“完成”,

再次編輯該虛擬機設定,點擊左下角添加,添加硬碟,

添加新硬碟

一路點“下一步”,最后完成新硬碟添加,

啟動虛擬機,開始鏡像安裝,點擊虛擬螢屏,按上下鍵選擇“Install CentOs 7”,進入可視化安裝界面,

第一步,選擇中文,

選擇“中文”

點擊“繼續”,等待依賴檢索完成,依次配置“安裝位置”、“網路和主機名”,

配置“安裝目標位置”
配置“網路和主機名”

選擇“IPv4 設定”,選擇“手動分配,點擊"Add”,

添加靜態IP地址“192.168.100.100”,子網掩碼“255.255.255.0”,網關“192.168.100.2”,

請根據自己VMnet8的實際網段與自己設定的manager節點靜態IP進行修改,

在下方DNS服務器輸入阿里DNS服務器223.5.5.5,

如下圖所示,點擊“保存”和“完成”,

配置“ens33”

點擊“開始安裝”,

安裝中

在安裝時,設定ROOT密碼,本文設定為12345,若密碼過于簡單,點擊兩次完成也可以完成設定,

安裝完成后,重啟,

2.配置manage節點

打開XShell,新建會話,

點擊“用戶身份驗證”,輸入root和ROOT密碼,

保存并連接,驗證主機密鑰,選擇“接受并保存”,

在XShell中完成以下配置,

(1)設定IP映射

設定后可以直接通過Hostname,訪問到對應節點,

復制一下指令到XShell會話框中,按回車執行,

vi /etc/hosts

在該檔案新的一行中插入以下內容:

192.168.100.100 manager
192.168.100.101 agent

小提示

按I鍵進入INSERT模式,

按ESC,輸入“:wq”保存并退出,輸入“:q!"不保存退出,

按ESC,按兩下D洗掉游標所在行,

(2)關閉防火墻

systemctl disable firewalld
systemctl stop firewalld

然后設定selinux為permissive模式

修改config檔案

vi /etc/selinux/config 

找到selinx并改成

SELINUX=permissive

重啟生效

reboot

查看selinux

getenforce 

(3)時區設定(非必要)

timedatectl set-timezone  Asia/Shanghai

查看時區

timedatectl

(4)安裝EPEL

yum -y install epel*

重建本地倉庫快取

yum clean all && yum makecache

安裝VIM,用以編輯檔案,

yum -y install vim

安裝lrzsz,用以向虛擬機發送檔案,

yum -y install lrzsz

(5)安裝時間同步模塊

yum -y install chrony

修改組態檔

vim /etc/chrony.conf

將服務器修改為阿里云的時間同步服務器

找到以下四行

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

修改為

server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst

重啟chronyd服務

systemctl restart chronyd

(5)安裝NFS服務

yum -y install nfs-utils

編輯組態檔

vim /etc/sysconfig/nfs

取消如下項的注釋,其中,RQUOTAD_PORT需要手動添加,

LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020

啟動服務并設定開機啟動,

systemctl enable rpcbind
systemctl start rpcbind
systemctl enable nfs
systemctl start nfs

查看新增硬碟

fdisk -l
新增磁盤/dev/sdb

格式化硬碟,建立ext4檔案系統,“Process anyway?”選擇“y”,

mkfs.ext4 /dev/sdb

至此,兩節點的通用配置已完成,

2.克隆為agent節點

關閉manager節點,在庫中,右鍵manager節點,選擇“管理”->“克隆”,進入克隆虛擬機向導,

依次選擇“克隆當前狀態”、“創建完整克隆”,命名為“agent”,然后點擊完成,

由于克隆后agent節點IP與manager沖突,建議先在虛擬機內部修改完靜態IP地址后,再通過XShell配置,

開啟agent虛擬機,輸入賬戶root,密碼12345,

修改host名

vim /etc/hostname

修改manager為agent

修改IP地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33

將IPADDR修改為192.168.100.101,修改后如下,

重啟虛擬機

reboot

在XShell中,創建新會話,名稱為“agent”,主機為192.168.100.101,賬號為root,密碼為12345,

在XShell的會話中完成后續配置,

3.配置NFS服務

前面已經配置過檔案,此步驟只需設定共享目錄,請注意各個操作與其操作節點,避免混淆,

manager節點

創建掛載點

mkdir -p /export/secondary

硬碟掛載

 echo "/dev/sdb  /export/secondary  ext4 defaults 0 0"  >> /etc/fstab

快速掛載

mount -a

查看掛載

df -h

結果如下

設定共享目錄

vim /etc/exports

添加

/export/secondary *(rw,async,no_root_squash,no_subtree_check)

重新匯入共享目錄配置

exportfs -a

agent節點

創建掛載點

mkdir -p /export/primary

硬碟掛載

echo "/dev/sdb  /export/primary  ext4 defaults 0 0"  >> /etc/fstab

快速掛載

mount -a

設定共享目錄

vim /etc/exports

添加

/export/primary *(rw,async,no_root_squash,no_subtree_check)

重新匯入共享目錄配置

exportfs -a

驗證共享

manager 節點查看 agent的共享目錄

showmount -e agent

agent 節點查看 manager 的共享目錄

showmount -e manager

4.安裝MySQL服務

manager節點

yum -y install mariadb-server mariadb

編輯 mariadb 組態檔

vim /etc/my.cnf

在mysqld 模塊下加入

innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'
bind-address = 0.0.0.0

啟動mariadb 并設定為開機啟動

systemctl enable mariadb
systemctl start mariadb

執行資料庫初始化安全操作

mysql_secure_installation

初始未設定密碼按回車跳過,選擇設定密碼,設定為12345,移除匿名用戶,不屏蔽遠程登錄等,其他按回車選擇默認,

賦予 root 遠程登錄權限

請注意并修改下方操作中的密碼為自己設定的密碼

mysql -uroot -p12345 -e "GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '12345' WITH GRANT OPTION";

5.設定網路橋接

agent節點

yum -y install net-tools bridge-utils

編輯網卡橋接檔案 cloudbr

vim /etc/sysconfig/network-scripts/ifcfg-cloudbr0

修改后內容如下,靜態IP根據自己實際情況修改,

TYPE=Bridge
BOOTPROTO=none
DEVICE=cloudbr0
ONBOOT=yes
IPADDR=192.168.100.101
NETMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=223.5.5.5
STP=yes

設定網卡檔案

vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改后如下

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="ad4d6e67-ae59-4a3c-9270-7045700517cd"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=cloudbr0

重新啟動網路服務

systemctl restart network

查看 網橋 和路由

brctl show route -n

至此,基本環境安裝已經完成,建議拍攝快照,以免后期配置錯誤,功虧一簣,

6.安裝CloudStack

(1)網路源

manager和agent節點

配置網路源檔案,兩臺節點配置相同

vi /etc/yum.repos.d/cloudstack.repo

添加

[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/centos7/4.13/
enabled=1
gpgcheck=0

manager節點

yum -y install cloudstack-management

agent 節點

yum -y install cloudstack-agent

(2)本地源

官方下載地址:

http://cloudstack.apt-get.eu/centos7/4.13/cloudstack-management-4.13.1.0-1.el7.x86_64.rpm
http://cloudstack.apt-get.eu/centos7/4.13/cloudstack-agent-4.13.1.0-1.el7.x86_64.rpm
http://cloudstack.apt-get.eu/centos7/4.13/cloudstack-common-4.13.1.0-1.el7.x86_64.rpm

本文提供的百度云里下載,

本文使用lrzsz進行檔案發送,若遇問題,也可以使用WinSCP等其他軟體發送,

manager節點

將cloudstack-common和cloudstack-management兩個rpm檔案,分別拖入XShell會話框,發送給虛擬機,

發送中

執行下述指令進行本地安裝,

yum -y install cloudstack-common-4.13.1.0-1.el7.x86_64.rpm cloudstack-management-4.13.1.0-1.el7.x86_64.rpm

安裝程序或以后使用程序中,有任何問題,可以通過日志查看,

tail -f /var/log/cloudstack/management/management-server.log

初始化資料庫,創建新用戶cloud,

最后,root:12345為root賬號及root密碼,密碼不同請修改,

cloudstack-setup-databases cloud:123456@localhost --deploy-as=root:12345

啟動management

cloudstack-setup-management

agent 節點

將cloudstack-common和cloudstack-agent兩個rpm檔案,分別拖入XShell會話框,發送給虛擬機,

執行下述指令進行本地安裝,

yum -y install cloudstack-common-4.13.1.0-1.el7.x86_64.rpm cloudstack-agent-4.13.1.0-1.el7.x86_64.rpm 

manager節點

安裝KVM模板

在二級存盤中安裝KVM模板,以下兩種方式二選一

a.網路源安裝

/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
-m /export/secondary \
-u http://cloudstack.apt-get.eu/systemvm/4.11/systemvmtemplate-4.11.3-kvm.qcow2.bz2  \
-h kvm -F

b.本地源

官方地址:

http://cloudstack.apt-get.eu/systemvm/4.11/systemvmtemplate-4.11.3-kvm.qcow2.bz2

本文提供的百度云里下載,

同上述程序,拖入會話即可,

注意:當前檔案夾是否為root,不是請先“cd /root”,或者修改下述代碼中路徑,

/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt  \
-m /export/secondary \
-f /root/systemvmtemplate-4.11.3-kvm.qcow2.bz2 \
-h kvm –F

agent 節點

配置libvirt

編輯QEMU VNC組態檔

vim /etc/libvirt/qemu.conf

取消注釋

vnc_listen="0.0.0.0"

配置/etc/libvirt/libvirtd.conf檔案

vim /etc/libvirt/libvirtd.conf

取消注釋或添加

listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0

小提示

可以按下ESC,使用“/+搜索詞”,如“/listen”進行搜索,

配置/etc/sysconfig/libvirtd檔案

vim /etc/sysconfig/libvirtd

取消注釋

LIBVIRTD_ARGS="--listen"

重啟libvirtd 并設定為開機自啟

systemctl restart libvirtd
systemctl enable libvirtd

請注意,這一步配置錯導致libvirt服務啟動失敗,會導致后續創建資源域時無法添加主機,解決方法看文章最后的QA,

7.配置CloudStack

默認訪問埠為manager節點IP的8080埠,

打開瀏覽器,訪問http://192.168.199.100:8080/client/,

默認賬號為admin,默認密碼為password,選擇語言為“簡體中文”,登陸,

初次登陸選擇左下角“我以前使用過”,

選擇左下角“全域設定”,搜索并修改以下設定,

cpu.overprovisioning.factor 2.0               //CPU超配
mem.overprovisioning.factor 2.0               //記憶體超配,即2GB變4GB
secstorage.allowed.internal.sites 0.0.0.0/0   //從該網段下載ISO或模板,后期搭建ngix服務器可修改
management.network.cidr 192.168.100.0/24      //管理網段,可不修改,但會有警報資訊

在manager節點中,重啟cloudsatck-management服務

systemctl restart cloudstack-management

重啟時間較長,請耐心等候,可以觀察日志檔案,了解啟動行程,

tail -f /var/log/cloudstack/management/management-server.log

8.創建資源域

重新登錄,選擇左下角“基礎架構”,選擇“資源域”,點擊工具列“+ 添加資源域”,

配置如下即可,

請注意,“添加主機”這一步,是添加計算節點作為集群的默認主機,而不是管理節點,

點擊“啟動資源域”,等待創建完成,然后啟動即可,

9.注冊ISO,添加實體,創建模板

如下,等待系統VM創建成功后,開始后續步驟,

agent節點

創建一個NGINX 服務器當作鏡像下載站,

安裝 nginx 軟體

yum -y install nginx

編輯 nginx 組態檔

vim  /etc/nginx/nginx.conf 

在access_log /var/log/nginx/access.log main一行后加上

autoindex on;# 顯示目錄
autoindex_exact_size on;# 顯示檔案大小
autoindex_localtime on;# 顯示檔案時間

清空 /usr/share/nginx/html 目錄

小心謹慎

cd /usr/share/nginx/html
rm -rf *

將準備好的ISO鏡像放進去,本文使用的是虛擬機的鏡像,直接拖入會話框,傳送至/usr/share/nginx/html目錄,

重啟nginx 服務,設定為開機啟動

systemctl enable nginx
systemctl start nginx

可通過瀏覽器直接訪問agent節點IP地址查看,

注冊ISO

選擇左側“模板”->選擇視圖“ISO”,點擊工具列“注冊ISO”,

依次填寫所有資訊,URL可以從192.168.100.101網頁中復制鏈接,

點擊“確定”,點擊該ISO,點擊“資源域”,查看狀態,

安裝完成后,如下所示,

添加實體

依次選擇左邊“實體”->工具列“添加實體”,

選擇ISO創建,

選擇剛剛注冊的ISO,

計算方案選擇Medium,分配記憶體為1GB,可在“服務方案”中修改,

其余一律默認即可,最后填寫資訊,

啟動VM,等待VM創建并運行,

選擇該虛擬機快速查看->查看控制臺,

在彈出的控制臺網頁中,安裝ISO即可,

安裝程序同虛擬機大致一樣,不同的是網路只需打開即可,不需要設定靜態IP和主機名,

安裝完成后,重啟,

至此,一臺可以用于生產的實體已經部署完成,后續可以安裝其他生產環境,本文僅做測驗,安裝系統即可,

創建模板

接下來是,將安裝有生產環境的示例創建模板,用以創建更多實體,

關閉實體,“快速查看”->停止,

等待停止后,點擊“查看卷”,

選擇“快速查看”->“創建模板”,

填寫資訊后,創建即可,

以后添加實體時,選擇該模板即可創建一模一樣的實體,

可能遇到的問題

Q:安裝軟體時一直切換鏡像,最后也不下載,這是怎么回事?

A:有兩種可能

1.沒有配置DNS服務器,

沒有配置網橋的話,配置網路

vi /etc/sysconfig/network-scripts/ifcfg-ens33

添加DNS服務器

DNS1=223.5.5.5

配置網橋了的話,在網橋檔案里添加DNS,

vi /etc/sysconfig/network-scripts/ifcfg-cloudbr0

2.網關配置錯誤

本文使用的VMnet8網段為192.168.100.0-192.168.100.254網段,其中192.168.100.2為虛擬網關地址,每個人的網段號不同,請根據自己的網段查看網關是否正確,

查看組態檔,注意其中GATEWAY欄位是否正確,

vi /etc/sysconfig/network-scripts/ifcfg-ens33

Q:管理節點重啟后,CloudStack 的WEB UI上不去,這是怎么回事?

A:一般是Server還在啟動中,稍等即可,

可以通過查看日志的方式排除問題,

tail -f /var/log/cloudstack/management/management-server.log

Q:系統VM創建失敗,日志顯示“can't create development for vm”,這是為什么?

A:這可能有兩個原因造成:

1.agent節點硬體資源不足

本文建議的4GB記憶體加2核,再加上2倍超配,經多次試驗完全能滿足要求,

2.沒有安裝KVM模板

如果日志中報錯“Not such file or directory”,然后指向/export/secondary里的template檔案夾,那么就是這個原因,按照第6部中的“安裝KVM模板”步驟完成即可,

Q:日志報資料庫中列錯誤,怎么處理?

A:按照第6步中,初始化資料庫的步驟,重新創建用戶,安裝management,

Q:資源域創建最后一步添加主機時報錯,說“Unable to add the host”,查找management的日志,找到以下錯誤,怎么解決?

A:這是在agent節點配置libvirt時出現了問題,建議先檢查自己在第六步配置libvirt時出現了什么問題,

有快照建議恢復到配置之前,

無快照,按照以下方法重新安裝libvirt,

卸載libvirt及其依賴

yum remove libvirt*

然后按照第六步中的程序重新安裝,

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

標籤:java

上一篇:微信小程式 - 獲取用戶當前位置資訊(用于定位地址及獲取地址等需求)

下一篇:阿里云能都涉及哪些內容

標籤雲
其他(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