工学じじいの縁側日記

工学じじいの縁側日記

引退間際の工学じじいがきままに、プログラミングやデバイス、工学について呟きます。

【基本情報処理技術者試験】最新問題のテクノロジ系をまったり解く 問26~問31【令和元年度秋試験】

R01基本情報技術者試験 秋期試験に挑戦

f:id:gomta777:20191101011409p:plain

基本情報技術者試験(FE)の問題をまったり解いていきます。
IPAの資格試験は、過去問からの出題率が高く、確実に合格するためにはどの区分の試験を受けるにしても過去問学習は大事です。
また、独学でも受験可能ですが、用語が多く初めは戸惑うと思います。が、過去問を十分に学習することで合格点に届くラインまでは問題を解けるようになるとおもいます。今は、オンラインやWEBでもたくさんの解説ページがありますが、Webの情報はどこまでうのみにしていいのかわからない部分もありますので、一応書籍を1~3冊ほど買っておくと確実だと思います。

以下に、私のおすすめ書籍を挙げておきますので、よかったら参考にしてください。



キタミ式イラストIT塾 基本情報技術者 平成31/01年 (情報処理技術者試験)


最近話題のキタミ式です。解説に漫画や、図表が多く、ビジュアルで訴えてくれるので、繰り返し見ているうちに頭に残りやすいです。
ただ、Amazon等のレビューにもありますが、解説ってよりは用語の羅列とか辞書のような、書き方になっているので、大事なところがわかりづらいという意見も多いです。



平成31/01年 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室

こちらも有名な、栢木先生シリーズです。イメージはキタミ式と似ていて、図表を多く取り入れており、少し勉強したことがある人なら、頭に書いていることが残りやすいかもしれません。ただ、全くの初学者にとっては、謎の文字と図の羅列に見えてしまうことがありそうです。
現在新版の予約受付中のようです。


平成31年【春期】/01年【秋期】基本情報技術者 合格教本

後は、これを一冊リファレンスとして持っておけば大丈夫かと思います。
これ3冊そろえたら、たいてい合格できるんじゃない?って三兄弟です。
kindle版もありますので、ぜひ通勤途中や、通学途中にお気に入りの音楽でも聴きながら見てみてください!

それでは、問題解いていきまーす。

令和元年度 基本情報技術者試験 午前問題 問26~問31

令和元年度 基本情報技術者試験 午前問題 問26

”得点”表から、学生ごとに全科目の点数の平均を算出し、平均が80点以上の学生の学生番号とその平均点を求める。aに入れる適切な字句はどれか、実践の下線は主キーを表す。


得点(学生番号科目,点数)



[SQL文]

SELECT 学生番号, AVG(点数)
FROM 得点
GROUP BY [        a        ]



科目 HAVING AVG(点数) >= 80
科目 WHERE 点数 >= 80
学生番号 HAVING AVG(点数) >= 80
学生番号 WHERE 点数 >= 80





解説



SQL文の構文に関する問題です。
きっとこんな票があるんだと思います。

表:得点

学籍番号 科目 点数
1001 国語 95
1001 数学 65
1001 英語 80
1002 国語 60
1002 数学 80
1002 英語 50
1003 国語 100
1003 数学 90
1003 英語 95

んで、これから、学籍番号別の、平均点を求めて、

学籍番号 avg(点数)
1001 80.0000
1002 63.3333
1003 95.0000

その中で平均点が80点以上の人を表示する。

学籍番号 avg(点数)
1001 80.0000
1003 95.0000

集計内容に対して、条件を指定するのは
HAVING句
なので、HAVINGで、条件を指定している「ウ」が正解です。

実際やってみます。

mysql> create table tokuten( stuID int, class nchar(20), score int ); 
mysql> insert into tokuten values(1001, "国語", 95); 
mysql> insert into tokuten values(1001, "数学", 65); 
mysql> insert into tokuten values(1001, "英語", 80); 
mysql> insert into tokuten values(1002, "国語", 60); 
mysql> insert into tokuten values(1002, "数学", 80); 
mysql> insert into tokuten values(1002, "英語", 50);
mysql> insert into tokuten values(1003, "国語",100); 
mysql> insert into tokuten values(1003, "数学", 90); 
mysql> insert into tokuten values(1003, "英語", 95);

