答案 0 :(得分:17)
这有点主观,但我会咬......;)
对于自称为MATLAB专家的人来说,以下是我个人希望他们能够在采访中说明的一些内容:
对the types of functions in MATLAB的深入了解,特别是nested functions。具体来说,给出以下功能:
function fcnHandle = counter
value = 0;
function currentValue = increment
value = value+1;
currentValue = value;
end
fcnHandle = @increment;
end
他们应该能够告诉你变量output
的内容将在以下代码中,没有在MATLAB中运行它:
>> f1 = counter();
>> f2 = counter();
>> output = [f1() f1() f2() f1() f2()]; %# WHAT IS IT?!
答案 1 :(得分:13)
我们在MathWorks的技术支持部门获得了几个新人。这都是招聘后(我没有参与招聘),但我喜欢结识人,所以我给他们“不可能和自适应的MATLAB编程挑战”
我从MATLAB开始,给他们一些带有数据的.MAT文件。我请他们分析,没有进一步的指示。我可以很快感受到他们的实际经历。
http://blogs.mathworks.com/videos/2008/07/02/puzzler-data-exploration/
实际的挑战并不意味着什么,我从观察他们的尝试中学到了更多。
他们是在制作脚本,函数,命令行还是基于GUI?他们似乎清楚地知道他们要去哪里吗?他们对自己的工作有多大的信心?
他们是计算机科学家还是学会编程的工程师。 CS专业学生倾向于做一些事情,比如立即关闭括号,以及其他类似的小优化。一直使用MATLAB的人倾向于从绘图命令中捕获句柄以供以后使用。
他们浏览文档的速度有多快?一旦我看到他们走向“正确”的道路,那么我将改变挑战,看看他们能够多快地完成情节,拉出子矩阵等......
我会从Project Euler中遗漏一些旧东西。大多数情况下只是提出问题,直到我们中的一个人难倒。
答案 2 :(得分:9)
鉴于 Matlab 的主要(仅?)数据类型是双精度浮点矩阵,并且大多数人使用浮点运算 - 无论他们是否知道 - 我'我很惊讶没有人建议提出基本的浮点问题。以下是一些可变难度的浮点问题:
{d} fpn的|x|
范围是什么?
大约有多少IEEE dp fpns?
什么是 machine epsilon ?
x = 10^22
完全可以表示为dp fpn。什么是fpns xp
和xs正好在x以下,正好在x?
[1,2)
中有多少dp fpns?一个边缘有多少个原子
1英寸糖块?
解释为什么sin(pi) ~= 0
,但cos(pi) = -1
。
为什么if abs(x1-x2) < 1e-10 then
收敛测试不好?
为什么if f(a)*f(b) < 0 then
是一个错误的签名检查测试?
区间c
的中点[a,b]
可以计算为:
c1 = (a+b)/2, or
c2 = a + (b-a)/2, or
c3 = a/2 + b/2.
你更喜欢哪个?解释 在Matlab中计算:a = 4/3; b = a-1; c = b+b+b; e = 1-c;
在数学上,e
应为零,但Matlab给出e = 2.220446049250313e-016 = 2^(-52)
,机器epsilon(eps)。解释
鉴于realmin = 2.225073858507201e-308
,Matlab的u = rand
给出了在开放区间(0,1)上均匀分布的dp fpn:
浮点数是[2^(-400), 2^(-100), 2^(-1)]
= 3.872591914849318e-121,7.888609052210118e-031,5.00000000000000000e-001
同样可能由兰德输出?
Matlab的rand
使用Mersenne Twister rng,其周期为
(2^19937-1)/2
,但只有大约2^64
dp fpns。解释
找到最小的IEEE双精度fpn x
,1 < x < 2
,以便x*(1/x) ~= 1
。
写一个简短的Matlab函数来搜索这样的数字 答案:Alan Edelman, MIT
您是否会乘坐由您编写软件的飞机?
当Matlab开始时,所有用户都看到了,但这些年来 他们添加了他们腼腆地称之为“存储类”的东西:单身, (u)int8,16,32,64等。但这些并不是真正的类型 因为你不能对它们做有用的算术。算术 这些存储类是如此之慢,以至于它们作为类型无用。 是的,它们确实可以节省存储空间,但如果你不能这样做,那又有什么意义 什么值得与他们相处?
参见my post (No. 13) here,其中我展示了对int32s的算术慢了12倍 双算术和MathWorkser Loren Shure所说的“By 默认情况下,MATLAB变量是双精度数组。在古代 几天,这些是MATLAB中唯一的数组。那时甚至 字符数组存储为double值。“
对我来说,Matlab最大的缺陷就是缺乏合适的类型, 例如C和Fortran中提供的那些。
顺便说一下,科林,你对问题14的答案是什么?
答案 3 :(得分:8)
询问有关他在您的域中应用MATLAB的专业知识和经验。
询问他将如何设计一个在MATLAB中实现的应用程序。如果他参考MATLAB的最新特性,请他解释它们,以及它们如何与它们取代或补充的旧特征不同,以及为什么它们更可取(或不是)。
询问他对MATLAB数据结构的专业知识。我遇到的许多MATLAB“专家”非常擅长编写代码,但在确定手头工作的最佳数据结构方面却很差。这通常是他们成为领域专家的直接结果,他们选择了MATLAB而不是接受过计算机专业培训。结果往往是良好的代码,必须补偿错误的数据结构。
询问与其他语言/系统有关的经验,并邀请他扩展他对MATLAB相对优势和劣势的观察。
询问有关优化MATLAB程序的重要提示。期待答案:矢量化,预分配,清除未使用的变量等。
询问他对MATLAB剖析器,调试器和lint工具的熟悉程度。我最近发现这里的MATLAB“专家”从未在使用该工具的10年内找到了探测器。
这应该让你开始。
答案 4 :(得分:3)
予。我想this recent SO question 索引是一个非常好的问题 对于“专家”。
我有一个2D数组,称之为'A'。我有 另外两个2D阵列,称它们为'ix' 和'我'。我想创建一个 输出数组,其元素是 索引对中A的元素 由x_idx和y_idx提供。我可以 这个循环如下:
for i=1:nx for j=1:ny output(i,j) = A(ix(i,j),iy(i,j)); end end
如果没有循环,我怎么能这样做?如果 我做输出= A(ix,iy),我得到了 A的值在整个范围内 (ⅸ)X(TAI)。
II。运算符的基本知识,如两个矩阵之间的元素乘法(.*
)。
III。逻辑索引 - 生成随机对称矩阵,其值为0-1
,并将T
以上的所有值设置为0。
IV。将包含一些格式正确的数据的文件读入矩阵(importdata
)
我有三个1-d数组,其中包含元素 是一些价值观,我想比较 一个数组中的每个元素都是 其他两个元素。
例如:
a=[2,4,6,8,12] b=[1,3,5,9,10] c=[3,5,8,11,15]
我想知道是否有相同的内容 不同数组中的值(在此 案例有3,5,8)
Btw ,您的受访者很有可能会在Google“MATLAB面试问题”中看到这篇文章:)
答案 5 :(得分:2)
可能的问题: 我有一个n R,G,B三元组的阵列A.它是一个3xn矩阵。我有一个1xn形式的另一个数组B,它存储每个三元组的索引值(与集群的关联)。
如何在3D空间中绘制A的三元组(使用plot3
函数),根据B中的索引为每个三元组着色? (目标是定性评估我的聚类)
真的,非常优秀的MATLAB新手程序员将无法为您提供高效(== MATLAB风格)的解决方案。但是,如果您了解MATLAB,这是一个非常简单的问题。
答案 6 :(得分:1)
取决于您想要测试的内容。
要测试MATLAB流畅度,可以使用几个很好的Stack Overflow问题来测试,例如数组操作(example 1,example 2),或者你可以使用修复 - 像this question这样的问题(我承认,我非常喜欢那个),或者研究{{3对于一些高度MATLAB特定的东西。如果你想要有点意思,可以提出像this list这样的问题,其中最好的解决方案是循环,而典型的MATLAB思维方式只会填满内存。
但是,询问与您的工作领域相关的更一般的编程问题并查看他们是否通过MATLAB解决问题可能更有用。
例如,由于我进行图像分析,我可能会要求他们设计一个用于加载不同格式图像的类(MATLAB专家应该知道如何做OOP,毕竟它已经出现了两年),然后询问如何处理大图像的后续工作(我想查看将使用多少内存 - 或者他们知道memory.m
- 并了解MATLAB通常如何处理双打)等等。