主頁 > 軟體設計 > nginx快速入門

nginx快速入門

2021-08-14 07:28:05 軟體設計

文章目錄

  • 一、Nginx簡述
    • 1. 什么是Nginx
    • 2. 為什么選擇Nginx
      • 2.1 高性能、高并發
      • 2.2 高擴展性
      • 2.3 高可靠性
      • 2.4 熱部署
      • 2.5 應用廣泛
      • 2.6 網路模型
    • 3. 正向代理與反向代理
    • 4. Nginx組成部分
  • 二、Nginx應用場景
    • 2.1 普通代理
    • 2.2 負載均衡場景
    • 2.3 代理快取場景
    • 2.4 靜態資源場景
    • 2.5 安全應用場景
  • 三、Nginx安裝部署
    • 3.1 安裝Nginx方式
    • 3.2 安裝Nginx依賴
    • 3.3 安裝Nginx服務
    • 3.4 訪問Nginx服務
    • 3.5 檢查Nginx版本和編譯引數
  • 四、Nginx目錄結構
    • 4.1 主組態檔
    • 4.2 Nginx代理組態檔
    • 4.3 Nginx編碼組態檔
    • 4.4 Nginx管理命令檔案
    • 4.5 Nginx日志相關檔案
  • 五、Nginx基本配置
    • 5.1 總覽
    • 5.2 Global全域模塊
    • 5.3 Events事件模塊
    • 5.4 HTTP核心模塊
    • 5.5 總結
  • 六、Nginx搭建小游戲網站
    • 6.1 增加配置
    • 6.2 修改本地hosts檔案
    • 6.3 上傳游戲代碼
    • 6.4 檢查配置語法
    • 6.5 多載服務生效
  • 七、Nginx虛擬主機
    • 7.1 什么是虛擬主機
    • 7.2 Nginx配置虛擬主機方式
    • 7.3 基于主機多IP方式
    • 7.4 基于多埠虛擬主機方式
    • 7.5 基于多域名虛擬主機方式

一、Nginx簡述

1. 什么是Nginx

Nginx是一個開源且高性能、可靠的Http Web服務、反向代理服務器

  • 開源,體現在直接獲取Nginx的源代碼(F5公司收購)
  • 高性能,體現在支持海量的并發
  • 高可靠,體現在服務穩定

2. 為什么選擇Nginx

2.1 高性能、高并發

通常正常情況下,客戶端單次請求會得到更快的回應,另一方面在高峰期(如有數以萬計的并發請求),Nginx可以比其他Web服務器更快地回應請求,

2.2 高擴展性

Nginx官方、第三方,提供了非常多優秀的模塊提供使用,這些模塊都可以實作快速增加和減少,

2.3 高可靠性

所謂高可靠性,是指Nginx可以在服務器上持續不間斷的運行,而很多web服務器往往運行幾周或幾個月就需要進行一次重啟,如windows的 IIS,對于nginx這樣的一個高并發、高性能的反向代理服務器而言,他往往運行網站架構的最前端,那么此時如果我們企業如果想提供9999、99999,對于nginx持續運行能夠宕機的時間,一年可能只能以秒來計算,所以在這樣的一個角色中,nginx的高可靠性為我們提供了非常好的保證,

2.4 熱部署

熱部署是指在不停服務的情況下升級nginx,這個功能非常的重要,
對于普通的服務,只需要kill掉行程再啟動即可,但對于Nginx而言,如果Nginx有很多的客戶端連接,那么kill掉Nginx,Nginx會像客戶端發送tcp reset復位包,但很多客戶端無法很好的理解reset包,就會造成例外,由于Nginx的master管理行程與worker作業行程的分離設計,使得Nginx能夠在7×24小時不間斷服務的前提下,升級Nginx的可執行檔案,當然,也支持不停止服務更新配置、更換日志檔案等功能,

2.5 應用廣泛

