技術ブログを書いたほうがいいということで書き綴ってみた

技術ブログを書いたほうがいいということで書き綴ってみた

単語ごとの出現回数を出現順に表示するには、HashMapとArrayListが必要か

単語ごとの出現回数をカウントするのは、HashMapでやってみた。 Integerのコストは高い?

出現順に表示するために出現順は、ArrayListでキー管理した。 これがベストの方法なのかどうかわからなかったが、 今知っている限りのベストだと思う。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        String token[] = line.split(" ");
        HashMap map = new HashMap();
        ArrayList list = new ArrayList();
        for(String key: token){
            if(!list.contains(key))list.add(key);
            if(map.get(key) == null ){
                map.put(key,new Integer(1));
            }else{
                map.put(key,new Integer((int)map.get(key)+1));
            }
        }
        for (int i = 0; i < list.size(); i++) {
            StringBuffer a = new StringBuffer();
            a.append(list.get(i));
            a.append(" ");
            a.append(map.get(list.get(i)));
            System.out.println(a);
        }
    }
}

findコマンドの便利なもの備忘録

●検索したものをmd5sumして、ファイル名でソート

find /tmp -type f -exec md5sum {} \;| grep svn | sort -k 2
# 確認しながらやる場合
find /tmp -type f -ok md5sum {} \;| grep svn | sort -k 2

●最近使ったファイル

# 1日前
find /tmp -type f -mtime -1

# 7分前
find /tmp -type f -mmin -7

svnディレクトリをすべて削除

find /var/www/htdocs/ -type d -name ".svn" -exec rm -rf {} \;

●日付の古い大きなサイズのファイル

find . -mtime +10 -size +1G -exec ls -lh {} \;
find . -mtime +30 -size +1M -exec ls -lh {} \;

●指定したファイルより新しいファイル

find /tmp -type f -newer sample.txt

svn管理フォルダを削除

find /var/www/htdocs/ -type d -name ".svn" -exec rm -rf {} \;

Time::HiResモジュールがないというコンパイルエラーが発生した際の対処方法

Time::HiResモジュールがないというコンパイルエラーが発生した際の対処方法

# perl -c test.pl

コンパイルエラー発生

Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at test.pl line 4.

そんなときは、以下で解決

yum install perl-Time-HiRes
================================================================================
 Package                Arch          Version                 Repository   Size
================================================================================
Installing:
 perl-Time-HiRes        x86_64        4:1.9721-141.el6        base         49 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 49 k
Installed size: 56 k

Downloading Packages:
perl-Time-HiRes-1.9721-141.el6.x86_64.rpm                |  49 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 4:perl-Time-HiRes-1.9721-141.el6.x86_64                      1/1
  Verifying  : 4:perl-Time-HiRes-1.9721-141.el6.x86_64                      1/1

Installed:
  perl-Time-HiRes.x86_64 4:1.9721-141.el6

Complete!

これで、usleepが使えて、処理時間の計測ができる。 サンプルコードは、以下。

use strict;
use Time::HiRes qw/ usleep /;
my $microseconds = 5000;
my $start_time = Time::HiRes::time;

usleep ( $microseconds );

printf "%0.3fus\n",Time::HiRes::time - $start_time ;

実行結果は、 0.007us

っん?そんなにusleepは正確じゃないんだね。

log4jで出力した出力結果をjunitでテストする

log4jで出力した出力結果をjunitでテストする

@Test
public void test() {
    StringWriter writer = new StringWriter();
    WriterAppender appender = new WriterAppender(new PatternLayout("%p, %m%n"),writer);
    LogManager.getRootLogger().addAppender(appender);
    LogManager.getRootLogger().setAdditivity(false);
    try{
        /** 何かしらのログを出力する処理 */

        /** エラーログのテスト */
        String logString = writer.toString();
        assertThat(logString, containsString(" 確認したいログメッセージ "));

    }finally{
        LogManager.getRootLogger().removeAppender(appender);
        LogManager.getRootLogger().setAdditivity(true);
    }
}