NazzTazz | Citation :
Bonjour Tristan,
Je te propose un petit questionnaire pour commencer si tu veux bien.
Règle de l'exercice: j'aimerais que tu répondes à 12 questions parmi
celles-ci après. La question bonus est obligatoire.
Il n'y a évidemment pas de réponse parfaite, mais nous évaluerons les tiennes autant sur la forme que sur le fond. Réponds instinctivement et naturellement.
1. Quelles sont les stratégies pour gérer l'évolution d'une API ?
2. Pour déployer une nouvelle version d'un backend sans interruption
de service, quelles sont les précautions à prendre pour accéder
à la couche de données ?
3. Quel est le rôle du Routeur dans une application backend ?
4. Quelles sont les stratégies possibles pour communiquer entre un
backend et une application client (native, web, ou autre) ?
5. Quels sont les critères à prendre en compte pour choisir une
base de données ?
6. Qu'est-ce qu'un cache ? Donne quelques exemples de stratégie de
cache que tu as déjà utilisé (client ou backend)
7. Quelles technologies peut-on utiliser pour persister une
information côté client, dans
le cadre d'une application web ?
8. Les mots de passes sont des données sensibles.
a. Quelles sont les autres données sensibles que peut manipuler
une application web aujourd'hui ?
b. Quelles sont les précautions à prendre pour protéger ces
données sensibles ?
9. En SQL, à quoi sert une jointure ?
10. En SQL, à quoi sert une requête imbriquée ? Dans quels cas son
utilisation n'est pas
recommandée ?
11. Comment procéder pour modifier la valeur d'un champ simple
(booléen) d'une base de donnée relationnelle dans une table à plus
de dix millions d'entrées ? Quelles précautions prendre ? Une
requête SQL est-elle suffisante ?
12. En CSS, quelle est la différence entre display:block;,
display:inline; et display:inline-block; ?
13. En CSS, que signifie position:absolute; ?
14. C'est quoi la sérialisation (définition générale, puis
peut-être 1 ou 2 exemples de technos)
15. Expérience Posix/Linux ?
16. Quel est ton éditeur de texte préféré ? (question pour
parler, pas de jugement de valeur, mais j'apprécie quelqu'un
qui maîtrise ses outils)
17. Qu'est-ce qu'un test unitaire ?
18. Définition d'un code de qualité ?
19. As-tu déjà travaillé dans une grosse équipe (>5 développeurs) ?
Question bonus :
21. Pourquoi es-tu développeur ?
|
> Bonjour Tristan,
Bonjour F****** !
> Je te propose un petit questionnaire pour commencer si tu veux bien.
> Règle de l'exercice: j'aimerais que tu répondes à 12 questions parmi
> celles-ci après. La question bonus est obligatoire.
> Il n'y a évidemment pas de réponse parfaite, mais nous évaluerons les > tiennes autant sur la forme que sur le fond. Réponds instinctivement et naturellement.
> 3. Quel est le rôle du Routeur dans une application backend ?
Instancier le contrôleur adéquat pour un couple requête/méthode(http) donné.
(en prenant pour hypothèse un couple front/backend web, client ou api)
> 4. Quelles sont les stratégies possibles pour communiquer entre un
> backend et une application client (native, web, ou autre) ?
Ouvrir une socket persistante (surtout dans le cas d'un client natif),
avec le risque de charger le serveur inutilement.
Fournir une API Json/Xml coté backend et "taper dedans" coté client
(dans le cas d'une appli Web, avec XmlHTTPRequest ou son encapsulation
via un framework JS), voire faire un poll régulier par le même biais,
j'éviterais de jouer trop avec le timeout sur une infra à fort trafic.
Fournir une API HTTP Restful pour les communications vers l'extérieur.
> 6. Qu'est-ce qu'un cache ? Donne quelques exemples de stratégie de
cache que tu as déjà utilisé (client ou backend)
Un cache est le résultat d'un traitement plus ou moins coûteux, enregistré temporairement (ou pas) dans le but d'être servi rapidement,
quasiment "gratuitement" par rapport au traitement d'origine.
J'ai déjà mis en place (coté backend, php) des solutions de cache par pages entières (dans le cas de contenus globalement persistants), par blocs (use-case type en e-commerce: produits similaires), et dans un autre domaine (hébergement d'images à fort trafic) un cache un peu
spécial (déplacer les images les plus vues vers une partition ramfs
et remplacer le fichier d'origine par un lien symbolique). Plus spécifiquement, php_apc m'a été très utile pour stocker des données légères avec des timeouts modérés, pour décharger un peu
les serveurs mysql d'une multitude de requêtes, certes légères, mais
redondantes.
> 7. Quelles technologies peut-on utiliser pour persister une
> information côté client, dans
> le cadre d'une application web ?
L'éternel cookie, WebStorage en HTML5, et anciennement feu IndexedDb
> 8. Les mots de passes sont des données sensibles.
> a. Quelles sont les autres données sensibles que peut manipuler
> une application web aujourd'hui ?
Toutes les données nominatives, adresses (physiques et mail), les
éventuelles informations de paiement dans le cas ou elles ne seraient
pas gérées par un tiers de confiance.
> b. Quelles sont les précautions à prendre pour protéger ces
> données sensibles ?
Hasher les mots de passe (avec grain de sel et un algorithme décent)
Crypter les données sensibles avec un couple de clés si réalisable
Privilégier les connexions SSL entre client et serveur.
> 9. En SQL, à quoi sert une jointure ?
Une jointure sert à remonter/insérer des tuples constitués de données
de plusieurs tables.
> 11. Comment procéder pour modifier la valeur d'un champ simple
> (booléen) d'une base de donnée relationnelle dans une table à plus
> de dix millions d'entrées ? Quelles précautions prendre ? Une
> requête SQL est-elle suffisante ?
Une requête SQL unique risque de locker la table, faire monter la charge
de manière aberrante et mettre tout le SI sur les genoux. A chaud, j'envisage la modification par paquets de l'ordre de grandeur d'1k entrées (soit 10k itérations), en récupérant d'abord les id (requête imbriquée) pour éviter
un "LIMIT X,Y" dans l'UPDATE. Quitte à écrire un script pour automatiser les itérations en fonction de la charge (vraisemblablement plus faible de nuit).
> 12. En CSS, quelle est la différence entre display:block;,
display:inline; et display:inline-block; ?
Display:block fait occuper toute la largeur disponible au conteneur. Ex: <div>
Display:inline fait occuper uniquement la zone nécessaire au contenu,
en largeur et hauteur. Ex: <span>
Display:inline-block fait se comporter le conteneur comme inline pour son environnement, et block pour son contenu.
> 14. C'est quoi la sérialisation (définition générale, puis
peut-être 1 ou 2 exemples de technos)
La sérialisation, c'est "mettre à plat" un objet ou une structure de données
plus ou moins complexe dans le but de la mettre en cache, la stocker ou la transmettre.
Exemples: La sérialisation propriétaire de PHP (mauvais exemple, changer exemple),
XML-RPC, Soap, ou encore Gears.
> 15. Expérience Posix/Linux ?
Un peu de développement standard Posix sur des cibles industrielles en BTS.
J'ai mis au point l'infrastructure de mon ancienne boite sous linux, un cluster
de 7 machines sous Debian Etch (2 front-ends web, 2 filers, 2 serveurs mysql en réplication master/master + load-balancing "quick and dirty" - qui marchait à merveille,
et une machine dédiée au monitoring métier + stockage des backups).
> 16. Quel est ton éditeur de texte préféré ? (question pour
> parler, pas de jugement de valeur, mais j'apprécie quelqu'un
> qui maîtrise ses outils)
Sous linux en ligne de commande, je préfère vim. J'ai essayé Emacs, mais j'ai
taillé ma barbe depuis un moment
Jamais utilisé d'environnement mac, mais textmate a l'air vraiment sympa.
Sous windows, Notepad++ est un bon outil à tout faire. Pour les développements sérieux,
j'ai une licence Zend Studio pour PHP (5.5, la v6 est une surcouche d'Eclipse...)
J'apprécie l'autocomplétion, les hints contextuels, et l'intégration des outils
de versionnement dans les IDE qui se respectent.
> 18. Définition d'un code de qualité ?
Un code de qualité, idéalement, s'auto-commente. Les variables ont des noms choisis avec soin,
les design patterns sont utilisés à bon escient, et l'architecture globale inspire
par sa rationalité. Un code bien indenté, qui respecte les standards imposés par l'entreprise.
Documenté dans le source de manière à pouvoir générer la doc via DOxygen ou autres.
> Question bonus :
> 21. Pourquoi es-tu développeur ?
C'est une longue histoire, permets-moi de développer (au risque d'un tl;dr)
Note@hfr Spoiler, détails de vie, nobrag, nohate, noflame. Sinon je sors ma bite.
Spoiler :
Gamin, le mercredi, j'étais chez mes grands parents en l'absence d'école.
Je m'ennuyais comme un rat mort, jusqu'à ce que je trouve le manuel du GWbasic
de l'époque, livré le Thomson TO-16 de mon grand-père, vers 8/9 ans.
Le manuel était en anglais, pas réellement un problème (tous les jeux vidéos
sur la NES 8 bits étaient en anglais..). J'ai commencé par recopier bêtement
les exemples de code du bouquin, puis à les modifier. Plus tard, quand mon père a acheté son premier PC (dos 6.22/w3.11), j'ai trouvé QBasic, un peu plus pointu, mais franchement frustrant. Faire des interfaces graphiques en mode 12 (640x480x4) avec des icônes qui s'affichaient au ralenti (point à point, tout un calvaire) et interface au clavier, pas de gestion d'évènements, m'ont amené à demander VB4 (édition standard) pour Noël. Après ça, c'était écrit... Passage sous linux quand les poils ont poussé, apprentissage du C, découverte de Pascal, puis du HTML. Plus tard, PHP. Comme beaucoup j'ai passé un temps infini à réinventer la roue, puis à me rendre compte que je perdais du temps. Bifurcation vers l'open-source, quelques contribs anecdotiques, premier poste en tant que dev junior web, dans une start-up où tout était à faire. Passer de 150 sites chacun hébergés sur leur propre mutu ovh vers une infra dédiée, ça plaisait pas à mon N+1 (entrepreneur sans grandes notions techniques). J'ai donc pondu un document d'une trentaine de pages sur les avantages de ladite proposition, avec une maquette d'un backoffice métier, storyboardé, et scaffoldé vite fait sur ma dédibox. L'outil en question a permis de multiplier le CA de la boite par 7 en deux ans et de diviser le temps de travail répétitif par 4. Autant le coté CA me
dépasse un peu, n'étant pas matérialiste mais l'optimisation du temps de travail rébarbatif pour le reste du staff a été ma plus grande satisfaction. Plus généralement, j'ai une certaine facilité pour voir "the big picture" et scinder
un problème complexe en une multitude de sous-systèmes plus triviaux. J'aime autant réfléchir au problème global, le modéliser, que travailler en binôme pour coder à proprement parler. C'est une gymnastique de l'esprit qui ne me lasse pas, chaque nouveau défi est l'occasion d'apprendre d'avantage. Tl;dr probablement  |
J'espère avoir répondu à tes attentes. J'ai commencé par répondre à toutes les questions
puis j'ai fait un tri pour avoir les réponses les plus détaillées possibles.
En te souhaitant bonne réception,
Tristan. |