Я много лет программировал в MATLAB, но переключался на использование R исключительно за прошлые несколько лет, таким образом, я немного вне практики. Я беру интервью у кандидата сегодня, который описывает себя как эксперта MATLAB.
Какие вопросы интервью MATLAB я должен задать?
Некоторые другие сайты с ресурсами для этого:
Задайте вопросы о его знаниях и опыте применения MATLAB в вашем домене.
Задайте вопросы о том, как он подойдет к разработке приложения для реализации в MATLAB. Если он ссылается на недавние функции MATLAB, попросите его объяснить их, и чем они отличаются от более старых функций, которые они заменяют или дополняют, и почему они предпочтительнее (или нет).
Задайте вопросы о его опыте работы со структурами данных MATLAB. Многие из «экспертов» MATLAB, с которыми я столкнулся, очень хорошо пишут код, но очень плохо определяют, какие структуры данных являются лучшими для выполняемой работы. Это часто является прямым следствием того, что они являются экспертами в предметной области, которые выбрали MATLAB, а не обучены информатике. В результате часто получается хороший код, который должен компенсировать неправильные структуры данных.
Задайте вопросы о его опыте, если таковой имеется, с другими языками / системами и предложите ему расширить свои наблюдения об относительных сильных и слабых сторонах MATLAB.
Спросите основные советы по оптимизации программ MATLAB. Ожидайте ответов: векторизация, предварительное выделение, очистка неиспользуемых переменных и т. Д.
Спросите о его знакомстве с профилировщиком MATLAB, отладчиком и lint инструментами. Я недавно обнаружил, что «эксперт» MATLAB в углу здесь ни разу за 10 лет использования этого инструмента не нашел профилировщика.
Это должно помочь вам начать работу.
Возможный вопрос: У меня есть массив A из n троек R, G, B. Это матрица 3xn. У меня есть еще один массив B в форме 1xn, в котором хранится значение индекса (ассоциация с кластером) для каждого триплета.
Как построить триплеты A в трехмерном пространстве (используя функцию plot3
), раскрасив каждый триплет в соответствии с его индексом в B? (Цель состоит в том, чтобы качественно оценить мою кластеризацию)
Действительно, действительно хорошие программисты, которые являются новичками в MATLAB, не смогут дать вам эффективное (== стиль MATLAB) решение. Однако это очень простая проблема, если вы знаете свой MATLAB.
У нас в MathWorks есть несколько новых сотрудников в отделе технической поддержки. Это все после приема на работу (я не участвую в приеме на работу), но мне нравится знакомиться с людьми, поэтому я даю им «Невозможную и адаптивную задачу программирования MATLAB»
. Я начинаю с ними в MATLAB и даю им какой-то .MAT файл с данными в нем. Я прошу их проанализировать это без дополнительных инструкций. Я могу очень быстро почувствовать их реальный опыт.
http://blogs.mathworks.com/videos/2008/07/02/puzzler-data-exploration/
Настоящая проблема ничего не значит, я узнаю больше, наблюдая, как они ее пытаются.
Они создают сценарии, функции, командную строку или графический интерфейс? Кажется, у них есть четкое представление о том, куда они идут? Насколько они уверены в том, что они делают?
Являются ли они компьютерщиками или инженером, который научился программировать. Специалисты по CS обычно делают такие вещи, как немедленное закрытие скобок и другие подобные небольшие оптимизации. Люди, которые какое-то время использовали MATLAB, как правило, захватывают дескрипторы команд построения графиков для последующего использования.
Как быстро они перемещаются по документации? Как только я увижу, что они идут по «правильному» пути, я просто изменю задачу, чтобы посмотреть, как быстро они могут строить графики, извлекать подматрицы и т. Д.
Я выкину кое-что из старых вещей из Project Euler. В основном просто увеличивайте количество вопросов, пока один из нас не окажется в тупике.
I. Я думаю этот недавний вопрос SO по индексированию - очень хороший вопрос для "эксперта".
У меня есть 2D-массив, назовите его «A». У меня есть два других 2D-массива, назовите их "ix" и "iy". Я хотел бы создать выходной массив , элементами которого являются элементы A в парах индексов , предоставленных x_idx и y_idx. Я могу сделать это с помощью следующего цикла:
для i = 1: nx для j = 1: ny output (i, j) = A (ix (i, j), iy (i, j)); end end
Как я могу сделать это без цикла? Если я делаю output = A (ix, iy), я получаю значение для A во всем диапазоне (ix) X (iy).
II. Базовые знания таких операторов, как поэлементное умножение двух матриц (. *
).
III. Логическая индексация - сгенерируйте случайную симметричную матрицу со значениями из 0–1
и установите все значения выше T
равными 0.
IV. Считать файл с некоторыми правильно отформатированными данными в матрицу ( importdata
)
V. Вот еще один интересный вопрос SO
У меня есть три одномерных массива, где элементы являются некоторыми значениями, и я хочу сравнить каждый элемент в одном массиве со всеми элементы в двух других.
Например:
a = [2,4,6,8,12] b = [1,3,5,9,10] c = [3, 5,8,11,15]
Я хочу знать, есть ли одинаковые значения в разных массивах (в этом случае их 3,5,8)
Между прочим , есть отличный шанс, что ваш собеседник загуглиет "Вопросы для интервью MATLAB" и увидит этот пост :)
Немного зависит от того, что вы хотите проверить.
Чтобы проверить беглость MATLAB , есть несколько хороших вопросов о переполнении стека, которые можно использовать, например, для проверки. манипуляции с массивами ( пример 1 , пример 2 ), или вы можете использовать проблемы с исправлением, такие как этот вопрос (признаю, мне это очень нравится one), или загляните в этот список , чтобы узнать о некоторых материалах, сильно специфичных для MATLAB. Если вы хотите быть немного грубым, задайте вопрос вроде этот , где лучшим решением является цикл, а типичное решение в стиле MATLAB просто заполнит память.
Однако может быть более полезным задать более общие вопросы по программированию, которые связаны с вашей областью работы, и посмотреть, решат ли они проблему с помощью MATLAB.
Например, поскольку я занимаюсь анализом изображений, я могу попросить их разработать класс для загрузки изображений различных форматов (эксперт по MATLAB должен знать, как выполнять ООП, в конце концов, он отсутствует уже два года), а затем спросите, как обращаться с большими изображениями (я хочу увидеть проверку того, сколько памяти будет использовано - или, может быть, они знают memory.m
- и услышать о том, как MATLAB обычно работает с двойными) и т. д.
Это немного субъективно, но я укушу ...;)
Для тех, кто является самопровозглашенным экспертом по MATLAB, вот некоторые вещи, которые я лично ожидал бы от них проиллюстрировать в интервью:
Глубокое знание типов функций в MATLAB , в частности вложенных функций . В частности, для следующей функции:
function fcnHandle = counter
value = 0;
function currentValue = increment
value = value + 1;
currentValue = value;
end
fcnHandle = @increment;
end
Они должны быть в состоянии сказать вам, что содержимое переменной output
будет в следующем коде, без запуска его в MATLAB:
>> f1 = counter ();
>> f2 = counter ();
>> вывод = [f1 () f1 () f2 () f1 () f2 ()]; % # ЧТО ЭТО?!
Учитывая, что основным (единственным?) Типом данных Matlab является матрица с плавающей запятой двойной точности, и что большинство людей используют арифметика с плавающей запятой - знают они об этом или нет - меня удивляет, что никто не предложил задавать базовые вопросы с плавающей запятой. Вот несколько вопросов с плавающей запятой переменной сложности:
Каков диапазон | x |
, IEEE dp fpn?
Примерно сколько существует IEEE dp fpn?
Что такое машинный эпсилон ?
x = 10 ^ 22
точно может быть представлен как dp fpn. Что такое fpns xp
и xs чуть ниже и чуть выше x?
Сколько dp fpns в [1,2)
? Сколько атомов находится на краю
1-дюймового кубика сахара?
Объясните, почему sin (pi) ~ = 0
, но cos (pi) = -1
.
Почему , если abs (x1-x2) <1e-10, то
плохая проверка сходимости?
Почему , если f (a) * f (b) <0, то
тест проверки плохого знака?
Средняя точка c
интервала [a, b]
может быть вычислена как:
c1 = (a + b) / 2, или
c2 = a + (ba) / 2, или
c3 = a / 2 + b / 2.
Что вы предпочитаете? Объяснять.
Вычислить в Matlab: a = 4/3; б = а-1; с = Ь + Ь + Ь; e = 1-c;
Математически e
должно быть равно нулю, но Matlab дает e = 2.220446049250313e-016 = 2 ^ (- 52)
, машина эпсилон (eps).Объяснять.
Учитывая, что realmin = 2.225073858507201e-308
, а u = rand
Matlab дает dp fpn, равномерно распределенный в открытом интервале (0,1):
числа с плавающей запятой [2 ^ (- 400), 2 ^ (- 100), 2 ^ (- 1)]
= 3.872591914849318e-121, 7.888609052210118e-031, 5.000000000000000e-001
равно вероятно, будет выведен rand?
Matlab rand
использует rng Mersenne Twister с периодом
(2 ^ 19937-1) / 2
, но есть только около 2 ^ 64
dp fpns. Объяснять.
Найдите наименьшее число fpn двойной точности IEEE x
, 1
x * (1 / x) ~ = 1
.
Напишите короткую функцию Matlab для поиска такого числа.
Ответ: Алан Эдельман, Массачусетский технологический институт
Вы бы полетели на самолете, программное обеспечение которого было написано вами?
Колин К. не нанял бы меня (и, вероятно, уволил бы) за то, что я сказал "этот основной (единственный?) тип данных Matlab - это матрица с плавающей запятой двойной точности ".
Когда запускался Matlab, это было все, что пользователи видели, но с годами они добавили то, что они скромно называют «классами хранения»: single, (u) int8,16,32, 64 и другие. Но на самом деле это не типы , потому что вы не можете делать с ними ПОЛЕЗНУЮ арифметику. Арифметика для этих классов хранения настолько медленная, что они бесполезны как типы. Да, они экономят память, но какой в этом смысл, если вы не можете сделать что-нибудь стоящее с их?
См. мой пост (No.13) здесь , где я показываю, что арифметика для int32s в 12 раз медленнее, чем двойная арифметика, и где MathWorkser Лорен Шур говорит: «По по умолчанию переменные MATLAB представляют собой массивы двойной точности. Раньше дней это был ЕДИНСТВЕННЫЙ вид массивов в MATLAB. В то время даже массивы символов хранились как двойные значения. "
Для меня самым большим недостатком Matlab является отсутствие надлежащего типы, например, доступные в C и Fortran.
Кстати, Колин, каков был ваш ответ на вопрос 14?