mysql> select * from tokuten order by stuID,class;
+-------+--------+-------+
| stuID | class  | score |
+-------+--------+-------+
|  1001 | 国語   |    95 |
|  1001 | 数学   |    65 |
|  1001 | 英語   |    80 |
|  1002 | 国語   |    60 |
|  1002 | 数学   |    80 |
|  1002 | 英語   |    50 |
|  1003 | 国語   |   100 |
|  1003 | 数学   |    90 |
|  1003 | 英語   |    95 |
+-------+--------+-------+
9 rows in set (0.00 sec)

mysql> select avg(score) from tokuten;
+------------+
| avg(score) |
+------------+
|    79.4444 |
+------------+
1 row in set (0.00 sec)

mysql> select avg(score) from tokuten group by class;
+------------+
| avg(score) |
+------------+
|    75.0000 |
|    85.0000 |
|    78.3333 |
+------------+
3 rows in set (0.00 sec)

mysql> select  class,avg(score) from tokuten group by class;
+--------+------------+
| class  | avg(score) |
+--------+------------+
| 英語   |    75.0000 |
| 国語   |    85.0000 |
| 数学   |    78.3333 |
+--------+------------+
3 rows in set (0.00 sec)

mysql> select stuID, avg(score) from tokuten
    -> group by stuID having avg(score) >= 80;
+-------+------------+
| stuID | avg(score) |
+-------+------------+
|  1001 |    80.0000 |
|  1003 |    95.0000 |
+-------+------------+
2 rows in set (0.00 sec)

mysql>

ほかのはエラーになるので試さなくていいですよね。



令和元年度 基本情報技術者試験 午前問題 問27

関係モデルにおいて、関係から特定の属性だけを取り出す演算はどれか。


結合(join)
射影(projection)
選択(selection)
和(union)




解説

データベースなどの関係モデルの操作に関する問題です。

属性 表の列(カラム)のこと
結合(join) 複数のテーブルを結合する操作、内部結合と外部結合がある
射影(projection) 条件指定した列(カラム)を抽出する操作
選択(selection) 条件指定した行を抽出する操作
和(union) selectの結果を1つに統合する操作


ということで、正解は「イ」




令和元年度 基本情報技術者試験 午前問題 問28

一つのトランザクショントランザクションを開始した後、五つの状態(アクティブ、アボート処理、アボート済、コミット処理中、コミット済み)を取り得るものとする。このとき、とることのない状態遷移はどれか。




 \begin{array}{|c|c|c|} \hline
{} & 遷移前の状態 & 遷移後の状態 \\ \hline
ア & アボート処理中 & アボート済 \\ \hline
イ & アボート処理中 & コミット処理中 \\ \hline
ウ & コミット処理中 & アボート処理中 \\ \hline
エ & コミット処理中 & コミット済 \\ \hline
\end{array}



解説

トランザクション処理の順番を問う問題です。
トランザクション処理では、いわゆるACIDプロパティを保つために、その操作は必ずすべて成功、または失敗しなければなりません。
アボートは、トランザクション処理中に何か異常があったり、処理が失敗した場合に、処理を終了させます。
アボートが起こると、その時行われたすべての更新を廃棄し、ロールバックが起こります。
コミットは、そのトランザクションのこれまでの一連の操作や変更を確定させる処理です。

このことを踏まえると、アボート処理中の後にアボートが完了することなくコミット処理へ移行することはないのは必然的にわかります。ってことで、答えは「イ」

令和元年度 基本情報技術者試験 午前問題 問29

2層ロッキングプロトコルに従ってロックを獲得するトランザクションA、Bを図のように同時実行した場合に、デッドロックが発生しないデータ処理順序はどれか。ここで、readとupdateの位置は、アプリケーションプログラムでの命令発行時点を表す。また、データWへのreadは共有ロックを要求し、データX、Y、Zへのupdateは各データへの専有ロックを要求する。


 \begin{array}{ccc} 
 R(x)&:& xへのread要求 \\
 U(x)&:&xへのupdate要求
\end{array}

 \begin{array}{|c|c|c|c|c|} \hline
{}&①&②&③&④ \\  \hline
ア & R(W) & U(Y) & U(X) & U(Z) \\ \hline
イ & R(W) & U(Y) & U(Z) & U(X) \\ \hline
ウ & U(X) & R(W) & U(Y) & U(Z) \\ \hline
エ & U(Y) & U(Z) & U(X) & R(W) \\ \hline
\end{array}


解説

分散処理や、データベースのトランザクションで使われる2層ロックの問題です。
2層ロックは、

共有ロック(Readロック):読み込みのみを、要求のあったトランザクションすべてに許すロック
専有ロック(Writeロック):ロックしたトランザクションのみが読み書きできる排他的なロック

