[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:backend\u002Fphp-generics-interfaces":4,"config":252},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":148,"samples":168},"backend","Backend","","php-generics-interfaces","Php Generics Interfaces","tr",75,3300,[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,108,111,114,115,118,121,124,127,130,133,136,139,142,145],{"key":19,"name":20,"count":11},"api-design","API Tasarımı",{"key":22,"name":23,"count":11},"caching","Caching",{"key":25,"name":26,"count":11},"concurrency","Eşzamanlılık",{"key":28,"name":29,"count":11},"csharp-concurrency-async","Csharp Concurrency Async",{"key":31,"name":32,"count":11},"csharp-exceptions","Csharp Exceptions",{"key":34,"name":35,"count":11},"csharp-generics-interfaces","Csharp Generics Interfaces",{"key":37,"name":38,"count":11},"csharp-memory-performance","Csharp Memory Performance",{"key":40,"name":41,"count":11},"csharp-stdlib-http","Csharp Stdlib Http",{"key":43,"name":44,"count":11},"csharp-testing-tooling","Csharp Testing Tooling",{"key":46,"name":47,"count":11},"databases-sql","Veritabanı \u002F SQL",{"key":49,"name":50,"count":11},"go-concurrency","Go Concurrency",{"key":52,"name":53,"count":11},"go-errors","Go Errors",{"key":55,"name":56,"count":11},"go-interfaces-generics","Go Interfaces Generics",{"key":58,"name":59,"count":11},"go-memory-performance","Go Memory Performance",{"key":61,"name":62,"count":11},"go-stdlib-http","Go Stdlib Http",{"key":64,"name":65,"count":11},"go-testing-tooling","Go Testing Tooling",{"key":67,"name":68,"count":11},"java-concurrency","Java Concurrency",{"key":70,"name":71,"count":11},"java-exceptions","Java Exceptions",{"key":73,"name":74,"count":11},"java-generics-interfaces","Java Generics Interfaces",{"key":76,"name":77,"count":11},"java-memory-jvm","Java Memory Jvm",{"key":79,"name":80,"count":11},"java-stdlib-http","Java Stdlib Http",{"key":82,"name":83,"count":11},"java-testing-tooling","Java Testing Tooling",{"key":85,"name":86,"count":11},"messaging-queues","Mesajlaşma \u002F Kuyruklar",{"key":88,"name":89,"count":11},"networking-http","Ağ \u002F HTTP",{"key":91,"name":92,"count":11},"nodejs-error-handling","Nodejs Error Handling",{"key":94,"name":95,"count":11},"nodejs-event-loop-async","Nodejs Event Loop Async",{"key":97,"name":98,"count":11},"nodejs-memory-performance","Nodejs Memory Performance",{"key":100,"name":101,"count":11},"nodejs-modules-streams","Nodejs Modules Streams",{"key":103,"name":104,"count":11},"nodejs-stdlib-http","Nodejs Stdlib Http",{"key":106,"name":107,"count":11},"nodejs-testing-tooling","Nodejs Testing Tooling",{"key":109,"name":110,"count":11},"php-concurrency-async","Php Concurrency Async",{"key":112,"name":113,"count":11},"php-exceptions","Php Exceptions",{"key":8,"name":9,"count":11},{"key":116,"name":117,"count":11},"php-memory-performance","Php Memory Performance",{"key":119,"name":120,"count":11},"php-stdlib-http","Php Stdlib Http",{"key":122,"name":123,"count":11},"php-testing-tooling","Php Testing Tooling",{"key":125,"name":126,"count":11},"python-concurrency-async","Python Concurrency Async",{"key":128,"name":129,"count":11},"python-errors-context","Python Errors Context",{"key":131,"name":132,"count":11},"python-memory-performance","Python Memory Performance",{"key":134,"name":135,"count":11},"python-stdlib-http","Python Stdlib Http",{"key":137,"name":138,"count":11},"python-testing-tooling","Python Testing Tooling",{"key":140,"name":141,"count":11},"python-typing-oop","Python Typing Oop",{"key":143,"name":144,"count":11},"security","Güvenlik",{"key":146,"name":147,"count":11},"testing","Test",[149,153,156,159,162,165],{"key":150,"name":151,"count":152},"csharp","C#\u002F.NET",450,{"key":154,"name":155,"count":152},"go","Go",{"key":157,"name":158,"count":152},"java","Java",{"key":160,"name":161,"count":152},"nodejs","Node.js",{"key":163,"name":164,"count":152},"php","PHP",{"key":166,"name":167,"count":152},"python","Python",[169,187,200,213,226,239],{"id":170,"topic":9,"difficulty":171,"body":172,"options":173,"correct_key":178,"explanation":186},"019f7281-524f-7cbb-88d8-35aa714638b4",1,"```php\ninterface Greetable {\n    public function greet(): string;\n}\n\nclass Person implements Greetable {\n}\n```\nBu kod yüklendiğinde ne olur?",[174,177,180,183],{"key":175,"text":176},"a","Hiçbir şey; PHP'de interface'ler runtime'da göz ardı edilen opsiyonel ipuçlarıdır.",{"key":178,"text":179},"b","`Person` gerekli `greet()` metodunu implemente etmediği için fatal error oluşur.",{"key":181,"text":182},"c","`Person` sorunsuz derlenir; `greet()` boş gövdeyle otomatik üretilir.",{"key":184,"text":185},"d","Uyarı basılır ama sınıf yine de normal şekilde instantiate edilebilir.","Bir interface implemente eden sınıf, interface'in bildirdiği tüm metotları tanımlamalı ya da kendisi abstract ilan edilmelidir. `Person`, `greet()`'i sağlamadan `Greetable`'ı implemente ettiği için PHP, sınıf tanımlanırken fatal error fırlatır (\"Class Person contains 1 abstract method and must be declared abstract or implement the remaining methods\").",{"id":188,"topic":9,"difficulty":171,"body":189,"options":190,"correct_key":178,"explanation":199},"019f7281-5251-7107-8c0c-898c153e34ce","PHP'de bir abstract class doğrudan `new` ile instantiate edilebilir mi?",[191,193,195,197],{"key":175,"text":192},"Evet, public bir constructor'ı olduğu sürece.",{"key":178,"text":194},"Hayır, abstract bir sınıfa `new` uygulamak her zaman fatal error fırlatır.",{"key":181,"text":196},"Evet, ama sadece tüm metotlarının implementasyonu varsa.",{"key":184,"text":198},"Hayır, ama reflection ile herhangi bir kısıtlama olmadan dinamik olarak instantiate edilebilir.","Abstract class'lar genişletilmek üzere tasarlanmış tamamlanmamış taslaklardır. PHP bunları doğrudan instantiate etmeyi yasaklar ve constructor'ın görünürlüğünden ya da her metodun gövdesi olup olmadığından bağımsız olarak fatal error fırlatır (\"Cannot instantiate abstract class\").",{"id":201,"topic":9,"difficulty":171,"body":202,"options":203,"correct_key":184,"explanation":212},"019f7281-5259-7d50-94cc-563102276444","Sade bir PHP interface'i aşağıdakilerden hangisini bildirebilir?",[204,206,208,210],{"key":175,"text":205},"Metot imzalarını ve tiplenmiş instance property'lerini.",{"key":178,"text":207},"Varsayılan implementasyonu olan private metotları.",{"key":181,"text":209},"Implemente eden tüm sınıflar tarafından paylaşılan static property'leri.",{"key":184,"text":211},"Yalnızca metot imzalarını ve sınıf sabitlerini.","Interface'ler yalnızca metot imzalarını (gövdesiz) ve sabitleri bildirebilir; instance ya da static property bildiremezler. Implementasyon durumu her zaman interface'i implemente eden sınıflarda yaşar, interface'in kendisinde değil.",{"id":214,"topic":9,"difficulty":171,"body":215,"options":216,"correct_key":184,"explanation":225},"019f7281-525b-7647-9f74-85e830353d3d","Uygulamandaki bir `Service` sınıfına `Logger` trait'ini ekliyorsun:\n```php\ntrait Logger {\n    public function log(string $msg): void {\n        echo \"[LOG] $msg\";\n    }\n}\n\nclass Service {\n    use Logger;\n}\n\n(new Service())->log(\"ready\");\n```\nNe basılır?",[217,219,221,223],{"key":175,"text":218},"Hiçbir şey; trait'ler extends olmadan sınıf içinde kullanılamaz.",{"key":178,"text":220},"Fatal error: call to undefined method log().",{"key":181,"text":222},"LOG ready (köşeli parantez olmadan).",{"key":184,"text":224},"[LOG] ready","`use Logger;`, trait'in metot gövdelerini sanki doğrudan sınıfın içinde yazılmış gibi `Service`'e kopyalar. Bu yüzden bir `Service` instance'ında `log()` çağrısı trait'in implementasyonunu çalıştırır ve \"[LOG] ready\" basar.",{"id":227,"topic":9,"difficulty":171,"body":228,"options":229,"correct_key":184,"explanation":238},"019f7281-5262-7d06-82de-9c83bb96a8da","\"Pure\" bir PHP enum'unu \"backed\" bir enum'dan ayıran şey nedir?",[230,232,234,236],{"key":175,"text":231},"Pure enum yalnızca bir case'e sahip olabilir; backed enum birçok case'e sahip olabilir.",{"key":178,"text":233},"Pure enum `class` ile, backed enum `enum` ile bildirilir.",{"key":181,"text":235},"Pure enum interface implemente edemez; sadece backed enum'lar edebilir.",{"key":184,"text":237},"Pure enum'un case'lerine bağlı bir skaler değer yoktur; backed enum'un her case'i bir int ya da string'e eşlenir.","`enum Suit { case Hearts; }` bir pure enum tanımlar — case'ler sadece isimlendirilmiş singleton instance'lardır. `enum Suit: string { case Hearts = 'H'; }` ise backed bir enum tanımlar; burada her case ek olarak `->value` üzerinden erişilebilen bir skaler değer taşır. Her iki tür de interface implemente edebilir.",{"id":240,"topic":9,"difficulty":171,"body":241,"options":242,"correct_key":184,"explanation":251},"019f7281-5264-70f0-b605-c903393ff97e","```php\nclass Point {\n    public function __construct(\n        public readonly int $x,\n        public readonly int $y,\n    ) {}\n}\n\n$p = new Point(1, 2);\necho $p->x;\n```\nNe basılır?",[243,245,247,249],{"key":175,"text":244},"2",{"key":178,"text":246},"Fatal error: readonly property okunamaz.",{"key":181,"text":248},"Hiçbir şey; constructor promotion readonly ile çalışmaz.",{"key":184,"text":250},"1","Constructor property promotion, `readonly` ile birleştiğinde $x ve $y'yi tek adımda bildirir ve başlatır. Başlatıldıktan sonra readonly bir property'yi okumak normal bir property gibi çalışır; bu yüzden `$p->x` 1 basar.",{"fields":253,"seniorities":424,"interview_shapes":425,"locales":430,"oauth":432,"question_count":435,"coach_enabled":436,"jd_match_enabled":436},[254,265,286,303,327,340,359,378,398,405,411,418],{"key":5,"name_tr":6,"name_en":6,"sort":171,"specializations":255},[256,259,260,261,262,263,264],{"key":257,"name":258,"field":5},"general","Genel",{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":266,"name_tr":267,"name_en":267,"sort":268,"specializations":269},"frontend","Frontend",2,[270,271,274,277,280,283],{"key":257,"name":258,"field":266},{"key":272,"name":273,"field":266},"javascript","JavaScript",{"key":275,"name":276,"field":266},"typescript","TypeScript",{"key":278,"name":279,"field":266},"react","React",{"key":281,"name":282,"field":266},"vue","Vue",{"key":284,"name":285,"field":266},"angular","Angular",{"key":287,"name_tr":288,"name_en":288,"sort":289,"specializations":290},"fullstack","Fullstack",3,[291,292,293,294,295,296,297,298,299,300,301,302],{"key":257,"name":258,"field":287},{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":272,"name":273,"field":266},{"key":275,"name":276,"field":266},{"key":278,"name":279,"field":266},{"key":281,"name":282,"field":266},{"key":284,"name":285,"field":266},{"key":304,"name_tr":305,"name_en":305,"sort":306,"specializations":307},"devops-cloud","DevOps \u002F Cloud",4,[308,309,312,315,318,321,324],{"key":257,"name":258,"field":304},{"key":310,"name":311,"field":304},"aws","AWS",{"key":313,"name":314,"field":304},"gcp","GCP",{"key":316,"name":317,"field":304},"azure","Azure",{"key":319,"name":320,"field":304},"kubernetes","Kubernetes",{"key":322,"name":323,"field":304},"terraform","Terraform",{"key":325,"name":326,"field":304},"linux","Linux",{"key":328,"name_tr":329,"name_en":329,"sort":330,"specializations":331},"ai-engineer","AI Engineer",5,[332,333,334,337],{"key":257,"name":258,"field":328},{"key":166,"name":167,"field":328},{"key":335,"name":336,"field":328},"llm-rag","LLM\u002FRAG",{"key":338,"name":339,"field":328},"mlops","MLOps",{"key":341,"name_tr":342,"name_en":343,"sort":344,"specializations":345},"database","Veritabanı","Database",6,[346,347,350,353,356],{"key":257,"name":258,"field":341},{"key":348,"name":349,"field":341},"postgresql","PostgreSQL",{"key":351,"name":352,"field":341},"mysql","MySQL",{"key":354,"name":355,"field":341},"mongodb","MongoDB",{"key":357,"name":358,"field":341},"redis","Redis",{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"mobile","Mobil","Mobile",7,[365,366,369,372,375],{"key":257,"name":258,"field":360},{"key":367,"name":368,"field":360},"ios-swift","iOS (Swift)",{"key":370,"name":371,"field":360},"android-kotlin","Android (Kotlin)",{"key":373,"name":374,"field":360},"flutter","Flutter",{"key":376,"name":377,"field":360},"react-native","React Native",{"key":143,"name_tr":144,"name_en":379,"sort":380,"specializations":381},"Security",8,[382,383,386,389,392,395],{"key":257,"name":258,"field":143},{"key":384,"name":385,"field":143},"appsec","AppSec",{"key":387,"name":388,"field":143},"offensive-pentest","Offensive \u002F Pentest",{"key":390,"name":391,"field":143},"cloud-security","Cloud Security",{"key":393,"name":394,"field":143},"devsecops","DevSecOps",{"key":396,"name":397,"field":143},"blue-team-incident","Blue Team \u002F Incident",{"key":399,"name_tr":400,"name_en":401,"sort":402,"specializations":403},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[404],{"key":257,"name":258,"field":399},{"key":406,"name_tr":407,"name_en":407,"sort":408,"specializations":409},"data-engineer","Data Engineer",10,[410],{"key":257,"name":258,"field":406},{"key":412,"name_tr":413,"name_en":414,"sort":415,"specializations":416},"game-dev","Oyun Geliştirme","Game Development",11,[417],{"key":257,"name":258,"field":412},{"key":419,"name_tr":420,"name_en":420,"sort":421,"specializations":422},"ml-engineer","ML Engineer",12,[423],{"key":257,"name":258,"field":419},[14,15,16],{"junior":426,"mid":428,"senior":429},{"questions":427,"median_sec":3},20,{"questions":427,"median_sec":3},{"questions":427,"median_sec":3},[10,431],"en",[433,434],"google","github",21750,true]