Career / Java Backend Field Notes

Same fundamentals. Bigger opportunities with AI.

Sit with me for twenty-five minutes. I'm not going to hand you another "Java → Spring → SQL → Kafka → AWS" checklist you've seen a hundred times. I want to actually walk you through what to learn, in what order, and — this is the part most guides skip — exactly where to go learn it, section by section, as we go. Not a dump of fifty links at the bottom you'll never open.

How I'd use this if I were you: if your Java is already rock solid, jump to section 10 — AI for everyone. If you're even a little unsure, don't skip ahead — read 01 through 09 properly first. I promise the AI layer only clicks once the foundation underneath it is real.

Read this before anything else

Stop relying on tech influencers to build your roadmap.

Today, you'll see tech influencers — including me — constantly sharing AI-generated roadmaps, resources, courses, and "must-follow" lists. This page you're reading right now is one of those. So before you go any further, I want to say something that matters more than anything below it.

Ask yourself something. You're preparing for an engineering role. Why aren't you searching Google? Why aren't you asking an LLM? Why aren't you discovering resources yourself?

I have 4 years of experience, multiple job switches, and a lot of interviews behind me. And one thing I've realized is this: when you search for and discover resources yourself, you remember them better. Because you actually went through the process of Search → Explore → Compare → Choose → Learn — instead of simply saving a resource someone else handed you.

And honestly, there is no single "goldmine" of resources. A resource I love might be completely boring or ineffective for you. Maybe I like reading technical blogs. You might learn better through videos. Someone else might prefer documentation. Someone else might learn by building projects. Everyone has their own way of learning.

And let me be straight with you about how this exact page got built, because it matters more than the polish makes it look: I used AI to help scrape, sort and structure a chunk of this. The resource list further down is genuinely mine — four years of bookmarks, blog posts, GitHub repos, half-broken notebook links, saved tweets, and interview debriefs I've collected while switching jobs and prepping for rounds at companies that rejected me the first time. I leveraged AI to pull all of that together into something readable. So why wouldn't you? You are no less capable than I am, and you are no less capable than anyone sitting inside any big tech company right now, today. The thing missing usually isn't talent — it's direction. So start by being honest with yourself about where you actually stand right now, not where you wish you were.

That's exactly why I believe that, as an engineer, you should be able to build your own roadmap.

If you're targeting strong engineering roles or big tech companies, you should work towards becoming smart enough to answer: What do I need to learn? How deeply do I need to learn it? Which resources actually work for me? What should I build? How much time should I spend on each topic?

Open your Notes app. Open Notion. Create your own document. Start documenting the things below — and this is exactly where AI becomes extremely powerful, if you use it right.

Start documenting

  • Topics you need to learn
  • Concepts you struggle with
  • Resources you discover
  • Questions you get wrong
  • Interview experiences
  • Things you want to revise
  • Projects you want to build
  • Your own explanations, in your own words

Use AI to build your own system — don't just ask "give me a roadmap"

  • Break a concept down into sub-concepts
  • Find gaps in your own understanding
  • Generate questions based on what you're learning
  • Explain a difficult topic a different way
  • Create revision notes
  • Turn your interview mistakes into a study plan
  • Generate project ideas
  • Quiz you, then review your roadmap and organize what you've found

Leverage AI to become a better engineer — not to outsource your thinking. Tech influencers, myself included, can introduce you to resources. We can give you ideas. We can help you discover things you might have missed. But don't make us your dependency. Because the goal isn't to become someone who's constantly waiting for "the next roadmap," "the next resource list," "the next 100 must-read links." The goal is to become the engineer who can find, evaluate, organize, and learn whatever is needed, on their own. That's a far more valuable skill than any list — including this one.

So yes — follow tech influencers. I love reading tech blogs. I love discovering new resources. I share resources myself, and you'll find plenty of them woven through this page. But remember: you don't need someone else to hand you a goldmine. Learn how to build your own.

Because ultimately, an engineer should be able to make their own roadmap, choose their own resources, create their own learning system, and continuously improve it.

Leverage AI. Do the research yourself. Build your own resources. Become a better engineer. — Abhishek

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.

Core philosophy
I'll tag things as we go: CORE means you must know this before moving on. DEPTH means learn it properly the moment a real project or interview asks for it. SPECIALIZE means pick this only once you know which direction you're headed. Don't try to max out every row on week one — that's exactly how people burn out and quit in six weeks.

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 nowSkip 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 String is immutable, what the string pool actually is, and when StringBuilder genuinely matters for performance — not just "always use StringBuilder in a loop" as a rule you memorized. Deep dive: why Strings are immutable →
  • ✓
    == vs equals(), and the equals()/hashCode() contractOverride one, you must override both. Be ready to explain why breaking that contract silently corrupts a HashSet.
  • ✓
    Autoboxing trapsWhy Integer a = 127; Integer b = 127; gives a == b as true, but the same thing with 200 gives false. The integer cache — and why it matters more than it looks like it should.
  • ✓
    Comparable vs ComparatorNatural, built-in ordering vs an external, pluggable one — and know when a class genuinely needs both.
My honest pick

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.

Go deeper on section 01

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

"I know HashMap"
Key → hash → bucket → value. O(1) lookup.
"I understand HashMap"
Hashing, hash function quality, buckets, collision resolution, load factor + resizing + rehashing, treeification into a red-black tree past a threshold, average vs worst-case complexity, why a mutable key silently breaks your lookups.

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.

Prompt you can reuse

"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."

Go deeper on section 02

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.

01

Threads & the basics

Process vs thread, thread lifecycle, Runnable vs Callable vs Future, thread interruption, daemon threads.

02

Synchronization

Race conditions, critical sections, synchronized, intrinsic locks, the monitor, ReentrantLock, ReadWriteLock, StampedLock.

03

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.

04

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.

05

Atomics & lock-free thinking

AtomicInteger/AtomicLong/AtomicReference, compare-and-swap, CAS loops, and the ABA problem.

06

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.

07

Problems you must be able to reason about

Race condition, deadlock, livelock, starvation, thread contention, lock contention.

Done when
You can explain why a multithreaded program behaves differently from a single-threaded one, and you can reason about correctness, visibility, and performance — not just sprinkle synchronized everywhere and hope nothing deadlocks.
Again — same channel

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.

Go deeper on section 03

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.

Done when
You can investigate why a Java service is slow or leaking memory — instead of restarting the pod and quietly hoping it doesn't happen again tonight.
Go deeper on section 04
  • 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.

Done when
You can walk me through what happens, step by step, between "Spring Boot application starts" and "a request reaches your controller" — component scan, context refresh, bean wiring, all of it.
Go deeper on section 05

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.

Done when
You can design a genuinely reliable API — not just a set of CRUD endpoints that happen to work fine in the demo.
Go deeper on section 06

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.

The N+1 query problem
What causes it, how to actually detect it — turn on SQL logging and count the queries, don't guess — and the three real fixes: fetch joins, entity graphs, batch fetching. Out of everything on this whole page, this single problem shows up in more production incidents than almost anything else I've dealt with. Take it seriously.

Also make sure you're solid on: optimistic vs pessimistic locking, connection pools, and how transactions interact with Hibernate's session underneath.

Done when
You can diagnose why a database-backed API is slow — instead of reflexively adding an index or bumping the connection pool size and hoping it goes away.
Go deeper on section 07

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.

Done when
You can explain what happens when one service, one database, or one network link fails — and what your system actually does about it, instead of just falling over.
Go deeper on section 08

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.

One more time

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.

The resource you specifically shouldn't skip: Microsoft's Azure Architecture Center
This one deserves its own callout, not just a bullet in a list, because it's genuinely underused by backend engineers who aren't on Azure and assume it's not for them — it is. Two pages in particular:
  • 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.
Go deeper on section 09
Be honest with yourself here
Sections 01 through 09 are what "way ahead of the market" actually means in practice. Most candidates can recite Spring annotations. Very few can explain false sharing, the outbox pattern, and why their own service's p99 is bad — in the same interview. If you feel stuck not getting the "next big company" shot despite doing solid day-to-day work, this is almost always the actual gap. It's rarely a talent problem.

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 callLLM call
MillisecondsSeconds, often streamed
Fixed costCost per token
Same input → same outputSame input → different output
Fails loudlyFails quietly — a confident wrong answer
Input validated by schemaInput is natural language, can carry an attack
Unit tests prove correctnessYou 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.

Go deeper — LLM fundamentals

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.

Go deeper — calling models from Java

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.

Go deeper — embeddings & vector search
  • 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

Fig. 1

The RAG pipeline

The RAG pipelineDocuments are chunked and embedded into a vector store such as pgvector. At answer time, retrieval plus reranking pulls context, the context is built with citations, the LLM produces an answer, and it goes to the user. Each numbered arrow is a place to diagnose failures: bad ingestion, bad chunking, bad embeddings, poor retrieval, poor reranking, poor generation.IngestionRetrieval & generationDocumentschunk + embedVector storepgvector, etc.Retrieval+ rerankContext built+ citationsLLManswerUser123456bad ingestionbad chunkingbad embeddingspoor retrievalpoor rerankingpoor generation
Diagnose failures at each arrow: bad ingestion, bad chunking, bad embeddings, poor retrieval, poor reranking, poor generation.

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.

Go deeper — RAG

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.

Go deeper — tools, MCP & agents

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.

Go deeper — evaluation

AI security — map it to OWASP

RiskWhat you actually do
Prompt injectionSeparate instructions from untrusted content; treat retrieved text as hostile by default
Sensitive information disclosureEnforce access control before retrieval, not after
Improper output handlingTreat model output as untrusted input to whatever runs next
Excessive agencyMinimum tools, minimum permissions, human approval for risky actions
Unbounded consumptionRate limits, quotas, max tokens, max tool-loop depth
Go deeper — AI security

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.

Go deeper — Java AI ecosystem
Done when
You can integrate an LLM into a Java backend and reason about its reliability, cost, latency, security, and correctness — the exact same five things you already reason about for every other service call you make.

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

TrackGo deep on
Backend / API engineerJava, Spring Boot, APIs, databases, distributed systems, performance
Distributed systems engineerKafka, distributed databases, consistency, consensus, fault tolerance
AI product / AI backend engineerLLM APIs, RAG, agents, tool calling, MCP, evals, AI security, Spring AI, LangChain4j
AI infrastructure engineerInference, serving, GPU/compute, model gateways, Kubernetes, vLLM
Model / LLM engineerFine-tuning, LoRA/QLoRA, distillation, quantization, inference optimization
Frontier — watch, don't chase
Recursive language models, self-evolving agents, world models, agent-to-agent commerce protocols, long-horizon autonomy. Know what's happening in this space. Don't rebuild your whole roadmap around whatever's trending this quarter.
Go deeper on section 11
  • 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★ / typeWhy
Concept & Coding by ShrayanshYouTubeMy top recommendation on this whole page — Java, multithreading, LLD and HLD, all genuinely well taught
BaeldungblogThe default first search result for almost any specific Java/Spring question
iluwatar/java-design-patterns94.7k★Every classic design pattern in real, runnable Java
Vlad Mihalcea's blogblogThe deepest free material on Hibernate/JPA internals and the N+1 problem
JSR-133 Cookbook (Doug Lea)referenceAs close to the actual Java Memory Model source material as free content gets

System design, LLD & distributed systems

Resource★ / typeWhy
Azure Architecture Center — Cloud Design PatternsreferenceTechnology-agnostic catalog of every distributed-system pattern you'll actually be asked about
Azure Well-Architected Framework — Reliability pillarreferenceA free, structured checklist for "is this system actually production-ready"
donnemartin/system-design-primer372k★Still the best starting point for HLD fundamentals
ashishps1/awesome-low-level-design27.1k★LLD problems with solutions — the classics you'll get asked
microservices.io (Chris Richardson)referenceThe pattern catalog for saga, CQRS, outbox — from the person who wrote the book on it
The Amazon Builders' LibraryblogFree, written by Amazon's senior engineers, on how they actually build resilient services
Netflix Tech BlogblogReal distributed-systems decisions at scale, with the reasoning included
Confluent blogblogThe deepest Kafka-specific writing, straight from the company behind it
Snowflake Engineering BlogblogHow a real data platform reasons about scale in public

AI & LLM engineering

