Eerste Hulp Bij Solliciteren als consultant
Algemeen
Bijna elk interview zal starten met "stel je eens voor". Vervolgens kan het interview verschillende richtingen uitgaan. Sommigen zullen technische vragen beginnen stellen, anderen gaan het CV af en overlopen elke term. Met dit in het achterhoofd is het mogelijk je goed voor te bereiden. Een goede voorbereiding omvat:
- Zorg dat je jezelf kan voorstellen (zie ook de vragen hieronder bij "Motivatie").
- Verzamel zo veel mogelijk informatie over de opdracht (wat, wanneer, waar, ...) en het bedrijf.
- herneem ook zelf eens jouw CV.
- Zorg dat je weet bij wie je moet zijn en wanneer (fysiek of digitaal). Vertrek ruim op voorhand.
Dikwijls gaat een klant bij het stellen van vragen op zoek naar sleutelwoorden, en zet deze mentale vinkjes telkens hij een van deze woorden hoort. Het is dus belangrijk correcte terminologie te hanteren. Wel is het lastig te weten aan welke begrippen een bepaalde klant belang hecht; dit hangt af van zijn persoonlijke ervaring en waarden. Omdat het moeilijk is hierin assumpties te maken, is volledigheid dus essentieel.
Belangrijk bij het beantwoorden van vragen is verder dat je je niet direct vastpraat. Bij het krijgen van een vraag moet je dan ook eerst je strategie bepalen (terugkaatsen, beknopt beantwoorden, in detail beantwoorden, een "nee maar" zoals hieronder beschreven of wel degelijk een "nee, dat zegt me niets").
Motivatie
Vertel eens iets over jezelf. / Stel jezelf eens voor.
Start met je naam en leeftijd, vervolg met je opleiding, ga door met de relevante praktijkervaring. Eventueel kan je aanvullen met karaktereigenschappen of kenmerken. Rond netjes af, dat voorkomt een awkward momentje in de vorm van "da was 't". Dit moet door en door in de vingers zitten, als je deze vraag slordig beantwoordt kom je direct over als een knul.
Waarom zit je hier graag? Wat is je motivatie?
Wat je hier zeker niet gaat aanhalen is “ik wil hier bijleren”, dat is goed voor een sollicitatie, maar als consultant ga jij kennis bij hen in huis brengen.
Wat verwacht je hier te doen?
Hier is terugkaatsen een goede strategie. Vertel wat je weet over het project en vraag hen of ze verder kunnen toelichten.
Welke ervaring heb je?
Maak dingen niet kleiner dan ze zijn, gebruik geen verwoordingen als “klein projectje” of “schoolproject”. Vergeet zeker niet relevante opleidingsonderdelen of privéprojecten te vermelden.
Welk project heb je het liefst gedaan?
Wat is voor jou een goed team? Welke omvang heeft het en welke rollen?
Sleutelwoorden: ondersteunend, multidisciplinair (complementaire vaardigheden), synergie.
Zie je je zelf als iemand die andere kan begeleiden? Leg uit.
Hoe zouden mensen jou omschrijven?
Hier is het heel verstandig gebruik te maken van dezelfde terminologie en kenmerken die vermeld staan op het CV of in de eerdere communicatie tussen Codifly en de klant.
Heb jij nog vragen voor ons?
Goede vraag is: "Hoe ziet een dag er uit bij jullie?". Bereid zeker enkele vragen voor, dit komt altijd goed over!
Ben je in je vrije tijd met dingen bezig?
Waar heb je passie voor programmeren opgedaan?
Heb je een voorkeur voor frontend of backend?
Let hier op van niet op tenen te trappen. Beide zijn leuk en hebben hun eigen uitdagingen, dat wat het meest past bij de opdracht doe je het liefste.
Heb je een voorkeur van (front-)end framework?
Werk je liever alleen of in team?
Kan je aan mature projecten werken zonder al de eerder geschreven code te willen herschrijven naar jouw stijl?
Technische vragen
Indien je bij een technische vraag het antwoord niet weet, is het steeds zinvol in je antwoord over te schakelen naar andere relevante kennis/ervaring die je wel hebt. Dit kan bijvoorbeeld als volgt: "Nee maar ik ken wel ... en ik meen mij te herinneren dat dat bij X ook zo is.". Pas wanneer deze strategie niet mogelijk is, bijvoorbeeld omdat je een term of vraag helemaal niet kent of kan situeren, is een beknopte "nee, dat zegt me niet direct iets" een correct antwoord.
Algemeen development
Design Patterns, Factory pattern, Dependency Injection
Wat weet je over microservices? Wat zijn de voordelen ervan?
Wat is domain-driven design (DDD)?
Wat is Security segregation?
Hoe kan je een robuuste applicatie bouwen?
Hier moet je een gelaagde approach voorstellen:
- De eerste barriëre is natuurlijk goede code met goede foutafhandeling.
- Hotfixpreventie: meerdere omgevingen gebruiken zodat bugs kunnen opgemerkt worden voor ze naar productie gaan.
- Bugdetectie: logging trails, structured logging, monitoring (statistics), alarmen.
- Bugresolutie: Rollbackmechanismen, hotfixprocedures, ...
Stel we komen met een probleem, wat heb je nodig om dat op te lossen? Hoe pak je dat aan?
Eerst oriëntatie, zeker in geval van een deels onbekende applicatie: hoe werkt het nu, wat zijn de systemen die met elkaar communiceren, hoeveel dingen moet ik aanraken, hoe gaat mijn oplossing passen binnen het geheel, ...?
De volgende stappen kan je zelf wel bedenken :).
JavaScript
Wat doet Array.reduce?
Een goed antwoord: "Een array reduceren tot 1 waarde, bijvoorbeeld een array van getallen reduceren tot haar som. Is dit voldoende of wil je dat ik verder toelicht?".
Indien ja, kan je verder met: "reduce is een methode van Arrays die twee argumenten neemt: de eerste is een reducerfunctie en de tweede is een initiële waarde voor de accumulator. Elementen in de array worden door reduce() één voor één overlopen en voor elk element wordt de accumulatorfunctie opgeroepen met de huidige accumulator (die start op de initiële waarde), het huidig element, de index van het huidig element en de bronarray. De reducerfunctie heeft als taak op basis van deze parameters de nieuwe waarde voor de accumulator terug te geven."
Bemerk: we noemen reduce() een methode en geen functie. Dit komt omdat reduce() iets is dat wordt uitgevoerd op objecten van type Array. Het zit hem bij sleutelwoorden vaak in de details.
Wat is destructuring?
Wat is een Promise? Wat is async/await en leg het verband uit met Promise. Gaat je voorkeur naar async/await of naar promises?
Hier start je best met callbacks als primitief mechanisme voor asynchroon programmeren ("roep me op wanneer de asynchrone taak is voltooid").
Dan kan je koppelen naar callback hell en promises als oplossing om op een meer sequentiële manier aan asynchroon programmeren te doen. Bij het bespreken van promises is het belangrijk steeds de drie statussen te vermelden: pending, fulfilled, rejected. Ook .then() en .catch() moeten vanzelfsprekend worden vermeld. Bonuspunten krijg je als je het concept "thenable" kan uitleggen.
Async/await is een nieuwe taalconstructie die toestaat in een illusie van synchroon programmeren toch asynchroon te werken. Grote voordeel hier is dat asynchrone fouten worden omgevormd tot synchrone throw's, waardoor zowel synchrone als asynchrone fouten op éénzelfde manier kunnen worden afgehandeld.
Wat is een generator function?
Wat zijn decorators en wanneer zou je deze gebruiken?
TypeScript
Heb je al gewerkt met TypeScript?
Wat is het verschil tussen een type en een interface?
Front end
Welk front end framework gebruik je het minst graag en waarom?
Heb je al met hooks gewerkt? Wat vind je er goed aan?
Waarvoor gebruik je useEffect hook?
Waarvoor gebruik je useState en useMemo hook?
Waarvoor gebruik je useCallback?
Uitleggen wat een hook is. Verder: de callbackfunctie wordt bij elke render opnieuw aangemaakt, dus daar winnen we niets. Er is wel een optimalisatie van rerendering.
Met welke state management tools heb je al gewerkt? (Apollo/Redux/MobX/useReducer)
Waarvoor dient de “key” prop van een React component?
Wanneer zou je React.memo() of PureComponent gebruiken?
Wat is je ervaring met ReactNative?
Wanneer zou je wel of niet voor ReactNative kiezen?
Als je een React-Native applicatie wil debuggen, hoe pak je dat aan?
Op welke manieren kan je state bewaren?
React state is de basis, context API of Redux (of een andere state manager) kan ook gebruikt worden.
Back end
Heb je ervaring met Express.js?
De meesten bij ons hebben dat allicht niet. Je kan dan antwoorden met "nee maar", bijvoorbeeld "nee maar ik ben wel vertrouwd met het web application framework (dat is de nette naam voor dat soort pakketten) Koa.js. Als ik het me goed herinner is dat vrij gelijkaardig aan Express.js, het voornaamste verschil is dacht ik dat Express werkt met callbacks in plaats van generator functions of promises in haar controllerfuncties en middlewares."
Wat is een middleware?
Wat is het verschil tussen een inner-join en een left-join?
Wat zijn de 5 rest methods (get, put, post, delete, patch)?
Wat kun je vertellen over een message bus?
Hoe bouw je web services met Node.js?
Indien je een grote dataset van 5TB zou moeten verwerken, hoe pak je dit aan?
Wat is een goede API
Wat hoort er zeker in te zitten?
Hoe is jouw SQL kennis?
GraphQL
Wat is het verschil tussen graphql en rest, waarvoor zou je het ene gebruiken en waarvoor het andere?
Wat zijn de 2 soorten operaties in graphql?
Hoe ga je om met performantie met GraphQL?
Heb je al veel ervaring met GraphQL?
Wat zijn fragments binnen de context van GraphQL?
Wat is het n+1-probleem?
Wat is GraphQL Federation?
Workflow
Wat is jouw ideale Git workflow?
Wat doet Git rebase?
Hoe doe je unit testen?
Wat weet je over code coverage?
Wat gebruik je om je code te onderhouden, leesbaar te houden?
Heb je ervaring met SCRUM?
Heb je al gewerkt met de Atlassian stack?
Hoe zou je een nieuw project opstarten?
Vergeet hier naast het triviale ook zaken als linter / editorconfig niet te vermelden.
DevOps
Heb je al gewerkt met Docker?
Wat zijn de voordelen van Docker?
Andere technologieën
[VUE] Wat is het verschil tussen v-if en v-show?
[PHP] Wat kan je vertellen over Doctrine?
[PHP] Wat zijn de SOLID principes in PHP?