MATLAB面试问题?

时间:2010-03-23 15:25:56

标签: matlab

我在MATLAB编程多年,但在过去的几年中转而使用R,所以我有点不习惯。我今天正在采访一位自称为MATLAB专家的候选人。

我应该问什么MATLAB面试问题?

其他一些有此资源的网站:

7 个答案:

答案 0 :(得分:17)

这有点主观,但我会咬......;)

对于自称为MATLAB专家的人来说,以下是我个人希望他们能够在采访中说明的一些内容:

答案 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 的主要(仅?)数据类型是双精度浮点矩阵,并且大多数人使用浮点运算 - 无论他们是否知道 - 我'我很惊讶没有人建议提出基本的浮点问题。以下是一些可变难度的浮点问题:


  1. {d} fpn的|x|范围是什么?

  2. 大约有多少IEEE dp fpns?

  3. 什么是 machine epsilon

  4. x = 10^22完全可以表示为dp fpn。什么是fpns xp 和xs正好在x以下,正好在x?

  5. 之上
  6. [1,2)中有多少dp fpns?一个边缘有多少个原子 1英寸糖块?

  7. 解释为什么sin(pi) ~= 0,但cos(pi) = -1

  8. 为什么if abs(x1-x2) < 1e-10 then收敛测试不好?

  9. 为什么if f(a)*f(b) < 0 then是一个错误的签名检查测试?

  10. 区间c的中点[a,b]可以计算为:

     c1 = (a+b)/2, or 
     c2 = a + (b-a)/2, or
     c3 = a/2 + b/2. 
    
    你更喜欢哪个?解释

  11. 在Matlab中计算:a = 4/3; b = a-1; c = b+b+b; e = 1-c; 在数学上,e应为零,但Matlab给出e = 2.220446049250313e-016 = 2^(-52),机器epsilon(eps)。解释

  12. 鉴于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

    同样可能由兰德输出?

  13. Matlab的rand使用Mersenne Twister rng,其周期为  (2^19937-1)/2,但只有大约2^64 dp fpns。解释

  14. 找到最小的IEEE双精度fpn x1 < x < 2,以便x*(1/x) ~= 1

    写一个简短的Matlab函数来搜索这样的数字  答案:Alan Edelman, MIT

  15. 您是否会乘坐由您编写软件的飞机?


  16. 科林K不会雇用我(可能会解雇我)说“那个 Matlab的主要(仅?)数据类型是双精度浮点数 点矩阵“。

    当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

诉这是another sweet SO question

  

我有三个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 1example 2),或者你可以使用修复 - 像this question这样的问题(我承认,我非常喜欢那个),或者研究{{3对于一些高度MATLAB特定的东西。如果你想要有点意思,可以提出像this list这样的问题,其中最好的解决方案是循环,而典型的MATLAB思维方式只会填满内存。

但是,询问与您的工作领域相关的更一般的编程问题并查看他们是否通过MATLAB解决问题可能更有用。

例如,由于我进行图像分析,我可能会要求他们设计一个用于加载不同格式图像的类(MATLAB专家应该知道如何做OOP,毕竟它已经出现了两年),然后询问如何处理大图像的后续工作(我想查看将使用多少内存 - 或者他们知道memory.m - 并了解MATLAB通常如何处理双打)等等。