Programmierer, gehen Sie zu Interviews

Programmierer, gehen Sie zu Interviews
Das Bild stammt aus einem Video des Kanals „Militante Amethyste»

Ich habe etwa 10 Jahre lang als Systemprogrammierer für Linux gearbeitet. Dabei handelt es sich um Kernel-Module (Kernel Space), diverse Daemons und das Arbeiten mit Hardware aus dem User Space (User Space), diverse Bootloader (U-Boot etc.), Controller-Firmware und vieles mehr. Manchmal kam es sogar vor, dass die Weboberfläche unterbrochen wurde. Aber häufiger kam es vor, dass ich mit einem Lötkolben sitzen und mit Leiterplattendesignern interagieren musste. Eines der Probleme bei solchen Arbeiten besteht darin, dass es ziemlich schwierig ist, das Niveau Ihrer Kompetenz einzuschätzen, da Sie möglicherweise eine Aufgabe sehr genau kennen, eine andere jedoch möglicherweise überhaupt nicht. Der einzig angemessene Weg, um zu verstehen, wohin man gehen muss und welche Strömungen es derzeit gibt, besteht darin, zu Vorstellungsgesprächen zu gehen.

In diesem Artikel möchte ich meine Erfahrungen mit Vorstellungsgesprächen für eine freie Stelle als Linux-Systemprogrammierer zusammenfassen, die Besonderheiten des Vorstellungsgesprächs, der Stelle und wie Sie Ihren persönlichen Wissensstand durch die Kommunikation mit einem zukünftigen Arbeitgeber einschätzen können und was Sie nicht tun sollten davon erwarten.

Der Artikel wird einen kleinen Wettbewerb mit Preisen beinhalten.

Merkmale des Berufs

Ein Systemprogrammierer ist in dem speziellen Bereich, in dem ich gearbeitet habe, ein kompletter Generalist: Ich musste sowohl Code schreiben als auch Hardware debuggen. Und oft bestand die Notwendigkeit, etwas selbst zu löten. Ab und zu kam es vor, dass meine Anpassungen an der Hardware dann an die Entwickler übertragen wurden. Um in diesem Bereich arbeiten zu können, benötigen Sie daher eine recht gute Wissensbasis, sowohl im Bereich der digitalen Schaltungen als auch in der Programmierung. Aus diesem Grund ähneln Vorstellungsgespräche für eine Stelle als Systemprogrammierer oft der Suche nach einem Elektronikspezialisten.

Programmierer, gehen Sie zu Interviews
Eine typische Workstation für einen Systemprogrammierer.

Das Foto oben zeigt meinen typischen Arbeitsplatz beim Debuggen von Treibern. Der Logikanalysator zeigt die Korrektheit der übertragenen Nachrichten, das Oszilloskop überwacht die Form der Signalflanken. Auch der JTAG-Debugger war nicht im Frame enthalten, der zum Einsatz kommt, wenn Standard-Debugging-Tools nicht mehr zurechtkommen. Und Sie müssen in der Lage sein, mit all dieser Ausrüstung zu arbeiten.

Es kommt oft vor, dass es schneller und einfacher ist, einige Elemente selbst neu zu löten und Topologiefehler zu korrigieren, als das Produkt zu einem Installateur zu bringen. Und dann steht auch noch eine Lötstation an Ihrem Arbeitsplatz.

Ein weiteres Merkmal der Entwicklung auf Treiber- und Hardwareebene ist, dass Google nicht hilft. Oftmals muss man nach Informationen zu seinem Problem suchen, und es gibt drei Links, zwei davon sind eigene Fragen in irgendeinem Forum. Oder noch schlimmer, wenn Sie auf eine Frage des gleichen armen Kerls stoßen, der sie vor fünf Jahren auf der Kernel-Mailingliste gestellt und nie eine Antwort erhalten hat. Bei dieser Arbeit treten neben Fehlern im Design von Hardware und Software häufig auch Dokumentationsfehler auf – das sind wohl die gravierendsten und unangenehmsten Probleme. Manchmal werden Register falsch beschrieben oder es gibt überhaupt keine Beschreibung für sie. Solche Probleme lassen sich nur lösen, indem man wissenschaftlich Zufallszahlen in bestimmte Register steckt (eine Art Umkehrung). Es kommt oft vor, dass der Prozessor einige Funktionen enthält, aber niemand außer Ihnen hat diese Funktionalität implementiert (insbesondere, wenn der Prozessor neu ist). Und das bedeutet, mit einem Rechen über das Feld zu laufen, 5 % davon sind für Kinder. Aber wenn es eine Dokumentation gibt, auch mit Fehlern, ist das schon ein Fortschritt. Es kommt oft vor, dass es überhaupt keine Dokumentation gibt, und dann beginnt die Wanderung durch Minenfelder, wenn das Eisen brennt. Und ja, auch ich habe solche Probleme erfolgreich gelöst.

Interviews

Meiner Meinung nach sollten Sie mindestens alle sechs Monate zu Vorstellungsgesprächen gehen, auch wenn Sie Ihren Job lieben und ihn nicht ändern möchten. Ein Vorstellungsgespräch ermöglicht es Ihnen, Ihr Niveau als Spezialist zu verstehen. Ich glaube, dass die wertvollsten Interviews diejenigen sind, die scheitern. Sie sind diejenigen, die am genauesten aufzeigen, welche Engpässe in Ihrem Wissen verbessert werden müssen.

Ein weiteres interessantes Merkmal ist die Qualität der Interviews. Das ist meine Beobachtung, und es ist nicht die Wahrheit, ich gebe zu, dass ich einfach Glück hatte. Wenn das Interview gemäß dem Szenario verläuft:

  • erzählen Sie über sich selbst;
  • Wir haben solche Aufgaben;
  • du magst?

Und wenn man sich nach diesem Dialog sympathisch findet, zur Arbeit geht, dann erweisen sich das Unternehmen und die Aufgaben in der Regel als sehr angenehm und angemessen. Wenn ein Vorstellungsgespräch dem Durchlaufen von 12 Höllenkreisen ähnelt: das erste Vorstellungsgespräch mit der Personalabteilung, dann ein Vorstellungsgespräch mit einer Gruppe von Programmierern, dann der Direktor, weitere Hausaufgaben usw., dann waren das in der Regel gescheiterte Organisationen, in denen ich nicht gearbeitet habe für lange Zeit. Auch dies ist eine persönliche Beobachtung, aber in der Regel zeigen zu viel Bürokratie und ein langwieriger Einstellungsprozess, dass im Unternehmen genau die gleichen Prozesse ablaufen. Entscheidungen werden langsam und ineffektiv getroffen. Es gab auch die gegenteiligen Situationen, in denen es Kreise der Interviewhölle gab und sich das Unternehmen als großartig herausstellte, und in denen sich das Unternehmen nach einem Schlag aufs Handgelenk als Sumpf herausstellte, aber das kommt selten vor.

Wenn Sie denken, dass das Szenario: Kennenlernen, über sich erzählen und eingestellt werden, nur in kleinen Unternehmen existiert, dann nein. Ich habe das bei sehr großen Unternehmen gesehen, die mehr als Hunderte Mitarbeiter beschäftigen und auf den Weltmärkten vertreten sind. Dies ist ein normaler Mechanismus, insbesondere wenn Sie über eine umfangreiche Erfolgsbilanz verfügen und die Möglichkeit haben, Ihre früheren Arbeitgeber anzurufen und nach Ihnen zu fragen.

Für mich ist es ein sehr guter Indikator für ein Unternehmen, wenn es darum bittet, Beispiele seiner Projekte und seines Codes zu zeigen. Der Ausbildungsstand des Bewerbers wird sofort angezeigt. Und aus Sicht der Kandidatenauswahl ist dies für mich die effektivste Auswahlmethode als Vorstellungsgespräche. Tatsächlich kann man bei einem Vorstellungsgespräch vor Aufregung scheitern oder, im Gegenteil, einem Adrenalinrausch ausgesetzt sein. Aber in der echten Arbeit kann man echte Aufgaben nicht bewältigen. Und das ist mir auch begegnet, als ich selbst Leute interviewt habe. Ein Spezialist kommt, zeigt sich hervorragend, ich mochte ihn, er mochte uns. Und ich kämpfte einen Monat lang mit dem einfachsten Problem, und daraufhin löste ein anderer Programmierer es in ein paar Tagen. Ich musste mich von diesem Programmierer trennen.

Programmieraufgaben in Vorstellungsgesprächen schätze ich besonders. Und solche, die direkt während des Meetings, unter Stress und bei den Hausaufgaben gelöst werden müssen. Das erste zeigt, wie bereit Sie sind, Probleme in einer Stresssituation und einem Notfall schnell und präzise zu lösen. Die zweite zeigt Ihr Kompetenzniveau und Ihre Fähigkeit, nach Informationen zu suchen und aktuelle Probleme zu lösen.

