ThoughtWorks-a necə gəldim və ya nümunəvi müsahibə

ThoughtWorks-a necə gəldim və ya nümunəvi müsahibə

İş yerinizi dəyişmək istədiyiniz zaman və müsahibədən keçmək ehtiyacı duyduğunuzda, ilk düşündüyünüz şey "müsahibəyə hazırlaşmaqdır". HackerRank-da tapşırıqları həll etmək, Crack the Coding Interview-i oxumaq, ArrayList-in necə işlədiyini və onun LinkedList-dən nələrdə fərqləndiyini əzbərləmək belə lazımdır. Ah, bəlkə, sortlarla bağlı suallar olacaq, və quick sort-un ehtimal ki, ən yaxşı seçim olduğunu demək qeyri-peşəkar olardı.
Amma gözlə, siz gündə 8 saat proqram təminatı yazırsınız, maraqlı və qeyri-adi tapşırıqları həll edirsiniz, və yeni iş yerinizdə də eyni şey olacaq. Bununla belə, müsahibədən keçmək üçün necə təsdiq edilmiş hazırlığa ehtiyac var, hətta gündəlik bacarıqları cilalamaq əvəzinə, indiki iş yerinizdə lazım olmayan və növbəti iş yerinizdə də ehtimal ki, lazım olmayacaq olanları öyrənməlisiniz. Bizim qanımıza computer science-i axıtdığınızda, gecə yarısı bizi oyandırıb ağlımızda olmadan bir ağacın enini tapsaq, cavab verəcəyəm ki, əgər mən cirkdə işə götürülsəm və əsas nümayişim elə bu olacaqsa — bəli, razıyam. Bu bacarıq yoxlanmalıdır.

Amma əlaqəsiz olan hazırkı işlə bağlı bacarıqları niyə yoxlayırsınız? Sadəcə modaya uyğun olduğu üçün? Google belə edir? Ya da gələcək komanda lideriniz müsahibəyə girmədən əvvəl bütün sortlama metodlarını öyrənmək məcburiyyətində qaldığı üçün, indi hər “yaxşı proqramçı”-nın bir palindromun tapılması üçün implementasiyanı əzbərləməli olduğunu düşünür?

Beləliklə, siz Google deyilsiniz (c). Google-un öz işçilərinin verilerini analiz edərək, onun spesifik tapşırıqlarına yaxşı bədən quruluşu olan mühəndislərin uyğun olduğunu kəşf etmişdir. Daha da irəliləyərək, seçmə prosesini quraraq, bir neçə yaxşı mühəndisi işə götürməmək riskini qəbul edə bilərlər, çünki onlar belə asanlıqla riyazi tapşırıqları həlletmirlər. Amma bu onlar üçün problem deyil, Google-da işləmək istəyənlər çoxdur, və vəzifə kapatılacaq.
İndi pəncərədən baxaq və əgər ofisinizin qarşısında mütəxəssislər sizin üçün çalışmaq istəyirsə, çadır qura bilməyiblərsə, və sizin proqramçılarınız daha çox stackoverflow-a hansı Sping annotasiyasını yerləşdirmək lazım olduğunu yoxlayaraq axtarış edirlərsə, görünür, Google-u təkrarlamağı düşünməlisiniz.

Bəs, əgər bu dəfə Google sizi yanıltdı və cavab vermədisə, nə etməlisiniz? Proqramçının işdə icra edəcəyi işi yoxlamaq lazımdır. Proqramçılarda nəyi dəyərləndirirsiniz?
İstədiyiniz işçini seçmək üçün meyarlar hazırlayın və bu bacarıqları yoxlamaq üçün testlər inkişaf etdirin.

ThoughtWorks

ThoughtWorks burada nə etiraf edə bilər? Məhz burada mən örnək müsahibə modelini tapdım. ThoughtWorks kimdir? Qısa desək, bu, 25 il ərzində proqram inkişafı sahəsində konsultasiya edən, Çindən Sinqapura, Amerikaya qədər ofisləri olan bir High-End konsaltinq şirkətidir. Onların elmi bölməsi Martin Fowler tərəfindən rəhbərlik olunur. Əgər proqram mühəndisləri üçün oxunmalı 10 kitabın siyahısını axtarsanız, bəlkə də onlardan 2-3-ü ThoughtWorks-dən yazılmışdır, məsələn, Martin Fowler-in
Patrick Kua, Rebecca Parsons, Neal Ford tərəfindən.