Resource★ / typeWhy
rasbt/LLMs-from-scratch105.7k★Build a GPT-style LLM from scratch — the deepest free way to understand one
Spring AI reference docsreferenceSource of truth for ChatClient, RAG, tool calling, and MCP in Spring
NirDiamant/RAG_Techniques29.6k★Every RAG failure mode, with working code
Anthropic — Building Effective AgentsblogThe clearest write-up on workflows vs agents anywhere
Hamel Husain's blogblogThe single most practical writing on evals that exists today
OWASP Top 10 for LLM ApplicationsreferencePrompt injection is #1 — map every AI feature you ship against this list
PlanetScale engineering blogblogExcellent 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

TitleWhy read
Distributed Systems — IntroductionLeetCode DiscussA solid beginner-to-intermediate foundation before you touch a system design round
All Things DistributedWerner Vogels, Amazon CTOAmazon-level thinking on distributed systems, written by the person actually responsible for it
High ScalabilityReal-world architectures — Netflix, Facebook, and dozens of others, broken down

Databases — SQL, NoSQL, scaling

TitleWhy read
SQL vs NoSQLPlanetScaleKnow when to reach for which — a question that shows up in almost every backend interview
Designing Highly Scalable Database ArchitecturesRedgate Simple-TalkScaling patterns beyond "just add an index"
Database Sharding StrategiesRedgate Simple-TalkHorizontal scaling, explained properly
Create a Stored ProcedureMicrosoft LearnBackend 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

TitleWhy read
InterviewReady/system-design-resourcesGitHub · 18.5k★Structured prep, one level more organized than the primer above
Hello Interview — System Design in a HurryGenuinely good for quick revision the night before a round

Concurrency & multithreading

TitleWhy read
Introduction to ConcurrencyAlgoMasterInterview-flavored basics, good as a refresher before section 03 above
Java ConcurrencyBaeldungThe practical, code-first companion to the theory in section 03

Messaging, microservices & architecture

TitleWhy read
Building a Unified Events Platform at ShareChatShareChat EngineeringA real, working event-driven system, not a diagram in a slide deck
Asynchronous Message-Based CommunicationMicrosoft LearnAsync patterns between microservices, explained cleanly
Distributed Transactions & Two-Phase Commit (2PC)DesignGurusA genuinely common interview topic that most candidates only half-understand

Caching, hashing & rate limiting

TitleWhy read
Consistent HashingArpit BhayaniLoad balancing and partitioning, explained by someone who writes about this constantly and well
Rate Limitersystemsdesign.cloudOne of the most common system design interview questions there is

Security & networking basics

TitleWhy read
What is SSL / HTTPS vs HTTPCloudflare LearningEncryption basics you should be able to explain without hand-waving
OWASP API Security Top 10F5 GlossaryThe API-specific sibling of the LLM security list in section 10
What is an Attack VectorSafe SecurityGeneral security awareness, worth 10 minutes
What is ARPFortinet CyberglossaryNetworking fundamentals that quietly come up in infra debugging
What is iptablesLinode DocsLinux networking, useful the day you're debugging why a pod can't reach another pod

Observability & performance

TitleWhy read
Database MonitoringSplunkWhat "production database monitoring" actually means beyond a green dashboard
Understanding Java Garbage CollectionDatadogA great companion to the JVM/GC part of section 04
Datadog Engineering Blogdatadoghq.comConsistently strong writing on monitoring, tracing, and running things at scale
Observability Platform Designcrackingwalnuts.comA more advanced, systems-level take once logs/metrics/traces from section 09 feel easy

Real-world case studies — very much worth your time

TitleWhy read
Kotak Bank Modernizes Microledgers Using DynamoDBAWS BlogFintech system design, at Indian-banking scale — genuinely rare to find this level of public detail
Building a Mental Model for Stripe PaymentsStripeA payments architecture deep dive that survives follow-up questions
Spotify EngineeringMicroservices at genuine consumer scale
Uber Backend Engineering BlogReal-world scaling problems, written by the people who hit them
LinkedIn Engineering BlogInfra and platform write-ups at LinkedIn's scale

Misc + advanced learning

