【応用情報技術者試験】テクノロジ系

# テクノロジ系

## アルゴリズムとプログラミング
### アルゴリズム


- クイックソート（QuickSort）
  - クイックソート（QuickSort） は、「分割統治法（Divide and Conquer）」 を用いた高速なソートアルゴリズム。
  - 配列の中から基準（ピボット）を選び、小さいものと大きいものに分割し、再帰的にソートする。
  - 平均計算量は O(n log n) で、高速なソート手法の一つ。

---

-  クイックソートのアルゴリズム
1.  ピボットの選択**
    - 配列の中から1つの要素を **「ピボット（Pivot）」** として選ぶ。
2.  要素の分割（Partition）**
    - **ピボットより小さい要素** を左側に、**ピボットより大きい要素** を右側に移動。
3.  再帰的ソート**
- 左側と右側の部分配列に対して **同じ手順を繰り返し**、配列全体をソートする。# **クイックソート（QuickSort）とは？**



-  線形リスト
    - **線形リスト（Linear List）** とは、データを**一列に並べて格納**するデータ構造。
    - 各要素が**順番に並んでおり、一方向または双方向に移動可能**。
    - 主に **配列（Array）** や **リンクトリスト（Linked List）** として実装される。

  ---

  - **種類**
    -  **1. 配列（Array）**
      - **固定サイズのメモリ領域を確保し、連続した要素を格納する。**
      - **特徴**：
        - インデックスによる**高速アクセス（O(1)）**
        - **挿入・削除が低速（O(n)）**
        - メモリの再確保が必要な場合がある

  ---

  -  **2. 連結リスト（Linked List）**
    - **各要素（ノード）が次の要素へのポインタを持ち、動的にメモリを確保する方式。**
    - **種類**：
      1. **単方向リスト（Singly Linked List）**  
         - 各ノードが次のノードのみを参照
      2. **双方向リスト（Doubly Linked List）**  
         - 各ノードが前後のノードを参照
      3. **循環リスト（Circular Linked List）**  
         - リストの末尾が先頭に接続される

    - **特徴**：
      - **挿入・削除が高速（O(1)）**
      - **アクセス速度が遅い（O(n)）**
      - **メモリ消費が増える（ポインタ分のオーバーヘッド）**

  - データ数がnの線形リストを先頭から探索する場合
    - 最小探索数 = 1
    - 最大探索数 = n
    - 目的のデータへの平均探索回数は(1+n)/2
  ---

  -  **配列 vs 連結リスト 比較**
  | 特性 | 配列（Array） | 連結リスト（Linked List） |
  |------|--------------|----------------|
  | メモリ管理 | 事前に固定サイズ確保 | 必要に応じて動的確保 |
  | 挿入・削除 | O(n)（要素のシフトが必要） | O(1)（ポインタの更新のみ） |
  | 検索 | O(1)（インデックスアクセス） | O(n)（線形探索が必要） |
  | メモリ効率 | 追加メモリ不要 | ポインタ分のメモリが必要 |

- ハッシュ表
  - **ハッシュ表（ハッシュマップ）** は、キーと値のペアを格納し、**キーから値を高速に検索するデータ構造**。
  - **ハッシュ関数** を使用してキーを特定のアドレス（インデックス）に変換し、データを格納。
  - ハッシュ表の探索時間
    - **平均探索時間：O(1)（ほぼ定数時間）**
      - **ハッシュ関数** により、キーから直接アドレスを計算できるため、理想的な場合は探索時間が**O(1)** 。
    - **最悪探索時間：O(n)**
      - **ハッシュ衝突（Collision）** が発生すると、探索に時間がかかり、最悪の場合は線形探索（O(n)）となる。
    - ハッシュ表と他の探索アルゴリズムとの比較
    | データ構造 | 平均探索時間 | 最悪探索時間 | 特徴 |
    |-----------|------------|------------|------|
    | **ハッシュ表** | **O(1)** | **O(n)** | 高速な探索が可能だが、衝突時の処理が必要 |
    | **二分探索木（BST）** | **O(log n)** | **O(n)** | 順序付きデータの探索に適している |
    | **配列（線形探索）** | **O(n)** | **O(n)** | シンプルだが大規模データでは非効率 |
    | **二分探索（ソート済み配列）** | **O(log n)** | **O(log n)** | 配列がソートされていれば高速 |



### データ構造
- 可変量メモリ割り当て（Variable Partitioning）
    - プロセスが要求するメモリ量に応じて、動的にメモリの空き領域から必要分を割り当てる方式。
- 最適適合 (Best-Fit) アルゴリズム
    -「要求サイズ以上の空き領域のうち、最も小さい空き領域」を選んで割り当てる。
    - メリット：割り当て時の「使い残し（断片化）」を小さく抑えることが期待できる。
    - デメリット：割り当てに適した空き領域を探すコストが高くなりやすい。
- 空き領域を管理するデータ構造
    - Best-Fitでは「要求を満たす空き領域のうち最も小さいもの」を高速に探す必要がある。
    - もし空き領域を単純な連結リストや配列で管理していると、毎回すべてを線形探索する必要があり、平均処理時間が大きくなる。
    - 二分探索木（特に平衡木など）のように「空き領域の大きさ」をキーとして管理すれば、ログ時間（O(log n)) 程度で最適なブロックを探索できるため、平均処理時間を大幅に削減できる。

## 基礎理論
### 応用数学
- **正規分布と標準偏差について**

- **正規分布**
  - **特徴**:
    - 平均値を中心に、左右対称の山のようなカーブを描く確率分布。
    - **平均値と標準偏差**のみで、分布の特性を完全に規定できる。

---

-  **標準偏差**
  - **データのばらつきを表す尺度**。
  - 正規分布においては、**平均値と標準偏差（σ）** に基づいてデータの分布が決まる。

- 主成分分析
  - 複数の要因が相互に関連している場合に、その群を決定づけている主な要因を合成変数として求める統計的な指標
  - 

### 情報に関する理論

- ROC曲線（Receiver Operating Characteristic Curve）

  - **ROC曲線** は、**分類モデルの性能を評価するためのグラフ**。
  - **予測の閾値（しきい値）を変化させたときの感度（True Positive Rate, TPR）と特異度（False Positive Rate, FPR）をプロット**することで、モデルの識別能力を視覚的に確認できる。

-  ROC曲線の軸
  | 軸 | 意味 |
  |----|------|
  | **横軸（False Positive Rate, FPR）** | **偽陽性率**（1 - 特異度） |
  | **縦軸（True Positive Rate, TPR）** | **真陽性率**（感度） |

  - **FPR（偽陽性率） = FP / (FP + TN)**
    - 「実際は陰性（Negative）なのに誤って陽性（Positive）と判定された割合」
  - **TPR（真陽性率） = TP / (TP + FN)**
    - 「実際に陽性（Positive）のデータを正しく陽性と判定した割合」


## コンピュータ構成要素
### メモリ
- キャッシュメモリと主記憶の同期方法
  - write back(ライトバック方式)
    - cpuから書き込み命令が出たときにキャッシュメモリにだけ書き込み
    - 主記憶へはキャッシュメモリからデータが追い出されるときに書き込みを行う
    - 高速に書き込みできるがデータの整合性を保つための処理が余分になる
  - write through(ライトスルー方式)
    - CPUから書き込みの命令が出たときに主記憶にも同時に書き込む方式
    - データ整合性は得られるが処理が遅い

### プロセッサ
- パイプラインの処理時間を求める公式
  - (命令数 + パイプラインの深さ -1) * 各ステージの実行時間

## システム開発技術
- モジュール結合度
  - モジュール同士のの関連性の強さを表す概念
  - ６段階のレベルで分類される
    - データ結合（結合が弱い）
      - 処理に必要なデータだけを単一のパラメータとして渡している
    - スタンプ結合
      - 処理に必要なデータだけをレコードや構造体などのデータ構造として受け渡している
    - 制御結合
      - モジュールの動作を制御するための要素を受け渡している
    - 外部結合
      - 大域宣言された単一のデータを複数のモジュールが参照している
    - 共通結合
      - 大域宣言されたレコードや構造体などのデータ構造を複数のモジュールが参照している
    - 内部結合
      - モジュールの内部を直接参照している

