ただの技術メモ

個人備忘録

2022-01-01から1年間の記事一覧

Kubernetes × envoy × gRPC環境下でのGraceful Shutdownの流れ

はじめに 何について書くか・前提 Graceful Shutdownの実装 GoのGraceful Shutdownの実装 Kubernetesのライフサイクルについて envoyサイドカー導入時の注意点 Readiness Probeについて おわりに はじめに ABEMAの広告プロダクト開発チームで内定者バイトを…

ヒープと優先度付きキュー

競技プログラミングで度々必要になるヒープをまとめてみる。 ヒープとは ヒープは木構造の1つで、二分木として表現される。 各ノードがその子ノードより小さい(or 大きい)か等しくなるように配置される。 そのため根ノードが最小(or 最大)になる。 この…

最大公約数と最小公倍数の求め方

競プロでは最大公約数や最小公倍数が度々出題される。 今回は最大公約数や最小公倍数についてまとめてみる。 最大公約数はGreatest Common Divisorを略してgcdやgと表記されることがある。 最小公倍数はLeast Common Multipleを略してlcmやlと表記されること…

競プロで度々使う累積和の使い方

1次元の累積和 以下の問題を考える。 atcoder.jp 連続するk個の総和の最大値を求める問題。 シンプルに考えると、連続するk個の値はn-k個のパターンがあり、それぞれを求めて最大値を求めていく。 これだと、連続するk個の総和を求める処理が計算量にするとO…

高速な素数判定

競技プログラミングで度々出題される素数判定についてまとめる。 単純な素因数分解問題 以下のような単純に素因数分解する問題を考える。 https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=NTL_1_A&lang=ja 2から√nまでの整数で割っていき、割り…

ナップザックDP

競技プログラミングで有名なアルゴリズムに動的計画法(DP)がある。 無駄に同じ計算をしないように、ある条件下での計算結果を配列などに保存しておき、計算を高速化するためのアルゴリズム。 言葉で言ってもぴんとこないので例題で考えてみる。 フェボナッ…

Linuxのプロセス管理

Linuxのプロセス周りについて自分なりにまとめてみる。 プロセス プロセスとはコンピューターシステムのプログラムの実行単位。 プロセスはOS上で実行中のプログラムを指し、プログラムの実行単位である。 OSがファイルを実行する際にメモリやCPUなどのリソ…

Linuxのメモリ管理

コンピューター上では全ての処理がメモリにロードして実行される。 メモリ管理の仕組みについて書いてみる。 物理メモリと仮想メモリ プログラムが実行されてプロセスが生成されると、カーネルは生成されたプロセスにメモリを割り当てる。カーネルによってプ…

プログラムの実行手順とLinux関連の用語について

Linux周りの概要について調べたことをだらだらと書いてみる。 コンピューターシステムの概要 まずコンピューターがプログラムを実行する流れ。 まず、プログラムを実行する。 プログラムのデータが格納されている補助記憶装置(ストレージデバイス)から主記…

Goで深さ優先探索と幅優先探索

深さ優先探索と幅優先探索の概要 例えばニュースアプリでニュース一覧からとあるニュースを探しているとして、探し方は大きく分けて2つある。 (カテゴリタブとかはなくてニュースが羅列していて、そのニュースそれぞれが関連ニュースを複数保持している状態…

Goでbit演算

競プロでたまにbit全探索の問題に遭遇するけど、毎回どうやるんだっけってなってググっているのでまとめておく。 演算子について &(AND) 「&(AND)」は2つのbitを比較してどちらも1なら1、どちらかが0の場合は0を返す。 例えば「100 & 101 = 100」 | (OR…

ディスク使用率が100%になっていた時の動作確認と改善

Linuxの本を読んでいてとあるコマンドの動作確認してみよう〜と思って、VPSでapt-getしてみると、ディスク容量が足りずapt-getできなかった...その時の備忘録。 実行環境は以下です。 $ cat /etc/os-release NAME="Ubuntu" VERSION="20.04.2 LTS (Focal Foss…

スライスの内部実装と挙動の確認

スライスの挙動でなんでこうなるんだ?と度々なるのでまとめてみる。 配列 まず配列について。 配列は長さを含めて型。 An array’s size is fixed; its length is part of its type ([4]int and [5]int are distinct, incompatible types). go.dev 長さ4の配…

fmt.ScanやbufioのScannerで標準入力を受け取る

競プロで標準入力を受け取るとき、行単位で受け取ったりスペース区切りで受け取ったりしたいけど、どうすれば良いんだっけってなったのでまとめておく。 fmt.Scan 結論、fmt.Scanで全て解決する。 Scan scans text read from standard input, storing succes…

string型の変数をfor文で回す

競プロで文字列を1文字ずつ扱う場面があって、改めてまとめてみる。 byte型とは まずbyte型について。 // byte is an alias for uint8 and is equivalent to uint8 in all ways. It is // used, by convention, to distinguish byte values from 8-bit unsig…

16進数の計算とUnicodeとUTF-8

Goで文字列を1文字ずつ処理するときの仕組みが気になって深入りした内容をまとめておく。 16進数とバイトの関係 4ビットが表す数値は0から15(24-1)までである。 これは16進数で表現できる「0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F」と対応させて…

rmコマンドとunlinkコマンドについて

rmコマンドのヘルプを出すと、Remove (unlink) the FILE(s).と書いてあることから分かるように、rmはファイルをunlinkするコマンド。 つまりオプションを指定しないと、rmとunlinkは同じ。 user-name:~$rm --help Usage: rm [OPTION]... [FILE]... Remove (u…

Linuxコマンドのディレクトリ末尾のスラッシュについて

mvなどLinuxコマンドでパスを指定するときに、ディレクトリの末尾に/を付けるかどうかを迷いがちなので改めて整理する。 /の有無 /があると、 ディレクトリであることを明示(なので対象がディレクトリじゃないとエラーになる) 場合によっては、ディレクト…

ハードリンクとシンボリックリンクの挙動と使い道

リンクについてまとめていく。 コマンドの結果はmacOS Monterey 12.0.1での実行結果です。 リンクとは リンクとは異なるパスで同じファイルやディレクトリにアクセスできるようにする仕組み。 Unixのリンクはハードリンクとシンボリックリンクの大きく2つの…

localhostについて

開発をしていると、ローカル環境で動作確認する際にlocalhostを使うことがよくある。 なんとなく考えずに使っていたので改めてまとめてみる。 IPアドレスについて まずIPアドレスは32ビットの数字で構成され、1バイトずつに10進数でピリオドを区切り文字にし…

ジャーナリングファイルシステムについて

ジャーナリングシステムについて ファイルへの書き込み中に遮断が発生しても、不整合が起きにくくするジャーナリングという仕組みがある。 これを利用したファイルシステムのことをジャーナリングファイルシステムという。 Linuxで使われているEXT4などはジ…

psコマンドと/proc

プロセスの状態を出力するコマンドとしてpsコマンドがある。 user-name:~$ ps aux | head -n 5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.5 169084 7752 ? Ss 2021 6:40 /lib/systemd/systemd --system --deserialize 57 root 2…

ディレクトリやファイルの仕組み

ディレクトリやファイルの仕組みを追っていて、ファイルシステムの仕組みやストレージの構成などについて調べたのでまとめておく。 コマンドなどはUbuntu 20.04.2 LTSでの実行結果です。 ストレージの構成 ストレージはパーティションという複数の領域に仮想…