主頁 > 後端開發 > python-繪圖與可視化

python-繪圖與可視化

2022-10-10 06:24:02 後端開發

  python 有許多可視化工具,但本書只介紹Matplotlib,Matplotlib是一種2D的繪圖庫,它可以支持硬拷貝和跨系統的互動,它可以在python腳本,IPython的互動環境下、Web應用程式中使用,該專案是由John Hunter 于2002年啟動,其目的是為python構建MATLAB式的繪圖介面,如果結合使用一種GUI工具包(如IPython),Matplotlib還具有諸如縮放和平移等互動功能,它不僅支持各種作業系統上許多不同的GUI后端,而且還能將圖片匯出為各種常見的矢量(vector)和光柵(raster)圖:PDF、SVG、JPG、PNG、BMP、GIF等,

1.Matplotlib 程式包
所謂“一圖勝千言”,我們很多時候需要通過可視化的方式查看、分析資料,雖然pandas中也有一些繪圖操作,但是相比較而言,Matplotlib在繪圖顯示效果方面更加絢麗,Pyplot為Matplotlib提供了一個方便的介面,我們可以通過pyplot對matplotlib進行操作,多數情況下pyplot的命令與MATLAB有些相似,
匯入Matplotlib包進行簡單的操作(此處需要安裝pip install matplotlib):

import matplotlib.pyplot as plt
#首先定義兩個函式(正弦&余弦)
import numpy as np
X = np.linspace(-np.pi,np.pi,256,endpoint=True)  #-Π to +Π的256個值
C,S = np.cos(X),np.sin(X)
plt.plot(X,C)
plt.plot(X,S)
#在ipython 的互動環境中需要這句才能顯示出來
plt.show()

 

 

2.繪圖命令的基本架構及其屬性設定
上面的例子我們可以看出,幾乎所有的屬性和繪圖的框架我們都選用默認設定,現在我們來看Pyplot 繪圖的基本框架是什么,用過photoshop的人都知道,作圖時先要定義一個畫布,此處的畫布就是Figure,然后把其他素材“畫”到該Figure上,

(1)在Figure 上創建子plot,并設定屬性,
具體簡析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,1000)  #X軸資料
y1 = np.sin(x)   #Y軸資料
y2 = np.cos(x**2)  #Y軸資料
plt.figure(figsize=(8,4))

plt.plot(x,y1,label="$sin(x)$",color="red",linewidth=2)
plt.plot(x,y2,"b--",label="$cos(x^2)$")
#指定曲線的顏色和線形,如“b--”表示藍色虛線(b:藍色,-:虛線)
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")

#書上寫的是:plt.figure(figsize(8,4))
#注意:會報錯  name 'figsize' is not defined
#這里figsize是一個引數,并不是一個函式,給引數賦值中間需要加一個等號,寫為:plt.figure(figsize=(8,4))

#使用關鍵字引數可以指定所繪制的曲線的各種屬性:
#label:給曲線指定一個標簽名稱,此標簽將在圖示中顯示,如果標簽字串的前后有字符“$”,則Matplotlib 會使用其內嵌的LaTex引擎將其顯示為數學公式
#color:指定曲線的顏色,顏色可以用如下方法表示
#英文單詞
#以“#”字符開頭的3個16進制數,如“#ff0000”表示紅色,以0~1的RGB表示,如(1.0,0.0,0.0)也表示紅色
#linewidth:指定曲線的寬度,可以不是整數,也可以使用縮寫形式的引數名lw
plt.ylim(-1.5,1.5)
plt.legend()
plt.show()

 

 

(2)在Figure上創建多個子plot
如果需要同時繪制多幅圖表的話,可以給Figure傳遞一個整數引數指定圖表的序號,如果所指定序號的繪圖物件已經存在的話,將不創建新的物件,而只是讓它成為當前繪圖物件,具體分析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt
fig1 =plt.figure(2)
plt.subplot(211)
#subplot(211)把繪圖區域等分為2行*1列共兩個區域
#然后在區域1(上區域)中創建一個軸物件
plt.subplot(212)#在區域2(下區域)創建一個軸物件
plt.show()

 

 

#我們還可通過命令再次拆分這些塊(相當于Word中拆分單元格的操作)

f1 = plt.figure(5)
plt.subplot(221)
plt.subplot(222)
plt.subplot(212)
plt.subplots_adjust(left = 0.08,right = 0.95,wspace = 0.25,hspace = 0.45)
#subplots_adjust的操作是類似網頁csv格式化中的邊距處理,左邊距離多少?
#右邊邊距多少?這個取決于你需要繪制的大小和各個模塊之間的間距,
plt.show()

 

 

(3)通過Axes設定當前物件plot的屬性
以上我們操作的是在Figure上繪制圖案,但是當我們繪制的圖案過多,又需要選取不同的小模塊進行格式化設定時,Axes物件就能很好的解決這個問題,具體簡析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt
fig,axes = plt.subplots(nrows=2,ncols=2)  #定一個2*2的plot
plt.show()

 

 

#現在我們需要通過命令來操作每個plot(subplot),設定他們的title并洗掉橫縱坐標值
fig,axes =plt.subplots(nrows=2,ncols=2)
axes[0,0].set(title="Upper Left")
axes[0,1].set(title="Upper Right")
axes[1,0].set(title="Lower Left")
axes[1,1].set(title="Lower Right")

 

 另外,實際來說,plot操作的底層操作就是Axes物件的操作,只不過如果我們不使用Axes而用plot操作時,它默認的是plot.subplot(111),也就是說plot其實是Axes的特例

(4)保存Figure物件
最后一項操作就是保存,我們繪制的目的是用在其他研究中,或者希望可以把研究結果保存下來,此時需要的操作是save,具體簡析和代碼如下:

import numpy as np
import matplotlib.pyplot as plt
plt.savefig("save_test.png",dpi=520)  #默認像素是dpi是80
#此處只是用了savefig屬性對Figure進行保存

另外,除了上述的基本操作之外,Matplotlib還有其他的繪圖優勢,此處只是簡單介紹了它在繪圖時需要注意的事項,

3.Seaborn 模塊介紹
前面我們簡單介紹了Matplotlib庫的繪圖功能和屬性設定,對于常規性的繪圖,使用pandas的API屬性研究較為透徹,幾乎沒有不能解決的問題,但是有的時候Matplotlib還是有它的不足之處,Matplotlib 自動化程度非常高,但是,掌握如何設定系統以便獲得一個吸引人的圖是相當困難的事,為了控制Matplotlib圖表的外觀,Seaborn 模塊自帶許多定制的主題和高級的介面,

3.1 未加Seaborn 模塊的效果
具體簡析和代碼如下:

#有關于seaborn介紹
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
np.random.seed(sum(map(ord,"aesthetics")))
#首先定義一個函式用來畫正弦函式,可幫助了解可以控制的不同風格引數
def sinplot(flip=1):
    x=np.linspace(0,14,100)
    for i in range(1,7):
        plt.plot(x,np.sin(x+i*.5)*(7-i)*flip)
        sinplot()
    plt.show()

 

 

#有關于seaborn介紹
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
np.random.seed(sum(map(ord,"aesthetics")))
def sinplot(flip=1):
    x = np.linspace(0,14,100)
    for i in range(1,7):
        plt.plot(x,np.sin(x + i * .5) * (7-i) * flip)
        #轉換成Seaborn 模塊,只需要引入seaborn模塊
import seaborn as sns  #不同之處在此
sinplot()
plt.show()

 

 使用seaborn的優點有:1.seaborn默認淺灰色背景與白色網格線的靈感來源于Matplotlib,卻比matplotlib的顏色更加柔和;2.seaborn把繪圖風格引數與資料引數分開設定,seaborn有兩組函式對風格進行控制:axes_style()/set_style()函式和plotting_context()/set_context()函式,axes_style()函式和plotting_context()函式回傳引數字典,set_style()函式和set_context()函式設定Matplotlib,

(1)使用set_style()函式
具體通過cording查看效果:

import seaborn as sns
sns.set_style("ticks")
sns.set_style("whitegrid")
sinplot()
plt.show()
#seaborn 有5種預定義的主題:
#darkgrid (灰色背景+白網格)
#whitegrid(白色背景+黑網格)
#dark (僅灰色背景)
#white (僅白色背景)
#ticks (坐標軸帶刻度)
#默認的主題是darkgrid,修改主題可以使用set_style()函式

 

 

(2)使用set_context()函式
具體通過coding查看效果:

import seaborn as sns
sns.set_context("paper")
sinplot()
plt.show()
#背景關系(context)可以設定輸出圖片的大小尺寸(scale)  
#seaborn中預定義的背景關系有4種:paper、notebook、talk和poster, 默認使用notebook背景關系

 

 

(3)使用Seaborn“耍酷”
然而seaborn 不僅能夠用來更改背景顏色,或者改變畫布大小,還有其他很多方面的用途,比如下面這個例子:

import seaborn as sns
sns.set()
#通過加載sns自帶資料庫中的資料(具體資料可以不關心)
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month","year","passengers")

#使用每個單元格中的資料值繪制一個熱圖heatmap
sns.heatmap(flights,annot=True,fmt="d",linewidths=.5)
plt.show()

 

 

4.描述性統計圖形概覽
描述性統計是借助圖表或者總結性的數值來描述資料的統計手段,資料挖掘作業的資料分析階段,我們可借助描述性統計來描述或總結資料的基本情況,一來可以梳理自己的思維,二來可以更好地向他人展示資料分析結果,數值分析的程序中,我們往往要計算出資料的統計特征,用來做科學計算的Numpy和SciPy工具可以滿足我們的需求,Matplotlib工具可用來繪制圖,滿足圖分析的需求,

4.1制作資料
資料是自己制作的,主要包括個人身高、體重及一年的借閱圖書量(之所以自己制作資料是因為不是每份真實的資料都可以進行接下來的分析,比如有些資料就不能繪制餅圖,另一個角度也說明,此處舉例的資料其實沒有實際意義,只是為了分析而舉例,但是不代表在具體的應用中這些分析不能發揮作用),
另外,以下的資料顯示都是在Seaborn庫的作用下體現的效果,

#案例分析(結合圖書情報學,比如借書量)
from numpy import array
from numpy.random import normal
def getData():
    heights = []
    weights = []
    books = []
    N =10000
    for i in range(N):
        while True:
            #身高服從均值為172,標準差為6的正態分布
            height = normal(172,6)
            if 0<height:break
        while True:
            #體重由身高作為自變數的線性回歸模型產生,誤差服從標準正態分布
            weight = (height-80)*0.7 + normal(0,1)
            if 0 < weight:break
        while True:
            #借閱量服從均值為20,標準差為5的正態分布
            number = normal(20,5)
            if 0<= number and number<=50:
                book = "E"if number <10 else("D"if number<15 else ("C"if number<20 else("B"if number<25 else "A")))
            break
        heights.append(height)
        weights.append(weight)
        books.append(book)
        return array(heights),array(weights),array(books)
    heights,weights,books =getData()

4.2 頻數分析
(1)定性分析
柱狀圖和餅形圖是對定性資料進行頻數分析的常用工具,使用前需將每一類的頻數計算出來,
①柱狀圖,柱狀圖是以柱的高度來指代某種型別的頻數,使用Matplotlib對圖書借閱量這一定性變數繪制柱狀圖的代碼如下:

from matplotlib import pyplot
#繪制柱狀圖
def drawBar(books):
    xticks=["A","B","C","D","E"]
    bookGroup ={ }
    #對每一類借閱量進行頻數統計
    for book in books:
        bookGroup[book] = bookGroup.get(book,0) + 1
    #創建柱狀圖
    #第一個引數為柱的橫坐標
    #第二個引數為柱的高度
    #引數align為柱的對齊方式,以第一個引數為參考標準
    pyplot.bar(range(5),[bookGroup.get(xtick,0) for xtick in xticks],align="center")
    #設定柱的文字說明
    #第一個引數為文字說明的橫坐標
    #第二個引數為文字說明的內容
    pyplot.xticks(range(5),xticks)
    #設定橫坐標的文字說明
    pyplot.xlabel("Types of Students")
    #設定縱坐標的文字說明
    pyplot.ylabel("Frequency")
    #設定標題
    pyplot.title("Numbers of Books Students Read")
    #繪圖
    pyplot.show()
    drawBar(books)

 

 

import matplotlib.pyplot as plt
num_list = [1506,3500,3467,1366,200]
pyplot.xlabel("Types of Students")
pyplot.ylabel("Frequency")
pyplot.title("Numbers of Books Students Read")
plt.bar(range(len(num_list)), num_list,color="green")
import seaborn as sns
sns.set_style("whitegrid")
plt.show()

 

 ②餅形圖,餅形圖是以扇形的面積來指代某種型別的頻率,使用Matplotlib對圖書借閱量這一定性變數繪制餅形圖的代碼如下:

import numpy as np  
import matplotlib.mlab as mlab  
import matplotlib.pyplot as plt  
labels=['A','B','C','D','E']

X=[257,145,32,134,252]
 
fig = plt.figure()
plt.pie(X,labels=labels,autopct='%1.1f%%') #畫餅圖(資料,資料對應的標簽,百分數保留兩位小數點)
plt.title("Numbers of Books Student Read")
plt.show()  

 

 

(2)定量分析
直方圖類似于柱狀圖,是用柱的高度來指代頻數,不同的是其將定量資料劃分為若干連續的區間,在這些連續的區間上繪制柱,
①直方圖,使用Matplotlib對身高這一定量變數繪制直方圖的代碼如下:

#繪制直方圖
def drawHist(heights):
    #創建直方圖
    #第一個引數為待繪制的定量資料,不同于定性資料,這里并沒有實作進行頻數統計
    #第二個引數為劃分的區間個數
    pyplot.hist(heights,100)
    pyplot.xlabel('Heights')
    pyplot.ylabel('Frequency')
    pyplot.title('Height of Students')
    pyplot.show()
drawHist(heights)

 

 累積曲線:使用Matplotlib對身高這一定量變數繪制累積曲線的代碼如下:

#繪制累積曲線
def drawCumulativaHist(heights):
    #創建累積曲線
    #第一個引數為待繪制的定量資料
    #第二個引數為劃分的區間個數
    #normal引數為是否無量綱化
    #histtype引數為‘step’,繪制階梯狀的曲線
    #cumulative引數為是否累積
    pyplot.hist(heights,20,normed=True,histtype='step',cumulative=True)
    pyplot.xlabel('Heights')
    pyplot.ylabel('Frequency')
    pyplot.title('Heights of Students')
    pyplot.show()
drawCumulativaHist(heights)

 

 (3)關系分析

 散點圖,在散點圖中,分別以自變數和因變數作為橫坐標,當自變數與因變數線性相關時,散點圖中的點近似分布在一條直線上,我們以身高作為自變數,體重作為因變數,討論身高對體重的影響,使用Matplotlib繪制散點圖的代碼如下:

#繪制散點圖
def drawScatter(heights,weights):
    #創建散點圖
    #第一個引數為點的橫坐標
    #第二個引數為點的縱坐標
    pyplot.scatter(heights,weights)
    pyplot.xlabel('Heights')
    pyplot.ylabel('Weight')
    pyplot.title('Heights & Weight of Students')
    pyplot.show()
drawScatter(heights,weights)

 

 

(4)探索分析

 箱型圖,在不明確資料分析的目標時,我們對資料進行一些探索性的分析,可以知道資料的中心位置、發散程度及偏差程度,使用Matplotlib繪制關于身高的箱型圖代碼如下:

#繪制箱型圖
def drawBox(heights):
    #創建箱型圖
    #第一個引數為待繪制的定量資料
    #第二個引數為資料的文字說明
    pyplot.boxplot([heights],labels=['Heights'])
    pyplot.title('Heights of Students')
    pyplot.show()
drawBox(heights)

 

 

注:

① 上四分位數與下四分位數的差叫四分位差,它是衡量資料發散程度的指標之一

② 上界線和下界線是距離中位數1.5倍四分位差的線,高于上界線或者低于下界線的資料為例外值

描述性統計是容易操作、直觀簡潔的資料分析手段,但是由于簡單,對于多元變數的關系難以描述,現實生活中,自變數通常是多元的:決定體重的不僅有身高,還有飲食習慣、肥胖基因等因素,通過一些高級的資料處理手段,我們可以對多元變數進行處理,例如,特征工程中,可以使用互資訊方法來選擇多個對因變數有較強相關性的自變數作為特征,還可以使用主成分分析法來消除一些冗余的自變數來降低運算復雜度,

 

 參考書目:《資料館員的python簡明手冊》

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

標籤:Python

上一篇:Future詳解

下一篇:tabulate結合loguru列印出美觀又方便查找的日志記錄!

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