面试指南 | C++ 开发-金融交易行业

大家好, 我是Lucy@FinTech社区。

今天分享关于在金融交易行业C++ 开发面试指南,希望对大家有所帮助。

同时,FinTech社区有100多人的C++社群,欢迎大家添加微信fintech12,或扫描底部微信,加入FinTech社区,提认知,攒人脉,求职招聘!

 

一、为什么选择进入交易行业?

很多人会问,为什么不去互联网行业,而是来到金融交易行业, 从技术角度来看,每天都有挑战性的问题需要你去解决。这些问题需要快节奏的高速开发周期(实时诊断产品缺陷,设计修复并执行,在数小时内测试和发布)。这是一个以纳秒来衡量延迟的技术堆叠,更重要的是,你需要与其他竞争公司持续战斗,以使市场尽可能高效。

所以这个行业是极具有挑战性的,同时也是高回报的。


 

二、开发者角色有哪些?

从高层面举例,开发者角色有:

  • 市场连接开发 - 连接交易系统到各种股票/衍生品市场
  • 交易算法开发 - 开发实时运行的算法,可以向市场发送订单,以实现有利可图的交易
  • 定量研究开发者 - 统计分析,设计有利可图的交易策略


 

三、需要什么编程技能?

在参加面试之前,你应该对以下领域有大致了解:

  • C++ - 许多交易公司用于低延迟软件开发的核心语言。你应该对C++ 11/14/17/20标准之间的特性差异有一些了解。
     
  • Python - 主要用于数据分析和研究目的。这包括Shell脚本技能,了解你的Bash/Awk总是很有用的,这样就可以操作日志/csv文件来提取你感兴趣的详细信息。
     
  • Network (TCP/UDP) - 操作系统和硬件方面的一些知识,如内存/CPU缓存管理和进程/线程管理。


 

四、需要哪些软技能?‍

  • 具有团队合作精神和良好的沟通能力
  • 能跳出思维定式快速学习
  • 良好的解决问题能力,以了解需求和限制,以便设计出最有效的解决方案
  • 训练有素的心态,即专注于测试。你不可能总能编写出完美的代码,因此需要习惯于编写单元测试、回归测试和其他测试。
  • 协作方式 - 你需要做好资料文件的保存和信息共享,这样整个团队才能一起成长
  • 对股票市场有基本的了解是一个优势,但并不总是必需的


 

五、如何准备编程测试?

通常你会被要求参加一个编程测试。一方面,这是一个展示你编程技能的机会;另一方面,这也是公司快速淘汰不具备所需编程技能的应聘者的一种方式。一个典型的编程测试包括2-3个问题,需要你在2-3个小时之内完成。

  • 虽然关于解决脑筋急转弯和系统开发的日常工作之间的区别这个话题我们可以讨论一整天,但现实是,在尝试申请任何工作之前,你总是需大量刷题来练习
     
  • Codility和Leetcode上有很多在线测试可供你练习
     
  • 编程测试有不同的主题,你最好先让自己熟悉一下。通常会用到C++、C++ 14或17。这里附上一个很有用的指南:https://dev.tasubo.com/2012/09/tips-for-tasks-on-codility.html
     
  • 熟悉C++标准库,在需要的时候用它们来节省时间,比如 <algorithm>。与实际编程不同的是,你可能无法使用Boost等其他库,因此熟悉标准库是很重要的。
     
  • 在编程测试刚开始的时候,你应该花几分钟来通读所有的问题,并评估哪些问题最容易着手。不要在一个问题上花费太多时间,否则你可能没有时间回答其他问题。
     
  • 您可以选择在编程测试web浏览器中进行测试,也可以在您熟悉的集成开发环境(IDE),如vim或Visual Studio中进行编码。但需要注意的是,在浏览器之外完成测试意味着面试官无法评估你的实时编码时间,这可能会影响你的测试结果。
     
  • 你的编码测试通常会通过一组测试输入进行评估。有些问题可能与性能有关,如果你已经有了解决方案,你可能需要考虑你的算法的大O符号。通常你不想要O(n^2)的性能。再次强调,记住一个有效的解决方案比一个优化的解决方案更重要。你的解决方案将根据测试输入结果的成功/失败进行评分。
     
  • 你的面试官不会只关注代码,因此写一个可读性强的代码和足够的注释来解释你的假设/思考/理由是非常重要的。面试官会使用你的解决方案来评估在真实开发环境中你的编程质量。优秀的开发人员通常不喜欢与编写难以阅读的代码的开发人员一起工作。


 

六、如何准备技术面试?

通常这个阶段包括与不同开发人员的多次面试。可能包括以下内容:

  • 实时编码测试 - 面试官会问你一些问题,你可能需要在Codility或HackerRank上快速实现这些问题。
  • 急速Q&A - 这些可以是关于编程/IT的问题,比如基于c++语言的问题(例如模板,类继承),网络编程或操作系统知识。
  • 白板算法设计 - 给定一组需求,在白板上提出一个解决方案。可能会涉及到编写伪代码或绘制数据流或架构图。


七、关于技术面试的建议:

  • 一个典型的c++问题可能会问你想要使用c++标准中的哪些新特性,并给出如何使用这些特性的编程示例。
  • 确保你有实例来支持你的解释。
  • 充分理解问题,有不清楚的地方要及时提问
  • 你可以问面试官是否可以做一些假设——在有限要求下提供一个解决方案是可行的。
  • 你不需要马上给出完美的或最优化的答案,但是你需要解释清你的想法,并清楚地描述你提出的解决方案。
  • 你的面试官会评估你的解决方案,发现你的错误和弱点。你需要考虑如何解决他们提出的问题,他们会借此观察你处理突发问题的能力。
  • 请记住,面试官并不会想尽办法为难你,让你挂掉面试。为了他们自己和公司的利益,他们会给你足够多的机会通过面试。
  • 因此,如果他们提出了任何提示或建议来改进或纠正你的解决方案,请予以考虑,并重新评估你的解决方案。

 

八、如何准备行为面试

在这个阶段,你通常会与开发团队领导以及其他业务经理(比如人力资源)进行面试。他们的目的是评估你是否适合这家公司。

在面试之前,你应该想想在以前的工作中做过的项目和工作,编程马拉松或者你的爱好。你可以用这些例子来展示你在面对挑战时的成功或失败,以及你是如何去解决它们的。

讨论失败并不可耻,只要你能解释好你从失败中学到了什么,以及从那以后你是如何利用这些经验的。

网上有很多文章可以帮助你准备行为面试。以下这两篇可供参考:

https://www.indeed.com/career-advice/interviewing/how-to-prepare-for-a-behavioral-interview

https://en.wikipedia.org/wiki/Situation,_task,_action,_result

面试官喜欢对所做的事情充满激情的求职者,最好是在软件开发方面,当然也包括你的兴趣爱好。