主頁 > 後端開發 > 【超詳細】Apache Durid從入門到安裝詳細教程

【超詳細】Apache Durid從入門到安裝詳細教程

2022-08-27 07:36:45 後端開發

file

1. Durid概述

Apache Druid是一個集時間序列資料庫、資料倉庫和全文檢索系統特點于一體的分析性資料平臺,本文將帶你簡單了解Druid的特性,使用場景,技術特點和架構,這將有助于你選型資料存盤方案,深入了解Druid存盤,深入了解時間序列存盤等,

Apache Druid是一個高性能的實時分析型資料庫,

1.1 為什么使用

1.1.1 云原生資料庫

一個現代化的云原生,流原生,分析型資料庫

? Druid是為快速查詢和快速攝入資料的作業流而設計的,Druid強在有強大的UI,運行時可操作查詢,和高性能并發處理,Druid可以被視為一個滿足多樣化用戶場景的資料倉庫的開源替代品,

1.1.2 輕松集成

輕松與現有的資料管道集成

? Druid可以從訊息總線流式獲取資料(如Kafka,Amazon Kinesis),或從資料湖批量加載檔案(如HDFS,Amazon S3和其他同類資料源),

1.1.3 超高性能

比傳統方案快100倍的性能

  • Druid對資料攝入和資料查詢的基準性能測驗大大超過了傳統解決方案,

  • Druid的架構融合了資料倉庫,時間序列資料庫和檢索系統最好的特性,

1.1.4 作業流

解鎖新的作業流

? Druid為Clickstream,APM(應用性能管理系統),supply chain(供應鏈),網路遙測,數字營銷和其他事件驅動形式的場景解鎖了新的查詢方式和作業流,Druid專為實時和歷史資料的快速臨時查詢而構建,

1.1.5 多種部署方式

可以部署在AWS/GCP/Azure,混合云,k8s和租用服務器上

? Druid可以部署在任Linux環境中,無論是內部環境還是云環境,部署Druid是非常easy的:通過添加或刪減服務來擴容縮容,

1.2 使用場景

Apache Druid適用于對實時資料提取,高性能查詢和高可用要求較高的場景,因此,Druid通常被作為一個具有豐富GUI的分析系統,或者作為一個需要快速聚合的高并發API的后臺,Druid更適合面向事件資料,

1.2.1 常見的使用場景

比較常見的使用場景

1.2.1.1 用戶活動和行為

? Druid經常用在點擊流,訪問流,和活動流資料上,具體場景包括:衡量用戶參與度,為產品發布追蹤A/B測驗資料,并了解用戶使用方式,Druid可以做到精確和近似計算用戶指標,例如不重復計數指標,這意味著,如榷訓用戶指標可以在一秒鐘計算出近似值(平均精度98%),以查看總體趨勢,或精確計算以展示給利益相關者,Druid可以用來做“漏斗分析”,去測量有多少用戶做了某種操作,而沒有做另一個操作,這對產品追蹤用戶注冊十分有用,

1.2.1.2 網路流

? Druid常常用來收集和分析網路流資料,Druid被用于管理以任意屬性切分組合的流資料,Druid能夠提取大量網路流記錄,并且能夠在查詢時快速對數十個屬性組合和排序,這有助于網路流分析,這些屬性包括一些核心屬性,如IP和埠號,也包括一些額外添加的強化屬性,如地理位置,服務,應用,設備和ASN,Druid能夠處理非固定模式,這意味著你可以添加任何你想要的屬性,

1.2.1.3 數字營銷

? Druid常常用來存盤和查詢在線廣告資料,這些資料通常來自廣告服務商,它對衡量和理解廣告活動效果,點擊穿透率,轉換率(消耗率)等指標至關重要,

? Druid最初就是被設計成一個面向廣告資料的強大的面向用戶的分析型應用程式,在存盤廣告資料方面,Druid已經有大量生產實踐,全世界有大量用戶在上千臺服務器上存盤了PB級資料,

1.2.1.4 應用性能管理

? Druid常常用于追蹤應用程式生成的可運營資料,和用戶活動使用場景類似,這些資料可以是關于用戶怎樣和應用程式互動的,它可以是應用程式自身上報的指標資料,Druid可用于下鉆發現應用程式不同組件的性能如何,定位瓶頸,和發現問題,

? 不像許多傳統解決方案,Druid具有更小存盤容量,更小復雜度,更大資料吞吐的特點,它可以快速分析數以千計屬性的應用事件,并計算復雜的加載,性能,利用率指標,比如,基于百分之95查詢延遲的API終端,我們可以以任何臨時屬性組織和切分資料,如以天為時間切分資料,如以用戶畫像統計,如按資料中心位置統計,

