Skip to content

Software-Engineering-Reading/proqramci-muhendislerin-el-kitabcasi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 

Repository files navigation

Texniki müsahibəyə hazırlaşan proqramçı-mühəndislərin 👩🏻‍💻👨🏻‍💻 əl kitabçası 📘🚀

Abstrakt

Arzu edən hər kəs burda qeyd olunan və ya unudulan mövzunu Azərbaycan dilində yazıb bu məqaləni genişləndirə və ya təkmilləşdirə bilər.

Kompyuter mühəndisliyi ixtisasında oxuyan tələbələrin və ya proqramçı kimi çalışan mütəxəssislərin bir çoxunun arzusu böyük texnologiya şirkətlərində çalışmaqdır. Bu tipli şirkətləri klassifikasiya etmək üçün xüsusi FAANG+ qısaltması yaradılıb. Xarici dillərdə, xüsusi ilə ingilis dilində, bu şirkətlərə işə düzəlmək, müsahibə prosesi, kompensasiyalar və s. haqqında xeyli onlayn mənbələr, fərqli resurslar var. Hətta bunlar ətrafında pullu hazırlıq platformaları mövcuddur. Misal üçün, Clément Mihailescu, Joma TechTechLead youtube kanalları bu mövzu ətrafında olan söhbətlərdən milyonlarla izləmə toplayır.

Bu məqalənin əsas məqsədi bu mövzular ətrafında verilən sualların azərbaycan dilində, bu şirkətlərdə işləyən və ya işləmiş azərbaycanlı mütəxəssislər tərəfindən cavablandırılması, ortaq bir mənbənin yaradılmasıdır. Məqsəd yazının sabit qalmaması, azərbaycanlı mütəxəssislərin gələcəkdə öz təcrübələrəni paylaşması ilə daha da genişləndirilməsi və təkmilləşdirilməsidir. Böyük məmnuniyyətlə sizin də təcrübənizi, paylaşmaq istədiyiniz bilikləri bu məqalədə qeyd etmək istəyərik.

Öncədən qeyd edək ki, müəlliflər azərbaycan dilində texniki lüğət sahəsində ekspert olmadıqlarına görə bəzi yanlışlıqlar və istənməyən səhvlər ola bilər. Eyni zamanda, yazını mütləq həqiqət kimi də təqdim etməkdən çəkinirik, kontekstual səhvlərin və ya köhnəlmiş məlumatların olması mümkündür. Bu hallar ilə rastlaşdıqda müraciət edərək yazının təkmilləşdirilməsində siz də iştirak edə bilərsiniz.

Müsahibəyə gedən yol

Proqramçı-mühəndis rolları

Amerika, Kanada və Avropadakı əksər proqramçı-mühəndis rolları aşağıdakı bir neçə qrupa bölünür. İşə müraciət etməzdən öncə hansı qrupa müraciət etdiyinizi müəyyənləşdirmək gərəklidir.

Ümumi proqramçı-mühəndis (Generalist Software Engineer)

Böyük texnologiya şirkətlərində açıq iş elanlarının və iş imkanlarının əksəriyyəti bu qrupa daxildir. Eyni zamanda bu şirkətlərdə çalışan mühəndislərin əksəriyyəti də bu qrupa aid olur.

Ümumi proqramçı-mühəndislərdən əsas gözləntilərdən biri yeni texnologiyaları və proqramlama dillərini öyrənmə qabiliyyətinin yüksək olmasıdır. Bu qrupdakı mühəndislər bəzən eyni zamanda müxtəlif proqramlaşdırma dilləri və texnologiyalar istifadə edilən bir neçə aktiv layihədə iştirak edir. Bu formada işdə effektiv çalışa bilmək üçün həmçinin, mühəndislərə şirkətə qoşulduqdan sonra bilmədikləri və onlara işdə gərəkli olan texnologiyaları öyrənmək üçün 3-6 aya qədər zaman da verilir. İşəgötürən şirkətlər ümumi proqramçı-mühəndis rollarına müraciət edən müraciətçilərdə hər hansı bir sahədə mütəxəssis olmasından çox, yeni problemləri nə qədər çevik qavramasına və problemləri optimal həll edə bilmək bacarığına diqqət yetirir. Müsahibə zamanı müraciətçilərə ümumi biliklərini yoxlamaq üçün alqoritmlər, paylanmış sistemlər (distributed computing - red), internet protokolları və sair bu kimi ümumi mövzularda suallar və məslələr verilir. Məsələlərin həlli zamanı müraciətçilərə istədikləri proqramlaşdırma dili seçmək imkanı verilir.

İxtisaslaşmış proqramçı-mühəndis (Domain-specific Software Engineer)

Texnologiya şirkətləri ümumi proqramçı-mühəndis rolundan əlavə fərqli istiqamətlər üzrə ixtisaslaşmış proqramçı-mühəndis rolları üçün də iş elanları yerləşdirir. Bu rol qrupuna front-end, mobil (Android və ya iOS), Maşın öyrənməsi (Machine learning - red), DevOps və SRE (Site Relability Engineer - red) və digər bu kimi sahələrdə ixtisaslaşmış proqramçı-mühəndislər aid edilir.

İxtisaslı proqramçı-mühəndis rolları üzrə iş müraciətlərində müsahibə prosesi bu yazıda təsvir edildiyindən bir qədər fərqli keçirilir. Bu rollara müraciət edən mühəndislərdən müraciət etdikləri sahə üzrə mütəxəssis olmaları gözlənilir. Məsələn, iOS mobil proqramçı-mühəndis elanları üzrə müsahibələrdə müsahibənin 1 və ya 2 hissəsi iOS əməliyyat sistemi, Objective C və ya Swift proqramlama dilləri ətrafında fokuslana bilər. Eyni ilə, frontend proqramçı mühəndis roluna müraciət edən mühəndislərdən də müsahibə zamanı JavaScript, TypeScript və digər frontend texnologiyaları istifadə edərək hər hansı istifadəçi interfeysi hazırlamaq tələb oluna bilər. Həmçinin, bu müsahibələrdə alqoritm və sistem dizaynı bölmələri çıxarılmış ola bilər.

İş müsahibələrinə düşməyin müxtəlif yolları

İşə müraciət edənlərin sayının çoxluğuna görə, böyük texnologiya şirkətlərində müsahibəyə düşmək və işə götürənlərin diqqətini cəlb etmək çox da asan olmur. Müsahibəyə düşmək fərqli yollarla mümkündür. Aşağıda sadaladığımız yollar müəlliflərin şəxsi təcrübələrdən qaynaqlanır və mütləqdir ki, müəlliflərin xəbərsiz olduğu hekayələr var. Yeni təcrübələr ilə tanış olduqda bu siyahıya əlavələr olacaq. Fərqli müsahibə hekayələri ilə tanış olmaq üçün Blind saytını nəzərdən keçirə bilərsiniz.

Şirkətlərin karyera səhifəsi

Bir çox şirkətlər korporativ veb səhifələrinin karyera bölməsində açıq iş elanlarını yerləşdirir. Məsələn, Google və ya Facebookun karyera səhifələrində sizə uyğun olan açıq vakansiyaları müxtəlif filterlər istifadə edərək tapa, nəzərdən keçirə və müraciət edə bilərsiz.

Müraciətlərin çoxluğu səbəbindən, karyera səhifələrindən edilən müraciətlər əksər hallarda ilkin olaraq avtomatlaşdırılmış sistemlər vasitəsi ilə filtrlənir. Avtomatlaşdırılmış sistemlərin sizin CV-ni seçməsi üçün şirkət üçün və müraciət etdiyiniz rol üçün önəmli olan açar sözləri tapmalıdır. Reytinqli universitet, digər tanınmış texnologiya şirkətlərində iş təcrübəsi və sair kimi açar sözlər bu sistemlərin sizin CV-ni seçməsi üçün önəmli ola bilər. Sistemlər CV-də şirkətə maraqlı açar sözləri tapmadığı müddətdə, karyera səhifələri vasitəsi ilə olunan müraciətlər cavabsız qala bilər.

Şirkətdaxili yönləndirmə (Referans - red)

Əksər texnologiya şirkətlərində əməkdaşlar daxili portalı vasitəsi ilə tanıdıqları və iş elanının tələblərinə uyğun bildiyi namizədləri işə götürmə şöbəsinə və ya menecerlərinə yönləndirə və ya tövsiyə edə bilərlər. Şirkət daxili yönləndirmələr şirkətlərdə də önəmli sayılır və əksər hallarda tövsiyyə edilən namizədlə bir başa əlaqəyə keçilir.

Əgər müraciət etmək istədiyiniz şirkətdə dostunuz və ya bir başqa tanıdığınız kimsə yoxdursa, o şirkətdə çalışan Azərbaycanlı mühəndislərlə əlaqə keçməyi, onlara özünüzü tanıtmağa və uyğun bilirlərsə sizi daxili portalda həmin iş elanına tövsiyyə etməyi xahiş edə bilərsiniz. Bu formada mühəndislərlə əlaqə saxlayan zaman peşəkar kanallar (məs. Email, Linkedin, və s.) istifadə edin və peşəkar davranın. Özünüz haqda, o cümlədən iş keçmişiniz, təhsiliniz, bilik və bacarıqlarınız haqda ətraflı məlumat verin. Həmçinin niyə sizi tövsiyyə etməsini istədiyinizi vurğulayın.

Ümumilikdə xarici şirkətlərdə çalışan həmvətənlərimiz müraciət edən digər Azərbaycanlılara yaxından yardım etmək istəyir. Lakin bəzən məşğulluq, sosial şəbəkələri az istifadə etmə səbəbindən məktublarınıza cavab almaya və ya gec cavab ala bilərsiniz.

Universitet və ya akademik yol

Yüksək reytinqli texniki universitetlərin məzun və tələbələri daim böyük şirkətlərin diqqət mərkəzində olur. Texnologiya şirkətləri bu universitetlərdə mütəmadi karyera sərgiləri keçirməklə yanaşı, bu universitetlərə özlərinin avtomatlaşdırılmış CV seçmə sistemlərində də üstünlük verirlər. Karyera sərgilərində qısa müzakirələrdən sonra tələbə və məzunlar əksər vaxt "on-site" müsahibəyə dəvət olunur. Yüksək reytinqli universitetlərlə yanaşı, texnologiya şirkətləri fərqli şəhərlərdə (məs. Dublin, Sürix, London, və s.) yerləşən ofislərinə yaxın lokal universitetlərdə də karyera günləri və aktiv müsahibələr keçirir.

Reytinqli texnologiya universitetlərindən məzun və tələbə axtarışından başqa, böyük texnologiya şirkətləri həm də bir çox elmi araşdırma konfranslarında həm sponsor, həm də araşdırma mərkəzi kimi iştirak edirlər (misal üçün VLDB, USENIX və s). Şirkətlər bu konfranslarda da iştirak edən məqalə müəlliflərinə diqqət edir, potensial komanda yoldaşı kimi gördükləri mütəxəssisləri nəzarətə alırlar. Bu formada işə götürmə əsasən spesifik sahələrdə, məsələn, proqramlama dilləri, məlumatları idarəetmə sistemləri (database management systems - red), maşın öyrənmə və bu kimi digər sahələrdə ixtisaslaşmış mütəxəssislər üçün keçərli olur.

Proqramlaşdırma yarışmaları və ya olimpiadalar

Texnologiya şirkətlərinin alqoritmik biliklərə və problem həll etmə bacarıqlarına önəm verməsi, proqramlaşdırma yarışmaları və informatika olimpiadalarında iştirak edən tələbə və məzunlara həm müsahibəyə düşməyə, həm də müsahibənin texniki mərhələsini keçməyə faydalı olur. Bu yarışmalarının ən tanınmışları kimi Topcoder-i, Codeforces-u, tələbələr üçün olimpiadalardan isə ACM ICPC-ni qeyd etmək olar.

Yuxarıda qeyd etdiyimiz yarış və olimpiadalarla yanaşı bəzi texnologiya şirkətləri parlaq mühəndisləri kəşf etmək üçün öz yarışlarını da keçirirlər. Bu yarışların ən tanınmışları Facebook Hacker CupGoogle Code Jam-dir. Bir çox texnologiya şirkətləri də bənzər yarışmaları HackerRank saytı vasitəsilə təşkil edir. Əlavə olaraq Google şirkətinin komanda şəkilində təşkil olunan və daha real mühəndislik problemləri üzərinə qurulan Google Hash Code yarışması da var.

Bu tipli yarışmaların detalları, hazırlıq prossesi və sair məlumatlar yüksək reytinqli iştirakçılar tərəfindən Youtube platformasında paylaşılır. Nümunə olaraq, Errichto, Petr Mitrichev, Gennady KorotkevichWilliam Lin-in YouTube kanallarına baxa bilərsiniz.

Bu yarışlarda qazanılan təcrübələr müsahibələrdən keçməyə faydalı olur. Lakin bu yarışlarda iştirak heç də həmişə yaxşı mühəndis olmaq demək deyil. Bu haqda Google Araşdırma şöbəsinin rəhbəri Peter Norvig çıxışında cavablandırmışdır.

Açıq qaynaqlı mənbələrə töhfələr (Open Source contributions - red)

İşə götürənələrin önəmli işçi axtarışı mənbələrindən biri də açıq qaynaqlı layihələrdir. Facebook, Google kimi şirkətlərin Github üzərindən paylaşdığı proyektlərə, həmçinin The Apache Software Foundation-nin layihələri, universitetlərin və fərdi mühəndislərin açıq qaynaqla paylaşdığı layihələrdə iştirak edən və önəmli töhvələr verən mühəndislər texnologiya şirkətlərinin diqqətində olur.

Böyük texnologiya şirkətləri həmçinin özləri də önəmli açıq qaynaqlı layihələrə dəstək olur. Məsələn, Google şirkəti 2020-ci il yay təcrübəsinə qəbul etmiş 1000-dən artıq tələbəni müxtəlif açıq qaynaqlı layihələrə cəlb edəcək.

Açıq qaynaqlı layihələrdə iştirak etməklə önəmli təcrübə və tanışlıqlar qazanmaqla yanaşı, texnologiya şirkətlərində müsahəbəyə dəvət olunmaq şanslarınızı artıra bilərsiniz.

Linkedin profili, Cover letter və Resume (CV)

İş müraciətlərini hansı yolla etməyinizdən asılı olmayaraq, diqqət çəkən, əhatəli və səliqəli CV-nizin olması iş tapma prosesində diqqət yetirməli olduğunuz məsələlərdəndir. Tərtib etdiyiniz CV-dəki məlumatların həmçinin Linkedin profilinizdə də olması iş tapma şanslarınızı artıra bilər.

CV hazırlayarkən təhsil və iş özkeçmişinizi gözəçarpan formada yazmağınız lazımdır. Əgər universitetdən yeni məzun olmusunuzsa və kifayət qədər iş təcrübəniz yoxdursa, təhsil aldığınız müddətdə işlədiyiniz universitet layihələrini, startup girişimlərinizi, şəxsi layihələriniz və əgər varsa dəstəklədiyiniz açıq qaynaqlı proqramları qeyd edin. Bu layihələr haqda qısa məlumat verməklə yanaşı, layihələrin hansı problemi həll etdiyi, sizin gördüyünüz işin layihənin uğuruna təsiri, istifadə etdiyiniz texnologiyalar, proqramlaşdırma dilləri, kitabxanalar, framework-lar haqda da qısa məlumat verin.

Əgər bir neçə il iş təcrübəniz və ya texnologiya şirkətlərində təcrübə proqramı (internship - red) keçmisinizsə, universitet layihələrində daha çox bu layihələr haqda CV-də məlumat verin. İş təcrübəsi olan namizədlər CV-də əsasən iş təcrübələrində işlədikləri layihələr və layihəyə qatdıqları ümumi dəyər haqda məlumat versələr daha gözəçarpan CV alınmış olar.

Əlavə olaraq, həm təcrübəli namizədlər, həm də az iş təcrübəsi olan namizədlər, yaxşı olar ki, CV-nin ən yuxarı hissəsində özləri haqda 3-5 cümlədən ibarət qısa məlumat da yazsınlar.

İzahat məktubu və ya Cover letter müsahibin özü haqda qısa məlumat verdiyi və işə müraciətini əsaslandırdığı qısa məktubdur. Son dövrlərdə böyük şirkətlərin işə qəbul prosesində izahat məktubu tələb olunmur. Əvəzində müsahiblə telefon müsahibəsi keçirilir. Bəzi kiçik və orta texnologiya şirkətlərində müraciətçidən izahat məktubu tələb oluna bilər. İzahat məktubu yazarkən məktubu qısa etməyə (məs. A4 vərəqin yarısı qədər) çalışın. Məktubun bir hissəsində şəxsi keyfiyyətlərinizi, digər hissəsində iş keçmişinizin xülasəsini, şirkətə və müraciət etdiyiniz rola nə üçün uyğun olduğunuzu vurğulayın.

Müsahibə prossesi

Birləşmiş Ştatlarda və Avropada yerləşən texnologiya şirkətləri, o cümlədən çoxumuzun yaxşı tanıdığı Google, Microsoft, Facebook və Amazon kimi şirkətlər işə qəbul prosesini standartlaşdırılmış müsahibə formatında həyata keçirir. Müsahibə, müraciət etmək üçün seçdiyiniz şirkətdən asılı olaraq bir neçə mərhələdə həyata keçirilir. Şirkətlərdə müsahibənin məzmunu və formatı bir-birindən fərqli olasa da, ümumilikdə müsahibə prosesi bənzər şəkildə həyata keçirilir. Fərqliliklər isə şirkərlərdə oturuşmuş ümumi korportativ və mühəndislik mədəniyyətinə əsasən mövcud olur. Məsələn, Amazon-da işə qəbul prosesində müsahibin şirkətə uyğunluğu və davranışı digər şirkətlərə nisbətən daha çox ön plana çəkilə bilər. Həmçinin, eyni şirkətdə fərqli komandalar arasında da müsahibə prosesinə yanaşmada müəyyən fərqliliklər ola bilər.

Yazının davamında sizinlə yuxarıda qeyd edilən texnologiya şirkətlərində uğurlu təcrübə proqramı (internship - red) və iş müsahibələri keçmiş, həmçinin müxtəlif zamanlarda həmin şirkətlərdə mühasibə proseslərində iştirak etmiş mühəndislərin təcrübələrini xülasə mərhələlər şəklində paylaşırıq.

MƏRHƏLƏ 1 - İnsan resursları şöbəsinin əməkdaşı ilə telefon müsahibəsi

Müsahibə prosesinin ilk mərhələsi müraciət etdiyiniz şirkətin insan resursları şöbəsinin əməkdaşının sizinlə təşkil etdiyi telefon müsahibəsi ilə başlayır. Telefon müsahibələri adətən 15-30 dəqiqə çəkir və demək olar bütün böyük texnologiya şirkətlərində müsahibənin ilk mərhələsidir. Bu mərhələnin əsas məqsədi sizinlə tanış olmaq və karyera hədəfləriniz haqda məlumat almaqdır. Telefon müsahibəsində sizdən əsasən şirkəti nə üçün seçdiyiniz, şirkət və ya müraciət etdiyiniz komanda və gördükləri işlər haqında nə bildiyiniz soruşulur. Bu mərhələdə müsahibə nadir hallarda texniki suallar verilir.

Telefon müsahibəsini uğurla başa vurmaq və müsahibə götürəndə özünüz haqda müsbət fikirlər yaratmaq üçün, müsahibədən əvvəl şirkət haqda ümumi məlumatlar, həmçinin şirkətin məhsul portfeli, bazarda ən çox tanınan məhsulları, bazara yeni çıxarılan məhsulları, iş elanında qeyd olunmuş işə və komandaya spesifik məlumat və tələblər barədə araşdırma aparmağınız önəmlidir.

Yuxarıdakı mövzulardan əlavə sizdən hazırkı viza statusunuz, paralel olaraq başqa şirkətlərlə müsahibə prosesində olub-olmadığınız, işə qəbul olduğunuz halda nə zaman başlaya biləcəyiniz və digər bu kimi suallar soruşula bilər.

Telefon müsahibəsini uğurla başa vuran müsahiblər bir neçə hissədən ibarət olan Texniki mərhələyə dəvət olunur.

MƏRHƏLƏ 2.1 - Texniki mərhələ (Ev tapşırığı)

Ev tapşırğı bəzi texnologiya şirkətlərinin Texniki müsahibə mərhələsinin 1-ci hissəsi sayılır. Şirkətlərin müsahibə prosesində əsasən 2 növ ev tapşırığına rast gəlinir:

  1. Onlayn kodlaşdırma tapşırığı - Müsahibə email vasitəsi ilə online kodlaşdırma saytlarının birində ev tapşırığının linki göndərilir. Müsahib tapşırığı qeyd olunmuş müddət (əsasən 2-3 gün) ərzində başlamalı və tapşırıq üçün verilmiş zaman çərçivəsində (əsasən 1-2 saat) bitirməlidir. Tapşırıqlarını işləyərkən əsas diqqət yetirməli olduğunuz 2 şey yazdığınız kodun zamana (time) və yaddaşa (space) görə optimal işləməsidir.

  2. Layihə formatlı tapşırıq - Bu formatda olan ev tapşırıqları müsahibə email vasitəsi ilə PDF faylında və ya GitHub-da repository kimi göndərilir. Müsahib layihəni qeyd olunmuş müddət (əsasən 2-3) ərzində bitirib göndərməlidir. Tapşırıq çərçivəsində müsahib problemi həll edən kodu, testləri və həmçinin həlli və testləri işlətmək üçün lazım olan addımların təsvir edildiyi faylı müsahibəçiyə geri göndərməlidir.

Ev tapşırıqları şirkətin mühəndisləri tərəfindən yoxlanılır. Bu mərhələni uğurla keçən müsahiblər Texniki müsahibənin əsas hissəsinə dəvət alır.

MƏRHƏLƏ 2.2 - Texniki mərhələ (Online)

Texniki mərhələnin bu hissəsi əvvəlcədən razılaşdırılmış vaxtda onlayn formatda keçirilir. Müsahibə şirkətin mühəndisləri və ya spesifik olaraq müraciət etdiyiniz komandanın mühəndisləri tərəfindən keçirilir. Müsahibənin texniki hissəsinə başlamazdan əvvəl müsahib özünü təqdim edir və şirkətdəki rolu barədə namizədə məlumat verir. Daha sonra namizəddən qısaca olacaq iş keçmişi barədə və gördüyü işlər barədə məlumat verməsini istəyir. Daha sonra müsahibə aşağıdakı 2 hissədən davam edir:

  1. Kodlaşdırma- Müsahib əvvəlcədən hazırladığı alqoritm məsələlərini namizədə təqdim edim edir. Müsahibənin bu mərhələsi 45-60 dəqiqə davam edir. Namizəd verilən vaxt ərzində alqoritm və kodlaşdırma bilik və bacarıqlarından istifadə edərək verilən məsələləri optimal formada həll etməlidir. Kod yazarkən hackerrank.com kimi platforma istifadə olunur və namizədə kod yazarkən istədiyi proqramlaşdırma dilindən istifadə etmək imkanı verilir.

  2. Davranış müsahibəsi (Behavioural interview) - Müsahibənin bu hissəsi əsasən namizədin müxtəlif iş vəziyyətlərində (məsələn, konflikt zamanı, komanda ilə iş zamanı, və s.) necə davranacağını öyrənmək üçün təşkil olunur. Davranış müsahibəsi adətən 30-40 dəqiqə davam edir. Bəzi şirkətlərdə davranış müsahibəsi onlayn formatda deyil, namizədlə üzbəüz keçirilir.

Bu mərhələnin sonunda müsahib namizəddən suallarının olub-olmamasını soruşur. Bir qayda olaraq, namizədən ən azı 1-2 sual verməsi gözlənilir. Bu suallar şirkət, namizədin müraciət etdiyi spesifik komanda, standart iş gününün necə keçməsi, işin çətin və ya maraqlı tərəfləri, komandanın və ya şirkətin gələcək strategiyası, konkret məhsulların inkişaf strategiyası və sair barədə ola bilər. Bu suallar zamanı nəzərə almağınız lazımdır ki, müsahib sizin müraciət etdiyiniz komandadan olmaya bilər və bəzi komandaya spesifik sualları cavablandırmaya bilər.

MƏRHƏLƏ 2.3 - Texniki mərhələ (Onsite)

Texniki mərhələnin onlayn hissəsini uğurla keçən namizədlər şirkətin xarici ölkədəki ofisinə üzbəüz texniki müsahibəyə dəvət olunurlar. Onsite müsahibə aşağıdakı 3 hissədən ibarət olur və bütün hissələr 1 gün ərzində yekunlaşır.

  1. Kodlaşdırma- Müsahib əvvəlcədən hazırladığı alqoritm məsələlərini namizədə təqdim edir. Müsahibənin bu mərhələsi 45-60 dəqiqə davam edir. Namizəd verilən vaxt ərzində alqoritm və kodlaşdırma bilik və bacarıqlarından istifadə edərək verilən problemləri optimal formada həll etməlidir. Ofis ziyarətində adətən 2-5 kodlaşdırma müsahibəsi olur. Kodlaşdırma müsahibəsinin sayı şirkətdən və sizin iş təcrübənizdən asılı olaraq dəyişir. Müsahibənin bu mərhələsində namizədin oxunaqlı, performansı optimal və yaxşı test olunmuş kod yaza bilmək bacarıqları yoxlanılır. Bu mərəhələdə bəzi şirkətlər namizədlərə kodu kompyuterdə yazmaq imkanı verir. Lakin adətən bir çox şirkətdə namizədlər kodunu ağ lövhədə yazır. Nümunəvi kodlaşdırma suallarını Leetcode, InterviewBit və digər bu kimi saytlarda tapmaq olar. Müsahibə götürən şəxs müsahibə zamanı namizədə sualı və tələbləri tam detallı vermir. Bunu etməkdə məqsəd namizədlərin tələbləri toplamaq, məsələni daha dəqiq anlamaq, analiz və kommunikasiya bacarıqlarını yoxlamaqdır. Uğurlu namizədlər bu mərhələdə məsələnin həllinə başlamadan müsahibənin tələblərini və fərziyyələrini daha yaxşı anlamaq üçün suallar verməlidir. Onsite müsahibənin kodlaşdırma bölməsini uğurla keçmək üçün aşağıdakılara diqqət yetirməyiniz gərəklidir:
  • Müsahibəyə test kimi yox, biznes məsələsi kimi baxın

  • Məsələnin təsviri əvvəlcədən aydın verilmir və sizdən suallar verməyiniz gözlənilir

  • Ən mükəmməl həlldənsə verilən zaman kəsiyində (30-40 dəqiqə içində) işlək kod yazmağınız daha vacibdir

  • Müsahibə götürən mühəndisi komanda yoldaşınız kimi görün və analizlərinizi aydın şəkildə onunla da paylaşın

  1. Sistem dizaynı - Müsahibənin bu mərhələsində namizədin sistem və proqram təminatı arxitekturası bilikləri yoxlanılır. Müsahibə 45-55 dəqiqə davam edir və tapşırıq olaraq namizəddən tanınmış bir platformanın (məsələn, Instagram, Uber, Youtube və s.) sadələşdirilmiş halını qısa zamanda dizayn etməsi istənilir. Sistem dizaynı müsahibəsi adətən ən az 3 il iş təcrübəsi olan namizədlərlə keçirilir. Sistem dizaynı müsahibələrinə hazırlaşmaq üçün ilkin olaraq Grokking və Palantir şirkətinin mühəndislik bloqlarından, həmçinin müraciət etdiyiniz şirkətlərin də mühəndislik bloqlarından istifadə etmək olar. Hazırlıq bölməsində Sistem dizaynı haqda daha ətraflı keçidlər paylaşılıb. Müsahibənin kodlaşdırma bölməsində düşünmə prosesiniz düz həlli tapmağınız qədər önəmlidir. Səsli düşünməyiniz, problemi analiz etməyiniz, müsahibə tələblərini tam anlamaq üçün suallar verməyiniz və həllinizin müsbət və mənfi tərəflərini səsli müzakirə etməyiniz müsahib tərəfindən yüksək qiymətləndirilir. Problemin həllində razılaşdıqdan sonra kodlaşdırmaya başlayın. Kodlaşdırmanı bitirdikdən sonra 1-2 nümunəvi testlə kodu test edin. Testləri yazarkən kənar halları xüsusi ilə nəzərdə tutun. Həlliniz testləri uğurlu keçdikdən sonra müsahibdən kodunuz və hazırladığınız testlər haqda suallarının olub-olmadığını soruşun.

  2. Davranış müsahibəsi (Behavioural interview) - Müsahibənin bu hissəsi əsasən namizədin müxtəlif iş vəziyyətlərində (məsələn, konflikt zamanı, komanda ilə iş zamanı, və s.) necə davaranacağı öyrənmək üçün təşkil olunur. Davranış müsahibəsi əsasə 30-40 dəqiqə davam edir. Bəzi şirkətlərdə davranış müsahibəsi online mərhələdə deyil, namizədlə üzbəüz müsahibədə edir. Davranış müsahibəsi zamanı müsahib həmçinin sizin müraciət etdiyiniz şirkətin iş mədəniyyəti və dəyərlərinə nə qədər uyğun olduğunuzu öyrənməyə çalışır. Əgər universitetdən yeni məzunsunuzsa və ya hələ də tələbəsinizsə, bu müsahibə zamanı universitet proyektləriniz haqqında danışa bilərsiz. Nümunə olaraq Amazon şirkətinin prinsipləri və şirkət dəyərləri haqda bu keçiddən oxuya bilərsiniz.

Müsahibədə uğur qazanmaq üçün müsahibə zamanı öz hekayənizi danışmağa diqqət edin. Müsahib namizədə dəqiqləşdirici suallar verərək dediklərinin onun fikri olduğunu və inandığı dəyərlər olub olmadığını yoxlayır. Əgər karyeranızda yenisizsə kiçik proyektlərdən və ya komputer mühəndisliyindən kənarda gördüyünüz işlərdən, həyat təcrübənizdən danışa bilərsiz.

"Sizin bir ideyanızın komanda yoldaşlarınız tərəfindən qəbul olunmadığı bir zamandan danışın. Nə etdiniz?", “Komandanızın planlanan tarixdə proyekti çatdıra bilməyəcəyini gördünüz. Nə etdiniz?”, “Ən uğurlu və ya ən uğursuz proyektiniz haqqında danışın” və digər bu kimi suallar davranış müsahibəsində tez-tez soruşulan suallara sırasındadır. Davranış müsahibələri haqda ətraflı yazı paylaşacağıq.

  1. İxtisasa yönəlik müsahibə Kodlaşdırma və sistem dizayn müsahibələri ümumi texniki bilikləri yoxlayır. Bunlar adətən ümumi Proqram təminatı mühəndisi roluna müraciət edən namizədlərdən soruşulur. Front-end, UI/UX, Süni intellekt və başqa xüsusiləşmiş rollara müraciət edən namizədlərdən müsahibə zamanı başqa suallar da soruşula bilir. Bu mövzular haqda gələcək məqalələrimizdə ətraflı məlumat paylaşacağıq.

Ümumilikdə müsahibə və işəgötürmə prosesi haqqında daha ətraflı məlumat almaq üçün ABŞ şirkətlərinin işə götürmə prosesinə yön verən əsas kitablardan biri olan Hiring with Your Head kitabına müraciət edə bilərsiniz.

Hazırlıq

Texnologiya şirkətlərində işə qəbul müsahiblərdən fərqli texnologiyalar, alqoritmlər, verilənlər strukturları, sistem dizaynı, təqdimat və kommunikasiya, davranış müsahibəsi və digər mövzulara əvvəlcədən hazırlaşmağı tələb edir. Bu bölmədə əsasən ümumi proqramçı-mühəndis rolu üçün müsahibəyə hazırlıq prosesi təsvir edilir. İxtisaslaşmış proqramçı-mühəndis rollarına müraciət edərkən, bu mövzulardan başqa digər texniki mövzulara da hazırlaşmağınız gərəkli olacaq. Müsahibəyə hazırlıq planınızı əvvəlcədən müəyyənləşdirmək və hazırlıq prosesinə diqqət etmək, işə qəbul prosesində uğurlu və ya uğursuz olmağınızı təyin edən önəmli amillərdən biridir.

İngilis dili və səlis danışıq

Düzgün ünsiyyət bacarığı və özünü səlis ifadə etmək müsahibə zamanı bəzi hallarda texniki biliklər qədər önəmli ola bilir. Bir çox mühəndislər müsahibə zamanı ünsiyyət bacarıqlarının önəmindən xəbərsiz olur.

Burada ünsiyyət bacarıqları və ingilis dili bacarıqları dedikdə, mürəkkəb cümlələr qura bilmək, sözləri səlis səsləndirmək və ya lüğət bacarıqları nəzərdə tutulmur. Diqqət yetirməli olduğunuz məqam fikirləri, həlli və həllinizin texniki göstəricilərini qarşı tərəfə doğru çatdırmaq, həmçinin, məsələnin tələblərini dəqiq anlamaq üçün dolğun suallar vermək nəzərdə tutulur.

Nəzərə almaq lazımdır ki, siz verilən məsələləri həll edərkən, müsahib texniki həlldən əlavə sizin fikir prossesinizi də bilmək istəyir və bu barədə gərəkli qeydlər götürür. Məsələləri həll edərkən səsli düşünməyiniz, düşündüyünüz alternativ həlləri səsli bildirməyiniz müsahibin diqqət etdiyi və sizi dəyərləndirdiyi məsələlərdən biridir.

Bundan əlavə, texniki fikirlərdə cümlələrinizin formasına da diqqət etməyiniz önəmlidir. Məsələn, "sistem çox yaxşı işləməyə başladı", “sistemi inanılmaz sürətli elədi” kimi ümumi və qeyri-müəyyən cümlələr əvəzinə “sistemin gecikməsi (latency) 3 dəfə azaldı” və “mürəkkəblik O(n^3)-dan O(n^2)-yə endi” kimi spesifik, statistika məzmunlu cümlələrdən istifadə edin. Nəticələri müzakirə edərkən danışığınızda konkret rəqəmlər, statistika istifadə etmək müsahibin sizin haqqınızda pozitiv rəy verməsinə gətirib çıxaracaq.

Müsahibələrə başlamadan öncə dil biliklərinizi dərinləşdirmək, ingilis dili biliklərinizi ən azından upper intermedidate və ya B2 səviyyəsinə çatdırmaq, müsahibə zamanı özünüzü səlis ifadə etməyinizə şərait yaradacaq.

İngilis dilini necə öyrənmək və ya inkşaf elətdirmək bu məqalənin əsas maraq dairəsinə daxil olmadığı üçün bu mövzu haqda ətraflı yazmırıq və gərəkli araşdırma aparmağı və hazırlaşmağı sizin öhdənizə buraxırıq. Əlavə olaraq qeyd etmək istərdik ki, yüksək dil bilikləri və ünsiyyət bacarıqları, işə qəbul prosesi ilə yanaşı, gələcək iş həyatınızın da rahat olmasına təsir edəcək önəmli faktorlardan biridir.

Proqramlaşdırma dilinin seçimi

Əksər hallarda müsahibədə hansı proqramlaşdırma dilini istifadə etmək namizədin ixtiyarına buraxılır. Namizəd, qeydlərini və kodunu istədiyi dildə yaza bilər. Lakin bəzi istisna hallarda işə götürən menecer hər hansı bir proqramlaşdırma dilində sizin təcrübəniz öyrənmək istəyə bilər. Məsələn, infrastruktur layihələrində və performansa həssas sistemlərdə C++ dilini bilmək şərt kimi qəbul oluna bilər.

Müsahibədə istifadə edəcəyiniz proqramlaşdırma dilini hansı dərəcədə bilməyiniz də bir çox hallarda müsahibə zamanı sizə əlavə ballar qazandıra bilər. İstifadə etdiyiniz dili dərin bilmək və dilin daxili kitabxanalarından effektiv istifadə etməklə müsahibə bilik və bacarıqlarınız barədə önəmli positiv siqnal vermiş olacaqsınız. Hətta bir çox şirkətlərin işə qəbul prosesində müsahiblərdən sizin proqramlaşdırma dili bilgiləriniz barədə dəyərləndirmə aparmaq və rəy yazmaq tələb olunur. Dilin mürəkkəb funksiyalarını istifadə edərkən diqqətli olmalı olduğunuz məsələ istifadə etdiyiniz funksiyaların necə yazıldığını bilmək, həmçinin funksiyanın zaman və yaddaş mürəkkəbliyini izah ede bilməkdir. Məsələn, hər hansısa məsəlinin tərkib hissəsi olaraq "Substring" istifadə eliyirsizsə, bu funksiyanın hansı alqoritm ilə yazıldığını, zaman və yaddaş mürəkkəbliyini bilməli və lazım olarsa özünüzdə sıfırdan yaza bilməlisiniz.

Bəzi təcrübəli mühəndislər müsahibə zamanı dilə önəm vermirlər. Əgər məsəlini düzgün və optimal həll etmisinizsə, bu mühəndislər həlli hətta psevdokod şəklində də qəbul edirlər. Lakin, müsahibələr zaman belə düşünən mühəndislərlə qarşılaşmaq da nadir hallarda olur. Bunun əksinə, bəzi mühəndislər, istifadə etdiyiniz proqramlaşdırma dilindən əlavə yazdığınız kodun səliqəli və oxunaqlı olmasına da fikir verə bilərlər.

Son olaraq qeyd etmək istərdik ki, müsahibələrdə hansı proqramlaşdırma dili istifadə etməyinizdən asılı olmayaraq, dili yaxşı bilmək və ümumi daxili kitabxanaları ilə tanış olmaq həm müsahibə zamanı, həm də gələcək iş həyatınızda sizə faydalı olacaq.

Alqoritmlər və verilənlər strukturları

Müsahibəyə hazırlaşmaq üçün mənbələr

Öncədən bildirmək istərdik ki, burada qeyd olunan mənbələr müəlliflərin müxtəlif dövrlərdə istifadə etdiyi mənbələrdir. İnternetdə alternativ resurslar və mənbələr var və onlardan da istifadə etmək olar. Əsas məqsədimiz internetdə olan mənbələrin əksəriyyətini burada qeyd edib müsahibəyə hazırlaşan namizədin həyatını çətinləşdirmək deyil, real nəticə əldə etmiş və müsahibə prosesi ilə yaxından tanış olan mütəxəsisslərin təcrübəsini paylaşmaqdır.

Alqoritm biliklərini dərinləşdirmək üçün ilk və ən çox referans verilən mənbə, məşhur "Introduction to Algorithms" (CLRS) kitabıdır. Bu kitab əksər universitetlərin alqoritmlərə giriş və hətta yuxarı kursları üçün nəzərdə tutulan dərslərində çox istifadə olunan kitabdır. Kitab özlüyündə, müsahibələrdə lazım ola biləcək və həmçinin, real iş dünyasında istifadə olunacaq alqoritm biliklərindən daha dərin və geniş mövzuları əhatə edir. Kitabın məzmunu nəzəriyyə ağırlıqlı olduğu və geniş mövzuları əhatə ediyi üçün, kitabı tam oxumaq əksər tələbələr və mütəxisislər üçün çətin ola bilər. Hazırlıq zamanı fokuslanmalı olduğunuz mövzuları seçib, paralel olaraq “MIT Introduction to Algorithms” dərsi ilə oxumaq daha məqsədəuyğundur.

Alqoritmlər və verilənlər strukturları mövzusunda yazılan və universistetlərdə dərslik kimi istifadə olunan digər önəmli kitab isə Robert Sedgewick və digərlərinin müəllifi olduğu "Algorithms" kitabıdır. Kitabı Prinston universitetin Coursera platformasında təqdim etdiyi eyni adlı Algorithms, Part IAlgorithms, Part II dərsləri ilə birgə oxuya bilərsiniz. Bu kitab CLRS ilə müqayisədə daha praktik, yığcam və asan anlaşıla bilən dildə yazılmışdır. Əlavə olaraqda, kitabın Java proqramlaşdırma dilində qaynaq kodu olan resursu var.

Digər diqqətəlayiq kitab "Elements of Programming Interviews in [Java, Python, C++]" kitabıdır. Eyni siyahiya “Cracking the Coding Interview” kitabını da əlavə etmək. Kitabın ilk 35 səhifəsində müsahibə prossesindən və fərqli müsahibə formatlarından ətraflı bəhs olunur. Hər iki kitab daha praktik, müsahibələrdə düşən və ya düşə biləcək suallar ətrafında tərtib olunmuşdur. Bizim də tanıdığımız bir çox mütəxəsis müsahibələrə hazırlıq zamanı yalnız bu iki kitabdan istifadə edərək müsahibələri uğurla keçmişdir.

Kitablardan və onlayn dərslərdən öyrənməyi sevməyənlər alqoritm və verilənlər strukturları mövzularını daha praktik və ətraflı izah edən bloqlardan istifadə edə bilər. Məsələn, Binary Indexed Trees mövzusunu sadə izahını Topcoder-də dərc olunmuş bu məqalədən öyrənə bilərsiniz. Əgər siz də bloqlardan öyrənməyə üstünlük verirsinizsə, aşğıdakı onlayn resurslardan istifadə edə bilərsiniz:

Texniki müsahibələrdən uğurla keçmiş namizədlər nəzəri bilikləri əldən etdikdən sonra və ya parallel olaraq bir neçə onlayn mənbədən aktiv şəkildə istifadə etməyi tövsiyə edir. Onlayn resurslar nəzəri bilikləri praktiki yolla möhkəmləndirməyə yardım edir.

Bir çox müzakirələrdə onlayn resursların ilk sıralarında Leetcode platforması gəlib. Leetcode sizə müxtəlif alqoritm mövzularına dair məsələləri həll edib cavablarını onlayn şəkildə yoxlamaq imkanı verir. Əlavə olaraq Leetcode-da müxtəlif şirkətlərdə müsahibələr zamanı soruşulan real texniki suallar da tapa bilərsiniz. Sualların müzakirəsi, digər istifadəçilərin yazdıqları qaynaqları görmək, bir çox məsələnin izahı (tutorial), onlayn yarışmalar, Leetcode-un digər faydalı funksiyalarıdır.

Real müsahibəyə girmədən, prosesin necə olduğu ilə InterviewBitPramp platformaları vasitəsi ilə ödənişsiz tanış ola bilərsiniz. Burada sizin kimi qeydiyyatdan keçmiş mütəxəssislər bir-birilərini qarşılıqlı müsahibə edirlər. Bu müsahibələr bizim yuxarıda qeyd elədiyimiz formatda olur.

Mövzular

Burada yazdığımız alqoritm və verilənləri strukturları mövzuları bu sahədə olan bütün mövzuları əhatə etmir. Xülasə şəklində tərtib olunub mövzular müsahibələrdə tez-tez görülən məsələlər və müəlliflərin müsahibə təcrübəsi əsasında tərtib olunmuşdur. Mövzular bölməsində qeyd olunmuş alqoritmlər və verilənlər strukturları haqda yalnız onların müsahibədə düşmə şəkli və onları müsahibə kontekstində önəmli edən tərəfləri haqqında bəhs olunur. Bəhs edilən mövzuların fundamental işləmə prinsiplərini izah etmək bu kitabçanın ilkin həcmində planlaşdırılmadığı üçün, müəlliflər mövzuların dərin izahını verməmişdir. Qeyd edilən bütün mövzular haqda daha dərin biliklər əldə etmək üçün kitabçanın mənbələr bölməsində bəhs edilən kitablar, onlayn dərslər və digər onlayn resurslardan istifadə edə bilərsiniz.

Alqoritmlərdə yaddaş və zaman mürəkkəbliyi (Algorithm complexity)

Müsahibə zaman verilmiş məsələni həll etmək üçün fərqli alqoritmlər və verilənlər strukturlarından istifadə etmək olar. Bu zaman diqqən etməli olduğunuz önəmli nöqtələr seçdiyiniz alqoritmin və verilər strukturunun zaman və yaddaş tələbləridir. Bir qayda olaraq icrası (execution - red) daha az zaman və daha az yaddaş tələb edən alqoritmlərə və verilənlər strukturlarına üstünlük verilməlidir.

Alqoritmlərin müqayisəsi zamanı bir çox hallarda analitik və ya nəzəri müqayisəyə üz tutulur. Alqoritmlərin analizi mürəkkəb sahədir və dərin riyazi biliklər tələb edir. Praktiki baxımdan, həm müsahibələrdə həm də real iş həyatında analitik qiymətləndirmə zamanı alqoritmlərin müqayisəsi üçün asimptotik analiz (Asymptotic Analysis - red) riyazi analiz metodu istifadə olunur. Bu metodun əsas məqsədi spesifik kompyuter və ya fiziki obyektlərə bağlı olmadan giriş dəyərlərdən asılı olaraq mürəkkəbliyi riyazi funksiyalarla ifadə etməkdir. Alqoritmin analizi üçün 3 hal istifadə oluna bilər:

  • Ən yaxşı hal (Best case - red)

  • Orta hal (Average case - red)

  • Ən pis hal (Worst case - red)

Texniki müsahibələrdə alqoritmlər və həllər əsasən ən pis mürəkkəbliyə əsasən dəyərlənidirilir. Bəzi hallarda, ən pis hal dəyərləndirməsi pessimistik ola bilər. Misal üçün, bəzi verilənlər strukturlarında ən pis hal nadir hallarda baş verir, əksər hallarda is orta və ya ən yaxşı hal funksiyaları ilə məhdudlaşır. Bu zaman amortizasiyaya uğramış analiz (Amortized analiz - red) metodu istifadə etmək və ya müsahibə zamanı qeyd etmək önəmlidir.

Texniki müsahibədə müsahibənin önəmli hissəsi verilən tapşırığın yaddaş və zaman mürəkkəbliyini müəyyən edib müsahibə dəqiq və aydın izah edə bilməkdir. Bu baxımdan, alqoritmlərin və verilənlər strukturları mövzusunun dərindən öyrənilməsi və mənimsənilməsi önəmlidir. Digər bütün biliklər yaddaş və zaman mürəkkəbliyi üzərində qurulmuşdur.

Sadə verilənlər strukturları (Elementary Data structures - red)

Sadə verilənlər strukturları əksər hallarda məsələlərin tərkibində kiçib bloklar kimi istifadə olur. Məsələlərin həlli üçün seçdiyiniz proqramlaşdırma dilinin standart kitabxanasında olan sadə verilənlər strukturlarından istifadə edə bilərsiniz. Sadə verilənlər strukturlarına statik və dinamik paylanmış sıralar (array - red), birləşdirilmiş sıralar (linked list - red), dəstə (stack - red), sıra (queue - red), çoxluq (set - red), heş cədvəl (hash table - red) və sair fundamental verilənlənlər strukturları aid edilir.

Müsahibə zamanı sizdən açıq şəkildə sadə strukturları sıfırdan yazmağınız tələb olunmursa, proqramlaşdırma dilinin mövcud kitabxanalarından istifadə etməyinizdə məhdudiyyət olmur. Həllinizin yaddaş və zaman mürəkkəbliyinə birbaşa təsir etdiyi üçün, dilin standart kitabxanasının sadə verilənlər strukturlarından istifadə edərkən onların həmin dildə necə tətbiq olunduğunu, hansı alqoritmlərdən istifadə olunduğunu bilməyiniz önəmlidir.

Mürəkkəb verilənlər strukturları (Advanced Data Structures - red)

Sadə verilənlər strukturlarından başqa müsahibə zamanı məsələləri optimal həll etmək üçün mürəkkəb verilənlər strukturlarından da istifadə etmək lazım olur. Müsahibə zamanı sadə verilənlər strukturlarından istifadə edərkən müsahibə strukturun yazılma üsullarını və mürəkkəbliyini izah etmək kifayət edir. Mürəkkəb strukturlardan istifadə etmək gərəkli olduqda isə 2 fərqli yanaşma seçə bilərsiniz:

  • Məsələnin fundamental hissəsi fərqlidirsə: Siz müsahibə zamanı deyirsiniz ki, hal-hazırda bunu yazmaq zaman ala bilər, qəbul edək ki bizim belə kitabxanamız artıq hazırdır, mürəkkəbliyi belə olacaq və təxmini olaraq belə yazılacaq. Müsahibəni əsas problemin həlli ilə davam edib, sonda zaman qalarsa qayıdıb sıfırdan həllini yazırsınız.

  • Məsələnin fundamental hissəsi elə bu verilənlər sturukturunu həll etməkdirsə: Bu zaman mütləqdir ki, sıfırdan kodu yazıb mürəkkəbliyini izah edəsiniz.

Texniki müsahibələrdə əsasən sıralanmış xəritə (ordered map - red), binar axtarış ağacı (Binary Search Tree - red), binar indekslənmiş ağac (Binary Indexed Tree - red), balanslı ağac (Balanced Trees - red), segmentləşdirilmiş ağac (Segment Tree - red), topa (Heap - red), prefiksli ağac (Trie - red), kəsişməyən çoxluqlar (Union Find - red) və digər mürəkkəb verilənlər strukturları istifadə olunur.

Mürəkkəb strukturların tətbiq detallarını, zaman və yaddaş mürəkkəbliklərini bilməyiniz müsahibə zamanı uğurlu olmağınıza kömək edəcək.

Sıralama və axtarış alqoritmləri (Sort and Search - red)

Texniki müsahibələrdə sıralama və axtarış alqoritmləri bir çox hallarda məsələnin həllinin tərkib hissəsi olur. Məsələn, hər hansı bir məsələni həll etmək üçün verilənlər strukturunu əvvəlcə sıralamağınız gərəkli ola bilər. Bu zaman diqqət etməli olduğunuz əsas faktor, istifadə etdiyiniz proqramlaşdırma dilində mürəkkəb obyektlər üzərində sıralama və axtarış əməliyyatlarını yerinə yetirmək üçün düzgün metodlar istifadə etməkdir. Məsələnin həlli üçün seçdiyiniz dildən asılı olaraq, sıralama və axtarış əməliyyatları üçün Comperator, İterator və bu kimi digər metodlar istifadə edə bilərsiniz. Bu metodlar əksər proqramlaşdırma dillərində dilin standart kitabxanasının tərkibində hazır olur.

Sıralama alqoritmlərinin siyahısı uzundur. Lakin praktiki istfadə olunan və müsahibələrdə daha çox müraciət olunanları Merge sort, Heap sortQuicksort alqoritmləridir. Texniki müsahibədən əvvə bu 3 sıralama alqoritmi, həmçinin digər daha sadə sıralama alqoritmləri ilə barədə detallı məlumat almağınız önəmlidir. Həmçinin bu alqoritmlərin tətbiqi və mürəkkəblik detallarını da öyrənməyiniz önəmlidir.

Yuxarıda qeyd etdiyimiz alqoritmlarin ortaq xüsusiyyəti sıralama zamanı verilənlərin həcminin əməli yaddaşda (RAM - red) saxlanıla bilməsidir. Texniki müsahibə zamanı daha böyük həcmdə verilənlərin sıralanması tələb edildikdə, External Sorting alqoritmini istifadə edə bilərsinin. Ümumilikdə bu alqoritm merge sort alqoritminin bir az modifikasiya olunmuş versiyasıdır.

Texniki müsahibələrə hazırlıq zamanı öyrənməli olduğunuz ən önəmli axtarış alqoritmləri xətti axtarış (linear search - red) və intervallı axtarış (interval search - red) alqoritmləridir. Xətti axtarış intervallı axtarışla müqayisədə daha sadədir və öyrənilməsi çox zaman almır. İntervallı axtarış əsasən sıralanmış verilənlər strukturları üzərində həyata keçirilir. Aralı axtarış alqoritmlərinin ən çox istifadə olunan versiyası binar axtarışdır (Binary Search - red). Ümumilikdə intervallı axtarış alqoritmlərinin daha mürəkkəb formalarına texniki müsahibələrədə rast gəlinmir.

Sətir alqoritmləri (String Algorithms - red)

Sətir alqoritmləri texniki müsahibələrdə istifadə olunan məsələlərin bir çoxunda istifadə olunur. Sətirlər mövzusuna aid problemlərin həlli zamanı String sort, Tries, Substring Search, Regular Expression/Automata, Data Compression və digər sətir alqoritmləri və metodları istifadə olunur.

Texniki müsahibə zamanı sizə verilən məsələdə verilənlərin həcminin böyüklüyü qeyd oluna bilər və sizin Compression alqoritmləri haqqında bilikləriniz yoxlanıla bilər. Həmçinin, müsahibə zamanı sətir alqoritmləri biliklərinizi və Trie verilənlər strukturunu tətbiq edə bilmək bacarıqlarınızı yoxlamaq üçün autocomplete sistem yazmağınızı istənilə bilər.

Substring search tətbiqi zamanı standart kitabxanalar istifadə olunur. Standart kitabxanalardan əlavə Rabin–KarpKnuth–Morris–Pratt alqoritmlərini bilmək önəmlidir. Xüsusi ilə Rabin–Karp istifadə olunan Rolling Hash metodu bir çox fərqli problemlərdə istifadə oluna bildiyi üçün, bu alqoritmə xüsusi diqqət yetirmək gərəklidir.

Qraf alqoritmləri (Graphs - red)

Texniki müsahibə zamanı bir çox məsələni qraf alqoritmləri ilə həll etmək mümkündür. Müsahibə zamanı sizdən verilmiş qrafın bir-birindən asılı nodlarını bir-birindən asılı olmayan komponentlərə ayırmağınız istənilə bilər. Bundan başqa, tapşırıqlar (task - red) arasında asılılıq və məhdudiyyətlər olan batch processing sistemində resurları hansı yolla daha optimal istifadə etməyiniz soruşula bilər. Birinci məsələnin həllində klassik Topological Sort alqoritmindən istifadə etməyiniz kifayət edir. İkincinin həllində isə dinamik proqramlaşdırma və Topological Sort alqoritmindən istifadə edə bilərsiniz.

Qraf məsələlərinə defakto həll üsulu kimi qeyd edilə biləcək alqoritmlərə misal olaraq Minimum Spanning Trees, Single-Source Shortest Paths, All-Pairs Shortest Paths, Maximum Flow alqoritmlərinin adlarını qeyd etmək olar.

Klassik qraf məsələləri və onların həlləri ilə ənənəvi kitablardan tanış olmaq olar. Lakin, texniki müsahibə hazırlıq zamanı əksər qraf alqoritmlərin tərkib hissəsi olan 2 fundamental method, DFSBFS haqda öyrənməyiniz önəmlidir. Yalnız qraf məsələlərinin deyil, həmçinin, digər alqoritm problemlərinin də önəmli tərkib hissəsi olduğu üçün hər 2 metodu bilmək texniki müsahibələrdə uğur qazana bilmək üçün önəmlidir.

Ali alqoritm dizayn metodları (Advanced algorithmic Design Techniques - red)

Acgöz alqoritmlər və dinamik proqramlaşdırma (Greedy algorithm and Dynamic Programming - red)

Ənənəvi olaraq, həm acgöz alqoritmlər, həm də dinamik proqramlaşdırma məsələləri texniki müsahibələrdə geniş istifadə olunmuşdur. Son illərdə həlli daha çox zaman və dərin akademik biliklər tələb etdiyi üçün, mürəkkəb dinamik proqramlaşdırma məsələləri texniki müsahibələrdən çıxarılır və müsahibələrdə soruşulması məsləhət görülmür. Lakin dinamik proqramlaşdırma məsələlərinin həllində istifadə olunun xatırlama metodu (memorization technique) fərqli məsələlərin həlli zamanı çox istifadə olunur. Acgöz alqoritmlər isə daha çox intuitiv həllər olduğu üçün davamlı şəkildə texniki müsahibələrdə soruşulur.

MIT Introduction to Algorithms dərsində Dinamik proqramlamaAcgöz alqoritmlər mövzuları dərindən müzakirə olunmuşdur. Kitabçanın resurslar bölməsində qeyd etdiyimiz digər resurslarda bu mövzulara geniş yer verilmişdir. Mövuzunu mənimsədikdən sonra Leetcode-da Dynamic ProgrammingGreedy başlığı altından olan problemləri və digər olimpiada saytlarındakı məsələləri həll edərək təcrübə qazana bilərsiniz.

Parçala və hökm et (Divide and Conquer - red)

Texniki müsahibəyə hazırlaşarkən öyrənməli olduğunuz fundamental mövzulardan biri olan "parçala və hökm et" paradiqması bir çox fərqli problemlərin həllinin dizaynı üçün istifadə oluna bilən ümumi modeldir.

Verilmiş məsələnin həllini müəyyənləşdirdikdən sonra, metodun spesifik tətbiqində döngü (loop - red), rekursiya (recursion - red) və ya backtracking istifadə edə bilərsiniz. Burada metodun detallı olaraq hansı tipli məsələlərin həllində istifadə olunması müzakirə olunur.

Müsahibələrdə bu metodu istifadə edərkən məsələlərin fərqli kontekstdə soruşula biləcəyini nəzərdə tutumağınız önəmlidir. Müxtəlif kontekstlərdə məsələnin hansı metodlarla daha effektiv həll edilməsi müsahibin öhdəliyinə düşür. Müsahibə zamanı verilən məsələnin sadə döngü vasitəsi ilə həlli mümkun olduğu halda, nə üçün mürəkkəb rekursiv funksiya ilə həll etdiyinizi izah edə bilməlisiniz. Müsahib müsahibə zamanı sizdən həmçinin rekursiv yazılmış funksiyanı Memoization metodu ilə optimallaşdırmağınızı və ya Bit Manipulation istifadə edərək bütün mümkün halları (search space) idarə edə biləcək dəyişən (variable - red) istifadə etməyinizi istəyə bilər.

Ümumi olaraq, müsahibəyə hazırlaşan zaman yalnız klassik alqoritmlər deyil, həmçinin daha mürəkkəb, bəzən müəyyən spesifik tipli məsələlərdə istifadə olunan Two Pointers, Sliding Window, Reservoir Sampling, Suffix Array, Rolling Hash, Minimax və digər alqoritmlər və ya verilənlər strukturları ilə tanış olmağınız müsahibədə uğur qazanmağınız üçün faydalı ola bilər.

Randomization

Bəzi verilənlər sturukturları üçün onların randomized formaları klassik formaları qədər keyfiyyət daşımaqla yanaşı, klassik formadan daha sürətli işləyə bilər. Məsələn, Randomized Priority Queue təxminən klassik forması qədər düzgün işləyir (Randomized olduğu üçün bəzən səhv elementləri növbədən çıxarda bilər - red), lakin klassik forması ilə müqayisədə sabit zaman mürəkkəbliyinə icra olunur.

Randomization metodu texniki müsahibələrdə digər fundamental metodlar qədər geniş istifadə olunmasa da müsahibə zamanı istifadə etməklə və ya haqqında danışmaqla hesabınıza əlavə xallar yaza bilərsiniz.

Sistem dizaynı

Sistem dizaynı müsahibələrində namizədlərin qarşısına tanınmış hər hansı bir platformanın (məsələn, Instagram, Uber, Youtube və s.) və ya bu platformanın hər hansı bir komponentinin (məsələn, paylanmış fayl sistemi (distributed file sytem - red), milyonlarla sətir kodu və böyük rəqəmlərdə dəyişiklik edilən sistemin test komponenti və s.) sadə formasını qısa zamanda dizayn etmək problemi qoyulur.

Sistem dizaynı müsahibəsinin forması və strukturu haqqında müsahibə prosesi bölməsində giriş məlumatı verilmişdir. Kitabçanın bu bölməsində sistem dizaynı müsahibəsinin "junior" və "senior" səviyyələrində necə baş verdiyi daha ətraflı təsvir olunur. Əksər şirkətlər bilirlər ki, bu səviyyələrdə olan mühəndislər nadir hallarda böyük miqyaslı layihələrdə təcrübəyə malik olurlar. Bu baxımdan sistem dizaynı müsahibələri daha çox hipotetik xarakter daşıyır. “Upper-senior”, “Principal/Staff” və ya “Partner/Senior Staff” səviyyələrində olan müsahibələrdə tam olaraq namizədin keçmiş təcrübəsi və spesifik hallar müzakirə edilir.

Sistem dizaynı müsahibəsində müsahibin diqqət etdiyi əsas faktor namizədin mürəkkəb sistəmlərin dizaynına hansı prizmadan yanaşacağı və ya hansı gözlənilməz halları öncədən təxmin edə biləcəyini öyrənməkdir. Uğurlu sistem dizaynı müsahibəsi üçün namizədlər həmçinin, müxtəlif texniki ölçü vahidlərini bilməli və qərar vermə zamanı hesablamalar edə bilməlidir. Məsələn, namizədlər verilmiş sualın şərtlərinə əsasən data mərkəzi (data center) daxilində bir maşından digər maşına ortalama şəbəkə gecikmə müddəti (network latency), şeçilmiş məlumatların idarə edilmə sistəmində (database system) əməliyyatlara sərf oluna biləcək zaman, sistemi böyütmək istədikdə (horizontal/vertical scaling) lazım olacaq büdcə və ya texniki çətinliklər və bu kimi digər texniki vahidləri hesablaya bilmək.

Sistem dizaynı müsahibəsi zamanı verilən sualı ümumi müzakirə etdikdən sonra, daha dərin bildiyiniz mövzu ətrafında fokuslana bilərsiniz. Məsələn, şəbəkə üzrə dərin biliklərə sahibsinizsə, o zaman sistemin şəbəkə tərəfdən qarşıya çıxa biləcək problemlərini daha çox müzakirə edə bilərsiniz. Müsahib sistem dizaynı mövzusunun genişliyini anladığı üçün, namizədin bildiyi mövzulara daha çox vaxt ayırmasını anlayışla qəbul edir.

Mövzular

Sistem dizaynı zamanı namizədlər spesifik biliklərdən başqa önəmli fundamental mövzularla da tanış olmalıdırlar. Mövzuların daha detallı siyahısı ilə The System Design Primer-də tanış ola biləriz. Digər faydalı hazırlıq resursu olaraq Grokking the System Design Interview-dan istifadə edə bilərsiniz.

Şəbəkə (Network)

Ən önəmli fundamental sistem dizaynı mövzularından biri kompyuter şəbəkələridir. Namizədlər texniki müsahibəyə hazırlaşan zaman müxtəlif önəmli şəbəkə protokolları haqda lazımi biliklər əldə etməlidir.

Müsahibə zamanı namizədlərdən müştəri-server (client-server) arxitekturasında hansı protokolların istifədə olunduğu, protokolun verdiyi zəmanətlər və digər mövzular soruşula bilər. Kompyuter şəbəkələri kompyuter elmlərinin klassik bölməsi olduğu üçün bu mövzuda çoxlu materiallar, onlayn dərslər və kitablar mövcuddur. Bizim bəyəndiyimiz resurslardan biri Computer Networking: A Top-Down Approach kitabıdır. Kitabda önəmli şəbəkə mövzuları geniş müzakirə olunur. Sizə gərəkli olan mövzuları seçib oxuya bilərsiniz.

Məlumatların saxlanılması (Storage solutions)

Sistem dizaynı müsahibələrində tez-tez müraciət olunan digər mövzu məlumatların saxlanılması və idarə olunmasıdır. Namizədlər ümumi olaraq batch processing, stream processing, hot-cold data, warehouse solutions, müxtəlif transactional zəmanətlər və sair bu kimi mövzularla tanış olmalıdır.

Müsahibədə namizədə məlumatların sürətli saxlanılması və təhlili, sistemdə baş verən hadisələrə uyğun olaraq avtomatik bildirişlərin göndərilməsi və bu kimi başqa tapşırıqlar da verilə bilir.

Sistem dizaynı müsahibələrinə hazırlaşmaq üçün bizim bəyəndiyimiz kitablardan biri Designing Data-Intensive Applications kitabıdır. Kitabda demək olar ki, sistem dizaynı müsahibələrində lazım olacaq əsas praktiki biliklər yer alır.

Paylanmış sistemlər (Distributed systems)

Paylanmış sistemlər özlüyündə kompyuter elmlərinin geniş alt bölmələrindən biridi. Bu mövzu barədə detallı yazmaq bu kitabçanın çərçivəsindən kənara çıxmaq olardı. Paylanmış sistemlərin Replication, sharding, fault-tolerance, load-balancing, consensus, caching və digər konseptləri demək olar ki, bütün mürəkkəb sistemlərin tərkib hissəsidir. Bu səbəbdən, namizədlərin bu mövzularla tanış olması müsahibədə uğur qazanmaqları üçün önəmlidir. Mövzu haqda ətraflı öyrənmək üçün bizim bəyəndiyimiz MIT 6.824: Distributed Systems dərsinə onlayn baxa bilərsiniz.

Ümumi texniki biliklər

Burada spesifik movzular deyil, əksər mühəndislərin gündəlik iş həyatında işlətdikləri texniki həllər, məsələn, client-server arxitekturası üçün gərəkli olan texniki alətlər, 2 servis arasında məlumatların ötürülməsini təmin edəcək məlumat formatları və sair barədə suallar müzakirə edilir.

Əlavə mənbələr

Burada qeyd olunan mənbələrin hamısına baxmağınız vacib deyil. Siyahı əsasən texniki mövzularla daha dərindən tanış olmaq üçün əlavə edilmişdir.

Şirkət bloqları

Akademik məqalələr

Real sistemlər

About

Böyük texnologiya şirkətlərində müsahibə prosesi və hazırlıq.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published