首先Nginx技術成熟,具備企業最常使用的功能,如代理、代理快取、負載均衡、靜態資源、動靜分離、Https、lnmp、lnmt等等;其次企業使用Nginx統一技術堆疊,可以降低維護成本,同時降低技術更新成本,
另外,tengine\OpenResty 都是基于Nginx進行的二次開發的,

2.6 網路模型

Nginx使用Epool網路模型,而Apache采用的是Select網路模型,

  • Select:當用戶發起一次請求,select模型就會進行一次遍歷掃描,從而導致性能低下,
  • Epoll:當用戶發起請求,epoll模型會直接進行處理,效率高效,

3. 正向代理與反向代理

  • 正向代理,平時我們使用的加速器、翻墻等代理就是正向代理,客戶機請求代理服務器,代理服務器轉發請求到對應的目標服務器
  • 反向代理,部署在Web服務器上,代理所有外部網路對內部網路的訪問,瀏覽器訪問服務器,必須經過這個代理,是被動的,
  • 正向代理的主動方是客戶端,反向代理的主動方是Web服務器

反向代理的作用:

  1. 安全,客戶端對Web服務器的訪問需要先經過反向代理服務器,這樣可以防止外部程式對Web服務器的直接攻擊,
  2. 負載均衡,反向代理服務器可以根據Web服務器的負載情況,動態地把HTTP請求交給不同的Web服務器來處理,前提是要有多個Web服務器,
  3. 提升Web服務器的IO性能,一個HTTP請求的資料,從客戶端傳輸給服務器,是需要時間的,例如N秒,如果直接傳給Web服務器,Web服務器就需要讓一個行程阻塞N秒,來接收IO,這樣會降低Web服務器的性能,如果使用反向代理服務器,先讓反向代理服務器接收完整個HTTP請求,再把請求發給Web服務器,就能提升Web服務器的性能,還有一些靜態檔案的請求,可以直接交給反向代理來處理,不需要經過Web服務器,

4. Nginx組成部分

在這里我們將Nginx的組成架構比喻為一輛汽車:這個汽車提供了基本的駕駛功能,但是還需要一個駕駛員控制這輛汽車開往哪個方向,同時該汽車行駛過的地方還會形成GPS軌跡,如果汽車在行駛的程序中出現了任何問題,我們需要一個黑匣子,分析是汽車本身的問題,還是駕駛人員的操作出現了問題,
在這里插入圖片描述

  1. 第一個組成部分Nginx二進制可執行檔案:它是Nginx本身框架以及相關模塊等構建的一個二進制檔案,這個檔案就相當于汽車本身,所有的功能都由它提供,
  2. 第二個組成部分Nginx.conf檔案:它相當于駕駛人員,雖然二進制可執行檔案已經提供了許多的功能,但是這些功能究竟有沒有開啟,或者開啟后定義怎樣的行為去處理請求,都是由nginx.conf這個檔案決定的,所以他就相當于這個汽車的駕駛員,控制這個汽車的行為,
  3. 第三個組成部分access.log:它相當于這輛汽車經過所有地方形成的GPS軌跡,access.log會記錄Nginx處理過的每一條HTTP的請求資訊、回應資訊,
  4. 第四個組成部分error.log:它相當于黑匣子,當出現了一些不可預期的問題時,可以通過error.log將問題定位出來,

小結:

Nginx的組成部分是相輔相成,Nginx二進制檔案和Nginx.conf檔案,它定義了Nginx處理請求的方式,
而如果我們想對nginx服務做一些web的運營和運維,需要對access.log做進一步分析,
而如果出現了任何未知的錯誤,或者預期的行為不一致時,應該通過error.log去定位根本性的問題,

二、Nginx應用場景

Nginx的主要使用場景,分為是代理資源服務、負載均衡服務、代理快取服務、靜態資源服務、安全服務,場景詳細介紹如下:
如下圖是一個網站的基本架構,首先用戶請求先到達nginx,然后在到 tomcat或php這樣的應用服務器,然后應用服務器在去訪問 redis、mysql這樣的資料庫,提供基本的資料功能,