###　保守・廃棄
- システムやソフトウェアへの保守には訂正の性質を持つ是正保守と予防保守、かいりょうの性質をもつ適応保守と完全化保守の４つがある
  - 是正保守
    - ソフトウェアの引き渡し後に発見された問題を訂正するために行う受け身の修正
  - 予防保守
    - 引き渡しのち後のソフトウェア製品の潜在的な障害が運用障害になる前に発見し是正を行うための修正
  - 適応保守
    - 引き渡し後に変化または変化している環境管理においてソフトウェア製品を使用できるようにと持ち続けるために実施する修正
  - 完全化保守
    - 引き渡し語のソフトウェア製品のパフォーマンスや保守性を向上させるための修正。きのうついかや変更、性能強化、プログラム文書の改善などをふくむ

## システム構成要素

### システムの構成
- フェールセーフ
  - システムの不具合や故障が発生したときに障害の影響範囲を最小限にとどめ、安全を最優先にして制御する考え
- フォールトアボイダンス
  - 構成部品の信頼性を高め故障が起きないようにする技術
- フェールソフト
  - システムに障害が発生いたときに多少の性能低下は許容しつつ、システム全体の運転継続に必要な機能を維持させる考え
  - ハードウェアに起因する障害への技術
- フォールトトレランス
  - システムの構成部品を多重化しシステムの一部に障害が発生しても全体としては停止することなく稼働を続けその間に復旧を図るようにシステム設計する技術

- SAN(storage area network)
  - 個々のサーバーストレージに直接接続せず、LANとは別のサーバー群の後方にストレージ専用のネットワークを構築し、そこにストレージ群を統合する技術
### システムの評価指標
- 稼働率の求め方
    - 直列の場合 Ra*Rb
    - 並列の場合 1-(1-Ra)(1-Rb)
    - 例
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3904956/5fc227e3-1737-4b2d-8125-bf44c6117d16.png)
     - Aの場合
         - A = (1-(1-x)(1-y))*z
         - A = (1-(1-x-y+xy))*z
         - A = (x+y-xy)*z
         - A = xz+yz-xyz
    - Bの場合
        - B = 1-(1-xz)(1-y)
        - B = 1-(1-y-xz+xyz)
        - B = y+xz-xyz

- サーバー稼働率の求め方
  - MTBF（平均故障間隔）/ (MTBF+MTTR(平均修復時間))

## セキュリティ

### 情報セキュリティ
- C&Cサーバー(コマンド・コントロール・サーバー) 
  - マルウェアが侵入成功したコンピューター群（ボットネット）の動作を制御するために用いられる外部指令のサーバー
  - マルウェアはC＆Cサーバーから指令をうけ乗っ取ったコンピュータに悪意のある活動を行う
  - コネクトバック通信
    - 定期的にマルウェア側からC＆Cサーバーに問い合わせを行いその応答で指令をおこなう

- サイドチャネル攻撃
  - 対象の動作状況を観察し漏洩電磁波、電力消費等のサイドチャネル情報から暗号鍵推定等を行う非破壊型解析攻撃の総称

- 楕円曲線暗号
  - 楕円曲線状の点の演算の用いた公開鍵暗号方式
  - RSAにくらべ短い鍵長で同レベルの安全性が実現できる

### 情報セキュリティ対策
- TRM
  - Trusted Platform Module
  - 以下の機能がある
    - PCのマザーボード上に直付けされるセキュリティチップ
    - 暗号化と複合化、鍵のペアの作成と管理
    - ハッシュ値の計算
    - 乱数生成
    - デジタル署名の生成、検証
  - 上の機能により以下のセキュリティ上の機能がある
    - OSやアプリケーションの改ざん検知
    - 端末認証
    - プラットフォームの整合性の兼用
    - ストレージ全体の暗号化

- デジタルフォレンジックス

  - **デジタルフォレンジックス（Digital Forensics）** とは、**コンピュータやネットワーク上のデジタルデータを収集・分析し、不正行為や犯罪の証拠を特定する技術**。
  - **法的証拠として活用できるよう、データの改ざんを防ぎながら調査を行う。**

  - デジタルフォレンジックスの4つのプロセス
    - 収集（Collection）
    - 検査（Examination）
    - 分析（Analysis）
    - 報告（Reporting）


  - 主なフォレンジック技術**
  | 技術 | 概要 |
  |------|------|
  | **ディスクフォレンジックス** | HDD/SSDのデータ取得・復元 |
  | **メモリフォレンジックス** | RAM上のプロセス・暗号鍵解析 |
  | **ネットワークフォレンジックス** | パケットキャプチャ・通信ログ解析 |
  | **モバイルフォレンジックス** | スマートフォン・タブレットの解析 |

- セキュアブート
  - コンピュータの起動時にOSの起動ファイルやドライバのデジタル署名を検証し起動プロセスを認証することでOSの起動前に不正なプログラムが実行されることを未然に防ぐ技術




### セキュリティ技術評価
- CVE(共通脆弱性識別子)
  - 一般に知られている個々の脆弱性ごとに採番された識別子
  - 世界各国の製品関連企業、セキュリティ関連企業、脆弱性検査ツール、脆弱性対策情報提供サービスで使用される
  - 採番の型式は[西暦年号]-[４桁以上の数字]

### セキュリティ実装技術
- セキュアOSを使用することで期待できるセキュリティ上の効果の要点
  - 強固なアクセス制御
    - 最小権限の原則に基づき、ユーザーやプロセスに必要最低限の権限を付与
    - 強制アクセス制御（MAC）により、アクセス権の変更を制限
    - ロールベースアクセス制御（RBAC）による役割ごとの権限管理
  - マルウェア対策
    - ホワイトリスト方式で許可されたプログラムのみ実行
    - コード署名検証により、改ざんされたプログラムの実行を防止
    - サンドボックス機能で、アプリケーションを隔離して実行
  - データの保護
    - 暗号化ファイルシステム（EFS）によるディスク上のデータ暗号化
    - 重要ファイルやプロセスの保護、整合性チェック機能の活用
  - 侵入検知・防御
    - IDS/IPSによる不正アクセスの検知と自動ブロック
    - セキュアブートにより、起動時の不正なカーネルやブートローダーを排除
    - ログの保護と監視で、不審な操作の早期発見
  - 攻撃耐性の向上
    - メモリ保護機能（DEP）により、バッファオーバーフロー攻撃を防止
    - アドレス空間配置のランダム化（ASLR）で、攻撃者の特定アドレス狙いを困難にする
    - プロセス分離によって、攻撃の影響範囲を限定

- DKIM(domainkeys identified)
  - 送信する電子メールのヘッダーと本文から生成さｓれるデジタル署名を送信者側で付与し、受信側のメールサーバーが送信側ドメインのＤＮＳサーバーに登録されている公開鍵を使用できるしてデジタル署名の検証を行うことで正当なメールサーバーから送られてきたことを確認する仕組み


## ソフトウェア
### オペレーティングシステム
-  **オペレーティングシステムの仮想記憶方式について**

    - 仮想記憶（Virtual Memory）とは、OSが物理メモリ（RAM）以上のメモリ空間を提供する仕組みのことです。主に**メモリ管理の効率化やプロセスの分離、アドレス空間の拡張**を目的としています。

---

-  **仮想記憶方式の特徴**
    - **物理メモリよりも大きなメモリ空間を提供**
    - **プロセスごとに独立したアドレス空間を確保**
    - **ページングやセグメンテーションを活用して効率的にメモリ管理**
    - **補助記憶（HDD/SSD）を活用して、スワップ領域として利用**

---

- **仮想記憶方式の主な方式**
    -  **1. ページング（Paging）**
        - **固定長のページ（Page）単位**でメモリ管理
        - 仮想メモリを一定サイズの**ページ**に分割し、物理メモリ上の**ページフレーム（Page Frame）** に対応付ける
        - **ページテーブル**を使用して、仮想アドレスと物理アドレスの対応関係を管理
        - **メリット**：
              - フラグメンテーション（メモリの断片化）が発生しにくい
              - 効率的なメモリ管理が可能
        - **デメリット**：
          - ページテーブルの管理が必要で、オーバーヘッドが発生する
          - ページフォールト（Page Fault）による処理遅延の可能性

---

-  **2. セグメンテーション（Segmentation）**
    - **可変長のセグメント（Segment）単位**でメモリ管理
    - プログラムを**論理的な単位（コード、データ、スタックなど）**に分割し、それぞれを異なるセグメントとして扱う
    - セグメントテーブルを使用して、仮想アドレスを物理メモリの適切な位置に対応付ける
        - **メリット**：
              - プログラムの論理構造を反映したメモリ管理が可能
              - メモリの使用効率を高められる
        - **デメリット**：
          - **外部フラグメンテーション（External Fragmentation）** が発生しやすい
          - セグメントの移動や再配置にコストがかかる

---

-  **3. ページング + セグメンテーション**
    - ページングとセグメンテーションを組み合わせた方式
    - **セグメント内でページングを適用**し、可変長のセグメントをさらにページ単位で分割
    - **メリット**：
        - **セグメンテーションの柔軟性**と**ページングの断片化防止**を両立
        - 効率的なメモリ管理が可能
    - **デメリット**：
        - 実装が複雑で、オーバーヘッドが大きくなる可能性がある

---

-  **仮想記憶における重要な概念**
  - **ページフォールト（Page Fault）**  
    - プロセスがアクセスしたページが物理メモリ上に存在しない場合、補助記憶（HDD/SSD）から読み込む処理
    - 頻発するとスワッピングが発生し、システムの処理速度が低下（スラッシング）
  
  - **スワッピング（Swapping）**  
    - 物理メモリが不足した際に、不要なページを補助記憶へ退避し、必要なページをロードする処理
    - メモリ管理の効率化に寄与するが、**過度に発生するとパフォーマンスが低下（スラッシング）** する
  
  - **スラッシング（Thrashing）**  
    - ページフォールトが多発し、CPUがメモリ管理に忙殺される状態
    - 適切な**ページ置換アルゴリズム（LRU, FIFO など）**を用いることで対策可能

---


| 仮想記憶方式 | 特徴 | メリット | デメリット |
|-------------|------|----------|------------|
| **ページング** | 固定長のページ単位で管理 | フラグメンテーションが少ない | ページテーブルの管理コスト |
| **セグメンテーション** | 可変長のセグメント単位で管理 | 論理的なメモリ管理が可能 | 外部フラグメンテーションの発生 |
| **ページング + セグメンテーション** | ページとセグメントを組み合わせる | 柔軟なメモリ管理 | 実装が複雑でオーバーヘッドが大きい |

仮想記憶方式は、**メモリ管理の最適化とプロセスの独立性を確保**するために重要な役割を果たしており、ページングやセグメンテーションを適切に活用することで、効率的なシステム運用が可能になります

## ソフトウェア開発管理技術
### 開発環境管理
- **サーバープロビジョニングツール**

  -  **概要**
     - **サーバープロビジョニングツール** とは、サーバーのセットアップ、構成管理、アプリケーションのデプロイを自動化するツール。
     - **インフラ構築の効率化・再現性向上・人的ミス削減** を目的とする。

  ---

  -  **主な機能**
    - *OS・ソフトウェアのインストール**  
    - *ネットワーク設定やセキュリティポリシーの適用**  
    - *設定の自動適用（Infrastructure as Code）**  
    - *スケールアウト・スケールインの自動化**  

  ---

  - **主なツール**
  | ツール | 特徴 | 主な用途 |
  |--------|------|--------|
  | **Terraform** | インフラ全体をコード化（IaC） | クラウド環境（AWS, Azure, GCP）の管理 |
  | **Ansible** | エージェントレスで設定管理 | サーバー構成管理・デプロイ |
  | **Chef** | Rubyベースの設定管理 | 大規模なインフラ管理 |
  | **Puppet** | 宣言的な構成管理 | サーバー構成の自動適用 |
  | **CloudFormation** | AWS専用のIaCツール | AWSインフラの管理 |
  | **SaltStack** | スケーラブルな構成管理 | 高速なプロビジョニング |

  ---

  -  **プロビジョニングの種類**
  1. **手動プロビジョニング**：管理者が手作業でセットアップ  
  2. **スクリプトベースプロビジョニング**：シェルスクリプトやPythonを使って自動化  
  3. **IaC（Infrastructure as Code）**：TerraformやAnsibleを利用し、設定をコード化  

  ---

  -  **メリット**
    - **一貫性のある環境構築**：同じ設定を複数のサーバーに適用可能
    - **デプロイの高速化**：環境構築の時間を短縮
    - **ヒューマンエラーの削減**：手作業によるミスを防ぐ
    - **スケーラビリティ向上**：必要に応じて自動的にサーバーを追加・削除

  ---

  -  **まとめ**
    - **サーバープロビジョニングツールは、サーバーのセットアップと管理を自動化するツール。**
    - **Terraform、Ansible、Chef、Puppetなどが代表的なツール。**
    - **Infrastructure as Code（IaC）を活用することで、環境構築の効率化と再現性向上が可能。**

### 知的財産適用管理
- 特許
  - 特許権の侵害となるのは特許発明を業として使用する場合のみ（個人的、家庭的な使用はOK）
  - 生産、使用、譲渡等、輸出、輸入または譲渡等の申し出をする行為を発明の実施と定義している
  - 特許権の存続期間は出願日から20年、存続期間延長登録制度で5年延長できる
  - 特許出願時に、内容を知らずに同じ技術を使用していたら、特許の出願者から実施許諾は不要

## データベース
### データ操作

- べき等
  - ある操作を1回実行しても複数回実行しても結果が同じになる性質

## ハードウェア
### ハードウェア

-  **LiDAR（Light Detection and Ranging）**

  - **概要**
    - **LiDAR（ライダー）** は、レーザー光を使って対象物までの距離を測定し、3Dマッピングを行う技術。
    - **光の反射時間（ToF: Time of Flight）** を利用し、物体の形状や地形を高精度に計測可能。

---

  -  **主な構成要素**
    - **レーザー発信機**：レーザー光を発射  
    - **受光センサー**：反射したレーザーを検出  
    - **タイミング回路**：光が往復する時間を測定し、距離を計算  
    - **制御システム**：データを処理し、3Dマップを生成 

- NOND回路
  - NOT ANDの名称でＡＮＤの逆を出力する
  - 2つの入力が１の時だけ0を出力しそれ以外は０を出力する

- Near Field Communication (NFC) 
  - 近距離無線通信技術の一つで、13.56MHz の周波数を使用し、数センチ以内の範囲でデータ通信を行う技術。

  - 通信の特徴
    - 通信距離: 数センチ以内
    - 通信速度: 106kbps, 212kbps, 424kbps
    - 通信方式:
      - アクティブ通信: 両方の機器が電波を発して通信
      - パッシブ通信: 片方が電磁誘導を利用して受動的に動作
    - 標準規格: ISO/IEC 14443, ISO/IEC 18092

  - 主な用途
    - 電子マネー: 交通系ICカード（Suica, PASMO など）、QRコード決済の認証
    - 入退室管理: 社員証、セキュリティカード
    - データ交換: スマートフォン間のデータ共有（Android Beam, Apple AirTag 連携）
    - IoT: スマートデバイスの認証

  - メリット
    - 物理的接触なしで認証・通信が可能
    - セキュリティが高く、スキミング対策が容易
    - 省電力で動作（パッシブモード）

  - デメリット
    - 通信距離が短いため、長距離通信には不向き
    - 通信速度が低いため、大容量データのやり取りには不向き

  - 関連技術
    - RFID: NFCの基盤技術で、広範な用途で利用
    - Bluetooth: NFCより通信距離が長く、ペアリングにNFCを利用することも可能
    - FeliCa: ソニーが開発したNFC Type-Fの技術で、日本の電子マネーに広く採用

## ネットワーク
### データ通信と制御

- PLC（電力線搬送通信）
  - 概要
  - **PLC（Power Line Communication, 電力線搬送通信）** は、**既存の電力線（電力配線）を使ってデータ通信を行う技術**。
  - **新たな配線工事が不要**であり、電力供給と通信を同時に行える。

### 通信プロトコル
- マルチキャスト
  - 1回の送信で特定のグループに属する複数のホストのいＩＰパケットを送信する方法

### ネットワーク応用
- テザリング
  - モバイル端末が持つ携帯回線などのインターネット接続機能を使ってほかのコンピュータや情報端末をインターネットへ接続すること
- ハンドオーバー
  - 無線LAN端末やモバイル端末を使用しながら移動するときに端末の場所に応じて通信する基地局やアクセスポイントを切り替えること
- フォールバック
  - 通信エリアや電波状況に応じてデータ通信網を5G->4Gなどにおとっして適切な回線に自動で切り替える技術
- ローミング
  - 契約している通信業者のサービスエリア外でもほかの事業者のサービスによってモバイル端末を使用できるサービス