原标题:Quant面试时说:熟练掌握Python,请三思,不然凉凉~
前言
本文作者为美国投资银行的一名技术专家,他以自身的亲身经历,为我们讲述了当你在金融机构面试时,说会使用Python进行编程可能遇到的一些面试问题。
作为一名投行的技术负责人,我面试过很多人,尤其是那些自称会使用Python编写代码的人。他们可能是程序员,也可能是知道如何编码的交易员。毕竟,Python是一门拥有大量新手的语言,而且有很多人对自己Python的熟练程度夸大其词。
当你在面试的时候说:“熟练掌握Python。”之前,你需要了解一下下面的一些问题。因为我在面试的过程中遇到了很多这样的求职者。
什么是列表推导式?
这似乎是一个容易回答的问题。这是创建新列表的一种简便方法。例如,为现有列表中的每个数字加2:
new_list = [x + 2forx innumbers]
但是面试官可能会问得更深入一些,比如:“所以它等同于for loop追加到列表?”之类的问题。一个天真的候选人会说:“是”。但事实并非如此。如果创建循环列表是在没有初始化元素的情况下,那么列表推导式比循环创建列表更有效。在列表推导式中,我们知道结果的大小,因此Python可以预先分配内存,这比动态添加到列表更有效。
如果面试官问:”直接在列表推导式中定义lambda表达式是否是一个好主意?“,求职者可能会变得更加紧张。因此,即使作为一名经验丰富的开发人员,一个简单的问题就会让你很快就会陷入到细节之中,因为你不会有意识地思考日常工作。这也是一个看真本事的时候,面试官很自然地会看到应聘者的知识有多深。我的建议是:当你不知道一些事情时,不要慌张。可能后面的面试内容会是你比较拿手的。
为什么Python是单线程的?
在这里,面试官想知道你对GIL全局解释锁(Global Interpreter Lock)的理解。Python有线程包,但是在Python的某些版本中,全局解释器锁确保在任何给定的时间点上只能执行一个线程(它持有锁)。看起来好像是并行的,但实际上不是。它提高了单线程应用程序的速度,并使集成非线程安全的C库变得容易。
然后面试官可能会问:“我们能用Python并行运行任何东西吗?”。这时,他们希望你讨论进程与线程,以及Python拥有良好的多处理库这一事实。我们还可以将请求分配到计算池或像Celery这样的作业队列。全局解释器锁也不会停止线程同时处理许多输入/输出请求。锁是在线程等待请求完成时共享的,这对3.2之后的Python版本特别有效。
不要失去理智
在类似上面的面试中,你可能不知道所有的问题,但关键要解决这个问题:
毋庸置疑,你应该了解Python的主要语法元素,比如生成器、列表和元组之间的区别、lambda表达式、过滤迭代器等等。了解核心数据结构的工作原理是非常有用。例如,你经常会被问到字典是如何工作的。与静态类型和编译语言相比,你还应该对该语言的类型系统和解释性质有自己的看法。与其他任何语言一样,你应该确保在HackerRank和Leetcode这样的平台上刷过算法和数据结构的题。你还可以把代码写在纸上,并在你的脑海中练习运行代码,这也是很有用的!
顺便给大家介绍一下HackerRank和Leetcode。
LeetCode
LeetCode 是一个汇集了诸多算法题库的编程网站,许多开发者在初学算法时,都会跑到 LeetCode 网站上面刷题,也有一些开发者为了过微软、Google、Facebook 等国际大企的面试,选择刷 LeetCode 来快速提升自己的编程能力与算法能力,以便顺利通过面试。
你今天刷 LeetCode 了吗?
https://leetcode-cn.com/problemset/all/
大家看到的这个页面是LeetCode(力扣)的中文版网页。你可以先在力扣上注册一个账号,然后登录刷题。
英文网页在这里。我们看到多了几类题目。大家可以根据自身情况查看。
https://leetcode.com/problemset/all/
给大家看一道有关量化金融的题目。
122 买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
你该如何解答呢?我们给出其中一种解答:
▼
我们可以简单地继续在斜坡上爬升并持续增加从连续交易中获得的利润,而不是在谷之后寻找每个峰值。最后,我们将有效地使用峰值和谷值,但我们不需要跟踪峰值和谷值对应的成本以及最大利润,但我们可以直接继续增加加数组的连续数字之间的差值,如果第二个数字大于第一个数字,我们获得的总和将是最大利润。这种方法将简化解决方案。这个例子可以更清楚地展现上述情况:[1, 7, 2, 3, 6, 7, 6, 7]
我们可以观察到A+B+C的和等于差值D所对应的连续峰和谷的高度之差。
具体查看:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/
希望你能在刷LeetCode中提高你的编程技能!
HackerRank
HackerRank成立于2012年,是一个你可以参与各种编码竞赛并检测你的竞争能力的网站。这里有以各种编程语言举办的各种比赛,赢得比赛将增加你的分数。这个分数可以让你处于最高级别,并增加你获得一些软件公司注意的机会。这里有以各种编程语言举办的各种比赛,赢得比赛将增加你的分数。这个分数可以让你处于最高级别,并增加你获得一些软件公司注意的机会。
HackerRank算法题目难度比LeetCode难不少,应该是竞赛初级到中级的水平。
https://www.hackerrank.com/
在这里我们给大家看一个demo,大家可以登陆网站具体了解。返回搜狐,查看更多
责任编辑: