Programmeurs, ga naar interviews

Programmeurs, ga naar interviews
De foto is afkomstig uit een video van het kanaal "Militante Amethisten»

Ik heb ongeveer 10 jaar als systeemprogrammeur voor Linux gewerkt. Dit zijn kernelmodules (kernelruimte), verschillende daemons en het werken met hardware uit de gebruikersruimte (gebruikersruimte), verschillende bootloaders (u-boot, etc.), controllerfirmware en nog veel meer. Soms gebeurde het zelfs dat de webinterface werd verbroken. Maar vaker gebeurde het dat ik met een soldeerbout moest zitten en moest communiceren met ontwerpers van printplaten. Een van de problemen met dergelijk werk is dat het vrij moeilijk is om het niveau van je competentie te beoordelen, omdat je de ene taak misschien heel goed kent, maar de andere misschien helemaal niet. De enige adequate manier om te begrijpen waar je heen moet en welke stromingen er nu zijn, is door interviews af te nemen.

In dit artikel wil ik graag mijn ervaringen samenvatten tijdens sollicitatiegesprekken voor een vacature als Linux-systeemprogrammeur, de details van het sollicitatiegesprek, de baan en hoe je je persoonlijke kennisniveau kunt beoordelen door te communiceren met een toekomstige werkgever en wat je niet moet doen. ervan verwachten.

Het artikel bevat een kleine wedstrijd met prijzen.

Kenmerken van het beroep

Een systeemprogrammeur, in het specifieke vakgebied waarin ik werkte, is een complete generalist: ik moest zowel code schrijven als hardware debuggen. En vaak was het nodig om zelf iets te solderen. Het kwam af en toe voor dat mijn aanpassingen aan de hardware vervolgens werden overgedragen aan de ontwikkelaars. Om op dit gebied te kunnen werken, heb je daarom een ​​redelijk goede kennisbasis nodig, zowel op het gebied van digitale schakelingen als op het gebied van programmeren. Hierdoor lijken sollicitatiegesprekken voor een functie als systeemprogrammeur vaak op een zoektocht naar een elektronicaspecialist.

Programmeurs, ga naar interviews
Een typisch werkstation voor een systeemprogrammeur.

De foto hierboven toont mijn typische werkplek bij het debuggen van stuurprogramma's. De logische analysator toont de juistheid van de verzonden berichten, de oscilloscoop bewaakt de vorm van de signaalflanken. Bovendien was de jtag-debugger niet opgenomen in het frame, dat wordt gebruikt wanneer standaard debugging-tools het niet langer aankunnen. En je moet met al deze apparatuur kunnen werken.

Het komt vaak voor dat het sneller en gemakkelijker is om sommige elementen opnieuw te solderen en zelf topologiefouten te corrigeren dan om het product naar een installateur te brengen. En dan vestigt zich ook een soldeerstation op uw werkplek.

Een ander kenmerk van de ontwikkeling op driver- en hardwareniveau is dat Google niet helpt. Vaak moet u zoeken naar informatie over uw probleem, en er zijn drie links, waarvan er twee uw eigen vragen zijn op een forum. Of erger nog, als je een vraag tegenkomt van dezelfde arme kerel die hem 5 jaar geleden op de kernel-mailinglijst stelde en nooit een antwoord kreeg. Bij dit werk komen naast fouten in het ontwerp van zowel hardware als software vaak documentatiefouten voor - dit zijn waarschijnlijk de meest ernstige en onaangename problemen. Soms worden registers verkeerd beschreven, of bestaat er helemaal geen beschrijving voor. Dergelijke problemen kunnen alleen worden opgelost door willekeurige getallen wetenschappelijk in bepaalde registers te stoppen (een soort omgekeerd). Het komt vaak voor dat de processor enige functionaliteit bevat, maar niemand behalve jij hebt deze functionaliteit geïmplementeerd (vooral als de processor nieuw is). En dat betekent met een hark over het veld lopen, waarvan 70% voor kinderen. Maar als er documentatie is, zelfs met fouten, is dit al vooruitgang. Het gebeurt heel vaak dat er helemaal geen documentatie is, en dat is wanneer het lopen door mijnenvelden begint wanneer het ijzer brandt. En ja, ik heb dergelijke problemen ook met succes opgelost.

Sollicitatiegesprekken

Mijn mening is dat je minstens één keer per zes maanden op sollicitatiegesprek moet gaan, zelfs als je dol bent op je baan en er niet van wilt veranderen. Met een sollicitatiegesprek krijgt u inzicht in uw niveau als specialist. Ik geloof dat de meest waardevolle interviews de interviews zijn die mislukken. Zij zijn degenen die het meest accuraat laten zien welke knelpunten in je kennis verbeterd moeten worden.

Een ander interessant kenmerk is de kwaliteit van interviews. Dit is mijn observatie, en het is niet de waarheid, ik geef toe dat ik gewoon geluk had. Als het interview volgens het scenario verloopt:

  • Vertel ons over jezelf;
  • We hebben zulke taken;
  • je houdt van?

En als je na deze dialoog elkaar leuk vindt, ga je aan het werk, dan blijken het bedrijf en de taken in de regel erg prettig en adequaat te zijn. Als een interview lijkt op het doorlopen van 12 cirkels van de hel: het eerste interview met HR, dan een interview met een groep programmeurs, dan de directeur, nog meer huiswerk, etc., dan waren dit in de regel mislukte organisaties waar ik niet werkte voor heel lang. Nogmaals, dit is een persoonlijke observatie, maar in de regel blijkt uit te veel bureaucratie en een langdurig aanwervingsproces dat binnen het bedrijf precies dezelfde processen plaatsvinden. Beslissingen worden langzaam en ineffectief genomen. Er waren ook tegenovergestelde situaties, toen er cirkels waren van interview-hel, en het bedrijf geweldig bleek te zijn, en toen het bedrijf, na een klap op de pols, een moeras bleek te zijn, maar deze zijn zeldzaam.

Als je denkt dat het scenario: ontmoet, over jezelf verteld en aangenomen, alleen in kleine bedrijven bestaat, dan nee. Ik heb dit gezien bij zeer grote bedrijven die meer dan honderden mensen in dienst hebben en vertegenwoordigd zijn op de wereldmarkten. Dit is een normaal mechanisme, vooral als u een rijke staat van dienst heeft en de mogelijkheid heeft om uw vorige werkgevers te bellen en naar u te vragen.

Voor mij is het een zeer goede indicator van een bedrijf als ze vragen om voorbeelden van hun projecten en code te laten zien. Het opleidingsniveau van de sollicitant wordt direct weergegeven. En wat mij betreft, vanuit het oogpunt van het selecteren van kandidaten is dit de meest effectieve selectiemethode dan showinterviews. Sterker nog, je kunt falen tijdens een sollicitatiegesprek van opwinding, of, integendeel, uitstappen op adrenaline. Maar in het echte werk kun je echte taken niet aan. En dit kwam ik ook tegen toen ik zelf mensen interviewde. Er komt een specialist, hij laat zien dat hij uitstekend is, ik vond hem leuk, hij vond ons leuk. En ik worstelde een maand lang met het eenvoudigste probleem, en als gevolg daarvan loste een andere programmeur het binnen een paar dagen op. Ik moest afscheid nemen van die programmeur.

Ik waardeer vooral programmeertaken in interviews. En degenen die tijdens de vergadering, onder stress en huiswerk moeten worden opgelost. De eerste laat zien hoe klaar u bent om problemen in een stressvolle situatie en noodsituatie snel en nauwkeurig op te lossen. De tweede toont uw competentieniveau en vermogen om informatie te zoeken en huidige problemen op te lossen.

De meest interessante banen die ik had waren in het defensiecomplex van ons land. Tijdens het werk moest ik gewoon fantastische problemen oplossen waar commerciële programmeurs nog nooit van hadden gedroomd. Supercomputers, het ontwerpen van routers, verschillende knooppuntgevechtsystemen - dit is ongelooflijk spannend. Als je tijdens de parade een complex ziet waarin jouw code wordt opgeslagen, is dat echt leuk. Vreemd genoeg zijn interviews met dergelijke bedrijven meestal heel eenvoudig, letterlijk geaccepteerd (waarschijnlijk de details van het leger, die niet graag te veel praten), over elkaar heen gelegd. De uitdagingen waarmee ik daar te maken kreeg, waren werkelijk interessant en uitdagend. Met ervaring bleek dat ze goed zijn om te leren een hoogwaardige systeemprogrammeur te worden. Er zijn ook nadelen, en dit zijn niet eens lage lonen. Op dit moment zijn de salarissen in het defensiecomplex behoorlijk behoorlijk, met bonussen en voordelen. In de regel is er sprake van veel bureaucratie, lange werktijden, eindeloze spoedklussen en werk onder grote stress. In bepaalde gevallen kan geheimhouding niet worden uitgesloten, wat bepaalde problemen met zich meebrengt bij reizen naar het buitenland. Plus natuurlijk de tirannie van bazen, en dit gebeurt helaas ook. Hoewel mijn ervaring met het werken met een klantvertegenwoordiger buitengewoon prettig is. Dit is een collectieve impressie van drie verschillende onderzoeksinstituten en bedrijven die verband houden met staatsverdedigingsorders.

Interviewtaken

Om misverstanden te voorkomen en om de bedrijven waarmee ik heb geïnterviewd niet bloot te leggen, zal ik het lot niet verleiden en hun details vermelden. Maar ik ben dankbaar voor elk interview, voor de tijd die mensen aan mij hebben besteed, voor de kans om van buitenaf naar mezelf te kijken. Ik kan alleen maar zeggen dat de taken waren voor grote internationale bedrijven vertegenwoordigd in verschillende landen.

Ik zal je het meest interessante vertellen: welke taken worden gegeven tijdens interviews. Over het algemeen zijn de meest voorkomende vragen bij de vacature van systeemprogrammeur en microcontrollerprogrammeur bitbewerkingen, in alle mogelijke variaties. Bereid u daarom het beste voor op dit gebied.

Het op een na meest polariserende onderwerp zijn wegwijzers, dit zou je echt van de wijs moeten brengen. Zodat ze je midden in de nacht wakker maken en je alles kunt vertellen en laten zien.

Ik heb vragen uit verschillende interviews in mijn hoofd gestolen en ik zal ze hier presenteren, omdat ik ze behoorlijk interessant vind. Ik geef bewust geen antwoorden op deze vragen, zodat lezers deze vragen zelf kunnen beantwoorden in de commentaren en een beetje poeder hebben als ze een echt interview doornemen.

Vragen nr. 1

I. Kennis van SI. Wat betekenen de volgende vermeldingen:

const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;

Zijn alle ingevoerde gegevens correct?

II. Waarom geeft dit programma een segmentatiefout?

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

III. Slim zijn.

Er zit een stok van een meter lang. Tien mieren vallen willekeurig op haar en kruipen in verschillende richtingen. De bewegingssnelheid van één mier is 1 m/s. Als een mier een andere mier tegenkomt, draait hij zich om en kruipt in de tegenovergestelde richting. Wat is de maximale tijd die je nodig hebt om te wachten totdat alle mieren van de stok vallen?

Het volgende interview was voor mij een mislukking en ik beschouw het als het nuttigste in mijn programmeerpraktijk. Het toonde de diepte van mijn incompetentie. Vóór dit interview was ik bekend met elk van deze vragen en ze kwamen voortdurend naar voren in mijn praktijk, maar op de een of andere manier hechtte ik er niet veel belang aan, en daarom begreep ik ze niet goed. Daarom ben ik in schande gezakt voor dit examen. En ik ben heel dankbaar dat zo’n mislukking heeft plaatsgevonden; het had het meest ontnuchterende effect op mij. Je denkt dat je een coole specialist bent, je kent circuitontwerp, interfaces en het werken met de kernel. En dan heb je echte vragen en zweef je. Dus laten we eens kijken.

Interviewvragen #2

Hardwareproblemen.

  • Hoe Linux-systeemaanroepen worden gerangschikt in assembleertaal op een ARM-processor, op x86. Wat is het verschil?
  • Welke synchronisatietools zijn er? Welke synchronisatietools kunnen worden gebruikt binnen een interruptcontext, welke niet, en waarom?
  • Wat is het verschil tussen i2c-bus en spi-bus?
  • Waarom zijn er terminators op de i2c-bus en wat is hun waarde?
  • Kan de RS-232-interface ALLEEN op twee draden werken: RX en TX? Hier zal ik het antwoord geven: het blijkt dat het slecht is, op 9600, maar het kan!!!
  • En nu de tweede vraag: waarom?
  • Wat is de beste manier om signaallijnen en stroom in meerlaagse borden te regelen en waarom? Stroom binnen de lagen, of signaallijnen binnen de lagen? (De vraag gaat over het algemeen puur over het circuitontwerp).
  • Waarom hebben differentiële lijnen sporen die overal samenkomen?
  • RS-485-bus. Meestal zijn er terminators op zo'n lijn. We hebben echter een sterschakeling, met een variabel aantal insteekmodules. Welke middelen moeten worden gebruikt om botsingen en interferentie te voorkomen?
  • Wat zijn rode en binaire bomen?
  • Hoe te werken met cmake?
  • Vragen over het bouwen van yocto Linux.

Doelstellingen voor dit interview:

1. Schrijf een functie die inverteert naar uint32_t alle stukjes. (werken met bits is erg populair bij interviews, ik raad het aan)
2.

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

Wat levert deze functie op? (oplossing op papier, zonder computer)

3. Functie voor het berekenen van het rekenkundig gemiddelde van twee getallen int32_t.

4. Wat zijn de uitvoermethoden in programma's, incl. in een stroom van fouten.

De derde selectie was relatief recent, en het zou me niet verbazen als daar nog zo'n vragenlijst bestaat, dus ik zal het bedrijf niet onthullen om ze niet bloot te leggen... Maar in algemene termen zal ik een voorbeeld geven van mogelijke vragen, en als je je vragen herkent, dan zeg ik hallo :).

Interviewvragen #3

  1. Er wordt een voorbeeld gegeven van code voor het doorlopen van bomen; het is noodzakelijk om te vertellen wat er in deze code wordt gedaan en om fouten aan te wijzen.
  2. Schrijf een voorbeeld van het hulpprogramma ls. Met de eenvoudigste optie “-l”.
  3. Geef een voorbeeld van hoe u statische en dynamische koppelingen kunt uitvoeren. Wat is het verschil?
  4. Hoe werkt RS-232? Wat is het verschil tussen RS-485 en RS-232? Wat is het verschil tussen RS-232 en RS-485 vanuit het oogpunt van een programmeur?
  5. Hoe werkt USB (vanuit het oogpunt van een programmeur)?
  6. Vertaling van technische teksten uit het Russisch naar het Engels.

Een succesvol sollicitatiegesprek is geen garantie voor succesvol werk

Dit hoofdstuk is waarschijnlijk niet eens voor programmeurs (hoewel ook voor hen), maar meer voor HR. De meest adequate bedrijven kijken niet nauwgezet naar de resultaten van interviews. Het is normaal om fouten te maken; meestal kijken ze naar hoe iemand problemen en redeneringen kan oplossen.

