博客 / 列表

flydean - 在java程序中使用protobuf

簡介 Protocol Buffer是google出品的一種對象序列化的方式,它的體積小傳輸快,深得大家的喜愛。protobuf是一種平台無關和語言無關的協議,通過protobuf的定義文件,可以輕鬆的將其轉換成多種語言的實現,非常方便。 今天將會給大家介紹一下,protobuf的基本使用和同java結合的具體案例。 為什麼使用protobuf 我們知道數據在網絡傳輸中是以二進制進行的,一般我們使

protobuf , prototype , JAVA

flydean - protocol buffer沒那麼難,不信你看這篇

簡介 上一篇文章我們對google的protobuf已經有了一個基本的認識,並且能夠使用相應的工具生成對應的代碼了。但是對於.proto文件的格式和具體支持的類型還不是很清楚。今天本文將會帶大家一探究竟。 注意,本文介紹的協議是proto3版本的。 定義一個消息 protobuf中的主體被稱為是message,可以將其看做是我們在程序中定義的類。我們可以在.proto文件中定義這個message對

protobuf , prototype , JAVA

flydean - 網絡協議之:socket協議詳解之Socket和Stream Socket

簡介 不管是在普通的網絡編程中還是在netty中,都經常會提到一個詞叫做socket,好像socket是一個神奇的東西,使用socket我們可以建立客户端到服務器端的連接,並且和進行客户端和服務器端的通訊,那麼socket到底是什麼呢?它有哪些分類呢?一起來看看吧。 Socket是什麼 socket的中文翻譯是套接字,個人覺的這個翻譯真的是太差勁了,套接字聽起來毫無意義,所以很多人在第一次聽到so

socket.io , socket , netty , JAVA

flydean - 網絡協議之:memcached text protocol詳解

簡介 用過緩存系統的肯定都聽過memcached的大名,memcached是一個非常優秀的分佈式內存緩存系統,應用非常的廣泛。Memcached不僅僅是Web緩存,它更是一個通用的數據緩存,基本上你可以將任何東西存入memcached中,它的分佈式設計具有很好的可擴展性和靈活性。 Memcached是一個客户端-服務器端的架構模式。一般來説,在服務器上搭建好Memcached的服務器端,接下來就可

memcached , 網絡 , 網絡傳輸協議

flydean - 網絡協議之:memcached binary protocol詳解

簡介 前面講到了memcached的文本協議,雖然文本協議看起來非常簡單,但是對於客户端來説一般還是會選擇效率更高的二進制協議。 二進制協議的本質和文本協議是一樣的,只是他們的表現方式不同而已。本文將會詳細介紹memcached中二進制協議的實現細節。 memcached的協議包 對於memcached的請求包和響應包來説,除了請求頭有所區別之外,其他的格式都是一樣的。 所以對memcached的

memcached , 網絡 , 網絡傳輸協議

flydean - flutter系列之:在flutter中使用流式佈局

簡介 我們在開發web應用的時候,有時候為了適應瀏覽器大小的調整,需要動態對頁面的組件進行位置的調整。這時候就會用到flow layout,也就是流式佈局。 同樣的,在flutter中也有流式佈局,這個流式佈局的名字叫做Flow。事實上,在flutter中,Flow通常是和FlowDelegate一起使用的,FlowDelegate用來設置Flow子組件的大小和位置,通過使用FlowDelegat

佈局 , flutter

flydean - Java併發Map的面試指南:線程安全數據結構的奧秘

簡介 在計算機軟件開發的世界裏,多線程編程是一個重要且令人興奮的領域。然而,與其引人入勝的潛力相伴而來的是複雜性和挑戰,其中之一就是處理共享數據。當多個線程同時訪問和修改共享數據時,很容易出現各種問題,如競態條件和數據不一致性。 本文將探討如何在Java中有效地應對這些挑戰,介紹一種強大的工具——併發Map,它能夠幫助您管理多線程環境下的共享數據,確保數據的一致性和高性能。我們將深入瞭解Java中

面試 , 面試問題 , 多線程 , JAVA , java-web

flydean - flutter系列之:移動端手勢的具體使用

簡介 之前我們介紹了GestureDetector的定義和其提供的一些基本的方法,GestureDetector的好處就是可以把任何一個widget都賦予類似button的功能。 今天將會通過幾個具體的例子來講解一下GestureDetector的具體使用。 賦予widget可以點擊的功能 一般情況下,我們的普通widget,比如文本是不能進行交互的,但是如果將其用GestureDetector進

移動web開發 , 移動應用開發 , 移動端web , flutter

flydean - Spring Boot 3.0橫空出世,快來看看是不是該升級了

簡介 Spring boot 3.0於2022年11月正式發佈了,這次的發佈對於我們普通程序員的影響有多少呢?我們是不是需要考慮立馬升級到Spring Boot3.0呢? 別急,看完這篇文章再來做決定也不遲。 對JAVA17和JAVA19的支持 相信很多小夥伴到現在還是使用得是JDK8,但是JDK8已經發布很多年了,隨着oracle加速JDK版本的發佈,現在每半年發佈一次,目前最新的JDK版本已經

spring-mvc , 架構設計 , springboot , JAVA

flydean - 一鍵自動化博客發佈工具,用過的人都説好(頭條篇)

雖然頭條現在非常強大,但是我還是不得不吐槽一下頭條的博客發佈,居然不支持markdown格式。 並且在某些瀏覽器上還會出現編輯頁面打不開的情況,讓我一度懷疑是我瀏覽器的問題。 不過,這都不重要,重要的是blog-auto-publishing-tools這個工具可以實現頭條的自動化。 前提條件 前提條件當然是先下載 blog-auto-publishing-tools這個博客自動發佈工具,地址如下

工具 , 自動化 , aigc , 博客

flydean - 深入探討I/O模型:Java中的阻塞和非阻塞和其他高級IO應用

引言 I/O(Input/Output)模型是計算機科學中的一個關鍵概念,它涉及到如何進行輸入和輸出操作,而這在計算機應用中是不可或缺的一部分。在不同的應用場景下,選擇正確的I/O模型是至關重要的,因為它會影響到應用程序的性能和響應性。本文將深入探討四種主要I/O模型:阻塞,非阻塞,多路複用,signal driven I/O,異步IO,以及它們的應用。 阻塞I/O模型 阻塞I/O模型與同步I/O

面試 , JAVA , io

flydean - Java IO 與 NIO:高效的輸入輸出操作探究

引言 輸入輸出(IO)是任何編程語言中的核心概念,而在Java中,IO操作更是應用程序成功運行的基石。隨着計算機系統變得越來越複雜,對IO的要求也日益增加。在本文中,我們將探討Java IO和非阻塞IO(NIO)的重要性以及如何在Java中實現高效的輸入輸出操作。 傳統IO(阻塞IO) 傳統IO是大多數開發人員熟悉的IO模型,其中主要涉及InputStream和OutputStream。通過傳統I

面試 , JAVA , io , nio

flydean - 解鎖Java面試中的鎖:深入瞭解不同類型的鎖和它們的用途

簡介 多線程編程在現代軟件開發中扮演着至關重要的角色。它使我們能夠有效地利用多核處理器和提高應用程序的性能。然而,多線程編程也伴隨着一系列挑戰,其中最重要的之一就是處理共享資源的線程安全性。在這個領域,鎖(Lock)是一個關鍵的概念,用於協調線程之間對共享資源的訪問。本文將深入探討Java中不同類型的鎖以及它們的應用。我們將從基本概念開始,逐步深入,幫助您瞭解不同類型的鎖以及如何選擇合適的鎖來解決

面試 , , 面試問題 , JAVA

flydean - 深入探討Java面試中內存泄漏:如何識別、預防和解決

引言 在編寫和維護Java應用程序時,內存泄漏是一個重要的問題,可能導致性能下降和不穩定性。本文將介紹內存泄漏的概念,為什麼它在Java應用程序中如此重要,並明確本文的目標,即識別、預防和解決內存泄漏問題。 內存泄漏的概念 內存泄漏是指應用程序中分配的內存(通常是堆內存)在不再需要時未能正確釋放。這些未釋放的內存塊會積累,最終導致應用程序消耗過多的內存資源,甚至可能導致應用程序崩潰或變得非常緩慢。

內存 , 面試 , 內存泄漏 , JAVA

flydean - java中有哪些併發的List?只知道一種的就太遜了

java中有很多list,但是原生支持併發的並不多,我們在多線程的環境中如果想同時操作同一個list的時候,就涉及到了一個併發的過程,這時候我們就需要選擇自帶有併發屬性的list,那麼java中的併發list到底有哪些呢?今天要給大家介紹的是ArrayList、CopyOnWriteArrayList、ConcurrentLinkedDeque這幾個。 各種list的優缺點 當涉及到併發編程時,不

List , 面試 , 面試問題 , JAVA

flydean - flutter系列之:做一個下載按鈕的動畫

簡介 我們在app的開發過程中經常會用到一些表示進度類的動畫效果,比如一個下載按鈕,我們希望按鈕能夠動態顯示下載的進度,這樣可以給用户一些直觀的印象,那麼在flutter中一個下載按鈕的動畫應該如何製作呢? 一起來看看吧。 定義下載的狀態 我們在真正開發下載按鈕之前,首先定義幾個下載的狀態,因為不同的下載狀態導致的按鈕展示樣子也是不一樣的,我們用下面的一個枚舉類來設置按鈕的下載狀態: enum D

大前端 , 下載 , button , flutter , 前端

flydean - 這樣也行,在lambda表達式中優雅的處理checked exception

簡介 最近發現很多小夥伴還不知道如何在lambda表達式中優雅的處理checked exception,所以今天就重點和大家來探討一下這個問題。 lambda表達式本身是為了方便程序員書寫方便的工具,使用lambda表達式可以讓我們的代碼更加簡潔。 可能大多數小夥伴在使用的過程中從來沒有遇到過裏面包含異常的情況,所以對這種在lambda表達式中異常的處理可能沒什麼經驗。 不過沒關係,今天我們就來一

異常 , lambda , JAVA

flydean - 還在stream中使用peek?不要被這些陷阱絆住了

簡介 自從JDK中引入了stream之後,彷彿一切都變得很簡單,根據stream提供的各種方法,如map,peek,flatmap等等,讓我們的編程變得更美好。 事實上,我也經常在項目中看到有些小夥伴會經常使用peek來進行一些業務邏輯處理。 那麼既然JDK文檔中説peek方法主要是在調試的情況下使用,那麼peek一定存在着某些不為人知的缺點。一起來看看吧。 peek的定義和基本使用 先來看看pe

java8 , peek , JAVA , stream

flydean - flutter系列之:flutter中的變形金剛Transform

簡介 雖然我們在開發APP的過程中是以功能為主,但是有時候為了美觀或者其他的特殊的需求,需要對組件進行一些變換。在Flutter中這種變換就叫做Transform。 flutter的強大之處在於,可以對所有的widget進行Transform,因此可以做出非常酷炫的效果。 Transform簡介 在Flutter中,Transform本身也是一個Widget,它主要是把變換作用在它的子widget

大前端 , transform , flutter

flydean - 密碼學系列之:在線證書狀態協議OCSP詳解

簡介 我們在進行網頁訪問的時候會跟各種各樣的證書打交道,比如在訪問https網頁的時候,需要檢測https網站的證書有效性。 OCSP就是一種校驗協議,用於獲取X.509數字證書的撤銷狀態。它是為了替換CRL而出現的。 本文將會詳細介紹OCSP的實現和優點。 PKI中的CRL 我們知道在PKI架構中,CA證書是非常重要的組件,客户端通過CA證書來驗證服務的可靠性。對於CA證書本身來説在創建的時候是

microservice , 密碼學

flydean - netty系列之:netty中的核心編碼器base64

簡介 我們知道數據在netty中傳輸是以ByteBuf的形式進行的,可以説ByteBuf是netty的數據傳輸基礎。但是對於現代的應用程序來説,通常我們需要用到其他的數據結構或者類型。 為了方便我們在程序中的編寫,一種方式就是在將數據傳入到netty中的時候由程序員自身將數據格式進行轉換,然後再調用netty的系統方法。另外一種方式就是定義一些codec,由netty的內在編碼機制將程序中用到的數

base64 , netty

flydean - netty系列之:netty中各不同種類的channel詳解

簡介 channel是連接客户端和服務器端的橋樑,在netty中我們最常用的就是NIO,一般和NioEventLoopGroup配套使用的就是NioServerSocketChannel和NioSocketChannel,如果是UDP協議,那麼配套使用的就是NioDatagramChannel,如果是別的協議還有其他不同的Channel類型。 這些不同channel類型有什麼區別呢?一個直觀的感覺

channel , netty , JAVA

flydean - netty系列之:EventExecutor,EventExecutorGroup和netty中的實現

簡介 netty作為一個異步NIO框架,多線程肯定是它的基礎,但是對於netty的實際使用者來説,一般是不需要接觸到多線程的,我們只需要按照netty框架規定的流程走下去,自定義handler來處理對應的消息即可。 那麼有朋友會問了,作為一個NIO框架,netty的多線程到底體現在什麼地方呢?它的底層原理是什麼呢? 今天帶大家來看看netty中的任務執行器EventExecutor和EventEx

channel , netty , JAVA

flydean - netty系列之:可以自動通知執行結果的Future,有見過嗎?

簡介 在我的心中,JDK有兩個經典版本,第一個就是現在大部分公司都在使用的JDK8,這個版本引入了Stream、lambda表達式和泛型,讓JAVA程序的編寫變得更加流暢,減少了大量的冗餘代碼。 另外一個版本要早點,還是JAVA 1.X的時代,我們稱之為JDK1.5,這個版本引入了java.util.concurrent併發包,從此在JAVA中可以愉快的使用異步編程。 雖然先JDK已經發展到了17

channel , netty , JAVA