On this page
00The one idea behind this roadmap
You don't need to become an AI engineer. You need to become a better backend engineer who knows how to build with AI.
Here's honestly why I'm writing this. Most AI roadmaps out there are written for two kinds of people — someone starting from absolute zero, or someone who wants to become an ML researcher writing papers. You're probably neither. If you're reading this, you already know how to keep a system alive under real production load. That's a rarer skill than people give it credit for, and right now, it's exactly what AI products are short of.
So I've ordered this deliberately: Java fundamentals first, all the way through system design — and only then, the AI layer. If sections 01 through 09 already feel easy to you, congratulations, you're already ahead of most of the market — you're just not getting the shot you deserve yet. Section 10 onward is what makes you impossible to overlook.
Which path is yours?
Tell me honestly where you are right now, and I'll tell you what to focus on.
| If you are… | Your goal right now | Skip for now |
|---|---|---|
| College / fresher (0–1 yr) | Java + Spring + SQL rock solid. One RAG project after. | Fine-tuning, agent frameworks, deep math |
| Junior (1–3 yrs) | Be the one on the team who ships the AI feature. | Building models, MLOps platforms |
| Mid-level (3–6 yrs) | Own AI features end to end, then own the architecture. | Kaggle, computer vision |
| Senior (6+ yrs) | Lead AI architecture, make build-vs-buy calls, stay employable. | Beginner tutorials |
01Java foundations core
Not "I know Java." I want you to get to "I know why Java behaves the way it does."
Language fundamentals
Start here, even if it feels basic — go back and make sure it's actually solid: variables, primitive vs reference types, operators, control flow, arrays, methods, static, final, this, super. I've interviewed people with three years of experience who fumble the difference between final on a variable vs a method vs a class. Don't be that person.
OOP — actually understood, not memorized
You've heard these words a thousand times: classes, encapsulation, inheritance, polymorphism, abstraction, interfaces vs abstract classes, composition vs inheritance, association, aggregation. Here's what I want from you instead of reciting definitions — take a 3-level inheritance hierarchy you've actually written, and redesign it using composed interfaces, on a whiteboard, out loud. That's the difference between quoting "favor composition over inheritance" and actually owning it in an interview.
Concepts that separate you from a copy-paste developer
- ✓Pass-by-value, alwaysJava passes object references by value. Know exactly what that means when you mutate an object inside a method vs when you reassign the reference.
- ✓String pool + immutabilityWhy
Stringis immutable, what the string pool actually is, and whenStringBuildergenuinely matters for performance — not just "always use StringBuilder in a loop" as a rule you memorized. Deep dive: why Strings are immutable → - ✓
==vsequals(), and theequals()/hashCode()contractOverride one, you must override both. Be ready to explain why breaking that contract silently corrupts aHashSet. - ✓Autoboxing trapsWhy
Integer a = 127; Integer b = 127;givesa == bas true, but the same thing with 200 gives false. The integer cache — and why it matters more than it looks like it should. - ✓
ComparablevsComparatorNatural, built-in ordering vs an external, pluggable one — and know when a class genuinely needs both.
If you take one recommendation from this entire section, make it this: go subscribe to Concept & Coding by Shrayansh on YouTube right now. I mean it — this is, hands down, the best channel I've found for Java from basics to advanced, multithreading and concurrency, and LLD/HLD, all taught by someone who's actually been an engineer at PayPal for years, not someone reading slides. I'll point back to this channel again in the concurrency and system design sections below, because it genuinely covers all three well. There's also a companion Medium blog if you prefer reading over watching.
- Concept & Coding by Shrayansh — Java Basics to Advanced playlistYouTube — the one I'd actually sit down and watch end to end.
- Baeldungbaeldung.com — whenever a specific Java question comes up mid-project, this is almost always the first search result worth trusting.
- iluwatar/java-design-patternsGitHub · 94.7k★ — every classic pattern, in real runnable Java, with an explanation of when to actually reach for it.
02Collections, deeply core
Most people stop at "I know the interfaces." I want you to go further — this is the single highest-leverage section in this whole guide.
List, Set, Map, Queue, Deque — knowing the interfaces gets you through a basic coding round. Knowing what's happening inside the implementation is what gets you through a system design round, and honestly, through the 2am incident when something's suddenly slow.
ArrayList vs LinkedList
With ArrayList, I want you comfortable talking about the internal array, how resizing works, capacity vs size, why random access is O(1), and the real trade-off on insertion/removal in the middle. With LinkedList, know the node structure and traversal cost — but more importantly, be able to explain why it is not automatically faster than ArrayList for inserts and deletes once you account for cache locality. I see this get flipped backwards constantly, even by people with a few years in.
HashMap — let's actually go granular here
Here's what I'd actually ask you if we were in a room together: what's the default load factor, and why 0.75 specifically? What happens on resize — is it actually cheap, or does someone eventually pay for it? Why does Java treeify a bucket into a red-black tree instead of leaving it a plain linked list, and at what size does that kick in? And why does using a mutable object as a key set you up for a landmine six months later?
Once that's solid, round out the rest of the family: HashSet internally (it's a HashMap wearing a trench coat — that's genuinely all it is), LinkedHashMap (insertion or access order — this is how you'd build an LRU cache from scratch if someone asked), TreeMap/TreeSet (backed by a red-black tree, sorted iteration), PriorityQueue (a binary heap), ArrayDeque.
"Quiz me on Java HashMap internals — hashing, collision resolution, load factor, resizing, and treeification — one question at a time, and tell me immediately if my answer is wrong or incomplete before moving to the next one."
- Concept & Coding by Shrayansh — Java Collections deep-dive videosYouTube
- Read the actual OpenJDK source for HashMap.javaGitHub — I know it sounds intimidating, but the class-level Javadoc comment at the top of
java.util.HashMapexplains treeification and load factor better than most blog posts. Go read it once. - Baeldung — Guide to HashMapbaeldung.com
03Multithreading + concurrency core
Don't just "learn multithreading" as a topic. I want you to be able to reason about a program that behaves differently every single time you run it.
Threads & the basics
Process vs thread, thread lifecycle, Runnable vs Callable vs Future, thread interruption, daemon threads.
Synchronization
Race conditions, critical sections, synchronized, intrinsic locks, the monitor, ReentrantLock, ReadWriteLock, StampedLock.
Executors
ExecutorService, ThreadPoolExecutor, fixed vs cached thread pools, work queues, core/maximum threads, rejection policies. This is exactly the part you'll come back and rewrite once you start fanning out to slow LLM calls in section 10 — so get it right now.
The Java Memory Model
Visibility, atomicity, ordering, happens-before, memory barriers, volatile — and specifically, why volatile int counter++ is not thread-safe even though it feels like it should be. This trips up more experienced engineers than you'd expect.
Atomics & lock-free thinking
AtomicInteger/AtomicLong/AtomicReference, compare-and-swap, CAS loops, and the ABA problem.
CPU + concurrency — the part almost everyone skips
L1/L2/L3 cache, cache coherence (why one core can see a stale value another core just wrote), and false sharing — two unrelated variables sitting on the same cache line, causing needless invalidation between cores. If you can explain false sharing to me without being prompted, you're already ahead of most senior candidates I've seen.
Problems you must be able to reason about
Race condition, deadlock, livelock, starvation, thread contention, lock contention.
synchronized everywhere and hope nothing deadlocks.
Concept & Coding by Shrayansh has a full, dedicated multithreading and concurrency playlist that walks through the Java Memory Model, locks, and executors properly, with real problems worked out on screen. I keep pointing back to this channel in this guide for a reason — it's genuinely rare to find one place that's this strong across Java, concurrency, and LLD/HLD all at once.
- Concept & Coding by Shrayansh — Multithreading & Concurrency playlistYouTube
- JSR-133 (Java Memory Model) FAQcs.umd.edu — genuinely the clearest short explanation of
volatile, happens-before, and why the old memory model had to be replaced. - The JSR-133 Cookbook for Compiler WritersDoug Lea, gee.cs.oswego.edu — denser, but this is as close to the actual source as free material gets.
- LMAX-Exchange/disruptorGitHub · 18.5k★ — read this codebase once you understand false sharing on paper, and watch how a real, battle-tested low-latency system engineers around it.
04JVM + performance core
Don't stop at knowing Java syntax — I want you to understand what actually happens once your code starts running.
Class loading: the lifecycle, the ClassLoader hierarchy (Bootstrap → Platform → Application), and the parent delegation model.
JVM memory: the heap (young generation, old generation, allocation), the stack (frames, local variables, stack overflow), metaspace, native memory, code cache.
Garbage collection: why it exists at all, reachability, GC roots, minor vs major/full GC, stop-the-world pauses, generational GC. Then the collectors — Serial, Parallel, G1, ZGC, Shenandoah. You genuinely don't need to memorize every collector's internals, but you should be able to reason out loud about why a production service would pick one over another.
JIT: bytecode turning into native code, hot-method detection, runtime optimization, warm-up — this is exactly why your service feels sluggish for the first few minutes right after a deploy, and it's a great thing to be able to explain when someone asks "why does it feel slow right after we roll out?"
Tools you should actually have opened at least once: JFR (JDK Flight Recorder), VisualVM, thread dumps, heap dumps, profilers.
- OpenJDK JEP Indexopenjdk.org — every language and JVM change, straight from the source. Skim it once to see how much of "modern Java" you might be missing.
- async-profiler/async-profilerGitHub · 9.2k★ — the low-overhead profiler real production Java teams reach for first, not a toy.
- openjdk/jmhGitHub · 2.7k★ — the correct way to microbenchmark Java. Stop trusting a
System.currentTimeMillis()loop.
05Spring Boot + framework internals core
Don't stop at @RestController, @Service, @Autowired. I want you to understand what Spring is actually doing underneath those annotations.
Spring Core: IoC, dependency injection, ApplicationContext, BeanFactory, bean scopes, and the full bean lifecycle — creation, injection, initialization, post-processors, destruction.
Dependency injection styles: constructor vs setter vs field injection. Be ready to explain why constructor injection is generally preferred — immutability, testability, and failing fast when a required dependency is missing, instead of finding out at 2am.
Proxies + AOP: JDK dynamic proxies vs CGLIB, advice, pointcuts, aspects. This is what makes @Transactional and @Cacheable feel like magic — right up until you understand it isn't magic, it's a proxy wrapping your bean.
Transactions: @Transactional, propagation, isolation, rollback rules, read-only transactions, and the proxy mechanism underneath — including the classic gotcha of calling a @Transactional method from inside the same class and watching the proxy get silently bypassed. I've seen this exact bug ship to production more than once.
Spring Boot itself: auto-configuration, starter dependencies, profiles, Actuator, health checks.
- Concept & Coding by Shrayansh — Spring Boot playlistYouTube
- The official Spring blogspring.io/blog — this is where every real internals change gets explained by the people who wrote it, including Josh Long's posts.
- spring-projects/spring-petclinicGitHub · 9.5k★ — the canonical reference app. Clone it, set a breakpoint in the context refresh, and actually step through it once.
06APIs + HTTP core
I want you to understand the protocol underneath the framework, not just the framework sitting on top of it.
HTTP: methods, headers, body, query vs path parameters, status codes. REST: resources, statelessness, idempotency, versioning, pagination, filtering, sorting.
Reliability — and pay close attention here, because this list comes back word-for-word in section 10: timeouts, retries with exponential backoff, circuit breakers, rate limiting, bulkheads, idempotency keys. An LLM call is just a service call that's slower, pricier, and occasionally lies to you with total confidence — every one of these five patterns applies again, unchanged.
Auth: sessions, JWT, access/refresh tokens, OAuth2, OpenID Connect. Authorization: RBAC, permissions, resource-level authorization.
API design: consistent error responses, validation, request/response DTOs, backward compatibility.
- The Amazon Builders' Libraryaws.amazon.com — free, written by Amazon's own senior engineers. Start specifically with "Avoiding fallback in distributed systems" and their piece on timeouts, retries and backoff — this is the deepest free writing on this exact topic I know of.
- resilience4j/resilience4jGitHub · 10.8k★ — circuit breakers, retries, rate limiters, bulkheads, as an actual library you can read and use.
07Databases + Hibernate core
This needs to go way beyond "I know SQL." Let's actually get into it.
SQL: joins, GROUP BY / HAVING, subqueries, CTEs, window functions. Indexes: B-tree, composite indexes, covering indexes, selectivity, actually reading a query plan with EXPLAIN ANALYZE instead of guessing — and just as important, knowing when an index quietly hurts your write performance.
Transactions: ACID. Isolation levels: Read Uncommitted, Read Committed, Repeatable Read, Serializable — and which of dirty reads, non-repeatable reads, and phantom reads each one actually prevents. MVCC: how Postgres gives you concurrent reads and writes without locking the whole table.
Hibernate / JPA — go granular here too
Entity lifecycle, persistence context, first-level vs second-level cache, dirty checking, flush timing, lazy vs eager loading, cascades, entity relationships.
Also make sure you're solid on: optimistic vs pessimistic locking, connection pools, and how transactions interact with Hibernate's session underneath.
- Vlad Mihalcea — "N+1 query problem with JPA and Hibernate"vladmihalcea.com — if you read one blog post from this whole section, make it this one.
- Vlad Mihalcea's full blogvladmihalcea.com — genuinely the deepest free writing that exists on Hibernate/JPA performance, period.
- PostgreSQL official docs — Using EXPLAINpostgresql.org
- The PlanetScale engineering blogplanetscale.com/blog — some of the best technical writing on databases anywhere online right now: sharding, schema changes at scale, and — relevant once you hit section 10 — running vector search workloads on top of Postgres at scale.
- Redis — official cache-aside pattern docsredis.io
08Distributed systems core
The moment your backend runs across more than one machine, a completely different set of problems shows up — and they're not optional to understand anymore.
CAP theorem: consistency, availability, partition tolerance — and why partition tolerance isn't actually a choice once you're distributed, so the real trade-off you're making is C vs A.
Kafka: producer, consumer, topic, partition, offset, consumer group, ordering (only guaranteed per-partition), replication, retention. Delivery semantics: at-most-once, at-least-once, and exactly-once — and why "exactly-once" in practice really means "effectively-once," achieved through idempotency, not some magic guarantee.
Patterns you should be able to draw from memory: the outbox pattern (so a DB write and an event publish don't quietly drift apart), the saga pattern (choreography vs orchestration, and compensating actions when something fails halfway through), CQRS (separate read and write models), distributed locks, leader election, idempotency and deduplication.
- microservices.io — Saga patternChris Richardson and its sibling pages on Transactional Outbox and CQRS — this is genuinely the reference pattern catalog for everything in this section, written by the person who literally coined a lot of this vocabulary.
- Confluent blog — "Exactly-once Semantics is Possible: Here's How Apache Kafka Does It"confluent.io
- The Amazon Builders' Libraryaws.amazon.com — again, worth a second mention here specifically for the articles on shuffle sharding and resilient service design.
- The Netflix Tech Blognetflixtechblog.com — real write-ups of distributed systems decisions at massive scale, including the reasoning and trade-offs, not just the final architecture diagram.
09System design + performance core
Now bring everything above together into one skill: taking a service from "it works on my machine" to "it can survive production traffic."
Scalability: vertical vs horizontal, stateless services, load balancing, replication, sharding. Caching: cache-aside, write-through, write-back, TTL, invalidation, cache stampede, cache penetration — with Redis as your reference implementation for most of these.
Latency, not just averages: p50, p95, p99, throughput, QPS/RPS. A service with a great average latency and a terrible p99 is still a genuinely bad experience for a meaningful chunk of your users — don't let anyone hide behind an average.
Reliability: timeouts, retries, circuit breakers, backpressure, graceful degradation. Observability: structured logs with correlation IDs, metrics, and distributed traces — OpenTelemetry ties all three of these together into one picture.
For LLD and HLD specifically, I'll say it a third time because it's genuinely worth repeating: Concept & Coding by Shrayansh has full "basics to advanced" playlists for both. If you only pick one channel from this entire page to actually commit to and finish, this is the one.
- Cloud Design Patterns — Azure Architecture Center — a technology-agnostic catalog of distributed-system patterns (retry, circuit breaker, bulkhead, CQRS, saga, cache-aside, and dozens more), each with the problem it solves, when to use it, and when not to. This applies whether you're on AWS, GCP, on-prem, or Azure.
- The Reliability pillar — Azure Well-Architected Framework — this is the closest thing I've found to a free, structured checklist for "is this system actually production-ready," covering fault tolerance, recovery targets, and availability design in a way that reads like a senior architect walking you through it.
- Concept & Coding by Shrayansh — LLD and HLD playlistsYouTube
- donnemartin/system-design-primerGitHub · 372k★ — still the best single starting point for HLD fundamentals, full stop.
- ashishps1/awesome-low-level-designGitHub · 27.1k★ — actual LLD problems with solutions: parking lot, elevator, rate limiter, the classics you'll get asked.
- Snowflake Engineering Blogsnowflake.com — one of the better places to see how a real data platform reasons about scale and query performance in public.
10AI for everyone — the layer on top ai layer
Not "become an ML researcher." I want you to understand enough AI that you can build systems that use it well — and that's a genuinely smaller ask than it sounds.
Here's the honest pitch, and I want you to actually believe it: an LLM call is just a service call with different failure modes. Every row below is something you already half-know from sections 06 and 09 — it just needed one new column.
| Traditional service call | LLM call |
|---|---|
| Milliseconds | Seconds, often streamed |
| Fixed cost | Cost per token |
| Same input → same output | Same input → different output |
| Fails loudly | Fails quietly — a confident wrong answer |
| Input validated by schema | Input is natural language, can carry an attack |
| Unit tests prove correctness | You need evals on a dataset |
LLM fundamentals
What an LLM actually is, tokens, tokenization, context window, input/output tokens, token cost, temperature, top-p, hallucination. Then get comfortable with proprietary vs open-weight vs reasoning vs multimodal vs small models — and always think in terms of the same trade-off triangle you already use when picking a database: capability × latency × cost.
- rasbt/LLMs-from-scratchGitHub · 105.7k★ — build a GPT-style model from scratch, in code. Genuinely the deepest free way to actually understand one instead of just using one.
- Andrej Karpathy — "[1hr Talk] Intro to Large Language Models"YouTube — still the best single mental model out there, and it closes with a section on prompt injection and jailbreaks that ties directly into the security part below.
Calling models from Java
Start with a raw HTTP call to an LLM API first, so nothing about it feels like magic. Then move to Spring AI's ChatClient: prompts, templates, streaming, structured output straight into a POJO. Token accounting, rate limits, retries, fallbacks — the exact same reliability primitives from section 06, reused without a single new concept.
- Spring AI reference docsdocs.spring.io — the actual source of truth for ChatClient, advisors, RAG, vector stores, tool calling, and MCP.
- spring-projects/spring-ai-examplesGitHub · 1.4k★ — runnable sample projects straight from the Spring team, not a third-party guess at the API.
Prompt engineering, briefly
Role, task, context, constraints, examples. Zero-shot / one-shot / few-shot. The point isn't clever wording for its own sake — it's a reliable, machine-readable output your backend can actually act on: LLM → JSON Schema → your backend → business logic.
Embeddings + vector search
Embeddings turn text into vectors where semantic similarity becomes distance. pgvector is the obvious starting point if you're already a Java/Postgres shop — it fits skills you already have, instead of asking you to stand up a whole new database. Pinecone, Qdrant, Weaviate and Milvus exist for larger or managed setups once you actually need them.
- pgvector/pgvectorGitHub · 23.2k★
- PlanetScale engineering blogplanetscale.com/blog — worth a second look here specifically for how they talk about running vector and analytical workloads on top of the databases you already know, instead of bolting on an entirely separate system.
RAG — the most valuable phase, and why it comes before agents
The RAG pipeline
Here's why I want you to do RAG before agents, not the other way around like most guides suggest: RAG forces you to actually learn search, indexing, and retrieval infrastructure — that's real engineering. Building an agent on top of poor retrieval just automates your mistakes faster and with more confidence than before.
- NirDiamant/RAG_TechniquesGitHub · 29.6k★ — chunking, reranking, hybrid search, every failure mode in the diagram above, with working code for each.
- DeepLearning.AI — Retrieval Augmented Generationdeeplearning.ai — solid conceptual grounding, taught by the people building the tools.
Tools, MCP, and agents
Tool/function calling: the LLM decides what to call, your Java backend executes it, the result goes back to the model. MCP (Model Context Protocol): clients, servers, tools, resources, prompts — the standard way to connect a model to external capability, so you're not reinventing this per project. Agent loop: plan → act → observe → repeat, workflows vs autonomous agents, human-in-the-loop. Borrow this rule from the agent literature and actually apply it: prefer the simplest workflow that solves the problem, and only add autonomy once the task genuinely needs it.
- Anthropic — "Building Effective Agents"anthropic.com/engineering — the clearest write-up anywhere on workflows vs agents and exactly when to use each.
- modelcontextprotocol.ioofficial spec — start here, then go to the SDK below.
- modelcontextprotocol/java-sdkGitHub · 3.7k★ — build MCP clients and servers in plain Java, no framework required.
Evaluation — the skill almost every tutorial skips
Unit tests prove code. Evals measure behaviour on a dataset. Start with error analysis — read real traces, categorize the failures by hand — before you reach for any automation. Evaluate retrieval and generation separately in a RAG system; they fail in different ways for different reasons. If you use LLM-as-judge, calibrate it against a human expert first — don't just trust it because it sounds confident.
- Hamel Husain — "Your AI Product Needs Evals"hamel.dev — foundational, and honestly the single most practical writing on this whole topic.
- promptfoo/promptfooGitHub · 25.5k★ — a genuinely practical eval and red-teaming tool, the closest thing to "unit tests for prompts" that exists today.
AI security — map it to OWASP
| Risk | What you actually do |
|---|---|
| Prompt injection | Separate instructions from untrusted content; treat retrieved text as hostile by default |
| Sensitive information disclosure | Enforce access control before retrieval, not after |
| Improper output handling | Treat model output as untrusted input to whatever runs next |
| Excessive agency | Minimum tools, minimum permissions, human approval for risky actions |
| Unbounded consumption | Rate limits, quotas, max tokens, max tool-loop depth |
- OWASP Top 10 for LLM Applicationsgenai.owasp.org — prompt injection is #1, and the whole list is worth memorizing, not just skimming once.
- Simon Willison's writing on prompt injectionsimonwillison.net — sharp, practical, and updated as new attack patterns actually show up in the wild.
The Java AI ecosystem
Spring AI — chat clients, model integrations, structured output, tool calling, RAG, vector stores, MCP integration. Learn this one first if you're already comfortable in Spring, which you should be by now. LangChain4j — the second Java-native option, worth picking up once Spring AI feels natural to you.
- langchain4j/langchain4jGitHub · 13.2k★
- microsoft/Generative-AI-for-beginners-javaGitHub · 557★ — small, but genuinely Java-first. Rare to find a beginner AI course that isn't Python-only, so it's worth the detour.
11Production + specialization depth
This is where you become the kind of engineer who can build, deploy, operate, and pick a lane.
Containers & orchestration: Docker, images, volumes, Compose; Kubernetes pods, deployments, services, ConfigMaps, secrets, ingress, scaling, health checks.
Cloud fundamentals: compute, storage, networking, IAM, managed databases, load balancers, queues. AWS is a fine reference ecosystem to learn on, but the concepts here outlast whichever vendor you happen to be using.
CI/CD & observability: build pipelines, artifact creation, deployment, rollbacks; logs, metrics, traces, alerts, dashboards, SLOs/SLIs.
Pick your specialization after the common foundation, not before
| Track | Go deep on |
|---|---|
| Backend / API engineer | Java, Spring Boot, APIs, databases, distributed systems, performance |
| Distributed systems engineer | Kafka, distributed databases, consistency, consensus, fault tolerance |
| AI product / AI backend engineer | LLM APIs, RAG, agents, tool calling, MCP, evals, AI security, Spring AI, LangChain4j |
| AI infrastructure engineer | Inference, serving, GPU/compute, model gateways, Kubernetes, vLLM |
| Model / LLM engineer | Fine-tuning, LoRA/QLoRA, distillation, quantization, inference optimization |
- vllm-project/vllmGitHub · 92.9k★ — if the AI infrastructure track pulls you in, this is the project to actually read.
- The full Azure Well-Architected Frameworklearn.microsoft.com — beyond just the reliability pillar mentioned earlier, the cost optimization and operational excellence pillars are genuinely useful once you're the one making build-vs-buy calls.
12Your full resource library, in one place
Everything above, gathered here too, in case you want the whole list at once instead of scrolling back. Every one of these is real and was checked while writing this — not a guessed name.
Java, JVM & design
| Resource | ★ / type | Why |
|---|---|---|
| Concept & Coding by Shrayansh | YouTube | My top recommendation on this whole page — Java, multithreading, LLD and HLD, all genuinely well taught |
| Baeldung | blog | The default first search result for almost any specific Java/Spring question |
| iluwatar/java-design-patterns | 94.7k★ | Every classic design pattern in real, runnable Java |
| Vlad Mihalcea's blog | blog | The deepest free material on Hibernate/JPA internals and the N+1 problem |
| JSR-133 Cookbook (Doug Lea) | reference | As close to the actual Java Memory Model source material as free content gets |
System design, LLD & distributed systems
| Resource | ★ / type | Why |
|---|---|---|
| Azure Architecture Center — Cloud Design Patterns | reference | Technology-agnostic catalog of every distributed-system pattern you'll actually be asked about |
| Azure Well-Architected Framework — Reliability pillar | reference | A free, structured checklist for "is this system actually production-ready" |
| donnemartin/system-design-primer | 372k★ | Still the best starting point for HLD fundamentals |
| ashishps1/awesome-low-level-design | 27.1k★ | LLD problems with solutions — the classics you'll get asked |
| microservices.io (Chris Richardson) | reference | The pattern catalog for saga, CQRS, outbox — from the person who wrote the book on it |
| The Amazon Builders' Library | blog | Free, written by Amazon's senior engineers, on how they actually build resilient services |
| Netflix Tech Blog | blog | Real distributed-systems decisions at scale, with the reasoning included |
| Confluent blog | blog | The deepest Kafka-specific writing, straight from the company behind it |
| Snowflake Engineering Blog | blog | How a real data platform reasons about scale in public |
AI & LLM engineering
| Resource | ★ / type | Why |
|---|---|---|
| rasbt/LLMs-from-scratch | 105.7k★ | Build a GPT-style LLM from scratch — the deepest free way to understand one |
| Spring AI reference docs | reference | Source of truth for ChatClient, RAG, tool calling, and MCP in Spring |
| NirDiamant/RAG_Techniques | 29.6k★ | Every RAG failure mode, with working code |
| Anthropic — Building Effective Agents | blog | The clearest write-up on workflows vs agents anywhere |
| Hamel Husain's blog | blog | The single most practical writing on evals that exists today |
| OWASP Top 10 for LLM Applications | reference | Prompt injection is #1 — map every AI feature you ship against this list |
| PlanetScale engineering blog | blog | Excellent on running vector search and scaled workloads on databases you already know |
My personal list — four years of it, dumped in full
Everything above this point was already organized by topic. What follows is the messier, more honest version: the actual pile I've built up over four years of job switches and interview prep, cleaned up just enough to be readable. Some of it is a polished engineering blog. Some of it is a random note I saved on Zoho Notebook at 1am before an interview. That's the point — a real resource list looks like this, not like a neat curated homepage. Use it, then go build your own version that looks just as messy and just as yours.
Distributed systems & fundamentals
| Title | Why read |
|---|---|
| Distributed Systems — IntroductionLeetCode Discuss | A solid beginner-to-intermediate foundation before you touch a system design round |
| All Things DistributedWerner Vogels, Amazon CTO | Amazon-level thinking on distributed systems, written by the person actually responsible for it |
| High Scalability | Real-world architectures — Netflix, Facebook, and dozens of others, broken down |
Databases — SQL, NoSQL, scaling
| Title | Why read |
|---|---|
| SQL vs NoSQLPlanetScale | Know when to reach for which — a question that shows up in almost every backend interview |
| Designing Highly Scalable Database ArchitecturesRedgate Simple-Talk | Scaling patterns beyond "just add an index" |
| Database Sharding StrategiesRedgate Simple-Talk | Horizontal scaling, explained properly |
| Create a Stored ProcedureMicrosoft Learn | Backend DB logic — worth knowing even if your team leans against stored procs, so you know the trade-off first-hand |
System design core — HLD + patterns
| Title | Why read |
|---|---|
| InterviewReady/system-design-resourcesGitHub · 18.5k★ | Structured prep, one level more organized than the primer above |
| Hello Interview — System Design in a Hurry | Genuinely good for quick revision the night before a round |
Concurrency & multithreading
| Title | Why read |
|---|---|
| Introduction to ConcurrencyAlgoMaster | Interview-flavored basics, good as a refresher before section 03 above |
| Java ConcurrencyBaeldung | The practical, code-first companion to the theory in section 03 |
Messaging, microservices & architecture
| Title | Why read |
|---|---|
| Building a Unified Events Platform at ShareChatShareChat Engineering | A real, working event-driven system, not a diagram in a slide deck |
| Asynchronous Message-Based CommunicationMicrosoft Learn | Async patterns between microservices, explained cleanly |
| Distributed Transactions & Two-Phase Commit (2PC)DesignGurus | A genuinely common interview topic that most candidates only half-understand |
Caching, hashing & rate limiting
| Title | Why read |
|---|---|
| Consistent HashingArpit Bhayani | Load balancing and partitioning, explained by someone who writes about this constantly and well |
| Rate Limitersystemsdesign.cloud | One of the most common system design interview questions there is |
Security & networking basics
| Title | Why read |
|---|---|
| What is SSL / HTTPS vs HTTPCloudflare Learning | Encryption basics you should be able to explain without hand-waving |
| OWASP API Security Top 10F5 Glossary | The API-specific sibling of the LLM security list in section 10 |
| What is an Attack VectorSafe Security | General security awareness, worth 10 minutes |
| What is ARPFortinet Cyberglossary | Networking fundamentals that quietly come up in infra debugging |
| What is iptablesLinode Docs | Linux networking, useful the day you're debugging why a pod can't reach another pod |
Observability & performance
| Title | Why read |
|---|---|
| Database MonitoringSplunk | What "production database monitoring" actually means beyond a green dashboard |
| Understanding Java Garbage CollectionDatadog | A great companion to the JVM/GC part of section 04 |
| Datadog Engineering Blogdatadoghq.com | Consistently strong writing on monitoring, tracing, and running things at scale |
| Observability Platform Designcrackingwalnuts.com | A more advanced, systems-level take once logs/metrics/traces from section 09 feel easy |
Real-world case studies — very much worth your time
| Title | Why read |
|---|---|
| Kotak Bank Modernizes Microledgers Using DynamoDBAWS Blog | Fintech system design, at Indian-banking scale — genuinely rare to find this level of public detail |
| Building a Mental Model for Stripe PaymentsStripe | A payments architecture deep dive that survives follow-up questions |
| Spotify Engineering | Microservices at genuine consumer scale |
| Uber Backend Engineering Blog | Real-world scaling problems, written by the people who hit them |
| LinkedIn Engineering Blog | Infra and platform write-ups at LinkedIn's scale |
Misc + advanced learning
| Title | Why read |
|---|---|
| Kafka NotesStephen Holiday | A dense, no-fluff PDF on messaging systems |
| How the JIT Optimizes CodeIBM Docs | Pairs directly with the JIT part of section 04 |
| Learn Anything | A knowledge-graph way of exploring a topic — good for when you don't even know what to search for yet |
| AlgorithmsHired in Tech | Core DSA, if that foundation still needs shoring up alongside everything else here |
| Pipelining & HazardsAlgorithmica — High Performance Computing | CPU-level detail that pairs directly with the false-sharing discussion in section 03 |
| How Query Engines Work — Type Systems | For once you're comfortable with SQL and want to know what's actually happening underneath it |
| 1.5 Million PDFs in 25 MinutesZerodha Tech | One of the best "here's the actual engineering trade-off we made" write-ups from an Indian tech blog |
| A Curated List of ML System Design Case StudiesGitHub · 11k★ | If the ML/AI infra specialization from section 11 appeals to you |
| Optimization vs Architecture: Knowing the DifferenceTiger Data | A genuinely useful distinction most engineers blur together |
| Why OS RAM and Postgres Buffer Cache CompeteTiger Data | Deep, specific, and rarely explained this clearly elsewhere |
| The Hidden Performance Cost of Wildcard QueriesTiger Data | A direct, practical companion to the indexing part of section 07 |
| PostgreSQL VACUUM MonitoringDatadog | MVCC from section 07, made concrete — this is what "cleaning up after MVCC" actually looks like in production |
| Hackernoon | A general engineering-writing aggregator — hit or miss, but worth skimming periodically |
13YouTube channels worth your time
Rule of thumb I'd genuinely follow myself: subscribe to few, finish what you start, build something after each one. Grouped by the job each channel does for you.
Java, Spring & enterprise Java AI
- Concept & Coding by Shrayansh — my top pick, and I've already said why three times above. Java, multithreading, LLD, HLD — all genuinely strong.
- Dan Vega — Spring Boot and Spring AI, practical and Java-first.
- Josh Long / "Coffee + Software" — Spring Developer Advocate; Spring internals, Spring AI, MCP, GraalVM.
- SpringDeveloper (official) — talks and guides straight from the Spring team.
AI concepts and building
- Andrej Karpathy — the best single mental model of what an LLM actually is.
- 3Blue1Brown — visual intuition for the neural-net math underneath it.
- IBM Technology — 5–10 minute whiteboard explainers on RAG, agents, embeddings.
- DeepLearning.AI — structured, tool-specific short courses, taught by the people who built the tools.
System design and interviews
- ByteByteGo — visual system design; now includes GenAI system design too.
- Hello Interview — interview-realistic walkthroughs, shows how answers actually get graded.
- Gaurav Sen — fundamentals and the reasoning behind each pattern.
- Hussein Nasser — why databases, proxies and protocols behave the way they do.
14Three projects that prove it
Don't build twenty demos. Build these three, ship them publicly, and write honestly about what broke.
1530-60-90 day plans
Pick the one that matches where you are. These assume roughly 8–10 focused hours a week alongside a job or studies — consistency beats intensity every single time.
Fresher / student
Junior (1–3 yrs)
Mid-level (3–6 yrs)
Senior / experienced (6+ yrs)
16Build your own resource system
Everything above is my version of a goldmine. Go back and reread the note at the top of this page before you treat it as the only one.
So instead of another curated list, here's the actual skill: the types of places to look, and how to use each one to build a list that's genuinely yours — not copy mine, build one.
| Where to look | Example | How to actually use it |
|---|---|---|
| Search engines, properly | Google, with operators | Use site:, quotes, and - to exclude noise. Search for the concept you're stuck on, not "roadmap" — you'll land on the exact page that unblocks you. |
| GitHub search & topics | github.com/topics/system-design, github.com/trending | Search by topic tag, sort by stars, and skim the README before you trust it. This is how I found every repo linked on this page. |
| A list of lists | sindresorhus/awesome · 511.9k★ | One giant index of curated "awesome-X" lists across every topic. Whatever you're learning next, there's probably an awesome-list for it already. |
| Company engineering blog aggregators | kilimchoi/engineering-blogs · 38.7k★ | A single index of hundreds of company engineering blogs — Netflix, Uber, Snowflake, and everyone else I've linked in this guide came from a list exactly like this one. |
| Communities & discussion | Hacker News, Lobsters, r/ExperiencedDevs | Search past threads, not just the front page — someone's already asked "best resource for X" and the comments are usually better than any list. |
| An LLM, used as a research partner | Claude, or whichever model you use | Not "give me a roadmap." Ask it to break down a concept you're stuck on, quiz you on it, or turn your own notes into a study plan — see the prompt below. |
"Here's what I'm trying to learn: [topic]. Don't give me a generic roadmap. Instead: break it into sub-concepts, ask me what I already know about each one, point out the gaps based on my answers, and then help me turn those gaps into a short study plan I'll actually stick to."
Final word
Look — frameworks will keep changing. Models will keep improving. Some of what's genuinely hard today will just be a managed service you click a button for next year. But here's what won't change: systems still need to be reliable, secure, observable and affordable, and someone has to be trusted to make that true when the component sitting in the middle is probabilistic instead of deterministic. That someone is a strong backend engineer who actually took the time to learn how AI behaves — not someone who memorized a framework's API before it changed again.
This page can genuinely help you get started, in a lot of ways. But if you take one piece of advice from me on this whole journey of preparation and job switching, let it be this: document your own learning as you go, find your own good resources, experiment, and actually learn from what you find. You will become a far better engineer working with all of it your own way than you ever will just following mine.
Start small. Stay consistent. Build big.
Go back to section 01
If you skipped ahead — don't. The AI layer only pays off on top of a genuinely solid Java foundation.
Now write the resume that proves it
Once you've shipped Project 1, this is the guide for turning it into bullets that survive a follow-up question.