応用情報受けたぞ！ITパスポートも基本情報もないけど！(令和6年度春季)

# ※2024-07-04追記

自己採点通りオーバーキルで合格でした！やったね！

午前 83.75点 (合格基準60点)
午後 87.00点 (合格基準60点)

※↑追記ここまで↑

# はじめに

2024年4月21日(日)にIPAの応用情報技術者試験を受けてきました！

誰かの参考になるかも知れないので、覚えてるうちに記事化して情報を残しておこうと思います。

ITパスポートも基本情報も持ってませんが、こういうのは得意だってところを見せてやろうと思いまして、はじめから応用情報に挑戦。

# 一応スペック

塾・予備校講師(物理・数学)8年生、男

髪はみじ噛め、通勤時はワックス使用

身長：普通　体重：普通

得意科目：物理・数学

### 応用情報に役に立ちそうな経験・資格

 - 大学で情報系やビジネス・経済系の授業をいくつか受けた
 - BtoBのITベンチャーで正社員1.5年
 - 統計検定 準一級
 - 日商簿記 三級
 - AtCoder水色(Rust)
 - 個人開発でWebアプリとかスマホアプリとか作った
 - 「暗号技術入門(結城浩)」を読破していて知識あり

# 勉強期間
2023年12月に急に思いたちましたが、この時期は仕事が繁忙期なので、勉強自体を始めたのは2024年1月16日です。

https://twitter.com/agajo/status/1747219856297177154

それから4月21日までなので、ほぼ3ヶ月ですね。

ちなみに、こういう強気ツイートで大々的に宣言することは、モチベーション維持に大変効果的です。マジでオススメ。

# 勉強方法

## 進捗管理

私は自力でタスクをこなすことが非常に苦手な先延ばし人間なので、進捗管理は工夫しました。

友達2人に「なんか資格取ろうぜ」と声をかけ、共有スプレッドシートを作って計画・進捗と勉強ノートを互いに見られるようにしました。

これで「サボってるとバレる」という状況を作り出します。

## テキスト

 **情報処理教科書 応用情報技術者 テキスト＆問題集 2024年版[Kindle 版]** 
 **日高 哲郎** 

を一通りやりました。

網羅型の分厚い奴であればどれでもいいと思います。

ただ、分厚くて実物の本を持ち歩くのが嫌だったので、私はKindle版。

選ぶときは、いくつかサンプルをダウンロードして、好みで選びました。

各小単元に午前問題の過去問が、章末には午後問題の過去問が付いていて、理解度の確認と問題演習を一定頻度で出来たのがとても良かったですね。

問題やらずにひたすらテキスト読んでるとあまり記憶に残らないので。
 
## 過去問

過去問演習は下記のような感じ。

 - テキストに載っていた1回分(午前・午後。午後の選択問題は全て)
 - 午前問題をもう1回分
 - 午後問題のもう1回分は、大問1つやっただけで終了
 - 直前2日間は過去問道場で、直近5年分の午前問題をランダム出題で100問ほど

解いた過去問としては、これらと、テキストの各章に個別で載っていたもの、ということになります。

過去問は午前午後とも3回分程度やろうと思っていたのですが、この辺はダラダラ癖が出ましたね…。

## 直前期

直前2日間について。

「午後問題の記述力は今更上がらないだろうから、午前問題をひたすら回して知識を増やせるだけ増やすべき」と判断し、午前問題をひたすら回していました。

過去問道場マジ便利。

https://www.ap-siken.com/apkakomon.php

当然ですが、間違えた所や勘で当てた所はきちんと調べて、知識を確実なものにします。

# 選択問題の戦略

https://twitter.com/agajo/status/1776231297658298487


自分の得意分野を活かすなら9問目以降のマネジメント問題は選択肢に入らない。

また、4問目のシステムアーキテクチャは実は自分があまり通ってきていない分野であることがわかり、候補から外しました。

最終的に

第一候補
 - 経営戦略
 - ネットワーク
 - 組込みシステム開発
 - 情報システム開発

第二候補
 - プログラミング
 - データベース

という構えで挑むことに。

プログラミングとデータベースは間違いなく武器になるだろうと思われていたのですが…

実際過去問をやってみると、他人の書いたソースコードを読解してアルゴリズムを把握するのは案外時間がかかり、またSQLの知識に結構穴があることがわかり、第二候補に格下げになりました。

# 本番の時間管理

時間管理は自分の腕時計を机に置いてやりました(時計忘れが多いらしいので皆さん気をつけてくださいね！！)

午後は1問30分で切ればいいのでわかりやすいです。

午前については、16問を30分でやるのを5回繰り返しました。

16,32,48,64,80問目で切るということですね。わかりやすくていいと思います。

区切りでの時間確認を忘れないように、試験開始直後にこれらの問題のところに区切り線を書いてから解き始めました。

# 本番の結果

ではここからは本番の結果を載せていきます。

## 午前の結果

正解数 67/80
正解率 83.75%

午後の問題を採点してもらうために必要な正解率は6割でして、48問正解すればいいわけなので、これはオーバーキルですね。よくできました。

解いた直後に自分の自信をもとに正解数の期待値を出したのですが、それが「66問正解」だったので、かなりの精度で出来を分析できていたようです。

## 午後の結果

まず選択問題ですが、第3問に「ダイクストラ法」の文字を見て、選択決定しました。

AtCoderで何回書いたと思ってるんだ。

代わりに犠牲となったのは第2問の経営戦略。やれば取れたかも知れないけど、やってないのでわかりません。

で、配点はわかりませんが、小問の正解数だけ書いていくと…

第1問 7/8
第3問 9/9
第5問 9/10
第7問 8/8
第8問 6.5/8

大問の配点は全部20%ずつとして、かつ、各大問内での小問の配点を全部同じにして全体の得点率を出すと…

91.75%

午後問題も6割で合格なので、完全にオーバーキルですね。配点が多少違ったとしても、絶対受かってると思います。


## 完走した感想

ひとまず受かってそうで嬉しいです。

大学くらいから今にいたるまでやってきた、ビジネス・プログラミング・簿記などが綺麗に試験範囲になっていて、自分にとってはかなり有利な試験でした。

これで一つ証明になるので、なんかに使っていこうと思います。


# 間違えた問題全復習

ではここから、この記事の最後まで、間違えた問題を全部復習していきます。

## 午前の復習


「ノンプリエンプティブ」は、OSがタスクに対して、実行権限割り当て管理をしてあげない、っていう感じですね。タスクたちが各自で実行検眼の譲り合いをしてね。

データウェアハウスのスタースキーマは、真ん中のファクトテーブルにトランザクションデータを溜めていく。

IPアドレス208.77.188.166はグローバルアドレス。先頭のビットを見るとクラスを判定できるとのこと。普通に知らなかったか、完全に忘れてるわ。

ルータを冗長化するプロトコルはVRRP(Virtual Router Redundancy Protocol)。「Router」「Redundant」「Protocol」は読めたのでRが2個入ってPで終わるやつということで2択までは絞ったけど、RARPはReverse Address Resolution Protocolだそうです。MACアドレスからIPアドレスを求める時に使う。

PSIRTはマジで知らん。Product Security Incident Response Team。自社製品のセキュリティインシデントに対してなんかするらしい。

「リスク特定」はリスクを探す段階なので、まず「自分たちが何を持っているか」を把握して、それらに降りかかる悪しき事態の可能性を列挙していくわけか。

WAFは完全に忘れましたね！IT企業時代に扱ってたのに！Web Application Firewallか〜。じゃあREST APIだわ〜。

SPF(Sender Policy Framework)は前日か前々日に仕入れた言葉だったけど、きちんと内容を思い出せず。デジタル署名まではしませんね。メールの送信元が正しいIPアドレスをDNSサーバーに登録してくれてるので、受信側ではそれをチェックすればいいというやつ。

ゴンペルツ曲線はまだ理解できてないぞ？最初が一番バグが出るんちゃうんか？？？

リーンソフトウェア開発では、バリューストリームマップを作って無駄を省く。ふ〜ん…。こういう意識高そうな「◯◯マップで本質を見抜く」みたいな奴あんま好きじゃないんだよな…。まあKJ法とかマインドマッピングとか個人でもやるけどさ。ちなみに私が選んだバーンダウンチャートはタスク量と時間を管理するグラフ。

「リスク管理」はその名のイメージの通り、一番広い奴を選んどけばよかった。

システム監査の対象は、情報システムのマネジメント、コントロールだけでなく、ガバナンスまで及ぶ。大枠の考え方まで、ちゃんとしてるか監査しますよということ。ところで「マネジメント」と「コントロール」は何が違うん？

マスカスタマイゼーションは、顧客一人ひとりに合わせながらも大量生産する奴。

## 午後の復習

公式解答がないので、こちらの掲示板を参考に自分で判定してみます。

https://www.ap-siken.com/apbbs.php

### 第1問 情報セキュリティ

正解数 7/8

「二段階認証」って書いちゃいましたね。「二要素認証」か「多要素認証」が正しそうです。知識情報と所持情報ってわざわざ書いてあるから、そうだろうな。1ミリも疑問に思わなかった…。

あとは全問正解。「ゼロトラスト」はマジでよく思い出した。

### 第3問 プログラミング

正解数 9/9

文句なしパーフェクトです。AtCoderでやりまくったのでね！

本文の実装だと計算量がO(N²)でしたが、本来はpriority_queueを使ってO(NlogN)まで落とせるアルゴリズムですね(頂点数と辺の数が同程度の場合)。

### 第5問 ネットワーク

正解数 9/10

MQTTなんて知らね〜〜〜〜 IoTなどの最近の話題についてもうちょっと深堀っとけということですね。TCP上で、HTTPの代わりに使われるらしいです。へ〜。

あとはパーフェクトでした。

設問1(1)cの「TCP/443」はよく推測した！

HTTPSを使うと書いてあるけど、HTTPSとTCPは同じ階層の概念じゃないからこの場面で「HTTPS」という答えはおかしい。となるとポート番号の方でHTTPSプロトコルを指し示してるはず。でもそんな番号覚えてない。という所で、表の項番2に「TCP/443」とあることに気づく。この通信は本文によるとプロトコルを制限してるらしいので、それがHTTPSであると推測した。

今調べたけど、HTTPSで用いるポート番号は443らしいですね。よって正解。素晴らしい。


### 第7問 組込みシステム

正解数 8/8

今回の問題の中で一番好きだった。コンビニにあるコーヒーメーカーの状態遷移を考える問題。面白い。

パーフェクト判定にしましたが、最後の問題の答えが掲示板でも割れてて確証がないですね…。

「カップ判定完了とほぼ同時にドアが開けられた場合、中止完了通知より先に判定結果が来ちゃう可能性がある」と考えて、「判定結果」が正解だと思います。カップ判定タスクは「中止」を受け取るより先にカップ判定を終えていて、受け取った「中止」は無視される。本文にわざわざこの旨が書かれてる理由も説明がつく。

### 第8問 情報システム開発

正解数 6.5/8

時間がギリギリで、最後の記述二つはかなり急いで書いてしまった。

結果、最後から2番目の記述(設問5)はかなりトンチンカンなこと書いてしまった。そうか引数にオブジェクト渡さなきゃだめですね。わかって見ると下線部の直前にめっちゃ親切な誘導文が付いてますね。

最後の記述(設問6)は掲示板でも答えがハッキリしませんが、同じようなことを書いてる方がいたので0.5正解でカウントしました。

「複数のSubjectオブジェクトの更新対象になっている」でいいんじゃないかな…。一回のデータ更新で複数のSubjectオブジェクトが更新されるけど、一つSubjectオブジェクトが更新されるたびにViewが更新されるのが問題なので。

この辺はFlutterやReactでアプリ開発してた経験が活きたな。これらのフレームワークはまさにこの問題の最後の工夫のようなことをやってる。画面更新の内容を溜める場所を作っておいて、更新機会が来たら一度にまとめてやる。