Archive 2022

docker compose入門

<h3 id="docker-compose入門">docker compose入門</h3> <p>本篇文章介紹構建一個運行在docker compose上的python web應用程序,這個應用程序使用Flask框架同時維護一個計數器在redis中。</p> <p>首先確保你已經安裝Docker Engine和Docker Compose,你不需要安裝python或者redis,因為它們是

Dockerfile指令介紹

Dockerfile是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。

Java內存模型

<h3 id="java內存模型">Java內存模型</h3> <p><strong>Java內存模型(Java Memory Model,JMM)就是一種符合內存模型規範的,屏蔽了各種硬件和操作系統的訪問差異的,保證了Java程序在各種平台下對內存的訪問都能保證效果一致的機制及規範。</strong></p> <pre tabindex="0"><code>簡要言之,jmm是jvm的一種規範,定

Java類加載機制

<h3 id="java類加載機制">Java類加載機制</h3> <p><strong>類加載機制</strong></p> <p>所謂類加載機制就是JVM虛擬機把Class文件加載到內存,並對數據進行校驗,轉換解析和初始化,形成虛擬機可以直接使用的Java類型,即Java.lang.Class。</p> <p><strong>類的生命週期</strong></p> <p><strong>類的生

Java創建對象的五種方式

<h3 id="java創建對象的五種方式">Java創建對象的五種方式</h3> <p>本文將介紹五種方式來創建一個Java對象:</p> <ul> <li>使用new關鍵字</li> <li>使用Class.newInstance</li> <li>使用Constructor.newInstance</li> <li>使用clone方法</li> <li>使用反序列化</li> </ul>

macOS關閉apache httpd開機啟動

<h3 id="macos關閉apache-httpd開機啟動">macOS關閉apache httpd開機啟動</h3> <p>macOS默認安裝了apache httpd服務,並且會開機自動啟動,佔用了80端口。 如果不需要httpd服務,可以關閉apache httpd服務,取消開機自動啟動。</p> <p>在終端執行如下命令:</p> <p><code>sudo lsof

為什麼Kafka的速度那麼快

<h3 id="為什麼kafka的速度那麼快">為什麼Kafka的速度那麼快</h3> <p>我們都知道Kafka是基於磁盤進行存儲的,但Kafka官方又稱其具有高性能、高吞吐、低延時的特點,其吞吐量動輒幾十上百萬。</p> <p>一般認為在磁盤上讀寫數據是會降低性能的,因為尋址會比較消耗時間,那麼Kafka又是怎麼做到其吞吐量動輒幾十上百萬的呢?</p> <h6 id="kafka的高性能是底層

go語言json解析gjson

<h3 id="go語言json解析gjson">go語言json解析gjson</h3> <p>go語言json解析無論是使用標準庫encoding/json還是第三庫json-iterator,都需要定義 結構體或者map,有的時候我們只想獲取json中的部分值,定義結構體或者map還是比較麻煩的, 這時候我們可以選擇gjson。</p> <p>gjson是一個Go包,它提供了一種從json文

go語言json解析json-iterator

<h3 id="go語言json解析json-iterator">go語言json解析json-iterator</h3> <p>json-iterator是一個高性能100%兼容的"encoding/json"的替代品</p> <p>官方網址:<a href="http://jsoniter.com/">http://jsoniter.com/</a></p> <p>安裝方

go語言處理TCP粘包

<h3 id="go語言處理tcp粘包">go語言處理TCP粘包</h3> <h6 id="tcp粘包是指發送方發送的若干數據包到接收方接收時粘成一包從接收緩衝區看後一包數據的頭緊接著前一包數據的尾">TCP粘包是指發送方發送的若干數據包到接收方接收時粘成一包,從接收緩衝區看,後一包數據的頭緊接著前一包數據的尾。</h6> <p>粘包可能由發送方造成,也可能由接收方造成。</p> <h6 id="