1.2.1.5 物聯網和設備指標

? Driud可以作為時間序列資料庫解決方案,來存盤處理服務器和設備的指標資料,收集機器生成的實時資料,執行快速臨時的分析,去估量性能,優化硬體資源,和定位問題,

? 和許多傳統時間序列資料庫不同,Druid本質上是一個分析引擎,Druid融合了時間序列資料庫,列式分析資料庫,和檢索系統的理念,它在單個系統中支持了基于時間磁區,列式存盤,和搜索索引,這意味著基于時間的查詢,數字聚合,和檢索過濾查詢都會特別快,

? 你可以在你的指標中包括百萬唯一維度值,并隨意按任何維度組合group和filter(Druid 中的 dimension維度類似于時間序列資料庫中的tag),你可以基于tag group和rank,并計算大量復雜的指標,而且你在tag上檢索和過濾會比傳統時間序列資料庫更快,

1.2.1.6 OLAP和商業智能

? Druid經常用于商業智能場景,公司部署Druid去加速查詢和增強應用,和基于Hadoop的SQL引擎(如Presto或Hive)不同,Druid為高并發和亞秒級查詢而設計,通過UI強化互動式資料查詢,這使得Druid更適合做真實的可視化互動分析,

1.2.2 適合的場景

如果您的使用場景符合以下的幾個特征,那么Druid是一個非常不錯的選擇:

  • 資料插入頻率比較高,但較少更新資料
  • 大多數查詢場景為聚合查詢和分組查詢(GroupBy),同時還有一定得檢索與掃描查詢
  • 將資料查詢延遲目標定位100毫秒到幾秒鐘之間
  • 資料具有時間屬性(Druid針對時間做了優化和設計)
  • 在多表場景下,每次查詢僅命中一個大的分布式表,查詢又可能命中多個較小的lookup表
  • 場景中包含高基維度資料列(例如URL,用戶ID等),并且需要對其進行快速計數和排序
  • 需要從Kafka、HDFS、物件存盤(如Amazon S3)中加載資料
1.2.3 不適合的場景

如果您的使用場景符合以下特征,那么使用Druid可能是一個不好的選擇:

  • 根據主鍵對現有資料進行低延遲更新操作,Druid支持流式插入,但不支持流式更新(更新操作是通過后臺批處理作業完成)
  • 延遲不重要的離線資料系統
  • 場景中包括大連接(將一個大事實表連接到另一個大事實表),并且可以接受花費很長時間來完成這些查詢

2. Durid是什么

Apache Druid 是一個開源的分布式資料存盤引擎,

? Druid的核心設計融合了OLAP/analytic databases,timeseries database,和search systems的理念,以創造一個適用廣泛用例的統一系統,Druid將這三種系統的主要特性融合進Druid的ingestion layer(資料攝入層),storage format(存盤格式化層),querying layer(查詢層),和core architecture(核心架構)中,

file

2.1 主要特性

2.1.1 列式存盤

? Druid單獨存盤并壓縮每一列資料,并且查詢時只查詢特定需要查詢的資料,支持快速scan,ranking和groupBy,

2.2.2 原生檢索索引

? Druid為string值創建倒排索引以達到資料的快速搜索和過濾,

2.2.3 流式和批量資料攝入

? 開箱即用的Apache kafka,HDFS,AWS S3連接器connectors,流式處理器,

2.2.4 靈活的資料模式

? Druid優雅地適應不斷變化的資料模式和嵌套資料型別,

2.2.5 基于時間的優化磁區

? Druid基于時間對資料進行智能磁區,因此,Druid基于時間的查詢將明顯快于傳統資料庫,

2.2.6 支持SQL陳述句

? 除了原生的基于JSON的查詢外,Druid還支持基于HTTP和JDBC的SQL,

2.2.7 水平擴展能力

? 百萬/秒的資料攝入速率,海量資料存盤,亞秒級查詢,

2.2.8 易于運維

? 可以通過添加或移除Server來擴容和縮容,Druid支持自動重平衡,失效轉移,

2.3 技術選型

file

技術對比
Druid

? 是一個實時處理時序資料的OLAP資料庫,它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引,

Kylin

? 核心是Cube,Cube是一種預計算技術,預先對資料作多維索引,查詢時只掃描索引而不訪問原始資料從而提速,

Presto

? 它沒有使用MapReduce,大部分場景下比Hive快一個數量級,其中的關鍵是所有的處理都在記憶體中完成,

Impala

? 基于記憶體運算,速度快,支持的資料源沒有Presto多,

Spark SQL

? 基于Spark平臺上的一個OLAP框架,基本思路是增加機器來并行計算,從而提高查詢速度,

ES

? 最大的特點是使用了倒排索引解決索引問題,根據研究,ES在資料獲取和聚集用的資源比在Druid高,

框架選型
  • 從超大資料的查詢效率來看:
    Druid > Kylin > Presto > Spark SQL
  • 從支持的資料源種類來講:
    Presto > Spark SQL > Kylin > Druid

2.4 資料攝入

? Druid同時支持流式和批量資料攝入,Druid通常通過像Kafka這樣的訊息總線(加載流式資料)或通過像HDFS這樣的分布式檔案系統(加載批量資料)來連接原始資料源,

? Druid通過Indexing處理將原始資料以segment的方式存盤在資料節點,segment是一種查詢優化的資料結構,

file

2.5 資料存盤

? 像大多數分析型資料庫一樣,Druid采用列式存盤,根據不同列的資料型別(string,number等),Druid對其使用不同的壓縮和編碼方式,Druid也會針對不同的列型別構建不同型別的索引,

? 類似于檢索系統,Druid為string列創建反向索引,以達到更快速的搜索和過濾,類似于時間序列資料庫,Druid基于時間對資料進行智能磁區,以達到更快的基于時間的查詢,

? 不像大多數傳統系統,Druid可以在資料攝入前對資料進行預聚合,這種預聚合操作被稱之為rollup,這樣就可以顯著的節省存盤成本,

file

2.6 查詢

? Druid支持JSON-over-HTTP和SQL兩種查詢方式,除了標準的SQL操作外,Druid還支持大量的唯一性操作,利用Druid提供的演算法套件可以快速的進行計數,排名和分位數計算,

file

Drui被設計成一個健壯的系統,它需要7*24小時運行,

Druid擁有以下特性,以確保長期運行,并保證資料不丟失,

2.6.1 資料副本

? Druid根據配置的副本數創建多個資料副本,所以單機失效不會影響Druid的查詢,

2.6.2 獨立服務

? Druid清晰的命名每一個主服務,每一個服務都可以根據使用情況做相應的調整,服務可以獨立失敗而不影響其他服務的正常運行,例如,如果資料攝入服務失效了,將沒有新的資料被加載進系統,但是已經存在的資料依然可以被查詢,

2.6.3 自動資料備份

? Druid自動備份所有已經indexed的資料到一個檔案系統,它可以是分布式檔案系統,如HDFS,你可以丟失所有Druid集群的資料,并快速從備份資料中重新加載,

2.6.4 滾動更新

? 通過滾動更新,你可以在不停機的情況下更新Druid集群,這樣對用戶就是無感知的,所有Druid版本都是向后兼容,

3. 安裝部署

3.1 環境介紹

3.1.1 Durid埠串列

以下是Durid默認的埠串列,防止因為埠占用導致服務器啟動失敗

角色 介紹
Coordinator 8081 管理集群上的資料可用性
Historical 8083 存盤歷史查詢到的資料
Broker 8082 處理來自外部客戶端的查詢請求
Realtime 8084
Overlord 8090 控制資料攝取作業負載的分配
MiddleManager 8091 負責攝取資料
Router 8888 可以將請求路由到Brokers, Coordinators, and Overlords

3.2 安裝方式

獲取Druid安裝包有以下幾種方式

3.2.1 源代碼編譯

? druid/release,主要用于定制化需求時,比如結合實際環境中的周邊依賴,或者是加入支持特定查詢的部分的優化等,

3.2.2 官網下載

? 官網安裝包下載:download,包含Druid部署運行的最基本組件

3.2.3 Imply組合套件

? Imply,該套件包含了穩定版本的Druid組件、實時資料寫入支持服務、圖形化展示查詢Web UI和SQL查詢支持組件等,目的是為更加方便、快速地部署搭建基于Druid的資料分析應用產品,

3.3 單機配置參考

3.3.1 Nano-Quickstart

1 CPU, 4GB 記憶體

  • 啟動命令: bin/start-nano-quickstart
  • 配置目錄: conf/druid/single-server/nano-quickstart
3.3.2 微型快速入門

4 CPU, 16GB 記憶體

  • 啟動命令: bin/start-micro-quickstart
  • 配置目錄: conf/druid/single-server/micro-quickstart
