So landen Sie Ihren Traumjob in Embedded-Software

Es gibt viele Anleitungen zur Vorbereitung von Software-Interviews. Interviews mit eingebetteter Software sind sich einigermaßen ähnlich, aber es ist immer noch ein anderes Spiel, das Sie spielen müssen.

Es gibt einige hilfreiche Materialien im Internet und einige Inhalte für die Vorbereitung von Software-Interviews werden übertragen. Im Allgemeinen konnte ich jedoch keinen umfassenden Leitfaden finden, mit dem ich anfangen konnte.

Die Anwerbung und Vorbereitung von Vorstellungsgesprächen für eingebettete Software in den letzten 4 Monaten hat mir viel darüber beigebracht, wie ich mit dem Prozess umgehen soll. Ich habe kürzlich Angebote von einigen großen Technologieunternehmen erhalten. In diesem Beitrag teile ich einige Erkenntnisse, die ich dabei gewonnen habe.

Ich werde diesen Beitrag in ein paar Abschnitte unterteilen. Es gibt bereits Unmengen an Inhalten, die sich für die Einstellung von Mitarbeitern eignen. Daher werde ich hier nicht näher darauf eingehen, wie man Interviews erhält.

  • Inhalt zur Vorbereitung und Überprüfung
  • Das Interview selbst!

Eine Sprache auswählen

Standardmäßig wird die Entwicklung eingebetteter Software hauptsächlich in C durchgeführt, obwohl C ++ in letzter Zeit immer beliebter wird. Wenn Sie an Kursen zu Computerarchitektur oder eingebetteten Systemen teilgenommen haben, haben Sie wahrscheinlich den einen oder anderen verwendet. Stellen Sie sicher, dass Sie wissen, welche Sprache das Unternehmen, mit dem Sie ein Interview führen, verwendet. Wenn Sie mit C ++ besser vertraut sind, aber C verwenden, sollten Sie sich im Klaren darüber sein. Wenn Sie eines kennen, können Sie relativ einfach zwischen den beiden wechseln.

Seitdem ich mit C ++ bestens vertraut bin, haben mir Unternehmen erlaubt, Code in C ++ zu schreiben. Falls nötig, haben sie mir dabei geholfen, diesen Code auf C umzustellen. Im Großen und Ganzen macht es keinen wirklichen Unterschied. Dies gilt nur, wenn Sie mit bestimmten Funktionen und Containern der C ++ - Standardbibliothek arbeiten.

Verilog wird hauptsächlich für die FPGA-Entwicklung verwendet. Python wird häufig zur Kommunikation zwischen dem Benutzer und dem eingebetteten System verwendet, an dem er gerade arbeitet. Wahrscheinlich werden Ihnen dazu keine Fragen gestellt.

Gleiches gilt für die Assemblersprache (zum Glück !! ).

Die Grundlagen sind die Grundlagen

Ich begann die Reise auf ähnliche Weise wie die meisten Informatikstudenten - indem ich meine Datenstrukturen und Algorithmen überprüfte. Aber bald wurde mir klar, dass sich Inhalte für eingebettete Software an einem bestimmten Punkt abspalten. Es konzentriert sich viel mehr auf Computerarchitektur, Betriebssysteme und einige Hardwaregrundlagen als auf Datenstrukturen höherer Ebenen wie Bäume oder Sortieralgorithmen.

Sie beschäftigen sich mit Code und Hardware auf niedrigerer Ebene in eingebetteten Softwarerollen. Aus programmtechnischer Sicht sind Ihre Datenstrukturen und Algorithmen jedoch immer noch von hoher Relevanz. Ähnlich wie bei Software-Interviews gibt es unzählige Ressourcen, mit denen Sie sich auf die Grundlagen vorbereiten können! Es war ein guter Ausgangspunkt, einige Probleme aus jedem Abschnitt in Cracking the Coding Interview zu lösen.

Kurz danach habe ich LeetCode vorgezogen, da ich sofort ausführen und testen konnte. LeetCode ist eine unglaubliche Plattform mit einer großartigen Community. Hat meiner Meinung nach Fragen, die denen in Interviews am ähnlichsten sind. Es speichert alle eingereichten Lösungen und berechnet auch die Laufzeiten. Mache die meisten der "einfachen" und einen anständigen Teil der "mittleren" Fragen und du solltest in Ordnung sein :)

Darüber hinaus ist Geeks For Geeks eine großartige Ressource mit sehr ausführlichen Erklärungen für Hunderte von Problemen.

Übertragung von Software-Interviews

Die folgenden Themen sind den Konzepten von Software-Interviews sehr ähnlich. Sie werden intensiv getestet. Vergewissern Sie sich also, dass Sie sie gut kennen.

  • Algorithmische Komplexität (sowohl Zeit als auch Speicher)
  • Zeiger
  • Arrays
  • Verknüpfte Listen
  • Saiten (und C-Saiten)
  • Stapel & Warteschlangen

Die folgenden Themen sind nicht wirklich getestet, aber Sie sollten sie konzeptionell kennen. Wissen, wie sie funktionieren, wie komplex sie sind und wie sie auf einer grundlegenden Ebene gelöst werden können.

  • Rekursion
  • Bäume
  • Haufen
  • Hashing
  • Sortierung

Jenseits der Software

Hier fängt das echte Embedded-Zeug an!

Bit-Manipulation !!

Kennen Sie das wie Ihre Westentasche.

Es ist möglicherweise das wichtigste Thema Ihrer Interviews. Führen Sie zu diesem speziellen Thema alle Fragen zu LeetCode aus.

  • Wissen, wie negative Zahlen binär dargestellt werden
  • Kennen Sie die Unterschiede zwischen Eins- und Zweierkomplementen
  • Sie können zwischen binär, dezimal und hexadezimal konvertieren
  • Die XOR-Operation ist leistungsstark. Wissen, was es alles kann.

Hier ist eine großartige Ressource, die ich für hilfreiche Tipps und Tricks verwendet habe

Rechnerarchitektur

Eine knappe Sekunde für die Bit-Manipulation.

Wahrscheinlich werden Sie nicht gebeten, diese zu implementieren, aber Sie werden definitiv gefragt, wie die Dinge unter der Motorhaube funktionieren. Einige Themen, über die Sie sich informieren sollten, sind:

  • Wichtige Register und wie sie funktionieren
  • Unterschied zwischen Anrufer- und Angerufenen-Speichern
  • Wie funktionieren Interrupts?
  • Ein grundlegendes Verständnis von Anweisungspipelines
  • Caches, TLBs und die Implementierung des virtuellen Speichers
  • Verschiedene Arten von Speicher (ROM vs RAM, DDR, EEPROM, Flash usw.)
  • Speicherauffüllung (Anweisungen und Klassen)
  • Was passiert, wenn Sie ein System booten?

Betriebssysteme

Je nach Unternehmen und Rolle können Betriebssysteme ein sehr wichtiges Thema sein. Sie werden nicht gebeten, eine dieser Methoden zu implementieren, aber Sie müssen wissen, wie die Dinge auf konzeptioneller Ebene funktionieren.

  • Prozess vs. Thread
  • So funktioniert Multithreading
  • Echtzeitbetriebssysteme vs. traditionelles Betriebssystem
  • Aufgabenplanung (FIFO, Round Robin, prioritätsbasiert)
  • Wie Semaphoren und Mutexe Daten schützen
  • Prioritätsinversion, Prioritätsvererbung, Spinlocks und Deadlocks
  • Was macht eine Funktion „wiedereintrittsfähig“?
  • Kritische Abschnitte
  • Prioritätsstufen in Mikrocontrollern (EL0 - EL3)

Kommunikationsprotokolle

Kennen Sie die Vorteile und Nachteile der Verwendung der folgenden Protokolle:

  • UART
  • SPI
  • I2C

Aufgrund Ihrer bisherigen Erfahrungen, der Position, für die Sie sich bewerben, und des Unternehmens werden Sie möglicherweise auch nach anderen Personen gefragt. In der Regel erwarten Unternehmen nicht, dass Sie diese spezifischen Protokolle kennen, und schulen Sie vor Ort. Aber ein grundlegendes Verständnis kann immer helfen, den Interviewer zu begeistern!

  • Automotive: CAN, LIN
  • Kabellos: 3G, 4G LTE, Grundlagen von 5G, 802.11 (Wifi), Bluetooth
  • Netzwerk: HTTP, TCP / UDP, IP, 802.11 (Wifi), Ethernet

Hardware-Grundlagen

