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

JSP、ASP.NET、PHP比較

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

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

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

(繼續閱讀…)

F23.tw 縮網址網站正式上線!

終於把程式給寫完了

http://f23.tw/

因為看縮網址這項服務似乎蠻簡單的,就花點時間來寫了一下…. 果然不難,只不過因為想多加一些功能下去,才會花了三四個禮拜的時間才完成。

 

簡單的來介紹一些與其他縮網址不同的功能:

1.支援自訂義短網址:你可以為自己的短網址命名,例如說….
http://f23.tw/介紹
你可以選擇為短網址命名,而不是由程式自動產生流水字串,你也可以用中文或是日文等其他語言為短網址命名,不過這些非英文文字將被轉換URL邊碼

2.提供保留副檔名的功能
舉例來說,當你貼了一張圖之後,你可以讓網址看起來像是這樣
http://f23.tw/FFFF.jpg
當然,原本的 http://f23.tw/FFFF 也是可以使用的

3.提供詳細的流量統計,以及使用者追蹤
如範例頁面
http://f23.tw/介紹/u (網址後加 /u 為使用者追蹤)
http://f23.tw/介紹/i (網址後加 /i 為點擊統計)

(繼續閱讀…)

PHP 多執行緒解決方案

從JAVA跳到PHP之後,覺得PHP是種簡單的語言,以前用JAVA要寫好多行的程式,用PHP只要兩三行就能解決了。

但是我一直認為PHP就是因為太簡單,導致需要有些特殊的功能需要很花工夫才能達成,例如多執行緒。

現在,我找到解決方案了。

(繼續閱讀…)

[快訊] 是方電訊的機房爆炸

有些人可能會問是方電訊的網站怎麼上不去

 

據噗浪上的傳聞表示,是方電訊的機房爆炸

而目前是方電訊的官方網站也上不去,詳細情況不明

http://www.chief.com.tw/

有些使用是方電訊的網站現在應該都上不去

 

最新消息:麗源大樓火警, 是方/數位通兩業者機房斷電.

(繼續閱讀…)

駭客九宮格,你是哪種駭客?

駭客九宮格陣營圖
駭客九宮格陣營圖

妳是哪種陣營呢?

POPO原創後續

轉錄自蘋果日報:

城邦網留言「囧」暱稱 熱心駭客獲緩起訴

28歲的劉姓網頁工程師去年發現城邦原創公司旗下「POPO原創市集」、「起點中文網」網頁安全有漏洞,熱心發電子郵件告知城邦公司,但發現城邦遲未改善,劉男竟在去年11月7日化身駭客,以「跨網站指令碼」(Cross-Site Scripting,簡稱XSS)攻擊該網站,導致上「POPO」、「起點」網站留言的網友,暱稱全變成「囧」。

程式人的心酸-你準備好要進軟體業了嗎?

靠JAVA吃飯吃了一年了

總覺得想像中的資訊業跟現實中的資訊業有一段很大的落差。

在技術上是沒遇到什麼太大的問題
因為一般的需求,在技術上都不會複雜到哪裡去…
頂多就是弄弄報表、輸入輸出資料、讀寫資料庫、檔案傳來傳去之類的而已
在大不了就是call api去跟其他東西串在一起

並不是每種程式都會用到一堆複雜的演算法、艱深的數學。決大多數都是,調調版面、報表的位置、內容,許多部分都是很枯燥乏味,而且缺乏創新、創造的。在工作之中,最常做的是「剪下貼上」,不是我不願意設計出方便重覆使用的程是架構,而是被主管要求要這樣做。

如果你對寫程式還擁有熱情,最好先看看下面這篇文章。

這是我前陣子遇到的案例,真的很扯。

(繼續閱讀…)

POPO原創(城邦原創)遭到攻擊

被XSS攻擊搞到停站的網站

http://www.popo.tw/

駭客屬名DarkFrameMeaster

(繼續閱讀…)

«page 1 of 2
Welcome , today is 星期二, 2024/03/19