SlideShare a Scribd company logo
1 of 53
Importanța algoritmilor pentru
         problemele de la interviuri
                  Traian Rebedea
            traian.rebedea@cs.pub.ro



11.07.12           ROSEdu Summer Workshops
Cuprins
• Introducere
• Despre interviuri
• Sesiunea practică
      – Probleme pentru interviuri
      – Niveluri de dificultate
      – Rezolvări
• Sfaturi
• Concluzii
11.07.12                ROSEdu Summer Workshops
Despre mine
• Doctorand în prelucrarea limbajului natural (în
  special conversații online), cu experiență bună
  în ML, IR și IA în general
• Organizat laboratoare Analiza Algoritmilor și
  Proiectarea Algoritmilor (de la zero)
      – Cu ajutorul mai multor colegi de-a lungul timpului
        
• Predau cursul de Proiectarea Algoritmilor la
  CA & FILS engleză

11.07.12                ROSEdu Summer Workshops
Utilitatea algoritmilor
• Deși algoritmii sunt folosiți mai mult de către
  dezvoltatorii software, cunoașterea lor este utilă
  în majoritatea domeniilor IT&C
      – Într-o măsură mai mare sau mai mică
• Sunt folosiți și în rețele, telecomunicații,
  proiectare hardware, robotică, automatizări, ...
• Algoritmii ajung să fie stăpâniți bine doar prin
  experiență
      – Algoritmi clasici, probleme clasice
      – Rezolvarea cât mai multor probleme
      – Studiul algoritmilor avansați / specializați

11.07.12                   ROSEdu Summer Workshops
Motivația temei
• Mulți studenți sunt interesați de întrebările
  primite la interviuri
• Majoritatea companiilor de top nu caută
  “programatori Java”, ci dezvoltatori talentați!
• Cunoaşterea algoritmilor...




11.07.12           ROSEdu Summer Workshops
Ce fel de interviuri?
• Dezvoltare software
• Acele companii care nu caută angajați pentru o
  anumită tehnologie, ci pentru anumite calități
      – Gândire logică, algoritmi, rezolvare de probleme,
        testare, validare, concepte fundamentale înțelese
        bine
      – Inclusiv posibilitatea de adaptare la orice tehnologie
• Atât din România, cât şi din afară


11.07.12                  ROSEdu Summer Workshops
Cum se desfășoară?
• La interviurile telefonice: rezolvarea se face
  într-un tool online pentru editare colaborativă
  (collabedit, gdocs, etc.)
• La interviurile F2F (on-site): rezolvarea se face
  pe whiteboard, hârtie, etc.

• Deci nu aveți la dispoziție compilator, IDE
  (auto-complete), documentație API, net, etc.

11.07.12            ROSEdu Summer Workshops
Cum se desfăşoară?
• Depinde de companie, candidat, experiență
  anterioară, poziție, etc.
      – Presupunem că vorbim despre SDE / SDET
      – Însă există mai multe tipuri de SDE
• Ne vom concentra pe SDE, “generalist”, fără prea
  multă experiență ca angajat, firmă ce caută
  oameni deştepți
      – Internship-urile sunt foarte utile (chiar necesare)!
• Independent de tehnologii şi limbaje de
  programare
• Pentru specialişti, interviurile sunt un pic diferite
11.07.12                  ROSEdu Summer Workshops
Interviu telefonic
•    1-2(-3) runde de aproximativ 45 de minute
•    1-2 probleme per rundă
•    Dificultate uşoară-medie
•    De obicei, pentru internship la companiile din afara RO

• Pot fi şi întrebări “comportamentale”
• Aveți timp să puneți întrebări la final
• Nu trebuie să întrebați cum v-ați descurcat la final
      – Însă puteți întreba pe parcurs dacă există (sau vor) o
        soluție mai bună decât cea propusă de voi

11.07.12                    ROSEdu Summer Workshops
Interviu on-site
• 4-5 runde de 45 de minute
• Sunt probleme mai dificile și mai variate
• De obicei, pentru job full-time in afara RO

• 2-3 runde sunt mai orientate către rezolvarea
  de probleme, algoritmi, etc.
• Întrebări “comportamentale”, de proiectare,
  sisteme de operare, etc.
11.07.12           ROSEdu Summer Workshops
Abordare generală
• Puneți întrebări ca să fiți siguri că ați înțeles problema
  ce trebuie sa fie rezolvată
• Căutați rezolvarea de complexitate optimă
• Dacă nu o găsiți într-un timp rezonabil, nu intrați în
  panică şi propuneți o altă rezolvare mai slabă
      – De multe ori, se acceptă soluții mai puțin eficiente
• Fiți clari în explicații şi rezolvare, vorbiți pe măsură ce
  implementați soluția, negociați diverse abordări,
  spuneți dacă aveți mai multe variante
• Testați-vă soluția cu 1-2 exemple, identificați cazuri
  extreme, gândiți-vă la dezavantaje, etc.
• Reparați greşelile făcute
11.07.12                    ROSEdu Summer Workshops
Cum abordezi o problemă?
• Dacă o știi sau este foarte similară cu o altă
  problemă cunoscută
      – Atunci e simplu
• Altfel
      – Determinați probleme similare cu cea de rezolvat
      – Rezolvați probleme din ce în ce mai mari pe baza celor
        de dimensiune mai mică (greedy, PD, bkt)
      – Simplificați, rezolvați şi apoi generalizați din nou
      – Gândiți-vă dacă anumite structuri de date vă
        simplifică rezolvarea (hash, heap, arbori binari, liste,
        vectori,...)
      – Încercați căteva exemple şi generalizați o soluție
11.07.12                  ROSEdu Summer Workshops
Tipuri de probleme
• O varietate destul de mare

•    Structuri de date elementare (vectori, stringuri, liste, etc.)
•    Arbori și grafuri
•    Operații pe biți
•    “Brain teasers”
•    POO
•    Recursivitate
•    Sortări și căutări
•    Probleme matematice
•    Probleme NP-complete (bkt, căutări, etc.)
•    ...


11.07.12                       ROSEdu Summer Workshops
Sesiunea practică
• Am încercat să adun o serie de probleme
  reprezentative
• Am încercat să fie probleme pe niveluri de
  complexitate diferite
      – Teoretic, dificultatea crește cu id-ul problemei
• La un interviu, sunt șanse să primiți 1-2 astfel de
  probleme / sesiune
• Voi veți lucra în echipe să rezolvați problema
      – Alternative de rezolvare, ideea aleasă, pseudocod,
        complexitate (aprox. 10 minute / problemă)
      – Eventual și cod într-un limbaj la alegere, poate rămâne
        temă de casă

11.07.12                    ROSEdu Summer Workshops
Problema 1
• Implementați o căutare a unui element într-un
  vector care a fost sortat, dar și rotit la dreapta
  cu un număr oarecare de poziții.
• Ex: [8, 9, 10, 3, 4, 5, 6, 7]




11.07.12            ROSEdu Summer Workshops
Hint-uri
• Complexitate?
• Probleme similare?




11.07.12         ROSEdu Summer Workshops
Întrebări suplimentare
• Ce se întâmplă dacă aveți elemente duplicate?
• Mai puteți atinge aceeași complexitate?




11.07.12          ROSEdu Summer Workshops
Sursa 1
• http://xorswap.com/questions/77-implement-bina




11.07.12         ROSEdu Summer Workshops
Problema 2
• Având un vector cu numere pozitive,
  determinați cea mai mare sumă ce poate fi
  obținută prin adunarea numerelor aflate în
  poziții non-consecutive.
• Daca se alege numărul v[i], nu aveți voie să
  folosiți v[i-1] sau v[i+1]



11.07.12           ROSEdu Summer Workshops
Hint-uri
• Încercați pe exemple mici
• Complexitate intuită?
• Tehnici clasice?




11.07.12          ROSEdu Summer Workshops
Sursa 2
• http://www.glassdoor.com/Interview/Facebook-In
• http://www.glassdoor.com/Interview/Find-the-ma




11.07.12         ROSEdu Summer Workshops
Problema 3
• Cum ați salva și cauta (cu auto-complete, fără
  corecții automate) peste 1 milion de nume?




11.07.12           ROSEdu Summer Workshops
Hint-uri
• Structuri de date




11.07.12              ROSEdu Summer Workshops
Sursa 3
• http://www.glassdoor.com/Interview/How-would




11.07.12        ROSEdu Summer Workshops
Problema 4
• Determinați 3 elemente dintr-un vector de
  numere întregi a căror suma este 0.




11.07.12          ROSEdu Summer Workshops
Hint-uri
• Soluția banală este evidentă

• Ştiți o problemă similară, eventual mai
  simplă?
• O soluție mai bună ar trebui să fie detectată
  uşor
• Soluția cea mai bună este în O(n2)


11.07.12           ROSEdu Summer Workshops
Sursa 4
• http://www.glassdoor.com/Interview/Given-an-ar




11.07.12         ROSEdu Summer Workshops
Problema 5
• Determinați maximul dintre două numere
  întregi fără a folosi intrucțiunile if-else şi nici
  operatori de comparație.




11.07.12             ROSEdu Summer Workshops
Hint-uri
• Reformulați soluția ca să respecte cerințele




11.07.12           ROSEdu Summer Workshops
Soluție
Rescriem astfel:               a - k * (a - b)

int getMax(int a, int b) {
   int c = a - b;
   int k = (c >> 31) & 0x1;
   int max = a - k * c;
   return max;
}

Există şi alte soluții care folosesc modulo şi împărțire

11.07.12                ROSEdu Summer Workshops
Sursa 5
• Cracking the Coding Interview




11.07.12          ROSEdu Summer Workshops
Problema 6
• Considerând că avem următoarea codificare a
  caracterelor în numere:
     a -> 1, b -> 2, … , z -> 26

• Fiind dat un număr întreg, afișați numărul
  total de traduceri posibile în string-uri
  conform codificării date.
      – Ex: 11223

11.07.12             ROSEdu Summer Workshops
Hint-uri
• Putem considera subprobleme?




11.07.12        ROSEdu Summer Workshops
Întrebări suplimentare
• Pot exista și numere pentru care nu există
  traduceri posibile?

• Cum facem dacă vrem să și afișăm toate
  traducerile posibile?




11.07.12          ROSEdu Summer Workshops
Sursa 6
• http://www.glassdoor.com/Interview/Suppose-we




11.07.12        ROSEdu Summer Workshops
Problema 7
• Având 9 bile, dintre care una cântărește mai
  puțin decât celelalte, și o balanță, cum puteți
  determina care dintre bile este cea mai
  ușoară?




11.07.12           ROSEdu Summer Workshops
Întrebări suplimentare
• Care este complexitatea?

• Generalizați pentru numere mai mari




11.07.12          ROSEdu Summer Workshops
Sursa 7
• http://www.glassdoor.com/Interview/You-have-9-




11.07.12         ROSEdu Summer Workshops
Problema 8
• Determinați numărul de cifre ‘2’ conținute de
  toate numerele între 0 și n.




11.07.12          ROSEdu Summer Workshops
Hint-uri
• Ce complexitate vrem? Mai mică decât?




11.07.12         ROSEdu Summer Workshops
Sursa 8
• Cracking the Coding Interview




11.07.12          ROSEdu Summer Workshops
Problema 9
• Avem un generator de numere aleatoare care
  trimite fiecare valoare nou generată unei
  funcții ce trebuie să mențină mediana tuturor
  numerelor primite până la orice pas.




11.07.12          ROSEdu Summer Workshops
Hint-uri
• Care sunt soluțiile banale?

• Folosiți deștept procesările anterioare
• Structuri de date mai bune?




11.07.12           ROSEdu Summer Workshops
Sursa 9
• Cracking the Coding Interview




11.07.12          ROSEdu Summer Workshops
Problema 10
• Determinați cele mai mari 1 milion de numere
  dintr-un vector cu un miliard de numere.




11.07.12          ROSEdu Summer Workshops
Întrebări suplimentare
• Puteți păstra tot vectorul în memorie?




11.07.12          ROSEdu Summer Workshops
Hint-uri
• Soluția banală?

• Se poate mai bine!
• Structuri de date
• Probleme similare, algoritmi mai buni?
      – Selection rank?



11.07.12                  ROSEdu Summer Workshops
Sursa 10
• Cracking the Coding Interview




11.07.12          ROSEdu Summer Workshops
Sfaturi
• Este esențial să vă antrenați
      – TopCoder (Arena), Infoarena
      – Dar și cu pixul pe hârtie, cu limite de timp și probleme
        similare
• Sunt importante și întrebările comportamentale
• Nu puteți memora algoritmi sau soluții
      – Trebuie să le înțelegeți corectitudinea
• Nu vă grăbiți, nu vorbiți foarte mult/puțin
• Experiența la interviuri nu poate fi decât utilă,
  chiar dacă primul răspuns nu este pozitiv

11.07.12                  ROSEdu Summer Workshops
Considerații finale
• Contează şi alte amănunte
      – Recomandări ale altor angajați
      – Răspunsurile la întrebările “comportamentale”
• Intrebari de CS in general: structuri de date,
  sisteme de operare, (mai rar logică, statistică și
  sunt bonus)
• Motivația voastră, proiectele personale, ...
• Este foarte important să și codați pe tablă
  soluțiile corect și eficient într-un limbaj la alegere
11.07.12                 ROSEdu Summer Workshops
Concluzii
• Întrebările de la interviuri conțin multe elemente de
  algoritmi
      – În special pentru un SDE(T) internship la companiile mari

• Întrebările nu sunt foarte dificile
• Necesită o înțelegerea foarte bună a algoritmilor de bază,
  dar și experiență
• Exersați pe hârtie sau pe Topcoder Arena direct, pentru a
  nu folosi un IDE, compilator, etc.
• Nu subestimați emoțiile
• Nu subestimați întrebările comportamentale: evitați
  aroganța, individualismul, etc.

11.07.12                     ROSEdu Summer Workshops
În final
• Avem din ce în ce mai multe firme mari în
  țară, care lucrează la proiecte interesante

• Sunt din ce în ce mai mulți români (inclusiv
  absolvenți de A&C) care lucrează în
  străinătate
      – Discutați cu ei pentru sfaturi și recomandări
• Nu trebuie să fi fost olimpic, deși acest lucru
  este evident un atu
• Vă pot îndruma înspre ei sau spre recruiteri
11.07.12                 ROSEdu Summer Workshops
Link-uri
• Carte: Cracking the Coding Interview
      – http://www.careercup.com/book

• Site-uri
      – http://www.careercup.com/
      – http://infoarena.ro/missing-numbers

• Blog-uri
      – http://infoarena.ro/blog/sfaturi-pentru-interviuri
      – http://stiinte.ub.ro/admitere/53-c-anunturi-generale/282-google-zuri
      – http://www.kmkz.ro/de-pe-teren/reportaje/cum-am-ajuns-la-interviu



11.07.12                    ROSEdu Summer Workshops

More Related Content

What's hot

Develop and optimize CV/DL applications with Intel OpenVINO toolkit
Develop and optimize CV/DL applications with Intel OpenVINO toolkitDevelop and optimize CV/DL applications with Intel OpenVINO toolkit
Develop and optimize CV/DL applications with Intel OpenVINO toolkitYury Gorbachev
 
High Performance Computing: an Introduction for the Society of Actuaries
High Performance Computing: an Introduction for the Society of ActuariesHigh Performance Computing: an Introduction for the Society of Actuaries
High Performance Computing: an Introduction for the Society of ActuariesAdam DeConinck
 
Introduction to Parallel Computing
Introduction to Parallel ComputingIntroduction to Parallel Computing
Introduction to Parallel ComputingAkhila Prabhakaran
 
Sisteme de Operare: Introducere
Sisteme de Operare: IntroducereSisteme de Operare: Introducere
Sisteme de Operare: IntroducereAlexandru Radovici
 
Reinforcement learning.pptx
Reinforcement learning.pptxReinforcement learning.pptx
Reinforcement learning.pptxaniketgupta16440
 
Practical Malware Analysis: Ch 6: Recognizing C Code Constructs in Assembly
Practical Malware Analysis: Ch 6: Recognizing C Code Constructs in AssemblyPractical Malware Analysis: Ch 6: Recognizing C Code Constructs in Assembly
Practical Malware Analysis: Ch 6: Recognizing C Code Constructs in AssemblySam Bowne
 
Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...
Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...
Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...Preferred Networks
 
High Performance Computing Presentation
High Performance Computing PresentationHigh Performance Computing Presentation
High Performance Computing Presentationomar altayyan
 
[PR12] categorical reparameterization with gumbel softmax
[PR12] categorical reparameterization with gumbel softmax[PR12] categorical reparameterization with gumbel softmax
[PR12] categorical reparameterization with gumbel softmaxJaeJun Yoo
 
OS Process and Thread Concepts
OS Process and Thread ConceptsOS Process and Thread Concepts
OS Process and Thread Conceptssgpraju
 
How to Win Machine Learning Competitions ?
How to Win Machine Learning Competitions ? How to Win Machine Learning Competitions ?
How to Win Machine Learning Competitions ? HackerEarth
 
Learning to Learn by Gradient Descent by Gradient Descent
Learning to Learn by Gradient Descent by Gradient DescentLearning to Learn by Gradient Descent by Gradient Descent
Learning to Learn by Gradient Descent by Gradient DescentKaty Lee
 
Agility Matrix Explained
Agility Matrix ExplainedAgility Matrix Explained
Agility Matrix ExplainedClayton Costa
 
Sisteme de Operare: Sistemul de Intrare si Iesire
Sisteme de Operare: Sistemul de Intrare si IesireSisteme de Operare: Sistemul de Intrare si Iesire
Sisteme de Operare: Sistemul de Intrare si IesireAlexandru Radovici
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure javaRoman Elizarov
 
Support Vector Machine without tears
Support Vector Machine without tearsSupport Vector Machine without tears
Support Vector Machine without tearsAnkit Sharma
 

What's hot (20)

Develop and optimize CV/DL applications with Intel OpenVINO toolkit
Develop and optimize CV/DL applications with Intel OpenVINO toolkitDevelop and optimize CV/DL applications with Intel OpenVINO toolkit
Develop and optimize CV/DL applications with Intel OpenVINO toolkit
 
High Performance Computing: an Introduction for the Society of Actuaries
High Performance Computing: an Introduction for the Society of ActuariesHigh Performance Computing: an Introduction for the Society of Actuaries
High Performance Computing: an Introduction for the Society of Actuaries
 
Introduction to Parallel Computing
Introduction to Parallel ComputingIntroduction to Parallel Computing
Introduction to Parallel Computing
 
Sisteme de Operare: Introducere
Sisteme de Operare: IntroducereSisteme de Operare: Introducere
Sisteme de Operare: Introducere
 
Reinforcement learning.pptx
Reinforcement learning.pptxReinforcement learning.pptx
Reinforcement learning.pptx
 
Practical Malware Analysis: Ch 6: Recognizing C Code Constructs in Assembly
Practical Malware Analysis: Ch 6: Recognizing C Code Constructs in AssemblyPractical Malware Analysis: Ch 6: Recognizing C Code Constructs in Assembly
Practical Malware Analysis: Ch 6: Recognizing C Code Constructs in Assembly
 
Uc14 chap02
Uc14 chap02Uc14 chap02
Uc14 chap02
 
Flaw Finder
Flaw FinderFlaw Finder
Flaw Finder
 
Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...
Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...
Introduction to Graph Neural Networks: Basics and Applications - Katsuhiko Is...
 
High Performance Computing Presentation
High Performance Computing PresentationHigh Performance Computing Presentation
High Performance Computing Presentation
 
[PR12] categorical reparameterization with gumbel softmax
[PR12] categorical reparameterization with gumbel softmax[PR12] categorical reparameterization with gumbel softmax
[PR12] categorical reparameterization with gumbel softmax
 
Scale-out ccNUMA - Eurosys'18
Scale-out ccNUMA - Eurosys'18Scale-out ccNUMA - Eurosys'18
Scale-out ccNUMA - Eurosys'18
 
OS Process and Thread Concepts
OS Process and Thread ConceptsOS Process and Thread Concepts
OS Process and Thread Concepts
 
How to Win Machine Learning Competitions ?
How to Win Machine Learning Competitions ? How to Win Machine Learning Competitions ?
How to Win Machine Learning Competitions ?
 
Learning to Learn by Gradient Descent by Gradient Descent
Learning to Learn by Gradient Descent by Gradient DescentLearning to Learn by Gradient Descent by Gradient Descent
Learning to Learn by Gradient Descent by Gradient Descent
 
Agility Matrix Explained
Agility Matrix ExplainedAgility Matrix Explained
Agility Matrix Explained
 
Sisteme de Operare: Sistemul de Intrare si Iesire
Sisteme de Operare: Sistemul de Intrare si IesireSisteme de Operare: Sistemul de Intrare si Iesire
Sisteme de Operare: Sistemul de Intrare si Iesire
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure java
 
CatBoost intro
CatBoost   introCatBoost   intro
CatBoost intro
 
Support Vector Machine without tears
Support Vector Machine without tearsSupport Vector Machine without tears
Support Vector Machine without tears
 

Viewers also liked

Opinion mining for social media and news items in Romanian
Opinion mining for social media and news items in RomanianOpinion mining for social media and news items in Romanian
Opinion mining for social media and news items in RomanianTraian Rebedea
 
smart ms voip for lte networks
smart ms voip for lte networkssmart ms voip for lte networks
smart ms voip for lte networksStreamWIDE
 
Intro to Deep Learning for Question Answering
Intro to Deep Learning for Question AnsweringIntro to Deep Learning for Question Answering
Intro to Deep Learning for Question AnsweringTraian Rebedea
 
Software Services in Romania – Academia and Industry
Software Services in Romania – Academia and IndustrySoftware Services in Romania – Academia and Industry
Software Services in Romania – Academia and IndustryTraian Rebedea
 
Automatic plagiarism detection system for specialized corpora
Automatic plagiarism detection system for specialized corporaAutomatic plagiarism detection system for specialized corpora
Automatic plagiarism detection system for specialized corporaTraian Rebedea
 
Algorithm Design and Complexity - Course 1&2
Algorithm Design and Complexity - Course 1&2Algorithm Design and Complexity - Course 1&2
Algorithm Design and Complexity - Course 1&2Traian Rebedea
 

Viewers also liked (6)

Opinion mining for social media and news items in Romanian
Opinion mining for social media and news items in RomanianOpinion mining for social media and news items in Romanian
Opinion mining for social media and news items in Romanian
 
smart ms voip for lte networks
smart ms voip for lte networkssmart ms voip for lte networks
smart ms voip for lte networks
 
Intro to Deep Learning for Question Answering
Intro to Deep Learning for Question AnsweringIntro to Deep Learning for Question Answering
Intro to Deep Learning for Question Answering
 
Software Services in Romania – Academia and Industry
Software Services in Romania – Academia and IndustrySoftware Services in Romania – Academia and Industry
Software Services in Romania – Academia and Industry
 
Automatic plagiarism detection system for specialized corpora
Automatic plagiarism detection system for specialized corporaAutomatic plagiarism detection system for specialized corpora
Automatic plagiarism detection system for specialized corpora
 
Algorithm Design and Complexity - Course 1&2
Algorithm Design and Complexity - Course 1&2Algorithm Design and Complexity - Course 1&2
Algorithm Design and Complexity - Course 1&2
 

More from Traian Rebedea

An Evolution of Deep Learning Models for AI2 Reasoning Challenge
An Evolution of Deep Learning Models for AI2 Reasoning ChallengeAn Evolution of Deep Learning Models for AI2 Reasoning Challenge
An Evolution of Deep Learning Models for AI2 Reasoning ChallengeTraian Rebedea
 
AI @ Wholi - Bucharest.AI Meetup #5
AI @ Wholi - Bucharest.AI Meetup #5AI @ Wholi - Bucharest.AI Meetup #5
AI @ Wholi - Bucharest.AI Meetup #5Traian Rebedea
 
Deep neural networks for matching online social networking profiles
Deep neural networks for matching online social networking profilesDeep neural networks for matching online social networking profiles
Deep neural networks for matching online social networking profilesTraian Rebedea
 
How useful are semantic links for the detection of implicit references in csc...
How useful are semantic links for the detection of implicit references in csc...How useful are semantic links for the detection of implicit references in csc...
How useful are semantic links for the detection of implicit references in csc...Traian Rebedea
 
A focused crawler for romanian words discovery
A focused crawler for romanian words discoveryA focused crawler for romanian words discovery
A focused crawler for romanian words discoveryTraian Rebedea
 
Detecting and Describing Historical Periods in a Large Corpora
Detecting and Describing Historical Periods in a Large CorporaDetecting and Describing Historical Periods in a Large Corpora
Detecting and Describing Historical Periods in a Large CorporaTraian Rebedea
 
Practical machine learning - Part 1
Practical machine learning - Part 1Practical machine learning - Part 1
Practical machine learning - Part 1Traian Rebedea
 
Propunere de dezvoltare a carierei universitare
Propunere de dezvoltare a carierei universitarePropunere de dezvoltare a carierei universitare
Propunere de dezvoltare a carierei universitareTraian Rebedea
 
Relevance based ranking of video comments on YouTube
Relevance based ranking of video comments on YouTubeRelevance based ranking of video comments on YouTube
Relevance based ranking of video comments on YouTubeTraian Rebedea
 
PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...
PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...
PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...Traian Rebedea
 
Web services for supporting the interactions of learners in the social web - ...
Web services for supporting the interactions of learners in the social web - ...Web services for supporting the interactions of learners in the social web - ...
Web services for supporting the interactions of learners in the social web - ...Traian Rebedea
 
Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...
Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...
Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...Traian Rebedea
 
Conclusions and Recommendations of the Romanian ICT RTD Survey
Conclusions and Recommendations of the Romanian ICT RTD SurveyConclusions and Recommendations of the Romanian ICT RTD Survey
Conclusions and Recommendations of the Romanian ICT RTD SurveyTraian Rebedea
 
Istoria Web-ului - part 2 - tentativ How to Web 2009
Istoria Web-ului - part 2 - tentativ How to Web 2009Istoria Web-ului - part 2 - tentativ How to Web 2009
Istoria Web-ului - part 2 - tentativ How to Web 2009Traian Rebedea
 
Istoria Web-ului - part 1 (2) - tentativ How to Web 2009
Istoria Web-ului - part 1 (2) - tentativ How to Web 2009Istoria Web-ului - part 1 (2) - tentativ How to Web 2009
Istoria Web-ului - part 1 (2) - tentativ How to Web 2009Traian Rebedea
 
Istoria Web-ului - part 1 - tentativ How to Web 2009
Istoria Web-ului - part 1 - tentativ How to Web 2009Istoria Web-ului - part 1 - tentativ How to Web 2009
Istoria Web-ului - part 1 - tentativ How to Web 2009Traian Rebedea
 
Algorithm Design and Complexity - Course 12
Algorithm Design and Complexity - Course 12Algorithm Design and Complexity - Course 12
Algorithm Design and Complexity - Course 12Traian Rebedea
 
Algorithm Design and Complexity - Course 11
Algorithm Design and Complexity - Course 11Algorithm Design and Complexity - Course 11
Algorithm Design and Complexity - Course 11Traian Rebedea
 
Algorithm Design and Complexity - Course 10
Algorithm Design and Complexity - Course 10Algorithm Design and Complexity - Course 10
Algorithm Design and Complexity - Course 10Traian Rebedea
 

More from Traian Rebedea (20)

An Evolution of Deep Learning Models for AI2 Reasoning Challenge
An Evolution of Deep Learning Models for AI2 Reasoning ChallengeAn Evolution of Deep Learning Models for AI2 Reasoning Challenge
An Evolution of Deep Learning Models for AI2 Reasoning Challenge
 
AI @ Wholi - Bucharest.AI Meetup #5
AI @ Wholi - Bucharest.AI Meetup #5AI @ Wholi - Bucharest.AI Meetup #5
AI @ Wholi - Bucharest.AI Meetup #5
 
Deep neural networks for matching online social networking profiles
Deep neural networks for matching online social networking profilesDeep neural networks for matching online social networking profiles
Deep neural networks for matching online social networking profiles
 
What is word2vec?
What is word2vec?What is word2vec?
What is word2vec?
 
How useful are semantic links for the detection of implicit references in csc...
How useful are semantic links for the detection of implicit references in csc...How useful are semantic links for the detection of implicit references in csc...
How useful are semantic links for the detection of implicit references in csc...
 
A focused crawler for romanian words discovery
A focused crawler for romanian words discoveryA focused crawler for romanian words discovery
A focused crawler for romanian words discovery
 
Detecting and Describing Historical Periods in a Large Corpora
Detecting and Describing Historical Periods in a Large CorporaDetecting and Describing Historical Periods in a Large Corpora
Detecting and Describing Historical Periods in a Large Corpora
 
Practical machine learning - Part 1
Practical machine learning - Part 1Practical machine learning - Part 1
Practical machine learning - Part 1
 
Propunere de dezvoltare a carierei universitare
Propunere de dezvoltare a carierei universitarePropunere de dezvoltare a carierei universitare
Propunere de dezvoltare a carierei universitare
 
Relevance based ranking of video comments on YouTube
Relevance based ranking of video comments on YouTubeRelevance based ranking of video comments on YouTube
Relevance based ranking of video comments on YouTube
 
PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...
PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...
PhD Defense: Computer-Based Support and Feedback for Collaborative Chat Conve...
 
Web services for supporting the interactions of learners in the social web - ...
Web services for supporting the interactions of learners in the social web - ...Web services for supporting the interactions of learners in the social web - ...
Web services for supporting the interactions of learners in the social web - ...
 
Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...
Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...
Automatic assessment of collaborative chat conversations with PolyCAFe - EC-T...
 
Conclusions and Recommendations of the Romanian ICT RTD Survey
Conclusions and Recommendations of the Romanian ICT RTD SurveyConclusions and Recommendations of the Romanian ICT RTD Survey
Conclusions and Recommendations of the Romanian ICT RTD Survey
 
Istoria Web-ului - part 2 - tentativ How to Web 2009
Istoria Web-ului - part 2 - tentativ How to Web 2009Istoria Web-ului - part 2 - tentativ How to Web 2009
Istoria Web-ului - part 2 - tentativ How to Web 2009
 
Istoria Web-ului - part 1 (2) - tentativ How to Web 2009
Istoria Web-ului - part 1 (2) - tentativ How to Web 2009Istoria Web-ului - part 1 (2) - tentativ How to Web 2009
Istoria Web-ului - part 1 (2) - tentativ How to Web 2009
 
Istoria Web-ului - part 1 - tentativ How to Web 2009
Istoria Web-ului - part 1 - tentativ How to Web 2009Istoria Web-ului - part 1 - tentativ How to Web 2009
Istoria Web-ului - part 1 - tentativ How to Web 2009
 
Algorithm Design and Complexity - Course 12
Algorithm Design and Complexity - Course 12Algorithm Design and Complexity - Course 12
Algorithm Design and Complexity - Course 12
 
Algorithm Design and Complexity - Course 11
Algorithm Design and Complexity - Course 11Algorithm Design and Complexity - Course 11
Algorithm Design and Complexity - Course 11
 
Algorithm Design and Complexity - Course 10
Algorithm Design and Complexity - Course 10Algorithm Design and Complexity - Course 10
Algorithm Design and Complexity - Course 10
 

Importanța algoritmilor pentru problemele de la interviuri

  • 1. Importanța algoritmilor pentru problemele de la interviuri Traian Rebedea traian.rebedea@cs.pub.ro 11.07.12 ROSEdu Summer Workshops
  • 2. Cuprins • Introducere • Despre interviuri • Sesiunea practică – Probleme pentru interviuri – Niveluri de dificultate – Rezolvări • Sfaturi • Concluzii 11.07.12 ROSEdu Summer Workshops
  • 3. Despre mine • Doctorand în prelucrarea limbajului natural (în special conversații online), cu experiență bună în ML, IR și IA în general • Organizat laboratoare Analiza Algoritmilor și Proiectarea Algoritmilor (de la zero) – Cu ajutorul mai multor colegi de-a lungul timpului  • Predau cursul de Proiectarea Algoritmilor la CA & FILS engleză 11.07.12 ROSEdu Summer Workshops
  • 4. Utilitatea algoritmilor • Deși algoritmii sunt folosiți mai mult de către dezvoltatorii software, cunoașterea lor este utilă în majoritatea domeniilor IT&C – Într-o măsură mai mare sau mai mică • Sunt folosiți și în rețele, telecomunicații, proiectare hardware, robotică, automatizări, ... • Algoritmii ajung să fie stăpâniți bine doar prin experiență – Algoritmi clasici, probleme clasice – Rezolvarea cât mai multor probleme – Studiul algoritmilor avansați / specializați 11.07.12 ROSEdu Summer Workshops
  • 5. Motivația temei • Mulți studenți sunt interesați de întrebările primite la interviuri • Majoritatea companiilor de top nu caută “programatori Java”, ci dezvoltatori talentați! • Cunoaşterea algoritmilor... 11.07.12 ROSEdu Summer Workshops
  • 6. Ce fel de interviuri? • Dezvoltare software • Acele companii care nu caută angajați pentru o anumită tehnologie, ci pentru anumite calități – Gândire logică, algoritmi, rezolvare de probleme, testare, validare, concepte fundamentale înțelese bine – Inclusiv posibilitatea de adaptare la orice tehnologie • Atât din România, cât şi din afară 11.07.12 ROSEdu Summer Workshops
  • 7. Cum se desfășoară? • La interviurile telefonice: rezolvarea se face într-un tool online pentru editare colaborativă (collabedit, gdocs, etc.) • La interviurile F2F (on-site): rezolvarea se face pe whiteboard, hârtie, etc. • Deci nu aveți la dispoziție compilator, IDE (auto-complete), documentație API, net, etc. 11.07.12 ROSEdu Summer Workshops
  • 8. Cum se desfăşoară? • Depinde de companie, candidat, experiență anterioară, poziție, etc. – Presupunem că vorbim despre SDE / SDET – Însă există mai multe tipuri de SDE • Ne vom concentra pe SDE, “generalist”, fără prea multă experiență ca angajat, firmă ce caută oameni deştepți – Internship-urile sunt foarte utile (chiar necesare)! • Independent de tehnologii şi limbaje de programare • Pentru specialişti, interviurile sunt un pic diferite 11.07.12 ROSEdu Summer Workshops
  • 9. Interviu telefonic • 1-2(-3) runde de aproximativ 45 de minute • 1-2 probleme per rundă • Dificultate uşoară-medie • De obicei, pentru internship la companiile din afara RO • Pot fi şi întrebări “comportamentale” • Aveți timp să puneți întrebări la final • Nu trebuie să întrebați cum v-ați descurcat la final – Însă puteți întreba pe parcurs dacă există (sau vor) o soluție mai bună decât cea propusă de voi 11.07.12 ROSEdu Summer Workshops
  • 10. Interviu on-site • 4-5 runde de 45 de minute • Sunt probleme mai dificile și mai variate • De obicei, pentru job full-time in afara RO • 2-3 runde sunt mai orientate către rezolvarea de probleme, algoritmi, etc. • Întrebări “comportamentale”, de proiectare, sisteme de operare, etc. 11.07.12 ROSEdu Summer Workshops
  • 11. Abordare generală • Puneți întrebări ca să fiți siguri că ați înțeles problema ce trebuie sa fie rezolvată • Căutați rezolvarea de complexitate optimă • Dacă nu o găsiți într-un timp rezonabil, nu intrați în panică şi propuneți o altă rezolvare mai slabă – De multe ori, se acceptă soluții mai puțin eficiente • Fiți clari în explicații şi rezolvare, vorbiți pe măsură ce implementați soluția, negociați diverse abordări, spuneți dacă aveți mai multe variante • Testați-vă soluția cu 1-2 exemple, identificați cazuri extreme, gândiți-vă la dezavantaje, etc. • Reparați greşelile făcute 11.07.12 ROSEdu Summer Workshops
  • 12. Cum abordezi o problemă? • Dacă o știi sau este foarte similară cu o altă problemă cunoscută – Atunci e simplu • Altfel – Determinați probleme similare cu cea de rezolvat – Rezolvați probleme din ce în ce mai mari pe baza celor de dimensiune mai mică (greedy, PD, bkt) – Simplificați, rezolvați şi apoi generalizați din nou – Gândiți-vă dacă anumite structuri de date vă simplifică rezolvarea (hash, heap, arbori binari, liste, vectori,...) – Încercați căteva exemple şi generalizați o soluție 11.07.12 ROSEdu Summer Workshops
  • 13. Tipuri de probleme • O varietate destul de mare • Structuri de date elementare (vectori, stringuri, liste, etc.) • Arbori și grafuri • Operații pe biți • “Brain teasers” • POO • Recursivitate • Sortări și căutări • Probleme matematice • Probleme NP-complete (bkt, căutări, etc.) • ... 11.07.12 ROSEdu Summer Workshops
  • 14. Sesiunea practică • Am încercat să adun o serie de probleme reprezentative • Am încercat să fie probleme pe niveluri de complexitate diferite – Teoretic, dificultatea crește cu id-ul problemei • La un interviu, sunt șanse să primiți 1-2 astfel de probleme / sesiune • Voi veți lucra în echipe să rezolvați problema – Alternative de rezolvare, ideea aleasă, pseudocod, complexitate (aprox. 10 minute / problemă) – Eventual și cod într-un limbaj la alegere, poate rămâne temă de casă 11.07.12 ROSEdu Summer Workshops
  • 15. Problema 1 • Implementați o căutare a unui element într-un vector care a fost sortat, dar și rotit la dreapta cu un număr oarecare de poziții. • Ex: [8, 9, 10, 3, 4, 5, 6, 7] 11.07.12 ROSEdu Summer Workshops
  • 16. Hint-uri • Complexitate? • Probleme similare? 11.07.12 ROSEdu Summer Workshops
  • 17. Întrebări suplimentare • Ce se întâmplă dacă aveți elemente duplicate? • Mai puteți atinge aceeași complexitate? 11.07.12 ROSEdu Summer Workshops
  • 19. Problema 2 • Având un vector cu numere pozitive, determinați cea mai mare sumă ce poate fi obținută prin adunarea numerelor aflate în poziții non-consecutive. • Daca se alege numărul v[i], nu aveți voie să folosiți v[i-1] sau v[i+1] 11.07.12 ROSEdu Summer Workshops
  • 20. Hint-uri • Încercați pe exemple mici • Complexitate intuită? • Tehnici clasice? 11.07.12 ROSEdu Summer Workshops
  • 21. Sursa 2 • http://www.glassdoor.com/Interview/Facebook-In • http://www.glassdoor.com/Interview/Find-the-ma 11.07.12 ROSEdu Summer Workshops
  • 22. Problema 3 • Cum ați salva și cauta (cu auto-complete, fără corecții automate) peste 1 milion de nume? 11.07.12 ROSEdu Summer Workshops
  • 23. Hint-uri • Structuri de date 11.07.12 ROSEdu Summer Workshops
  • 25. Problema 4 • Determinați 3 elemente dintr-un vector de numere întregi a căror suma este 0. 11.07.12 ROSEdu Summer Workshops
  • 26. Hint-uri • Soluția banală este evidentă • Ştiți o problemă similară, eventual mai simplă? • O soluție mai bună ar trebui să fie detectată uşor • Soluția cea mai bună este în O(n2) 11.07.12 ROSEdu Summer Workshops
  • 28. Problema 5 • Determinați maximul dintre două numere întregi fără a folosi intrucțiunile if-else şi nici operatori de comparație. 11.07.12 ROSEdu Summer Workshops
  • 29. Hint-uri • Reformulați soluția ca să respecte cerințele 11.07.12 ROSEdu Summer Workshops
  • 30. Soluție Rescriem astfel: a - k * (a - b) int getMax(int a, int b) { int c = a - b; int k = (c >> 31) & 0x1; int max = a - k * c; return max; } Există şi alte soluții care folosesc modulo şi împărțire 11.07.12 ROSEdu Summer Workshops
  • 31. Sursa 5 • Cracking the Coding Interview 11.07.12 ROSEdu Summer Workshops
  • 32. Problema 6 • Considerând că avem următoarea codificare a caracterelor în numere: a -> 1, b -> 2, … , z -> 26 • Fiind dat un număr întreg, afișați numărul total de traduceri posibile în string-uri conform codificării date. – Ex: 11223 11.07.12 ROSEdu Summer Workshops
  • 33. Hint-uri • Putem considera subprobleme? 11.07.12 ROSEdu Summer Workshops
  • 34. Întrebări suplimentare • Pot exista și numere pentru care nu există traduceri posibile? • Cum facem dacă vrem să și afișăm toate traducerile posibile? 11.07.12 ROSEdu Summer Workshops
  • 36. Problema 7 • Având 9 bile, dintre care una cântărește mai puțin decât celelalte, și o balanță, cum puteți determina care dintre bile este cea mai ușoară? 11.07.12 ROSEdu Summer Workshops
  • 37. Întrebări suplimentare • Care este complexitatea? • Generalizați pentru numere mai mari 11.07.12 ROSEdu Summer Workshops
  • 39. Problema 8 • Determinați numărul de cifre ‘2’ conținute de toate numerele între 0 și n. 11.07.12 ROSEdu Summer Workshops
  • 40. Hint-uri • Ce complexitate vrem? Mai mică decât? 11.07.12 ROSEdu Summer Workshops
  • 41. Sursa 8 • Cracking the Coding Interview 11.07.12 ROSEdu Summer Workshops
  • 42. Problema 9 • Avem un generator de numere aleatoare care trimite fiecare valoare nou generată unei funcții ce trebuie să mențină mediana tuturor numerelor primite până la orice pas. 11.07.12 ROSEdu Summer Workshops
  • 43. Hint-uri • Care sunt soluțiile banale? • Folosiți deștept procesările anterioare • Structuri de date mai bune? 11.07.12 ROSEdu Summer Workshops
  • 44. Sursa 9 • Cracking the Coding Interview 11.07.12 ROSEdu Summer Workshops
  • 45. Problema 10 • Determinați cele mai mari 1 milion de numere dintr-un vector cu un miliard de numere. 11.07.12 ROSEdu Summer Workshops
  • 46. Întrebări suplimentare • Puteți păstra tot vectorul în memorie? 11.07.12 ROSEdu Summer Workshops
  • 47. Hint-uri • Soluția banală? • Se poate mai bine! • Structuri de date • Probleme similare, algoritmi mai buni? – Selection rank? 11.07.12 ROSEdu Summer Workshops
  • 48. Sursa 10 • Cracking the Coding Interview 11.07.12 ROSEdu Summer Workshops
  • 49. Sfaturi • Este esențial să vă antrenați – TopCoder (Arena), Infoarena – Dar și cu pixul pe hârtie, cu limite de timp și probleme similare • Sunt importante și întrebările comportamentale • Nu puteți memora algoritmi sau soluții – Trebuie să le înțelegeți corectitudinea • Nu vă grăbiți, nu vorbiți foarte mult/puțin • Experiența la interviuri nu poate fi decât utilă, chiar dacă primul răspuns nu este pozitiv 11.07.12 ROSEdu Summer Workshops
  • 50. Considerații finale • Contează şi alte amănunte – Recomandări ale altor angajați – Răspunsurile la întrebările “comportamentale” • Intrebari de CS in general: structuri de date, sisteme de operare, (mai rar logică, statistică și sunt bonus) • Motivația voastră, proiectele personale, ... • Este foarte important să și codați pe tablă soluțiile corect și eficient într-un limbaj la alegere 11.07.12 ROSEdu Summer Workshops
  • 51. Concluzii • Întrebările de la interviuri conțin multe elemente de algoritmi – În special pentru un SDE(T) internship la companiile mari • Întrebările nu sunt foarte dificile • Necesită o înțelegerea foarte bună a algoritmilor de bază, dar și experiență • Exersați pe hârtie sau pe Topcoder Arena direct, pentru a nu folosi un IDE, compilator, etc. • Nu subestimați emoțiile • Nu subestimați întrebările comportamentale: evitați aroganța, individualismul, etc. 11.07.12 ROSEdu Summer Workshops
  • 52. În final • Avem din ce în ce mai multe firme mari în țară, care lucrează la proiecte interesante • Sunt din ce în ce mai mulți români (inclusiv absolvenți de A&C) care lucrează în străinătate – Discutați cu ei pentru sfaturi și recomandări • Nu trebuie să fi fost olimpic, deși acest lucru este evident un atu • Vă pot îndruma înspre ei sau spre recruiteri 11.07.12 ROSEdu Summer Workshops
  • 53. Link-uri • Carte: Cracking the Coding Interview – http://www.careercup.com/book • Site-uri – http://www.careercup.com/ – http://infoarena.ro/missing-numbers • Blog-uri – http://infoarena.ro/blog/sfaturi-pentru-interviuri – http://stiinte.ub.ro/admitere/53-c-anunturi-generale/282-google-zuri – http://www.kmkz.ro/de-pe-teren/reportaje/cum-am-ajuns-la-interviu 11.07.12 ROSEdu Summer Workshops