Şirketin biznes modeli nisbətən bahalı xidmətlər göstərməyə əsaslanır, lakin müştəri mütəxəssis, daxili standartlar və əlbəttə ki, insanlardan ibarət fenomenal keyfiyyət üçün ödəyir. Buna görə burada düzgün insanları işə götürmək həyati vacibdir.
Bəs düzgün insanlar kimlərdir? Təbii ki, hər kəs üçün öz fərdi tərifləri var. ThoughtWorks, biznes modelinə görə, inkişaf etdiricilər üçün ən vacib meyarların bu olduğunu müəyyən etdi:

  • Cüt proqramlaşdırma bacarığı. Bu, bacarıqdır, təcrübə və ya qabiliyyət deyil. Heç kəsin gözləmədiyi odur ki, beş ildir ki, Cüt Proqramlaşdırma ilə məşğul olan insanlar gəlsin. Lakin başqalarının fikrinə açıq olmaq, dinləmə bacarığı — bu, tələb olunan bir bacarıqdı.
  • Test yazmaq bacarığı və ideal halda TDD-ni tətbiq etmək.
  • SOLID və OOP-ni başa düşmək və onları tətbiq edə bilmək.
  • Öz fikrini təqdim etmək. Müşavir olmaq, müştəri inkişaf etdiriciləri, digər mütəxəssislərlə işləməyi tələb edir və bir insanın bir şeyi yaxşı etməsi, lakin bunu komanda üzvlərinə yaxşı çatdıra bilməməsi o qədər də faydalı deyil.

İndi namizədin məhz bu bacarıqlarını qiymətləndirmək vacibdir. Burada ThoughtWorks-da keçdiyim müsahibə təcrübəmi paylaşmaq istəyirəm. Deyim ki, mən Sinqapura keçmişdim və keçdim, amma işə qəbul prosesi standartdır və ölkədən ölkəyə çox fərqlənməyəcək.

0-cı mərhələ. HR

Bunun tez-tez baş verdiyi kimi, 20 dəqiqəlik bir HR müsahibəsi. Bunun üzərində dayanmıram, sadəcə deyim ki, əvvəllər heç vaxt şirkətin inkişaf mədəniyyəti, TDD-ni niyə tətbiq etdikləri, cüt proqramlaşdırma niyə tətbiq etdikləri haqqında 15 dəqiqə danışan bir HR ilə qarşılaşmamışdım. Adətən, bu sualda HR-lar azalır və onların prosesi adi olduğunu, proqramçılar proqramlaşdırdığını, test edənlərin test etdiyini, menecerlərin isə nəzərə alındığını danışır.

1-ci mərhələ. OOP-də, TDD-də nə qədər yaxşısan?

Müsahibə başlamazdan 1.5 saat əvvəl Mars Rover simulatoru hazırlamağı istədilər.

