20 Punkte von xguru 2020-07-17 | 3 Kommentare | Auf WhatsApp teilen

Oft heißt es, dass Algorithmusfragen aus Vorstellungsgesprächen in der Praxis nicht verwendet werden,

doch der Autor hat zusammengestellt, was er bei der Arbeit bei Skype/Uber usw. tatsächlich häufig genutzt hat, zusammen mit Beispielen und Empfehlungen für grundlegende Lektüre.

Graphen und Graphensuche: Skype & Uber

Gewichtete Graphen und kürzeste Wege: SkyScanner

Sortierung: Skype

Hash-Tabellen und Hashing: überall

Stacks und Queues: gelegentlich

Kryptografie (Crypto), Wahrscheinlichkeitstheorie und Vermutungen, Hexagonal Grid und hierarchische Indizes: Uber

  • Über Algorithmen und Datenstrukturen in Vorstellungsgesprächen

Es ist nicht wichtig, populäre Algorithmen oder ausgefallene Datenstrukturen zu kennen.

Man sollte wissen, was ein Algorithmus ist, und einfache Algorithmen wie Greedy-Algorithmen selbst herleiten können.

Grundlegende Datenstrukturen wie Hash-Tabellen, Queues & Stacks sollte man kennen, aber spezielle Algorithmen wie Dijkstra oder A* muss man nicht auswendig lernen.

Der Großteil meiner Arbeit mit Algorithmen, die über Sortierung hinausgehen, bestand darin, Dinge nachzuschlagen und mich darum zu bemühen, sie zu verstehen.

Das gilt genauso für ausgefallene Datenstrukturen wie Red-Black- oder AVL-Bäume.

Tatsächlich musste ich solche Datenstrukturen nie verwenden, und selbst wenn es nötig wäre, würde ich sie erneut recherchieren und mich einarbeiten.

Im Silicon Valley wird es immer üblicher, Fragen zu dynamischer Programmierung oder ausgefallenen Datenstrukturen zu stellen.

Solche Fragen helfen vielleicht dabei, hervorragende Engineers einzustellen, verhindern aber auch, dass man Menschen einstellt, die ihre Arbeit sehr gut machen, obwohl dafür in der Praxis kein fortgeschrittenes Wissen über Algorithmen nötig ist.

Wirklich nötig sind ein Bewusstsein für die gebräuchlichsten Datenstrukturen und die Fähigkeit, den einfachsten Algorithmus als Werkzeug zur Lösung eines Problems einzusetzen.

Datenstrukturen und Algorithmen sind nur ein Toolset.

Es sind Werkzeuge, die man in der Softwareentwicklung souverän einsetzen können sollte.

Wenn man diese Werkzeuge gut kennt, wird man sich daran gewöhnen, Code zu lesen, der sie verwendet.

Außerdem gewinnt man mehr Selbstvertrauen bei der Implementierung von Lösungen für schwierige Probleme.

Um die Grundlagen zu lernen, empfehle ich Folgendes. (Links in den Kommentaren)

  • GeekforGeeks: Data Structures Overview (Online-Artikelsammlung)

  • HackerRank: DataStructure Collection (Lernen durch Aufgabenlösen)

  • Grokking Algorithms: Algorithmen visuell verstehen (deutsche Übersetzung verfügbar)

  • The Algorithm Design Manual und Algorithms: Fourth Edition sind zu trocken und für den täglichen Praxiseinsatz nicht besonders geeignet.

3 Kommentare

 
xguru 2020-07-17
  • Data Structures Overview von GeekforGeeks

https://geeksforgeeks.org/overview-of-data-structures-set-1-linear-dat…

  • DataStructure Collection von HackerRank

https://www.hackerrank.com/domains/data-structures

  • Grokking Algorithms : Algorithmenkonzepte mit Illustrationen verstehen

Englisch: https://www.amazon.com/gp/product/1617292230/?tag=amzneu-20

Koreanische Ausgabe (Hanbit Media): https://www.hanbit.co.kr/store/books/look.php?p_code=B5896248244

The Algorithm Design Manual https://www.amazon.com/gp/product/1848000693?tag=amzneu-20

Algorithms : 4th Edition https://www.amazon.com/gp/product/032157351X/?tag=amzneu-20

 
xguru 2020-07-17

Die Anekdote am Anfang des Artikels, dass der Homebrew-Entwickler Max Howell im Google-Interview durchfiel, weil er das Invertieren eines Binärbaums nicht ans Whiteboard schreiben konnte, ist ziemlich bekannt.

Die Ironie dabei: Tatsächlich nutzen 90 % der Google-Entwickler Homebrew, aber ausgerechnet der Entwickler selbst fiel durch ..

 
lazinism 2020-07-19

Diese 90 % sind eine Zahl, die sich ein Homebrew-Entwickler ausgedacht hat, und soweit ich mich erinnere, hat in dem Tweet ein Google-Entwickler geantwortet, dass es auf keinen Fall 90 % seien..

Bei Google ist es ohnehin so, dass Desktops Ubuntu sind und Laptops Shell-Maschinen, also gibt es dafür ohnehin nicht wirklich einen Anwendungsfall.