Skip to content

Microsoft Interview Questions

29 April 2008

Am ales titlul ca să fie search engine friendly🙂 Nu vreau să vorbesc doar despre întrebări de la interviu, vreau, după cum am promis, să explic cum se poate ajunge la un interviu şi ce trebuie ştiut acolo.

Cum ajungi să dai interviu la Microsoft? Păi nu e foarte greu. Adică nu trebuie pile, PhD sau alte chestii. Fiind o firmă în expansiune continuă, cam tot timpul este nevoie de oameni. Cred că e de ajuns să depuneți un CV la http://www.microsoft.com/careers/, indiferent dacă pentru internship sau full-time şi veți fi contactați. Şi, dacă sunteți studenți, nu fiți intimidați de faptul că CV-ul vostru nu are 10 pagini, tocmai de acea există internship-uri, poziții entry-level şi altele. Dacă sunteți anul 2-3 la facultate, nici nu se aşteaptă de la voi să fi lucrat în n firme pe n poziții. Din câte ştiu eu, de contactat contactează majoritatea oamenilor care par interesați. Aici este primul pas – un phone screening. Un interviu live presupune deplasarea într-o locație din zonă (eu am dat interviuri în Bucureşti şi în Varşovia) unde vine şi o echipă din SUA sau de unde se fac angajări pentru a susține interviurile. Microsoft asigură transportul par-avion, cazarea şi masa. Phone-screening-ul îi convinge că merită să cheltuiască banii aferenți pentru aplicant. Acest interviu este mai mult unul de HR (Human Resources), nu tehnic – detalii mai jos. Odată trecut screening-ul, urmează interviul on-site. Interviul de angajare se dă cu 4, 5 sau 6 persoane, pe rând, aproximativ 45 de minute cu fiecare şi pauze de 15 minute între interviuri. Interviul penru internship se dă doar cu 3 persoane. La ambele, unul din interviuri se dă cu o persoană de la HR.

Interviul cu o persoană de la HR, după cum ziceam, nu presupune întrebări tehnice deoarece angajaţii de la Human Resources nu sunt persoane tehnice. Aici se pun câteva întrebări de genul dacă eşti dispus să te muţi, din ce dată ai putea începe etc. Adică date de care ei au nevoie, şi câteva întrebări din care să afle ceva despre personalitatea ta, de exemplu care este ultima tehnologie învăţată pe cont propriu, când ai învăţat-o, care este proiectul realizat de care eşti cel mai mândru etc. Pentru un om pasionat, aceste întrebări nu ar trebui să pună o problemă – trebuie doar să dai dovadă de entuziasm, să vorbeşti cu plăcere despre ce ai făcut şi ce ştii.

Interviurile tehnice decurg puţin altfel. Am să generalizez deşi, în funcţie de poziţia pentru care aplici, unul sau două din interviuri poate să difere puţin de ce voi prezenta. În primul rând se dă o problemă de algoritmică. Exemple de probleme ce le-am primit (scuze dacă nu o să dau enunţul “ca la carte”):

Se dă un vector sortat cu n numere. Să se elimine copiile numerele (adică pentru numerele care apar de mai multe ori – să rămână fiecare o singură dată).

Se dă un vector cu n numere, a1, a2… an. Elementele pot forma sume astfel: un element distinct (a[i]), câte două elemente alăturate (a[i] + a[i+1]), câte trei (a[i] + a[i+1] + a[i+2]) şamd. până la suma tuturor elementelor (a[1] + a[2] +…+ a[n]). Să se determine suma maximă ce poate fi obţinută astfel.

Se dau două noduri într-un arbore binar. Să se determine primul lor părintele comun (de jos în sus, desigur). Nodurile din arbore au legături atât spre copii cât şi spre părinţi.

Căutarea binară a unui element într-un vector sortat.

Adăugarea unui nod într-un arbore binar de căutare.

Aici e foarte important feedback-ul. Oamenii cu care dai interviu vor să vadă cum gândeşti astfel încât, cum ai primit enunţul, e bine să gândeşti cu voce tare posibile soluţii, nu să iei foaia şi să amuţeşti 15 minute. Nu e nici o problemă dacă soluţia gândită nu e cea mai bună, sau dacă te blochezi, pentru că te ajută cu întrebări de genul “Dar dacă x atunci cum ar fi?”. E foarte important să vadă şi cum abordezi problema.

Apoi urmează implementarea, adică să scrii codul soluţiei. Asta se face pe hârtie într-un limbaj la alegere (C, C# etc.). Nu se depunctează dacă ai uitat să pui ; sau să închizi ghilimele. Odată scris codul, te întreabă ce complexitate are – de obicei soluţiile nu ar trebui să aibă mai mult de O(n). Analiza algoritmului cerută nu e complexă fiindcă e dată pe probleme ce au soluţii relativ simple. Trebuie ştiut doar ce înseamnă big O notation şi care sunt complexităţile la parcurgerea unui arbore binar de căutare şi la un for de la 1 la n.

După asta ţi se cere să înşiri test-cases pentru problemă. Aici atenţie pentru că test-cases sunt destul de multe. Pentru cine nu are experienţă cu testarea formală (de exemplu la mine la facultate nici vorbă de vreun curs despre testare), cade în capcana de a crede că testarea unui program înseamnă butonarea lui până la apariţia unei eventuale erori. Complet eronat. Aici trebuie ştiut ce înseamnă unit testing, performance testing, boundary value testing, security testing, usability testing şi altele (dacă nu aţi mai auzit nu vă speriaţi că nu e foarte complicat, puteţi începe să citiţi de aici). Ca să dau un exemplu, înşir câteva test-cases pentru problema cu adăugarea nodului în arborele binar de căutare:

1. Un arbore “gol” (unde root e null)

2. Un arbore cu un singur nod

3. Un arbore invalid (unde, de exemplu, un nod are copil un nod superior)

4. Un arbore cu 1.000.000 de noduri

5. Introducerea unui nod care nu are valoare numerică

6. Introducerea unui nod cu valoarea numerică egală cu un nod frunză

7. Introducerea unui nod cu valoarea numerică egală cu nodul rădăcină

etc.

Idea e să vii pe moment cu cât mai multe astfel de teste. Şi, neapărat, să pui întrebări – dacă vorbim de performanţă, pe ce maşină rulează, dacă vorbim de numere, ce numere (naturale, întregi, reale)?

Dacă problema pusă este simplă, se poate să mai primeşti o a doua problemă sau o întrebare strict de testing, de exemplu:

Avem un program care adună două numere (primeşte input două numere şi întoarce suma). Spune test-cases.

Cam aşa decurge un interviu tehnic. Mai există şi excepţii – de exemplu cum ai proiecta un lift? Întrebare de design pe care o rezolvi la tablă, dar cel puţin 2-3 din interviurile tehnice, dacă nu toate, decurg cum am spus mai sus.

Cam ce trebuie ştiut când te prezinţi la interviu: structuri de date (liste, cozi, stive, arbori), algoritmi de bază (parcurgerea listelor, parcurgerea arborilor binari etc.), analiza algoritmilor (după cum am spus mai sus, nu toată teoria, doar să ai habar), testare. Din experienţa personală pot spune că s-a renunţat la puzzle-questions – nu pot garanta pentru toţi, depinde de norocul fiecăruia – dar oricum mai bine ştii ce complexitate are quicksort decât cum împart piraţii banii😉

Nu trebuie să te prezinţi la costum, nu se ţine cont de asta. Interviurile se dau în limba engleză şi durează, cu pauze cu tot, în jur de 5-6 ore.

Baftă!

From → code complete

11 Comments
  1. iti multumesc eu pt. informatii. pare mai usor decat ma asteptam, la prima vedere, cu toate ca n-am facut informatica, ci doar profilul mate-info la liceu.
    probabil lumea n-a mai scris nici un raspuns ca s-au pus toti cu burta pe carte cand au aflat care-i treaba cu interviul🙂

  2. porav iulian permalink

    si la ce-mi trebuie algoritmica si atata testare intradevar pentru inteligenta matematica a pesoanei,daca eu de ex. fac aplicatii ERP,CRM,si altele care se aplica pe piata reala?
    daca esti pe post de proiectant soft,sistem de operare,aplicatii container care folosesc alte aplicatii cum e cazul lor,da e nevoie de matematicieni,informaticieni,care sa stea toata ziua cu nasu in algoritmi si sa face testing de unit,si bunit,si cunit,si lulit,mumit,ca sa nu ne dea atatea patch-uri si fix-uri si update-uri la aplicatiile lor.si pe deasupra in loc sa-mi rezolve erorile sin Visual Studio 2003,iti baga pe gat Visual Studio 2005,si cand oamenii incep sa trimita erorile de acolo,apare Team Suite,si alte bull-shit-uri.
    totul e comercial,si momindu-te cu faima,si banii,strici creieru acolo,si nu ai viata sociala,decat in firma.

  3. porav iulian permalink

    o fi captivant cand esti de pe bancile scolii,cu multa pasiune,dar cand incep dead-line-uri si stresu,dispare pasiunea,si doar munca asidua pentru managerul x,care e tocat de directorul Y,atunci nu prea mai iti vine sa dai atatea teste,si incet vine si familia,si atunci ori faci munca de placere,si inovezi din proprie initiativa,sau motivat de firma,ori devii patron,sau devii liber-profesionist,in niciun caz,master-mind in the big microsoft!orice imperiu decade.

  4. vladr permalink

    În primul rând, indiferent de ce aplicație “folosită în lumea reală” dezvolți, dacă nu ai cunoștințe de bază de structuri de data și algoritmi, nu faci treabă bună. Crede-mă. Să traversezi un arbore e o chestie de bun simț și nu poți să te consideri programator fără să știi asta. Problemele nu sunt super-complexe, sunt făcute să poți arăta că ai niște cunoștiințe de bază și că știi cum să abordezi o problemă.

    Despre deadlines și stree ce să spun? Este câteodată. Dar sunt extrem de mulțumit de locul de muncă. Pentru că este un mediu plin de oameni competenți și eforturile sunt apreciate. Aici probabil că depinde de la persoană la persoană. Eu nu aș pute să devin patron sau liber profesionist pentru că nu vreau să-mi bat capul cu partea financiară. Prefer să îmi văd de software și să fiu plătit.

  5. helifax permalink

    Salut! Am aplicat si eu dar pe pozitia de testing.. O sa am interviul in cateva zile. Presupun ca este vorba de aceiasi pasi enumarati mai sus chit ca sunt Tester nu? Ma refer la partea cu intrebarile legate de programare. Eu in ultimii 2 ani am lucrat ca system tester nu ca software tester…

  6. vladr permalink

    Da, interviul ar trebui să fie foarte asemănător.

  7. helifax permalink

    Multumesc mult pentru raspuns.

  8. Lucian permalink

    Buna si scuze de deranj…
    Ai cumva cum decurge la MS interviul de limba franceza? Am interviu la ei si se incepe cu cel de limba franceza…Eu lucrez in domeniul IT, dar am emotii ca sunt “bazat” pe engleza.

  9. vladr permalink

    Nope, n-am idee😦

  10. Lucian permalink

    Am revenit. Am fost chemat sa dau interviu cu cineva pe probleme tehnice? Idei ? Cum decurge acest interviu? Etc.etc

  11. Lucian permalink

    Multumesc pentru orice sfat.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: