【第二回】基本情報技術者試験の勉強ログ|図解と会話でわかりやすく整理してみた

PARKUDP
基本情報技術者試験の勉強メモ、第二回目だよ!
Qちゃん
お〜、前回からどんなことをやったの?
PARKUDP
実際に過去問を解きながら「デジタル署名」や「データベースのトランザクションログ」について整理してみたんだ。まとめてみると理解がぐっと深まったよ!
Qちゃん
なるほど〜!今日はその内容を教えてくれるのね?
PARKUDP
そうそう!今回は【セキュリティ/データベース/サービス運用/アルゴリズム】の分野を中心にまとめていくよ。
目次

デジタル署名とは

Qちゃん
デジタル署名って何のためにあるの?
PARKUDP
途中でデータを改ざんされてないか確認できるし、送った本人の証明にもなるんだよ!

デジタル署名は、公開鍵暗号方式の仕組みを利用して、以下の2点を保証する技術です。

  1. メッセージの改ざん検知
    受信者は、送られてきたデータが途中で改ざんされていないことを確認できます。
  2. 送信者本人の確認(認証)
    署名を作成するためには、送信者本人が持つ秘密鍵が必要となるため、署名の存在は送信者が本物であることの証明になります。

この仕組みは電子契約、ソフトウェア配布、メールのセキュリティなど、幅広く利用されています。

データベースとトランザクションログ

Qちゃん
データ壊れたらどうやって直すの?
PARKUDP
ログに「更新前と更新後の値」を残してるから、それを使って復旧できるんだ。失敗した処理はロールバックで元に戻せる!

データベースは、更新処理を安全に行うために トランザクションログを記録しています。

  • 更新前の値
  • 更新後の値

これを残すことで、障害が発生した場合でも復旧が可能になります。

復旧方法の流れ

  1. チェックポイントの状態に戻す
    (一定時点の保存済み状態に復元)
  2. トランザクションログを反映
    → 未反映の更新を再実行して復旧

ロールバック処理

トランザクション中にプログラムのバグやアプリ強制終了が起きると、データが不整合になる可能性があります。そのため、ロールバックによって「更新前ジャーナル」を利用し、トランザクション開始直前の状態に戻すことができます。これにより、データベースの整合性が保たれます。

サービスレベル管理(SLM)とSLA

Qちゃん
SLAとSLMって違うの?
PARKUDP
SLAは契約に書くサービスの基準、SLMはそれを守るための運用。簡単に言うと「約束」と「実行方法」ってこと!

ITサービスの運用では、サービスレベル管理(SLM)が重要です。

  • SLA(Service Level Agreement)
    サービス提供者と顧客の間で交わす契約。
    提供するサービスの品目・品質・水準、違反時のペナルティを明記します。
  • SLM(Service Level Management)
    SLAを実現するための管理手法。
    顧客要件を満たすサービスを継続的に提供する仕組みを作り、改善を進めます。

これにより、安定したITサービスの提供が可能になります。

オートマトンと状態遷移

Qちゃん
オートマトンって何に使えるの?
PARKUDP
状態遷移の考え方だから、システム設計やプロトコルの動作チェックにも使えるよ!

オートマトンは、形式言語や計算理論で扱うモデルの1つです。

  • 状態
    ある時点のシステムの状況を表すもの。
  • 遷移
    入力や時間の経過によって状態が変化すること。
  • 受理状態
    最終的に到達すべき正しい状態のこと。

これを表現する方法には状態遷移表状態遷移図があります。

図解:オートマトンの例

以下は、文字列abを受理する単純なオートマトンの状態遷移図です。

  • 初期状態S0から入力aが来るとS1に遷移
  • S1bが入力されるとS2(受理状態)に遷移
  • S2に到達すると入力文字列は受理される

また、上を状態遷移表で表すと下記のようになります。

現在状態入力 a入力 b受理状態か
S0S1×
S1S2×
S2

流れ図(フローチャート)とは

Qちゃん
フローチャートの記号っていっぱいあるけど全部覚えるの?
PARKUDP
基本は「端子・処理・判断・入出力」だけ押さえればOK!試験や仕事ではそれで十分だよ。

流れ図(フローチャート)は、アルゴリズムや処理手順を視覚的に表現する図です。
文章だけで書くと分かりづらい処理の流れを、誰が見ても理解しやすくする目的で利用されます。

特に、処理の順序・分岐・繰り返しといった構造を直感的に表せるため、
プログラム設計や業務手順の可視化に広く使われています。

流れ図で使用する主な記号(JIS規格)

流れ図で使う記号は、JIS(日本産業規格)によって標準化されています。
代表的な記号と意味は以下の通りです。

記号名称意味使い方の例
端子 (Terminal)開始・終了を表すフローチャートのスタート地点や終了地点に配置
処理 (Process)計算や処理を表す変数の代入、計算処理、業務処理など
判断 (Decision)条件分岐を表す(はい/いいえ)「A > B?」などの条件判定
データ (Input/Output)入出力処理を表すデータの入力、結果の出力など

フローチャート記号の一覧

flowchart TD
    A([端子])
    B[/データ/]
    C[処理]
    D{判断}

    subgraph 記号一覧
        A --> B --> C --> D
    end

フローチャート例:最大値を求めるアルゴリズム

「2つの数 A, B を比較して、大きい方を出力する」処理を例に示します。

flowchart TD
    Start([開始]) --> Input[/AとBを入力/]
    Input --> Decision{A > B?}
    Decision -- はい --> OutputA[/Aを出力/]
    Decision -- いいえ --> OutputB[/Bを出力/]
    OutputA --> End([終了])
    OutputB --> End([終了])

出力イメージの流れ

  1. 開始から処理をスタート
  2. AB を入力
  3. 条件 A > B を判定
  4. 「はい」なら A を出力
  5. 「いいえ」なら B を出力
  6. 終了

整列アルゴリズム(ソートアルゴリズム)とは

Qちゃん
ソートってどれを覚えればいいの?
PARKUDP
小さいデータなら挿入ソート、普通はクイックソート。バブルや選択ソートは「仕組み理解用」って感じ!

整列アルゴリズムとは、データを特定の順番(昇順や降順)に並べるためのアルゴリズムで、ソートアルゴリズムとも呼ばれます。
代表的なものに「バブルソート」「選択ソート」「挿入ソート」「クイックソート」があります。

バブルソート(Bubble Sort)

仕組み

  • 隣り合う要素を比較して、順序が逆なら入れ替える
  • 1回のパスで「最大(または最小)」が末尾に移動する
  • 何度も繰り返して配列を整列させる

Pythonコード

def bubble_sort(arr):
    a = arr[:]
    n = len(a)
    for i in range(n-1):
        swapped = False
        for j in range(n-1-i):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1], a[j]
                swapped = True
        if not swapped:  # 途中で整列済みなら終了
            break
    return a

選択ソート(Selection Sort)

仕組み

  • 未整列部分から最小(または最大)を探す
  • それを先頭と交換する
  • これを繰り返して整列する

Pythonコード

def selection_sort(arr):
    a = arr[:]
    n = len(a)
    for i in range(n-1):
        min_idx = i
        for j in range(i+1, n):
            if a[j] < a[min_idx]:
                min_idx = j
        a[i], a[min_idx] = a[min_idx], a[i]
    return a

挿入ソート(Insertion Sort)

仕組み

  • 配列の左側を「整列済み」と仮定
  • 未整列部分から1つ取り出して、整列済み部分の正しい位置に挿入
  • 小さい配列や「ほぼ整列済み」のデータに強い

Pythonコード

def insertion_sort(arr):
    a = arr[:]
    for i in range(1, len(a)):
        key = a[i]
        j = i - 1
        while j >= 0 and a[j] > key:
            a[j+1] = a[j]
            j -= 1
        a[j+1] = key
    return a

クイックソート(Quick Sort)

仕組み

  • ピボット(基準値)を1つ選ぶ。
  • ピボットより小さいものと大きいものに分割。
  • それぞれを再帰的にソートする。
  • 平均は O(n log n) と高速だが、最悪の場合 O(n²) になる。

Pythonコード

def quick_sort(arr):
    a = arr[:]
    def partition(lo, hi):
        pivot = a[hi]
        i = lo - 1
        for j in range(lo, hi):
            if a[j] <= pivot:
                i += 1
                a[i], a[j] = a[j], a[i]
        a[i+1], a[hi] = a[hi], a[i+1]
        return i + 1
    def _qs(lo, hi):
        if lo < hi:
            p = partition(lo, hi)
            _qs(lo, p-1)
            _qs(p+1, hi)
    _qs(0, len(a)-1)
    return a

ソート4種のまとめ

アルゴリズム考え方の一言平均計算量最悪計算量追加メモリ安定性*特徴 / 使いどころ
バブルソート隣同士を比べて入れ替えO(n²)O(n²)O(1)実装が超シンプル。ほぼ整列済みなら早期終了が効く。学習用としてベスト。
選択ソート一番小さいのを選んで先頭へO(n²)O(n²)O(1)×交換回数が最大でも n−1で少ない。書き込みコストを抑えたい場面向け。遅い・安定でない。
挿入ソート左の整列済みに差し込むO(n²)O(n²)O(1)小規模/ほぼ整列に強い。多くの高速ソートが小サイズで切替る定番。
クイックソート基準値で分割して再帰O(n log n)O(n²)O(log n)**×平均でとても速く、実用の定番。基準値の選び方小区間は挿入に切替など工夫が鍵。

* 安定性=同じキーの相対順が保たれるか(◎=安定、×=非安定)
** 追加メモリは主に再帰のスタック分

まとめ

  • デジタル署名:改ざん検知と送信者本人の証明に使われ、電子契約やソフト配布に必須。
  • データベースとログ管理:トランザクションログとロールバックで障害時にも整合性を保つ。
  • サービスレベル管理(SLM/SLA):提供品質を契約と仕組みで維持し、安定したITサービスを実現。
  • オートマトン:状態遷移表や図で処理の流れをモデル化する理論。
  • フローチャート:JIS規格の記号を用いて処理手順を分かりやすく図示。
  • ソートアルゴリズム:バブル/選択/挿入/クイックの4種類が代表例で、特徴や計算量が異なる。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次