2.1 普通代理

在這里插入圖片描述

2.2 負載均衡場景

代碼的運行效率比較低,或者并行受限,所以我們需要很多應用服務組成一個集群,為更多用戶提供訪問,而應用服務一但構成集群,則需要我們的nginx具有反向代理功能,這樣可以將動態請求傳倒給集群服務,但很多應用構成集群,那么一定會帶來兩個需求,

  1. 應用服務器需要動態擴展,(手動擴展|自動擴展)
  2. 有些服務出問題需要做容災,那么我們的反向代理必須具備負載均衡功能,
    在這里插入圖片描述

2.3 代理快取場景

其次,隨著我們網路鏈路的增長,用戶體驗到的時延則會增加,如果我們能把一段時間內不會發生變化的"動態"內容,快取在Nginx,由Nginx直接向用戶提供訪問,那么這樣用戶請求的時延就會減少很多,所以在這里反向代理會演生出另外一個功能 “快取”,因為它能加速我們的訪問,
在這里插入圖片描述

2.4 靜態資源場景

在很多時候我們訪問docs、pdf、mp4、png等這樣的靜態資源時,是沒有必要將這些請求通過Nginx交給后端的應用服務,我們只需要通過Nginx直接處理“靜態資源”即可,這是Nginx的靜態資源功能,
在這里插入圖片描述

2.5 安全應用場景

當我們使用http網站時,可能會遭遇到篡改,如果使用https安全通訊協議,那么資料在傳輸程序中是加密的,從而能有效的避免黑客竊取或者篡改資料資訊,同時也能避免網站在傳輸程序中的資訊泄露,大大的提升我們網站安全,
在這里插入圖片描述

三、Nginx安裝部署

3.1 安裝Nginx方式

安裝Nginx軟體的方式有很多種,分為如下幾種

  1. 原始碼編譯=>Nginx (1.版本隨意 2.安裝復雜 3.升級繁瑣)
  2. epel倉庫=>Nginx (1.版本較低 2.安裝簡單 3.配置不易讀)
  3. 官方倉庫=>Nginx (1.版本較新 2.安裝簡單 3.配置易讀,強烈推薦)

nginx官網,點右側download
在這里插入圖片描述

官方指導如下:
Install the prerequisites:

sudo yum install yum-utils

To set up the yum repository, create the file named /etc/yum.repos.d/nginx.repo with the following contents:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

這里我們選擇nginx-stable版本

如果自己配置的nginx.repo倉庫不生效,還是從epel倉庫中安裝,可以把我們的倉庫優先級設定高一點,

安裝yum優先級插件
yum install yum-priorities

在想優先檢測的repo檔案中加入
priority=1 
#數字越小,優先級越高


[root@web01 ~]# vim /etc/yum/pluginconf.d/priorities.conf 
確定這個組態檔里的 enabled = 1
yum clean all
yum makecache
就可以優先從我們指定的源里安裝了

3.2 安裝Nginx依賴

[root@web01 ~]# yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake httpd-tools

3.3 安裝Nginx服務

[root@web01 ~]# yum install nginx -y
[root@web01 ~]# systemctl enable nginx
[root@web01 ~]# systemctl start nginx

3.4 訪問Nginx服務

在這里插入圖片描述

3.5 檢查Nginx版本和編譯引數

[root@web01 ~]# nginx -V

四、Nginx目錄結構

