java 問題

1) java.lang.Iterable インタフェースを実装し、FizzBuzzを実装せよ

2) 下記プログラムを実行した際の、三個所の if 文について説明せよ

/**
 * @author aileron
 */
public class EqTest
{
    /**
     * @param args
     */
    public static void main(final String... args)
    {
        final String test1 = test1();
        final String test3 = test3();
        final String test2 = "AAAA";

        System.out.println("test1 : " + test1);
        System.out.println("test2 : " + test2);
        System.out.println("test3 : " + test3);

        if (test1.equals(test2))
        {
            System.out.println("test1 eq test2");
        }

        if (test1 == test2)
        {
            System.out.println("test1 == test2");
        }

        if (test1 == test3)
        {
            System.out.println("test1 == test3");
        }
    }

    /**
     * @return test1
     */
    private static String test1()
    {
        return "AAAA";
    }

    /**
     * @return test3
     */
    private static String test3()
    {
        String test3 = "";
        for (int i = 0; i < 4; i++)
        {
            test3 += "A";
        }
        return test3;
    }
}


3) 下記プログラムの実行結果をしめせ

public class RecTest
{
    /**
     * @param args
     */
    public static void main(final String... args)
    {
        final List<String> list = new ArrayList<String>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        list.add("eeee");
        final int result = rec(list);
        System.out.println(result);
    }

    /**
     * @param args
     * @return ok
     */
    public static int rec(final List<String> args)
    {
        final String arg = args.get(args.size() - 1);
        System.out.println(arg);

        if (args.size() == 1)
        {
            return 2;
        }
        final List<String> subList = args.subList(0, args.size() - 1);
        final int result = rec(subList);
        return result * 2;
    }
}

java 修得度問題

1)Javaのプロセスに対してSIGQUITシグナルを送った時の動作を説明してください。


2)public static void main 関数を実装し
  Bをインスタンス化し、標準出力に "20-test" と出力される様にせよ

package sample;
class A<A>
{
    class B<B>
    {
        public void out()
        {
            System.out.print(a);
            System.out.print("-");
            System.out.println(b);
        }

        private A a;
        private B b;
    }

    /**
     * @param args
     */
    public static void main(final String... args)
    {
    }
}

3)public static void main を 実行した結果
  hoge
  fuga
  hogehoge
  になるように enum B の コンストラクタは修正せず 実装せよ

package sample;

class A
{
    static interface AA
    {
        String value();
    }

    enum B implements AA
    {
        A,

        B,

        C;

        private B()
        {
        }
    }

    /**
     * 
     * 
     * @param args
     */
    public static void main(final String... args)
    {
        System.out.println(B.A.value());
        System.out.println(B.B.value());
        System.out.println(B.C.value());
    }
}





4)本プログラムを実行した結果を示せ

package sample;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@B(C.class)
public class A
{
    /**
     * @param args
     * @throws Exception
     */
    public static void main(final String... args) throws Exception
    {
        System.out.println(C.class.getAnnotation(B.class)
                .value()
                .getAnnotation(B.class)
                .value()
                .newInstance()
                .value());
    }

    /**
     * @return label
     */
    public String label()
    {
        return "fuga";
    }

    /**
     * @return value
     * @throws Exception
     */
    public String value() throws Exception
    {
        return this.getClass()
                .getAnnotation(B.class)
                .value()
                .newInstance()
                .getClass()
                .getAnnotation(B.class)
                .value()
                .newInstance()
                .value();
    }
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface B
{
    String lable() default "hogexhoge";

    Class<? extends A> value() default A.class;
}

@B(D.class)
class C extends A
{
    /**
     * @return label
     */
    @Override
    public String label()
    {
        return "hogahoga";
    }

    /**
     * @return value
     */
    @Override
    public String value()
    {
        return "fugafuga";
    }
}

@B
class D extends A
{
}


メモ

ものすごい最低限のvimrcメモ

set ai
set ts=4
set nobackup
set nowritebackup
set incsearch
set noignorecase
set visualbell
set cursorline
set shiftwidth=4
set nocompatible
set hidden
set backspace=indent,eol,start
set diffopt=filler,iwhite
set nofoldenable
set foldmethod=marker
set history=2000
filetype plugin indent on
syntax enable

set laststatus=2
set statusline=%n:\ %<%f\ %m%r%h%w[%{&fileformat}][%{has('multi_byte')&&\ &fileencoding!=''?&fileencoding:&encoding}]\ 0x%B=%b%=%l,%c\ %P

ドメインモデルとトランザクションスクリプトとアジャイル

ドメインモデルとは
あるビジネスの固有の事象を定義し構築していく
手法だと思う


その為に必要な要素としては
・システムに対してのユーザの理解
・ビジネスに対しての開発者の理解
で有ると思う。


それって言うのは、とてもアジャイル
日本よりも海外の感覚に近しいのかも知れない


また、ドメインモデルは、難しい
それは、複雑な事象を簡単にシンプルにする為に
考える事が必要で有るからだ。


ただ、エンジニアとは考えると言う事が商売だ。


そこを簡単にして、素人100人で、でっち上げるのか
エンジニア10人で、ビジネスの為のシステムを構築するのか


どちらが良いのだろうか


ただし、全てをエンジニアが構築する必要は無く
ユーザ、エンジニア、エンジニアの卵達


全ての登場人物が素晴しく仕事をする為が
アジャイル


適材適所


トランザクションスクリプトを使用したり
ドメインモデルに設計したり


状況を把握し、最大化する事は大事


でも、そういった最大化する事が出来ない環境
最大化する必要の無い環境


それは、とてもツマラナイ。


やるならば、自身の強みを生かし
物事を最大化し


面白く戦うべきだろうネ。

maven2 で plugin を作ってみる

こんなpomで

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cc.aileron</groupId>
	<artifactId>samplemojo</artifactId>
	<packaging>maven-plugin</packaging>
	<version>0.0.1</version>
	<name>samplemojo Maven Mojo</name>
	<url>http://maven.apache.org</url>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<encoding>UTF-8</encoding>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.3</version>
			</plugin>
		</plugins>
	</build>

    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

こんな java

public class MyMojo extends AbstractMojo
{
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException
    {
        final Console console = System.console();
        while (true)
        {
            final String line = console.readLine("q:");
            System.out.println("a:" + line);

            if (line.equals("quit"))
            {
                break;
            }
        }
    }
}

mvn install して
mvn cc.aileron:samplemojo:sample

すると、ちゃんと対話型インタフェースで作れるよ!!!

lv5の30代もいれば、lv100000の20代もいる

http://el.jibun.atmarkit.co.jp/kouhai/2009/12/post-a5b3.html

SEなんて、うさんくさい職業については判らないけれども
プログラムを作るって上では、ピンキリって、とんでも無い。

かたやRTOS、かたやスクリプトで、webって言うシナリオを書いてる
シナリオライタ

技術者としての実力の違いは、異常なほど
開きをみせていると思うけれどもナ