原创 Text file busy問題解決

1 問題 在服務器上停掉jar包服務後,重新開始服務時報如下錯誤: -bash: /xxx/appService.jar: bad interpreter: Text file busy 2 原因 在執行service appS

原创 基於volatile解決雙重檢查鎖不安全問題

一、 問題分析 雙重檢查鎖(Double-checked Locking)可以降低直接使用synchronized同步共享資源帶來的性能開銷,使用DCL實現延遲加載的代碼如下: public class DoubleCheckedL

原创 SpringBoot 接收遠程服務器傳遞的字符串參數中文亂碼

問題 通過SpringBoot 接收遠程服務器推送的數據(json字符串),傳遞的字符串參數中文亂碼,英文、數字顯示正常,中文全部顯示爲‘?’號。 解決 對方發送的編碼方式爲UTF-8,所以接收數據的時候也設置編碼格式,在spring

原创 通過反射獲取實體對象的屬性及對應的屬性值

需求 需要獲取實體對象的屬性及屬性值作爲key-value形式的NameValuePair參數,用於post請求的參數,爲了避免一大段的get代碼,考慮使用反射方式進行設置,示例代碼如下: public class Person {

原创 實現快速排序算法的另一種思路

一、快速排序算法 快速排序的基本思想如下: 從數組中取出一個數作爲中軸數(pivot) 劃分數組:將比這個數大的數放到它的右邊,小於或等於它的數放到它的左邊 再對左右區間重複上述步驟,直到各區間只有一個數 本篇文章實現快速排序算法的

原创 通過鏈表實現一個棧

棧是一個先進後出的數據結構,本篇文章使用鏈表來實現一個棧。 一、定義棧的方法接口 這裏定義了棧的幾個主要方法: public interface IStack<E> { /** * 棧元素大小 * @ret

原创 ABA問題及其解決方法

一、ABA問題的產生 CAS 在修改變量值時,會先檢查該變量的值是否和預期值一致,若一致則修改,引發的ABA問題的情況是:如一個變量初始值爲A,被另外一個線程修改成B,再由B修改爲A,此時使用CAS進行操作就檢查不出變量的變化軌跡,並

原创 通過數組實現一個棧

棧是一個先進後出的數據結構,所以實現棧就抓住棧的該特性,當然使用數組實現棧,需要考慮擴容問題,如果使用鏈表來實現的話就沒有擴容問題了。 一、定義棧的方法接口 這裏定義了棧的幾個主要方法: public interface IStack

原创 CAS實現原子操作的三個問題

在java中,如果要進行原子操作,我們可以通過加鎖或CAS的方式來實現。其中,CAS雖然高效的解決了原子操作,但需要注意其存在的三個問題:ABA問題、自旋時間長開銷大、只能保證一個共享變量的原子操作。 一、ABA問題 CAS 在修改變

原创 一個例子搞懂快速排序算法

一、快速排序算法 快速排序算法是對冒泡排序的一種改進。 快排基本思想是:通過一趟排序將要排序的數據以基準數據分割成獨立的兩部分,其中一部分的所有數據都比基準數據小,另外一部分的所有數據都比基準數據大,然後再通過遞歸對這兩部分數據分別進

原创 java wsimport命令生成WSDL文件描述的接口類

通過webservice做數據對接時,由於公司的網絡和對方網絡連不通,訪問不了對方提供的webservice鏈接,爲了先了解對方的接口方法,可以根據WSDL文件生成接口。 jdk 提供了一個wsimport命令,可以實現該需求。 用法

原创 java 無法僅僅依靠返回值的不同對方法進行重載的原因

對於java 程序員來說,都知道或聽過java 無法僅僅依靠返回值的不同對方法進行重載,但具體原因是什麼呢,在《深入理解Java虛擬機 JVM高級特性與最佳實踐》class類文件的結構-方法表集合這一章節給出了具體的原因(原文可參考6

原创 list集合排序-lambda表達式實現

需求 從數據庫中查詢並彙總後的數據列表(list)在界面展示時需根據升序/降序按鈕進行排序,普通實現代碼如下: /** * list 排序 * @param list * @param sidx 排序列名 * @param s

原创 Java 保存 oracle CLOB 類型字段並插入數據庫

要將clob類型字段插入Oracle,需要通過字符流進行處理,處理如下: ... String fieldValue = "testClob,testClob,testClob,testClob,testClob"; // 轉成流形

原创 Oracle批量插入數據報executeBatch異常:ArrayIndexOutOfBoundsException

1 問題 使用PreparedStatement向 Oracle 10g數據庫批量插入數據時,當插入2萬條數據後,出現異常java.lang.ArrayIndexOutOfBoundsException,具體信息如下: java.la