go語言大端模式和小端模式

<h3 id="go語言大端模式和小端模式">go語言大端模式和小端模式</h3> <h6 id="什麼是大端和小端">什麼是大端和小端?</h6> <p>Big-Endian和Little-Endian的定義如下:</p> <ol> <li> <p>Little-Endian就是低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。</p> </li> <li> <p>Big-Endian

go語言判斷系統是大端存儲還是小端存儲

<h3 id="go語言判斷系統是大端存儲還是小端存儲">go語言判斷系統是大端存儲還是小端存儲</h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code

我們為什麼要學習Go語言?為什麼大公司開始採用Go語言

<h3 id="我們為什麼要學習go語言為什麼大公司開始採用go語言">我們為什麼要學習Go語言?為什麼大公司開始採用Go語言</h3> <p>我們在學習一門編程語言之前應該知道為什麼要學習這門編程語言,和做好一件事情一樣,我們應該知道做這件事情的意義,才能在遇到困難時堅持做好這件事。</p> <p>我們為什麼要學習Go語言呢?學習C語言不好嗎,學習Rust語言不好嗎?</p> <p>我們要從Go

go語言網絡編程之TCP Socket

<p>tcp client端代碼tcp_client.go如下:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go"

go語言網絡編程之UDP Socket

<p>udp client端代碼udp_client.go如下:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go"

go語言基礎內置函數new和make

<h3 id="go語言基礎內置函數new和make">go語言基礎內置函數new和make</h3> <p>go語言中的內置函數make和new都是用作變量的初始化,但是它們初始化變量的方式不同,make返回類型是引用類型,new返回類型是指針類型。</p> <h6 id="內置函數make">內置函數make</h6> <p>內置函數make僅用作分配內存空間並初始化slice,map

go語言基礎方法和接收器

<h3 id="go語言基礎方法和接收器">go語言基礎方法和接收器</h3> <p>在Go語言中有一個概念和函數極其相似叫做方法,Go語言的方法其實是作用在接收者(receiver)上的一個函數,接收者是某種非內置類型的變量,因此方法是一種特殊類型的函數。</p> <h6 id="方法和函數的不同點">方法和函數的不同點:</h6> <ul> <li> <p>函數和方法聲明的方式不同</p>

go語言基礎值傳遞

<h3 id="go語言基礎值傳遞">go語言基礎值傳遞</h3> <h6 id="go語言中只有值傳遞沒有引用傳遞">go語言中只有值傳遞,沒有引用傳遞</h6> <p>值傳遞是指在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數,函數外和函數里對這個參數地址求值應該是不一樣的。</p> <p>引用傳遞是指在調用函數時將實際參數的地址直接傳遞到函數

go語言基礎結構體傳參

<h3 id="go語言基礎結構體傳參">go語言基礎結構體傳參</h3> <p>使用struct關鍵字可以定義一個結構體,結構體中的成員稱為結構體的字段或屬性。</p> <div class="highlight"><pre tabindex="0"

go語言基礎type關鍵字

<h3 id="go語言基礎type關鍵字">go語言基礎type關鍵字</h3> <p>type關鍵字有如下幾種用法:定義結構體,定義接口,類型別名,類型定義,類型查詢</p> <h6 id="1-定義結構體">1. 定義結構體</h6> <p>結構體是由一系列具有相同類型或不同類型的數據構成的數據集合</p> <div class="highlight"><pre tabindex="0"

Java基礎sleep與interrupt

<h3 id="java基礎sleep與interrupt">Java基礎sleep與interrupt</h3> <ol> <li> <p>interrupt用於向線程發終止通知信號,會影響該線程內部的中斷標誌位</p> </li> <li> <p>當前線程本身不會因為interrupt而改變狀態,狀態的具體變化需要等待接收到中斷表示的程序的最終處理結果來判定。</p> </li> <li>

Java基礎wait和sleep的區別

<h3 id="java基礎wait和sleep的區別">Java基礎wait和sleep的區別</h3> <p>1、sleep是Thread中的方法,是靜態方法,wait是Object中的方法,是實例方法。</p> <p>2、sleep主要作用使線程暫停執行一段時間,時間一到自動恢復,不涉及線程通訊,不會去釋放鎖,但是wait會釋放這個鎖,並把這個wait的線程加入到這個鎖的等待隊列中去</p>

TCP的三次握手與四次揮手詳解

<h3 id="tcp的三次握手與四次揮手詳解">TCP的三次握手與四次揮手詳解</h3> <p>所謂三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務器總共發送3個報文。</p> <p>三次握手的目的是連接服務器指定端口,建立 TCP 連接,並同步連接雙方的序列號和確認號,交換 TCP 窗口大小信息。在 socket 編程中,

Mermaid入門教程

<h3 id="mermaid入門教程">Mermaid入門教程</h3> <p>Mermaid是一種基於Javascript的繪圖工具,使用類似於Markdown的語法, 使用戶可以方便快捷地通過代碼創建圖表。</p> <p>項目地址:<a

python實現打印乘法口訣

<h3 id="python實現打印乘法口訣">python實現打印乘法口訣</h3> <p>涉及的語法range和str.format()</p> <p>函數語法:range(start, stop[, scan])</p> <p>參數說明:</p> <ul> <li>start: 計數從start開始。默認是從0開始。例如range(5)等價於range(0, 5);</li>

go語言用tcp實現GET請求

<h3 id="go語言用tcp實現get請求">go語言用tcp實現GET請求</h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code

go語言獲取公網IP地址

<h3 id="go語言獲取公網ip地址">go語言獲取公網IP地址</h3> <p>這裡採用兩種方式</p> <ol> <li>請求stun server服務器獲取</li> <li>請求 <a href="https://api.ipify.org">https://api.ipify.org</a> </li> </ol> <p>代碼如下:</p> <div

python優秀開源項目整理

<p>python是一門簡單易學但是功能非常強大的編程語言,應用範圍也非常廣,如:服務器運維,科學計算,人工智能,web開發,網絡爬蟲都可以使用python。下面介紹幾款實用的python庫,python庫非常豐富,如果大家用過好用的python,歡迎大家補充。</p> <h3 id="1scrapy">1.Scrapy</h3> <p>Scrapy 是一款非常受歡迎的python爬蟲框架。它是基

volatile和synchronized的區別

<h3 id="volatile和synchronized的區別">volatile和synchronized的區別</h3> <ol> <li> <p>volatile本質是在告訴jvm當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取; synchronized則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。</p> </li> <li> <p>volatile僅能

MySQL執行計劃分析

<h3 id="mysql執行計劃分析">MySQL執行計劃分析</h3> <table> <thead> <tr> <th>列名</th> <th style="text-align:center">含義</th> </tr> </thead> <tbody> <tr> <td>id</td> <td style="text-align:center">id列,表示查詢中執行select子句或操

SQL優化技巧總結

<h3 id="sql優化技巧總結">SQL優化技巧總結</h3> <p>匯總如下:</p> <p>分解SQL</p> <p>查詢切分 最典型的案例就是分頁查詢</p> <p>永遠為每張表設置一個ID主鍵</p> <p>避免使用SELECT *</p> <p>為搜索字段建立索引</p> <p>在Join表的時候使用對應類型的列,並將其索引</p> <p>盡可能的使用NOT NULL</p> <p>

go語言優秀開源項目整理

<h3 id="一web框架">一.Web框架</h3> <p>1.gin</p> <p>項目地址:<a href="https://github.com/gin-gonic/gin">https://github.com/gin-gonic/gin</a> </p> <p>gin 是一個用 Go 語言開發的 Web 框架,提供類 Martini 的 API, 但是性能更好。