Skip to main content

46 docs tagged with "fundamentals"

View all tags

Core Web Vitals — LCP / INP / CLS から原因を絞る

Core Web Vitals の 3 指標 (LCP・INP・CLS) の定義と閾値を押さえたうえで、計測結果の組み合わせから原因を絞り込む手順を解説します。INP がサーバー応答の遅さでは悪化しない理由、CLS が寸法未指定の遅延コンテンツで悪化する仕組みを扱います。

DNS — 委任で成り立つ分散システム

DNS の名前解決の流れを、リゾルバからルート・TLD・権威サーバーへ辿る手順として解説します。ゾーンと委任の仕組み、TTL とキャッシュの関係、いわゆる「浸透」が何を指しているのかを扱います。

Fundamentals

A hub for the domain covering the layers that run underneath the frameworks, across disciplines. It spans the CSS box model, database locks, DNS, TLS, algorithms, system design, SQL, concurrency, dates, and character encodings.

HTTP — メソッド・ステータス・ヘッダー

HTTP のリクエストとレスポンスの構造を押さえたうえで、9 つの標準メソッドと安全性・冪等性の区別、ステータスコードの分類を解説します。メソッドがリクエストラインにだけ現れること、UPDATE や REMOVE が標準に無いことを扱います。

HTTP キャッシュと CDN — Cache-Control の設計

Cache-Control の各ディレクティブを「誰に効くか」「いつまで新鮮か」「期限切れ後どうするか」で整理し、リソースの性質からキャッシュ設計を導く手順を解説します。no-cache と no-store、max-age と s-maxage の違い、stale-while-revalidate と immutable の使いどころを扱います。

TCP/IP — 階層モデルとポート

TCP/IP の階層モデルを、IP が届け先を決め TCP が届け方を保証するという役割分担から解説します。ポート番号の 3 つの範囲、サーバー側のポートが固定でクライアント側が可変である理由、IANA への登録が任意である点を扱います。

The fundamentals of structured data (JSON-LD / schema.org)

The fundamentals of structured data, JSON-LD, and the schema.org Data Model. Its role as a "contract" between search engines and content, the meaning of @context / @type / @id, the type hierarchy and property ranges, and how to embed it in HTML.

TLS と証明書 — 何を信じて暗号化しているか

TLS が保証する 3 つの性質のうち、証明書が担うのは相手の同一性であることを解説します。証明書チェーンの検証、中間証明書の配信責任、TLS 終端の位置が変えるもの、証明書エラーの読み分けを扱います。

Web アプリの主要な攻撃と対策

XSS・CSRF・SQL インジェクションを中心に、Web アプリの主要な攻撃を「成立条件」から整理し、その条件を崩す対策を導きます。エスケープとプレースホルダの違い、CSRF トークンと SameSite の関係、認可不備が最多である理由を扱います。

Web エンジニア基礎知識ガイド

CSS のボックスモデルからデータベースのロック、DNS、シェル、TLS、アルゴリズム、システム設計、SQL の読み書き、並行処理、日時と文字コードまで、Web エンジニアが分野を越えて必要とする土台を全 42 章で体系化するガイド。フレームワークの使い方ではなく、その下で動いている仕組みと、実務で判断を分ける境目を扱います。

イベントループ — 1 本の線で待ち時間を捌く

JavaScript が 1 本のスレッドで通信もタイマーも捌ける仕組みを、タスクとマイクロタスクの実行順から解説します。await の続きがいつ動くか、setTimeout(fn, 0) が「すぐ」ではない理由、長いタスクが描画と操作を止める仕組み、重い処理を逃がす 3 つの方向を扱います。

インデックス — 検索を速くする代償

インデックスが検索を速くする仕組みと、その代わりに払う更新時のコストを解説します。複合インデックスのカラム順序、インデックスが効かない書き方、シャーディングやハッシングとの用語の区別を扱います。

エラーハンドリング — 正常系・準正常系・異常系

処理の結果を正常系・準正常系・異常系の 3 つに分類し、それぞれに適した扱い方を解説します。想定内の失敗と想定外の失敗を分ける基準、例外と戻り値の使い分け、どの層で捕まえるか、ユーザーとログに何を伝えるかを扱います。

オリジンと CORS — ブラウザが何を境界にして遮るか

オリジンを scheme・host・port の 3 つ組として定義し、同一オリジンポリシーが遮るのは読み取りであって送信ではないことを解説します。プリフライトが飛ぶ条件、ワイルドカードと資格情報が併用できない理由、Vary の必要性を扱います。

クッキー — 誰が、いつ、どこへ自動で送るか

クッキーの属性を「どこへ送るか」「いつまで持つか」「誰が読めるか」の 3 つに整理し、スコープがオリジンと一致しないことから生じる事故を解説します。Domain がサブドメインへ広がること、SameSite の判定が site 単位であることを扱います。

グラフと探索 — つながりをたどる

グラフの語彙と 2 つの表し方から、幅優先探索と深さ優先探索の使い分けを解説します。BFS が重みなし最短経路になる理由、訪問済み集合が要る理由、トポロジカルソートによる依存関係の順序づけと循環検出、状態を頂点と見なす発想を扱います。

サブクエリとウィンドウ関数 — 行をまたいで数える

サブクエリを置ける 3 つの位置、相関サブクエリと EXISTS、CTE で読む順に書く方法、そしてウィンドウ関数が行を畳まずに集計する仕組みを扱います。ROW_NUMBER と RANK の違い、累計、グループごとの上位 N 件の出し方と、各データベースの対応バージョンを示します。

シェルスクリプトと環境変数 — export とプロセス継承

シェル変数と環境変数の違いを、子プロセスへ継承されるかどうかという観点から解説します。export の役割、env コマンドの正しい使い方、チルダ展開と絶対パスの違い、スクリプトの実行方法の使い分けを扱います。

シェルの基本 — パイプとリダイレクト

標準入力・標準出力・標準エラー出力の 3 つの流れを起点に、パイプとリダイレクトの使い分けを解説します。上書きの > と追記の >> の違い、標準エラー出力がパイプに乗らない理由、grep との組み合わせを扱います。

スケールの方向 — 増やし方を決める

垂直と水平の 2 つの増やし方と、水平にするために状態を外へ出す手順を扱います。ロードバランサーが配る単位とヘルスチェック、読み取りをキャッシュへ・書き込みをキューへ逃がす方法、そしてボトルネックが移動する順序を示します。

セレクタとカスケード — 結合子・疑似クラス・詳細度

CSS セレクタの種類と結合子の違い、疑似クラスと疑似要素の区別、詳細度の計算方法を解説します。ID とクラスの重みの順序、全称セレクタと結合子が詳細度に寄与しないこと、カスケードが詳細度以外の何を見ているかまでを扱います。

データの分散 — 増えた先で何が崩れるか

レプリケーションとシャーディングで何が得られ、何が崩れるかを扱います。同期と非同期の違い、書いた直後に読めない理由、分割キーの偏り、結果整合性が見える瞬間、そして CAP 定理を「分断が起きたとき何を諦めるか」として読む方法を示します。

データ構造の選び方 — 配列・リスト・スタック・ハッシュ・木

配列・連結リスト・スタック・キュー・ハッシュマップ・木・トライ木の得手不得手を、操作ごとの計算量で比較します。スタックが LIFO でキューが FIFO であること、ハッシュマップの平均 O(1) が成り立つ理由と最悪の場合、トライ木が前方一致に強い理由を扱います。

デザインパターン — 4 つの代表パターンと語彙

Strategy・Singleton・Observer・Abstract Factory の 4 パターンを、それぞれが解こうとした問題から解説します。Strategy と State、Observer とポーリング、Abstract Factory と Factory Method といった混同されやすい組み合わせの区別を扱います。

トランザクション — ACID とコミット・ロールバック

トランザクションの基本操作 (開始・コミット・ロールバック) と ACID の 4 特性を解説します。ロールバックが取り消す範囲が自分のトランザクションに限られること、コミット後は取り消せないこと、構文エラーが発生するタイミングを扱います。

ビット演算 — フラグをビットで持つ

ビット演算子 (AND・OR・XOR・NOT・シフト) の働きと、複数の真偽値を 1 つの整数にまとめるビットフラグの実装を解説します。フラグの判定・追加・削除・反転の書き方、マスクの作り方、JavaScript のビット演算が 32 ビット符号付きで動く点を扱います。

プロセスとスレッド — 分けるか、共有するか

プロセスとスレッドの違いを「資源を分けるか共有するか」で整理します。子プロセスが親の複製として作られる仕組み、環境変数のコピーが一方向な理由、パイプの各段が同時に走ること、共有メモリで競合状態が起きる仕組み、CPU 待ちと I/O 待ちの区別、シグナルによる終了の扱いを扱います。

ボックスモデル — width が何を指すかで崩れる

CSS のボックスモデルを、コンテンツ・パディング・ボーダー・マージンの 4 領域と box-sizing による width の解釈の違いから解説します。背景がどこまで描かれるか、マージンの相殺がいつ起きるか、border-box をリセットで当てる定石までを扱います。

レンダリングパターン — CSR / SSR / SSG / ISR

CSR・SSR・SSG・ISR の 4 つのレンダリングパターンを「どこで HTML を作るか」という一つの軸で整理します。それぞれの初回表示・鮮度・SEO・サーバー負荷のトレードオフと、要件からパターンを選ぶ手順を扱います。

ロックと分離レベル — 同時実行の制御