[root@web01 ~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.20.1
/usr/share/doc/nginx-1.20.1/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx

4.1 主組態檔

/etc/nginx/nginx.conf  # 主組態檔
/etc/nginx/conf.d/default.conf  # 默認網站組態檔

4.2 Nginx代理組態檔

/etc/nginx/fastcgi_params # Fastcgi代理組態檔
/etc/nginx/scgi_params    # scgi代理組態檔
/etc/nginx/uwsgi_params   # uwsgi代理組態檔

4.3 Nginx編碼組態檔

/etc/nginx/mime.types # Content-Type與擴展名
/etc/nginx/win-utf # Nginx編碼轉換映射檔案
/etc/nginx/koi-utf 
/etc/nginx/koi-win

4.4 Nginx管理命令檔案

/usr/sbin/nginx # Nginx命令列管理終端工具
/usr/sbin/nginxdebug # Nginx命令列與終端除錯工具

4.5 Nginx日志相關檔案

/var/log/nginx  # Nginx默認存放日志目錄
access.log  error.log

/etc/logrotate.d/nginx # Nginx默認的日志切割

五、Nginx基本配置

  • Nginx主組態檔/etc/nginx/nginx.conf是一個純文本型別的檔案
  • Nginx整個組態檔是以區塊的形式組織的,一般每個區塊以一對大括號{}來表示開始與結束

5.1 總覽

[root@web01 ~]# cat /etc/nginx/nginx.conf 

user  nginx;             # ngix的運行身份,默認以nginx用戶運行,nginx用戶在安裝nginx程式時自動創建
worker_processes  auto;  # 啟動work的行程數量,建議不能超過cpu總執行緒數量



error_log  /var/log/nginx/error.log notice; # 錯誤日志路徑,默認級別notice表示不設定
pid        /var/run/nginx.pid; # 存盤行程的pid Number




events {
    worker_connections  1024;  # 一個worker最大連接數
    use epoll; # 默認是采用epoll網路IO模型;
    # worker_connections * worker_processes = 最大鏈接數
}



# 主要負責接受與回應http請求
http {
    include       /etc/nginx/mime.types; # 支持的型別;
    default_type  application/octet-stream;
    # 默認型別(下載的方式)   
    # 1.提供下載包 zip   
    # 2.后端并沒有將代碼決議成功,所以直接成了下載;
  
    # 定義日志的格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    # 訪問日志
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65; #長連接超時時間;

    #gzip  on;
   
    # 包含的子檔案;
    include /etc/nginx/conf.d/*.conf;
}

為了便于維護管理,建議將配置都寫在子檔案/etc/nginx/conf.d/中

[root@web01 conf.d]# cat /etc/nginx/conf.d/bertwu.conf 
server {
	listen 80; # 監聽的埠
	server_name www.bertwu.com; # 指定站點的域名
	
	#uri路由匹配
	location / {
		root /usr/share/nginx/html; # 根目錄
		index index.html index.htm;	 # 默認的回傳頁面
		#完整路徑為 root+index = /usr/share/nginx/html/index.html;
	}

}

5.2 Global全域模塊

user www;                       #啟動Nginx行程所使用的用戶
worker_processes 1;             #Nginx運行的work行程數量(建議與CPU數量一致或auto)
error_log /log/nginx/error.log  #Nginx錯誤日志存放路徑
pid /var/run/nginx.pid          #Nginx服務運行后產生的pid行程號

5.3 Events事件模塊

events {
    worker_connections  1024;  # 一個worker最大連接數
    use epoll; # 默認是采用epoll網路IO模型;
    # worker_connections * worker_processes = 最大鏈接數
}

5.4 HTTP核心模塊

http {
    include       /etc/nginx/mime.types; # 支持的型別;
    default_type  application/octet-stream;
    # 默認型別(下載的方式)   
    # 1.提供下載包 zip   
    # 2.后端并沒有將代碼決議成功,所以直接成了下載;
  
    # 定義日志的格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    # 訪問日志
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65; #長連接超時時間;

    #gzip  on;
   
	
	#使用Server配置網站, 每個Server{}代表一個網站(簡稱虛擬主機)
	'server' {
	listen 80; # 監聽的埠
	server_name www.bertwu.com; # 指定站點的域名
	access_log access.log  # 該網站的訪問日志
	
	#uri路由匹配,控制網站訪問的路徑
	'location' / {
		root /usr/share/nginx/html; # 根目錄,存放網站源代碼的位置
		index index.html index.htm;	 # 默認的回傳頁面
		#完整路徑為 root+index = /usr/share/nginx/html/index.html;
	}

}
	....
	
	# 第二個虛擬主機配置
	 'server' {   
	 ...   
	}	

    # 包含的子檔案;
    # include作用是:簡化主組態檔寫太多造成臃腫,這樣會讓整體的組態檔更加的清晰,
    # 建議將每個虛擬主機獨立寫在這個目錄下
    include /etc/nginx/conf.d/*.conf;
} # http層結束

5.5 總結

Nginx中的 http、server、location 之間的關系

  • http標簽主要用來解決用戶的請求與回應
  • server標簽主要用來回應具體的某一個網站
  • location標簽主要用于匹配網站具體URI路徑
  • http{}下允許有多個Server{},一個 Server{} 下又允許有多個location{}

六、Nginx搭建小游戲網站

6.1 增加配置

[root@web01 conf.d]# cat /etc/nginx/conf.d/bertwu.conf 
server {
	listen 80;
	server_name www.bertwu.com;
	location / {
		root /code;
		index index.html index.htm;	
	
	}

}

6.2 修改本地hosts檔案

C:\Windows\System32\drivers\etc 添加一行
10.0.0.1 www.bertwu.com # ip為nginx服務器所在的主機ip

6.3 上傳游戲代碼

[root@web01 ~]# mkdir /code && cd /code
[root@web01 ~]# wget http://cdn.xuliangwei.com/html5.zip
[root@web01 code]# unzip html5.zip 
[root@web01 code]# ls
ceshi  game  html5.zip  img  index.html  __MACOSX  readme.txt

6.4 檢查配置語法

[root@web01 code]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

6.5 多載服務生效

[root@web01 code]# systemctl reload nginx

七、Nginx虛擬主機

7.1 什么是虛擬主機

在一臺服務器上運行多套站點,
通常在企業中可能會有很多業務系統,那么多套業務服務如何使用Nginx配置?

在這里插入圖片描述

如果使用如上方式部署,則需要多臺服務器配置Nginx,但如果使用虛擬主機方式,則在同一個Nginx上運行多套單獨服務,這些服務是相互獨立的,
在這里插入圖片描述

7.2 Nginx配置虛擬主機方式

Nginx配置虛擬主機有如下三種方式

  • 基于主機多IP方式
  • 基于埠的配置方式
  • 基于多個hosts名稱方式(多域名方式)

7.3 基于主機多IP方式

[root@web01 conf.d]# cat bertwu.conf 
server {
	listen 10.0.0.7:80;
	location / {
		root /server/eth0;
		index index.html index.htm;	
	
	}

}

server {
	listen 172.16.1.7:80;
	location / {
		root /server/eth1;
		index index.html index.htm;	
	
	}

}

# 注:
#/server/eth0/index.html
#/server/eth1/index.html 需要自己手動創建

7.4 基于多埠虛擬主機方式

[root@web01 conf.d]# cat bertwu.conf 
server {
	listen 80;
	server_name www.bertwu.com;
	location / {
		root /server/eth0;
		index index.html index.htm;	
	
	}

}

server {
	listen 81;
	server_name www.bertwu.com;
	location / {
		root /server/eth1;
		index index.html index.htm;	
	
	}

}

7.5 基于多域名虛擬主機方式

[root@web01 conf.d]# cat bertwu.conf 
server {
	listen 80;
	server_name www.bertwu1.com;
	location / {
		root /server/eth0;
		index index.html index.htm;	
	
	}

}

server {
	listen 80;
	server_name www.bertwu2.com;
	location / {
		root /server/eth1;
		index index.html index.htm;	
	
	}

}

修改hosts檔案,加入即可

10.0.0.7     www.bertwu1.com
10.0.0.7     www.bertwu2.com5

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

標籤:其他

上一篇:Ansible-Playbook 實戰案例

下一篇:python Django 之 異步channels實作Websocket搭建 + redis + 點對點聊天思路詳解 (8)

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

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more