我在MATLAB中编程了很多年,但是在过去的几年中只使用 R,所以我有点不习惯。今天我正在面试一位自称是 MATLAB 专家的候选人。
我应该问哪些 MATLAB 面试问题?
其他一些有资源的网站:
"Matlab interview questions" on Wilmott "MATLAB Questions and Answers" on GlobaleGuildLine "Matlab Interview Questions" on CoolInterview这有点主观,不过我会咬...;)
对于自称是 MATLAB 专家的人来说,以下是我个人希望他们能够在采访中说明的一些事情:
如何使用arithmetic operators矩阵或元素的操作。
熟悉所有基本的data types以及如何在它们之间轻松转换。
对矩阵索引和赋值的完整理解,无论是逻辑,线性还是下标索引(基本上,this page of the documentation上的所有内容)。
manipulate multi-dimensional arrays的能力。
对preallocation和vectorization等优化的理解和常规使用。
了解如何在多种不同情况下处理file I/O。
熟悉handle graphics和所有的basic plotting capabilities。
对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?!
我们在 MathWorks 的技术支持部门有几个新人。这都是招聘后的事情 (我没有参与招聘),但我喜欢结识人,所以我给他们“不可能和自适应的 MATLAB 编程挑战”
我从 MATLAB 开始,给他们一些.MAT 文件,里面有数据。我要求他们分析它,没有进一步的指导。我可以很受到他们的实际经验。
://blogs.mathworks/videos/2008/07/02/puzzler-data-exploration/实际的挑战并不意味着什么,我从观看他们的尝试中学到了更多。
他们是基于脚本、函数、命令行还是 GUI?他们似乎清楚地知道他们要去哪里吗?他们对自己正在做的事情有什么信心?
他们是计算机科学家还是学会编程的工程师。CS 专业的学生倾向于做一些事情,例如立即关闭括号,以及其他类似的小优化。使用 MATLAB 一段时间的人倾向于从绘图命令中捕获句柄以供以后使用。
他们浏览文档的速度有多快?一旦我看到他们走在“正确”的道路上,那么我将改变挑战,看看他们可以多快地绘制,拉出子矩阵等...
我会扔掉欧拉计划中的一些旧东西。大多数情况下,只是增加问题,直到我们中的一个被难住。
浮点问题
鉴于Matlab的主要(唯一?)数据类型是双精度浮点矩阵,并且大多数人使用浮点运算-无论他们是否知道-我很惊讶没有人建议问基本的浮点问题。
IEEE dp fpn|x|
的范围是多少?
大约有多少个 IEEE dp fpns?
什么是machine epsilon?
x = 10^22
完全可以表示为 dp fpn。x 正下方和正上方的 fpns xp 和 xs 是什么?
[1,2)
中有多少个 dp fpn?1 英寸方糖的边缘有多少个原子?
sin(pi)~=0
,butcos(pi) =-1
.
为什么if abs(x1-x2) < 1e-10 then
是一个糟糕的收敛测试?
为什么if f(a)*f(b) < 0 then
是一个坏标志检查测试?
区间[a,b]
的中点c
可以计算为:
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.000000000000000e-001
同样可能由兰特输出?
Matlab 的rand
使用 Mersenne Twister rng,其周期为(2^19937-1)/2
,但只有大约2^64
dp fpns。解释。
找到最小的 IEEE 双精度 fpnx
,1 < x < 2
,使得x*(1/x) ~= 1
。
编写一个简短的 Matlab 函数来搜索这样的数字。
答案:Alan Edelman, MIT
您会乘坐由您编写软件的飞机吗?
Colin K 不会雇用我(可能会解雇我)说“Matlab 的主要(唯一?)数据类型是双精度浮点矩阵”。
当 Matlab 启动时,这就是用户所看到的全部,但是多年来,他们添加了他们 coyly 叫的“存储类”:single,(u)int8,16,32,64 等。但是这些并不是真正的类型,因为您无法对它们进行 USEFUL 算术运算。这些存储类的算术速度如此之慢,以至于它们作为类型毫无用处。是的,它们确实可以节省存储空间,但是如果您不能对
请参阅my post (No. 13) here,其中我显示了 int32s 上的算术比 double 算术慢 12 倍,MathWorkser Loren Shure 说:“默认情况下,MATLAB 变量是双精度数组。在过去,这些是 MATLAB 中唯一的数组。那时,甚至字符数组也存储为 double 值。”
对我来说,Matlab 中最大的缺陷是缺乏适当的类型,例如 C 和 Fortran 中可用的类型。
顺便问一下,科林,你对问题 14 的回答是什么?
询问有关他在您的域中应用MATLAB的专业知识和经验的问题。
询问他如何设计一个在 MATLAB 中实现的应用程序。如果他指的是 MATLAB 的最新功能,请他解释它们,以及它们与它们所取代或补充的旧功能有何不同,以及为什么它们更可取 (或不可取)。
询问有关他在 MATLAB 数据结构方面的专业知识的问题。我遇到的许多 MATLAB“专家”都非常擅长编写代码,但在确定手头工作的最佳数据结构方面却很差。这通常是他们成为领域专家的直接结果,他们选择了 MATLAB,而不是接受过计算机培训。结果通常是好的代码,必须弥补错误的数据结构。
询问有关他使用其他语言 / 系统的经验(如果有的话)的问题,并邀请他扩展他对 MATLAB 的相对优势和劣势的观察。
询问有关优化 MATLAB 程序的顶级提示。期待答案:矢量化,预分配,清除未使用的变量等。
询问他对 MATLAB 分析器,调试器和lint工具的熟悉程度。我最近发现,在使用该工具的 10 年中,MATLAB 的“专家”从未找到过该分析器。
这应该让你开始。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(53条)