Die interessantesten Jobs, die ich hatte, waren im Verteidigungskomplex unseres Landes. Im Laufe meiner Arbeit musste ich einfach fantastische Probleme lösen, von denen kommerzielle Programmierer noch nie geträumt hatten. Supercomputer, das Entwerfen von Routern, verschiedene Knotenkampfsysteme – das ist unglaublich spannend. Wenn Sie während der Parade einen Komplex sehen, der Ihren Code speichert, ist das wirklich schön. Seltsamerweise sind Interviews mit solchen Unternehmen normalerweise sehr einfach, sie werden im wahrsten Sinne des Wortes so verstanden, dass sie akzeptiert werden (wahrscheinlich die Besonderheiten des Militärs, die nicht gerne zu viel reden), und überlagert werden. Die Herausforderungen, denen ich dort gegenüberstand, waren wirklich interessant und herausfordernd. Mit zunehmender Erfahrung stellte sich heraus, dass sie gut geeignet sind, um zu lernen, ein hochwertiger Systemprogrammierer zu werden. Es gibt auch Nachteile, und dabei handelt es sich nicht einmal um niedrige Löhne. Im Moment ist das Gehalt im Verteidigungskomplex recht ordentlich, mit Boni und Sozialleistungen. In der Regel gibt es viel Bürokratie, lange Arbeitszeiten, endlose Eilaufträge und Arbeit unter großem Stress. In bestimmten Fällen kann eine Geheimhaltung nicht ausgeschlossen werden, was bei Reisen ins Ausland gewisse Probleme mit sich bringt. Dazu kommt natürlich die Tyrannei der Chefs, und das kommt leider auch vor. Obwohl meine Erfahrung in der Zusammenarbeit mit einem Kundenvertreter äußerst angenehm ist. Dies ist ein kollektiver Eindruck von drei verschiedenen Forschungsinstituten und Unternehmen im Zusammenhang mit staatlichen Verteidigungsaufträgen.

Interviewaufgaben

Um Missverständnisse zu vermeiden und um die Unternehmen, mit denen ich Interviews geführt habe, nicht bloßzustellen, werde ich das Schicksal nicht herausfordern und deren Details preisgeben. Aber ich bin dankbar für jedes Interview, für die Zeit, die Menschen für mich aufgewendet haben, für die Möglichkeit, mich von außen zu betrachten. Ich kann nur sagen, dass die Aufgaben für große internationale Unternehmen waren, die in verschiedenen Ländern vertreten sind.

Ich verrate Ihnen das Interessanteste: welche Aufgaben im Vorstellungsgespräch gestellt werden. Generell sind die häufigsten Fragen bei der Stellenausschreibung Systemprogrammierer und Mikrocontroller-Programmierer Bitoperationen in allen möglichen Variationen. Bereiten Sie sich daher in diesem Bereich optimal vor.

Das am zweitstärksten polarisierende Thema sind Wegweiser, das sollte einem wirklich ins Auge springen. Damit Sie mitten in der Nacht geweckt werden und Sie alles erzählen und zeigen können.

Ich habe in meinem Kopf Fragen aus mehreren Interviews geklaut und stelle sie hier vor, da ich sie sehr interessant finde. Ich gebe bewusst keine Antworten auf diese Fragen, damit die Leser diese Fragen selbst in den Kommentaren beantworten können und ein wenig Puder haben, wenn sie ein echtes Interview durchleben.

Fragen Nr. 1

I. SI-Kenntnisse. Was bedeuten die folgenden Einträge:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Sind alle Eingaben korrekt?

II. Warum löst dieses Programm einen Segmentierungsfehler aus?

int main ()
{
       fprintf(0,"hellon");
       fork();
       return(0);
}

III. Schlau sein.

Es gibt einen Stock von einem Meter Länge. Zehn Ameisen fallen zufällig auf sie und kriechen in verschiedene Richtungen. Die Bewegungsgeschwindigkeit einer Ameise beträgt 1 m/s. Trifft eine Ameise auf eine andere, dreht sie sich um und kriecht in die entgegengesetzte Richtung. Wie lange müssen Sie maximal warten, bis alle Ameisen vom Stock gefallen sind?

