J'ai programmé en MATLAB pendant de nombreuses années, mais je suis passé à l'utilisation de R exclusivement ces dernières années, donc je suis un peu hors de pratique. J'interroge aujourd'hui un candidat qui se décrit comme un expert MATLAB.
Quelles questions d'entretien MATLAB dois-je poser?
Quelques autres sites avec des ressources pour cela:
C'est un peu subjectif, mais je vais mordre ...;)
Pour quelqu'un qui est un expert autoproclamé de MATLAB, voici quelques-unes des choses que je m'attendrais personnellement à ce qu'il puisse illustrer dans une interview:
Une connaissance intime de les types de fonctions dans MATLAB , en particulier fonctions imbriquées . Plus précisément, étant donné la fonction suivante:
function fcnHandle = counter
value = 0;
function currentValue = increment
value = value+1;
currentValue = value;
end
fcnHandle = @increment;
end
Ils devraient pouvoir vous dire quel sera le contenu de la variable output
dans le code suivant, sans l'exécuter dans MATLAB:
>> f1 = counter();
>> f2 = counter();
>> output = [f1() f1() f2() f1() f2()]; %# WHAT IS IT?!
Nous avons plusieurs nouvelles personnes dans le service de support technique ici chez MathWorks. Tout cela est post-embauche (je ne suis pas impliqué dans l'embauche), mais j'aime apprendre à connaître les gens, alors je leur donne le "défi de programmation MATLAB impossible et adaptatif"
Je commence avec eux à MATLAB et leur donne un fichier .MAT avec des données. Je leur demande de l'analyser, sans autre instruction. Je peux très rapidement avoir une idée de leur expérience réelle.
http://blogs.mathworks.com/videos/2008/07/02/puzzler-data-exploration/
Le défi réel ne veut pas dire grand-chose, j'apprends plus en les regardant tenter.
Créent-ils des scripts, des fonctions, une ligne de commande ou une interface graphique? Semblent-ils avoir une idée claire de ce qu'ils veulent faire? Quel niveau de confiance ont-ils dans ce qu'ils font?
Sont-ils des informaticiens ou un ingénieur qui a appris à programmer. Les majors CS ont tendance à faire des choses comme fermer immédiatement leurs parenthèses, et d'autres petites optimisations de ce genre. Les personnes qui utilisent MATLAB depuis un certain temps ont tendance à capturer les poignées des commandes de traçage pour une utilisation ultérieure.
À quelle vitesse parcourent-ils la documentation? Une fois que je vois qu'ils empruntent le `` bon '' chemin, je changerai simplement le défi pour voir à quelle vitesse ils peuvent faire des parcelles, extraire des sous-matrices, etc.
Je vais jeter quelques vieux trucs du projet Euler. Surtout, augmentez simplement les questions jusqu'à ce que l'un de nous soit perplexe.
Étant donné que le type de données principal (uniquement?) De Matlab est la matrice à virgule flottante double précision, et que la plupart des gens utilisent l'arithmétique à virgule flottante - si elles sachez-le ou non - je suis étonné que personne n'ait suggéré de poser des questions de base en virgule flottante. Voici quelques questions en virgule flottante de difficulté variable:
Quelle est la plage de |x|
, Un FPN IEEE dp?
Combien y a-t-il approximativement de FPN IEEE dp?
Qu'est-ce que machine epsilon?
x = 10^22
Est exactement représentable comme un dp fpn. Quels sont les fpns xp et xs juste en dessous et juste au-dessus de x?
Combien de FPN dp y a-t-il dans [1,2)
? Combien d'atomes sont sur un bord d'un morceau de sucre de 1 pouce?
Expliquez pourquoi sin(pi) ~= 0
, mais cos(pi) = -1
.
Pourquoi if abs(x1-x2) < 1e-10 then
est-il un mauvais test de convergence?
Pourquoi if f(a)*f(b) < 0 then
est-il un test de vérification de mauvais signe?
Le point médian c
de l'intervalle [a,b]
Peut être calculé comme suit:
c1 = (a+b)/2, or
c2 = a + (b-a)/2, or
c3 = a/2 + b/2.
Lequel préfères-tu? Explique.
Calculer dans Matlab: a = 4/3; b = a-1; c = b+b+b; e = 1-c;
Mathématiquement, e
doit être égal à zéro mais Matlab donne e = 2.220446049250313e-016 = 2^(-52)
, machine epsilon (eps). Explique.
Étant donné que realmin = 2.225073858507201e-308
, Et u = Rand
De Matlab donne un dp fpn uniformément réparti sur l'intervalle ouvert (0,1):
Les nombres à virgule flottante [2^(-400), 2^(-100), 2^(-1)]
= 3.872591914849318e-121, 7.888609052210118e-031, 5.000000000000000e-001
tout aussi susceptible d'être produit par Rand?
Le Rand
de Matlab utilise le rng Mersenne Twister qui a une période de (2^19937-1)/2
, Mais il n'y a qu'environ 2^64
Dp fpns. Explique.
Trouvez le plus petit fpn double précision IEEE x
, 1 < x < 2
, Tel que x*(1/x) ~= 1
.
Écrivez une courte fonction Matlab pour rechercher un tel nombre.
Réponse: Alan Edelman, MIT
Voleriez-vous dans un avion dont le logiciel a été écrit par vous?
Colin K ne m'embaucherait pas (et me congédierait probablement) pour avoir dit "que le type de données principal (le seul?) De Matlab est la matrice à virgule flottante double précision".
Lorsque Matlab a commencé, c'était tout ce que l'utilisateur a vu, mais au fil des ans, ils ont ajouté ce qu'ils appellent timidement des "classes de stockage": single, (u) int8,16,32,64, et autres. Mais ce ne sont pas vraiment des types car vous ne pouvez pas faire d'arithmétique UTILE dessus. L'arithmétique sur ces classes de stockage est si lente qu'elles sont inutiles en tant que types. Oui, ils économisent du stockage, mais à quoi ça sert si vous ne pouvez rien faire d'utile avec eux?
Voir mon article (n ° 13) ici , où je montre que l'arithmétique sur int32s est 12 fois plus lente que l'arithmétique double et où MathWorkser Loren Shure dit "Par défaut, les variables MATLAB sont des tableaux à double précision. Dans le autrefois, il s'agissait du SEUL type de tableaux dans MATLAB. À l'époque, même les tableaux de caractères étaient stockés sous forme de valeurs doubles. "
Pour moi, le plus gros défaut de Matlab est son manque de types appropriés, tels que ceux disponibles en C et Fortran.
Au fait Colin, quelle a été votre réponse à la question 14?
Posez des questions sur son expertise et son expérience dans l'application MATLAB dans votre domaine.
Posez des questions sur la manière dont il aborderait la conception d'une application à mettre en œuvre dans MATLAB. S'il se réfère à des fonctionnalités récentes de MATLAB, demandez-lui de les expliquer, et en quoi elles sont différentes des anciennes fonctionnalités qu'elles remplacent ou complètent, et pourquoi elles sont préférables (ou non).
Posez des questions sur son expertise avec les structures de données MATLAB. Bon nombre des "experts" MATLAB que j'ai rencontrés sont très bons pour écrire du code, mais très mauvais pour déterminer quelles sont les meilleures structures de données pour le travail en cours. C'est souvent une conséquence directe du fait qu'ils sont des experts du domaine qui ont choisi MATLAB plutôt que d'avoir été formés à l'informatique. Le résultat est souvent un bon code qui doit compenser les mauvaises structures de données.
Posez des questions sur son expérience, le cas échéant, avec d'autres langages/systèmes et invitez-le à développer ses observations sur les forces et faiblesses relatives de MATLAB.
Demandez les meilleurs conseils sur l'optimisation des programmes MATLAB. Attendez-vous aux réponses: vectorisation, pré-allocation, effacement des variables inutilisées, etc.
Renseignez-vous sur sa connaissance du profileur MATLAB, du débogueur et des outils lint . J'ai récemment découvert que "l'expert" MATLAB dans le coin ici n'avait jamais, en 10 ans d'utilisation de l'outil, trouvé le profileur.
Cela devrait vous aider à démarrer.
I. Je pense que cette récente SO question sur l'indexation est une très bonne question pour un "expert".
J'ai un tableau 2D, appelez-le "A". J'ai deux autres tableaux 2D, appelez-les "ix" et "iy". Je voudrais créer un tableau de sortie dont les éléments sont les éléments de A aux paires d'index fournies par x_idx et y_idx. Je peux le faire avec une boucle comme suit:
for i=1:nx for j=1:ny output(i,j) = A(ix(i,j),iy(i,j)); end end
Comment puis-je faire cela sans la boucle? Si je produis = A (ix, iy), j'obtiens la valeur de A sur toute la plage de (ix) X (iy).
II. Connaissance de base des opérateurs comme la multiplication élément par élément entre deux matrices (.*
).
III. Indexation logique - génère une matrice symétrique aléatoire avec des valeurs de 0-1
et définissez toutes les valeurs au-dessus de T
sur 0.
IV. Lire un fichier avec des données correctement formatées dans une matrice (importdata
)
V. Voici ne autre douce SO question
J'ai trois tableaux 1-d où les éléments sont des valeurs et je veux comparer chaque élément d'un tableau à tous les éléments des deux autres.
Par exemple:
a=[2,4,6,8,12] b=[1,3,5,9,10] c=[3,5,8,11,15]
Je veux savoir s'il y a les mêmes valeurs dans différents tableaux (dans ce cas, il y en a 3,5,8)
Btw , il y a de fortes chances que votre interlocuteur Google "Questions d'entretien MATLAB" et voie ce post :)
Question possible: j'ai un tableau A de n triplets R, G, B. C'est une matrice 3xn. J'ai un autre tableau B sous la forme 1xn qui stocke une valeur d'index (association à un cluster) pour chaque triplet.
Comment tracer les triplets de A dans l'espace 3D (en utilisant plot3
fonction), colorant chaque triplet selon son index en B? (Le but est d'évaluer qualitativement mon clustering)
Vraiment, les très bons programmeurs qui sont novices en MATLAB ne pourront pas vous donner une solution efficace (== style MATLAB). Cependant, c'est un problème très simple si vous connaissez votre MATLAB.
Cela dépend un peu de ce que vous voulez tester.
Pour tester MATLAB fluence, il y a plusieurs questions Nice Stack Overflow que vous pouvez utiliser pour tester par exemple manipulations de tableaux ( exemple 1 , exemple 2 ), ou vous pouvez utiliser des problèmes de correction comme cette question (je l'admets, je suis plutôt friands de celui-là), ou regardez dans cette liste des trucs très spécifiques à MATLAB. Si vous voulez être un peu méchant, posez une question comme celle-ci , où la meilleure solution est une boucle, et la solution typique de MATLAB-way-of-thinking ne ferait que remplir la mémoire.
Cependant, il peut être plus utile de poser des questions de programmation plus générales liées à votre domaine de travail et de voir si le problème est résolu avec MATLAB.
Par exemple, puisque je fais de l'analyse d'images, je peux leur demander de concevoir une classe pour charger des images de différents formats (un expert MATLAB devrait savoir comment faire la POO, après tout, cela fait maintenant deux ans), puis demander des suivis sur la façon de traiter les images volumineuses (je veux voir une vérification de la quantité de mémoire utilisée - ou peut-être qu'ils savent memory.m
- et savoir comment MATLAB fonctionne habituellement avec les doubles), etc.