TitleWhy read
Kafka NotesStephen HolidayA dense, no-fluff PDF on messaging systems
How the JIT Optimizes CodeIBM DocsPairs directly with the JIT part of section 04
Learn AnythingA knowledge-graph way of exploring a topic — good for when you don't even know what to search for yet
AlgorithmsHired in TechCore DSA, if that foundation still needs shoring up alongside everything else here
Pipelining & HazardsAlgorithmica — High Performance ComputingCPU-level detail that pairs directly with the false-sharing discussion in section 03
How Query Engines Work — Type SystemsFor once you're comfortable with SQL and want to know what's actually happening underneath it
1.5 Million PDFs in 25 MinutesZerodha TechOne 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 DataA genuinely useful distinction most engineers blur together
Why OS RAM and Postgres Buffer Cache CompeteTiger DataDeep, specific, and rarely explained this clearly elsewhere
The Hidden Performance Cost of Wildcard QueriesTiger DataA direct, practical companion to the indexing part of section 07
PostgreSQL VACUUM MonitoringDatadogMVCC from section 07, made concrete — this is what "cleaning up after MVCC" actually looks like in production
HackernoonA general engineering-writing aggregator — hit or miss, but worth skimming periodically
And some of it isn't a link at all
Not everything worth keeping is a polished blog post. Some of what actually helped me was a spreadsheet I built myself while job hunting, a tweet I saved at 1am, or a shared Drive folder a friend sent over. Those don't belong on someone else's page — they belong in your own notes. That's the whole point of section 16 below.

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.
Staying current, without chasing hype
Follow the first-party sources for launches — Anthropic, the Spring blog, whichever model vendor you actually use. Everything else — leaderboards, "new framework of the week" content — is optional reading, not something to build your roadmap around.

14Three projects that prove it

Don't build twenty demos. Build these three, ship them publicly, and write honestly about what broke.

Project 1 — everyone
Enterprise RAG platform: Spring Boot + Spring AI + pgvector + Redis. Role-based access on retrieval, citations, streaming, a small eval set with retrieval and answer scores.
Project 2 — mid-level and above
AI dev assistant with MCP: "Why did my deployment fail?" — reads commits, checks CI, inspects logs. Tool validation, audit log, human confirmation before any write.
Project 3 — senior / architect
Production AI service: model router with fallback, tool registry, guardrails, cache, cost tracking, tracing and evals. Publish the design doc and the cost model, not just the code.
For every project, publish
A README with an architecture diagram, one honest write-up of what broke, and a measured result — latency, cost per request, eval score. That's the evidence hiring managers actually look for.

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
Days 1–30: Java, collections, OOP, SQL, one solid Spring Boot CRUD service with tests. Days 31–60: AI fundamentals, call an LLM from Spring AI, structured output to a POJO. Days 61–90: Project 1 (simple RAG on pgvector), write it up publicly.
Junior (1–3 yrs)
Days 1–30: Spring AI ChatClient, streaming, structured output — ship one real AI feature at work or on a side project. Days 31–60: RAG with pgvector, first eval set. Days 61–90: Tool calling, a small MCP server, publish Project 1.
Mid-level (3–6 yrs)
Days 1–30: Project 1 with RBAC retrieval and hybrid search, baseline eval scores. Days 31–60: Project 2 — MCP tools, audit logging, tracing. Days 61–90: cost/latency tuning, prompt-injection tests, two AI system design practices a week.
Senior / experienced (6+ yrs)
Days 1–30: audit how your org actually uses AI today; define eval/observability/security standards. Days 31–60: Project 3 — routing, fallbacks, caching, budgets, written design doc. Days 61–90: run one production AI feature through the OWASP LLM Top 10, then teach it to your team.

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 lookExampleHow to actually use it
Search engines, properlyGoogle, with operatorsUse 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 & topicsgithub.com/topics/system-design, github.com/trendingSearch 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 listssindresorhus/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 aggregatorskilimchoi/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 & discussionHacker News, Lobsters, r/ExperiencedDevsSearch 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 partnerClaude, or whichever model you useNot "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.
Prompt you can reuse — to build your own system, not borrow mine

"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."

The point of this section
These are types of places to look, not a final list — that's deliberate. If all you take from this page is a bigger list of links to hoard, I've failed at the one thing I actually wanted to teach you. Go build the version of this page that's yours.

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.