Softwareentwicklungs-Themen
Auf welche technischen Themen sollten Sie vorbereitet sein?
Bevor Sie sich eingehend mit den technischen Themen befassen, zu denen Sie während Ihres Vorstellungsgesprächs befragt werden können, sollten Sie sich mit Ihrem Ansprechpartner in der Personalabteilung in Verbindung setzen, um mehr über die Themen/Fähigkeiten zu erfahren, die Sie wahrscheinlich diskutieren und vorführen werden. In der Regel verlangen wir in unseren technischen Vorstellungsgesprächen, dass Sie Whiteboard-Übungen für das Programmieren und das Systemdesign durchführen. Vergessen Sie nicht, dass Erfindungsgeist Teil unserer DNS und Technologie das grundlegende Werkzeug ist, mit dem wir jeden Aspekt der Kundenerfahrung bei Amazon weiterentwickeln und verbessern. Beim Durchdenken der folgenden Themen sollten Sie immer zuallererst an den Kunden denken.
Technische Themen
Programmiersprache
Die Kenntnis irgendeiner spezifischen Programmiersprache ist keine Voraussetzung für ein Vorstellungsgespräch für eine technische Position. Vertrautheit mit einer bekannten Programmiersprache ist jedoch in der Regel eine Voraussetzung für ein erfolgreiches Vorstellungsgespräch. Sie sollten mit der Syntax von Sprachen wie Java, Python, C#, C/C++ oder Ruby vertraut sein. Sie sollten auch einige Besonderheiten der Sprachen kennen, wie z. B. die Funktionsweise der Speicherverwaltung oder die am häufigsten verwendeten Sammlungen, Bibliotheken, etc.
Datenstrukturen
Der Großteil unserer Arbeit besteht in der effizienten Speicherung und Bereitstellung von Daten. Dies erfordert eine gute Expertise im Bereich Datenstrukturen. Sie müssen die innere Funktionsweise von bekannten Datenstrukturen verstehen und in der Lage sein, ihre Verwendung in verschiedenen Anwendungen zu vergleichen und einander gegenüberzustellen. Es wird erwartet, dass Sie die Laufzeit allgemeiner Vorgänge sowie ihre Speichernutzung kennen.
Algorithmen
Das bloße Auswendiglernen von Algorithmen ist für Ihr Vorstellungsgespräch nicht sinnvoll. Ein gutes Verständnis der gängigsten Algorithmen macht die Lösung einiger Aufgaben wahrscheinlich jedoch sehr viel einfacher. Es ist empfehlenswert, Ihre Kenntnis über gängige Algorithmen, wie Traversierungen, das Teile-und-herrsche-Verfahren, Breitensuche im Vergleich zu Tiefensuche, aufzufrischen und ihre Kompromisse zu verstehen. Es ist wichtiger, die Laufzeiten, die theoretischen Grenzen und die grundlegenden Implementierungsstrategien verschiedener Klassen von Algorithmen zu kennen, als die spezifischen Details eines gegebenen Algorithmus auswendig zu wissen.
Programmierung
Es wird erwartet, dass Sie syntaktisch korrekten Code schreiben können - und keinen Pseudocode. Wenn Sie schon länger nicht mehr ohne integrierte Entwicklungsumgebung oder in einer bestimmten Sprache Code geschrieben haben, ist es eine gute Idee, Ihre Kenntnisse aufzufrischen und das Coden mit Stift und Papier zu üben. Die wichtigste Aufgabe eines Software-Entwicklungsingenieurs bei Amazon ist das Schreiben von skalierbarem, robustem und gut getestetem Code. Dies sind die wichtigsten Bewertungskriterien für Ihren Code. Achten Sie darauf, nach Grenzfällen zu suchen und zu überprüfen, dass keine unzulässigen Eingaben möglich sind. Hier haben Sie die Chance, uns mit Ihren Programmierfähigkeiten zu beeindrucken.
Objektorientiertes Design
Ein gutes Design ist für erweiterbaren, fehlerfreien und langlebigen Code von größter Bedeutung. Wir wissen, dass es für jedes beliebige Softwareproblem fast unzählige Lösungsansätze gibt. Aber wenn Software erweiterbar und wartbar sein soll, ist gutes Software-Design entscheidend für den Erfolg. Eine Möglichkeit, langlebige Software zu erstellen, ist die Verwendung der besten Verfahren objektorientierten Designs. Sie sollten über ausreichend praktische Kenntnisse zu einigen gängigen und nützlichen Entwurfsmustern verfügen und wissen, wie man Software auf objektorientierte Weise konzipiert. Sie müssen zwar sehr wahrscheinlich nicht die Funktionsweise spezifischer Entwurfsmuster detailliert beschreiben können; Sie sollten aber in der Lage sein, Ihre Entscheidung für ein bestimmtes Design zu rechtfertigen.
Datenbanken
Der Großteil der von uns geschriebenen Software ist auf einen Datenspeicher gestützt. Viele der Herausforderungen, mit denen sich Personen, die in der Tech-Branche tätig sind, konfrontiert sehen, stehen in Verbindung mit der Frage, wie man Daten für den zukünftigen Gebrauch am effektivsten speichern und wiederfinden kann. Amazon ist seit jeher ein Pionier im Bereich nicht-relationaler Datenbanken. Wir haben Amazon Web Services wie DynamoDB der Entwickler-Community zugänglich gemacht, damit diese leicht die Vorteile nicht-relationaler Datenbanken nutzen kann. Wir erwarten zwar kein spezifisches Wissen über nicht-relationale Datenbanken, Sie sollten jedoch mit Konzepten zu umfassenden Datenbanken und deren Anwendungen vertraut sein. Je mehr Sie über die Austauschbeziehung zwischen relationalen und nicht-relationalen Datenbanken wissen, umso besser sind Sie vorbereitet.
Distributed Computing
Amazon-Systeme müssen große Datenmengen unter Einhaltung sehr strikter Toleranzgrenzen verarbeiten. Wir verfügen zwar über einige interne Anwendungen, die uns bei der Skalierung unterstützen, ein gewisses Grundverständnis der Basiskonzepte des Distributed Computing ist dennoch enorm wichtig. Ein Verständnis von Themengebieten wie serviceorientierter Architektur, MapReduce, verteilter Cache, Lastausgleich, etc. hilft Ihnen dabei, Antworten auf die etwas komplizierteren Fragen zur verteilten Architektur zu finden.
Betriebssysteme
Sie müssen nicht in der Lage sein, Ihr eigenes Betriebssystem von Grund auf aufzubauen, sollten aber mit einigen verwandten Themen vertraut sein, die sich auf die Funktionalität von Codes auswirken können (z. B. Speichermanagement, Prozesse, Threading, Synchronisation, Paging und Multithreading).
Internet-Themen
Wir erwarten von unseren Ingenieuren, dass sie mit den Grundlagen des Internets vertraut sind. Frischen Sie Ihr Wissen über Hochleistungs-Browser-Funktionalität, DNS-Suchen und TCP/IP bis hin zu Steckverbindungen auf. Ein solides Grundlagenverständnis darüber, wie das World Wide Web funktioniert, wird vorausgesetzt.
Allgemeines Machine Learning und künstliche Intelligenz
Sie sollten mit Fragen zu Themen wie datenbasierter Modellierung, Trainings-/Test-Protokollen, Fehleranalyse und statistischer Relevanz rechnen. Wird Ihnen zum Beispiel ein Problemfall präsentiert, sollten Sie in der Lage sein, diesen als Machine-Learning-Problem zu formulieren und eine entsprechende Lösung zu präsentieren, die Ideen für Datenquellen, Annotation und Modellierungsansätze sowie potentielle Fallstricke umfasst. Machen Sie sich mit den grundlegenden Methoden und Algorithmen zu künstlicher Intelligenz bzw. Machine Learning vertraut - werfen Sie dafür einfach mal wieder einen Blick in Ihre Lieblings-Fachbücher zu diesen Themen.
Wir wissen, dass dies eine relativ lange Liste an Themen ist, die es nachzulesen gilt. Denken Sie daran, dass Ihre Gesprächspartner nicht Ihre Fähigkeit bewerten werden, sich alle Einzelheiten zu diesen Themen einprägen zu können. Sie werden vielmehr bewerten, ob Sie Ihr Wissen effizient und effektiv zur Lösung von Problemen einsetzen können. Für eine effiziente Vorbereitung auf ein technisches Vorstellungsgespräch empfehlen wir Ihnen, sich erneut mit den Grundlagen der Informatik vertraut zu machen und das Programmieren außerhalb einer integrierten Entwicklungsumgebung zu üben. So nutzen Sie Ihre Vorbereitungszeit am sinnvollsten.