主頁 > 軟體設計 > 【一】nginx基礎

【一】nginx基礎

2021-12-22 08:00:24 軟體設計

文章目錄

  • 1. Nginx基礎概述
  • 2. Nginx安裝啟動
  • 3. Nginx組態檔
  • 4. Nginx搭建一個靜態資源web服務器
  • 5. Nginx虛擬主機
    • 5.1 多網卡多IP的方式
    • 5.2 基于埠的配置方式
    • 5.3 基于多個hosts名稱方式(多域名方式)
  • 6. Nginx日志管理
  • 7. Nginx日志切割
  • 8. 自我總結

1. Nginx基礎概述

(1) Nginx是一個開源(直接獲取源代碼)高性能(支持海量并發)可靠的(服務穩定 ) Http Web服務、代理服務,

(2) Nginx采用Epool網路模型,Apache采用select模型

Epoll: 當用戶發起請求,epoll模型會直接進行處理,效率高效,并無連接限制,

Select: 當用戶發起一次請求,select模型就會進行一次遍歷掃描,從而導致性能低下,

(3) Nginx和Apache的區別

Nginx: 占用資源少、抗并發(Epool網路模型)、處理靜態檔案好(是apache的3倍以上)、高度模塊化(容易撰寫模塊)、配置簡單(可以正則配置)、可以作為web、負載,代理服務器

Apache:
Apache的rewrite(跳轉)比nginx強大、apache成熟穩定bug少(nginx較多)、apache對PHP支持簡單(nginx需要配合其他后端用)apache對處理動態有優勢(nginx雞肋,nginx適合靜態和反向)

(4) Nginx應用場景
在這里插入圖片描述

防資源盜用: 做個防盜,不讓其他的網站用呼叫自己的圖片

正向代理: 用戶通過nginx出去上網,可以設定用戶不同的用戶,分配不同的公網ip

反向代理: nginx作為負載,負載均衡,帶著用戶訪問web

(5) 靜態和動態web軟體

靜態WEB軟體:
nginx、
apache、
IIS、
lighttpd、
tengine、
openresty-nginx、

動態web軟體:

Tomcat、
Resin、
weblogic、
Jboss

2. Nginx安裝啟動

  • 安裝方式

    • 原始碼編譯 (1.版本隨意 2.安裝復雜 3.升級繁瑣 4.規范 5.便于管理)
    • epel倉庫(1.版本較低 2.安裝簡單 3.配置不易讀)
    • 官方倉庫 (1.版本較新 2.安裝簡單 3.配置易讀)
  • 配置官方yum源

    • 官方網站 nginx.org

    • 在官方的頁面最底部,點擊stable and mainline
      在這里插入圖片描述

    • 到達centos的官方源
      在這里插入圖片描述

  • 安裝Nginx服務

    • yum install nginx -y
  • 啟動并設定開機自啟

    • systemctl start nginx
    • systemctl enable nginx
  • 驗證是否成功

    • netstat -lntup|grep 80 (埠檢測)
    • ps -ef|grep nginx (行程檢測)
    • http://10.0.0.7(瀏覽器檢測)
  • 檢查nginx的軟體版本

    • nginx -v
  • 檢查nginx的編譯引數

    • nginx -V
  • Nginx兩種管理方式

    • 直接輸入Nginx啟動,使用sytemctl啟動 只能使用一種方式運行,不能混合使用
    • systemctl管理
      • systemctl reload(restart、start、stop、status) Nginx
    • nginx管理
      • nginx 啟動
      • nginx -s stop 停止
      • nginx -s reload |restart 多載服務

3. Nginx組態檔

nginx組態檔:/etc/nginx/nginx.conf

核心模塊:

user  nginx;									#nginx行程運行的用戶
worker_processes  1;							#nginx作業的行程數量,作業中配置為和核心數量相同
error_log  /var/log/nginx/error.log warn;		#nginx的錯誤日志【警告及其警告以上的都記錄】
pid        /var/run/nginx.pid;					#nginx行程運行后的行程id

事件模塊:

events {
    worker_connections  1024;					#一個work行程的最大連接數,默認1024  65535
	use epool;									#使用epoll網路模型
}

http核心層模塊:

