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