ITパスポートすら持ってないけど応用情報一発合格を目指す(5章:ソフトウェア)
暑くなってきましたね。なかなか外に出かけられませんが、時間を大事に今日も今日とてお勉強しております。先日から勉強している応用情報技術者試験対策、ようやく5章まで終わりました。(実は7章まで終わっているのですが、更新していませんでした笑)
ここまでの進捗をまとめます。
前回はこちら
- 応用情報技術者試験、勉強しているよ!という方
- 資格取得に向けて勉強中だよ!という方
5章:ソフトウェア
ややこしい単語たち
割と暗記力が試される章ですね。似たような響きのカタカナが多いので、すごく紛らわしいです。個人的に1度じゃ覚えられないなと思ったものはこちら。
スプーリング機能:ジョブ管理で登場。スループット向上に役立つ
スラッシング:ページングしすぎてオーバヘッド増加する現象
トレーサ:テストツール。プログラム中の誤り個所を特定出来ないときに
アサーションチェッカ:アサーションと呼ばれる条件を挿入して正当性検証
カバレージツール:ソースコードの経路のうちどれだけ網羅出来たか
プロファイラ:メモリやCPU使用率など、性能改善のための分析
読んでいるうちは分かりますが、選択式で出題されたら結構迷いそうですね。カタカナだと意味が入ってこないというか、こういうときは漢字がいいなと思います。
疑問
排他制御の話。クリティカルセクションに同時にアクセスしてしまうと、整合性のない結果を引き起こすから、同時処理しないように~というような記載があります。この処理部分をクリティカルセクションというそうですが、なんだかこの「整合性を取るために同時処理しない」という文言に既視感。
2値セマフォとそれを操作するP操作、V操作がもはや暗記?一応フローチャート的なものはありますが…。レストランの空席(空席の数はS)で例えるとして、お客さんが入ってきたらP、出ていったらVっていうことでいいのかな?S=0の時はwaitingで。
感想
組み込みシステムに関連する業務についていたら、興味がある人が専攻するようなカテゴリに感じます。試験対策としては暗記メインになりそうなので、過去問題の頻出箇所とその周辺を重点的に(こまめに)読む形で対策すればいけそう。
ここに時間を割くよりは、待ち行列とか稼働率の計算練習に回すべきかな。
最後までご覧いただき本当にありがとうございました。
もしこの記事が皆さまのご参考になりましたら、ブログ村にて応援いただけると大変勇気づけられます!よろしくお願いいたします。
にほんブログ村
【待ち行列】ITパスポートすら持ってないけど応用情報合格を目指す(8-12日目)
お疲れ様です。やっと4章(システム構成要素)まで終了しました!ここまでの勉強期間は大体2週間弱。まずまず順調かな。
この章では待ち行列や稼働率の計算問題を重点的に学習しました。待ち行列という概念は初めてでしたが、素人なりにイメージを持ちながら理解できたと思います。ポアソン分布と指数分布について、どっちがどっちかを覚えなければいけないのですが、せっかくなので、素人だからこその視点でイメージをまとめてみます。
待ち行列
待ち行列とは
待ち行列とは、確率モデルに基づく理論です。トランザクションの入力される間隔と、サービスを受ける時間とを確率論で考え、平均どのくらいの待ち時間が発生するか、という理論です。
コンビニをイメージしよう
文字にすると頭が痛くなりそうですが、コンビニのレジで例えると分かりやすいですね。コンビニで買い物をするとき、商品を選んでからレジに並びますよね。レジに並ぶ人の数は、ある時は自分が先頭ですんなり並べたり、ある時は4,5人一斉に並びだして待たされたり、まちまちです。
また、お会計にかかる時間も人それぞれです。コーヒーを買うだけなら30秒もかからないですが、友達とお泊り回の買い出し!ともなれば3分以上かかってしまうかもしれません。
待ち行列はこれでイメージすると楽ちんですね!トランザクションは処理する必要のあるもの、つまりコンビニで言えばレジに並ぶお客さんです。一方平均サービス時間はレジに商品を運んでからレシートを受け取るまでです。
〇〇率・〇〇間隔は単位で覚えよう
平均到着率 λ(ラムダ) や 平均サービス率 μ(ミュー) といった記号だと覚えづらい人もいるかもしれません。使う記号としてはこれにρ(ロー)が入るくらいなので少ないのですが、たちが悪いのが逆数を組み合わせて考えないといけない、ということですよね。逆数にするだけで○○時間になったり〇〇間隔になったりと意味がまるっきり変わります。
それぞれを1:1でリンクさせて覚えると、記号自体に意味がないので、記憶に定着しづらいです。ここはしっかり単位で覚えましょう。
平均到着率 λ は、「時間で平均を取ったら、何人のお客さんが到着するか」という意味ですので、単位は 「人 / 時間」となります。
一方、平均サービス率 μ は、「時間で平均を取ったら、何人の会計をさばけるか」という意味ですので、単位は「人 / 時間」となります。
こうして見てみると、覚えることは3つだけです。
心なしか、λは人に見えますね。どんな計算問題が出てきても、あとは単位を考えながら逆数にする必要があるのかないのか考えるだけです。
ポアソン分布と指数分布
ポアソン分布
(Wikipediaより引用)
離散的な事象をとらえる特定の・・・
ということのようですが、詳しいことは分かりません。笑 ただ、ある確立に従ってある部分でピークを取り、かつそれが正規分布でないというようなイメージで理解しました。
応用情報技術者の試験で出てくるところとしては、「到着率はポアソン分布に従う」というキーワードです。
指数分布
(Wikipediaより引用)
ポアソン過程に従う事象・・・
ということのようですが、ごめんなさい、これも学術的な理解を求められる方のご期待には沿えそうにありません。ただまあ、これはなんとなく指数分布という名前からイメージしやすいですね。
応用情報技術者の試験に出てくるところとしては、「サービス時間は指数分布に従う」というキーワードです。
分布は「来客ピーク」と「レジ処理時間」で覚えよう
到着率はポアソン分布、到着間隔は指数分布というのも、文字だけだと覚えづらいですよね。そんな時はこちらもイメージで覚えてしまいましょう。
まずポアソン分布です。こちらはずばり「来客ピーク」を使うと覚えやすいです。まず縦軸には「お客さんが100人以上入ってくる確率」、横軸には「0時~24時」を取ります。コンビニを利用する人が最も多くなる時間は、朝の通勤ラッシュ時間帯ですね。そのイメージの通り、グラフのピークが左寄りに出ています。一方で深夜になるとお客さんも減り、さすがに100人以上入ってくることもほぼないでしょうから、確率としては0に近くなっています。「来客間隔(頻度)は、ある特定の時間にピークを迎える」というイメージを持つことで、到着率=ポアソン分布と紐づけて覚えられます。
次に指数分布です。こちらは「レジ処理時間」のイメージです。縦軸には「1分以内にレジを打ち終える確率」、横軸には「商品の数」を取ってみましょう。商品の数が0個に近ければ近いほど、レジを打ち終える時間は短くなります。一方で10個も20個も持ってこられてしまうと、1分以内でレジを打ち終える確率はどんどん低くなりますね。このイメージで、サービス時間=指数分布と紐づけて覚えてしまいましょう。
まとめ:身近なイメージで理解
いかがでしたでしょうか。今回は待ち行列とポアソン分布、指数分布について、素人目線で理解したイメージを紹介しました。まだまだ先は長い勉強ですから、さらに効率よく勉強していけるように頑張ります。
前回はこちら
次回はこちら
ここまでの累計勉強時間は 20 時間
【応用情報/7日目】2章まで終了!今さら2次元配列を知る。
今日もお疲れ様です。記述問題の洗礼をあびながら、やっと2章まで終えました。秋期試験を見据え、まずまずのペースでしょうか。今回は2章の章末問題で出てきて今さらながら理解できた2次元配列をテーマに書いていきます。
(目安:1分)
【目次】
2次元配列
2次元配列とは?
文字通り配列の一種で、それぞれの要素が行と列で指定できるものです。配列が線だったのに対して、面になったのねーというようなイメージでしたが、まあ概ねその通りだったかな。
(ちなみにgoogleで"2次元配列"を検索すると、トップには2004年に作成されたページが出てききて少し笑いました。当たり前ですがそんなに前からプログラミングを勉強してかつインターネット上に公開している人がいることに驚きました。先駆者たちすごいです。)
余談:行と列の覚え方
高校数学で数Ⅲをとっていなかったので、行列に直接であったのは基本情報の勉強を開始してからでした。それまで行列について唯一知っていたことは、行列のタテヨコの覚え方のみでした。せっかくなので共有します。
エクセルで例えると分かりやすいと思いますのでエクセルで。
「行」を漢字で書くときに、4画目と5画目で横に2本しゅしゅっと書きますね。一方「列」の場合は、5画目と6画目で縦に2本しゅしゅっと書きます。つまり、エクセルでいうところの「行を増やす」というのは、1,2,3・・・と数字のほうに新しく1行追加するということで、列の場合ならA,B,C・・・とアルファベットの方に1列足す、ということを指します。
このイメージで覚えると一瞬で覚えられます。高校時代に数Ⅲをとっている友人に雑談の中で教えてもらった覚え方が、こんなところで役に立つとは思いませんでした。ありがとう!
参考図書はこちら
|
2次元配列の要素の指定
ここに2次元配列 X[ [ 0 , 1 ] [ 2 , 3 ] [ 4 , 5 ] [ 6 , 7 ] ] を考えます。
1次元の配列の時のように、それぞれの配列を取り出すときの指定方法は、
X [ 0 ] や X [ 2 ] のようになりますね( X [ 0 ] は [ 0 , 1 ]、X [ 2 ] は [ 4 , 5 ] )。
この場合ですと、2次元配列から1次元配列を呼び出した形になっています。
では2次元配列から個々の要素を呼び出すにはどうしたらいいでしょうか?2章の章末問題で躓いたところはここでした。
例えば4のみを呼び出したい場合は、
X [ 2 ] [ 0 ]
とすることで呼び出すことが出来ます。2個並べるのかー、なるほどね!
応用情報のテキストには、この辺の基礎的な情報が解説されていませんので、初心者には少し時間のかかる部分もありますね。
まとめ:自分で気づくと記憶に残る
検索すれば、この程度のことであればすぐに解法が見つかります。ただ、30分くらいテキストとにらめっこして自分で気づくと、ものすごく気持ちがいいですし記憶にもしっかり残りますね。秋期の試験まではまだ半年近くあるので、テスト対策だけの勉強にせず、考えながら応用力を培う勉強を継続したいと思います。
ここまでの累計勉強時間は 11 時間!
【応用情報/5-6日目】初めての記述式問題で気づいた、午後試験に必要な勉強法
今日もお疲れ様です。いよいよ主要都市部では3回目の緊急事態宣言が発出されることになってしまいました。1年越しのGWのお出かけ、楽しみにしていましたので残念です。とはいえ暗い気持ちのままだらだらと過ごすわけにもいきません!せっかく家にいる時間が増えたのですからがっつり勉強しましょう。ということで応用情報技術者試験に向けた勉強にがつがつ取り組み、この土日で2章まで終わらせましたので備忘録ということも含めてまとめてみます。
2章:アルゴリズムとプログラミング
2章の中身には、木構造やキュー・スタックなど、基礎理論よりも少しプログラミングらしい内容が盛りだくさんです。全体を通して用語の暗記力が求められる部分が多いですが、木構造については仕組みを理解していないと解けない領域ですね。
さすが応用情報というだけあって、用語の解説も深みが増しています。似たような言語も多いので、この辺りは何度も読み返しながら覚えていくのがいいかもしれませんね。
基本情報のテキストを読んでよかったと思うところ
逆ポーランド表記の解説
応用情報技術者試験 合格教本の解説を見ると、「逆ポーランド表記で表された式は、スタックを用いて…」という記載があります。数式を例に開設されているのですが、おそらく初見がこれだったらよく理解できなかったかと思います。
例えば
2 3 + 8 *という式があった場合、基本情報技術者のテキストに書かれていた記載で考えると分かりやすいと思います。要は
「スタックである」
「演算子を読み込んだら2個取り出して計算する」
「そしてスタックにPUSHする」」
ということですよね。2個取り出して計算するという解説が、今思うと分かりやすくていいですね
整列アルゴリズム 比較回数nの解説
整列アルゴリズムの節では、整列法とその特徴を解説しています。この説では各整列法の計算量Oや比較回数nという考え方が出てきますね。
応用情報の合格教本によると、単純挿入法の全比較回数は
最悪:n(n-1)/2
最良:n-1
と脇の方にちょこんと書いてあるだけです。これは初見だったら「覚えるしかないのか!」ってなっていたと思います。
慌てて基本情報のテキストを開きました。基本情報には、このn(n-1)/2の導き出し方が解説されています。
データがN個あります。このN個のデータに対して、(N-1)回の比較を行います。
データがFIXされたら、次は(N-1)個のデータに対して、(N-2)回の比較を行います。・・・
これを繰り返した時の合計回数は、
(N-1) + (N-2) + ・・・ + 1
となりますね。この式を分かりやすくするために、数学的にひと工夫します。
逆から書いた式を加算すると、
①上の式:(N-1) + (N-2) + ・・・ + 1
②逆の式:1 + 2 + ・・・ + (N-1)
①+②:N + N + ・・・ + N
全てNになります。これはNが(N-1)個あるので、
N(N-1) ですね。
最後に、全体として式を2倍しているので、全体を2で割って、
N(N-1)/2 が導き出されます。
オブジェクト指向言語の解説
応用情報の勉強を始める前から、少しずつプログラミングに取り組んでいました。なので、オブジェクトという言葉自体を見たことはあったのですが、イマイチ理解しきれていなかったんですね。
応用情報のテキストにもオブジェクト指向言語とは!が書かれているのですが、開けてビックリ、解説は4行だけでした。
さすが、実務経験がある方を前提に書かれているだけあって、あっさりしています。普段仕事でプログラミングをされている人は、この辺はスルーなのかもしれませんね。
素人の僕からしたら理解しづらい概念でしたが、こちらも基本情報のテキストに分かりやすいイメージ解説がありました。オブジェクトとは、データとメソッドを一体化したもので、たこ焼きに例えて考えてみます。
たこ焼きは、たこ焼き器という鋳型にタネを流し込んで作られます。ただ、鋳型が同じでも全く同じたこ焼きが出来るわけではなく、それぞれ個性がありますよね。鋳型によって大きさはある程度同じだったとしても、少しずつ個性が違うものが出来上がる。このイメージです。
オブジェクトは、焼けてるたこ焼きを"漠然と"指すもので、この鋳型にあたるものがクラス、鋳型をもとに作られた、個性を持ったたこ焼きを指すものがインスタンスです。
まとめ
章末問題で初めての記述問題
応用情報のテキストを進めて、やっと2章の章末問題に入りました。ここで久しぶりに記述問題に遭遇。面喰いました。
Q.衝突(collision)を、キーとハッシュ関数の語句を用いて35字以内で記述しなさい。
今までは選択式でしたからあいまいな記憶でも対応出来ていましたが、記述式となると本当に理解しているかどうかが問われますね。
記述問題の対策として大事だと思うこと
単に暗記力が求められる領域だったとしても、ある程度深く理解しておく必要がありそうです。ではどうやって深く理解するかということですが、僕個人としては、それが生まれた目的や身近で使われているものを例として考えてみることが大事だと思います。文字で覚えるのではなく、動画やビジョンで覚えていった方がいいような気がしますね。
例えば基本挿入法等であれば、手元にトランプがあれば自分でも実践できますし、「どういうときに比較回数が最悪になるか」を理解するには自分で手を動かしてみるのが一番だと思います。
前回はこちら
次回はこちら
【基礎理論】ITパスポートすら持ってないけど応用情報合格を目指す(2-4日目)
今日もお疲れ様です。新しい本や教科書って、買ったばっかりだとなんだかわくわくしますよね。応用情報の勉強を始めたばかりにして一気にのめり込んでしまいました。2日目から4日目までに学習した内容をまとめていきます。
(目安:1分)
続きを読む【初心者の壁】Android Studioのエミュレータにアプリが反映されない時の解決法 1例
今日もお疲れ様です。プログラミング経験が全くない初心者の僕が、本を読みながら手探りでモバイルアプリ開発に取り組んでいます。日々、たくさんの壁に遭遇しておりますが、本日はそのなかでもAndroid Studioのエミュレータに関する壁とその解決方法をシェアさせていただきます。
(目安:1分未満)
【目次】
AVD(Android仮想デバイス)を選べない
AVDを選べないのでエミュレータが起動しない
上記の画像はAndroid Srtudioを起動してすぐの画面です。黄色の枠線で囲まれているところでAVDを選べるはずなのですが、初期状態ではグレーでLodiong Diviceの表示になっており、この画面からは実行できませんでした。
もちろん、画面左にあるファイルから、右クリックして'Run'というのも試しましたが、上手くいきませんでした。
エミュレータを直接起動させてもアプリが反映されない
エミュレータ自体が起動することは確認できていましたので、まずエミュレータを立ち上げてしまってから、半ば力業で起動させられないかと挑戦。
素人考えですので、「エミュレータにファイルドラッグ&ドロップしたら行けるんじゃない?」なんていう甘い考えでした。こちらも結局上手くいかず、丸一日この状態で足踏みをしていました。
【解決法】 Gradle Fileと同期
僕の場合は非常にシンプルに解決できましたので、共有いたします。
画面左上の File → sync Project with Gradle files を選択
これで解決いたしました。この処理自体は5分ほど時間がかかったかと思いますが、この処理一つでAVDが選択できるようになり、AVD選択後にRunをクリックすることで自動的にエミュレータが起動しアプリが読み込まれました。
まとめ
さまざまな解決法をググってみましたが、もちろんこういった不具合は個々の環境やバージョンの違いなどでそう簡単には見つからないと思います。僕の場合もそうで、
「Android Studio」「エミュレータ」「起動しない」「アプリ」「読み込まない」
あたりのキーワードでGoogle検索をひたすらくりかえしながら、自分に一番近い症状のサイトを探していました。
(結局、全く同じ症状のサイトは見つからなかったので、検索方法があまりよくなかったのかもしれません)
僕が経験した解決法が参考になりましたら幸いです。
参考図書はこちら!
|
「'ionic'は、内部コマンドまたは外部コマンド…として認識されていません。」の解決方法
今日もお疲れ様です。先日から勉強しているIonic-Angularですが、一つ壁にぶち当たっていました。この壁のせいで丸3時間は頭を抱えていましたかね…。いろいろな原因があるかと思いますが、僕の場合、こうしたら解決した!という方法がありましたので、それをシェアさせていただきます。
(目安:2分)
続きを読むはじめてのアプリ開発!Ionicで作るToDoリスト ①開発環境構築 編
今日もお疲れ様です。
先日から仕事終わりに少しずつ取り組んでいたモバイルアプリ製作ですが、
ようやくチュートリアル第1章が終了しました!
アプリとは名ばかりのなんちゃって作品ですが、
小さくて大きな一歩として記録したいと思います。
(目安:3分)
続きを読むMRで営業職なのにプログラミングを始めたワケ
今日もお疲れ様です。副業・兼業についてのニュースが増えてきたように思います。
あの会社も、この会社も…。
製薬業界だってそういう波は来ています。
副業・兼業の話題と絡めて、なぜ僕が今プログラミングを始めたのか、
書いていきたいと思います。
(目安:2分)
続きを読む