Java ArrayDeque die in Multiple threads

今天遇到一個問題

Java 的 ArrayDeque 並非執行序安全的物件,在多執行緒的狀況下,會卡死,導致使用poll時,任何東西都拿不出來。

解決方法很簡單單,上個synchronized去鎖住就行了。

因為我原本在使用這個東西的程式碼中,在別的地方有用lock去控制執行緒,再加上認為這邊應該只會造成順序亂掉之類的問題,就沒上synchronized,沒想到ArrayDeque會死到連東西都拿不出來。

package com.f23ko.test;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Map;

/**
 * Created by f23ko on 2016/10/5.
 *
 * sysout:
 * take(3) put(3) diff(0)
 * take(326) put(866) diff(540)
 * take(1746) put(1751) diff(5)
 * take(2629) put(2637) diff(8)
 * take(3515) put(3523) diff(8)
 * take(4400) put(4408) diff(8)
 * take(4718) put(5285) diff(567) <= ArrayDeque die
 * take(4718) put(6164) diff(1446)
 * take(4718) put(7047) diff(2329)
 */
public class QueueTest {
    static Deque<Integer> queue=new ArrayDeque<>();
    static int take=0;
    static int put=0;

    static void take()  {
        while (true){
            Integer t= queue.poll();
            if(t!=null){
                take++;
                continue;
            }

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    static void put() {
        int i=0;
        while (true){
            i++;
            queue.offer(i);
            put++;
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    static void print(){
        while (true){
            int t=take;
            int p=put;
            System.out.println("take("+t+") put("+p+") diff("+(p-t)+")");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args){
        new Thread(QueueTest::put).start();
        new Thread(QueueTest::put).start();
        new Thread(QueueTest::put).start();
        new Thread(QueueTest::take).start();
        new Thread(QueueTest::print).start();
    }
}

Ruby on Rails 常用指令、程式碼整理

我開始學ROR,因為指令很多,所以特別寫整理這一篇文章來紀錄常用的指令。

資料庫遷移 (前面加 STEP=2 可以指定移動2個版本,例如STEP=2 rake db:rollback)
rake db:rollback
rake db:migrate
rake db:migrate:status

依照 db/schema.rb 建立資料庫,或是撈出資料庫
rake db:schema:load
rake db:schema:dump

資料庫中預設保留的欄位
created_at – 创建记录时,自动设为当前的时间戳;
updated_at – 更新记录时,自动设为当前的时间戳;
lock_version – 在模型中添加乐观锁定功能;
type – 让模型使用单表继承;
(association_name)_type – 多态关联的类型;
(table_name)_count – 缓存关联对象的数量。例如,posts 表中的 comments_count 字段,缓存每篇文章的评论数

檢視路由表
rake routes

查詢複數形
rails c 然後 “user".pluralize => users

防止中文編碼出問題的註解
# encoding: UTF-8

Migration的資料庫預設30字元,不可為空值,預設空白
t.string :name, limit: 30,  null: false, default: "

欄位的設定
ActiveRecord::ConnectionAdapters::TableDefinition

Model底下可以用serialize 去指定序列化的欄位

Gem  acts_as_nested_set  這個Gem可以去處理樹狀資料庫結構的問題

所有的 Rails 元件(如 ActionMailer, ActionController, ActionView, ActiveRecord)都是一個 Railtie,如果你想要像這些一樣的方式來擴充 Rails ,那你可以閱讀這個 Rails::Railtie 來嘗試建立自己的 Railtie
修改 Rails 原本的行為,我們也稱爲「打 Patch」,所以你可以用上面的 Concern 幫 ActiveRecord 打 patch

受保護的文章:智慧的末途

該內容受密碼保護。如欲檢視請在下方輸入你的密碼:


受保護的文章:盲目前行

該內容受密碼保護。如欲檢視請在下方輸入你的密碼:


Ruby on Rails

Ruby on Rails 簡介

台灣的軟體業偏向單打獨鬥,那這樣子的話Ruby on Rails應該會是比較好的選擇,RoRs的開發速度可以壓縮到Java、PHP之類的語言的五分之一。

雖然說java的效能較好,較善於處理大型網站,但老實說,台灣沒幾個網站需要用到這樣的環境,台灣的網站很少把國際的網路服務當成目標。

 

 

而且在單獨開發,整個團隊只有兩三人的狀況下,也沒必要用到java這麼「重型」的語言。

用java從無到有開發一項產品,會是個大工程,這主要是因為java定下了很多規範,甚至連javadoc的寫法都有訂立,這讓任何一個java程式設計師可以輕易的去使用別人所開發的元件,這語言本身就被設計為大型團隊在用的。

 

但在台灣都自己寫自己的,頂多是去找買別人的libary來用,誰在做這種事情啊?

 

所以在台灣,速度、便宜才是唯一標準。

 

 

當網站到大要考慮轉換與語言的時候,再找整個團隊的java工程師也不遲,在那種狀況下,人力根本不是問題。

在台灣這種喜新厭舊、常常跟風的市場,對開發速度非常要求的地方,如果速度比不上,那就根本不用玩了。

乳油木護手霜的配方

自己動手來做乳油木護手霜
61e8epYSYh3DPmJ1brG7ao
IMAG0030

 

(繼續閱讀…)

JSP、ASP.NET、PHP比較

因為自己用過幾種程式語言
所以把用過的感想整理一下
分析各種語言的優缺點

有些人可能會感到困惑:我到底該學哪種語言?

我的回答是….. 你應該看你的用途、去決定使用哪種語言
JAVA、JSP、J2EE
優點:
1.高效能:
主要是因為JVM會動態的把JAVA虛擬碼編譯成C的關係
以及會依照運行狀態去調整他運行的方式
甚至把人寫的爛CODE去改寫成比較好的寫法之類的
不會比C慢太多

(繼續閱讀…)

Gson的JSON轉換成JAVA物件時,型別資訊遺失的解決方法

想要把JSON轉換成JAVA物件,或是把JAVA物件轉換成JSON怎麼做呢?

Gson 是個好用的JSON對JAVA的轉換工具,他可以將JSON轉換成JAVA物件,以及把JAVA物件轉換成JSON

例如:

JAVA:
class A
{
String a="NAME";
int id=500;
}

轉成JSON之後,就會變成

JSON:
{"a":"NAME","id":500}

詳細說明可以看Gson的官方網站
Gson的官方網站

但很遺憾的是,Gson有個缺點,那就是….
(繼續閱讀…)

這是為了世界和平!!!

a

(繼續閱讀…)

終於出現不支薪的工作了嗎!? (華霖科技行銷股份有限公司)

下面這是華霖科技行銷股份有限公司開出的職缺,這原本是在yes123開出的職缺

華霖科技行銷股份有限公司

雖然該公司已經將直缺關閉了,但有網友把內容備份下來了。

(繼續閱讀…)

«page 1 of 7
Welcome , today is 星期二, 2017/10/24