基本情報技術者 ― テクノロジ系 問題一覧・解説
全53問の問題文・選択肢・正解・解説を掲載しています。 フラッシュカード形式で実際に解いてみたい方は「練習する」ボタンをご利用ください。
🎴 フラッシュカードで練習する(53問)スタックの説明として適切なものはどれか。
📝 解説
スタック(Stack)はLIFO(Last In First Out:後入れ先出し)のデータ構造で、最後に追加(プッシュ)したデータが最初に取り出せる(ポップ)構造です。食器洗い後の皿の積み重ねを想像してください。洗った皿を順番に重ねていくと、一番上(最後に置いた)皿から順に取り出します。スタックの操作はPush(積む)とPop(取る)の2種類だけで、とてもシンプルです。実際の用途としては、プログラムの関数呼び出し管理(呼び出した逆順に戻るためスタックで管理)・ブラウザの「戻る」ボタン(前ページを順番に積んで逆順に戻る)・テキストエディタのundo機能(操作を積んで逆順にやり直す)・数式の逆ポーランド記法の計算に使われています。誤答の「最初に入れたデータが最初に取り出せる」はキュー(FIFO)の説明、「ランダムに取り出せる」は配列・ハッシュ、「優先度順に取り出せる」は優先度付きキュー(ヒープ)の説明です。「スタック=LIFO=後入れ先出し=Push/Pop」という組み合わせをセットで覚えましょう!
キューの説明として適切なものはどれか。
📝 解説
キュー(Queue)はFIFO(First In First Out:先入れ先出し)のデータ構造で、最初に追加(エンキュー)したデータが最初に取り出せる(デキュー)構造です。駅のホームや窓口で並んでいる行列そのものです。先に並んだ人から順番にサービスを受けるFIFOの動作は日常生活で最も自然な順番です。データ追加を「エンキュー(Enqueue)」、取り出しを「デキュー(Dequeue)」と呼びます。スタックとの混同に注意!実際の用途として、OSのプロセス待ち行列(CPU待ちのプロセスを到着順に並べる)・プリンタのジョブ管理(送った順に印刷する)・ネットワーク機器のパケットバッファ(受信順にパケットを処理する)・BFS(幅優先探索)のノード管理などで広く使われています。誤答の「最後に入れたデータが最初に取り出せる」はスタック(LIFO)の説明、「ランダムに取り出せる」は配列・ハッシュ、「優先度順に取り出せる」は優先度付きキューです。「キュー=FIFO=先入れ先出し=Enqueue/Dequeue」とセットで覚えましょう!
2分探索の前提条件として適切なものはどれか。
📝 解説
2分探索(バイナリサーチ)はデータが整列(昇順または降順)されていることを前提に、探索範囲の中央値と目標値を比較して探索範囲を毎回半分に絞り込む高速探索アルゴリズムです。辞書で単語を探すとき、真ん中のページを開いて「目標語が前半か後半か」で残り半分を除外し、また中央を開いて…という作業がまさに2分探索です。1億件のデータでも最大27回(log2(100,000,000)≒27)の比較で見つかります。計算量はO(log n)と非常に効率的です。ただし必ず「整列済みデータ」が前提であり、未整列のデータには使えません。誤答の「データの個数が2のべき乗」という制約はなく(任意の個数で動作)、「リンクリスト構造」は中央値へのアクセスがO(n)かかるため2分探索には不向き(配列・ランダムアクセス可能なデータ構造が適切)、「全てのデータが正の整数」という制約もありません。「2分探索の前提=整列済みデータ・計算量O(log n)」を確実に覚えましょう!
バブルソートの特徴として適切なものはどれか。
📝 解説
バブルソートは隣り合う2要素を比較して順序が逆なら入れ替える操作を先頭から末尾まで繰り返すシンプルな整列アルゴリズムです。体育の身長順整列で「隣の人と比べて背が高ければ前に出て交換する」を端から端まで繰り返すイメージです。1回のパスで最大値が末尾に「泡(バブル)のように浮き上がる」ことからバブルソートと名付けられました。計算量は最悪・平均ともにO(n2)で、データ数が多いと急激に遅くなるため大規模データには不向きですが、アルゴリズムの仕組みが直感的で実装が容易なため、整列アルゴリズムの入門として世界中で教えられています。最良ケース(既に整列済み)では交換が発生しないためO(n)まで改善できます。誤答の「常にO(n log n)の計算量」はクイックソート・マージソートの平均計算量、「分割統治法を使った整列」はクイックソートやマージソートの説明、「常に最も効率的」という整列アルゴリズムは存在しません(それぞれ得意不得意がある)。「バブルソート=隣接要素の比較・交換・計算量O(n2)」と覚えましょう!
再帰アルゴリズムの説明として適切なものはどれか。
📝 解説
再帰アルゴリズム(リカーシブアルゴリズム)は関数が処理の中で自分自身を呼び出すことで問題を解く手法です。鏡の前に鏡を置くと「鏡の中に鏡が映り、その中にまた鏡が…」と無限に続く入れ子構造がありますね。再帰もそのような自己参照構造を持ちます。重要なのは必ず「終了条件(基底ケース)」を設けることで、これがないと無限に自分自身を呼び続けてスタックオーバーフローが発生します。例えば階乗計算では「factorial(n) = n x factorial(n-1)」と自分を呼び、「factorial(0) = 1」が終了条件です。再帰が特に威力を発揮するのは「木構造の全探索」「ハノイの塔」「フィボナッチ数列」「クイックソート・マージソート」など、問題を同じ形の小さな部分問題に自然に分解できる場合です。ただし関数呼び出しのたびにスタックにフレームが積まれるため、深い再帰ではスタック使用量が大きくなる点に注意が必要です。誤答の「同じ処理を一定回数繰り返す」はfor/whileループ、「データを再利用する」「複数の関数が順番に呼ばれる」は再帰とは異なります。「再帰=自分自身を呼ぶ・終了条件が必須」と覚えましょう!
リスト(連結リスト)の特徴として適切なものはどれか。
📝 解説
連結リスト(Linked List)は各要素(ノード)がデータ本体と「次のノードへのポインタ(参照)」を持つデータ構造で、要素を物理的に隣接したメモリに格納する必要がなく、ポインタでつながれた鎖のような構造です。鉄道の車両に例えると、各車両(ノード)が乗客(データ)と「次の車両との連結器(ポインタ)」を持ち、間に車両を追加する場合は連結器を付け替えるだけでOKです。この「途中への要素追加・削除がO(1)で効率的」という点が配列との最大の違いです。一方、配列はインデックスで任意の位置に直接アクセスできる(ランダムアクセスO(1))のが強みですが、途中への挿入・削除にはO(n)かかります。連結リストは特定位置への順次アクセスがO(n)かかる点がデメリットです。誤答の「要素へのランダムアクセスが高速」は配列の特徴、「メモリを連続した領域に確保する」も配列の特徴、「要素数を変更できない」は固定長配列の制約で連結リストは動的にサイズ変更できます。「連結リスト=挿入・削除O(1)・ランダムアクセスO(n)・ポインタで連結」と覚えましょう!
2進数の「0.1」を10進数に変換した値はどれか。
📝 解説
2進数の小数を10進数に変換するには「各桁に2の負の累乗の重みを掛けて合計する」方法を使います。電気の電圧スケールで例えると、小数第1位は1/2V・小数第2位は1/4V・小数第3位は1/8Vという感じで、右に行くほど半分ずつ小さくなります。「0.1」(2進数)の計算は「0×2の0乗 + 1×2のマイナス1乗」です。小数点の左の0は「0×1=0」、小数点の右の1は「1×(1/2)=0.5」となります。よって合計は0+0.5=0.5が正解です。2進数の小数変換は整数部と逆の方向に進む点が混乱を招きがちですが、「小数第1位は0.5、小数第2位は0.25、小数第3位は0.125」と覚えておくと素早く計算できます。誤答の「0.1」は10進数そのままで変換していない、「0.25」は小数第2位の重みと誤認したケース、「0.75」は2進数の「0.11」(0.5+0.25)に対応する値です。「2進数小数第1位=0.5、第2位=0.25、第3位=0.125」という位の重みを確実に覚えましょう!
補数表現で負の数を表す理由として適切なものはどれか。
📝 解説
コンピュータが負の数を2の補数表現で表す最大の理由は「加算回路だけで減算を実現できる」ことです。電卓の設計で考えてみましょう。引き算専用の回路を別途設ける代わりに、「A-B=A+(Bの2の補数)」という変換を使えば、加算回路1種類でプラスもマイナスの計算も処理できます。これによりCPU内のALU(算術論理演算装置)の設計が大幅に簡略化されます。2の補数の求め方は「全ビットを反転(1の補数)してから1を加える」です。例えば8ビットで「5(00000101)」の2の補数は「11111010+1=11111011(10進数で-5)」となり、5+(-5)の計算が桁上がりを無視して正しく0になります。また2の補数表現は「0の表現が一通りだけ(プラス0とマイナス0が混在しない)」という利点もあります。誤答の「より大きな数を表せるから」は誤りで、符号ありと符号なしで表現できる範囲が変わるだけで合計の種類数は同じです。「2の補数表現=加算回路だけで減算が実現できる・CPU設計の簡略化」を覚えましょう!
浮動小数点数の特徴として適切なものはどれか。
📝 解説
浮動小数点数(IEEE 754規格)は「符号部・指数部・仮数部」の3つの部分で数値を表現する形式で、非常に大きな数から非常に小さな数まで広い範囲の実数を表現できます。科学的記数法(例:6.022×10の23乗)と同じ発想で、仮数部が有効数字・指数部が桁の大きさを表します。電力系統で例えると、家庭の電圧(100V)から超高圧送電(500,000V)まで桁違いに異なる数値を同一の方式で扱うような柔軟性があります。ただし仮数部のビット数が有限(単精度32bit・倍精度64bit)なため、表現できない数値を丸める「丸め誤差」が発生することがあります。例えばPythonで「0.1+0.2」を計算すると「0.30000000000000004」のようにわずかな誤差が生じます。金融計算など精度が重要な場合は浮動小数点数を避けて固定小数点数や10進数型を使います。誤答の「整数のみを表現できる」は整数型(int)の説明、「固定した小数点位置で数値を表現する」は固定小数点数の説明です。「浮動小数点数=広い数値範囲・丸め誤差が生じる場合がある」を覚えましょう!
CPUのパイプライン処理の説明として適切なものはどれか。
📝 解説
CPUのパイプライン処理は1つの命令の実行を「フェッチ→デコード→実行→メモリアクセス→書き戻し」などの複数のステージに分け、各ステージで異なる命令を同時並行して処理することでスループット(単位時間当たりの処理命令数)を向上させる技術です。工場の組み立てラインに例えると、1台の車の全工程を完成させてから次の車に取り掛かるのではなく、第1工程・第2工程・第3工程の各作業台で同時に別々の車を組み立てることで全体の生産効率が格段に上がります。理想的なパイプラインではステージ数分のスループット向上が期待できます。ただし条件分岐命令(if文)で次に実行すべき命令が確定できない「パイプラインハザード(分岐ハザード)」が発生するとパイプラインが止まり(ストール)効率が下がります。これを解消するために「分岐予測」という技術が使われています。誤答の「複数のCPUで並列処理」はマルチプロセッサ・マルチコアの説明、「メモリアクセスを高速化する技術」はキャッシュメモリです。「パイプライン=命令実行を複数ステージに分けて同時並行処理・スループット向上」と覚えましょう!
割込み処理の説明として適切なものはどれか。
📝 解説
割込み(インタラプト)処理は実行中のプログラムを一時中断し、割込み要因に対応した処理(割込みハンドラ)を実行し、完了後に元の処理を再開する仕組みです。緊急放送に例えると、テレビで番組を見ているとき(通常処理実行中)に緊急速報音とともに特別放送が割り込んで(割込み発生)放送され、終了後に元の番組に戻る(処理再開)流れと全く同じです。動作フローは「①割込み要因の検知→②現在のCPU状態(レジスタ・PCなど)をスタックに退避→③割込みベクタテーブルを参照して割込みハンドラのアドレスを取得→④割込みハンドラ実行→⑤退避した状態を復元して元の処理を再開」です。割込みにはハードウェア割込み(I/O完了・タイマー・キーボード入力など)とソフトウェア割込み(システムコール・例外処理など)の2種類があります。この仕組みにより非同期なI/O処理をポーリング(常にチェック)なしに効率的に扱えます。誤答の「プログラムを強制終了する処理」はkill/abort、「メモリを解放する処理」はメモリ管理の話です。「割込み=実行中プログラムを一時中断→ハンドラ実行→元の処理再開」と覚えましょう!
仮想記憶のページング方式でページフォルトが発生する原因として適切なものはどれか。
📝 解説
仮想記憶のページング方式では、プロセスが使用する論理アドレス空間をページという固定サイズのブロックに分割し、実際に必要なページだけを主記憶(RAM)に読み込んで使います。ページフォルトとは「プロセスがアクセスしようとしたページが現在主記憶に存在しない」ときに発生する割込みです。図書館に例えると、本棚(主記憶)に置けるのは一部の本だけで、残りの本は書庫(補助記憶)にあります。読みたい本が書庫にある場合(ページフォルト)、司書(OS)が書庫から持ってくる(ページイン)操作が発生します。この主記憶への読み込みを「ページイン」、主記憶から補助記憶への追い出しを「ページアウト」と呼びます。ページフォルトが頻発すると処理性能が極端に低下する「スラッシング」が起きます。誤答の「ページのサイズが大きすぎるとき」はページサイズの問題でなく存在の有無が問題です。「主記憶が不足しているとき」はページフォルトが起きやすい状況ですが、ページフォルトの直接原因は「アクセスしたページが主記憶に存在しないこと」です。「ページフォルト=アクセスしたページが主記憶に不在のとき発生」と覚えましょう!
プロセスとスレッドの関係として適切なものはどれか。
📝 解説
OSにおいてプロセスはプログラムの実行単位で、独立したメモリ空間(コード領域・データ領域・スタック領域・ヒープ領域)を持ちます。スレッドはプロセス内の実行単位で、同じプロセス内の複数スレッドはメモリ空間を共有します。会社と従業員に例えると、プロセスは独立した会社(独自の建物・資産を持つ)、スレッドはその会社の社員(同じ会社の設備・資料を共有して働く)のイメージです。1つのプロセスは必ず1つ以上のスレッド(メインスレッド)を持ち、複数スレッドを作成してマルチスレッド処理が可能です。プロセス間通信(IPC)は独立したメモリ空間を越えて行うため複雑(ソケット・パイプ・共有メモリ等)ですが、スレッド間は同一メモリを共有するので通信が容易で切り替えコスト(コンテキストスイッチ)も低いです。ただし複数スレッドが同じデータを操作するとデータ競合が発生するため排他制御(mutex等)が必要です。誤答の「プロセスはスレッドの一部」は逆でスレッドがプロセスの一部、「スレッドは独立したメモリ空間を持つ」はプロセスの説明です。「プロセス⊃スレッド・メモリ空間の共有有無が最大の違い」と覚えましょう!
デッドロックの説明として適切なものはどれか。
📝 解説
デッドロックは複数のプロセスが互いに相手が保持しているリソース(ファイルロック・メモリ・デバイス等)の解放を待ち合ってしまい、どのプロセスも処理を進められなくなる状態です。交差点の四方から1台ずつ車が入ってきて互いに相手の進路を塞ぎ合って誰も動けなくなる状況がまさにデッドロックです。デッドロックが発生する4つの必要条件(コフマン条件)として「①相互排除(1度に1プロセスしかリソースを使えない)②保持と待機(リソースを保持しながら他を待つ)③非横取り(保持中のリソースを強制的に取り上げられない)④循環待機(プロセスが循環して待ち合う)」があり、この4条件を1つでも破ることでデッドロックを防止できます。対策としては、リソースの取得順序を全プロセスで統一する・タイムアウトで強制解放する・銀行家アルゴリズムで安全状態を維持するなどの方法があります。誤答の「プロセスが無限ループに陥る状態」はライブロック・無限ループ、「メモリ不足でシステム停止」はメモリ不足エラーでいずれもデッドロックとは異なります。「デッドロック=互いのリソースを待ち合って全員が停止する状態」と覚えましょう!
ディスパッチャの役割として適切なものはどれか。
📝 解説
ディスパッチャはOSのプロセス管理機能のうち、スケジューラが「次に実行するプロセス」を選択した後に、そのプロセスをCPUに実際に割り当て(ディスパッチ)する役割を担います。工場のシフト管理者に例えると、工場長(スケジューラ)が「次はA班を機械に配置する」と決定し、現場の班長(ディスパッチャ)が実際にA班の作業員を機械の前に配置する作業を行います。ディスパッチャが具体的に行う作業は「①コンテキストスイッチ(現在実行中プロセスのCPUレジスタ・PCなどの状態をPCBに保存)②次プロセスの状態をPCBからCPUレジスタ・PCへ復元③ユーザモードへの切り替え④次プロセスのプログラムへジャンプ」です。スケジューリングアルゴリズム(FCFS・SJF・ラウンドロビン・優先度スケジューリング等)はスケジューラが担当し、ディスパッチャはその決定を実行するエグゼキューターです。誤答の「ディスクへの書き込みを管理する」はディスクI/Oスケジューラ、「メモリを管理する」はメモリ管理モジュール、「ネットワーク通信を管理する」はネットワークスタックの役割です。「ディスパッチャ=スケジューラが選んだプロセスをCPUに割り当てる・コンテキストスイッチを行う」と覚えましょう!
関係データベースの正規化の目的として適切なものはどれか。
📝 解説
データベースの正規化はテーブル設計において「データの冗長性(同じ情報の重複保持)を排除し、データの更新・挿入・削除を行う際に発生する矛盾や異常(アノマリ)を防ぐ」ことを目的とした設計技法です。図書館の蔵書管理に例えると、「本ID・本のタイトル・著者名・著者の住所」をすべて1テーブルで管理すると、同じ著者の本が100冊あるとき著者の住所が変わると100件すべてを更新しなければならない(更新異常)。著者テーブルと本テーブルに分離すれば著者テーブルの1件を更新するだけで済みます。正規化には第1正規形(1NF)・第2正規形(2NF)・第3正規形(3NF)・ボイスコッド正規形(BCNF)・第4・第5正規形がありますが、実務では通常3NFまでが行われます。ただし正規化を進めすぎると結合(JOIN)が多くなり検索性能が低下するため、性能要件によって意図的に「非正規化(冗長性の許容)」を行う場合もあります。誤答の「処理速度を上げること」「セキュリティを強化すること」「容量を増やすこと」はいずれも正規化の主目的ではありません。「正規化=冗長性排除・更新異常防止」が目的と覚えましょう!
第1正規形の条件として適切なものはどれか。
📝 解説
第1正規形(1NF:First Normal Form)はリレーショナルデータベースの正規化の第一段階で、「テーブルのすべてのセルが原子値(それ以上分割できない単一の値)を持ち、繰り返しグループ(複数値・配列・リスト)が存在しない」状態を指します。住所録で例えると、「電話番号」列に「090-xxxx-xxxx, 080-yyyy-yyyy」のように複数の電話番号をカンマ区切りで1つのセルに入れている場合、これは繰り返しグループがあり1NFを満たしません。各電話番号を別々の行に分けて1セル1値にする必要があります。1NFを満たすことで、SQLでの検索・更新・集計が正しく機能するようになります。誤答の「すべての非キー属性が主キーに完全関数従属していること」は第2正規形(2NF)の条件、「推移的関数従属がないこと」は第3正規形(3NF)の条件、「多値従属がないこと」は第4正規形(4NF)の条件です。正規化は1NF→2NF→3NFの順に段階的に進めます。「1NF=繰り返しグループなし・全セルが原子値」が正規化の出発点と覚えましょう!
SQLのSELECT文でWHERE句の役割として適切なものはどれか。
📝 解説
SQLのSELECT文の構文は「SELECT 列名 FROM テーブル名 WHERE 条件 GROUP BY 列名 HAVING グループ条件 ORDER BY 列名」の順です。WHERE句は「FROM句で指定したテーブルから取得するレコード(行)の絞り込み条件を指定する」役割を持ちます。スーパーの商品棚に例えると、テーブル全体が商品棚(全在庫)で、WHERE句が「価格が1000円以下の商品だけを見せて」というフィルター(ふるい)の役割をします。WHERE句では等号(=)・比較演算子(>・<・>=・<=・<>)・LIKE(パターンマッチ)・IN(複数値)・BETWEEN(範囲)・IS NULL(NULL判定)・AND/ORなどの条件を組み合わせて絞り込みができます。GROUP BY後のグループに対する条件指定はHAVING句を使います(WHERE句はグループ化前のレコードに対する条件)。誤答の「表示する列を指定する」はSELECT句の役割、「結果を並べ替える」はORDER BY句の役割、「グループ化する」はGROUP BY句の役割です。「WHERE=行の絞り込み条件・HAVING=グループの絞り込み条件」という対比も合わせて覚えましょう!
SQLのJOINの説明として適切なものはどれか。
📝 解説
SQLのJOIN(結合)は複数のテーブルを特定の列(結合キー)の値が一致する行を組み合わせて1つの結果セットとして取得する操作です。会社の従業員名簿と部署テーブルを照合する台帳作業に例えると、「従業員テーブル(社員番号・氏名・部署コード)」と「部署テーブル(部署コード・部署名・部署長)」を部署コードで突き合わせて「社員番号・氏名・部署名」を一覧にするような作業がJOINです。JOINの種類として、INNER JOIN(内部結合:両テーブルに一致する行のみ取得)・LEFT OUTER JOIN(左外部結合:左テーブルの全行+右テーブルの一致行)・RIGHT OUTER JOIN・FULL OUTER JOIN(全外部結合)があります。CROSS JOIN(デカルト積)は結合条件なしで全行の組み合わせを返します。JOINを使うことで正規化されたテーブルを適切に結合して必要な情報を取り出せます。誤答の「テーブルを削除する操作」はDROP TABLE、「インデックスを作成する操作」はCREATE INDEX、「データを並べ替える操作」はORDER BYです。「JOIN=複数テーブルを結合キーで結合して取得・INNER/OUTERの違いを区別」して覚えましょう!
インデックス(索引)をデータベースに設定する主な目的として適切なものはどれか。
📝 解説
データベースのインデックス(索引)はテーブルの特定列の値と行の位置情報を整理した補助的なデータ構造(主にB木・B+木)で、検索処理を大幅に高速化するために使われます。本の巻末索引(インデックス)がまさに同じ概念です。索引がない本で「データベース」という単語を探すには全ページを見る必要がありますが(テーブルフルスキャン)、索引があれば索引で「データ」→「だ行」→「データベース=p.253」とすぐ特定できます。インデックスを張ることでWHERE句による検索・JOIN条件の処理が大幅に高速になります。ただしインデックスにも記憶領域が必要で、INSERT/UPDATE/DELETE時にはインデックスも更新するため書き込み処理が遅くなるデメリットがあります。WHERE句でよく使う列・JOINキーとなる外部キー列・ORDER BYでよく使う列にインデックスを張るのが基本方針です。誤答の「データの整合性を保つ」は主キー制約・外部キー制約の役割、「データの重複を防ぐ」はUNIQUE制約、「テーブルの容量を減らす」はインデックスはむしろ容量を増やします。「インデックス=検索高速化・書き込みにはオーバーヘッド・B木構造が一般的」と覚えましょう!
OSI参照モデルの第3層(ネットワーク層)のプロトコルとして適切なものはどれか。
📝 解説
OSI参照モデルは通信を7層に分けて整理したモデルで、第3層はネットワーク層です。ネットワーク層の役割は「異なるネットワーク間でのパケット転送(ルーティング)」で、代表的なプロトコルがIP(Internet Protocol)です。郵便の住所体系に例えると、第2層(データリンク層)のMACアドレスが「マンション内の部屋番号(同じフロア内のアドレス)」なら、IPアドレスは「都道府県・市区町村・番地を含む住所(異なる場所へも届く完全な住所)」のイメージです。ルーター(第3層機器)はIPアドレスを見てパケットをどの経路で転送するかを決定(ルーティング)します。IPv4(32ビット・約43億アドレス)とIPv6(128ビット・事実上無限)の2バージョンが存在します。誤答の「TCP」は第4層(トランスポート層)のプロトコル、「HTTP」は第7層(アプリケーション層)のプロトコル、「Ethernet」は第2層(データリンク層)のプロトコルです。各層のプロトコルを「第2層:Ethernet・第3層:IP・第4層:TCP/UDP・第7層:HTTP/SMTP/DNS」とまとめて覚えましょう!
OSI参照モデルの第4層(トランスポート層)のプロトコルとして適切なものはどれか。
📝 解説
OSI参照モデル第4層(トランスポート層)はエンドツーエンド(送信元から宛先アプリケーションまで)の通信品質を管理する層です。TCP(Transmission Control Protocol)はコネクション型プロトコルで、通信開始前に3ウェイハンドシェイク(SYN→SYN-ACK→ACK)で接続を確立し、データ到達の確認(ACK)・再送制御・順序保証・フロー制御・輻輳制御を行う信頼性の高いプロトコルです。電話の通話に例えると、TCPは「もしもし→はい、聞こえます→確認しました(3ウェイハンドシェイク)」と接続を確認してから話し始め、聞き取れなかった言葉は繰り返す(再送)ようなイメージです。UDPはコネクションレスで確認なしに送りっぱなしになるため信頼性は低いですが高速です。ポート番号によってどのアプリケーションへのデータかを識別します(HTTP:80・HTTPS:443・SSH:22・DNS:53など)。誤答の「IP」は第3層(ネットワーク層)、「HTTP」は第7層(アプリケーション層)、「Ethernet」は第2層(データリンク層)のプロトコルです。「第4層=トランスポート層=TCP/UDP・ポート番号によるアプリケーション識別」と覚えましょう!
TCPとUDPの違いとして適切なものはどれか。
📝 解説
TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)はOSIモデル第4層(トランスポート層)の2大プロトコルで、用途によって使い分けます。書留郵便(TCP)と普通郵便(UDP)に例えると、書留は配達確認・再配達(再送)まで行う信頼性重視の方式、普通郵便は届いたかどうかの確認なしに素早く送る速度重視の方式です。TCPの特徴は「コネクション確立(3ウェイハンドシェイク)・データ到達確認(ACK)・再送制御・順序保証・フロー/輻輳制御」で信頼性が高い代わりにオーバーヘッドがあります。UDPは「コネクションレス・確認なし・低遅延・小さなヘッダ」が特長で信頼性より速度を優先します。使い分けの例:TCPはHTTP/HTTPS(Webブラウジング)・メール・ファイル転送など「データ欠損が許されない通信」、UDPはリアルタイム動画ストリーミング・オンラインゲーム・VoIP(IP電話)・DNS問い合わせなど「多少の欠損より低遅延が重要な通信」に使われます。誤答の「TCPは高速で信頼性が低く、UDPは低速で信頼性が高い」は完全に逆です。「TCP=信頼性重視・再送あり、UDP=速度重視・再送なし」と覚えましょう!
NATの説明として適切なものはどれか。
📝 解説
NAT(Network Address Translation:ネットワークアドレス変換)はルーターがLAN内のプライベートIPアドレスとインターネット用のグローバルIPアドレスを相互変換する技術です。マンションの住所に例えると、マンション全体の「住所(グローバルIPアドレス)」は1つですが、各部屋には「部屋番号(プライベートIPアドレス)」が割り当てられています。NATは外から来た郵便物を適切な部屋に振り分け(DNAT)、各部屋から出す郵便物には「マンションの住所」を代表として付けて(SNAT)外に送ります。特に複数のプライベートIPを1つのグローバルIPで共有する「NAPT(ネットワークアドレスポート変換)」はNATと組み合わせて使われ「IPマスカレード」とも呼ばれます。IPv4アドレスの枯渇問題への対応として広く普及しました。誤答の「ドメイン名をIPアドレスに変換する技術」はDNS(ドメインネームシステム)の役割、「MACアドレスをIPアドレスに変換する技術」はRARP(逆ARP)の機能、「IPv4をIPv6に変換する技術」はIPv6移行技術の説明です。「NAT=プライベートIPとグローバルIPの相互変換・IPアドレス節約に貢献」と覚えましょう!
スパニングツリープロトコル(STP)の目的として適切なものはどれか。
📝 解説
STP(Spanning Tree Protocol:スパニングツリープロトコル)はLAN内でスイッチを冗長接続(二重化)した際に必然的に生じるループを論理的に遮断し、フレームが永遠にループし続けるブロードキャストストームを防ぐプロトコルです。電気回路でショートサーキット(短絡)が発生すると過電流が流れて危険なように、スイッチがループ状に接続されるとブロードキャストフレームが無限に流れ続けてネットワークが麻痺します。STPはルートブリッジを選出し各スイッチポートを「転送」か「ブロッキング(遮断)」に設定することで論理的にループのないツリー構造を作り出します。障害時にはブロッキングポートが転送に切り替わり冗長性を活かした自動切り替えも行います。より高速な後継プロトコルとしてRSTP(Rapid STP:高速スパニングツリー)やMSTP(Multiple STP)があります。誤答の「ネットワークの速度を上げる」は帯域幅拡張・LAGなどの技術、「セキュリティを強化する」はファイアウォール・802.1Xなどの技術、「帯域幅を増やす」はリンクアグリゲーション(LACP)の目的です。「STP=スイッチのループ防止・ブロードキャストストーム対策」と覚えましょう!
VLAN(仮想LAN)の説明として適切なものはどれか。
📝 解説
VLAN(Virtual LAN:仮想LAN)はスイッチの設定で物理的な配線とは独立して論理的にネットワークを分割する技術です。大きなオフィスビルに例えると、物理的な間仕切りを設けずとも「1階と3階の営業部の社員は同じネットワーク(VLAN 10)、2階の経理部は別のネットワーク(VLAN 20)」というように、仮想的な壁で部門ごとにネットワークを分離できます。VLAN分離によって「ブロードキャストドメインの分割(ブロードキャストが他VLANに届かない)」「セキュリティ向上(VLAN間の通信はルーターを経由するため制御可能)」「フレキシブルな配線変更(物理ケーブルを変えずに設定変更でVLAN移動可)」というメリットがあります。VLAN間通信にはレイヤ3スイッチまたはルーターが必要です。タグVLAN(IEEE 802.1Q)はイーサネットフレームにVLAN IDタグを付加して複数VLANを1本の物理リンク(トランクポート)で運ぶ仕組みです。誤答の「物理的に離れた場所をつなぐ技術」はVPN・WAN技術、「無線LANを仮想化する技術」はSSIDによる無線LAN分離の話、「インターネットに仮想的に接続する技術」はVPNの説明です。「VLAN=物理配線に依存せず論理的にLANを分割・スイッチの設定で実現」と覚えましょう!
共通鍵暗号方式の問題点として適切なものはどれか。
📝 解説
共通鍵暗号方式(対称暗号方式)は暗号化と復号に同じ鍵(共通鍵)を使う暗号化方式です。最大の問題は「鍵の配送問題」で、安全な通信を始めるために最初に共通鍵を相手に渡さなければならないのに、その鍵を渡す経路が安全でなければ盗み見られてしまうというジレンマがあります。金庫の鍵の受け渡しに例えると、金庫(暗号化されたメッセージ)は鍵を持っている人しか開けられませんが、その鍵を安全に相手に届けるためには「別の安全な経路」が必要で、最初の鍵の受け渡しが最大の課題です。AES・DES・3DESなどが代表的な共通鍵暗号アルゴリズムで、処理速度が速いため大量データの暗号化に向いています。この鍵配送問題を解決するために考案されたのが公開鍵暗号方式(RSA・楕円曲線暗号等)で、実際のSSL/TLSでは「公開鍵暗号で共通鍵を安全に交換し、その後は高速な共通鍵暗号で通信する」ハイブリッド方式が使われています。誤答の「処理速度が遅い」は公開鍵暗号方式の特徴(共通鍵暗号は高速)、「暗号強度が低い」はAESなど現代の共通鍵暗号は十分強度があります。「共通鍵暗号の弱点=鍵配送問題・ハイブリッド方式で解決」と覚えましょう!
PKI(公開鍵基盤)の構成要素として認証局(CA)の役割として適切なものはどれか。
📝 解説
PKI(Public Key Infrastructure:公開鍵基盤)はデジタル証明書を活用してインターネット上で「この公開鍵は確かに○○のものだ」という信頼を確立するための仕組みです。認証局(CA:Certification Authority)はPKIの核心機能として「公開鍵の所有者が正当であることを証明するデジタル証明書を発行する」役割を担います。印鑑登録証明に例えると、市区町村役場(認証局)が「この印鑑は確かに○○さんのものです」という証明書(印鑑登録証明書)を発行するのと同じで、CAが「この公開鍵は確かに○○というサーバのものです」というデジタル証明書(X.509証明書)を発行・署名します。WebブラウザのHTTPS通信ではサーバ証明書によってサーバの正当性を確認しており、ブラウザの「鍵マーク」がその確認結果を示しています。証明書にはドメイン認証(DV)・企業認証(OV)・拡張認証(EV)の種類があります。誤答の「通信を暗号化する」はTLS/SSLプロトコルが行う処理で、CAの直接の役割は証明書の発行です。「パスワードの管理」「ファイアウォールの管理」もCAとは無関係です。「CA=公開鍵の正当性を証明するデジタル証明書の発行機関」と覚えましょう!
ポートスキャンの説明として適切なものはどれか。
📝 解説
ポートスキャンはネットワーク上の特定のホストに対して様々なポート番号(0〜65535)への接続を順番に試みることで、そのホストでどのポートが開放されており、どのサービス(アプリケーション)が稼働しているかを調べる行為です。建物のセキュリティチェックに例えると、ドア・窓・通気口などすべての出入口(ポート)をひとつひとつ確認して「どこが解錠されているか(どのポートが開いているか)」を調べるようなものです。nmap・masscanなどのツールがよく使われます。セキュリティ管理者が自社システムの脆弱なポートを把握するための「セキュリティ監査ツール」として正当な用途がある一方、攻撃者が標的の弱点を見つけるための偵察(リコナイサンス)段階にも利用されます。不必要なポートは閉じる・ファイアウォールで外部からのアクセスを制限する・IDS/IPSでポートスキャンを検知するなどの対策が有効です。誤答の「USBポートの動作を確認すること」はハードウェアのUSB検査、「ネットワーク速度の測定」はスピードテスト・帯域測定、「プリンタのポートを設定すること」はプリンタ設定の話です。「ポートスキャン=開放ポート・稼働サービスの調査・攻撃の偵察段階にも使われる」と覚えましょう!
バッファオーバーフロー攻撃の説明として適切なものはどれか。
📝 解説
バッファオーバーフロー攻撃はプログラムが用意した固定サイズのバッファ(一時的なデータ記憶領域)に、その容量を超えるデータを意図的に書き込むことで、隣接するメモリ領域(スタックの戻りアドレス等)を上書きしてプログラムの実行フローを乗っ取る攻撃手法です。コップに水を大量に注ぐと溢れて周囲を濡らすように、バッファに入りきらないデータが隣接するメモリ領域を「溢れて」汚染します。攻撃者はこの溢れた部分に悪意のあるコード(シェルコード)のアドレスを書き込み、プログラムに意図しないコードを実行させます。C/C++で書かれたプログラムはscanf・strcpyなどの境界チェックなし関数を使うと脆弱性が生じやすいです。対策としてはスタックカナリア(書き換え検知)・ASLR(アドレス空間配置のランダム化)・DEP/NX(データ実行防止)・安全な文字列関数(strncpy等)の使用が有効です。誤答の「ネットワーク帯域を超える通信」はDoS/DDoS攻撃、「データベースを不正操作する攻撃」はSQLインジェクション、「パスワードを盗む攻撃」はフィッシング・キーロガーの説明です。「バッファオーバーフロー=バッファ超過書き込みでメモリを汚染・実行フロー乗っ取り」と覚えましょう!
ARP(Address Resolution Protocol)の役割として適切なものはどれか。
📝 解説
ARP(Address Resolution Protocol:アドレス解決プロトコル)は同一ネットワーク内において、IPアドレスから対応するMACアドレスを動的に取得するプロトコルです。電話帳に例えると、相手の名前(IPアドレス)から電話番号(MACアドレス)を調べる作業がARPです。IPパケットは宛先IPアドレスで転送されますが、実際にイーサネットフレームを送るには宛先のMACアドレスが必要です。送信元は「このIPアドレスを持つ人、MACアドレスを教えてください!」とブロードキャストでARP要求を送り、該当するIPアドレスを持つ機器が「私のMACアドレスは○○です」とユニキャストでARP応答を返します。取得したIPアドレスとMACアドレスの対応はARPキャッシュに一定時間保存されます。ARPスプーフィング攻撃は偽のARP応答を送って通信を横取りする攻撃手法で、スイッチの動的ARPインスペクション(DAI)で防止できます。誤答の「ドメイン名をIPアドレスに変換する」はDNSの役割、「MACアドレスからIPアドレスを取得する」はRARP(ARPの逆)の機能、「IPアドレスを動的に割り当てる」はDHCPの役割です。「ARP=IPアドレスからMACアドレスを取得するプロトコル」と覚えましょう!
シェルの説明として適切なものはどれか。
📝 解説
シェル(Shell)はユーザーがコマンドを入力するとそのコマンドを解釈してOSカーネルに渡し、実行結果をユーザーに表示するインターフェースです。役所の受付窓口に例えると、市民(ユーザー)が窓口(シェル)に用件を伝えると、窓口担当者が担当部署(カーネル)に取り次ぎ、結果を市民に返してくれる仕組みと同じです。シェルには「コマンドラインシェル(CLI:テキストベース)」と「グラフィカルシェル(GUI:マウス操作)」があります。代表的なCLIシェルとしてBash(多くのLinuxのデフォルト)・Zsh(macOSのデフォルト)・Fish・PowerShell(Windows)などがあります。シェルはコマンドの実行だけでなく、変数・条件分岐(if)・ループ・パイプライン(|)・リダイレクト(>/<)・関数定義・ジョブ管理なども備えており、シェルスクリプトとして自動化処理に広く活用されています。誤答の「OSのカーネルの別名」はシェルとカーネルは明確に別の存在(シェルはカーネルを包む外殻)、「ハードウェアを制御するドライバ」はデバイスドライバ、「ネットワークの設定ツール」はipコマンド等のネットワークユーティリティです。「シェル=ユーザーとOSカーネルの橋渡し役・コマンド解釈実行インターフェース」と覚えましょう!
Linuxのファイルパーミッションで「rwxr-xr--」の意味として適切なものはどれか。
📝 解説
Linuxのファイルパーミッション「rwxr-xr--」は9文字(3文字×3グループ)で構成され、「所有者(Owner)・グループ(Group)・その他(Others)」の順に権限を表します。鍵の種類に例えると、所有者には「ドアを開ける・入室する・中を改装する(読み・書き・実行)」フルアクセスの鍵、グループメンバーには「ドアを開けて入室できるが改装はできない(読み・実行のみ)」の鍵、その他の人には「外から見るだけ(読みのみ)」の最小限のアクセスが与えられるイメージです。「r」は読み取り(4)・「w」は書き込み(2)・「x」は実行(1)・「-」は権限なし(0)を表します。8進数表記では「rwxr-xr--」は「111 101 100」=「754」と書けます。chmod 754でこの権限を設定できます。ディレクトリのx(実行)権限は「そのディレクトリに入る(cd)」権限を表す点も重要です。誤答の「すべてのユーザが読書実行可」は「rwxrwxrwx(777)」、「所有者のみ読書実行可」は「rwx------(700)」、「すべてのユーザが読のみ可」は「r--r--r--(444)」です。「rwxr-xr--=所有者:rwx・グループ:r-x・その他:r--=754」と覚えましょう!
HTMLのDOMの説明として適切なものはどれか。
📝 解説
DOM(Document Object Model)はHTMLやXMLドキュメントをプログラムから操作するためのAPIです。ブラウザはHTMLを解析してDOMというツリー構造のオブジェクト(ノードの階層構造)をメモリ内に生成し、JavaScriptからこのDOMを操作することでWebページの要素を動的に追加・変更・削除できます。建物の設計図(CADデータ)に例えると、DOMは建物(Webページ)を「1階フロア→各部屋→室内の家具」のように階層的に管理したデジタルモデルで、このモデルを操作(部屋のレイアウト変更、家具の追加)することが実際の建物(画面表示)に反映されます。document.getElementById()やquerySelector()でノードを取得し、innerHTML・textContent・style・classList・appendChild()などで内容・スタイル・構造を変更できます。イベントリスナー(addEventListener)を使うと「クリック・キー入力・マウス移動」などのユーザー操作をDOMで捉えてJavaScriptが応答できます。誤答の「HTMLを暗号化する技術」はHTTPS・TLS、「Webサーバとの通信プロトコル」はHTTP/HTTP2、「CSSのセレクタの種類」はCSSの話でいずれもDOMとは別の概念です。「DOM=HTMLをツリー構造のオブジェクトとして表現・JavaScriptで動的操作可能」と覚えましょう!
Webアプリケーションにおけるセッション管理の目的として適切なものはどれか。
📝 解説
HTTP(HyperText Transfer Protocol)はステートレス(状態を持たない)なプロトコルであり、リクエストとレスポンスのたびに独立した通信が行われ、サーバは前回のリクエストを「覚えていない」設計になっています。セッション管理はこの制約を補い、「ログイン状態・ショッピングカートの内容・ユーザー設定」などの状態をリクエストをまたいで維持するための仕組みです。ホテルのルームキーに例えると、チェックイン時にカードキー(セッションID)を受け取り、それを提示することで部屋(自分のアカウント状態)にアクセスできる仕組みと同じです。仕組みとしては①ログイン成功時にサーバがランダムなセッションIDを生成→②サーバ側のセッションストア(DB・メモリ等)にセッション情報を保存→③クライアントのCookieにセッションIDを保存→④次回リクエスト時にセッションIDを送りサーバが対応する状態を取得します。セッションハイジャック(セッションIDの盗用)対策として、HTTPSの使用・HttpOnly/Secure Cookie属性・セッションIDの定期的な再生成が重要です。誤答の「Webサーバの負荷を下げる」はキャッシュ・CDNの目的、「表示速度を上げる」はパフォーマンス最適化です。「セッション管理=ステートレスなHTTPで状態を維持・セッションID+Cookie」と覚えましょう!
正規表現で「.*」の意味として適切なものはどれか。
📝 解説
正規表現は文字列のパターンを表現する記法で、「.」(ドット)は改行を除く任意の1文字にマッチし、「*」(アスタリスク)は直前のパターンの0回以上の繰り返しにマッチします。組み合わせた「.*」は「任意の文字(.)が0回以上繰り返す(*)」つまり空文字列を含む任意の文字列全体にマッチします。図書館の目録検索に例えると、「東京.*観光」と検索すると「東京の観光」「東京おすすめ観光スポット」「東京2024観光ガイド」などすべてにマッチする「ワイルドカード検索」のイメージです。正規表現はテキストエディタの検索・置換・プログラミングでの文字列処理・Webフォームのバリデーション・ログ解析・grep/sed/awk等のUnixコマンドに広く活用されています。よく使うパターンとして「^」(行頭)・「$」(行末)・「[a-z]」(文字クラス)・「\d」(数字)・「+」(1回以上)・「?」(0または1回)・「{n,m}」(n〜m回)なども覚えると便利です。誤答の「ピリオドのみにマッチ」はリテラルの「\.」でエスケープが必要、「任意の1文字にマッチ」は「.」のみの説明で「*」の効果が入っていない、「英数字のみにマッチ」は文字クラス[a-zA-Z0-9]+などのパターンです。「.*=任意の文字が0回以上=何でもあり・空文字もOK」と覚えましょう!
木構造の深さ優先探索(DFS)と幅優先探索(BFS)の違いとして適切なものはどれか。
📝 解説
木やグラフの探索アルゴリズムには深さ優先探索(DFS:Depth First Search)と幅優先探索(BFS:Breadth First Search)があり、データ構造と探索の特性が異なります。迷路探索に例えると、DFSは「まず1つの道を行き止まりになるまで進み、行き止まったら直前の分岐まで戻って別の道を試す」スタイルで、BFSは「スタートから1歩先の全分岐、次に2歩先の全分岐と同心円状に広げて探す」スタイルです。DFSはスタック(または再帰呼び出し)を使い、メモリ使用量が少なく深い構造の探索・バックトラッキングが必要な問題(迷路・数独・組み合わせ探索)に向いています。BFSはキューを使い、スタートから最短経路を見つけるのに適しています(各ステップのコストが均一な場合)。例えば「友達の友達の友達」のようなSNSの最短接続数を調べるにはBFSが有効です。誤答の「DFSはキューを使い、BFSはスタックを使う」はデータ構造が逆です。「DFSとBFSは同じアルゴリズム」は誤りで探索順序が全く異なります。「DFS=スタック・深く探索、BFS=キュー・幅広く探索・最短経路」という対比を確実に覚えましょう!
クイックソートの平均計算量として適切なものはどれか。
📝 解説
クイックソートは「ピボット(基準値)を選び、ピボットより小さい要素と大きい要素の2グループに分割する」操作を再帰的に繰り返す分割統治法による整列アルゴリズムです。図書館で本を整理するとき「500番台を境に前後に分け、さらにそれぞれを250番と750番で分け…」と繰り返す方法がまさにクイックソートの発想です。平均的なケースでは毎回ほぼ均等に分割されるため、O(n log n)という非常に効率的な計算量を達成します。これはn件のデータをlog nの深さで分割し、各レベルでn回の処理が必要という構造によるものです。ただし最悪ケース(既にほぼ整列済みのデータで毎回最大・最小をピボットに選ぶと)はO(n2)に悪化します。ランダムなピボット選択や「3つの中央値」を選ぶ方法でこのリスクを低減できます。実用上はキャッシュ効率が高くインプレース(追加メモリが少ない)なため、多くの標準ライブラリで採用されています。誤答の「O(n)」はハッシュ探索や計数ソートなど特殊ケース、「O(n2)」はバブルソート・選択ソートの平均計算量、「O(log n)」は二分探索の計算量です。「クイックソート=平均O(n log n)・最悪O(n2)・分割統治法」と覚えましょう!
マージソートの特徴として適切なものはどれか。
📝 解説
マージソートは分割統治法を用いた整列アルゴリズムで、「リストを半分ずつに分割し続け、1要素になったらそれ自体が整列済みとみなし、逆順に2つの整列済みリストを合流(マージ)させながら整列する」操作を再帰的に行います。川の合流に例えると、大きな川を上流にさかのぼって細かな支流(1要素)まで分け、下流に向かって整列しながら合流させていくイメージです。最大の特長は「最良・平均・最悪すべてのケースでO(n log n)が保証される」安定性で、クイックソートが最悪O(n2)になりうる欠点をカバーします。また「安定ソート(等しいキーを持つ要素の相対順序が変わらない)」であることも重要な特性で、複数条件での整列に適しています。デメリットはマージ処理に元のデータと同サイズの追加メモリが必要な点で、インプレースではありません。Java(TimSort:マージソートベース)やPython(Timsort)の組み込みソートに採用されています。誤答の「常にO(n2)の計算量」はバブルソート等の非効率なアルゴリズム、「インプレースで動作する」はクイックソートや選択ソートの特徴、「小規模データに最も効率的」は挿入ソートの特性です。「マージソート=常にO(n log n)・安定ソート・追加メモリ必要」と覚えましょう!
オブジェクト指向の「継承」の説明として適切なものはどれか。
📝 解説
オブジェクト指向の「継承」は、既存クラス(親クラス・スーパークラス)の属性とメソッドを引き継いで新しいクラス(子クラス・サブクラス)を定義する機能です。日常生活で例えると、「乗り物」という親クラスが「走る」「止まる」という動作を持っていて、「自動車」クラスがそれをそのまま引き継ぎ、さらに「クラクションを鳴らす」という自動車固有の機能を追加するイメージです。継承によってコードを一から書き直す必要がなく、再利用性が格段に高まります。正解の「既存クラスの属性・メソッドを引き継ぐ」はまさにこの仕組みです。誤答の「内部を隠蔽する」はカプセル化、「同じ名前のメソッドが異なる動作」はポリモーフィズムの説明です。「継承=親の財産を受け継いで子が独自機能を追加できる」と覚えましょう!
オブジェクト指向の「ポリモーフィズム」の説明として適切なものはどれか。
📝 解説
ポリモーフィズム(多態性)は「同じインターフェース(メソッド名等)を使っても、オブジェクトの種類によって異なる動作をする」性質です。リモコンに例えると、テレビに向けてチャンネルボタンを押せばチャンネルが変わり、エアコンに向けて同じボタンを押せば運転モードが切り替わります。どちらも同じボタン(インターフェース)でも、向けた機器の種類によって動作が違いますよね。プログラムでも「animal.speak()」というメソッドを呼ぶと、犬クラスなら「ワン!」、猫クラスなら「ニャー!」と返ります。コードの呼び出し側は対象の具体的な型を意識せずに同一の操作が書けるため、拡張性・柔軟性が高まります。誤答の「データと処理をひとまとめ」はカプセル化、「クラスを継承する」は継承の説明です。「同じ操作・違う動作=ポリモーフィズム」と押さえましょう!
デザインパターンのシングルトンパターンの説明として適切なものはどれか。
📝 解説
シングルトンパターンは「あるクラスのインスタンスが必ず1つしか存在しないことを保証する」デザインパターンです。会社の代表印に例えると、代表印は1本しか存在してはならず、誰がどこで使っても同じ印鑑である必要があります。同様に、アプリケーション全体で1つだけ存在すべき設定マネージャやログマネージャにシングルトンが使われます。インスタンスが複数作られると設定値がバラバラになるなどの問題が起きます。実装上は、コンストラクタをprivateにして外部からnewできなくし、唯一のインスタンスをstaticなメソッドで返すのが典型的な手法です。誤答の「複数クラスを1つにまとめる」はファサードパターン、「オブジェクトを動的に生成する」はファクトリーパターンの説明です。「シングルトン=インスタンスは常に1つだけ」と覚えましょう!
例外処理の目的として適切なものはどれか。
📝 解説
例外処理は「プログラム実行中に想定外のエラーが発生したとき、適切に対処してプログラムが突然止まらないようにする」仕組みです。自動車のエンジン警告灯に例えると、エンジンに異常が起きたとき突然エンジンが止まるのではなく、警告灯が点灯して運転者に知らせ安全に対処できるようにする仕組みと同じです。Javaなら「try { 危険な処理 } catch (Exception e) { エラー対処 } finally { 後片付け }」という構文で実装します。ファイルが存在しない・ネットワーク接続が切れた・0での割り算など予期しない状況が起きてもプログラムが継続・終了を制御できます。誤答の「処理速度を上げる」「コードを短くする」は全く別の目的で、「変数の型を変換する」はキャストの話です。「例外処理=エラーを捕まえて安全に対処する仕組み」と理解しましょう!
XMLの説明として適切なものはどれか。
📝 解説
XML(Extensible Markup Language)は「開始タグと終了タグでデータを囲んで、その構造と内容を人間にも機械にも読みやすく記述するマークアップ言語」です。宅配箱に例えると、入れ子の箱で内容物を囲んで何が入っているかを明示するように、データの構造と内容を階層的に表現します。HTMLと似ていますが、HTMLはWebページ表示に特化しているのに対し、XMLはデータの構造記述・交換汎用に設計されており、タグ名を自由に定義できます。設定ファイル(pom.xml・web.xml等)・WebサービスのSOAP通信・Officeドキュメントの内部形式などで広く活用されています。誤答の「Webページのデザインを記述する」はCSS、「データベースを操作する」はSQL、「プログラムの処理を記述する」はプログラミング言語の説明です。「XML=自由なタグでデータの構造と内容を記述する汎用マークアップ言語」と押さえましょう!
JSONの説明として適切なものはどれか。
📝 解説
JSON(JavaScript Object Notation)は「キーと値のペアで構造化データを表現する軽量テキストベースのデータ交換フォーマット」です。名刺に例えると、項目名(キー)と内容(値)をセットで「名前:田中、会社:ABC株式会社、電話:03-XXXX」と表現するイメージです。XMLより記述量が少なくシンプルで、JavaScriptで直接扱えるため、Web APIのレスポンスデータとして現在最も広く使われています。配列・オブジェクトのネストも表現でき、文字列・数値・真偽値・nullにも対応します。PythonのJSON標準ライブラリやJavaのGsonなど、ほぼ全言語でJSONの読み書きが容易にできます。誤答の「画像データのフォーマット」はJPEG・PNG等、「動画データのフォーマット」はMP4等、「暗号化データのフォーマット」は全く異なる分野の話です。「JSON=キーと値のペア・軽量・Web APIの主流フォーマット」と覚えましょう!
RESTful APIの特徴として適切なものはどれか。
📝 解説
RESTful APIは「HTTPのGET・POST・PUT・DELETEメソッドを使ってURIで識別されたリソースを操作するAPI設計スタイル」です。図書館で例えると、本棚(リソース)の操作として「本を見る(GET)」「新しい本を追加する(POST)」「本の情報を更新する(PUT)」「本を取り除く(DELETE)」という4つの操作で管理するイメージです。RESTの重要な原則は「ステートレス(各リクエストが独立)」「統一インターフェース(HTTP標準に従う)」「リソース指向(/users/123 のようなURLでリソースを識別)」です。現代のWebサービスのほぼすべてがRESTful APIで連携しています。誤答の「必ずXMLを使用する」はSOAP WebServiceの特徴で、RESTはJSONもXMLも使えます。「常にセッションを使って状態を管理する」はステートレスのRESTとは逆の特徴です。「REST=HTTPメソッドでリソースをCRUD操作する設計スタイル」と理解しましょう!
継続的インテグレーション(CI)の説明として適切なものはどれか。
📝 解説
CI(継続的インテグレーション:Continuous Integration)は「開発者がコードの変更をリポジトリに頻繁にマージするたびに、自動でビルドとテストを実行してコードの品質問題を即座に検出する」プラクティスです。工場の製造ラインの品質チェックに例えると、製品が1つ完成するたびに即座に品質検査を実施し、不良品をその場で弾くイメージです。コードを長期間ためてから一括マージすると、複数人の変更がぶつかって大きな問題になりがちですが、CIで小まめに検証することで問題を早期発見・修正できます。Jenkins・GitHub Actions・GitLab CIなどのツールがよく使われています。CDとセットで「CI/CD」と呼ばれ、継続的デリバリー(CD)はテスト後の本番デプロイまで自動化します。誤答の「プロジェクトを継続して開発すること」は一般的な開発活動の話でCIの技術的意味とは異なります。「CI=コミットのたびに自動ビルド・テスト・即フィードバック」と覚えましょう!
ハッシュテーブルの特徴として適切なものはどれか。
📝 解説
ハッシュテーブル(Hash Table)は「ハッシュ関数でキーから格納位置を計算し、その位置に直接データを格納する」データ構造です。電話帳に例えると、「田中さんの番号を調べたい」とき、あいうえお順にページをめくる(線形探索)より、氏名の頭文字から引き出しの番号を一瞬で計算して直接その引き出しを開く(ハッシュ)方が圧倒的に速いですよね。これがハッシュテーブルの発想です。この仕組みにより平均的な検索・挿入・削除の計算量がO(1)という驚異的な高速性を実現します。Pythonのdict・JavaのHashMapがこの仕組みを使っています。ただし、異なるキーが同じ格納位置を指す「衝突(コリジョン)」が多発すると性能が低下します。誤答の「常に整列された状態で保持する」は二分探索木などの特性で、「全要素を移動する必要がある」は配列の挿入の話、「常にO(n)の時間がかかる」は線形探索の特性です。「ハッシュテーブル=ハッシュ関数で一瞬で位置を計算・平均O(1)で検索できる高速データ構造」と覚えましょう!
ファイルシステムにおける「ディレクトリ」の説明として適切なものはどれか。
📝 解説
ファイルシステムの「ディレクトリ(フォルダ)」は「ファイルやサブディレクトリをまとめて管理するための入れ物(コンテナ)」です。会社のオフィスの書類棚に例えると、書類棚(ルートディレクトリ)の中に「営業部」「総務部」「経理部」という引き出し(ディレクトリ)があり、それぞれの引き出しの中にさらに「2024年」「2025年」という仕切り(サブディレクトリ)があり、一番奥に実際の書類(ファイル)が入っているイメージです。これが「ツリー構造(木構造)」と呼ばれるディレクトリの階層構造です。ルートディレクトリ(Linuxなら「/」、Windowsなら「C:\」)を頂点として木が広がっています。絶対パス(ルートからの完全な場所)と相対パス(現在地からの場所)も重要な概念です。誤答の「ファイルの内容を格納する領域」はファイル本体の話、「バックアップを保存する場所」はストレージ管理の話、「OSのシステムファイルを格納する特殊領域」はシステムディレクトリは確かに存在しますがディレクトリの説明としては不適切です。「ディレクトリ=ファイルやサブディレクトリをまとめる入れ物・ツリー構造で整理」と覚えましょう!
プログラミングにおける「ポインタ」の説明として適切なものはどれか。
📝 解説
「ポインタ」はC言語などで使われる「別の変数が存在するメモリアドレス(番地)を値として格納する特殊な変数」です。住所録に例えると、普通の変数が「田中太郎という人物そのもの」を入れた箱なら、ポインタは「田中太郎の自宅住所が書かれた紙」を入れた箱です。住所(アドレス)を通じて田中さんに会いに行くことができ、住所を別の人に渡すこともできます。コンピュータのメモリは番地(アドレス)が割り振られた連続した棚のようなもので、ポインタはその番地を保持します。ポインタを使うことで連結リスト・木構造・動的なメモリ確保など柔軟なデータ構造を実現できます。「*p」でポインタが指す先の値を参照(デリファレンス)し、「&x」でxのアドレスを取得します。誤答の「変数の値を保持するメモリ領域」は通常の変数の説明、「プログラムの実行位置を示す変数」はプログラムカウンタ(PC)の話、「配列の要素数を保持する変数」はサイズ変数の話です。「ポインタ=別の変数のメモリアドレスを格納する変数」と覚えましょう!
マルチコアプロセッサの説明として適切なものはどれか。
📝 解説
マルチコアプロセッサは「1つのCPUチップの中に複数の独立した処理コア(演算ユニット)を搭載したプロセッサ」です。工場の製造ラインに例えると、シングルコアが「熟練工が1人で全工程をこなす工場」なら、マルチコアは「同時に複数の工程を別々の作業員が並列で進める工場」です。複数のコアが異なる処理を本当に同時(真の並列実行)にこなせるため、マルチスレッドプログラムや複数アプリの同時実行に大きな効果を発揮します。デュアルコア(2コア)・クアッドコア(4コア)・8コア・16コアなど様々な構成があります。注意点として「コア数が多いほど速い」わけではなく、プログラムが並列処理に対応していないと恩恵が少ない場合があります。誤答の「複数のコンピュータを接続した構成」はクラスタやグリッドの話、「複数のOSを同時に実行する」は仮想化技術の話、「複数のプログラムを切り替えて実行する」はシングルコアでの時分割(マルチタスク)の説明です。「マルチコア=1チップに複数の処理コアを搭載・真の並列処理が可能」と覚えましょう!
オーバーフローの説明として適切なものはどれか。
📝 解説
オーバーフローは「変数のデータ型が表現できる値の上限(または下限)を超えたとき、予期しない結果が生じる現象」です。メーターの巻き戻しに例えると、自動車の走行距離計が最大99999kmを超えると00000に戻ってしまう現象と全く同じです。コンピュータでも8ビットの符号なし整数(0〜255の範囲)に256を代入すると、ビットが溢れて0に戻ります。これが整数オーバーフローです。金融システムで超大きな金額を計算するとき・組み込みシステムでセンサー値が範囲を超えたときなどに深刻なバグの原因となります。実際に「2000年問題(Y2K問題)」や宇宙ロケットの誘導システムの障害など、オーバーフローが関係した重大事故が歴史上複数あります。対策は「より大きなデータ型を使う」「計算前に値の範囲を検証する」などです。誤答の「メモリが不足する状態」はメモリ不足(OOM)、「ネットワーク帯域が不足する状態」は帯域制限、「ディスクの空き容量がなくなる状態」はディスクフル(ストレージ枯渇)の説明です。「オーバーフロー=データ型の表現範囲を超えて桁溢れが起きる現象」と覚えましょう!
グラフ構造のうち「有向グラフ」の説明として適切なものはどれか。
📝 解説
グラフ理論における「有向グラフ(Directed Graph)」は「辺(エッジ)に方向(向き)がある」グラフです。一方通行の道路に例えると、矢印付きの一方通行道路(A→B方向にしか進めない)がまさに有向グラフのエッジです。AからBへの辺があっても、BからAへの辺がなければBからAには移動できません。Webページのリンク構造(AページがBページにリンクしているが逆は限らない)・タスクの依存関係(Aを終えないとBを始められない)・SNSのフォロー関係(AがBをフォローしていてもBがAをフォローしているとは限らない)などの表現に使われます。有向グラフの特殊な形として「DAG(有向非巡回グラフ)」は循環がなく、タスクスケジューリングやブロックチェーン(DAG型)の基盤となります。誤答の「重みのあるグラフ」は重みグラフ(辺に数値コストがある)、「辺に方向がないグラフ」は無向グラフ(逆の説明)、「閉路のないグラフ」はDAGや木構造の説明です。「有向グラフ=辺に方向(向き)がある・一方通行の関係を表現できる」と覚えましょう!