原创 布隆過濾器(BloomFilter)

布隆過濾器的使用場景 在架構設計中,通常會涉及這樣的場景: 詞典服務中,查詢某個單詞是否合法(即是否存在於保存有海量單詞的詞典文件中) 爬蟲服務中,檢查某個網頁是否已經收錄(即是否存在於海量的已爬取網頁庫中) 文章/商品推薦服務中,檢查某

原创 會員中心設計淺談

背景 在JAVA工程架構中,會員中心是非常基礎的服務,其主要是服務C端用戶(對於電商行業而言就是終端消費者),是引客、用戶運營、用戶信息存儲、用戶畫像建立中不可或缺的重要部分。會員中心的設計中,如何建立會員信息模型,如何與其他各服務,如營

原创 Semaphore淺析

背景 在之前的文章中介紹了ReentrantLock、Condition和CountDownLatch這些在JAVA多線程中常用的類,它們各有各的使用場景。ReentrantLock通常用於需要可重入鎖定、帶超時時間的獲取鎖等場景,Con

原创 CountDownLatch淺析

背景 前邊的文章中已經介紹了JAVA多線程併發工程實踐中一批常用的類,比如最爲核心的AQS(AbstractQueuedSynchronizer),基本上JAVA多線程併發實踐中的常用類的實現都與它能扯上關係;比如ReentrantLoc

原创 ReentrantLock淺析

背景 在之前的文章中提到了多線程並行操作在工程實踐中的重要作用,也提到了如何保持臨界資源和串行代碼段的線程安全性是十分必要的。在計算機領域,是採用鎖來保證線程安全性的。JAVA提供了多種鎖的機制,比如早期的synchronized關鍵字,

原创 Condition淺析

背景 我們在談到多線程併發訪問臨界資源的時候,通常會想到Object類的monitor鎖和wait/notify(條件等待/通知)操作。很多同學會想問,既然有了加鎖/解鎖機制,爲什麼還要引入條件等待/通知操作呢?原因在於,當A線程對臨界資

原创 synchronized關鍵字淺析

背景 在實際工程實踐中,多線程併發執行場景十分常見。所謂線程安全性即是多線程併發執行場景中需要保證的基本要求,如果不能保證線程安全性,那麼勢必會在實際工程實踐中產生錯誤數據、甚至嚴重且不易察覺的異常處理,導致最終結果的不確定性。對於臨界資

原创 Netty Server端常用組件分析

一、背景 在本專題的第一篇文章中,我們簡單介紹了Netty網絡I/O框架推出的必要性,並給出了一個十分簡單的Netty Server端實例。雖然它可以直接運行,但是由於非常簡陋,因此並不適宜在生產環境直接使用。從本文開始,我們將對Nett

原创 Spring框架淺析 -- IoC容器與Bean的生命週期

爲什麼要使用IoC 在介紹Spring IoC容器之前,先讓我們來回顧一下什麼是IoC,權威的概念如下:https://en.wikipedia.org/wiki/Inversion_of_control 簡單說就是,不要再手寫代碼來維護

原创 Spring框架淺析 -- SpringMVC

Spring MVC 使用過Spring用於建設Web服務工程的,都不可避免地要接觸Spring MVC。 那麼MVC究竟是什麼?MVC是Model,View和Control的簡稱,用於標識Web工程中功能劃分明晰、各自承擔各自職責的模型

原创 SpringBoot啓動過程

指定SpringBoot的入口 通常我們使用Spring Boot的時候,會有一個作爲程序主入口的類,並在其上標註SpringBootApplication。 首先我們來看一下這個SpringBootApplication標註,如下所示:

原创 Spring框架淺析 -- AOP

什麼是AOP AOP-Aspect Oriented Programming,通常翻譯爲面向切面編程。它的提出實際上是爲了補充OOP-Object Oriented Programming的一些不足。 那麼OOP有哪些不足呢?這裏我談談自

原创 JAVA線程池淺析

線程池的概念 在談到線程池之前,我們先說一說什麼是線程與進程的區別與聯繫。 每一個JAVA程序都是一個進程,在某些場景下,爲了獲得更好的處理性能,縮短處理時間,可以啓動多線程來併發執行任務。每一個進程包含一到多個線程,其中一個爲主線程;一

原创 I/O操作 -- 同步與異步,阻塞與非阻塞

背景 I/O作爲應用系統常用的功能之一,對其有基本的理解是非常有必要的。尤其是在SOA盛行的今天,高效率的I/O是SOA的基礎設施RPC框架的基石。本文將針對I/O領域中常見的兩組分類:同步與異步,阻塞與非阻塞進行淺析。 I/O操作的原理

原创 Spring框架淺析 -- 數據庫事務處理

概述 在Spring框架淺析 -- 概述中,我們介紹過,Spring對於數據庫操作及事務處理的支持,是Spring功能中較爲重要的一環。那麼數據庫事務是什麼?爲什麼要Spring需要對數據庫操作及事務處理進行支持?Spring都提供了哪些