応用情報技術者試験が難しい。。

1日サボってしまたのですが、頑張って学んだことをアプトプットしていこうと思います!

 

今日はH30年の秋の午後試験を解いたのですが、、個人的にめっちゃ難しかったです。

ちなみに、問題は以下に掲載されています。 

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30_2/2018h30a_ap_pm_qs.pdf

 

今の所、情報セキュリティ、プログラミング、データベース、ネットワークの4つを解いたのですが、

 

全体で4割取れていないくらいです。笑

 

特にプログラミングとデータベースが個人的にとても難しかったです。

 

最新の問題なので現状解説をしているサイトが乏しく、今回はこういった問題出たっていうことを自分で忘れないための備忘録として記述します。

 

プログラミング(ウェーブレット木)

初めて耳にしました。

ウェーブレット木は、2分木探索手法の一つです。文字列内の文字の出現頻度を集計する場合などに用いられます。

例を用いて説明していきます。

まず、「CTCGAGAGTA」という4種類の文字列があったとします。

この文字列中に「C」の文字はいくつあるかをカウントしていきます。

の前に、まずウェーブレット木の生成方法について理解しておきます。

ウェーブレット木の生成
  1. 文字の種類の数だけのbit長サイズを用意
  2. 各文字をビット列符号化
  3. 符号化した各文字のbit列に対して、ビット位置のビットをそれぞれ取り出す(ビット位置は「深さ+1」番目)
  4. 取り出したビットの列を元の文字列順に並べたものが、ノードのキー値
  5. 4で生成したキー値のうち、ビットの値が0と1の場合で分けて、そのビットを生成した対応文字を順番に並べて、新たな文字列を生成
  6. 3から繰り返して文字列の種類が1種類になると終了

具体的に以下に図で解説しておきます。

f:id:k12si:20190328032243p:plain

 

 それでは、ようやく「C」が文字列中にいくつ存在するのか調べる方法を紹介します。

ズバリ、対象文字列の符号化のbit列を順に「0」か「1」判断しノードを辿っていき、最終的に「葉」に辿り着いた時、その文字の出現回数がわかります。

つまり、以下のような感じです。

 

f:id:k12si:20190328035131p:plain

このとき、「C」bitサイズ分の回数だけノードで判定を行います。これは、生成方法「1」の文字列の種類分のbitサイズに相当します。

 

種類のbitサイズは以下のように考えていきます。

例)4種類 => bit列に直すには2進数に変換 => 2の何乗 => log24 => 2bit

 

したがって、文字の種類がσの時、1文字あたり「log2σ」箇所のノードで判定を行います。

 

また、文字列の長さをNとおいた時、

 

ウェーブレット木が保持するキー値のビット列の長さの総数は、最後の「葉」以外はどの深さの段階でもN個のキー値が存在するため

「Nlog2σ」となる。

 

最後の方の設問がわからなかった。

 

文字列をNとおいた時の計算量 =>「O(N × log2σ)」

わかる方がいればコメントしていただけると幸いです。

 

コードは以下です。

TIL/h30a_ap_pm3.rb at master · k12si/TIL · GitHub

 

ネットワーク

f:id:k12si:20190328035548p:plain

端末からロードバランサ(LB)経由でWebサーバ1,2,3のいずれかに接続する時、パケットの送信元アドレスはLB(172.16.10.5)に置き換えられると解答ではなっている。

!?!?。ど忘れしたのだが、TCP/IPってMacアドレスを次のホップ先に書き換えていくものではなかったっけ??🤔

IPアドレスも書き換えたっけ??となった。

送信元IPアドレスをLBに変更するのであれば、Webサーバからのレスポンスも一度LB経由になってしまうのだろうか?無駄な気が・・・。

というか、そもそもレスポンスって送信元IPアドレスを宛先IPアドレスに書き換えて送るものなのでは?これではリクエスト元の端末に届けられない気がする。

 

あまり自信がないので、*1調べてわかり次第、この記事を編集するつもりだが、コメントで教えていただければ幸いです。🙇‍♂️

 

ここにはIPアドレスは書き換えないという記述がある🤔)

 

データベースに関しては、ただただ知識不足だったので、本記事では特に取り上げません😇勉強しよう。。。

 

というわけで、今日はこの辺で。👋

 

 

*1:調査した結果、LBやProxy経由時に送信元IPはLBやProxyのI/FのIPアドレスに書き換えられることがあるらしい。「あるらしい」と述べたのは、そもそもLBの仕組み自体に送信元IPアドレスを書き換えるという動作はない。また、書き換えた際、正真の送信元IPアドレスXFFとういうHTTPヘッダフィールド内に記録させることがデファクトスタンダードらしい。これによりレスポンス送信時、宛先には正真のIPアドレスを設定可能である。しかし、そもそもなぜ送信元IPアドレスを書き換える必要があるのかがわからない😢