我在MATLAB中编程了很多年,但在过去的几年中转而使用R,所以我有点不习惯了.我今天正在采访一位自称为MATLAB专家的候选人.
我应该问什么MATLAB面试问题?
其他一些有此资源的网站:
gno*_*ice 17
这有点主观,但我会咬......;)
对于自称为MATLAB专家的人来说,以下是我个人希望他们能够在采访中说明的一些内容:
熟悉MATLAB中的函数类型,特别是嵌套函数.具体来说,给出以下功能:
function fcnHandle = counter
value = 0;
function currentValue = increment
value = value+1;
currentValue = value;
end
fcnHandle = @increment;
end
Run Code Online (Sandbox Code Playgroud)
他们应该能够告诉你变量的内容output
将在下面的代码中,而不是在MATLAB中运行它:
>> f1 = counter();
>> f2 = counter();
>> output = [f1() f1() f2() f1() f2()]; %# WHAT IS IT?!
Run Code Online (Sandbox Code Playgroud)Mat*_*oug 13
我们在MathWorks的技术支持部门获得了几个新人.这都是招聘后(我没有参与招聘),但我喜欢结识人,所以我给他们"不可能和适应性的MATLAB编程挑战"
我从MATLAB开始,给他们一些带有数据的.MAT文件.我请他们分析,没有进一步的指示.我可以很快感受到他们的实际体验.
http://blogs.mathworks.com/videos/2008/07/02/puzzler-data-exploration/
实际的挑战并不意味着什么,我从观察他们的尝试中学到更多.
他们是在制作脚本,函数,命令行还是基于GUI?他们似乎清楚地知道他们要去哪里吗?他们对自己所做的事情有多大的信心?
他们是计算机科学家还是学会编程的工程师.CS专业学生倾向于做一些事情,比如立即关闭括号,以及其他类似的小优化.一直使用MATLAB的人倾向于从绘图命令中捕获句柄以供以后使用.
他们在文档中导航的速度有多快?一旦我看到他们走向"正确"的道路,那么我将改变挑战,看看他们能够多快地完成情节,拉出子矩阵等......
我会抛出Project Euler的一些旧东西.大多数情况下只是提出问题,直到我们中的一个人难倒.
鉴于Matlab的主要(仅?)数据类型是双精度浮点矩阵,并且大多数人使用浮点运算 - 无论他们是否知道 - 我很惊讶没人提出要求基本浮点数的问题.以下是一些可变难度的浮点问题:
|x|
IEEE dp fpn 的范围是多少?
大概有多少IEEE dp fpns?
什么是机器epsilon?
x = 10^22
完全可以表示为dp fpn.什么是fpns xp和xs正好在x以下?
有多少dp fpns [1,2)
?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.
Run Code Online (Sandbox Code Playgroud)
你喜欢哪个?说明.
在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
你会乘坐你的软件编写的飞机吗?
Colin K不会雇用我(并且可能会解雇我)说"Matlab的主要(仅?)数据类型是双精度浮点矩阵".
当Matlab开始时,所有用户都看到了,但多年来他们添加了他们腼腆地称之为"存储类"的东西:单,(u)int8,16,32,64等.但这些并不是真正的类型,因为你不能对它们进行有用的算法.这些存储类的算法非常慢,因此它们作为类型无用.是的,他们确实节省了存储空间,但如果你不能做任何有价值的事情,那又有什么意义呢?
请参阅我的帖子(第13号),其中我展示了int32s上的算术比双算术慢12倍,而MathWorkser Loren Shure说"默认情况下,MATLAB变量是双精度数组.在过去的日子里,这些只是ONLY MATLAB中的一种数组.当时甚至字符数组都存储为double值."
对我来说,Matlab中最大的缺陷是缺少适当的类型,例如C和Fortran中可用的类型.
顺便说一句,科林,你对问题14的回答是什么?
询问有关他在您的域中应用MATLAB的专业知识和经验的问题.
询问他将如何设计一个在MATLAB中实现的应用程序.如果他提到MATLAB的最新功能,请他解释它们,以及它们与它们替换或补充的旧功能有何不同,以及为什么它们更适合(或不是).
询问有关他对MATLAB数据结构的专业知识的问题.我遇到的许多MATLAB"专家"非常擅长编写代码,但在确定手头工作的最佳数据结构方面却很差.这通常是他们成为领域专家的直接结果,他们选择了MATLAB而不是接受过计算机专业培训.结果通常是良好的代码,必须补偿错误的数据结构.
向其他语言/系统询问有关其经验的问题,并邀请他扩展他对MATLAB相对优势和劣势的观察.
询问有关优化MATLAB程序的重要提示.期待答案:矢量化,预分配,清除未使用的变量等.
询问他对MATLAB剖析器,调试器和lint工具的熟悉程度.我最近发现这里的MATLAB"专家"从未在10年内使用该工具找到了分析器.
这应该让你开始.
I. 我认为最近关于 索引的问题对于“专家”来说是一个非常好的问题。
我有一个二维数组,称之为“A”。我还有另外两个二维数组,称它们为“ix”和“iy”。我想创建一个输出数组,其元素是 x_idx 和 y_idx 提供的索引对处的 A 元素。我可以通过循环来完成此操作,如下所示:
Run Code Online (Sandbox Code Playgroud)for i=1:nx for j=1:ny output(i,j) = A(ix(i,j),iy(i,j)); end end
我怎样才能在没有循环的情况下做到这一点?如果我输出 = A(ix,iy),我会得到 (ix)X(iy) 整个范围内的 A 值。
二. 运算符的基本知识,例如两个矩阵之间的逐元素乘法 ( .*
)。
三.逻辑索引 - 生成一个随机对称矩阵,其值为0-1
并将以上所有值设置T
为 0。
四.将包含一些格式正确的数据的文件读入矩阵 ( importdata
)
V. 这是另一个甜蜜的问题
我有三个一维数组,其中元素是一些值,我想将一个数组中的每个元素与其他两个数组中的所有元素进行比较。
例如:
Run Code Online (Sandbox Code Playgroud)a=[2,4,6,8,12] b=[1,3,5,9,10] c=[3,5,8,11,15]
我想知道不同数组中是否有相同的值(本例中有 3,5,8)
顺便说一句,您的面试者很有可能会在 Google 上搜索“MATLAB 面试问题”并看到这篇文章:)
归档时间: |
|
查看次数: |
46429 次 |
最近记录: |