Die Hardware wurde nicht häufig für eingebettete Software getestet, aber je nach Rolle kann Ihr Interaktionsgrad variieren. Überprüfen Sie die Stellenbeschreibungen und sprechen Sie mit Menschen, die dort arbeiten, um eine bessere Idee zu bekommen!

  • Watchdog-Timer
  • Timer im Allgemeinen
  • Details zu Peripheriegeräten, die Sie möglicherweise in Ihren Projekten verwendet haben (Beschleunigungsmesser, Sensoren, LiDAR, Motoren usw.)

Üben

Übung ist der Schlüssel - daran führt wirklich kein Weg vorbei. Stellen Sie sicher, dass Sie mindestens 2 Stunden pro Tag für die Vorbereitung von Vorstellungsgesprächen aufwenden. Bewerben Sie sich nicht um eine Stelle und wenden Sie sich an Personalvermittler.

Kommentieren Sie Ihren Code, während Sie mit LeetCode üben. Erklären Sie Ihren Algorithmus und die Komplexität der Laufzeit. Überprüfen Sie jeden Tag, bevor Sie mit dem Codieren beginnen, die Probleme, an denen Sie am Vortag gearbeitet haben. Überprüfen Sie am Ende der Woche jedes Problem, an dem Sie in dieser Woche gearbeitet haben. Auf diese Weise können Sie sich besser an die Algorithmen erinnern und nach und nach zum Profi beim Pattern Matching werden.

Eingebettete Interviews sind aufgrund der Art einiger der getesteten Themen in der Regel konzeptioneller als typische Software-Interviews. Für diese Bereiche habe ich ein Google-Dokument mit allen Fragen gepflegt, die mir gestellt werden könnten, aber auch mit allen Antworten. Ich habe auch einen Link hinzugefügt, über den ich weitere Informationen lesen kann, um hilfreich zu sein. Es half mir, organisiert zu bleiben und schneller zu überprüfen.

Viele Leute haben mich nach dem Link zum Google-Dokument gefragt. Hier ist es also: Embedded Interview Questions

Beim Interview

Du hast es geschafft - tolle Arbeit!

Tief durchatmen. Es ist Zeit, all Ihre harte Arbeit sinnvoll einzusetzen. Normalerweise werden Sie und der Interviewer einige konzeptionelle Fragen durchgehen. Sie diskutieren auch Ihre bisherigen Erfahrungen und Projekte. Stellen Sie sicher, dass Sie Fragen zu Ihren Beiträgen und den verschiedenen Herausforderungen, denen Sie sich im Detail gestellt haben, beantworten können.

Wenn es sich um ein ferngesteuertes Interview handelt, werden Sie wahrscheinlich aufgefordert, einen Code in einem freigegebenen Dokument einzugeben. Halten Sie Papier bereit, um wichtige Punkte und Diagramme aufzuschreiben. Wenn es hilft, können Sie auch einige Notizen haben, auf die Sie sich während des Interviews beziehen können. Ich halte immer ein Blatt mit grundlegenden algorithmischen Komplexitäten bereit.

Überprüfen Sie die Zeitzonen. Überprüfe sie noch einmal. Vergessen Sie nicht, Kopfhörer zu verwenden. Seien Sie in einer ruhigen Umgebung, damit es nicht zu Störungen kommt. Kommunikationsprobleme werden das Interview nur erschweren.

Wenn Sie die Frage bekommen

Beginnen Sie niemals sofort mit dem Codieren. So wichtig es auch ist, die richtige Lösung zu finden, der Interviewer schaut wirklich auf Ihren Ansatz.

Nehmen Sie sich eine Sekunde Zeit und wiederholen Sie die Frage an den Interviewer, um sicherzustellen, dass Sie beide auf derselben Seite sind. Und sollte es zu Missverständnissen kommen, kann der Interviewer jederzeit Zweifel wiederholen und klären.

Verstehen Sie als Nächstes den Umfang des Problems

  • Wie groß ist der Eingang?
  • Ist es sortiert?
  • Gibt es eine bestimmte Zeit oder Speicherkomplexität, die Sie erfüllen sollten?
  • Gibt es Duplikate? Negative Werte? Leere Werte?
  • Müssen Sie eine Fehlerprüfung durchführen?

Gehen Sie dann Ihren Algorithmus durch. Beginnen Sie mit dem grundlegendsten Brute-Force-Ansatz. Es kann sehr ineffizient sein und darauf hinweisen, dass Sie dies als Ausgangspunkt verwenden. Erklären Sie die Zeit- und Speicherkomplexität und warum dies eine schlechte Lösung ist.

