それぞれITパスポート、基本情報にも専用の学習サイトがあったはずです。
確認します。ありました。それと学習の参考書を購入してから学習します。
まず、学習の参考書を全部しらみつぶしに読みます。解きます。覚えます。
少なくとも参考書は2週してください。計算問題はノートも使ってみてください。そして、重要なところは付箋か、赤ペン、あるいは蛍光ペンで線を横に
引いてください。あとで読み返した時に、何が重要だったかすぐに探し出す為です。
EXCELか、グーグルのスプレッドシートで
毎日、何時間勉強したか下記のように書いてください。
基本情報は300時間勉強すれば十分なので、ある程度の目安になるはずです。
次に、過去の問題を専用の学習サイトで学習します。間違えて当然です、
知らないのですから。
逆に変に答えだけ覚えて何の足しにもなっていなかったのは自分だったので
よく分かります。間違えを恐れずに、解いていない問題や間違えた問題だけを解き続ける努力が必要です。平成21年度から令和8年まで、解き続けてください。
この画像も印刷してつかってください。いわゆるチェックシートです。
実際に勉強したならば◎をつけるか、☑をつけてください。
間違えた問題が多かった場合は✕を付けて、多めに復習しましょう。
上の画像が細かすぎて見えにくいと思った方は自力で
エクセルで書いて印刷するのをオススメします。
それでも自力じゃエクセルで描けない人の為にスマホで印刷結果を写メしました。
ポイントは倍々で覚えておくと記憶に定着しやすいということです。
初回、3時間後、6時間後、12時間後、一日後、二日後、四日後、8日後、16日後、30日後、2か月後で定着します。
それらの時系列をこの印刷結果の横に付け足して貼り付けて、
覚えていくのが良いと思います。
あと、キーワードが何々ならば何々という単語が出てくると覚えるのも、
全て暗記しなくてもよくなる効率の良いやり方です。もっとも、もっと
突っ込んで問われたら途端に効かなくなる諸刃の剣ですが。
また、これもノートを買うお金やペンや鉛筆がもったいないという方に
必要な事ですが、意外ですが、WIN+R、notepadのエンターで出てくる
メモ帳に問題の解説を映すというのも
個人的には有効だと思っています。
(注釈)出来れば、他の選択肢で聞いた事も見た事も無かった問題・用語も覚えると、合格点に達しやすいです。
(※本気で受かりたければ全部暗記してもらうことになります)
解き方と専門用語を覚える為に、ノートに腕が腱鞘炎になるくらい書いて
覚えましょう。過去20年分の過去問を解いて8割、9割取れるようになればA試験もB試験もバッチリです。ただし、答えの丸覚えはダメです。ただしい知識と解き方を覚えましょう。
※これもノートに写すのが面倒という方は、メモ帳Win+Rでnotepadとエンターすると出てきますが、これに書きなぐって覚えてみてはいかがでしょうか?
その上で、覚えても損はないけど、一部下品な覚え方がありますが、
ついて来られるでしょうか?
語呂合わせというのが強力な武器です。
まず10進数から2進数に変換する方法を見ていきましょう。
10進数を2進数に変換するには÷2(悪い兄さん)した後に
余り(にも酷い罰)を求めて0(エロ)と1(位置)に変換すればOKです。
178÷2=89...0
89÷2=44...1
44÷2=22...0
22÷2=11...0
11÷2=5...1
5÷2=2...1
2÷2=1...0
1÷2=0...1
除数が0になったら2の割り算は終了して下から逆順に高いビットとする。
10110010(2)
128+32+16+2=160+18=178
これが178(10)の2進数です。
0と1の2で割った余りが正しいかどうか確認する良い方法があります。
その2で割られた数が奇数ならば余りは1、
偶数ならば0になる特性を利用しましょう。
2進数の足し算 1+1は十
0+0=0 0+1=1 1+0=1 1+1=10
2進数の引き算 十-1は1
0-0=0 0-1=-1 1-0=1 1-1=0 10-1=1
変数の符号の反転はビットをXORで全ビット1を立てて
+1すると出来る。反転+1(へんたい+1)
これにより、加算だけで減算ができてしまう。
3-2=1なのは当たり前だが2進数で確認してみよう
0000 0011(3)
0000 0010(2)
まずこれ(2)を反転+1(へんたい+1)
0000 0011
+1111 1110
------------
0000 0001
シフト演算と固定小数点
0000 0001(1)を左にずらして空いたビットに0を埋めると
0000 0010、つまり、2なので、2倍になる。
では、これを応用して3倍にするには
Nが元の値だとすると、
2N+N
という式で求まる
左シフト1回と値そのものを足せば3倍になる。
ということは、そもそも、2進数の桁の値そのものの数だけ桁をずらしてシフト+加算すれば良いだけとなる。
例えば、さきほどの例でいうと0001x0011は0001の0010倍と0001の0001倍を足せば3倍になるというのは明らかな考えになるかもしれません。
ということは、0011x0111は、0011の0100倍と0011の0010倍と
0011の0001倍を足せば7倍になるのも明らかです。
この時の0100倍とか0010倍とか0001倍のことをシフト演算と呼びます。
0100倍が左シフト2回なので4倍です。2^2=4です。
もっと言うなら、2*2=4です
0010倍が左シフト1回で2倍です。2^1=2です。
もっというなら2*1=2です
0001倍は0ビット左シフトで等倍です。2^0=1です。
もっと言うなら1*1=1です。
これが2進数の任意の掛け算の基礎です。
割り算は掛け算がシフトと加算で行けたので2進数の割り算も、
もしかしたら減算とシフトで
いけるんじゃないか?と思った人は鋭いですが、残念ですがハズレです。
例えば、2^N乗の割り算のみならば右シフトは使えます。
32÷8は4ですが、0010 0000(2)を右シフト3回すると
0000 0100となります。
(-4)を符号を持ったまま右シフトするには算術シフトが合っている
そして、算術シフトの右シフトは最上位ビットが変わらないという特徴がある。つまり、値が負の固定小数点は最上位ビットが1で、
最上位ビットが0の固定小数点は正となる。
0000 0100とする
これを符号反転すると
1111 1100(するとこうなる)
これを算術右シフトすると
11111110(-2)となる。
リトルエイリアン、リトルエンディアン(小さい順)
ビッグエイリアン、ビッグエイディアン(大きい順)
0xABCDEFFFとあったら
リトルエンディアンはFF EF CD AB
ビッグエンディアンはAB CD EF FF
と保存する
インテルもファミコンの6502のCPUとメモリはリトルエンディアンです。
メモリインターリーブ、(リーブ21)メモリに並列に高速にアクセス
ダイレクトメモリーアクセス(DMA)
、専用の回路でメモリに直接(ダイレクトに)CPUがアクセスする
アプセト根暗デブ、OSI(おーS愛)参照モデル
高い順
アプリケーション層、プレゼンテーション層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層
UDP 正確性より速度重視、ネットゲーム用(sokUdo)
TCP 速度より正確性重視、精密な計算用(Tadashiku)
ネットワーク層->ルータ(寝る)
データリンク層->ブリッジ(デブ)
物理層->リピータ(ぶりっこ)
FTP->ファイルを転送するプロトコル(File Transfer?)
NTP->時間を取得するプロトコル(NetworkTime?)
SMTP->メール送信(SendMail?)
POP3->メール受信
NNTP→ニュースを扱うプロコトル
IPV6の
DNS->ドメインネームから数字のIPアドレスを伝える
(ドメインネーム解決)
DHCP->(ダイレクトsHutoku)ネット接続時にIPアドレスを取得する
ブレーンストーミング
どんな話題でもいいから話し合いをしてアイデアを出す
自分だったらファミコンasmや3DCG技術の話題を出す(笑)
そして批判禁止で自由奔放な考えを出すのがコツ。
ping->ポートスキャン、つまり脆弱なポートが無いか確認している)
ネットワークアドレス
ブロードキャストアドレス
について
192.168.128.240
255.255.255.128
の場合、192.168.128.????なので、
2進数に変換します。
1111 0000(240)
すると、この上の0000はホストアドレスと呼ばれますが
ここに1111を入れるとそのアドレスは、192.168.128.255となり、ブロードキャストアドレスとなります。逆にこの場合においてホストアドレスがすべて0000の場合、ネットワークアドレスとなります。
サイダー表記の場合----------------------------------------------------------
192.168.128.255/27
192.168.128.0b11100000
つまり、下位5ビットが32-27で5なので、ホストアドレスです。
ブロードキャストアドレスとネットワークアドレスのルールはすぐ前と同じです。
192.168.128.224です。
コアコンピタンス
他社にまねの出来ない独自の技術力(コアな技術)
ハッシュ(ドビーフ)
例えば、配列にint abc[3]={2,3,1};
とあったら
int hashfunc()
{
for(int i=0;i<3;i++)
{
sum=sum+abc[i];
}
return sum%3;
}とすると、メモリにオーダー1回で高速に格納できる。
(あくまで例のソース)
(オーダーとは計算量)
2分探索(バイナリサーチ)(バイのふたなり)、はソート済みが前提、そして数当てゲームのアルゴリズムに似ている
例えば、0から99までの範囲を2分探索するとしたら
50を入力すると
もっと高いです!!
では次に75を入力すると、
もっと低いです!!
では次に(50+75)/2=125/2=62を入力します
すると...
当たりです!!
という計算方法によく似ています。
線形探索(リニアサーチ)、はメモリの配列の先頭から最後まで検索するアルゴリズム
こちらも0から99までの範囲を線形探索するとしたら
62回目でやっと探索できます。
AND演算の応用
1010 1101
1111 0000
------------
1010 0000
つまり、0b10101101 & 0b11110000は、この場合、上位4bitを取り出す。
OR演算の応用
1010 1101
1111 0000
------------
1111 1101
つまり、0b10101101 | 0b11110000は、この場合、上位4bitを全て1にする
下位4bitは0000なのでそのままにする
EXOR(XOR)の応用
1010 1101
1111 0000
------------
0101 1101
つまり、0b10101101 ^ 0b11110000は、この場合、上位4bitを反転させる
下位4bitは0000なのでそのまま
射影(射精)だからお下劣(列)列を取り出す
+--------+
|職員番号|
|----------
|0010|
|0001|
|0002|
選択(せんずりはおぎょうぎが悪い)、行を取り出す
+-----++-------++-----+
|001 |織田敏郎| 11000
+-----++-------++-----+
イジショタク、(産業財産権4つある)意匠法、実用新案法、商標法、特許法
アトム(完全性)、実行されるか実行されないかどちらか一方
ソート、基本交換法(バブルソート)隣り合った要素同士を交換するソート
、基本選択砲(選択ソート)、基本挿入法(挿入ソート)、クイックソート(高速ソート)
線形合同法ー乱数の生成アルゴリズム、やや古い
メルセンヌツイスター乱数の生成アルゴリズム、比較的新しい、綺麗な乱数が出る
ド・モルガン(ド・オルガン)の法則
ーーーーー
A AND B、つまりcで書くと、!(A & B)
は
ー ー
A OR Bは、つまり、!A | !B
又は、
ーーーー
A OR B、つまりcで書くと、!(A | B)
は
ー ー
A AND B 、つまり、!A & !B
第1正規形:表のセルに複数の値が入っている「繰り返し」の部分をなくし、1つのマスには1つの値だけを入れる状態にします。
第2正規形:主キー(行を特定する番号など)の一部だけで決まる列を別の表に分けて、部分的な依存をなくします。
第3正規形:主キー以外の列によって決まる別の列(推移的な依存)を別の表に分けて、無駄な重複をなくします。第一正規化は繰り返しを無くす
それぞれの真理値表をまとめます
XOR
0 0 -> 0
0 1 -> 1
1 0 ->1
1 1 ->0
AND
0 0 -> 0
0 1 -> 0
1 0 ->0
1 1 ->1
OR
0 0 -> 0
0 1 -> 1
1 0 ->1
1 1 ->1
NAND
0 0 -> 1
0 1 -> 1
1 0 ->1
1 1 ->0
NOR
0 0 -> 1
0 1 -> 0
1 0 ->0
1 1 ->0
NOT
0->1
1->0
キャッシュメモリのヒット率
50nsの主記憶のアクセス速度とキャッシュメモリのアクセス速度が9ns
ヒット率が0.7だとすると、合計の速度は50*(1-0.7)+9*0.7=35+6.3=39.3
並列回路と直列回路の稼働率
Aの稼働率は0.9、Bの稼働率は0.7
このとき、Aを2つ並列に繋ぎ、そのままBと直列に繋いだ場合の
稼働率は
(1-(1-0.9)*(1-0.9))*0.7
=(1-0.01)*0.7
=0.99*0.7
=0.693
メールを受信する場合、受信者が公開鍵で復号化する
(メ受公)
デジタル署名が欲しい場合、送信者が秘密鍵で暗号化する
(デ送秘)
スタックとは配列とスタックポインタからなるデータ構造、
後から入れたものが先に取り出される
PUSH A PUSH B POP PUSH C
|A|
|
▽
|B|
|A|
|
▽
|A|
|
▽
|C|
|A|
これを応用すると、逆ポーランド記法が解ける
逆ポーランド記法について解説。(日本語と少し似ている)
例えば、AB+C*だと、AとBを足してCをかける
だとか、具体的には、左側から処理しますが、
数値が来たらスタックにプッシュする、
演算子が来たら2つ取り出して計算したらまたプッシュ
最後に残った数値が答えです。
では具体的にどうやるんでしょうか?
35+7*
|3|
|
▽
|5|
|3|
+なので、5+3をプッシュするので
|8|
|
▽
|7|
|8|
*なので7*8をプッシュすると、56です。
これが答えです。
CPUの割り込みの種類
外部割込み(タイマー割込みや入出力割込みなど)
内部割込みの主な種類プログラム割込み
0による除算(ゼロ除算)や、オーバーフロー・アンダーフローなどの演算エラー不正な命令や、アクセスしてはいけないメモリ領域へのアクセス仮想メモリのページフォルト発生時SVC割込み(スーパーバイザコール):実行中のプログラムがOSの機能(システムコール)を呼び出すとき入出力処理などの要求を行うために発生させる
2分探索木
左が小さくて、右が大きいのが特徴。
2<3<4<5<6<7
となる仕組み。つまり右にいけばいくほど大きくなり、
左にいけばいくほど小さくなる
システムの機能に障害が発生した時に
縮退運転をして継続するのがフェースソフト(ソフトに継続)
常に安全に制御するのがフェールセーフ(セーフ安全)
ホットサイトとコールドサイト
・災害地より遠くの場所に設置する施設
ホットサイト
本番と同じ処理を行い、災害や障害が起きたら、即座に切り替えられるシステムのこと、コストが高く付く代わりにすぐに災害や障害が起きたら切り替えられる為復旧に時間が短く済む点が良い部分
コールドサイト
最低限の装備しか用意していない施設。コストがかなり安く済むが、
災害や障害が起きたら、即座に切り替えられないので復旧に時間がかかる
ホットスタンバイ
コールドスタンバイ
→ホットサイトとコールドサイトのミニチュア版(サーバーのみ)
ブリッジ、ハブはデータリンク層
リピータは物理層
ユーザビリティ
ストレスを感じずに目標とする要求が達成できるかどうかのこと
著作権法で保護されない3つのもの
プログラム言語、規約、解法(アルゴリズム)
webビーコン
webサイト上にものすごく小さい画像(1x1px)を表示して
ユーザーのページ推移を観察する
リスク移転
保険をかけたり、リスクのある業務を委託することでリスクを他者に転嫁する
ウォーターフォールモデル
前から先へと順番に開発して川から滝のように流れるように
開発するモデル(その代わり手戻りすると、多くの手間と費用がかかってしまう)
プロトタイピングモデル
試作品を作り、利用者の要求をフィードバックする
稼働率=可用性
MTTR(平均修理時間)=保守性
MTBF(平均故障感覚)=信頼性
MTTR+MTBF=全運転時間
ストアドプロシージャ
クライアントとサーバーの通信負荷を軽減
ニッチ戦略
他者が参入しにくい特定の市場に対して専門化し、高利益率を図る
チャレンジャー戦略
市場での地位向上とトップシェア奪取を目標とした差別化戦略
リーダー戦略
総市場規模を拡大することで、シェアを維持しながら、新規需要の獲得
フォロワ戦略
リーダーの行動を観察し、迅速に模倣することで、製品開発などのコスト削減を図る
トップダウンテスト
↓スタブ
ボトムアップテスト
↑ドライバ
平均故障間隔MTBF
80時間後に故障、修理して、120時間後に故障、修理して、40時間に故障
(80+120+40)/3=80h
平均修理時間MTTR
故障してから修理に2時間、故障してから修理に6時間、故障してから修理に4時間
(2+6+4)/3=4h
NAT
グローバルIPアドレスとプライベートIPアドレスを相互に変換
DNS
IPアドレスとドメイン名を相互に変換
RPA
ソフトウェアロボット、OSの画面を把握して自動的に操作させるAIボット
LRU
もっとも長い間参照されていないページを追い出し対象とする
LFU
もっと参照回数が少ないページを追い出す
TLO法
大学での研究成果を特許化し、または企業への技術移転を支援し、産学の仲介役を果たす
リスク回避
リスクの要因そのものを排除してしまう戦略。
例えば
地震→津波→あらかじめ倉庫は高台に移動させたら
大丈夫。
リスク低減
リスクによる被害発生の防止や被害の程度を低減
リスク受容
リスクをそのまま受け入れる
CRM→(CM)で「顧客」を管理(kanRi)と覚えるといいかも。(本来の意味のCMとは全く異なるが)
生成多項式→CRC
非機能要件→開発、品質、技術、運用、移行、付帯「かひぎういふ」と覚える
ゼロデイ攻撃
→OSやセキュリティソフトが脆弱性を発見してアップデータを送る前に
ネットワーク上のPCを攻撃すること
DOS攻撃→個人がサーバーをかける行為
DDOS攻撃→複数のコンピュータがサーバーに負荷をかける行為
窓割れ理論→小さな犯罪が大きな犯罪を引き起こすという理論。
タンパ性→汚れや壊れにくい性質
IrDA→赤外線通信
EDI→ネット上の企業同士の取引に使われる
ソーシャルエンジニアリング
→ゴミ箱を漁る、担当者のふりをして電話をかけてパスワードを知る、
画面に貼ってある付箋を見る
などの人間個人がアナログな方法でハッキングする事、またその行為
インベントリー収集
→会社に必要の無いソフトウェアがインストールされていないかを
調べること。
ステガノグラフィ
画像の中に秘密にしたいデータを仕込む技術
しかし、解像度を変えたり拡大縮小するとデータは失われる
電子透かし技術とも言われる
UPS
無停電電源装置、落雷や停電の際に電源をしばらくの間保つための電源安定装置。
シャドーIT
BYOD(BringYourOwnDevice)は会社に認可を得て使う個人の持ち物だが、
シャドーITは会社に必要の無い物を持ち込むこと
エンベローブ暗号化
暗号化したものでさらに暗号化すること
暗号のきかい化→一定の時間内に暗号やハッシュ関数などの計算方法を元に戻す計算方法が見つかった事。これが成り立つと暗号やハッシュ関数としては
致命的。
マーケットバスケット分析
→一緒に購入される商品の分析。バスケットとは、買い物かごの事を指す。
スラッシング
→仮想記憶方式でページの入れ替えが頻発し、システムの処理速度が著しく低下する現象
ペネテレーションテスト
→公開Webサーバーや組織のネットワークの脆弱性を探索し、実際に
サーバーに侵入できるか試してみる事
クラウドソーシング
→WEB上で個人へと仕事を依頼できるサービスの事。
(大手だとココナラなど)
RAID0→ストライピング
RAID1→ミラーリング
(RAIDは用語だけでも覚えると良いかもしれません)
試験B用対策
(疑似言語が大分分かりやすくなりましたが、あえてcライク
のソースで説明します。
トレースさえ上手く行けば、問題が取れます。
じゃあ、虫食い問題はどうすれば良いのですか?という
考えをする方もいると思いますが、
そういう虫食い問題は小さな数字で、当てはめてみるとよいらしいです。
あるいは、選択肢を使ってトレースするといいようです。
配列中の中の最大値を探すプログラムです。
int getmax(int tbl[],int size)
{
int max=tbl[0];
for(int i=0;i<size;i++)
{
if(tbl[i]>max)
{
max=tbl[i];
}
}
}
int main()
{
int tbl[5]={"3,4,2,1,5"};
printf("max is %d\n",getmax(tbl,5));
}
平均を求めるアルゴリズムです。
double CalcAVG()
{
int N[3]={100,50,30};
int sum=0;
for(int i=0;i<3;i++)
{
sum+=N[i];
}
return sum/3.0;
}
標準偏差を求めるアルゴリズムです。
int N[3]={100,20,50};
double sa=0;
double sum=0;
double avg=0;
for(int i=0;i<3;i++)
{
sum+=N[i];
}
avg=sum/3.0;
for(int i=0;i<3;i++)
{
sa+=(avg-N[i])*(avg-N[i]);
}
return sqrt(sa/3.0);
10進数から2進数へと変換するcライクなソース
void dec2bin(int dec)
{
int tbl[8]={0};
for(int i=0;i<8;i++)
{
tbl[i]=dec&1;//0ビット目が0なら偶数,1ビットが1なら奇数
//つまり、2で割った余りは、0ビット目だけを見るだけでOK
dec>>=1;//これは÷2をシフト演算で行っている。
}
for(int j=7;j>=0;j--)
{
printf("%d",tbl[j]);
//これで逆順に高い順からビットを表示できる
}
}
ソートのアルゴリズム(ソース付き)cライクなソースです。
void swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
void bubblesort(int tbl[],int size)
{
for(int i=0;i<size;i++)
{
for(int j=0;j<size-1-i;j++)
{
if(tbl[j]>tbl[j+1]) swap(&tbl[j],&tbl[j+1]);
}
}
}
スタックのcライクなソースです。
#define MAX 4
int stack[MAX]={0};
int SP=0;
void push(int num)
{
if(SP>(MAX-1)){puts("STACK POINTER OVERFLOW!!");return;}
stack[SP++]=num;
}
int pop(void)
{
if(SP<=0){
puts("STACK UNDERFLOW!!");
return -1;
}
return stack[--SP];
}
cの掛け算ソースです
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int mul(int A,int B)
{
int Ans=0;
while(B!=0)
{
if((B&1)==1)
Ans+=A;
A<<=1;
B>>=1;
}
return Ans;
}
int main()
{
srand(GetTickCount());
//srand(time(NULL));でも良いのですが(恐らく1秒単位でしか変化しません
for(int i=0;i<5;i++)
{
int A=rand()%10+5;
int B=rand()%10+5;
printf("%dx%d=%d\n",A,B,mul(A,B));
}
}
他にも様々なアルゴリズムがあるので、ネットでcライクなソースとか疑似言語で探してみると良いかもしれません。
自分は大昔(2007年頃、素人に毛が生えた程度のプログラムしか作れなかったポンコツなプログラマだったのですが、今でもポンコツなプログラムしか作れません)