[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en: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","en",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,"In LLM inference, what does 'time to first token' (TTFT) measure, as opposed to total response latency?",[114,117,120,123],{"key":115,"text":116},"a","The total time needed to generate every output token in the response.",{"key":118,"text":119},"b","The time from request receipt until the first output token is returned to the client.",{"key":121,"text":122},"c","The time the server spends validating the request payload before it reaches the model.",{"key":124,"text":125},"d","The average delay between two consecutive output tokens in the response.","TTFT is specifically the delay before the first token arrives, dominated by prompt processing; total latency also includes generating every remaining token. Option a describes total latency, not TTFT; d describes inter-token latency, a separate metric; c describes an unrelated pre-processing step.",{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":124,"explanation":140},"019f5912-4607-7d57-a038-671d6f9c9f1b",2,"A team notices that requests asking for a one-sentence answer return in under a second, but requests asking the same model to write a 2000-word report take much longer, even though the input prompt length is similar in both cases. What best explains this?",[132,134,136,138],{"key":115,"text":133},"The model re-tokenizes the entire input prompt on every single output step.",{"key":118,"text":135},"Longer responses trigger extra rate-limit checks that shorter responses skip.",{"key":121,"text":137},"The server compresses long responses, and client-side decompression adds the delay.",{"key":124,"text":139},"Generation latency scales mainly with the number of output tokens, generated one at a time.","Token generation is autoregressive: one token per decode step. More output tokens means proportionally more sequential steps, so latency grows with output length even when input length is similar. a is wrong because the input prompt is processed once, not re-tokenized per output token; b and c invent mechanisms that don't reflect how serving actually works.",{"id":142,"topic":9,"difficulty":111,"body":143,"options":144,"correct_key":115,"explanation":153},"019f5912-4609-78f1-9050-cbdb9528eeb8","Why do many LLM applications stream tokens back to the user as they are generated, instead of waiting for the full response and sending it all at once?",[145,147,149,151],{"key":115,"text":146},"It reduces the perceived wait time by showing output as the first tokens arrive.",{"key":118,"text":148},"It reduces the total number of tokens the model needs to generate for the same answer.",{"key":121,"text":150},"It guarantees a lower total cost per request than a non-streamed response.",{"key":124,"text":152},"It lets the model skip tokens it already generated in a prior, unrelated request.","Streaming improves perceived latency because the user sees the first tokens (TTFT) quickly, even though total generation time and total token count are unchanged. b, c, and d make false claims about how streaming affects token count, cost, or reuse across requests.",{"id":155,"topic":9,"difficulty":129,"body":156,"options":157,"correct_key":121,"explanation":166},"019f5912-460b-7508-9e17-fb07a3966fb1","A client consumes a streaming completion response using the pseudocode below:\n```\nfull_text = \"\"\nfor chunk in stream_response():\n    full_text += chunk.token\n    render_to_user(chunk.token)\nreturn full_text\n```\nWhat does this loop correctly rely on for a good user experience?",[158,160,162,164],{"key":115,"text":159},"It must collect every chunk into full_text before any rendering can occur.",{"key":118,"text":161},"stream_response() blocks until the whole response is generated, so each chunk holds the full answer.",{"key":121,"text":163},"Each incoming chunk is rendered to the user as soon as it arrives.",{"key":124,"text":165},"render_to_user recomputes full_text from scratch on every iteration.","The loop calls render_to_user(chunk.token) inside the same iteration it receives each chunk, so output appears incrementally. a and b contradict the point of streaming (they'd defeat the low-latency benefit), and d describes unnecessary recomputation that isn't in the code.",{"id":168,"topic":9,"difficulty":129,"body":169,"options":170,"correct_key":118,"explanation":179},"019f5912-460d-7050-b2a8-b134011ce6f8","A self-hosted inference server exposes this config:\n```\nmax_batch_size: 16\nbatch_timeout_ms: 20\n```\nWhat does this configuration most likely control?",[171,173,175,177],{"key":115,"text":172},"The maximum output length before a single request's response is truncated.",{"key":118,"text":174},"How many requests the server groups into one forward pass, and how long it waits to fill that group.",{"key":121,"text":176},"The number of retries before the server returns a rate-limit error.",{"key":124,"text":178},"The maximum payload size, in megabytes, the server accepts per request.","Batching groups concurrent requests to share compute in a single forward pass; batch_timeout_ms bounds how long the server waits to accumulate requests before running the batch anyway. a, c, and d assign unrelated meanings to the same field names.",{"id":181,"topic":9,"difficulty":129,"body":182,"options":183,"correct_key":115,"explanation":192},"019f5912-460f-72e6-b959-465474751611","An inference server enables aggressive request batching to increase throughput. What is the most likely downside for an individual request arriving right after a batch has just started processing?",[184,186,188,190],{"key":115,"text":185},"It may need to wait for the current batch to finish before its own batch can start.",{"key":118,"text":187},"It is silently dropped rather than added to any batch.",{"key":121,"text":189},"Its output quality is lower, since batching changes token probabilities for that request.",{"key":124,"text":191},"It bypasses the queue and is processed ahead of the already-running batch.","Batching trades some per-request latency (waiting to join or start the next batch) for higher aggregate throughput; it doesn't drop requests, doesn't meaningfully change output quality (the same weights and math are applied per request; batching can introduce tiny floating-point differences, but that is not a quality change), and doesn't grant priority.",{"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},[379,10],"tr",[381,382],"google","github",21750,true]