All days & topics
Tap any day to open it — past days included, for days you couldn't study. Your last-opened day is remembered on this device. Use the tabs above for Listen, Flashcards, and drills for that topic.
Day 1 — Frameworks + Foundations
Fri Oct 17 · Own the rubric. GCP resource hierarchy, IAM, VPC, PSA vs PSC.
0 of 10 days checked off
The 4 words they score
Understand → Prepare → Identify a solution → Support your solution.
Behavioral = STAR: Situation (2–3 sentences) → Task (“I owned…”) → Action (longest) → Result (X as measured by Y by doing Z + what you changed so it wouldn't recur).
Listen while you move
12 episodes (E1–E8 study + E9–E12 daily repetition). Play the MP3 (works in the car / Files app) or tap Read aloud to use your phone's voice. After each episode, pause and say the key line out loud — that repetition is the study. New: MOCK_PROMPTS.md (Gemini Live S1–S10) · HANDOFF_NOTE.md (Day 8 drill) · see STUDY_PLAN_V2.md for the persona-improved daily repetition stack.
Tap the card to flip · Say your answer out loud before flipping
Scenario drill (6–8 min each)
Pick a scenario. Start the timer. Work the 4 steps out loud, checking each off. Only then open the model outline.
Model outline (open only after your aloud attempt)
Code drills — narrate before you edit
Shared-doc round: clarifying questions + test cases, Big-O, malformed input, tradeoffs. The narration is what's scored.
Drill 1 · Log parser — top 5 errors/min + p50/p95/p99
import re, collections
pat = re.compile(r'(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}):\d{2}.*?(ERROR|WARN):(\w+).*?latency=(\d+)ms')
buckets = collections.defaultdict(list)
errors = collections.defaultdict(collections.Counter)
for line in open('db.log'):
m = pat.search(line)
if not m: continue # malformed: skip + count
minute, level, code, lat = m.group(1), m.group(2), m.group(3), int(m.group(4))
buckets[minute].append(lat)
if level == 'ERROR': errors[minute][code] += 1
for minute in sorted(buckets):
lats = sorted(buckets[minute])
pct = lambda p: lats[min(len(lats)-1, int(len(lats)*p))]
print(minute, errors[minute].most_common(5), pct(.5), pct(.95), pct(.99))
Talk track: regex → bucket by minute → Counter → sort for percentiles. O(n log n). Then say the BigQuery version: TIMESTAMP_TRUNC(ts, MINUTE) + GROUP BY + window functions.
Drill 2 · Health check — connections + replica lag
SELECT count(*) FROM pg_stat_activity; SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()));
Alert after 3 consecutive breaches (no flapping). Backoff with jitter — never hammer a sick DB. Run as cron / Cloud Run / Monitoring alert.
Drill 3 · Auditor — flag public buckets & no-backup instances
gcloud storage buckets list --format=json # iamConfiguration.publicAccessPrevention gcloud sql instances list --format=json # backupConfiguration.enabled / PITR
Parse defensively (.get with defaults). This is the JD's “build investigation tools” in Python.
Drill 4 · Buggy client — name all 5 before editing
Cheat sheet
Decision matrix — 30-second answers
| Need | Pick | Trap |
|---|---|---|
| Objects / lake | Cloud Storage | Lifecycle deletes by surprise |
| Managed MySQL/PG/SQL Svr | Cloud SQL | HA = active-standby; replicas ≠ HA; mostly connectivity |
| Hi-perf PG + analytics | AlloyDB | Not “Exadata on GCP” |
| Global, strongly consistent | Spanner | Monotonic keys hotspot |
| Documents, mobile/web | Firestore | Composite indexes; 500/50/5 ramp; sequential IDs |
| Massive wide-column | Bigtable | Row key is everything; single-row atomicity |
| Cache / session | Memorystore | Private-only; watch eviction/memory |
| Analytics over logs | BigQuery | Warehouse — answer by access pattern |
| Stay on Oracle | Oracle DB@GC | Oracle-operated; not GCP-native |
Checklists
Can't connect (Cloud SQL): IAM → PSA/PSC → Proxy/connector → SSL → limits → pool math.
Disappearing objects: lifecycle → retention/Bucket Lock → soft delete → versioning → Data Access audit log.
Hotspot: Key Visualizer → leading key field → UUID / bit-reversed / hash prefix / promote high-cardinality field.
GKE→DB: DNS → sidecar → Workload Identity → DB limit → network policy. Capture: no SYN = local/policy · SYN+RST = refused · SYN+retransmits = path drop · TLS alert = SSL mode.
Gap line — never bluff
Resources (official first)
TSE Prep Guide ·
Database Engineer Learning Path ·
Google Cloud Tech (YouTube) ·
SRE Books (free)
Full day-by-day watch/read/do list: open RESOURCES.md in this folder.