[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:frontend\u002Fjunior":4,"config":236},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":8,"spec_key":8,"spec_name":8,"locale":9,"cell_total":10,"field_total":11,"seniorities":12,"topics":15,"specs":134,"samples":151},"frontend","Frontend","junior","","tr",1923,2925,[7,13,14],"mid","senior",[16,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131],{"key":17,"name":18,"count":19},"accessibility","Accessibility",75,{"key":21,"name":22,"count":19},"angular-change-detection","Angular Change Detection",{"key":24,"name":25,"count":19},"angular-components-lifecycle","Angular Components Lifecycle",{"key":27,"name":28,"count":19},"angular-dependency-injection","Angular Dependency Injection",{"key":30,"name":31,"count":19},"angular-directives-pipes","Angular Directives Pipes",{"key":33,"name":34,"count":19},"angular-router-forms","Angular Router Forms",{"key":36,"name":37,"count":19},"angular-testing-performance","Angular Testing Performance",{"key":39,"name":40,"count":19},"css-layout","Css Layout",{"key":42,"name":43,"count":19},"dom-browser-apis","Dom Browser Apis",{"key":45,"name":46,"count":19},"javascript-async-concurrency","Javascript Async Concurrency",{"key":48,"name":49,"count":19},"javascript-language","Javascript Language",{"key":51,"name":52,"count":19},"javascript-memory-performance","Javascript Memory Performance",{"key":54,"name":55,"count":19},"javascript-modules-bundling","Javascript Modules Bundling",{"key":57,"name":58,"count":19},"javascript-prototypes-oop","Javascript Prototypes Oop",{"key":60,"name":61,"count":19},"javascript-runtime-apis","Javascript Runtime Apis",{"key":63,"name":64,"count":19},"javascript-testing-tooling","Javascript Testing Tooling",{"key":66,"name":67,"count":19},"performance","Performance",{"key":69,"name":70,"count":19},"react-components-jsx","React Components Jsx",{"key":72,"name":73,"count":19},"react-context-state","React Context State",{"key":75,"name":76,"count":19},"react-effects-lifecycle","React Effects Lifecycle",{"key":78,"name":79,"count":19},"react-forms-suspense","React Forms Suspense",{"key":81,"name":82,"count":19},"react-hooks-state","React Hooks State",{"key":84,"name":85,"count":19},"react-rendering-performance","React Rendering Performance",{"key":87,"name":88,"count":19},"rendering-reactivity","Rendering Reactivity",{"key":90,"name":91,"count":19},"state-management","State Management",{"key":93,"name":94,"count":19},"testing","Testing",{"key":96,"name":97,"count":19},"typescript-advanced-types","Typescript Advanced Types",{"key":99,"name":100,"count":19},"typescript-generics","Typescript Generics",{"key":102,"name":103,"count":19},"typescript-modules-declarations","Typescript Modules Declarations",{"key":105,"name":106,"count":19},"typescript-narrowing-control-flow","Typescript Narrowing Control Flow",{"key":108,"name":109,"count":19},"typescript-tooling-config","Typescript Tooling Config",{"key":111,"name":112,"count":19},"typescript-type-fundamentals","Typescript Type Fundamentals",{"key":114,"name":115,"count":19},"vue-components-props","Vue Components Props",{"key":117,"name":118,"count":19},"vue-composition-api","Vue Composition Api",{"key":120,"name":121,"count":19},"vue-directives-templates","Vue Directives Templates",{"key":123,"name":124,"count":19},"vue-performance-testing","Vue Performance Testing",{"key":126,"name":127,"count":19},"vue-reactivity-system","Vue Reactivity System",{"key":129,"name":130,"count":19},"vue-router-state-management","Vue Router State Management",{"key":132,"name":133,"count":19},"web-security","Web Security",[135,139,142,145,148],{"key":136,"name":137,"count":138},"angular","Angular",450,{"key":140,"name":141,"count":138},"javascript","JavaScript",{"key":143,"name":144,"count":138},"react","React",{"key":146,"name":147,"count":138},"typescript","TypeScript",{"key":149,"name":150,"count":138},"vue","Vue",[152,170,183,197,210,223],{"id":153,"topic":18,"difficulty":154,"body":155,"options":156,"correct_key":164,"explanation":169},"019f56bb-ba3f-74d5-9280-9f53a6ed3059",1,"Etkileşimli bir kontrol için neden genellikle native bir `\u003Cbutton>` elementi, tıklanabilir bir `\u003Cdiv>`'e tercih edilir?",[157,160,163,166],{"key":158,"text":159},"a","Çünkü düz bir `\u003Cdiv>`, çok miktarda ekstra CSS olmadan görsel olarak bir butona benzetilemez",{"key":161,"text":162},"b","Çünkü `\u003Cbutton>` elementleri tarayıcı tarafından `\u003Cdiv>`'lerden daha hızlı boyanır",{"key":164,"text":165},"c","Çünkü native `\u003Cbutton>` klavyeyle focus alıp çalıştırılabilir ve assistive tech'e button role'ü sunar",{"key":167,"text":168},"d","Çünkü HTML spesifikasyonu, etkileşimli olmayan bir `\u003Cdiv>`'e click handler eklenmesini yasaklar","Native `\u003Cbutton>`; klavye focus'u, Enter\u002FSpace ile çalıştırma ve ekran okuyucunun duyurduğu button role'ünü ekstra iş yapmadan verir. `\u003Cdiv>` bunların hiçbirini kendiliğinden almaz; CSS ile butona benzetmek (a) mümkündür ve `\u003Cdiv>`'e click handler eklemek serbesttir (d) — sadece erişilebilir değildir.",{"id":171,"topic":18,"difficulty":154,"body":172,"options":173,"correct_key":158,"explanation":182},"019f56bb-ba3f-7ae0-8f04-a495a09bb932","Bir `\u003Cimg>` elementindeki `alt` attribute'unun temel amacı nedir?",[174,176,178,180],{"key":158,"text":175},"Görseli göremeyen kullanıcılar için onu tanımlayan bir metin alternatifi sağlamak",{"key":161,"text":177},"Sayfaya gelen her ziyaretçi için görselin altında görünür bir caption göstermek",{"key":164,"text":179},"Görsel dosyasının tarayıcı tarafından ne kadar hızlı indirilip çözüleceğini iyileştirmek",{"key":167,"text":181},"Fare işaretçisi görselin üzerine geldiğinde çıkan tooltip metnini belirlemek","`alt`; ekran okuyucu kullanıcılarına ve görselin yüklenemediği durumlara, görselin içeriğinin metin karşılığını verir. Görünür bir caption (b) değildir; hover tooltip'i de değildir — o `title` attribute'udur (d).",{"id":184,"topic":18,"difficulty":185,"body":186,"options":187,"correct_key":167,"explanation":196},"019f56bb-ba40-73f7-b2bc-9d7da73f2eb8",2,"```html\n\u003C!-- A -->\n\u003Cdiv class=\"btn\" onclick=\"save()\">Save\u003C\u002Fdiv>\n\n\u003C!-- B -->\n\u003Cbutton class=\"btn\" onclick=\"save()\">Save\u003C\u002Fbutton>\n```\nİkisi de fareyle tıklandığında `save()` çağırıyor. Hangi ifade doğrudur?",[188,190,192,194],{"key":158,"text":189},"Eşdeğerdirler, çünkü `onclick` handler'ı her iki element için de aynı şekilde tetiklenir",{"key":161,"text":191},"A daha iyidir, çünkü bir `\u003Cdiv>`, `\u003Cbutton>`'a göre daha esnek şekillendirilebilir",{"key":164,"text":193},"İkisi de erişilemez, çünkü inline `onclick` handler'ları ekran okuyucular tarafından tamamen yok sayılır",{"key":167,"text":195},"Yalnızca B Tab ile erişilip klavyeyle çalıştırılabilir; A'nın buna denk olması için ekstra iş gerekir","`\u003Cbutton>` focus alır ve Enter\u002FSpace'e kutudan çıktığı gibi yanıt verir; böylece klavye ve ekran okuyucu kullanıcıları onu kullanabilir. `\u003Cdiv>` ise `tabindex`, role ve key handler eklenmedikçe yalnızca fare tıklamasına yanıt verir — inline `onclick`'in kendisi yok sayılmaz (c), sadece klavye desteği eklemez.",{"id":198,"topic":18,"difficulty":185,"body":199,"options":200,"correct_key":161,"explanation":209},"019f56bb-ba40-79da-833d-a8e905d4681e","E-posta adresi için bir text input'un var; yanında ayrı bir `\u003Cspan>` içinde görünür 'Email' yazısı duruyor. Ekran okuyucu kullanıcısı alana tab'ladığında yalnızca 'edit text' duyuyor, label yok. Doğru düzeltme nedir?",[201,203,205,207],{"key":158,"text":202},"`\u003Cspan>`'e bir `title` attribute'u ekleyip metninin alanla birlikte duyurulmasını sağlamak",{"key":161,"text":204},"`for` değeri input'un `id`'siyle eşleşen bir `\u003Clabel for=\"...\">` kullanmak",{"key":164,"text":206},"Input'u bir `\u003Cdiv role=\"label\">` içine sarıp tarayıcının yakındaki metni ona bağlamasını sağlamak",{"key":167,"text":208},"Input'a `placeholder=\"Email\"` koyup amacının kullanıcıya duyurulmasını sağlamak","`for` değeri input'un `id`'siyle eşleşen bir `\u003Clabel>` (ya da input'u saran bir `\u003Clabel>`) programatik bir bağ kurar; böylece alan 'Email' olarak duyurulur. `placeholder` (d) güvenilir bir label değildir — yazmaya başlayınca kaybolur ve tutarsız duyurulur — ve `role=\"label\"` diye bir şey yoktur (c).",{"id":211,"topic":18,"difficulty":154,"body":212,"options":213,"correct_key":164,"explanation":222},"019f56bb-ba41-71b5-ba4b-a2ec0408a1fc","`aria-label` attribute'u ne yapar?",[214,216,218,220],{"key":158,"text":215},"Ekranda elementin yanında gösterilen görünür bir metin label'ı belirler",{"key":161,"text":217},"Elementi dekoratif olarak işaretler ki assistive technology onu atlasın",{"key":164,"text":219},"Element için assistive tech'in duyurduğu bir erişilebilir isim (accessible name) sağlar",{"key":167,"text":221},"Yalnızca element focus aldığında gösterilen daha uzun bir yardım açıklaması tutar","`aria-label`, ekranda hiçbir şey göstermeden elemente ekran okuyucuların duyurduğu bir accessible name verir — yalnızca ikon içeren butonlar için faydalıdır. Görünür değildir (a) ve elementi gizlemez (b); gizleyen `aria-hidden`'dır.",{"id":224,"topic":18,"difficulty":185,"body":225,"options":226,"correct_key":167,"explanation":235},"019f56bb-ba41-773a-b9a6-5910907615d5","Bir sayfa, tamamen görsel süs amaçlı küçük bir dekoratif kıvrım görseli kullanıyor; hiçbir bilgi taşımıyor. Bu `\u003Cimg>` erişilebilirlik için nasıl işaretlenmeli?",[227,229,231,233],{"key":158,"text":228},"`alt=\"iki bölüm arasındaki dekoratif kıvrım ayıracı\"` gibi tanımlayıcı bir `alt` verilmeli",{"key":161,"text":230},"`alt` attribute'u tamamen kaldırılmalı ki tarayıcı nasıl duyuracağına kendisi karar versin",{"key":164,"text":232},"`role=\"img\"` ve kıvrımı ekran okuyucu kullanıcılarına tarif eden bir `aria-label` eklenmeli",{"key":167,"text":234},"Boş `alt=\"\"` verilmeli ki assistive technology onu dekoratif kabul edip atlasın","Boş `alt=\"\"`, ekran okuyuculara görselin dekoratif olduğunu ve yok sayılabileceğini söyler; gürültüyü önler. Anlamsız bir süsü tarif etmek (a) kalabalık yaratır; `alt`'ı tamamen kaldırmak (b) ise birçok ekran okuyucunun görseli atlamak yerine dosya adını okumasına yol açar.",{"fields":237,"seniorities":411,"interview_shapes":412,"locales":417,"oauth":419,"question_count":422,"coach_enabled":423,"jd_match_enabled":423},[238,263,271,288,312,325,344,363,385,392,398,405],{"key":239,"name_tr":240,"name_en":240,"sort":154,"specializations":241},"backend","Backend",[242,245,248,251,254,257,260],{"key":243,"name":244,"field":239},"general","Genel",{"key":246,"name":247,"field":239},"go","Go",{"key":249,"name":250,"field":239},"python","Python",{"key":252,"name":253,"field":239},"java","Java",{"key":255,"name":256,"field":239},"csharp","C#\u002F.NET",{"key":258,"name":259,"field":239},"nodejs","Node.js",{"key":261,"name":262,"field":239},"php","PHP",{"key":5,"name_tr":6,"name_en":6,"sort":185,"specializations":264},[265,266,267,268,269,270],{"key":243,"name":244,"field":5},{"key":140,"name":141,"field":5},{"key":146,"name":147,"field":5},{"key":143,"name":144,"field":5},{"key":149,"name":150,"field":5},{"key":136,"name":137,"field":5},{"key":272,"name_tr":273,"name_en":273,"sort":274,"specializations":275},"fullstack","Fullstack",3,[276,277,278,279,280,281,282,283,284,285,286,287],{"key":243,"name":244,"field":272},{"key":246,"name":247,"field":239},{"key":249,"name":250,"field":239},{"key":252,"name":253,"field":239},{"key":255,"name":256,"field":239},{"key":258,"name":259,"field":239},{"key":261,"name":262,"field":239},{"key":140,"name":141,"field":5},{"key":146,"name":147,"field":5},{"key":143,"name":144,"field":5},{"key":149,"name":150,"field":5},{"key":136,"name":137,"field":5},{"key":289,"name_tr":290,"name_en":290,"sort":291,"specializations":292},"devops-cloud","DevOps \u002F Cloud",4,[293,294,297,300,303,306,309],{"key":243,"name":244,"field":289},{"key":295,"name":296,"field":289},"aws","AWS",{"key":298,"name":299,"field":289},"gcp","GCP",{"key":301,"name":302,"field":289},"azure","Azure",{"key":304,"name":305,"field":289},"kubernetes","Kubernetes",{"key":307,"name":308,"field":289},"terraform","Terraform",{"key":310,"name":311,"field":289},"linux","Linux",{"key":313,"name_tr":314,"name_en":314,"sort":315,"specializations":316},"ai-engineer","AI Engineer",5,[317,318,319,322],{"key":243,"name":244,"field":313},{"key":249,"name":250,"field":313},{"key":320,"name":321,"field":313},"llm-rag","LLM\u002FRAG",{"key":323,"name":324,"field":313},"mlops","MLOps",{"key":326,"name_tr":327,"name_en":328,"sort":329,"specializations":330},"database","Veritabanı","Database",6,[331,332,335,338,341],{"key":243,"name":244,"field":326},{"key":333,"name":334,"field":326},"postgresql","PostgreSQL",{"key":336,"name":337,"field":326},"mysql","MySQL",{"key":339,"name":340,"field":326},"mongodb","MongoDB",{"key":342,"name":343,"field":326},"redis","Redis",{"key":345,"name_tr":346,"name_en":347,"sort":348,"specializations":349},"mobile","Mobil","Mobile",7,[350,351,354,357,360],{"key":243,"name":244,"field":345},{"key":352,"name":353,"field":345},"ios-swift","iOS (Swift)",{"key":355,"name":356,"field":345},"android-kotlin","Android (Kotlin)",{"key":358,"name":359,"field":345},"flutter","Flutter",{"key":361,"name":362,"field":345},"react-native","React Native",{"key":364,"name_tr":365,"name_en":366,"sort":367,"specializations":368},"security","Güvenlik","Security",8,[369,370,373,376,379,382],{"key":243,"name":244,"field":364},{"key":371,"name":372,"field":364},"appsec","AppSec",{"key":374,"name":375,"field":364},"offensive-pentest","Offensive \u002F Pentest",{"key":377,"name":378,"field":364},"cloud-security","Cloud Security",{"key":380,"name":381,"field":364},"devsecops","DevSecOps",{"key":383,"name":384,"field":364},"blue-team-incident","Blue Team \u002F Incident",{"key":386,"name_tr":387,"name_en":388,"sort":389,"specializations":390},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[391],{"key":243,"name":244,"field":386},{"key":393,"name_tr":394,"name_en":394,"sort":395,"specializations":396},"data-engineer","Data Engineer",10,[397],{"key":243,"name":244,"field":393},{"key":399,"name_tr":400,"name_en":401,"sort":402,"specializations":403},"game-dev","Oyun Geliştirme","Game Development",11,[404],{"key":243,"name":244,"field":399},{"key":406,"name_tr":407,"name_en":407,"sort":408,"specializations":409},"ml-engineer","ML Engineer",12,[410],{"key":243,"name":244,"field":406},[7,13,14],{"junior":413,"mid":415,"senior":416},{"questions":414,"median_sec":3},20,{"questions":414,"median_sec":3},{"questions":414,"median_sec":3},[9,418],"en",[420,421],"google","github",21750,true]