Bonjour M. Gentil. Vous venez pour la position de stagiaire ingénieur senior en periode d’essai sur 3 ans ?
C’est bien, c’est bien.
Nous avons des perspectives de progression fascinantes dans notre SS3I au carré.
J’ai juste quelques tests à vous faire passer. Trois fois rien. Simple formalité administrative. Vous comprenez, on ne peut pas embaucher pas n’importe quel Bac + 5 et le payer SMIC, comme ça sur un coup de tête.
Ce n’est pas contre vous, non.
Pourriez-vous me dire ce qu’affiche ce snippet ? (mouahahahahaha, rire diabolique intérieur)
def test(): try: return 1 + "1" except TypeError: return "exception" finally: return "finally" print test() |
Et celui-là, il affiche la stack trace ou pas ?
def test(): try: print 1 + "1" except TypeError: raise ValueError('Test') finally: return "finally" print test() |
Bon ok, mais si on a un générateur alors ?
def test(): try: yield 1 + "1" except TypeError: yield 'typerror' return finally: yield "finally" return yield "Out" for value in test(): print value |
Quelle exception sera catchée, dans le bout de code suivant ? (tapoter son style de manière énervante sur la table)
def test(): try: assert 1 + "1" except AssertionError: print "assertionerror" except Exception: print "exception" except TypeError: print "typerror" test() |
Je vois. Donc finally est exécuté dans tous les cas ?
def test(): def foo(): foo() try: foo() except RuntimeError: print 'runtimeerror' finally: print 'finally' test() |
Vous êtes sûr ? VRAIMENT dans tous les cas ? (regard appuyé bien stressant, travaillé durant un poste de manager chez Quick)
def test(): try: PRINTEUH ! except SyntaxError: print 'syntaxerror' finally: print 'finally' test() |
VRAIMENT, VRAIMENT, dans tous les cas ? Mais alors, VRAIMENT ? (prendre la voix d’Alain Chabat, parce qu’arrivé à ce stade là c’est juste plus rigolo)
def test(): def foo(bar): print bar return foo, bar bar = 'bar' try: while True: foo, bar = foo(bar) except RuntimeError: print 'runtimeerror' finally: print 'finally' test() |
Ne vous inquiétez pas, nous ne vous JUgeons paaaaaaas. Détendez-vous. Allez. Une petite dernière. Je vous aide. sys.exit(1)
retourne le code 1.
import sys def test(l=[]): print l try: return 1 + "1" except TypeError: return l or l.append(sys.exit(1)) finally: print "Je sais plus là, sérieux" if len(l) < 1: test() test() test() |
Bon, je sens que vous êtes fatigué. On va arrêter là peut être. Vous êtes le genre à vous en tenir là, hein ? Non. Très bien, très bien. Voici un code sur lequel on planche en interne depuis une semaine pour comprendre combien de fois il affiche finally, mais on s’est dit que vous pourriez le résoudre gratuitement pour nous:
import sys import time import multiprocessing from Queue import Empty in_queue = multiprocessing.Queue() out_queue = multiprocessing.Queue() def worker(): while True: try: res = in_queue.get(timeout=0.1) if res == 'stop': sys.exit(1) print res except (Empty, multiprocessing.TimeoutError): pass finally: print 'finally' process = multiprocessing.Process(target=worker) process.start() in_queue.put('test') in_queue.put('stop') print 'afterstop' time.sleep(1) print 'done' |
Merci, ce sera tout.
Bon WE, monsieur Gentil.
Nous gardons votre CV. On vous recontactera.
pourquoi cette torture de bon matin ?
une guêpe t’as piquée quand t’étais môme…
J’étais d’humeur :-)
Salut,
Concrètement vous en pensez quoi, vous,
de ces tests de recrutement ?
Je n’ai jamais compris l’intérêt..mais je ne sais
pas si c’est parce que je me plante toujours (c’est
le but recherché en plus) et que je suis aigri.
Notez bien qu’au final vous vous retrouvez quand même à gérer
du code pourri, une vieille version de language, des tables à 300 colonnes, un vieux svn aux branches ingérables, et bien d’autres bad pratices sur lequels je ne m’étends pas au risque de m’énerver…
C’est pas issu d’un vrai test de recrutement hein. C’est juste des brain teaser Python que j’ai posté pour faire réfléchir, enrobé dans du texte pour faire rire.
Le seul test valable pour embaucher un développeur, c’est de lui filer une tâche, de lui laisser l’après-midi dessus (quitte à le payer), et de regarder le résultat.
C’est vraiment salaud :o
Pour moi y en a un qui va même pas être interprèté (SyntaxError) et un qui boucle à l’infini (foo, bar = foo(bar))
Hé oui, mais est-ce que tu aurais trouvé sans lancer le code ;-) ?
Haha,
d’habitude je lurke sur votre site comme une petite crotte, mais là je dois avouer que c’était tellement savoureux que fallait que je le dise. Je me suis retrouvé à bosser 2 mois en SSII y’a un bon moment. Un vrai accident de parcours, (si si j’vous le jure !!) … et ça me rappelle tellement de souvenirs. Surtout les tests bidon et le regard du manager de chez Quick.
Bon sinon entièrement d’accord, la vrai façon d’évaluer un mec pour un poste aujourd’hui c’est deux choses : la discussion (avec une bière ça marche aussi) et un mini projet qui ressemble à quelque chose.