2016年12月12日月曜日

[平成27年度秋] 午後 問11 解説

[問題文・解答]


平成27年度10月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
出題分野はソフトウェア開発(Java)で、問題の題材はブロックのデータのキャッシュ管理です。
ブロックデバイスと呼ばれるデータ保存装置からデータを読み取り、キャッシュに保存・管理するJavaプログラムについて問われます。Javaプログラミングの知識が無いと厳しい問題です。

[設問]


a) プログラム2は、クラスBlockDevice(読取り専用のブロックデバイス)を実装しています。P.54(2)の②よりメソッドgetBlockSizeは、ブロックのサイズを返すメソッドです。ブロックデバイスはバイト型の二次元配列blocksで表現されており、第一次元がデバイス上のブロックのインデックス・個数、第二次元がブロック1個のサイズを表します。
従って、このメソッドが返すのはblocksの第二次元のサイズなので「blocks[0].length」となり、「ウ」が正解です。

b) プログラム3は抽象クラスCacheを実装しています。P.54(3)の②よりメソッドcreateCacheは、引数で指定されたキャッシュの管理方針と一致する実装クラスのインスタンス、つまりCache自身又はそのサブクラスのインスタンスを生成して返します。従って、「ア」が正解となります。
「イ」や「オ」の<? extends P>の表現は、P型とそのサブクラス全てを表します。従って、「オ」の<? extends Cache>の部分はCache自身とそのサブクラスを表すため誤りではないですが前にPolicyがついているため不適切です。

c)プログラム4は抽象クラスListBasedCacheとその入れ子クラス(Entry、Fifo、Lru)を実装しています。P.54(3)の③よりメソッドgetCachedBlockDataは引数で指定されたインデックス値のブロックデータがキャッシュされていればそれを返し、キャッシュされていなければnullを返します。メソッド内の処理の流れは以下の通りです。
①キャッシュ内のエントリごとに②〜③を実行
②エントリのインデックス値が引数で指定されたインデックスと一致するか判定
③一致する場合は、メソッドhitを実行後、現在のエントリに格納されたブロックデータを返して終了。一致しなければ次のエントリへ進む。
④全てのエントリを確認し、一致するものが無ければnullを返して終了。
cの部分は②の一致判定の部分なので「エ」の「==」が適切です。

d) P.54(3)の④よりメソッドcacheBlockDataは、引数で指定されたインデックス値及びその値に対応するブロックデータをキャッシュします。キャッシュが一杯の時は、管理方針に従ってキャッシュされているブロックデータを1つ削除します。メソッド内の処理の流れは以下の通りです。
①キャッシュが一杯かどうかを判定
②一杯ならば最後尾のキャッシュエントリを削除する
③キャッシュの先頭に引数で指定されたブロックデータを格納する
dの部分は①の判定部分であり、現在のキャッシュentriesのサイズとキャッシュサイズの上限CACHE_SIZEが等しいかどうかを判定します。従って、「オ」が正解です。
isEmpty()はリストが空かどうかを判定するため不適切です。

e) eの部分は上記cacheBlockDataの処理②にあたります。eにはキャッシュの最後尾のインデックスつまりCACHE_SIZE-1が当てはまるため「イ」が正解です。

f) FifoやLruはListBasedCacheの入れ子クラスであり、このクラスを継承するため「カ」が正解です。

g) FifoやLruでは要求されたブロックデータがキャッシュ中に見つかった際に、呼び出されるメソッドhitが実装されます。dの解説で示したようにcacheBlockData内ではキャッシュが一杯の時にキャッシュの最後尾のエントリから削除していきます。
Fifoの場合は、キャッシュに最初に格納したデータから削除していくためキャッシュ中のデータを読み出す場合でも変更は不要です。
一方、Lru の場合は最後に使用されたのが一番古いエントリから削除していくため、エントリが使用される度に当該エントリをキャッシュの一番前に移動してやる必要があります。この処理を行うのがhitであり、指定されたエントリを一旦削除して先頭に格納し直しています。従って、gにはentryが入るため「ウ」が正解です。

[答] a) ウ b) ア c) エ d) オ e) イ f) カ g) ウ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