[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"courses-en":3,"i-lucide:chevron-down":144,"i-lucide:search":148,"i-lucide:sun":150,"i-lucide:moon":152,"i-lucide:arrow-right":154,"i-lucide:menu":156,"i-lucide:mail":158,"i-simple-icons:x":160,"i-simple-icons:linkedin":162,"i-simple-icons:dribbble":164,"i-simple-icons:github":166,"i-lucide:chevron-right":168,"i-lucide:layers":170,"i-lucide:lock":172,"i-lucide:circle-dashed":174,"i-lucide:workflow":176,"i-lucide:blocks":178,"i-lucide:circle":180,"i-lucide:network":182,"i-lucide:circle-dot":184,"i-lucide:clock":186},[4,45,78,109],{"id":5,"title":6,"access":7,"body":8,"description":15,"draft":16,"estimatedMinutes":17,"extension":18,"featured":16,"icon":19,"lang":20,"level":21,"meta":22,"navigation":23,"order":24,"path":25,"prerequisites":26,"resources":27,"seo":33,"sku":31,"stem":34,"subjects":35,"summary":37,"tags":38,"updated":43,"__hash__":44},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fcaching\u002Findex.md","Caching strategies","premium",{"type":9,"value":10,"toc":11},"minimark",[],{"title":12,"searchDepth":13,"depth":13,"links":14},"",3,[],"Read-through, write-behind, invalidation and the failure modes each one buys.",false,40,"md","lucide:layers","en","advanced",{},true,1,"\u002Flearn\u002Fen\u002Fcourses\u002Fcaching",[],[28],{"label":29,"file":30,"access":7,"sku":31,"size":32},"Caching decision matrix","caching-decision-matrix.pdf","topic-caching-strategies","310 KB",{"title":6,"description":15},"learn\u002Fen\u002Fcourses\u002Fcaching\u002Findex",[36],"system-design","A cache is a bet that reading stale data is cheaper than reading correct data.\nThe strategies differ in who writes to the cache, when, and what happens when\nthe cache and the source disagree. Cache-aside is the default because it fails\nsafely. Write-behind is the fastest and loses data on a crash. Almost every\nproduction incident involving a cache comes down to invalidation, stampedes, or\na cache that was quietly doing nothing at all.\n",[39,40,41,42],"caching","performance","consistency","redis","2026-08-06","mqYWifp5mzccLyzSY681N-Yn1wymognvHpRRfhOtFBI",{"id":46,"title":47,"access":48,"body":49,"description":53,"draft":16,"estimatedMinutes":54,"extension":18,"featured":23,"icon":55,"lang":20,"level":56,"meta":57,"navigation":23,"order":24,"path":58,"prerequisites":59,"resources":60,"seo":65,"sku":66,"stem":67,"subjects":68,"summary":70,"tags":71,"updated":76,"__hash__":77},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fevent-loop\u002Findex.md","The event loop","free",{"type":9,"value":50,"toc":51},[],{"title":12,"searchDepth":13,"depth":13,"links":52},[],"Call stack, task queues and microtasks — why your code ran in that order.",30,"lucide:workflow","intermediate",{},"\u002Flearn\u002Fen\u002Fcourses\u002Fevent-loop",[],[61],{"label":62,"file":63,"access":48,"size":64},"Event loop reference card","js-event-loop-card.pdf","95 KB",{"title":47,"description":53},null,"learn\u002Fen\u002Fcourses\u002Fevent-loop\u002Findex",[69],"javascript","JavaScript runs on one thread with one call stack. Anything asynchronous is\nhanded to the host environment, which puts a callback in a queue when it is\nready. The event loop moves work from those queues onto the stack, but only\nwhen the stack is empty. Microtasks — promise continuations — drain completely\nbetween each task, which is why an await resolves before a setTimeout of zero.\nAlmost every ordering surprise in JavaScript follows from those rules.\n",[72,73,74,75],"async","promises","runtime","concurrency","2026-08-05","BOC7v_GWQoKJp-mEK6X_H0pY-0KcxkhIWnXKWsm8c9k",{"id":79,"title":80,"access":48,"body":81,"description":85,"draft":16,"estimatedMinutes":86,"extension":18,"featured":16,"icon":87,"lang":20,"level":88,"meta":89,"navigation":23,"order":24,"path":90,"prerequisites":91,"resources":92,"seo":97,"sku":66,"stem":98,"subjects":99,"summary":101,"tags":102,"updated":107,"__hash__":108},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fpods\u002Findex.md","Pods and workloads",{"type":9,"value":82,"toc":83},[],{"title":12,"searchDepth":13,"depth":13,"links":84},[],"The smallest deployable unit, and the controllers that manage sets of them.",25,"lucide:blocks","beginner",{},"\u002Flearn\u002Fen\u002Fcourses\u002Fpods",[],[93],{"label":94,"file":95,"access":48,"size":96},"Workload controller decision tree","k8s-workload-controllers.pdf","120 KB",{"title":80,"description":85},"learn\u002Fen\u002Fcourses\u002Fpods\u002Findex",[100],"kubernetes","A pod is one or more containers sharing a network namespace and a lifecycle.\nYou rarely create one directly — Deployments, StatefulSets, DaemonSets and Jobs\neach manage pods with different guarantees about identity, ordering and\nreplacement. Choosing the wrong controller is the root of a surprising number\nof production problems, because the guarantee you assumed was never offered.\n",[103,104,105,106],"pods","deployments","statefulsets","workloads","2026-08-04","m76OXiUC-jLIAp9S_k3i7kuptZfYW5jrdGa40vEITF8",{"id":110,"title":111,"access":48,"body":112,"description":116,"draft":16,"estimatedMinutes":117,"extension":18,"featured":23,"icon":118,"lang":20,"level":56,"meta":119,"navigation":23,"order":120,"path":121,"prerequisites":122,"resources":124,"seo":134,"sku":66,"stem":135,"subjects":136,"summary":137,"tags":138,"updated":43,"__hash__":143},"courses\u002Flearn\u002Fen\u002Fcourses\u002Fnetworking\u002Findex.md","Kubernetes Networking",{"type":9,"value":113,"toc":114},[],{"title":12,"searchDepth":13,"depth":13,"links":115},[],"Services, Ingress and network policy — how a packet actually reaches a pod.",45,"lucide:network",{},2,"\u002Flearn\u002Fen\u002Fcourses\u002Fnetworking",[123],"\u002Flearn\u002Fen\u002Fkubernetes\u002Fpods",[125,129],{"label":126,"file":127,"access":48,"size":128},"Service types cheat sheet","k8s-service-types.pdf","180 KB",{"label":130,"file":131,"access":7,"sku":132,"size":133},"NetworkPolicy recipe pack","k8s-network-policies.pdf","res-k8s-netpol","640 KB",{"title":111,"description":116},"learn\u002Fen\u002Fcourses\u002Fnetworking\u002Findex",[100],"Kubernetes networking rests on one rule: every pod gets its own IP and can\nreach every other pod without NAT. Everything above that — Services, Ingress,\nNetworkPolicy — exists because pod IPs are not stable and not exposed.\nServices give you a stable virtual IP and load balancing. Ingress puts an\nHTTP router in front of Services so many hostnames share one entry point.\nNetworkPolicy takes the default-allow flat network and narrows it down. Get\nthose three roles clear and the failure modes stop being mysterious.\n",[139,140,141,142],"networking","services","ingress","cni","GumIppvDWYP1scgT_rOvScFGIQ-Wqs-Uax-NJtxnUbU",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":147},0,24,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":149},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"\u002F>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":151},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":153},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":155},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":157},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":159},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"\u002F>\u003Crect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":161},"\u003Cpath fill=\"currentColor\" d=\"M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":163,"hidden":23},"\u003Cpath fill=\"currentColor\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":165},"\u003Cpath fill=\"currentColor\" d=\"M12 24C5.385 24 0 18.615 0 12S5.385 0 12 0s12 5.385 12 12s-5.385 12-12 12m10.12-10.358c-.35-.11-3.17-.953-6.384-.438c1.34 3.684 1.887 6.684 1.992 7.308a10.28 10.28 0 0 0 4.395-6.87zm-6.115 7.808c-.153-.9-.75-4.032-2.19-7.77l-.066.02c-5.79 2.015-7.86 6.025-8.04 6.4a10.16 10.16 0 0 0 6.29 2.166c1.42 0 2.77-.29 4-.814zm-11.62-2.58c.232-.4 3.045-5.055 8.332-6.765q.202-.067.405-.12q-.392-.879-.832-1.74C7.17 11.775 2.206 11.71 1.756 11.7l-.004.312c0 2.633.998 5.037 2.634 6.855zm-2.42-8.955c.46.008 4.683.026 9.477-1.248a66 66 0 0 0-3.8-5.928a10.28 10.28 0 0 0-5.676 7.17zM9.6 2.052c.282.38 2.145 2.914 3.822 6c3.645-1.365 5.19-3.44 5.373-3.702A10.2 10.2 0 0 0 12 1.764c-.825 0-1.63.1-2.4.285zm10.335 3.483c-.218.29-1.935 2.493-5.724 4.04c.24.49.47.985.68 1.486c.08.18.15.36.22.53c3.41-.43 6.8.26 7.14.33c-.02-2.42-.88-4.64-2.31-6.38z\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":167},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":169},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m9 18l6-6l-6-6\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":171},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\"\u002F>\u003Cpath d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\"\u002F>\u003Cpath d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":173},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M7 11V7a5 5 0 0 1 10 0v4\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":175},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10.1 2.182a10 10 0 0 1 3.8 0m0 19.636a10 10 0 0 1-3.8 0m7.509-18.097a10 10 0 0 1 2.69 2.7M2.182 13.9a10 10 0 0 1 0-3.8m18.097 7.509a10 10 0 0 1-2.7 2.69M21.818 10.1a10 10 0 0 1 0 3.8M3.721 6.391a10 10 0 0 1 2.7-2.69m-.03 16.578a10 10 0 0 1-2.69-2.7\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":177},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"8\" x=\"3\" y=\"3\" rx=\"2\"\u002F>\u003Cpath d=\"M7 11v4a2 2 0 0 0 2 2h4\"\u002F>\u003Crect width=\"8\" height=\"8\" x=\"13\" y=\"13\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":179},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M10 22V7a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1H2\"\u002F>\u003Crect width=\"8\" height=\"8\" x=\"14\" y=\"2\" rx=\"1\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":181},"\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\u002F>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":183},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"6\" height=\"6\" x=\"16\" y=\"16\" rx=\"1\"\u002F>\u003Crect width=\"6\" height=\"6\" x=\"2\" y=\"16\" rx=\"1\"\u002F>\u003Crect width=\"6\" height=\"6\" x=\"9\" y=\"2\" rx=\"1\"\u002F>\u003Cpath d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3m-7-4V8\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":185},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Ccircle cx=\"12\" cy=\"12\" r=\"1\"\u002F>\u003C\u002Fg>",{"left":145,"top":145,"width":146,"height":146,"rotate":145,"vFlip":16,"hFlip":16,"body":187},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 6v6l4 2\"\u002F>\u003C\u002Fg>",1787597898244]