を用いて、2つのトランザクションを並列的に実行する手法です。
共有ロックは、他社がロックしているものを、ほかの処理がロックしてデータの読み込みのみできますが、専有ロックされると、ロックした処理以外は、そのロックが解除されるまでオブジェクトにアクセスできません。

図1:ロックの共有可能 図2:デッドロック発生

図2では、TAがXを先にロックし、その後Yをロックしようとしていますが、
すでに、その時点ではTBがYをロックしているため、TBの処理が終了するのを待つことになります。
さらに、TBはその後、Xをロックしようとしていますが、XはすでにTAがロックしてしまっているので、TAのしょりが終了するのを待つことになります。このように、お互いがお互いの処理を待つ状態になりデッドロックが起こります。

選択肢を時系列順に並べて比べてみます。

さっきの図1と同じ状況が起こっているので、デッドロック発生する処理です。

これもお互いに待ち状態が発生しているので、デッドロックします。

この処理の流れだと、終わった順に順次処理が行われていくので、デッドロックが起こりません。

デッドロックのサンプルと同様、お互いがお互いを待ってますね。

正解は「ウ」ですね。




令和元年度 基本情報技術者試験 午前問題 問30

10Mビット/秒の回線で接続された端末間で、平均1Mバイトのファイルを、10秒ごとに転送するときの回線利用率は何%か。ここで、ファイルの転送時には、転送量の20%が制御情報として付加されるものとし、1Mビット=10ビットとする


1.2 6.4 8.0 9.6
解説

ファイル転送量の問題ですが、どっちかっていうとbitとbyteでミスを誘う問題です。

端末間の回線は
10Mbit/s

10秒に1度 1Mbyteのデータを送信
データ送信には転送量の20%の制御情報が付加される。
10秒に1度 1Mbyte+1Mbyte×0.2=(1+0.2)×8Mbit=9.6Mbit(bitに直してある)
のデータが流れます。
これを1秒当たりに直すと、
9.6÷10=0.96Mbit/s

データ量/回線速度 =0.96/10=0.096
百分率に直して9.6%

「エ」が正解


令和元年度 基本情報技術者試験 午前問題 問31

CSMA/CD方式のLANに接続されたノードの送信動作として、適切なものはどれか。

各ノードに論理的な順位付けを行い、送信権を順次受け渡し、これを受け取ったノードだけが送信を行う。
各ノードは伝送媒体が使用中かどうかを調べ、使用中でなければ送信を行う。衝突を検出したらランダムな時間の経過後に再度送信を行う。
各ノードを環状に接続して、送信権を制御するための特殊なフレームを巡回させ、これを受け取ったノードだけが送信を行う。
タイムスロットを割り当てられたノードだけが送信を行う。





解説
各ノードに論理的な順位付けを行い、送信権を順次受け渡し、これを受け取ったノードだけが送信を行う。

名前があるかわかりませんが、優先制御の説明です。QoSとかの説明でよく見かけます。多分正解じゃないと思います。

各ノードは伝送媒体が使用中かどうかを調べ、使用中でなければ送信を行う。衝突を検出したらランダムな時間の経過後に再度送信を行う。

CSMA/CD方式の説明です。単純な制御方式で効率よく回線を共用できるのが利点だけど、端末の台数の増加とともに急激に性能が落ちるのが知られている。

各ノードを環状に接続して、送信権を制御するための特殊なフレームを巡回させ、これを受け取ったノードだけが送信を行う。

多分、トークンパッシング方式の説明です。円環状にノードを接続し、データの送信権を表すトークンと呼ばれる信号がリング上を高速で周回しており、送信したい端末はこれを取得して送信を開始する。送信が終わるとトークンを再び放流し、別の端末が送信できるようにすることで、ネットワークの衝突を防ぎます。

タイムスロットを割り当てられたノードだけが送信を行う。

TDMA(Time Division Multipule Access:時分割多重接続)方式の説明です。データ送信を一定時間間隔で分割して、その分割された単位(スロット)を各ノードに与えることでアクセス制御を行う方式である。

正解は「イ」です。





次回予告

これで31問目、ちょっと中途半端な問題数での更新になってしまいました。
試験解説をブログでしている人は結構いますが、あっちのサイトには解説ないかもよ?
こっちで解説見ていってくださいね(笑)


良かったら、押してください!↓↓↓
にほんブログ村 科学ブログ コンピュータサイエンスへ
にほんブログ村