Mars rover vəzifəsiNASA, Marsda bir platonun üzərində robot rovers qrupunu endirəcək. Maraqlı dördkünc olan bu platonu rovers navigasiya etməlidir ki, lövhə kameraları ətraf mühitin tam görünüşünü almaq üçün geri göndərsin. Bir roversin mövqeyi və yeri, x və y koordinatlarının birləşməsi və dörd əsas kompas nöqtəsindən birini təmsil edən bir hərf ilə göstərilir. Platon, navigasiyanı asanlaşdırmaq üçün bir şəbəkəyə bölünür. Bir mövqe nümunəsi 0, 0, N ola bilər, bu da roversin sol alt küncdə olduğunu və Şimal tərəfə baxdığını bildirir. Bir roversi idarə etmək üçün NASA, sadə bir hərf zənciri göndərir. Mümkün hərflər 'L', 'R' və 'M'-dir. 'L' və 'R', roversi müvafiq olaraq 90 dərəcə solda və ya sağa çevirir, bununla yanaşı öz yerindən tərpənməz. 'M', bir grid nöqtəsinə irəliləmək və eyni istiqaməti saxlaymaq deməkdir.
Tutaq ki, (x, y) koordinatlarından düz Şimalda olan kvadrat (x, y+1)-dir.
GİRİŞ:
Girişin ilk xətti platonun yuxarı sağ koordinatlarını, alt sol koordinatların 0,0 olduğunu qəbul edir.
Qalan giriş, yerləşdirilmiş roverslər haqqında məlumatdır. Hər bir roversin iki giriş xətti var. Birinci xətt roversin mövqeyini, ikinci xətt isə roversə platonu araşdırmaq üçün göstərişlərdən ibarətdir. Mövqe, x və y koordinatları ilə roversin istiqamətini əks etdirən boşluqlarla ayrılan iki tam ədəddən və bir hərfdən ibarətdir.
Hər bir rovers ardıcıllıqla tamamlanacaq, yəni ikinci rovers birinci rovers hərəkət etməyə başlamazdan əvvəl işini bitirəcək.
ÇIXIŞ:
Hər bir rovers üçün çıxış onun son koordinatları və istiqamətini göstərməlidir.
QEYDLƏR:
Yuxarıda göstərilən tələbləri sadəcə tətbiq edin və bir vakuum təmizləyicinin işlədiyini sübut etmək üçün ona bir avtomatlaşdırılmış test yazın.
Hər hansı bir istifadəçi interfeysinin yaradılması burada müzakirə edilmir.
Məsələni TDD (Test Driven Development) yanaşması ilə həll etmək üstünlük təşkil edəcək.
Mövcud qısa müddətdə keyfiyyətə tamlıqdan daha çox əhəmiyyət veririk.
* Bu tapşırığı paylaşa bilmirəm, bu, bir neçə il əvvəl verilən köhnə bir tapşırıqdır. Lakin inanın ki, prinsipal olaraq hər şey eynidir.

Qiymətləndirmə meyarlarına ayrıca diqqət yetirmək istəyirəm. Namizəd üçün vacib məsələlərin yoxlanılmasında heç bir əhəmiyyət daşımadığına tez-tez rast gəlmişsinizmi? Bunu düşünənlər hamı deyil, lakin bir çoxları sizin dəyərlərinizi qəbul edib onlara əməl edə bilərlər, əgər bunu dəqiq ifadə etsəniz. Beləliklə, qiymətləndirmə meyarlarından dərhal görünür ki, bu mərhələdə ən mühüm bacarıqlar bunlardır.

  • TDD;
  • OOP istifadə etməyi və saxlanıla bilən kod yazmağı bilmək;
  • Cüt proqramlaşdırma bacarığı;

Beləliklə, mənə xəbərdarlıq ediblər ki, 1.5 saatımı bu tapşırıq haqqında düşünməyə sərf edim, kod yazmağı deyil. Kodu birlikdə yazacağıq.

Zəng etdiyimiz zaman, uşaqlar qısa olaraq kim olduqlarını və nə ilə məşğul olduqlarını izah etdilər və inkişaf etdirməyə başlamağı təklif etdilər.

İntervyu müddətində heç vaxt özümü müsabiqədə olduğumu düşünmədim. Elə bilirsən ki, komanda ilə kod yazırsan. Hər hansı bir yerdə qaldıqda — onlar kömək edir, məsləhət verir, müzakirə aparır, hətta bir-birləri ilə mübahisə edirlər ki, bunu necə etmək daha yaxşıdır. Müsahibə zamanı JUnit 5-də bir metodun istisna atdığını yoxlamaq üçün dəyişdiyini unutdum — onlar məni test yazmağa davam etməyə təklif etdilər, birinin bunu necə edəcəyini axtardığı zaman.

Müsahibədən bir neçə saat sonra konstruktiv geribildirim aldım - nə xoşuma gəldi, nə də gəldi. Mənim halda, null obyekti alternativi kimi Sealed klasslardan istifadə etməyim tərifləndi; kod yazmazdan əvvəl rovers ilə necə idarə etmək istədiyini göstərən pseudokod yazmağım; və beləliklə, ən azı robotun API-sində iştirak edən klassların eskizini əldə etdim.

2-ci mərhələ. Bize danışın

Müsahibədən bir həftə əvvəl, mənə maraqlı olan hər hansı bir mövzuda təqdimat hazırlamağım xahiş olundu. Format sadə və tanışdır: 15 dəqiqə təqdimat, 15 dəqiqə suallara cavab.
Mən Uncle Bob tərəfindən Clean Architecture-i seçdim. Yenə də, iki nəfər tərəfindən müsahibə olundum. Bu, ingilis dilində təqdimat vermədiyim ilk təcrübə idi və əgər stresli bir vəziyyətdə olsaydım, çox ehtimal ki, mən müvəffəq olmurdum. Amma bir daha demək lazımdır ki, müsahibədə olduğumu hiss etmədim. Hər şey adi kimi idi - mən danışırdım, onlar diqqətlə dinləyirdilər. Hətta ənənəvi sual-cavab sessiyası da müsabiqəyə bənzəmirdi, sualların “batırmaq” üçün deyil, təqdimatıma həqiqətən maraqlandığı aydın idi.

Müsahibədən bir neçə saat sonra geribildirim aldım - təqdimat çox faydalı idi və dinləməkdən səmimi zövq aldılar.

3-cü mərhələ. İstehsalat Keyfiyyət Kod

Son texniki müsahibələrin son mərhələsi olduğunu xəbərdar edərək, evdə kodu istehsalata uyğunlaşdırmağı xahiş etdilər, sonra kodu icra etməyə göndərməli və bir müsahibə təyin etməliydim, burada tapşırığın tələbləri dəyişəcək və kod modifikasiya tələb edəcək. Geri qayıtmazdan əvvəl deməliyəm ki, kodun icrası kor təşkil olunur, icraçıların namizədin axtardığı mövqeyə, CV-sinə və hətta adını görməyidir.

Görüş, və monitorun digər tərəfindəki bir neçə oğlan. İlk müsahibədəki kimi: əsas odur ki, TDD-ni unutmurasınız, nə etdiyinizi və niyə etdiyinizi danışın. Əgər daha əvvəl TDD tətbiq etməmisinizsə, dərhal başlamanızı tövsiyə edirəm, bunu şirkətlərdə lazım olduğu üçün deyil, çünki bu, həyatınızı əhəmiyyətli dərəcədə asanlaşdırır, stress səviyyənizi azaltdığına görə, əgər istəyirsinizsə. Brauzer vasitəsilə yalnız bir səhvi tapmaq üçün əsəbi şəkildə debuqer axtardığınızı xatırlayırsınız? İndi düşünün ki, müsahibə zamanı belə bir səhvi tutmalısınız — bir neçə ağ saç sizi gözləyir. Bəs TDD ilə nə təmin edirik? Kodu dəyişdirdik və gözlənilmədən testlərin qırmızı olduğunu başa düşdük, sətirdə olan səhvi anlamaq birinci dəfəlik alınmadı? Yaxşı, müsahibəçilərə “Oops” deyirik, Ctrl-Z-yə basırıq və kiçik addımlarla irəliləməyə başlayırıq. Və bəli, TDD ilə işləmə bacarığını inkişaf etdirmək lazımdır, hədəfə doğru irəliləməyi öyrənmək lazımdır ki, testləriniz daim yaşıllıqda olsun, gün boyu qırmızı olmasın, çünki “böyük refaktoring var”. Bu, saxlanılan kod yazma bacarığı və ya məhsuldar kod yazma bacarığı kimi eyni bacarıqdı.

Beləliklə, kodunuzun dəyişikliklərə nə dərəcədə uyğun olduğu, qoyduğunuz dizayndan, onun nə dərəcə sadə olmasından və testlərinizin nə qədər yaxşı olduğundan asılıdır.

Müsahibədən sonra bir neçə saat içində geribildirim aldım. Bu mərhələdə anladım ki, artıq demək olar ki, keçmişəm və “Fowler ilə görüş” üçün çox az qalmışdır.

4-cü mərhələ. Final. Kifayət qədər texniki suallar. Biz kim olduğunuzu bilmək istəyirik!