Von dort aus ist es Zeit zu optimieren. Suchen Sie im Allgemeinen nach Orten, an denen Sie möglicherweise unnötige Datenmengen speichern oder Codeabschnitte wiederholen. Bei eingebetteten Anwendungen ist Speicher wichtig! Anstatt ein Array oder einen Vektor zu verwenden, sollten Sie ein Bitset verwenden. Wenn Sie es nur mit Werten zwischen 0 und 31 zu tun haben, können Sie die Bits in einer Ganzzahl umschalten. Hier bietet sich die Bit-Manipulation an.

Es ist wichtig, beim Brainstorming laut zu denken. Wenn Sie nicht weiterkommen oder in die falsche Richtung gehen, kann der Interviewer Sie wieder auf die Spur bringen. Sobald Sie sich beide auf eine Lösung geeinigt haben, ist es endlich Zeit, mit dem Codieren zu beginnen.

Code schreiben

Das Lesen des Codes anderer ist nicht immer die angenehmste Sache. Erleichtern Sie Ihrem Interviewer die Arbeit mit gutem Stil. Das bedeutet nicht, dass Sie jedes Semikolon oder jede Klammer aufschreiben müssen, sondern gut einrücken und aussagekräftige Variablennamen verwenden müssen. Versuchen Sie, ordentlich zu schreiben und den Whiteboard-Bereich gut zu nutzen.

Überprüfen Sie den Algorithmus, den Sie erstellt haben, während Sie Code schreiben. Denken Sie ähnlich wie in der Brainstorming-Phase laut nach. Geben Sie Ihrem Code mündliche Kommentare. Erklären Sie in jedem Schritt, was Sie überprüfen, was Sie erreichen möchten und welche Designentscheidungen Sie treffen.

Nachdem Sie den Code geschrieben haben, sagen Sie noch nicht, dass Sie fertig sind. Machen Sie einen Schritt zurück und analysieren Sie Ihren Code aus einer übergeordneten Perspektive. Überprüfen Sie die Eingänge, die Ausgänge und Ihre Logik auf Fehler. Achten Sie darauf, dass Sie alle einzelnen Fehler erkennen! Gehen Sie dann den Code mit ein paar Testfällen durch. Wenn Sie Probleme sehen, überprüfen Sie Ihren Code und überarbeiten Sie ihn nach Bedarf.

Je nach Interview haben Sie möglicherweise eine große Frage oder ein paar kleinere. Aber sobald der Interviewer mit Ihrer Lösung einverstanden ist, besteht die Möglichkeit, dass er oder sie die verschiedenen Parameter erweitert. Wahrscheinlich müssen Sie den Code nicht überarbeiten, aber möglicherweise müssen Sie besprechen, wie Sie Teile Ihres Ansatzes ändern können. Wie ich bereits erwähnt habe, ist Speicher in eingebetteten Anwendungen wichtig. Eine häufig gestellte Frage ist daher die weitere Speicheroptimierung.

Abschließende Gedanken

Die Art der Interviews mit eingebetteter Software hängt stark vom Unternehmen und der Arbeit ab, der sie Priorität einräumen. Unternehmen, die an einem bestimmten Kommunikationsprotokoll arbeiten, suchen nach anderen Möglichkeiten als Unternehmen, die ein Echtzeit-Betriebssystem entwickeln oder an einem IoT-Produkt arbeiten.

Ich wollte diesen Artikel als Ort nutzen, an dem ich einige häufig gestellte Themen in den von mir durchgeführten Interviews erläutern konnte, doch dies ist keineswegs umfassend. Dies soll als Ausgangspunkt dienen. Bitte wenden Sie sich jedoch an aktuelle Mitarbeiter und informieren Sie sich bei Glassdoor über weitere unternehmensspezifische Interview-Tipps.

Interviews sind schwierig, aber eine gute Vorbereitung und harte Arbeit können dir helfen, einen Job zu finden, den du liebst :)

Ich hoffe, dieser Artikel hat geholfen und wünsche Ihnen viel Glück!

Wenn Ihnen dieser Artikel gefallen hat, vergessen Sie bitte nicht, ein zu hinterlassen. Du kannst mir auch auf Twitter oder Quora folgen :)