基本情報技術者過去問題 平成27年秋期 午後問11

問11 

次のJavaプログラムの説明及びプログラムを読んで,設問に答えよ。

〔プログラムの説明〕
 固定バイト長のブロック(以下,ブロックという)を単位としてデータを保管している装置(以下,ブロックデバイスという)に対し,ブロックのデータ(以下,ブロックデータという)へのアクセスを管理するプログラムである。図1に,プログラム構成の概要を示す。図中の四角はプログラムの構成要素を,矢印はブロックデータの流れを示す。ここで,このプログラムでは,ブロックデバイスからの読込みだけを考える。
 ブロックデバイス内の各ブロックは,インデックス値で指定する。最初のブロックのインデックス値は,0である。
 ブロックアクセッサは,アプリケーションから要求されたブロックデータを ブロックデバイスから取得して,アプリケーションに渡す役割をする。ブロックアクセッサはキャッシュを使用し,ブロックデバイスから取得したブロックデータをキャッシュする。アプリケーションから要求されたブロックデータがキャッシュされていれば,キャッシュから取得したブロックデータをアプリケーションに渡す。
 キャッシュは,FIFO(First In,First Out)とLRU(Least Recently Used)の2種類の管理方針に基づく実装が用意されていて,アプリケーションはどの実装を使用するかを指定する。
  • クラス BlockAccessor は,ブロックアクセッサを表す。
    1. コンストラクタは,ブロックデバイスをオープンし,引数で指定されたキャッシュの管理方針に基づくキャッシュを生成する。
    2. メソッド readBlock は,引数で指定されたインデックス値のブロックデータを返す。ブロックデータがキャッシュにあれば,それを返す。なければ,ブロックデバイスから取得し,キャッシュした後,そのブロックデータを返す。
  • クラス BlockDevice は,読取り専用のブロックデバイスを表す。実装は,バイト配列の配列であるフィールド blocks を使用し,ブロックデバイスを 仮想的に表す。ただし,ブロックデータの値は全て0である。
    1. 静的メソッド open は,ブロックデバイスのインスタンスを返す。
    2. メソッド getBlockSize は,ブロックのサイズをバイト数で返す。
    3. メソッド readBlock は,引数で指定されたインデックス値のブロックデータを引数で指定されたバッファに読み込む。
  • 抽象クラスCache は,ブロックアクセッサからキャッシュ機能を使用するためのクラスを表す。
    1. キャッシュの管理方針(FIFO及びLRU)を表す入れ子列挙 Cache.Policy を定義する。
    2. 静的メソッド createCache は,引数で指定されたキャッシュの管理方針と一致する実装クラスのインスタンスを生成して返す。
    3. 抽象メソッド getCachedBlockData は,引数で指定されたインデックス値のブロックデータがキャッシュされていれば,それを返す。キャッシュされていなければ,null を返す。
    4. 抽象メソッド cacheBlockData は,引数で指定されたインデックス値及びその値に対応するブロックデータをキャッシュする。キャッシュできるブロックデータ数が上限に達している場合は,管理方針に従ってキャツシュされているブロックデータを削除してから,指定されたブロックデータをキャッシュする。
  • 抽象クラス ListBasedCache は,リスト構造を使用して抽象クラス Cache の一部を実装する。キャッシュできるブロックデータ数の上限値は,フイールド CACHE_SIZE で表す。
    1. メソッド getCachedBlockData 及び cacheBlockData は,抽象クラス Cache で定義されている同名のメソッドを実装する。
    2. 抽象メソッド hit は,要求されたブロックデータがキャッシュ中に見つかったときに呼び出される。引数は,見つかったブロックデータとそのインデックス値の対(以下,キャッシュエントリという)である。
  • 入れ子クラス ListBasedCache.Entry は,キャッシュに格納するキャッシュエントリを表す。
    1. コンストラクタは,引数で指定されたインデックス値及びブロックデータをもつキャッシュエントリを生成する。
    2. メソッド getIndex 及び getBlockData は,それぞれインデックス値及びブロックデータを返す。
  • 入れ子クラス ListBasedCache.Fifo は,キャッシュエントリの管理をFIFOで行う。
    1. メソッド hit は,無操作である。
  • 入れ子クラス ListBasedCache.Lru は,キャッシュエントリの管理をLRUで行う。
    1. メソッド hit は,指定されたキャッシュエントリをリストの先頭に移動する。
 なお,上記コンストラクタやメソッドを呼び出すときの引数に誤りはないものとする。

設問1

プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
  • blocks
  • blocks[ ]
  • blocks[0]
  • blocks[ ][ ]
  • blocks[0][ ]
  • blocks[ ][0]
b に関する解答群
  • Cache
  • Cache<? extends Policy>
  • enum
  • Policy
  • Policy<? extends Cache>
  • void
c に関する解答群
  • !=
  • <
  • <=
  • ==
  • >
  • >=
d に関する解答群
  • !entries.isEmpty()
  • entries.isEmpty()
  • entries.size()!=CACHE_SIZE
  • entries.size()!=index
  • entries.size()==CACHE_SIZE
  • entries.size()==index
e に関する解答群
  • CACHE_SIZE
  • CACHE_SIZE - 1
  • CACHE_SIZE + 1
  • index
  • index - 1
  • index + 1
f に関する解答群
  • ArrayList
  • ArrayList<Cache>
  • Cache
  • List
  • List<Cache>
  • ListBasedCache
g に関する解答群
  • 0
  • CACHE_SIZE - 1
  • entry
  • entry.getIndex()
  • entry.getIndex() - 1
  • entry.getIndex() + 1

解答選択欄

  • a:
  • b:
  • c:
  • d:
  • e:
  • f:
  • g:

解答

  • a=
  • b=
  • c=
  • d=
  • e=
  • f=
  • g=

解説

この設問の解説はまだありません。
【27年秋期 午後問題】
 問1 問2 問3 問4 問5 問6 問7 問8 問9 問10 問11 問12 問13
© 2010-2019 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop