2007/04/13
Javaの良い設問を募集
相手のプログラミング能力を試すためのJavaの良い問題を探しています。
次のモノは却下です。
- 文法を問うもの
- 特定のクラスライブラリの知識を問うもの
- 現実に目にすることが無さそうなコードに関するもの (言語仕様の重箱の隅をつつくような設問)
- ひらめき問題
以前、C言語版の問題を作りました。今見返すと、言語の癖や落とし穴を問うような設問になっています。もっとも、上の3番目の基準には外れていません。現実のCプログラミングで起きそうなコードの設問にしています。言語オタクをふるいにかけるのが目的ではなく、普段からコードを書き慣れているかを見極めるのが目的だからです。上の4つの基準の狙いはこの目的のためです。だから特に難しい設問を作りたいわけではありません。
今のところ思いついたのは一問だけです。
- [Q1]次のコードの問題点を述べよ。その理由も述べよ。
ArrayList<String> list = new ArrayList<String>();
あと、IoC(制御の反転)的な感覚を問う問題も出したいところですが、問題を書きすぎると狙いが見え見えになるので、考え中です。
良い問題が無いかと探して、http://suned.sun.co.jp/JPN/certification/progsq.htmlを見ました。これを問題として出してもいいですが、アリエルでの模範解答は「くだらなすぎて答える気にならない」です。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/seek-for-exam/tbping
Re:Javaの良い設問を募集
回答例
String[] array = new String[] {"abc", "xyz", "", "123"};
String result = "";
for (int i = 0; i < array.length; i++) {
if (i > 0) {
result += ",";
}
result += s;
}
問2. 問1の機能を持ったメソッドを定義してください
回答例
class StringUtils {
public String join(String[] array) {
String result = "";
for (int i = 0; i < array.length; i++) {
if (i > 0) {
result += ",";
}
result += s;
}
return result;
}
}
Re:Javaの良い設問を募集
[問題]
以下はJ2EEアプリケーションを稼働中に発生した例外スタックトレースです。
java.lang.OutOfMemoryError: PermGen space
この例外の意味、考えられる原因、解決方法を述べてください。
[回答例]
意味:Permanent Generation 領域でメモリリークが発生している。
原因:ロードされたリソース(おそらくは HotSpot によって動的にコンパイルされたJSPファイル)に対し Permanent Generation の領域が少なくなった。
解決:JVMオプションに -XX:PermSize、-XX:MaxPermSize を指定して、十分な Permanent Generation 領域を確保してアプリケーションを再起動する。
・・間違ってたりして。
Re:Javaの良い設問を募集
> java.lang.OutOfMemoryError: PermGen space
> この例外の意味、考えられる原因、解決方法を述べてください。
難しい。
ぼくが問題を出される立場なら、「考えても分からないのでWebで調べます」と答えそうです。「孤島にいて調べる手段が無ければどうか」に対しては、「javaコマンドのコマンドラインオプションからメモリに関係ありそうなオプションを探す」とでも答えるかな。
更に問い詰められれば、「ソースコードを見て、寿命の長そうなオブジェクトを大量に抱え込んでいそうか箇所を探す」と答えますが、たぶんこの回答は古くて、「適切なメモリ監視ツールを使って寿命の長いオブジェクトを探す」の方が良いかもしれません。
> 意味:Permanent Generation 領域でメモリリークが発生している。
s/メモリリーク/メモリ不足/
でしょうね。
Re:Javaの良い設問を募集
問題の作成コストもかかりません。
http://java.sun.com/developer/Quizzes/
例えばこれなどが良いでしょうか。
http://java.sun.com/developer/Quizzes/javase6_holiday/holidayquiz06.html
> s/メモリリーク/メモリ不足/
> でしょうね。
面接が「問題を考える」という課題だったら、落ちていたところでした。
Re:Javaの良い設問を募集
static int fubar = 42;
Foo getFoo() {
return null;
}
public static void main(String args[]) {
Foo foo = new Foo();
Are_you_maji_desuka:
System.out.println(foo.getFoo().fubar);
}
}
//A:42
//B:-42
//C:0
//D:NullPointer例外
//E:Compile不可