Düzünü desəm, bu sualın qoyuluşu məni bir az çaşdırdı. Bir saatlıq söhbətdən mənim kim olduğumu necə anlamaq olar? Və xüsusilə də, mən öz dilimdə danışmadığımda, açıqca desək, çox pis və dolayısıyla danışılanda. Əvvəlki müsahibələrdə şəxsi olaraq narahat olmaqdan daha asan idi, çünki suallara cavab verməkdən, səbəb isə aksentdir. Ən azından müsahibəçilərdən biri Asiyadan idi — onların aksenti, deyək ki, Avropalı qulağa nisbətən bir qədər spesifikdir. Buna görə proaktiv yanaşma tətbiq etməyə qərar verdim — özüm haqqında təqdimat hazırlayıb müsahibənin əvvəlində özümü bu təqdimatla tanıtmağı təklif etmək. Əgər razılaşsalar, onda mənimlə daha az sual olacaq, əgər təklifi rədd etsələr — belə olan halda, 3 saatlıq həyatıma sərf edilən vaxt o qədər də yüksək bir qiymət deyil. Bəs təqdimatda nə yazım? Bioqrafiya — Harada, nə vaxt doğulmuşam, məktəbi bitirmişəm, universiteti bitirmişəm — buna kimin marağı var?

Thoughtworks mədəniyyəti haqqında biraz axtarış etsəniz, Martin Fowler-in [https://martinfowler.com/bliki/ThreePillars.html] yazısını tapa bilərsiniz. Bu yazıda 3 Pillar: Davamlı İş, Proqram Təminatı Mükəmməlliyi və Sosial Ədalət haqqında məlumat verilir.

Gəlin, Proqram Təminatı Mükəmməlliyinin artıq yoxlanıldığını qəbul edək. İndi Davamlı İş və Sosial Ədaləti göstərmək qalır.

Bu arada, vurğulamaq qərarına gəldim, xüsusilə də sonuncusuna.

İlk növbədə, ThoughtWorks haqqında niyə danışdığımı izah etdim — universitetdə Martin Fowler-in bloqunu oxumuşdum, buradan da Clean code-a olan sevgim başlayır.

Layihələri də müxtəlif rakurslardan təqdim etmək mümkündür. Mən tibb sahəsi üçün, xəstələrin həyatını asanlaşdıran proqram təminatı hazırlamışam, hətta söyləntilərə görə bir həyat xilas etmişdir. Həmçinin, banklar üçün proqram təminatı hazırlamışam, bu da vətəndaşların həyatını asanlaşdırır. Xüsusən də, əgər bu bankdan ölkə əhalisinin 70%-i istifadə edirsə. Bu Sberbank deyil, hətta Rusiya da deyil.

Mənim haqqımda bilmək istəyirsiniz? Yaxşı. Mənim hobim fotograflıqdır, hər halda 10 ildən çoxdur fotoaparatı əlimdə saxlayıram, nümayiş etməyə dəyər olan fotolarım var. Eyni zamanda, bir zamanlar pişiblər üçün sığınacağa kömək edirdim: evə ehtiyacı olan pişiyin fotolarını çəkmək. Yaxşı fotolarla pişiyi asanlıqla yerləşdirmək olur. Bəlkə də, yüz pişik çəkmişəm 🙂

Nəticədə, təqdimatımın 80%-i pişiklərlə dolu idi.

Təqdimatdan dərhal sonra HR mənə yazdı ki, hələ müsahibənin nəticələrini bilmir, amma artıq bütün ofis pişiklərdən təsirlənib.

Nəticədə, mən geridönüş gözlədim — hamı məni şəxsiyyət olaraq məmnun etdi.

Amma HR son söhbətdə diqqətlə dedi ki, Sosial Ədalət çox yaxşı və vacibdir, amma bütün layihələr belə deyil. Və soruşdu ki, bu məni qorxdururmu. Ümumilikdə, Sosial Ədaləti bir az aşırdım, belə olur 🙂

Sonuç

Nəticə etibarı ilə, artıq bir neçə aydır Sinqapurda Thoughtworks-da çalışıram, görürəm ki, burada da bir çox şirkət Google-dan 'müsahibə üçün ən yaxşı praktika'ları qəbul edir, kodlama üçün kağız və Whiteboard istifadə edir, halbuki işdə Spring, Symfony, RubyOnRails (lazım olanı vurğulaya bilərsiniz) bilikləri tələb olunmur. Mühəndislər müsahibədən əvvəl hazırlıq üçün bir həftə istirahət edirlər.

Thoughtworks-da, namizəd üçün müvafiq tələblərin yanında aşağıdakı prinsiplər də ön plandadır:
Müsahibə Zövqü. Hər iki tərəf üçün. Çox doğrudur, əgər siz ən yaxşı namizədləri əldə etmək istəyirsinizsə (kim istəmir ki?), müsahibə - əsir seçimi deyil, işəgötürən və namizədin bir-birini qiymətləndirdiyi bir qiymətləndirmədir. Və əgər namizəd şirkətlə müsbət emosiyalar əlaqələndirirsə, o zaman onun bu şirkəti seçməsi ehtimalı çoxdur.

Biası azaltmaq üçün bir neçə müsahibəçi. Thoughtworks-da cüt proqramlaşdırma defakto standartdır. Və bu praktikaya digər sahələrdə tətbiq edilməsi mümkün olduqda, TW bunu etməyə çalışır. Hər bir mərhələdə müsahibəni 2 nəfər keçirir. Beləliklə, hər bir insana ən azı 8 nəfər qiymət verir və TW müsahibəçiləri fərqli fonlardan, fərqli sahələrdən (yalnız texnikalardan deyil) və cinslərdən seçməyə çalışır.

Nəticədə işə qəbul qərarı ən azı 8 nəfərin fikrinə əsaslanaraq veriləcəkdir və heç kimin sonda qərar vermə hüququ yoxdur.

Təyinatlara əsaslanan işə qəbul Namizədin "bəyənilib-bəyənilmədiyi" əsasında qərar vermək yerinə, hər bir rol və hər mərhələ üçün qiymətləndiriləcək atributları əhatə edən bir forma hazırlanmışdır. Bu zaman, qiymətləndirmə zamanı müəyyən bir bacarıqdakı təcrübəni deyil, onun tətbiq etmə qabiliyyətini qiymətləndirmək çox tövsiyə edilir. Beləliklə, əgər namizədin TDD kimi bəzi bacarıqları tətbiq etmə imkanı olmamışsa, lakin buna çalışırsa, düzgün istifadə qaydalarını dinləyirsə - onun müsahibəni keçmə şansı var.

Təhsil sertifikatları tələb edilmir TW namizədin Kompüter Elmləri üzrə mütləq sertifikatlar və təhsil tələb etməmir. Yalnız bacarıqlar qiymətləndirilir.

Bu, xarici şirkətlərdə keçdiyim müsahibələrin ilkidir ki, buna hazırlaşmadım. Hər mərhələdən sonra özümü limon kimi sudan çıxmış hiss etmədim, əksinə, ən yaxşı praktikaları tətbiq edə bildiyim üçün sevindim, monitorun o tərəfindəki insanlar bunu qiymətləndirirlər və hər gün tətbiq edirlər.

Bir neçə ay keçdikdən sonra, gözləntilərin tam yerinə yetdiyini deyə bilərəm. ThoughtWorks, adi bir şirkətdən nə ilə fərqlənir? Adi bir şirkətdə yaxşı proqramçılar və nəfəs alan insanlar tapa bilərsiniz, amma TW-də onların sıxlığı həddən artıqdır.

Əgər ThoughtWorks-a qoşulmaq istəyirsinizsə, açıq vəzifələrə baxa bilərsiniz burada
Eyni zamanda, maraqlı vakansiyalara diqqət yetirməyi təklif edirəm:
Baş Proqram Mühəndisi: Almaniya, Londonda, Madrid, Sinqapur
Senior Proqram Mühəndisi: Sidney, Almaniya, Mançester, . Burada daha yaxşı nəfəs almaq mümkündür.
Proqram Mühəndisi: Sidney, Barselona, Milano
Senior Data Engineer: Milano
Keyfiyyət Analitiki: Almaniya Çin
İnfrastruktur: Almaniya, Londonda, Çili
(Sizi səmimi şəkildə xəbərdar etməliyəm ki, bu link referaldır, əgər siz TW-yə keçsəniz, mən yaxşı bir bonus alacağam). İstədiyiniz ofisi seçin, yalnız Avropa ilə məhdudlaşmağınız lazım deyil, axı hər 2 ildən bir TW sizi başqa bir ölkəyə köçürməkdən məmnun olacaq, çünki bu ThoughtWorks siyasətinin bir hissəsidir, bu şəkildə mədəniyyət yayılır və ortalaşır.

Şərhlərdə suallar verməkdən çəkinməyin ya da məni sizi tövsiyə etməyə çağırın.
Mövzu maraqlı göründüsə, ThoughtWorks-da necə işlədiyim və Sinqapurda necə yaşadığım haqqında yazacağam.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster