原创 var that = this 小坑記

在js編碼過程中,經常會使用如上的語句來規避拿不到變量的問題。 比如:queryData:function () { var that=this; var param={};

原创 略解TCP亂序和丟包

在使用基於TCP實現的各種組件的時候,我們經常會處理數據包。這數據包說來奇怪,從來不會丟失,也不會亂序,只會產生粘包。底層的機制是如何實現的呢?進來我們就來用簡潔易懂的文字描述清楚。 在TCP數據包設計思想中,有兩個比較重要的概念:    

原创 你所不知道的異步回調

前言 回調,顧名思義,回過頭來調用,詳細的說來就是用戶無需關心內部實現的具體邏輯,只需要在暴露出的回調函數中放入自己的業務邏輯即可。由於回調機制解耦了框架代碼和業務代碼,所以可以看做是對面向對象解耦的具體實踐之一。由於本文的側重點在於講解後

原创 ThreadLocal之我所見

網上有很多關於ThreadLocal的文章,大部分都提到了多線程之間共享資源的問題。其實ThreadLocal和多線程之間一點關係都沒有。如果有,我怕是它的名字改成ThreadShare是不是更合適呢?開個玩笑。從其名稱ThreadLoca

原创 利用pom配置實現靜態文件拷貝

java項目有時候需要將一些靜態文件拷貝到生成的test-class文件夾或者其他地方,雖然手動拷貝可以做到,但是很麻煩。今天主要講解如何利用pom.xml進行動態的拷貝。 具體的配置信息如下,在dependencies節點後面追加buil

原创 網絡傳輸數據序列化工具Protostuff

一直在物色比較好用的網絡傳輸數據序列化工具,看了諸如marshalling,protobuff等,但是均有一個共同特點,使用起來異常繁雜,有沒有比較好用同時性能又不會太差的組件呢?答案當然是有的,那就是基於protobuff改造的proto

原创 像調試java一樣來調試Redis lua

高併發的系統中,redis的使用是非常頻繁的,而lua腳本則更是錦上添花。因爲lua腳本本身執行的時候是一個事務性的操作,不會摻雜其他外部的命令,所以很多關鍵的系統節點都會用redis+lua來實現一致性的操作請求。但是在實際開發過程中,由

原创 你所不知道的限流

在系統架構設計當中,限流是一個不得不說的話題,因爲他太不起眼,但是也太重要了。這點有些像古代鎮守邊陲的將士,據守隘口,抵擋住外族的千軍萬馬,一旦隘口失守,各種饕餮涌入城內,勢必將我們苦心經營的朝堂廟店洗劫一空,之前的所有努力都付之一炬。所以

原创 性能測試遭遇TPS抖動問題

目前性能測試組正在對獨立秒殺進行性能壓測,性能抖動特別厲害。   由於獨立秒殺的接口大多數是經過volicity渲染過的頁面和數據的整合,所以在壓測的時候有很多volicity的錯誤。初步判定,感覺是volicity的性能問題才導致的。但

原创 我的思文齋:積水成淵則蛟龍生焉

最近晚上的時間相對來說是比較寬裕的,所以想寫一個系列的東西出來,以便於鞏固自己當前的知識體系。 目前我的計劃如下: 1. WebAPI 系列講解。 --已經開始 主要講解WebAPI和OAuth。 2.Java開發系列講解(以STS爲主)。

原创 TinyFrame系列:基於EFCodeFirst,IOC,AOP的輕型框架

TinyFrame開篇:基於CodeFirst的ORM TinyFrame續篇:整合Spring IOC實現依賴注入 TinyFrame再續篇:整合Spring AOP實現日誌攔截 TinyFrame尾篇:整合Spring AOP實現用戶認

原创 基於JMH的Benchmark解決方案

原始Benchmark做法 在設計新框架的時候,往往需要評估待接入的組件的性能,這個時候我們可能會利用UnitTest來進行,寫一個方法,然後在循環裏面跑,利用System.CurrentTimeMillis()來評估組件性能。然而這種機制

原创 基於FastJson的通用泛型解決方案

由於項目使用的是fastjson,也無法換成其他的序列化框架,所以研究了一下他對泛型序列化和反序列化的支持能力,最終解決了這個問題。 要達成的目標 我的封裝方式屬於通用封裝,我要達到的目標是如下的使用方式: 放入數據: Map<Strin

原创 你所不知道的日誌異步落庫

在互聯網設計架構過程中,日誌異步落庫,儼然已經是高併發環節中不可缺少的一環。爲什麼說是高併發環節中不可缺少的呢? 原因在於,如果直接用mq進行日誌落庫的時候,低併發下,生產端生產數據,然後由消費端異步落庫,是沒有什麼問題的,而且性能也都是異

原创 mac上配置java開發環境

項目在mac上跑起來的步驟: 1. 訪問,https://brew.sh/  裝上這個然後  brew install git  brew install maven, settings.xml需要放到目錄位置/usr/local/Cell