Proqram Mühəndisliyi Müsahibəsini necə Ace - Part 1 (Alqoritmlər və Məlumat Strukturları)

Zəhmli bir CV etdiniz, bir dəstə işə müraciət etdiniz və bir neçə müsahibə verdiniz. Onlar üçün səylə hazırlaşdın və gerçək şeyin vaxtı gəldi. Bəs o müsahibə otağına addım atdıqdan sonra nə etməlisən? Bu yeni 3 hissəli məqalə seriyası, proqram mühəndisliyi görüşmələrinin xahiş etdiyi sualların əsas növlərini qıraraq sizə xəbər verəcəkdir: Alqoritmlər və məlumat quruluşları, davranış sualları və sistem dizaynı. Başlamaq üçün klassik alqoritmlər və məlumat quruluşu probleminə dərin dalışa gedəcəyik.

Müsahiblə əlaqə saxlayın

Düşünürəm ki, bir çox insanın dərk etmədiyi şey, müsahibin sizə kömək etmək üçün orada olmasıdır. Ən yaxşısını ortaya çıxarmaq onların işidir və proqram mühəndisliyi istedadının çatışmazlığını nəzərə alsaq, bunları etmək üçün əlavə stimul var. Buna görə, hər zaman müsahibinizlə bacarıqlarınızı göstərmək və düzgün yola getdiyinizə əmin olmaq üçün çalışmalısınız. Bununla əlaqədar burada nə etməlisiniz:

  1. Problemi aydınlaşdırın - Bəzən problem sizi sınamaq üçün məqsədyönlü deyil. Layihələr çox vaxt real dünyada düz deyil, buna görə tələbləri dəqiqləşdirmək proqram mühəndisləri üçün vacib bacarıqdır. Müsahibəyə suallarınızı çatdırmağınızın dəqiqliyini bilməyincə davam etdirin; problemin əslində düşündüyünüzdən daha asan olması olduqca mümkündür.
  2. Bir plan hazırlayın - Sadəcə kodlaşdırmaya atlama, çünki ümumi yanaşma səhvdirsə, müsahibənin yarısını heç nə etmədən asanlıqla israf edə bilərsiniz. Problemə qarşı yüksək səviyyəli bir strategiya hazırlayın və bu barədə müsahibinizlə danışın. Bu, müsahibinizə nəyin gəldiyini bilmək üçün imkan verir ki, kodu yazmağa başladıqdan sonra izləsinlər və həmçinin etmək istədiyiniz şeyi kristallaşdırmağınıza kömək etsinlər.
  3. Yazdığınız zaman kodunuzla danışın - Başqalarının kodunu oxumaq kifayətdir və müsahib kimi yüksək təzyiq mühitində daha da çətindir. Kodlaşdırarkən tamamilə səssiz qalmaq və ya qışqırmaqla müsahibinizin işini daha da çətinləşdirməyin. Etdiyim şey bir kod yazmaq, müsahibəyə qayıtmaq, izah etmək və bədən dilinə baxmaqdır. Düzgün istiqamətə yönəldiyinizi göstərmək üçün bir nod kimi və ya yalnış istiqamətə yönəldiyinizi göstərmək üçün çaşqın bir görünüş kimi doğru bir istiqamətə getdiyinizə dair bir siqnal verə bilərlər.

Problemin əsas nöqtəsinə diqqət yetirin

Hər məlumat strukturları və alqoritmlər problemi bunun üçün "açar" olur. 2 manata görə, cari nömrəyə nisbətdə fərqləri axtarmaq lazım olduğunu başa düşürsən. K ən böyük nömrələr üçün bir yığın istifadə etməyiniz lazım olduğunu başa düşür. Bu müsahibə problemlərindən hər hansı birində hədəfiniz bu açarı tapmaq və sonra kodlaşdırmaqdır. ArrayList-i Java-dakı Array-a necə çevirdiyiniz kimi detallara batmağa vaxt itirməyin. Bir qədər mənasız kommunal məntiqə ehtiyacınız varsa, müsahibdən soruşun ki, əl uzadın və ya sonra geri qayıda bilərsinizmi? Ayrıca, kodunuzu unudulmayan hala gətirəcək ən gnarliest kənar işlərlə əvvəlcədən məşğul olmayın. Lövhədə əsas axınlar üçün bir şey işlədikdən sonra onlarla məşğul olun.

Mükəmməl olduğundan Yaxşıdır

Bir üst texnologiya şirkəti ilə görüşdüyünüz təqdirdə, alqoritm problemi ilə üzləşməyiniz üçün yaxşı bir şans var ki, optimal həllini tapa bilməyəcəksiniz. Bu ssenaridə bir çox insan tunel görmə qabiliyyətinə sahibdir və vaxtı çatdıqda effektiv heç nə ilə bitmədən, optimal həll yolunu əbədi qazmağa sərf edir. Bu demək olar ki, həmişə uğursuzluq sayılır.

Əvvəldə qeyd etdiyim kimi ilkin planını hazırladığınız zaman əvvəlcə ən sadə həll yolunu təklif edin, bu ümumiyyətlə qəddar güc metodudur. Bu, 1-2 dəqiqədən çox çəkməməlidir və daha optimal bir həll yolu tapmağa çalışaraq başqa 2-3 dəqiqə sərf edin. Bunu edə bilmirsinizsə, sadəcə lövhədə nəsə əldə etmək üçün alt-optimal bir həlli tez bir zamanda həyata keçirəcəyinizi danışan şəxsə danışın. Bu anda məqsədiniz riski minimuma endirmək olmalıdır və bir şeyə sahib olmaq həmişə heç nə olmamaqdan daha yaxşıdır. Bu da mütləq təslim olduğunuz demək deyil. Sub-optimal həll müsahibə vaxtınızın hamısını almamalıdır, buna görə demək olar ki, alt-optimal variantı kodlaşdırdıqdan sonra daha yaxşı həll haqqında düşünmək üçün vaxtınız olacaqdır. Bunun üzərinə, ən optimal həll yolunun sub-optimal həllin səmərəsizliyini həll etdiyini başa düşə bilərsiniz. Nəhayət, iterasiya zəruri və vacib bir proqram mühəndisliyi bacarığıdır. Alt optikdən optimal həyata keçə bilmək, dərhal optimal həll yoluna keçməkdən daha təsirli ola bilər.

Kosmosdakı amil

İş vaxtı hər hansı bir alqoritm problem həllinin təhlilinin mərkəzidir, lakin bir çox insan məkanın da bir amil olduğunu unutdu. Çözümünüzü hazırladığınız zaman etdiyiniz məkan bölgüsünü yadda saxlayın ki, bitdikdən sonra həm vaxt, həm də yer təhlili verə bilərsiniz. Ayrıca, bir çox müsahibiniz, iş vaxtınızın optimal olduğuna tam əmin olsanız da, problemin fərqli bir həlli ilə tanış ola biləcəyinizi soruşacaqdır. Sizdən daha yavaş işləyən, lakin ticarət olaraq kosmosdan istifadədə daha səmərəli bir həll yolunun olması üçün yaxşı bir şans var.

Kodunuzu sınayın

Kodlaşdırma işini qurtardıqdan sonra bəzi nümunə sınaq işlərindən keçirin. Girişi, iş məntiqi ilə necə axdığını və alqoritminizin istədiyiniz nəticəyə necə uyğun gəldiyini təsvir edin. 1-2 xoşbəxt axın hadisəsi kifayət etməlidir və oradan kənar halları əhatə edə bilərsiniz. Burada kənar işlərlə düşündüyünüz bəzi şeylər:

  1. Boş / null giriş
  2. Çox kiçik və ya çox sayda
  3. Məntiqi mümkün olmayan girişlər
  4. Kodunuzu mümkün qədər çətinləşdirən ən pis hal ssenariləri

Nəhayət, yalnız bəzi mücərrəd alqoritmlərin həlli kimi kodunuzu düşünməyin. İstehsal mühitində bir fayda metodu qurduğunuzu iddia edin və həddindən artıq hallarda baş verə biləcəyi ən həssas davranışın nə olduğunu düşünün. Deyək ki, metodunuz int-i qaytarır və pis bir giriş əldə edirsiniz. 0-u qaytarmalısan? -1? Yoxsa sürətli və qəzaya uğursuz? Bu düşüncə tərzini nümayiş etdirməklə, mükəmməl cavabınız olmasa da, sadəcə adi bir rütbə və sənəd hazırlayıcı olmadığınızı göstərir.

Təbrik edirəm, indi növbəti görüşümüzdə bütün alqoritmlərinizi və məlumatların quruluşu suallarını gözdən keçirməyə hazırsınız! Növbəti məqalədə bir çox texniki bacarıqlı proqram mühəndisləri üçün ortaq bir zəif nöqtəni əhatə edəcəyik: Davranış sualları. Əgər bu sizi maraqlandıran bir şeydirsə, mütləq Məni burada Ortaada izləməlisiniz. Növbəti dəfə qədər!