原创 實現簡單的 IOC 容器

最近在看Spring的源碼,對依賴xml配置文件的IOC容器的實現部分閱讀起來比較吃力。主要是因爲自己對IOC實現機制不是很瞭解,於是萌生了按其原理實現一個簡單的IOC容器,來以便自己對Spring 的 IOC 實現能有更深入的瞭解。 什

原创 簡單工廠、工廠方法和抽象工廠

前言 一家披薩店PizzaStore有多種類型的披薩,有cheese、clam、veggle等等。當顧客訂購披薩時,可通過如下方式實現: public class PizzaStore { private Pizza pizza;

原创 clean code讀書筆記一

《clean code》一書主要講解對於寫出簡潔易懂的代碼的一些規範。對於一些覺得很重要,並深以爲然的規範記下來,以便以後溫習警醒自己嚴格遵守這些規範。 要點一(3.1小節) 函數的第一規則是要短小,第二條股則還是要短小。函數不應該有10

原创 Tomcat 管道 Pipeline

前言 最近看了《How tomcat works》一書,在Tomcat源碼中,管道Pipeline是Tomcat很重要的一個組成部分。在Tomcat各層中都使用到了。要讀懂Tomcat源碼,理解Pipeline是何如實現是非常重要的。To

原创 java 集合框架之隊列 DelayQueue

前言 最近一直在看隊列相關的源碼,上一篇介紹了優先隊列的實現,這一篇則看一看延遲隊列是如何實現。優先隊列主要是分析其數據結構的實現,而延遲隊列不一樣。延遲隊列的底層其實就是優先隊列,它利用優先隊列排序的功能將插入的元素按照等待時間先後保存

原创 普通內部類靜態成員

java普通內部類不能有static成員,爲什麼可以有final static成員? 最近在重溫”thinking in java”鞏固java基礎知識,讀到7.6.4 static內部類的講解中,提到static成員只能位於一個類的外部

原创 Binder學習筆記(一)

Android提供了多種IPC機制,比如文件共享,使用Messenger,也可以使用ContentProvider、Socket和AIDL,基於AIDL服務的IPC,就要用到Binder。要了解Binder,不僅要熟悉它在java層的框

原创 Tomcat Lifecycle 觀察者模式

前言 Pipeline 和 Lifecycle 貫穿Tomcat 整個源碼,上一篇中博客已經介紹了 Pipeline。接下來介紹 Lifecycle。Lifecycle 是整個 Tomcat 觀察者設計模式思想的體現。我們已經知道 Tom

原创 Synchronized 關鍵字

前言 synchronized 關鍵字是 java 多線程同步體系中最爲重要的關鍵字。關於它修飾方法或者代碼塊,其不同用法對應不同作用域容易遺忘,因此記下來,等以後遺忘了之後再翻閱加深記憶。 synchronized sychronize

原创 java8 線程池 ThreadPoolExecutor 源碼解析

前言 在看 Java 線程池源碼實現之前,只知道線程池是爲了多線程執行任務時線程複用,防止創建過多的線程銷燬系統資源。但是對線程複用只有一個模糊的概念,什麼是線程複用,如何線程複用,確實說不出個所以然來。看過源碼後,疑惑也就解決了。在線程

原创 命令設計模式

前言 將命令請求者和命令接收者進行解耦,以達到對內修改封閉,對外擴展開放的目的。命令接收者就相當於機器,可以執行不同的命令,但是對命令具體執行什麼是不知情的。當一個命令接收者可以接收多種命令,且可接收的命令時可擴展時,這種情形下是比較適合

原创 builder設計模式學習筆記

在面向對象編程過程中,通常通過構造器new的方式來獲取一個類的對象。這種方式比較適合對象屬性較少的情形。當對象的屬性過多時,這種方式就不太適合了。以一個食物商品爲例,它擁有總脂肪量,膽固醇,鈉,蔗糖等20多個屬性,當我們生成該商品的對象時

原创 裝飾者設計模式

前言 裝飾者模式:動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更具有彈性的替代方案。 場景 我們知道,咖啡店裏面的口味特別多,有dark roast(深烘焙),也有Espresso(濃縮咖啡),也有Machiatto(馬

原创 指向子類對象的父類引用(向上轉型)

注意點1 父類中的private變量和方法,父類本身的對象是無法直接調用的,自然指向子類對象的父類引用也是無法訪問父類中的private變量和方法。 注意點2 子類擴展父類的變量和方法,該引用是無法調用的。 public class

原创 binder學習筆記(二)

上一篇對binder大概介紹了下,並且寫了一個用binder跨進程的範例。接下來我將對AIDL生成的java文件結合binder驅動講解下。  由上一篇的範例可以看到,客戶端通過bindService啓動服務端組件Service,組件se