[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:ml-engineer\u002Fti-input-pipeline-throughput":4,"config":212},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":112,"samples":126},"ml-engineer","ML Engineer","","ti-input-pipeline-throughput","Ti Input Pipeline Throughput","en",75,2400,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,106,109],{"key":19,"name":20,"count":11},"cml-distance-clustering-dimreduction","Cml Distance Clustering Dimreduction",{"key":22,"name":23,"count":11},"cml-gradient-boosting-mechanics","Cml Gradient Boosting Mechanics",{"key":25,"name":26,"count":11},"cml-linear-logistic-internals","Cml Linear Logistic Internals",{"key":28,"name":29,"count":11},"cml-probabilistic-models-calibration","Cml Probabilistic Models Calibration",{"key":31,"name":32,"count":11},"cml-svm-kernels-margins","Cml Svm Kernels Margins",{"key":34,"name":35,"count":11},"cml-trees-randomforest-internals","Cml Trees Randomforest Internals",{"key":37,"name":38,"count":11},"dl-architecture-layers","Dl Architecture Layers",{"key":40,"name":41,"count":11},"dl-initialization-optimizers","Dl Initialization Optimizers",{"key":43,"name":44,"count":11},"dl-losses-output-layers","Dl Losses Output Layers",{"key":46,"name":47,"count":11},"dl-normalization-regularization","Dl Normalization Regularization",{"key":49,"name":50,"count":11},"dl-sequence-attention","Dl Sequence Attention",{"key":52,"name":53,"count":11},"dl-training-dynamics-backprop","Dl Training Dynamics Backprop",{"key":55,"name":56,"count":11},"fe-binning-discretization","Fe Binning Discretization",{"key":58,"name":59,"count":11},"fe-categorical-encoding-mechanics","Fe Categorical Encoding Mechanics",{"key":61,"name":62,"count":11},"fe-interactions-basis-expansion","Fe Interactions Basis Expansion",{"key":64,"name":65,"count":11},"fe-numeric-transforms-distributions","Fe Numeric Transforms Distributions",{"key":67,"name":68,"count":11},"fe-temporal-cyclical-features","Fe Temporal Cyclical Features",{"key":70,"name":71,"count":11},"fe-text-highcardinality-features","Fe Text Highcardinality Features",{"key":73,"name":74,"count":11},"ml-data-preparation","Ml Data Preparation",{"key":76,"name":77,"count":11},"ml-deployment-serving","Ml Deployment Serving",{"key":79,"name":80,"count":11},"ml-experimentation-reproducibility","Ml Experimentation Reproducibility",{"key":82,"name":83,"count":11},"ml-model-selection-tuning","Ml Model Selection Tuning",{"key":85,"name":86,"count":11},"ml-model-training-evaluation","Ml Model Training Evaluation",{"key":88,"name":89,"count":11},"ml-monitoring-drift","Ml Monitoring Drift",{"key":91,"name":92,"count":11},"ml-problem-framing","Ml Problem Framing",{"key":94,"name":95,"count":11},"ml-scaling-performance","Ml Scaling Performance",{"key":97,"name":98,"count":11},"ti-checkpointing-fault-tolerance","Ti Checkpointing Fault Tolerance",{"key":100,"name":101,"count":11},"ti-cluster-scheduling-resources","Ti Cluster Scheduling Resources",{"key":103,"name":104,"count":11},"ti-distributed-strategies-sync","Ti Distributed Strategies Sync",{"key":8,"name":9,"count":11},{"key":107,"name":108,"count":11},"ti-throughput-profiling-bottlenecks","Ti Throughput Profiling Bottlenecks",{"key":110,"name":111,"count":11},"ti-training-determinism-numerics","Ti Training Determinism Numerics",[113,117,120,123],{"key":114,"name":115,"count":116},"classical-ml","Classical ML",450,{"key":118,"name":119,"count":116},"deep-learning","Deep Learning",{"key":121,"name":122,"count":116},"feature-engineering","Feature Engineering",{"key":124,"name":125,"count":116},"training-infrastructure","Training Infrastructure",[127,145,159,172,185,198],{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":133,"explanation":144},"01a05d13-8d74-7b2a-9cd3-7c8cf36b61c6",1,"A dataset is stored as 100 shard files. A training job runs on 8 ranks, and each rank is assigned a contiguous slice of the shard list at startup. Since 100 is not evenly divisible by 8, what do you observe about how many shards each rank ends up with?",[132,135,138,141],{"key":133,"text":134},"a","Most ranks get 12 shards and a few ranks get 13 shards; the shard count differs by at most one between ranks, since the leftover shards are handed out one per rank.",{"key":136,"text":137},"b","All 8 ranks get exactly 12 shards, and the remaining 4 shards are simply never read by anyone that epoch.",{"key":139,"text":140},"c","The job refuses to start at all, because the shard framework treats an uneven split as a fatal configuration error.",{"key":142,"text":143},"d","One rank ends up reading all 100 shards on behalf of the others, then broadcasts the decoded samples over the network.","A standard contiguous split hands out `100 \u002F\u002F 8 = 12` shards to every rank and then distributes the `100 % 8 = 4` leftover shards one each to the first four ranks, so counts land at either 12 or 13 — never a difference of more than one shard. Nothing forces the job to abort on an uneven split, no shard is silently skipped, and there is no single-rank read-and-broadcast step.",{"id":146,"topic":9,"difficulty":147,"body":148,"options":149,"correct_key":133,"explanation":158},"01a05d13-8d75-7d87-b5a9-a240f1848d63",2,"A team splits 17 shard files contiguously across 4 ranks. Rank 0 ends up with 5 shards while ranks 1, 2, and 3 each get 4 shards. If shard sizes are roughly equal, what does this most directly cause?",[150,152,154,156],{"key":133,"text":151},"Rank 0 runs more local steps that epoch than the others.",{"key":136,"text":153},"Nothing measurable happens in practice, because a one-shard gap between 5 and 4 is far too small to ever change how many local steps any rank takes, regardless of shard size.",{"key":139,"text":155},"Rank 0 crashes on startup, since receiving a shard count that differs from its peers is treated as an invalid assignment by most shard-based loaders.",{"key":142,"text":157},"The extra shard assigned to rank 0 is automatically detected and silently reassigned mid-epoch to whichever rank finishes its local data first, keeping every rank's step count equal.","With one extra shard's worth of samples, rank 0 has strictly more local data than ranks 1-3; iterating each rank's local dataset to exhaustion means rank 0 takes more steps before it runs out. The gap is real (not negligible by default), nothing crashes on a mismatched count, and nothing silently rebalances a shard mid-epoch.",{"id":160,"topic":9,"difficulty":147,"body":161,"options":162,"correct_key":133,"explanation":171},"01a05d13-8d77-729b-85c7-f27e13429c10","To avoid giving ranks unequal numbers of shards when the shard count does not divide evenly by the rank count, one common fix is to pad the shard list: repeat a few shards (typically taken from the start of the list) until the total is divisible by the rank count. What is the direct consequence of this padding, for the ranks that receive a repeated shard?",[163,165,167,169],{"key":133,"text":164},"They read that shard's samples an extra time during the epoch, so a small number of samples in the dataset end up seen more than once.",{"key":136,"text":166},"They read the padded shard once, exactly like every other shard, since padding only changes which rank owns a shard, not how many times it is read.",{"key":139,"text":168},"They skip that shard entirely, since padded (repeated) shards are marked and excluded from the actual read to keep sample counts exact.",{"key":142,"text":170},"They read a placeholder of empty (all-zero) samples in place of the repeated shard, so real data is not duplicated.","Padding works by literally duplicating some shard entries in the assignment list so the total count divides evenly; whichever ranks receive those duplicated entries read that shard's samples an extra time in that epoch. It is not read only once like a normal shard, it is not skipped, and it is not replaced by empty placeholder data — real samples are actually repeated.",{"id":173,"topic":9,"difficulty":129,"body":174,"options":175,"correct_key":139,"explanation":184},"01a05d13-8d78-7c2a-b852-0a1f16bcb6e3","A streaming data loader keeps a fixed-size shuffle buffer: it fills the buffer with the next N samples from the stream, then each time it emits a sample it randomly picks one from the buffer and replaces it with the next unread sample. Compared to a true global shuffle of the whole dataset, what does this buffer-based approach give you?",[176,178,180,182],{"key":133,"text":177},"Exactly the same output order as a global shuffle, as long as N is at least 2, because any nonzero buffer size is mathematically equivalent to shuffling the whole stream at once.",{"key":136,"text":179},"A completely sequential, unshuffled order, because the buffer only holds a fixed lookahead window and drains items in the same front-to-back order it filled them, so nothing inside that window gets reordered.",{"key":139,"text":181},"An approximate, local shuffle: a sample can only move to a position within roughly N of its original one, which stays weaker than a true global shuffle overall.",{"key":142,"text":183},"A shuffle that reorders samples only within the very first buffer-full and then leaves the rest of the stream completely untouched in its original order.","Because a sample can only be swapped into the buffer and later emitted while it sits among at most N buffered items, its output position is bounded by roughly the buffer size relative to its original position — a local, approximate shuffle, not a true global one. It is not equivalent to a global shuffle regardless of N, it is not literally unshuffled, and reordering continues throughout the stream (within that bounded window), not only in the first bufferful.",{"id":186,"topic":9,"difficulty":147,"body":187,"options":188,"correct_key":136,"explanation":197},"01a05d13-8d7a-7bde-b871-336937e79e49","A dataset's shard files were written sequentially by class label: the first shards contain only class 0, the next shards only class 1, and so on. A shuffle buffer holding 200 samples is used, and each class block is 1000 samples. What do you expect batches drawn early within a class block to look like?",[189,191,193,195],{"key":133,"text":190},"Balanced enough across classes that the class-sorted file layout is no longer visible in any batch, because a 200-sample buffer already mixes in enough of the next block to hide the original ordering.",{"key":136,"text":192},"Heavily dominated by the class currently being read.",{"key":139,"text":194},"Dominated by whichever class happens to appear last in the overall file order, no matter which block is currently being read from.",{"key":142,"text":196},"Statistically identical to batches drawn from a true global shuffle of the same 10,000-sample dataset, since the buffer, however small, still removes any dependence on write order.","A buffer of 200 sitting inside a 1000-sample same-class block is filled almost entirely with that one class, so batches drawn from it stay heavily skewed toward that class until the buffer starts refilling from the next block. A buffer this much smaller than the block cannot hide the sequential-by-class layout, it is not dominated by an unrelated 'last' class, and it clearly differs from a true global shuffle.",{"id":199,"topic":9,"difficulty":200,"body":201,"options":202,"correct_key":139,"explanation":211},"01a05d13-8d7c-77da-bedd-1875bec4c98e",3,"```python\n# stream is sorted by class: [0]*1000 + [1]*1000 + ... + [9]*1000\ndef batch_majority_purity(shuffled, batch_size=32):\n    # fraction of the batch belonging to its most common class\n    ...\n```\nMeasuring `batch_majority_purity` across a full epoch for a class-sorted stream with buffer size equal to one class block (1000), the average purity comes out around 0.55, while a true global shuffle of the same data gives an average purity around 0.19. What does this measured gap tell you?",[203,205,207,209],{"key":133,"text":204},"The measurement must be wrong: any shuffle buffer at least as large as one class block should fully match a global shuffle's purity.",{"key":136,"text":206},"The gap only exists for buffer sizes smaller than 1000; a buffer of exactly 1000 samples should already match the global-shuffle number.",{"key":139,"text":208},"Even a buffer as large as one full class block still leaves batches noticeably more class-skewed than a global shuffle, confirming buffer size alone does not guarantee shuffle quality.",{"key":142,"text":210},"The 0.19 global-shuffle number is itself unreliable and biased, so no real conclusion can be drawn by comparing it against 0.55.","A buffer sized to exactly one class block is still mostly refilled from within that same block much of the time, so 0.55 sits well above the 0.19 global-shuffle baseline rather than matching it — reaching baseline-level purity needs a buffer that is a multiple of the block size, not merely equal to it. Nothing here indicates a measurement error or an unreliable baseline.",{"fields":213,"seniorities":436,"interview_shapes":437,"locales":442,"oauth":444,"question_count":447,"coach_enabled":448,"jd_match_enabled":448},[214,239,259,275,299,312,331,350,372,391,406,428],{"key":215,"name_tr":216,"name_en":216,"sort":129,"specializations":217},"backend","Backend",[218,221,224,227,230,233,236],{"key":219,"name":220,"field":215},"general","Genel",{"key":222,"name":223,"field":215},"go","Go",{"key":225,"name":226,"field":215},"python","Python",{"key":228,"name":229,"field":215},"java","Java",{"key":231,"name":232,"field":215},"csharp","C#\u002F.NET",{"key":234,"name":235,"field":215},"nodejs","Node.js",{"key":237,"name":238,"field":215},"php","PHP",{"key":240,"name_tr":241,"name_en":241,"sort":147,"specializations":242},"frontend","Frontend",[243,244,247,250,253,256],{"key":219,"name":220,"field":240},{"key":245,"name":246,"field":240},"javascript","JavaScript",{"key":248,"name":249,"field":240},"typescript","TypeScript",{"key":251,"name":252,"field":240},"react","React",{"key":254,"name":255,"field":240},"vue","Vue",{"key":257,"name":258,"field":240},"angular","Angular",{"key":260,"name_tr":261,"name_en":261,"sort":200,"specializations":262},"fullstack","Fullstack",[263,264,265,266,267,268,269,270,271,272,273,274],{"key":219,"name":220,"field":260},{"key":222,"name":223,"field":215},{"key":225,"name":226,"field":215},{"key":228,"name":229,"field":215},{"key":231,"name":232,"field":215},{"key":234,"name":235,"field":215},{"key":237,"name":238,"field":215},{"key":245,"name":246,"field":240},{"key":248,"name":249,"field":240},{"key":251,"name":252,"field":240},{"key":254,"name":255,"field":240},{"key":257,"name":258,"field":240},{"key":276,"name_tr":277,"name_en":277,"sort":278,"specializations":279},"devops-cloud","DevOps \u002F Cloud",4,[280,281,284,287,290,293,296],{"key":219,"name":220,"field":276},{"key":282,"name":283,"field":276},"aws","AWS",{"key":285,"name":286,"field":276},"gcp","GCP",{"key":288,"name":289,"field":276},"azure","Azure",{"key":291,"name":292,"field":276},"kubernetes","Kubernetes",{"key":294,"name":295,"field":276},"terraform","Terraform",{"key":297,"name":298,"field":276},"linux","Linux",{"key":300,"name_tr":301,"name_en":301,"sort":302,"specializations":303},"ai-engineer","AI Engineer",5,[304,305,306,309],{"key":219,"name":220,"field":300},{"key":225,"name":226,"field":300},{"key":307,"name":308,"field":300},"llm-rag","LLM\u002FRAG",{"key":310,"name":311,"field":300},"mlops","MLOps",{"key":313,"name_tr":314,"name_en":315,"sort":316,"specializations":317},"database","Veritabanı","Database",6,[318,319,322,325,328],{"key":219,"name":220,"field":313},{"key":320,"name":321,"field":313},"postgresql","PostgreSQL",{"key":323,"name":324,"field":313},"mysql","MySQL",{"key":326,"name":327,"field":313},"mongodb","MongoDB",{"key":329,"name":330,"field":313},"redis","Redis",{"key":332,"name_tr":333,"name_en":334,"sort":335,"specializations":336},"mobile","Mobil","Mobile",7,[337,338,341,344,347],{"key":219,"name":220,"field":332},{"key":339,"name":340,"field":332},"ios-swift","iOS (Swift)",{"key":342,"name":343,"field":332},"android-kotlin","Android (Kotlin)",{"key":345,"name":346,"field":332},"flutter","Flutter",{"key":348,"name":349,"field":332},"react-native","React Native",{"key":351,"name_tr":352,"name_en":353,"sort":354,"specializations":355},"security","Güvenlik","Security",8,[356,357,360,363,366,369],{"key":219,"name":220,"field":351},{"key":358,"name":359,"field":351},"appsec","AppSec",{"key":361,"name":362,"field":351},"offensive-pentest","Offensive \u002F Pentest",{"key":364,"name":365,"field":351},"cloud-security","Cloud Security",{"key":367,"name":368,"field":351},"devsecops","DevSecOps",{"key":370,"name":371,"field":351},"blue-team-incident","Blue Team \u002F Incident",{"key":373,"name_tr":374,"name_en":375,"sort":376,"specializations":377},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[378,379,382,385,388],{"key":219,"name":220,"field":373},{"key":380,"name":381,"field":373},"test-automation","Test Automation",{"key":383,"name":384,"field":373},"sdet","SDET",{"key":386,"name":387,"field":373},"performance-testing","Performance Testing",{"key":389,"name":390,"field":373},"mobile-qa","Mobile QA",{"key":392,"name_tr":393,"name_en":393,"sort":394,"specializations":395},"data-engineer","Data Engineer",10,[396,397,400,403],{"key":219,"name":220,"field":392},{"key":398,"name":399,"field":392},"pipelines-etl","Pipelines \u002F ETL",{"key":401,"name":402,"field":392},"streaming","Streaming",{"key":404,"name":405,"field":392},"warehousing","Warehousing",{"key":407,"name_tr":408,"name_en":409,"sort":410,"specializations":411},"game-dev","Oyun Geliştirme","Game Development",11,[412,413,416,419,422,425],{"key":219,"name":220,"field":407},{"key":414,"name":415,"field":407},"unity-csharp","Unity (C#)",{"key":417,"name":418,"field":407},"unreal-cpp","Unreal (C++)",{"key":420,"name":421,"field":407},"gameplay","Gameplay",{"key":423,"name":424,"field":407},"graphics-rendering","Graphics \u002F Rendering",{"key":426,"name":427,"field":407},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":5,"name_tr":6,"name_en":6,"sort":429,"specializations":430},12,[431,432,433,434,435],{"key":219,"name":220,"field":5},{"key":114,"name":115,"field":5},{"key":121,"name":122,"field":5},{"key":118,"name":119,"field":5},{"key":124,"name":125,"field":5},[14,15,16],{"junior":438,"mid":440,"senior":441},{"questions":439,"median_sec":3},20,{"questions":439,"median_sec":3},{"questions":439,"median_sec":3},[443,10],"tr",[445,446],"google","github",28950,true]