http {
    include       /etc/nginx/mime.types;				#包含資源型別檔案,媒體型別,如上面的檔案中沒有請求的型別,默認為下載
    default_type  application/octet-stream;				#默認以下載方式傳輸給瀏覽器(前提是該資源在mime.types中無法找到)

	日志格式定義
    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;		#包含哪個目錄下面的*.conf檔案,每個conf檔案對應一個網站
	
	server {  定義一個網站
		listen       80;			#監聽埠
		server_name  localhost;		#nginx的域名

		#charset koi8-r;			#字符集

		location / {	 			#位置,匹配規則,規定了用戶默認訪問的目錄是哪一個
			root   /usr/share/nginx/html;	#代碼的主檔案位置
			index  index.html index.htm;	#服務端默認回傳給用戶的檔案
		}
		location /test {	 			#位置
			root   /code/test/123/;	#代碼的主檔案位置
			index  index.html index.htm;	#服務端默認回傳給用戶的檔案
		}
	}

http server location擴展了解項
http{}層下允許有多個Server{}層,一個Server{}層下又允許有多個Location

http{} 標簽主要用來解決用戶的請求與回應,

server{} 標簽主要用來回應具體的某一個網站,

location{} 標簽主要用于匹配網站具體URL路徑,

Nginx組態檔相關


  /etc/nginx/nginx.conf		       # Nginx主組態檔    包含了default.conf
  /etc/nginx/conf.d/default.conf   # Nginx的主組態檔  屬于Nginx.conf 中的	
   /var/log/nginx/access.log	   # 訪問nginx的日志
   /var/log/nginx/error.log	      # 訪問Nginx報錯的日志

相關檔案的路徑:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

4. Nginx搭建一個靜態資源web服務器

小技巧:非常重要,寫完組態檔的時候,務必要Nginx自查!!! 如果要是沒檢查,組態檔錯錯的話,服務會直接停止

  • nginx自查
    • 修改完配置記得使用 nginx -t 檢查語法
    • 如果沒有檢查語法,直接多載導致報錯,systemctl status nginx -l 查看錯誤資訊

(1) 撰寫Nginx組態檔

[root@web01 conf.d]# cat game.conf
server {
	listen 80;
	server_name game.oldboy.com;

	location / {
		root /code;
		index index.html;
	}
}

(2) 根據組態檔,創建目錄,上傳代碼

[root@web01 ~]# mkdir /code
[root@web01 ~]# cd /code
[root@web01 code]# rz html5.zip
[root@web01 code]# unzip html5.zip 

(3)多載nginx服務

[root@web01 code]# systemctl reload nginx		#平滑重啟
[root@web01 code]# systemctl restart nginx		#立即重啟

(4) 配置域名決議

Windows:  C:\Windows\System32\drivers\etc\hosts
				10.0.0.7      game.oldboy.com
Mac   sudo vim /etc/hosts
				10.0.0.7      game.oldboy.com

(5)通過瀏覽器訪問對應的專案

game.oldboy.com

小提示:

用戶請求的路徑:http://game.oldboy.com/game/duxinshu/index.html    

實際上服務器查找的路徑: /code/game/duxinshu/index.html  

http://game.oldboy.com/game/yyncl/
code/game/yyncl/index.html

5. Nginx虛擬主機

小技巧:

5.1 多網卡多IP的方式

(1)配置多網卡多IP的方式

[root@web01 conf.d]# cat ip.conf 
server {
	listen 10.0.0.7:80;
	server_name _;

	location / {
		root /code_ip_eth0;
		index index.html;
	}
}

server {
	listen 172.16.1.7:80;
	server_name _;

	location / {
		root /code_ip_eth1;
		index index.html;
	}
}

(2)根據配置創建目錄

[root@web01 conf.d]# mkdir /code_ip_eth0
[root@web01 conf.d]# echo "Eth0" > /code_ip_eth0/index.html

[root@web01 conf.d]# mkdir /code_ip_eth1
[root@web01 conf.d]# echo "Eth1" > /code_ip_eth1/index.html

(3)重啟nginx服務

[root@web01 conf.d]# systemctl restart nginx

(4)使用curl命令測驗

[root@web01 ~]# curl 172.16.1.7
Eth1
[root@web01 ~]# curl 10.0.0.7
Eth0

5.2 基于埠的配置方式

(1)配置多埠的虛擬主機

[root@web01 conf.d]# vim port.conf
server {
        listen 81;
        
        location / { 
                root /code_81;
                index index.html;
        }
}
server {
        listen 82;
        
        location / { 
                root /code_82;
                index index.html;
        }
}		

(2)根據組態檔創建所需的目錄

[root@web01 conf.d]# mkdir /code_8{1..2}
[root@web01 conf.d]# echo "81" > /code_81/index.html
[root@web01 conf.d]# echo "82" > /code_82/index.html

(3)檢查語法并重啟服務

[root@web01 conf.d]# ngin x -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl restart nginx

(4)如何去訪問

http://10.0.0.7:82/  

5.3 基于多個hosts名稱方式(多域名方式)

(1)準備多虛擬主機組態檔

[root@web01 conf.d]# cat test1.oldboy.com.conf 
server {
	listen 80;
	server_name test1.oldboy.com;

	location / {
		root /code/test1;
		index index.html;
	}
}

[root@web01 conf.d]# cat test2.oldboy.com.conf 
server {
	listen 80;
	server_name test2.oldboy.com;

	location / {
		root /code/test2;
		index index.html;
	}
}

(2)根據組態檔創建對應的目錄

[root@web01 conf.d]# mkdir /code/test{1..2} -p
[root@web01 conf.d]# echo "test1_server" > /code/test1/index.html
[root@web01 conf.d]# echo "test2_server" > /code/test2/index.html
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx

(3) 配置域名決議

10.0.0.7      test1.oldboy.com
10.0.0.7      test2.oldboy.com  

(4)通過瀏覽器訪問該網站

6. Nginx日志管理

(1)log_format的作用是定義日志格式語法
在這里插入圖片描述

(2)nginx默認日志格式語法如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

在這里插入圖片描述

(3) Nginx日志格式允許包含的內置變數

$remote_addr        # 記錄客戶端IP地址
$remote_user        # 記錄客戶端用戶名
$time_local         # 記錄通用的本地時間
$time_iso8601       # 記錄ISO8601標準格式下的本地時間
$request            # 記錄請求的方法以及請求的http協議
$status             # 記錄請求狀態碼(用于定位錯誤資訊)
$body_bytes_sent    # 發送給客戶端的資源位元組數,不包括回應頭的大小
$bytes_sent         # 發送給客戶端的總位元組數
$msec               # 日志寫入時間,單位為秒,精度是毫秒,
$http_referer       # 記錄從哪個頁面鏈接訪問過來的
$http_user_agent    # 記錄客戶端瀏覽器相關資訊
$http_x_forwarded_for #記錄客戶端IP地址
$request_length     # 請求的長度(包括請求行, 請求頭和請求正文),
$request_time       # 請求花費的時間,單位為秒,精度毫秒
# 注:如果Nginx位于負載均衡器,nginx反向代理之后, web服務器無法直接獲取到客 戶端真實的IP地址,
# $remote_addr獲取的是反向代理的IP地址, 反向代理服務器在轉發請求的http頭資訊中,
# 增加X-Forwarded-For資訊,用來記錄客戶端IP地址和客戶端請求的服務器地址,

(4)access_log日志配置語法
意思就是,你的日志的格式你定義好了,然后直接呼叫那個格式
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wmqnnSBP-1639931026003)(D31E30D30FF2491AAF185208E148D64D)]

(5)Nginx Access日志配置實踐

server {
    listen 80;
    server_name code.oldboy.com;
    
    #將當前的server網站的訪問日志記錄至對應的目錄,使用main格式
    access_log /var/log/nginx/code.oldboy.com.log main;
    location / {
        root /code;
    }
	
    #當有人請求改favicon.ico時,不記錄日志
    location /favicon.ico {
        access_log off;
        return 200;  
    
    }
    location /favicon.ico {  
    # 將圖示保存到指定的訪問目錄
     root  /data/nginx/html ; 
     }
}

小提示:
在這里插入圖片描述

7. Nginx日志切割

使用logrotate切割日志

[root@nginx conf.d]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
        daily                   # 每天切割日志
        missingok               # 日志丟失忽略
        rotate 52               # 日志保留52天
        compress                # 日志檔案壓縮
        delaycompress           # 延遲壓縮日志
        notifempty              # 不切割空檔案
        create 640 nginx adm    # 日志檔案權限
        sharedscripts
        postrotate      # 切割日志執行的命令
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

日志切割后的效果

[root@oldboy ~]# ll /var/log/nginx/
total 4044
-rw-r----- 1 www adm  54438 Oct 12 03:28 access.log-20181012.gz
-rw-r----- 1 www adm  28657 Oct 13 03:48 access.log-20181013.gz
-rw-r----- 1 www adm  10135 Oct 12 03:28 error.log-20181130.gz
-rw-r----- 1 www adm   7452 Oct 13 03:48 error.log-20181201.gz

8. 自我總結

(1)微服務:就類似于soa 京東的模式,把多個功能分塊壞,不至于壞一個功能,整個功能都壞掉,云架構、中間層:代理的形式

(2)一臺服務器最大的連接時65535,只有這么多的埠,一個連接可能會打開多個檔案描述符,檔案描述符可以調大一點,

(3)動靜分離:動態的資料和靜態的資料分開處理
nginx能做快取服務,很多cdn公司拿nginx做的快取
(4)web服務都僅僅處理靜態資源html css js 字體 doc mp4都屬于靜態資源
直接通過磁盤,回傳給用戶,然后瀏覽器做一次加載,人類可識別的

(5)動態資源:需要查詢資料庫 ,通過記憶體,加載決議,然后回傳要給頁面給用用戶的
–lock-path=/var/run/nginx.lock鎖路徑就是nginx啟動,就會touch一個檔案出來,防止再次啟動

(6)nginx -t 檢查語法錯誤
systemctl status nginx -l 可以詳細的看看報錯

(7)nginx 回車啟動–>再原始碼編譯的時候會使用,再原始碼編譯的時候,并沒有給我們提供,nginx啟動和停止的管理組態檔, systemctl 用yum裝會提供
注意: 這兩種方式不能混著用,只能用一種

(8)如果cpu的核心數是16,就會把work_pricesses 改成16,每個核心可以處理2-3w,這個不好說,

(9)再event時間模塊nginx默認使用的就是epoll網路模式,可以再時間里面不用寫

(10)長連接的超時時間:如果用戶不在點擊頁面,超過了超時時間,然后自動斷開連接

(11)/etc/nginx/mime.types 資源型別與我呢間的對應,如果訪問的檔案沒有對應關系,直接點擊的話,會下載檔案,如果有的話可以在線訪問,也可以下載(滑鼠右擊選下載),

(12)再生產上面一般用平滑重啟,windows域名決議 /windows/system32/drivers/etc/hosts

(13)直接再/etc/nginx/conf.d/ 多加一個組態檔,多加一個server相當于多加一個網站 ,server_name ;""代表是空,可以用ip去訪問

(14)
listen 10.0.0.7:80 只能通過10.0.0.7才能訪問我的80埠,如果只寫80埠,不管是eth0
還是eth1都能訪問我的網站

(15)這里把default.conf檔案給洗掉了,如果不想刪,則使用gzip default.conf進行壓縮,因為這個和ip.conf都是通過ip訪問的,以免沖突,所以以后再測驗的時候,一面沖突,把不需要的改個名字,或者壓縮一個壓縮包
(16)在/etc/nginx/nginx.conf 下 nginx -t 檢查語法 沒問題了在進行重啟nginx,就這個檔案中有/etc/nginx/conf.d/*.conf

(17)多IP的方式不好記,訪問一個IP,一個IP對應不同埠,不同的埠對應不同的專案,
在公司的內部用的還是比較多的,因為沒有域名,訪問不同的埠來實作,這個不適合對外,埠被人記不住,這幾個專案是公司內部人使用的,這時候沒有域名,這時
就用埠的方式解決,只限于企業內部用,對外不用這個

(18)基于多個hosts名稱方式(多域名方式)最最常用的一種方式
可以把多個server寫入一個檔案中,也可以分成多個檔案 比如 vhost1.conf vhost2.conf
如果不想開哪個站點,直接gzip關掉即可
每一個域名寫一個組態檔

(19)
會把請求拋給http,http會詢問誰的server_name是 test3.oldboy.com,當找不到server_name域名
匹配的時候,又把域名決議到我的服務器上面來了,選擇一個組態檔名最靠前的檔案名給你

(20)nginx -t 是檢查的是這一個組態檔/etc/nginx/nginx.conf
如果是第三行出問題了,則vim +3 1.sh 直接定位到第三行
在重啟nginx的時候一定要檢查語法,一旦寫錯了,在檢查nginx會把nginx殺掉了,起不來了,這個網站馬上就崩了,一定要先檢查語法,然后再systemctl reload nginx

(21)服務沒起來怎么查(nginx -t),服務起來怎么查(/var/log/nginx/error_)

(22)日志切割:用yum安裝之后,就會有個程式
這個logrotate服務默認系統是有的,只是nginx提供一個日志切割檔案,來
使用這個服務,給nginx主機名發送一個信號,告訴他重新把日志檔案
reload一下

(23)zcat 可以查看.zip壓縮包里面的內容 但是僅次于壓縮包里只有一個檔案

(24)/etc/logrotate.d/nginx 這個檔案不用調整,不用動
用yum安裝的話不用寫腳本,直接提供組態檔
用原始碼安裝的可能會寫腳本

(25)虛擬主機:一個nginx上面跑多個專案,多域名虛擬主機(重要),其他的不重要

(26)ping -c1 -W1 10.0.0.1

    -c 1 要求回應的次數(1次)
    -W 1 在1秒后退出

(27)curl -I 10.0.0.7:/index.html 使用這個回傳的是頭部訊息

(28) nginx的行程

在這里插入圖片描述

(29) 連接放到頁面上就是網頁 ,/var/log/httpd/error

(30) 查看dns的程序

 yum -y install bind-utils  
 
 nslookup  
 

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

標籤:其他

上一篇:02 RuoYi-Vue后臺管理系統部署服務器(docker方式)

下一篇:Spark on Yarn 架構是怎么樣的(畫圖)

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