主頁 > 後端開發 > 企業級別應用--ELK企業級日志分析系統(ELK 日志分析系統 、配置 Elasticsearch 群集 )

企業級別應用--ELK企業級日志分析系統(ELK 日志分析系統 、配置 Elasticsearch 群集 )

2020-09-18 05:13:28 後端開發

文章目錄

  • 一、 ELK日志系統簡介
    • 1.1 ELK的組成
    • 1.2 日志分析的步驟
    • 1.3 Elasticsearch 介紹
      • 1.3.1 Elasticsearch 的基礎核心概念
    • 1.4 Logstash 介紹
    • 1.5 Kibana 介紹
  • 二、 部署Elasticsearch 群集
    • 2.1 部署程序
      • 1. 準備環境
      • 2. 安裝Elasticsearch軟體
      • 3. 更改elasticsearch主組態檔
      • 4. 開啟elastisearch,并測驗
      • 5. 安裝node組件(手工編譯安裝)
      • 6. 安裝前端框架 phantomjs(手工編譯安裝)
      • 7. 安裝elasticsearch-head插件(手工編譯安裝)
      • 8. 修改elasticsearch主組態檔
      • 9. 啟動elasticsearch-head 服務器
      • 10. 進行訪問
      • 11. 添加資料并查看
  • 三、 安裝logstash
    • 3.1 logstash的安裝程序
      • 1. web服務器的部署
      • 2. 查看JAVA環境
      • 3. 安裝logstash
      • 4. 測驗logstash命令
      • 5. 使用logstash將資訊寫入elasticsearch中--輸入輸出對接
      • 6. 修改logstash組態檔
  • 三、 kibana部署與使用
    • 3.1 部署kibana
    • 3.2 對接apache的日志檔案
    • 3.3 在kibana中進行創建、查看

一、 ELK日志系統簡介

日志分析是運維工程師解決系統故障、發現問題的主要手段,日志包含多種型別,包括程式日志、Web 訪問日志、系統日志以及安全日志等,ELK可以很好地查找以及分析所需要的內容,快速定位是否出現故障,以及哪些機器、哪些服務存在故障,

1.1 ELK的組成

ELK 由 ElasticSearch、Logstash 和 Kiabana 三個開源工具組成,其官方網站為 https://www.elastic.co/cn,

  • Elasticsearch 是一個開源分布式實時分析搜索引擎,建立在全文搜索引擎庫 Apache Lucene 基礎上,同時隱藏了 Apache Lucene 的復雜性,Elasticsearch 將所有的功能 打包成一個獨立的服務,并提供了一個簡單的 RESTfulAPI 介面,它具有分布式、零配置、自動發現、索引自動分片、索引副本機制、RESTful 風格介面、多資料源、自動搜索負載等特點,
  • Logstash 是一個完全開源的工具,主要用于日志收集,同時可以對資料處理,并輸出 給 Elasticsearch,
  • Kibana 也是一個開源和免費的工具,Kibana 可以為 Logstash 和 ElasticSearch 提 供圖形化的日志分析 Web 界面,可以匯總、分析和搜索重要資料日志,

1.2 日志分析的步驟

Logstash 收集 AppServer 產生的 Log,并存放到 ElasticSearch 群集中,而 Kibana 則 從 ES 群集中查詢資料生成圖表,再回傳給 Browser,

  1. 將日志進行集中化管理,
  2. 將日志格式化(Logstash)并輸出到 Elasticsearch,
  3. 對格式化后的資料進行索引和存盤(Elasticsearch),
  4. 前端資料的展示(Kibana),

1.3 Elasticsearch 介紹

Elasticsearch 提供了一 個分布式多用戶能力的全文搜索引擎,基于 RESTful Web 介面,通過該介面,用戶可以通 過瀏覽器與 Elasticsearch 通信,具有實時搜索、穩定、可靠、快速、安裝使用方便等特點,

1.3.1 Elasticsearch 的基礎核心概念

  • 接近實時(NRT):Elasticsearch 是一個搜索速度接近實時的搜索平臺,回應速度非常 快,從開始索引一個檔案到這個檔案能夠被搜索到只有一個輕微的延遲(通常是 1s) ,
  • 群集(cluster) :在一個或多個節點上存放用戶資料,并一起提供索引和搜索功能,通過選舉產生主節點,并提供跨節點的聯合索引和搜索的功能,
  • 節點(node):是指一臺單一的服務器,多個節點組織為一個群集,每個節點都存盤資料并參與群集的索引和搜索功能,默認情況,每個節點都已經加入 Elasticsearch 群集,如果群集中有多個 節點,它們將會自動組建一個名為 Elasticsearch 的群集,
  • 索引(index):類似于關系型資料庫中的“庫”,當索引一個檔案后,就可以使用 Elasticsearch 搜索到該檔案,在 index 下面包含存盤資料的型別(Type),Type 類似于關系型資料 庫中的“表”,用來存放具體資料,而 Type 下面包含檔案(Document),檔案相當于關 系型資料庫的“記錄”,一個檔案是一個可被索引的基礎資訊單元,
  • 分片和副本(shards & replicas):Elasticsearch 將索引分成若干個部分,每個部分稱為一個分片,每個分片就是一個全功能的獨立的索引,分片的數量一般在索引創建前指定,且創建索引后不能更改,
  • 分片的兩個最主要原因如下,
    水平分割擴展,增大存盤量,
    分布式并行跨分片操作,提高性能和吞吐量,
  • Elasticsearch 將索引分片復制一份或多份,稱為副本,副本是索引 的另一個備份,用于資料冗余以及負載分擔,默認情況下 Elasticsearch 自動對索引請求進行負載分擔,

1.4 Logstash 介紹

Logstash 由 JRuby 語言撰寫,運行在 Java 虛擬機(JVM)上,常用于日志處理,Logstash 只做三件事情:資料輸入、資料加工(如過濾,改寫等) 以及資料輸出,
LogStash 的主要組件如下,

  • Shipper:日志收集者,負責監控本地日志檔案的變化,及時收集最新的日志檔案內容,通常遠程代理端(agent)只需要運行這個組件即可,
  • Indexer:日志存盤者,負責接收日志并寫入到本地檔案,
  • Broker:日志 Hub,負責連接多個 Shipper 和多個 Indexer,
  • Search and Storage:允許對事件進行搜索和存盤,
  • WebInterface:基于 Web 的展示界面,

Logstash 使用管道方式進行日志的搜集處理和輸出,有點類似 Linux 系統的管道命令, 將前一個流程的處理結果發送到后一個流程繼續處理,在 Logstash 中,包括了三個階段, 分別是輸入(Input )、處理(Filter,非必需)和輸出(Output),

1.5 Kibana 介紹

Kibana可以搜索、查看存盤在 Elasticsearch 索引中的資料,并通過各種圖表進行高級資料分析及展示,讓資料看起來一目了然,

Kibana 的主要功能如下,

  • Elasticsearch 無縫之集成,Kibana 架構是為 Elasticsearch 定制的,可以將任何(結構 化和非結構化)資料加入 Elasticsearch 索引,
  • 整合資料,Kibana 可以讓海量資料變得更容易理解,根據資料內容可以創建形象的柱形圖、折線圖、散點圖、直方圖、餅圖和地圖,方便用戶查看,
  • 復雜資料分析,Kibana 提升了 Elasticsearch 的分析能力,能夠更加智能地分析資料,執行資料轉換并且根據要求對資料切割分塊,
  • 讓更多團隊成員受益,強大的資料庫可視化介面讓各業務崗位都能夠從資料集合受益,
  • 介面靈活,分享更容易,使用 Kibana 可以更加方便地創建、保存、分享資料,并將可視化資料快速交流,
  • 配置簡單,Kibana 的配置和啟用非常簡單,用戶體驗非常友好,Kibana 自帶 Web 服務,可以快速啟動運行,
  • 可視化多資料源,Kibana 可以非常方便地把來自 Logstash、ES-Hadoop、Beats 或第三方技術的資料整合到 Elasticsearch,
  • 簡單資料匯出,Kibana 可以方便地匯出感興趣的資料,與其他資料整合并融合后快速建模分析,發現新結果,