3.3.3 小型

8 CPU, 64GB 記憶體 (~i3.2xlarge)

  • 啟動命令: bin/start-small
  • 配置目錄: conf/druid/single-server/small
3.3.4 中型

16 CPU, 128GB 記憶體 (~i3.4xlarge)

  • 啟動命令: bin/start-medium
  • 配置目錄: conf/druid/single-server/medium
3.3.5 大型

32 CPU, 256GB 記憶體 (~i3.8xlarge)

  • 啟動命令: bin/start-large
  • 配置目錄: conf/druid/single-server/large
3.3.6 超大型

64 CPU, 512GB 記憶體 (~i3.16xlarge)

  • 啟動命令: bin/start-xlarge
  • 配置目錄: conf/druid/single-server/xlarge

3.4 單機版安裝

3.4.1 軟體要求
  • Java 8 (8u92+)
  • Linux, Mac OS X, 或者其他的類Unix OS (Windows是不支持的)
  • 安裝Docker環境
  • 安裝Docker-compose環境
3.4.2 硬體要求

Druid包括幾個單服務配置示例,以及使用這些配置啟動Druid行程的腳本,

? 如果您在筆記本電腦等小型機器上運行以進行快速評估,那么micro-quickstart配置是一個不錯的選擇,適用于 4CPU/16GB RAM環境,如果您計劃在教程之外使用單機部署進行進一步評估,我們建議使用比micro-quickstart更大的配置,

? 雖然為大型單臺計算機提供了示例配置,但在更高規模下,我們建議在集群部署中運行Druid,以實作容錯和減少資源爭用,

3.5 imply方式安裝

安裝推薦Imply方式,Imply方式出了提供druid組件,還有圖形化、報表等功能

3.5.1 安裝perl

因為啟動druid 需要用到perl環境,需要安裝下

yum install perl gcc kernel-devel
3.5.2 關閉防火墻
#查看防火狀態
systemctl status firewalld
#暫時關閉防火墻
systemctl stop firewalld
#永久關閉防火墻
systemctl disable firewalld

file

3.5.3 安裝JDK

選擇與自己系統相匹配的版本,我的是Centos7 64位的,所以如果是我的話我會選擇此版本,要記住的你們下載的話選擇的是以tar.gz結尾的,

3.5.3.1 下載JDK

到Oracle 官網下載jdk1.8,選擇jdk-8u301-linux-x64.tar.gz

file

將檔案下載到本地后上傳到linux目錄下

3.5.3.2 上傳解壓

上傳檔案

mkdir /usr/local/java

解壓目錄

tar -zxvf jdk-8u301-linux-x64.tar.gz
3.5.3.3 配置環境變數

配置環境變數,修改profile檔案并加入如下內容

vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

file

3.5.3.4 生效配置
source /etc/profile
3.5.3.5 檢查環境
java -version

file

3.5.4 安裝imply
3.5.4.1 登錄Imply官網

訪問https://imply.io/get-started,進入Imply官網,查找合適的imply的版本的安裝包,并填寫簡要資訊后就可以下載了

file

3.5.4.2 解壓imply

下載后上傳到服務器,并進行解壓

# 創建imply安裝目錄
mkdir /usr/local/imply
# 解壓imply
tar -zxvf imply-2021.05-1.tar.gz
3.5.4.3 環境準備

進入imply-2021.05-1目錄后

# 進入imply目錄
cd imply-2021.05-1
3.5.4.4 快速啟動

使用本地存盤、默認元資料存盤derby,自帶zookeeper啟動,來體驗下druid

# 創建日志目錄
mkdir logs
# 使用命令啟動
nohup bin/supervise -c conf/supervise/quickstart.conf > logs/quickstart.log 2>&1 &
3.5.4.5 查看日志

通過quickstart.log來查看impl啟動日志

tail -f logs/quickstart.log

file

每啟動一個服務均會列印出一條日志,可以通過var/sv/xxx/current查看服務啟動時的日志資訊

tail -f var/sv/broker/current

file

3.5.4.6 訪問Imply

可以通過訪問9095埠來訪問imply的管理頁面

http://192.168.64.173:9095/

file

3.5.4.7 訪問Druid

訪問8888埠就可以訪問到我們的druid

http://192.168.64.173:8888/

file

本文由傳智教育博學谷 - 狂野架構師教研團隊發布
如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請注明出處!

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

標籤:其他

上一篇:類和物件

下一篇:Python教程:用__new__ 創建單例模式

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