Das nächste Interview war für mich ein Misserfolg und ich halte es für das nützlichste in meiner Programmierpraxis. Es zeigte das Ausmaß meiner Inkompetenz. Vor diesem Interview kannte ich jede dieser Fragen und sie tauchten in meiner Praxis ständig auf, aber irgendwie habe ich ihnen keine große Bedeutung beigemessen und sie dementsprechend nicht gut verstanden. Deshalb habe ich diese Prüfung in Schande nicht bestanden. Und ich bin sehr dankbar, dass ein solcher Misserfolg passiert ist, er hat auf mich die ernüchterndste Wirkung gehabt. Du hältst dich für einen coolen Spezialisten, kennst dich mit Schaltungsdesign, Schnittstellen und der Arbeit mit dem Kernel aus. Und dann hat man echte Fragen und man schwebt. Also mal sehen.

Interviewfragen Nr. 2

Hardwareprobleme.

  • Wie Linux-Systemaufrufe in Assembler auf einem ARM-Prozessor auf x86 angeordnet sind. Was ist der Unterschied?
  • Welche Synchronisierungstools gibt es? Welche Synchronisationstools können in einem Interrupt-Kontext verwendet werden, welche nicht und warum?
  • Was ist der Unterschied zwischen i2c-Bus und SPI-Bus?
  • Warum gibt es Abschlusswiderstände am i2c-Bus und welchen Wert haben sie?
  • Kann die RS-232-Schnittstelle NUR auf zwei Drähten funktionieren: RX und TX? Hier gebe ich die Antwort: Es stellt sich heraus, dass es bei 9600 schlecht ist, aber es kann!!!
  • Und nun die zweite Frage: Warum?
  • Wie lassen sich Signalleitungen und Strom in Multilayer-Platinen am besten anordnen und warum? Strom innerhalb der Schichten oder Signalleitungen innerhalb der Schichten? (Die Frage betrifft im Allgemeinen nur das Schaltungsdesign).
  • Warum haben Differentialleitungen Spuren, die überall zusammenpassen?
  • RS-485-Bus. Normalerweise gibt es in einer solchen Leitung Terminatoren. Wir haben jedoch eine Sternschaltung mit einer variablen Anzahl an Steckmodulen. Welche Maßnahmen zur Kollisions- und Interferenzvermeidung sollten ergriffen werden?
  • Was sind rote und binäre Bäume?
  • Wie arbeite ich mit cmake?
  • Fragen zum Erstellen von Yocto Linux.

Ziele für dieses Interview:

1. Schreiben Sie eine Funktion, die zu invertiert uint32_t alle Teile. (Die Arbeit mit Bits ist bei Vorstellungsgesprächen sehr beliebt, ich empfehle es)
2.

int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;

Was wird diese Funktion zurückgeben? (Lösung auf Papier, ohne Computer)

3. Funktion zur Berechnung des arithmetischen Mittels zweier Zahlen int32_t.

4. Welche Ausgabemethoden gibt es in Programmen, inkl. in einen Strom von Fehlern.

Die dritte Auswahl war relativ neu, und es würde mich nicht wundern, wenn es dort noch einen solchen Fragebogen gäbe. Deshalb werde ich das Unternehmen nicht preisgeben, um es nicht bloßzustellen ... Aber ganz allgemein gebe ich ein Beispiel von möglichen Fragen, und wenn Sie Ihre Fragen erkennen, dann sage ich Hallo :).

Interviewfragen Nr. 3

  1. Es wird ein Beispiel für einen Tree-Traversal-Code gegeben; es ist notwendig, zu erklären, was in diesem Code gemacht wird, und auf Fehler hinzuweisen.
  2. Schreiben Sie ein Beispiel für das Dienstprogramm ls. Mit der einfachsten Option „-l“.
  3. Geben Sie ein Beispiel für die Durchführung statischer und dynamischer Verknüpfungen. Was ist der Unterschied?
  4. Wie funktioniert RS-232? Was ist der Unterschied zwischen RS-485 und RS-232? Was ist aus Programmierersicht der Unterschied zwischen RS-232 und RS-485?
  5. Wie funktioniert USB (aus der Sicht eines Programmierers)?
  6. Übersetzung technischer Texte aus dem Russischen ins Englische.

Ein erfolgreiches Vorstellungsgespräch ist keine Garantie für eine erfolgreiche Arbeit

Dieses Kapitel ist wahrscheinlich nicht einmal für Programmierer gedacht (obwohl auch für sie), sondern eher für die Personalabteilung. Die geeignetsten Unternehmen prüfen die Ergebnisse von Interviews nicht sorgfältig. Es ist normal, Fehler zu machen. Am häufigsten kommt es darauf an, wie jemand Probleme und Vernunft lösen kann.