二、 部署Elasticsearch 群集

部署Elasticsearch 群集至少需要兩臺服務器

2.1 部署程序

1. 準備環境

修改主機名、hosts檔案、關閉防火墻、內核防護

[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# su
[root@node1 ~]# vim /etc/hosts    ##在hosts檔案中寫入下面的決議條目
14.0.0.77 node1
14.0.0.110 node2
[root@node1 ~]# systemctl stop firewalld.service 
[root@node1 ~]# setenforce 0
[root@node1 ~]# java -version    ##查看jdk是否安裝
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# su
[root@node2 ~]# vim /etc/hosts
14.0.0.77 node1
14.0.0.110 node2
[root@node2 ~]# systemctl stop firewalld.service 
[root@node2 ~]# setenforce 0

2. 安裝Elasticsearch軟體

兩個節點服務器進行相同的操作,以node1服務器為例

[root@node1 ~]# cd /opt   ##將軟體包拷貝到/opt目錄下
rz waiting to receive.
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm                    rh
elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm     ##rpm方式安裝elasticsearch軟體
警告:elasticsearch-5.5.0.rpm: 頭V4 RSA/SHA512 Signature, 密鑰 ID d88e42b4: NOKEY
準備中...                          ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升級/安裝...
   1:elasticsearch-0:5.5.0-1          ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service
[root@node1 opt]# systemctl daemon-reload     ##多載系統服務
[root@node1 opt]# systemctl enable elasticsearch.service    ##設定為開機自啟動
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

3. 更改elasticsearch主組態檔

node1與node2做同樣的操作

[root@node1 opt]# cp -p /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak     ##將組態檔做備份,防止錯改組態檔
[root@node1 opt]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# vim elasticsearch.yml
cluster.name: my-elk-cluster   ##17行,設定集群名字
node.name: node1               ##23行,設定節點名字
path.data: /data/elk_data      ##33行,資料存放路徑
path.logs: /var/log/elasticsearch/     ##37行,日志存放路徑
bootstrap.memory_lock: false           ##43行,不在啟動的時候鎖定記憶體
network.host: 0.0.0.0                  ##55行,提供服務系結的IP地址,0.0.0.0代表所有網段
http.port: 9200                        ##59行,偵聽埠9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]          ##68行,集群發現通過單播實作
[root@node1 elasticsearch]# grep -v '^#' elasticsearch.yml    ##查看剛剛更改的組態檔是否成功
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
[root@node1 elasticsearch]# mkdir -p /data/elk_data     ##創建elasticsearch的資料檔案存放位置
[root@node1 elasticsearch]# id elasticsearch    ##查看用戶
uid=987(elasticsearch) gid=981(elasticsearch) =981(elasticsearch)
[root@node1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk_data/       ##設定elasticsearch的資料檔案存放目錄屬組、屬主為elasticsearch

4. 開啟elastisearch,并測驗

node1和node2做同樣的操作

[root@node1 elasticsearch]# systemctl start elasticsearch.service     ##需要等待一會埠開會開啟
[root@node1 elasticsearch]# netstat -ntap | grep 9200   
tcp6       0      0 :::9200                 :::*                    LISTEN      65901/java  

在真機中訪問

http://14.0.0.77:9200
http://14.0.0.110:9200

在這里插入圖片描述
在這里插入圖片描述

http://14.0.0.77:9200/_cluster/health?pretty
http://14.0.0.110:9200/_cluster/health?pretty

在這里插入圖片描述

在這里插入圖片描述

http://14.0.0.77:9200/_cluster/state?pretty
http://14.0.0.110:9200/_cluster/state?pretty

在這里插入圖片描述
在這里插入圖片描述

5. 安裝node組件(手工編譯安裝)

軟體包之前已經拷貝到/opt目錄下了,直接進行解壓安裝

[root@node1 elasticsearch]# cd /opt
[root@node1 opt]# yum install gcc gcc-c++ -y
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz   ##解壓
[root@node1 node-v8.2.1]# ./configure           ##configure配置
[root@node1 node-v8.2.1]# make -j4              ##編譯安裝,-j4是指四個執行緒運行,編譯速度比較慢,大概20分鐘
[root@node1 node-v8.2.1]# make install          ##安裝

6. 安裝前端框架 phantomjs(手工編譯安裝)

[root@node1 opt]# tar jvxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/    ##解壓
[root@node1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/
[root@node1 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/     ##將腳本拷貝到指定目錄下,便于系統識別

7. 安裝elasticsearch-head插件(手工編譯安裝)

[root@node1 bin]#  cd /opt
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install    ##等待安裝

8. 修改elasticsearch主組態檔

[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml     ##在檔案末尾寫入下面兩句
http.cors.enabled: true        ##開啟跨域訪問支持,默認為false
http.cors.allow-origin: "*"    ##跨域訪問允許的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service

9. 啟動elasticsearch-head 服務器

[root@node1 elasticsearch-head]# pwd
/usr/local/src/elasticsearch-head
[root@node1 elasticsearch-head]# npm run start &    ##開啟服務,在后臺運行
[1] 112187
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100    ##埠為9100
[root@node1 elasticsearch-head]# netstat -ntap | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      112197/grunt  

10. 進行訪問

在真機中進行訪問

14.0.0.77:9100
14.0.0.110:9100

在這里插入圖片描述
在這里插入圖片描述

11. 添加資料并查看

[root@node1 elasticsearch-head]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'     ##存資料
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

在這里插入圖片描述

三、 安裝logstash

這里還是再準備兩臺centos7的虛擬機,一臺作為web服務器,安裝apache服務,另外一臺安裝logstash收集apache的日志,并交給elasticsearch進行存盤,

3.1 logstash的安裝程序

1. web服務器的部署

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
[root@apache ~]# yum install httpd -y
[root@apache ~]# systemctl start httpd

2. 查看JAVA環境

[root@apache ~]# java -version    ##如果沒有安裝,使用yum install java -y 安裝
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

3. 安裝logstash

[root@apache ~]# cd /opt
將軟體包拷貝到這個目錄下
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm    ##安裝logstash
警告:logstash-5.5.1.rpm: 頭V4 RSA/SHA512 Signature, 密鑰 ID d88e42b4: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:logstash-1:5.5.1-1               ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash
[root@apache opt]# systemctl start logstash.service    ##開啟服務
[root@apache opt]# systemctl enable logstash.service   ##設定開機自啟動
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/    ##建立軟連接便于系統識別

logstash (Apache)與elasticsearch (node)功能是否正常,可以使用logstash命令做對接測驗,常用命令引數如下:

  • -f 通過這個選項可以指定logstash的組態檔,根據組態檔配置logstash
  • -e后面跟著字串該字串可以被當做logstash的配置(如果是””,則默認使用stdin做為輸入、stdout作為輸出)
  • -t測驗組態檔是否正確,然后退出

4. 測驗logstash命令

  • 輸入采用標準輸入輸出采用標準輸出—在Apache服務器上
[root@apache opt]# logstash -e 'input { stdin {} } output { stdout {} }'
輸入命令后會進入一個輸入輸出的狀態,我們輸入什么,就會按照格式給我們輸出出來
...
省略掉部分提示資訊
2020-09-15T14:28:01.479Z apache 
www.njit.com     ##這里就是自己輸入的內容
2020-09-15T14:29:54.032Z apache www.njit.com     ##這是按照格式輸出的內容
zhangsan
2020-09-15T14:30:00.274Z apache zhangsan

在這里插入圖片描述

  • 使用rubydebug顯示詳細輸出,codec為一種編解碼器
[root@apache opt]# logstash -e 'input { stdin {} } output { stdout { codec=>rubydebug } }'
...
省略掉部分提示資訊
www.njit.com     ##輸入資訊,以下為輸出資訊
{
    "@timestamp" => 2020-09-15T14:37:50.914Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.njit.com"
zhangsan       ####輸入資訊,以下為輸出資訊
{
    "@timestamp" => 2020-09-15T14:38:18.485Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "zhangsan"
}

5. 使用logstash將資訊寫入elasticsearch中–輸入輸出對接

[root@apache opt]# logstash -e 'input { stdin {} } output { elasticsearch { hosts=>["14.0.0.77:9200"] } }'     ##將資訊寫入elasticsearch中
...
省略部分資訊
www.njit.com

在真機上進行查看
在這里插入圖片描述
在這里插入圖片描述

6. 修改logstash組態檔

Logstash組態檔主要由三部分組成: input、output、filter(根據需要)

[root@apache opt]# cd /var/log/
[root@apache log]# ll | grep messages 
-rw-------. 1 root     root   678003 9  15 22:52 messages   ##權限為管理員讀寫,需要被其它用戶讀
[root@apache log]# chmod o+r messages
[root@apache log]# ll | grep messages 
-rw----r--. 1 root     root   685620 9  15 22:54 messages
[root@apache log]# cd /etc/logstash/
[root@apache logstash]# vim logstash.yml    ##組態檔中寫明了子組態檔的路徑,需要到這個路徑下創建檔案才能被識別

在這里插入圖片描述

[root@apache log]# vim /etc/logstash/conf.d/system.conf
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["14.0.0.77:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }
[root@apache logstash]# systemctl restart logstash.service

在真機中訪問,產生了新的索引檔案
在這里插入圖片描述

三、 kibana部署與使用

3.1 部署kibana

再使用一臺新的虛擬機14.0.0.107作為kibana服務器,也可以在node1節點服務器上直接安裝

[root@localhost ~]# hostnamectl set-hostname kibana
[root@localhost ~]# su
將軟體包拷貝到當前目錄下
[root@kibana ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@kibana ~]# cd /etc/kibana/
[root@kibana kibana]# cp kibana.yml kibana.yml.bak
[root@kibana kibana]# vim kibana.yml
server.port: 5601                ##2行,kibana打開的埠
server.host: "0.0.0.0"           ##7行,kibana偵聽的地址
elasticsearch.url: "http://14.0.0.77:9200"     ##21行,和elasticsearch建立聯系
kibana.index: ".kibana"            ##30行,在elasticsearch中添加.kibana索引
[root@kibana kibana]# systemctl start kibana.service 
[root@kibana kibana]# systemctl enable kibana.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

在真機查看索引
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

3.2 對接apache的日志檔案

[root@apache logstash]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim apache_log.conf

        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
        }
       file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }
        
      } 
output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["14.0.0.77:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        } 
        if [type] == "error" {
        elasticsearch {
          hosts => ["14.0.0.77:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }
[root@apache conf.d]#  /usr/share/logstash/bin/logstash -f apache_log.conf    ##不重啟服務,直接加載組態檔

3.3 在kibana中進行創建、查看

在真機中進行查看
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在kibana中為apache日志創建索引
在這里插入圖片描述
在這里插入圖片描述
同樣的操作創建apache_error
在這里插入圖片描述
在這里插入圖片描述

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

標籤:java

上一篇:樹莓派開機自動連接WiFi 及樹莓派設定固定IP地址

下一篇:Linux基礎指令

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