共有ロックと排他ロック、4 つのトランザクション分離レベルと 3 つの読み取り異常、楽観ロックと悲観ロックの使い分け、デッドロックの原因と回避方法を解説します。分離レベルを上げてもロック無しでは競合が防げない理由を扱います。

二分探索 — ソート済み配列を半分ずつ削る

二分探索の仕組みを、探索範囲を毎回半分にするという不変条件から解説します。実装の落とし穴 (中央値の求め方・境界条件・無限ループ)、時間計算量と空間計算量、反復と再帰で空間が変わる理由、適用条件を扱います。

再帰と分割統治 — 大きい問題を小さい自分に投げる

再帰を基底ケースと再帰ステップの 2 つに分けて設計する方法を解説します。再帰木で手数を数えること、コールスタックが空間を食うこと、分割統治としてのマージソートとクイックソート、安定ソートが要る場面、再帰と反復の使い分けを扱います。

動的計画法 — 同じ計算を二度しない

部分問題の重なりに気づくところから動的計画法を導きます。メモ化と表埋めの対応、適用できる 2 つの条件、状態数と遷移コストによる計算量の見積もり、直前の行だけ持つ空間圧縮、貪欲法との違いを扱います。

可用性と冗長化 — 壊れる前提で組む

単一障害点の見つけ方と、可用性を掛け算で数える方法を扱います。直列でつながった依存は可用性を下げ、並列に並べた冗長化は上げます。待機系の型、切り替えにかかる時間、縮退運転、そして性能の問題を可用性の問題に変えない設計を示します。

宣言的 UI と命令的 UI — 状態から UI を導く

宣言的 UI と命令的 UI の違いを、同じ画面を 2 通りで書き比べながら解説します。なぜ宣言的 UI で状態と表示の不整合が減るのか、それでも DOM を直接触る必要が残るのはどこか、どんな代償を払っているのかを扱います。

文字コード — 文字とバイト列の対応

文字集合と符号化方式の違いを起点に、文字の数え方が 4 通りあること、同じ文字に見えて違うバイト列になる正規化、並べ替えと比較を決める照合順序、保存時にバイト数で効く上限、そして解釈の境目が複数あることが生む脆弱性を扱います。

日時とタイムゾーン — 同じ瞬間を別の名前で呼ぶ

日時の扱いを「瞬間・地方時・期間」の 3 つに分けて整理します。オフセットとタイムゾーンが別物である理由、過去の記録と未来の予定で保存の仕方が変わること、日付の境界がタイムゾーンで動くこと、文字列の解釈が形で変わること、カレンダー計算の落とし穴を扱います。

楽観的更新 — レスポンスを待たずに UI を進める

楽観的更新 (Optimistic Update) の仕組みを、成功を前提に UI を先へ進めてから失敗時にロールバックする流れで解説します。何が速くなり何は速くならないか、使ってよい場面と避けるべき場面、サーバー側バリデーションを省略できない理由を扱います。

構成図とトレードオフ — 何を描き、何を省くか

構成図の箱と線が何を表すかを決め、要件と対応づける手順を扱います。描かないものの選び方、mermaid での書き方、同じ要件に複数の正解があることを示す fan-out の例、そして設計を説明するときの答案の組み立て方を示します。

結合と集計 — 複数の表から 1 つの答えを作る

複数のテーブルを結合して集計するときの読み書きを扱います。SELECT の評価順序、内部結合と外部結合の違いを行の増減で捉える見方、1 対多で親の行が増えること、GROUP BY の粒度、COUNT(*) と COUNT(列) の違い、NULL の三値論理と「件数が合わない」ときの切り分けを扱います。

規模の見積もり — 設計は数字から始まる

利用者数から秒あたりのリクエスト数とデータ量を導く手順を扱います。ピーク倍率の置き方、読み書きの比が構成に与える影響、桁で考えることの意味、そして「1 台で足りる」と言い切れる条件を示します。

計算量 — O 記法で速さと使用メモリを見積もる

O 記法の読み方を、定数倍と低次項を捨てるという考え方から解説します。代表的なオーダーの体感、時間計算量と空間計算量の区別、ループや再帰からオーダーを数える手順、最悪と平均の使い分けを扱います。

認証と認可 — 誰かを確かめることと、何を許すこと

認証 (Authentication) と認可 (Authorization) の違いを、順序・失敗時のステータスコード・実装場所の観点から解説します。認証の 3 要素、セッションとトークンの持ち回り方、RBAC などの認可モデル、記述問題で答えるときの骨子を扱います。

配列を走査する型 — 二重ループを一重にする

二重ループを一重に落とす 4 つの型を、適用条件から整理します。two pointer、固定長と可変長のスライディングウィンドウ、累積和による区間和、単調スタックによる「次に大きい要素」を扱い、どの型が当たるかの判定手順を示します。