Eines der Hauptprobleme besteht darin, dass ein Kandidat Probleme in Vorstellungsgesprächen erfolgreich löst, sich als hervorragender Spezialist erweist, aber bei der ersten echten Aufgabe scheitert. Ich werde nicht lügen, das ist mir auch passiert. Ich habe alle Kreise der Hölle erfolgreich durchlaufen und alle Testaufgaben gelöst, aber unter realen Bedingungen erwies sich die Arbeit aufgrund einfacher Unerfahrenheit als zu schwierig. An Bord zu kommen ist nicht die schwierigste Aufgabe. Das Schwierigste ist, an Bord dieses Unternehmens zu bleiben.

Daher vertraue ich mehr Unternehmen, die einfache Interviews mit dem Kandidaten führen und sagen: Nach dem ersten Arbeitsmonat wird klar sein, ob Sie zu uns passen oder nicht. Das ist der angemessenste Ansatz, vielleicht etwas teuer, aber es ist sofort klar, wer wer ist.

Für Vorstellungsgespräche gibt es noch eine weitere Möglichkeit: Wenn Sie es erfolgreich bestehen, aber aufgrund der Ergebnisse des Vorstellungsgesprächs verstehen, dass der Arbeitgeber völlig unzureichend ist. Ich lehne die Arbeit sofort ab, wenn mir angeboten wird, als Einzelunternehmer zu arbeiten und ein hohes Einkommen zu versprechen. Dies ist eine Form der Steuerhinterziehung für eine Betreiberorganisation, und warum sollten mich als Programmierer die Probleme des Arbeitgebers beunruhigen? Eine weitere Möglichkeit sind verschiedene staatliche Stellen. Ich hatte ein Vorstellungsgespräch, bei dem mir ein gutes Gehalt angeboten wurde, aber sie sagten, der vorherige Programmierer habe gekündigt, sei krank geworden, gestorben, habe aufgrund der Arbeitsbelastung einen Rausch bekommen und Ihr Arbeitstag beginne um 8 Uhr morgens . Von einer solchen Stelle rannte er auch so, dass seine Absätze glänzten. Ja, HR, bitte beachten Sie, dass Programmierer bereit sind, selbst den leckersten Job abzulehnen, wenn der Arbeitstag früh am Morgen beginnen muss.

Am Ende werde ich ein hervorragendes Video zur Programmiererauswahl geben, von dem am Anfang dieses Artikels ein Screenshot zu sehen ist. Ich hatte auch mehr als einmal ein solches Interview. Wenn Sie in der Phase der Fragen Tyrannei sehen, dann respektieren Sie sich selbst, stehen Sie auf, nehmen Sie Ihre Sachen und gehen Sie – das ist normal. Wenn sich die Personalabteilung und die Führungskraft im Vorstellungsgespräch auf Ihre Kosten durchsetzen, deutet das darauf hin, dass das Unternehmen giftig ist und Sie dort nicht arbeiten sollten, es sei denn, Sie mögen ungeeignete Vorgesetzte.

Befund

Programmierer, gehen Sie zu Interviews! Und versuchen Sie immer, befördert zu werden. Nehmen wir an, wenn Sie N-Geld bekommen, dann gehen Sie zu einem Vorstellungsgespräch für mindestens N*1,2, besser N*1,5. Auch wenn Sie diese Stelle nicht sofort annehmen, werden Sie verstehen, was für dieses Gehaltsniveau erforderlich ist.
Meine Beobachtungen haben gezeigt, dass gute Kenntnisse der englischen Sprache, ausreichend umfangreiche Erfahrung in der Branche und Selbstvertrauen entscheiden. Letzteres ist, wie überall im Leben, die wichtigste Eigenschaft. In der Regel kann ein selbstbewussterer Kandidat in einem Vorstellungsgespräch auch mit mehr Fehlern besser abschneiden als ein exzellenter, aber schüchterner und proaktiverer Bewerber. Viel Glück bei Ihren Vorstellungsgesprächen!

P/S-Wettbewerb

Wenn Sie interessante Beispiele für Probleme haben, mit denen die Personalabteilung Sie belastet hat, dann freuen Sie sich über die Kommentare. Wir haben einen kleinen Wettbewerb vorbereitet – die Bedingungen sind einfach: Sie schreiben die ungewöhnlichste Aufgabe, die Sie während eines Interviews hatten, die Leser bewerten sie (plus) und nach einer Woche fassen wir die Ergebnisse zusammen und belohnen den Gewinner mit lustigen Leckereien.

Programmierer, gehen Sie zu Interviews

Programmierer, gehen Sie zu Interviews

Source: habr.com

Kommentar hinzufügen