[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:ai-engineer\u002Finference-serving":4,"config":193},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":97,"samples":108},"ai-engineer","AI Engineer","","inference-serving","Inference Serving","tr",75,2025,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,67,70,73,76,79,82,85,88,91,94],{"key":19,"name":20,"count":11},"agents-tool-use","Agents Tool Use",{"key":22,"name":23,"count":11},"aimlops-deployment-strategies-ml","Aimlops Deployment Strategies Ml",{"key":25,"name":26,"count":11},"aimlops-experiment-tracking-reproducibility","Aimlops Experiment Tracking Reproducibility",{"key":28,"name":29,"count":11},"aimlops-feature-store-data-versioning","Aimlops Feature Store Data Versioning",{"key":31,"name":32,"count":11},"aimlops-ml-cicd-pipelines","Aimlops Ml Cicd Pipelines",{"key":34,"name":35,"count":11},"aimlops-model-monitoring-drift-detection","Aimlops Model Monitoring Drift Detection",{"key":37,"name":38,"count":11},"aimlops-model-versioning-registry","Aimlops Model Versioning Registry",{"key":40,"name":41,"count":11},"aipy-async-concurrency-ml-serving","Aipy Async Concurrency Ml Serving",{"key":43,"name":44,"count":11},"aipy-data-pipeline-dataloader","Aipy Data Pipeline Dataloader",{"key":46,"name":47,"count":11},"aipy-gpu-memory-management","Aipy Gpu Memory Management",{"key":49,"name":50,"count":11},"aipy-numpy-vectorization-broadcasting","Aipy Numpy Vectorization Broadcasting",{"key":52,"name":53,"count":11},"aipy-python-ml-packaging-environments","Aipy Python Ml Packaging Environments",{"key":55,"name":56,"count":11},"aipy-tensor-ops-autograd","Aipy Tensor Ops Autograd",{"key":58,"name":59,"count":11},"embeddings-vector-search","Embeddings Vector Search",{"key":61,"name":62,"count":11},"evaluation-testing","Evaluation Testing",{"key":64,"name":65,"count":11},"fine-tuning-adaptation","Fine Tuning Adaptation",{"key":8,"name":9,"count":11},{"key":68,"name":69,"count":11},"llm-fundamentals","Llm Fundamentals",{"key":71,"name":72,"count":11},"prompt-engineering","Prompt Engineering",{"key":74,"name":75,"count":11},"rag-chunking-indexing","Rag Chunking Indexing",{"key":77,"name":78,"count":11},"rag-embeddings-similarity","Rag Embeddings Similarity",{"key":80,"name":81,"count":11},"rag-evaluation","Rag Evaluation",{"key":83,"name":84,"count":11},"rag-generation-context","Rag Generation Context",{"key":86,"name":87,"count":11},"rag-reranking-fusion","Rag Reranking Fusion",{"key":89,"name":90,"count":11},"rag-retrieval","Rag Retrieval",{"key":92,"name":93,"count":11},"rag-retrieval-search","Rag Retrieval Search",{"key":95,"name":96,"count":11},"safety-guardrails","Safety Guardrails",[98,102,105],{"key":99,"name":100,"count":101},"llm-rag","LLM\u002FRAG",450,{"key":103,"name":104,"count":101},"mlops","MLOps",{"key":106,"name":107,"count":101},"python","Python",[109,127,141,154,167,180],{"id":110,"topic":9,"difficulty":111,"body":112,"options":113,"correct_key":118,"explanation":126},"019f5912-4607-753e-b4dc-18ce0b8e80a8",1,"LLM inference'ta 'time to first token' (TTFT), toplam yanıt gecikmesinden farklı olarak neyi ölçer?",[114,117,120,123],{"key":115,"text":116},"a","Yanıttaki tüm output token'ların üretilmesi için geçen toplam süreyi.",{"key":118,"text":119},"b","Request alındıktan sonra ilk output token'ın client'a döndüğü ana kadar geçen süreyi.",{"key":121,"text":122},"c","Sunucunun, request payload'ını modele ulaşmadan önce doğrulamak için harcadığı süreyi.",{"key":124,"text":125},"d","Yanıt boyunca ardışık iki output token arasındaki ortalama gecikmeyi.","TTFT, prompt işleme süresinin baskın olduğu, ilk token gelene kadar geçen gecikmedir; toplam latency ise kalan tüm token'ların üretimini de içerir. a şıkkı TTFT değil toplam latency'yi anlatır; d, ayrı bir metrik olan inter-token latency'yi anlatır; c ise ilgisiz bir ön-işleme adımıdır.",{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":124,"explanation":140},"019f5912-4607-7d57-a038-671d6f9c9f1b",2,"Bir ekip, tek cümlelik cevap isteyen request'lerin bir saniyeden kısa sürede döndüğünü, ama aynı modelden 2000 kelimelik bir rapor yazmasını isteyen request'lerin çok daha uzun sürdüğünü fark ediyor; input prompt uzunluğu iki durumda da benzer. Bunu en iyi ne açıklar?",[132,134,136,138],{"key":115,"text":133},"Model, her output adımında tüm input prompt'u yeniden tokenize eder.",{"key":118,"text":135},"Uzun yanıtlar, kısa yanıtların atladığı ekstra rate-limit kontrollerini tetikler.",{"key":121,"text":137},"Sunucu uzun yanıtları sıkıştırır ve client tarafındaki açma işlemi gecikme yaratır.",{"key":124,"text":139},"Üretim gecikmesi büyük ölçüde, birer birer üretilen output token sayısıyla orantılıdır.","Token üretimi autoregressive'dir: her decode adımında bir token üretilir. Output token sayısı arttıkça sıralı adım sayısı da orantılı artar, bu yüzden input uzunluğu benzer olsa bile latency output uzunluğuyla büyür. a yanlıştır çünkü input prompt bir kez işlenir, her output token için yeniden tokenize edilmez; b ve c gerçek serving mekanizmasını yansıtmayan uydurma açıklamalardır.",{"id":142,"topic":9,"difficulty":111,"body":143,"options":144,"correct_key":115,"explanation":153},"019f5912-4609-78f1-9050-cbdb9528eeb8","Birçok LLM uygulaması, tam yanıtı bekleyip tek seferde göndermek yerine token'ları üretildikçe kullanıcıya neden stream eder?",[145,147,149,151],{"key":115,"text":146},"Çıktı ilk token'lar hazır olur olmaz göründüğü için algılanan bekleme süresini azaltır.",{"key":118,"text":148},"Modelin aynı cevap için üretmesi gereken toplam token sayısını azaltır.",{"key":121,"text":150},"Stream edilmeyen bir yanıta göre request başına daha düşük toplam maliyeti garanti eder.",{"key":124,"text":152},"Modelin önceki, ilgisiz bir request'te ürettiği token'ları tekrar üretmesini atlamasını sağlar.","Streaming, toplam üretim süresi ve toplam token sayısı değişmese bile kullanıcının ilk token'ları (TTFT) hızlıca görmesi sayesinde algılanan gecikmeyi azaltır. b, c ve d, streaming'in token sayısını, maliyeti ya da request'ler arası yeniden kullanımı nasıl etkilediği konusunda yanlış iddialar içerir.",{"id":155,"topic":9,"difficulty":129,"body":156,"options":157,"correct_key":121,"explanation":166},"019f5912-460b-7508-9e17-fb07a3966fb1","Bir client, aşağıdaki pseudocode ile streaming bir completion response'unu tüketiyor:\n```\nfull_text = \"\"\nfor chunk in stream_response():\n    full_text += chunk.token\n    render_to_user(chunk.token)\nreturn full_text\n```\nBu döngü, iyi bir kullanıcı deneyimi için neye dayanır?",[158,160,162,164],{"key":115,"text":159},"Herhangi bir render işleminden önce her chunk'ı önce full_text içinde toplamak zorundadır.",{"key":118,"text":161},"stream_response(), tüm yanıt üretilene kadar bloklanır, her chunk cevabın tamamını içerir.",{"key":121,"text":163},"Gelen her chunk, geldiği anda kullanıcıya render edilir.",{"key":124,"text":165},"render_to_user, her iterasyonda full_text'i sıfırdan yeniden hesaplar.","Döngü, her chunk'ı aldığı iterasyonda render_to_user(chunk.token) çağırır, yani çıktı aşamalı olarak görünür. a ve b streaming'in amacına ters düşer (düşük gecikme faydasını ortadan kaldırır); d ise kodda olmayan gereksiz bir yeniden hesaplamayı anlatır.",{"id":168,"topic":9,"difficulty":129,"body":169,"options":170,"correct_key":118,"explanation":179},"019f5912-460d-7050-b2a8-b134011ce6f8","Self-hosted bir inference server'ı şu config'i açığa çıkarıyor:\n```\nmax_batch_size: 16\nbatch_timeout_ms: 20\n```\nBu config muhtemelen neyi kontrol eder?",[171,173,175,177],{"key":115,"text":172},"Zorla kesilmeden önce tek bir request'in maksimum output uzunluğunu.",{"key":118,"text":174},"Sunucunun kaç request'i tek bir forward pass'te gruplayacağını ve o grubu doldurmak için ne kadar bekleyeceğini.",{"key":121,"text":176},"Sunucunun rate-limit hatası döndürmeden önce deneyeceği retry sayısını.",{"key":124,"text":178},"Sunucunun request başına kabul ettiği maksimum payload boyutunu (megabayt).","Batching, birden fazla eşzamanlı request'i tek bir forward pass'te compute paylaşacak şekilde gruplar; batch_timeout_ms ise sunucunun request'leri toplamak için ne kadar bekleyip yine de batch'i çalıştıracağını sınırlar. a, c ve d aynı alan adlarına ilgisiz anlamlar yüklüyor.",{"id":181,"topic":9,"difficulty":129,"body":182,"options":183,"correct_key":115,"explanation":192},"019f5912-460f-72e6-b959-465474751611","Bir inference server, throughput'u artırmak için agresif request batching'i devreye alıyor. Bir batch işlenmeye başladıktan hemen sonra gelen tekil bir request için en olası dezavantaj nedir?",[184,186,188,190],{"key":115,"text":185},"Kendi batch'i başlayabilmeden önce mevcut batch'in bitmesini beklemek zorunda kalabilir.",{"key":118,"text":187},"Hiçbir batch'e eklenmeden sessizce düşürülür.",{"key":121,"text":189},"Batching o request için token olasılıklarını değiştirdiği için output kalitesi düşer.",{"key":124,"text":191},"Kuyruğu atlayıp zaten çalışan batch'in önüne geçerek işlenir.","Batching, daha yüksek toplam throughput karşılığında bazı request'ler için ekstra latency'ye (sıradaki batch'e katılmayı\u002Fbaşlamayı bekleme) neden olur; tipik implementasyonlarda request'leri düşürmez, output kalitesini anlamlı biçimde değiştirmez (request başına aynı ağırlıklar ve matematik uygulanır; batching çok küçük floating-point farkları doğurabilir ama bu bir kalite değişimi değildir) ve öncelik tanımaz.",{"fields":194,"seniorities":372,"interview_shapes":373,"locales":378,"oauth":380,"question_count":383,"coach_enabled":384,"jd_match_enabled":384},[195,218,238,255,279,286,305,324,346,353,359,366],{"key":196,"name_tr":197,"name_en":197,"sort":111,"specializations":198},"backend","Backend",[199,202,205,206,209,212,215],{"key":200,"name":201,"field":196},"general","Genel",{"key":203,"name":204,"field":196},"go","Go",{"key":106,"name":107,"field":196},{"key":207,"name":208,"field":196},"java","Java",{"key":210,"name":211,"field":196},"csharp","C#\u002F.NET",{"key":213,"name":214,"field":196},"nodejs","Node.js",{"key":216,"name":217,"field":196},"php","PHP",{"key":219,"name_tr":220,"name_en":220,"sort":129,"specializations":221},"frontend","Frontend",[222,223,226,229,232,235],{"key":200,"name":201,"field":219},{"key":224,"name":225,"field":219},"javascript","JavaScript",{"key":227,"name":228,"field":219},"typescript","TypeScript",{"key":230,"name":231,"field":219},"react","React",{"key":233,"name":234,"field":219},"vue","Vue",{"key":236,"name":237,"field":219},"angular","Angular",{"key":239,"name_tr":240,"name_en":240,"sort":241,"specializations":242},"fullstack","Fullstack",3,[243,244,245,246,247,248,249,250,251,252,253,254],{"key":200,"name":201,"field":239},{"key":203,"name":204,"field":196},{"key":106,"name":107,"field":196},{"key":207,"name":208,"field":196},{"key":210,"name":211,"field":196},{"key":213,"name":214,"field":196},{"key":216,"name":217,"field":196},{"key":224,"name":225,"field":219},{"key":227,"name":228,"field":219},{"key":230,"name":231,"field":219},{"key":233,"name":234,"field":219},{"key":236,"name":237,"field":219},{"key":256,"name_tr":257,"name_en":257,"sort":258,"specializations":259},"devops-cloud","DevOps \u002F Cloud",4,[260,261,264,267,270,273,276],{"key":200,"name":201,"field":256},{"key":262,"name":263,"field":256},"aws","AWS",{"key":265,"name":266,"field":256},"gcp","GCP",{"key":268,"name":269,"field":256},"azure","Azure",{"key":271,"name":272,"field":256},"kubernetes","Kubernetes",{"key":274,"name":275,"field":256},"terraform","Terraform",{"key":277,"name":278,"field":256},"linux","Linux",{"key":5,"name_tr":6,"name_en":6,"sort":280,"specializations":281},5,[282,283,284,285],{"key":200,"name":201,"field":5},{"key":106,"name":107,"field":5},{"key":99,"name":100,"field":5},{"key":103,"name":104,"field":5},{"key":287,"name_tr":288,"name_en":289,"sort":290,"specializations":291},"database","Veritabanı","Database",6,[292,293,296,299,302],{"key":200,"name":201,"field":287},{"key":294,"name":295,"field":287},"postgresql","PostgreSQL",{"key":297,"name":298,"field":287},"mysql","MySQL",{"key":300,"name":301,"field":287},"mongodb","MongoDB",{"key":303,"name":304,"field":287},"redis","Redis",{"key":306,"name_tr":307,"name_en":308,"sort":309,"specializations":310},"mobile","Mobil","Mobile",7,[311,312,315,318,321],{"key":200,"name":201,"field":306},{"key":313,"name":314,"field":306},"ios-swift","iOS (Swift)",{"key":316,"name":317,"field":306},"android-kotlin","Android (Kotlin)",{"key":319,"name":320,"field":306},"flutter","Flutter",{"key":322,"name":323,"field":306},"react-native","React Native",{"key":325,"name_tr":326,"name_en":327,"sort":328,"specializations":329},"security","Güvenlik","Security",8,[330,331,334,337,340,343],{"key":200,"name":201,"field":325},{"key":332,"name":333,"field":325},"appsec","AppSec",{"key":335,"name":336,"field":325},"offensive-pentest","Offensive \u002F Pentest",{"key":338,"name":339,"field":325},"cloud-security","Cloud Security",{"key":341,"name":342,"field":325},"devsecops","DevSecOps",{"key":344,"name":345,"field":325},"blue-team-incident","Blue Team \u002F Incident",{"key":347,"name_tr":348,"name_en":349,"sort":350,"specializations":351},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[352],{"key":200,"name":201,"field":347},{"key":354,"name_tr":355,"name_en":355,"sort":356,"specializations":357},"data-engineer","Data Engineer",10,[358],{"key":200,"name":201,"field":354},{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"game-dev","Oyun Geliştirme","Game Development",11,[365],{"key":200,"name":201,"field":360},{"key":367,"name_tr":368,"name_en":368,"sort":369,"specializations":370},"ml-engineer","ML Engineer",12,[371],{"key":200,"name":201,"field":367},[14,15,16],{"junior":374,"mid":376,"senior":377},{"questions":375,"median_sec":3},20,{"questions":375,"median_sec":3},{"questions":375,"median_sec":3},[10,379],"en",[381,382],"google","github",21750,true]