Een van de belangrijkste problemen is dat een kandidaat problemen tijdens sollicitatiegesprekken met succes oplost, zich een uitstekende specialist toont, maar faalt bij de eerste echte taak. Ik zal niet liegen, dit is mij ook overkomen. Ik heb met succes alle cirkels van de hel doorlopen, alle testtaken opgelost, maar in echte omstandigheden bleek het werk te zwaar vanwege simpele onervarenheid. Aan boord komen is niet de moeilijkste taak. Het moeilijkste is om bij dit bedrijf aan boord te blijven.

Daarom vertrouw ik meer bedrijven die eenvoudige interviews met de kandidaat afnemen en zeggen: na de eerste maand werken wordt duidelijk of je geschikt bent voor ons of niet. Dit is de meest adequate aanpak, ja, misschien een beetje duur, maar het is meteen duidelijk wie wie is.

Er is nog een andere optie voor sollicitatiegesprekken: als je er met succes voor slaagt, maar op basis van de resultaten van het sollicitatiegesprek begrijp je dat de werkgever volkomen ontoereikend is. Ik weiger onmiddellijk werk als mij wordt aangeboden om als individuele ondernemer te werken, waarbij ik grote inkomens beloof. Dit is een vorm van belastingontduiking voor een opererende organisatie, en waarom zouden de problemen van de werkgever mij als programmeur zorgen baren? Een andere optie zijn verschillende overheidsinstanties. Ik had een sollicitatiegesprek, waardoor ik een goed salaris kreeg aangeboden, maar ze zeiden dat de vorige programmeur was gestopt, ziek werd, stierf, een eetbui kreeg vanwege de werkdruk, en je werkdag begint om 8 uur 's ochtends . Vanaf zo'n plek rende hij ook zo dat zijn hielen glinsterden. Ja, HR, let op: programmeurs staan ​​klaar om zelfs de lekkerste baan te weigeren als de werkdag vroeg in de ochtend moet beginnen.

Aan het einde zal ik een uitstekende video geven over de selectie van programmeurs, waarvan een screenshot aan het begin van dit artikel wordt gegeven. Ik heb ook meer dan eens zo'n interview gehad. Als je tirannie ziet in de fase van het stellen van vragen, respecteer dan jezelf, sta op, pak je spullen en ga weg - dit is normaal. Als HR en de manager zich tijdens het sollicitatiegesprek ten koste van u laten gelden, geeft dit aan dat het bedrijf giftig is en dat u daar niet mag werken, tenzij u van ontoereikende bazen houdt.

Bevindingen

Programmeurs, ga naar interviews! En probeer altijd promotie te maken. Stel dat u N geld krijgt, ga dan voor een sollicitatiegesprek voor minimaal N*1,2, of beter nog N*1,5. Zelfs als u deze vacature niet meteen aanvaardt, begrijpt u wat er nodig is voor dit loonniveau.
Uit mijn observaties is gebleken dat goede kennis van de Engelse taal, voldoende rijke ervaring in de branche en zelfvertrouwen doorslaggevend zijn. Dit laatste is de belangrijkste kwaliteit, zoals overal in het leven. In de regel kan een kandidaat met meer zelfvertrouwen beter presteren in een sollicitatiegesprek, zelfs met meer fouten, dan een uitstekende, maar meer verlegen en proactieve sollicitant. Veel succes met je sollicitatiegesprekken!

P/S-competitie

Als u interessante voorbeelden heeft van problemen waarmee HR u heeft belast, verwelkom dan de reacties. We hebben een kleine wedstrijd voorbereid - de voorwaarden zijn eenvoudig: je schrijft de meest ongewone taak die je tijdens een interview hebt gehad, de lezers beoordelen deze (plus), en na een week vatten we de resultaten samen en belonen we de winnaar met leuke goodies.

Programmeurs, ga naar interviews

Programmeurs, ga naar interviews

Bron: www.habr.com

Voeg een reactie