• Linux ◦ 正確には”Linux Kernel”というOSの中核部分を指す ◦ Kernelを中心にProcess管理・FileSystem・Network・Securityを統合する ◦ 周辺ソフト群と結合してディストリビューション(配布用)を形成 ▪ Ubuntu ▪ CentOS ◦ 研究・開発・サーバ運用の基盤として広く用いられる User space Kernel space Hardware Process Management File System Network Stack Device Driver Shell App Server
画面はこんな感じ 1. バイナリファイルを見つける a. カレントディレクトリを確認 b. ホームディレクトリに移動 c. ホームディレクトリに何があるのかを確認 d. バイナリファイルの場所を特定 2. コマンドを動かせるようにする a. ファイルをGlobalで動かせる場所に移動 b. コマンドに実行権限を付与 c. (検証用のファイルを作成) d. コマンドを実行 e. 結果を確認
1. バイナリファイルを見つける a. カレントディレクトリを確認 b. ホームディレクトリに移動 c. ホームディレクトリに何があるのかを確認 d. バイナリファイルの場所を特定 2. コマンドを動かせるようにする a. ファイルをGlobalで動かせる場所に移動 b. コマンドに実行権限を付与 c. (検証用のファイルを作成) d. コマンドを実行 e. 結果を確認 画面はこんな感じ
1. バイナリファイルを見つける a. カレントディレクトリを確認 b. ホームディレクトリに移動 c. ホームディレクトリに何があるのかを確認 d. バイナリファイルの場所を特定 2. コマンドを動かせるようにする a. ファイルをGlobalで動かせる場所に移動 b. コマンドに実行権限を付与 c. (検証用のファイルを作成) d. コマンドを実行 e. 結果を確認 画面はこんな感じ
(--help) -a, --all do not ignore entries starting with . -h, --human-readable with -l and -s, print sizes like 1K 234M 2G etc. -l use a long listing format -s, --size print the allocated size of each file, in blocks tips) オプションは組み合わせて-alhみたいな指定も可 lsコマンドでカレントディレクトリのファイルを一覧表示できる。 main.goしかなさそうなので /home/every/project/go/cli にtsv2csvはなさそう。 バイナリファイルを見つける| カレントディレクトリにバイナリがあるかどうかを確認 $ ls (list) ファイルを一覧表示する
1. バイナリファイルを見つける a. カレントディレクトリを確認 b. ホームディレクトリに移動 c. ホームディレクトリに何があるのかを確認 d. バイナリファイルの場所を特定 2. コマンドを動かせるようにする a. ファイルをGlobalで動かせる場所に移動 b. コマンドに実行権限を付与 c. (検証用のファイルを作成) d. コマンドを実行 e. 結果を確認
バイナリファイルを見つける a. カレントディレクトリを確認 b. ホームディレクトリに移動 c. ホームディレクトリに何があるのかを確認 d. バイナリファイルの場所を特定 2. コマンドを動かせるようにする a. ファイルをGlobalで動かせる場所に移動 b. コマンドに実行権限を付与 c. 検証用のファイルを作成 d. コマンドを実行 e. 結果を確認 再掲)やらないといけないこと(具体)
のバージョン管理の仕組み Gitはデータをスナップショットとして保存している 差分を計算する必要がないので処理が高速 コミットを辿ることで過去の バージョンを復元 することが可能 A コミット 3 コミット 2 時系列 ファイルA ファイルB ファイルC ファイルA ファイルC ファイルB ファイルD ファイルE A A M M M A A コミット 1
• 要素ノードをポインタで連鎖した構造(単方向 / 双方向)。 • 途中での要素の入れ替え(繋ぎ直し)は 場所が分かっていれば速い(O(1)) • ただし、i 番目を探すのは 先頭から数えるしかない(O(n)) • ノードがバラバラの場所にあるので、キャッシュにのりにくい head val next val next val next NULL 単方向 NULL val next val next NULL val prev prev prev next 双方向
LIFO(stack):最後に入れたものが最初に出る( Last-In First-Out)。 FIFO(queue):最初に入れたものが最初に出る( First-In First-Out)。 x y z push pop x y z head enqueue dequeue tail LIFO FIFO
• O(1) とスループットは同義ではない • リストでもO(1)でStack/Queueを実現できるが、同じO(1)でも配列のほうが速い ◦ Stack×単方向リスト:先頭へのpush/先頭からのpop → O(1) ◦ Queue×双方向(単方向)リスト:後尾への push/先頭からのpop → O(1) → 高スループットが要件なら配列、参照安定性やスプライスが要件ならリスト head val next NULL head val next NULL new next push_front pop_front val next NULL val next NULL val prev prev next val prev next pop_front push_back Stack Stack Queue
元のデータの順序を維持するソート (同じ値の要素の順序が変わらない ) 同じ値の要素の順序が 変わる可能性があるソート 安定ソート 不安定ソート ID 名前 点数 1 A 60 2 B 80 3 C 80 ID 名前 点数 2 B 80 3 C 80 1 A 60 ID 名前 点数 1 A 60 2 B 80 3 C 80 ID 名前 点数 3 C 80 2 B 80 1 A 60