Are you preparing for interviews at companies like Goldman Sachs, Bloomberg or Morgan Stanley as a software engineer?
Financial institutions like these are known for much higher than average salaries for software engineers. This is because they expect their software engineers to take on unique challenges than at an average software development company.
As a software engineer at a financial institution, you are expected to develop applications that have fast and deterministic performance. You must have an in-depth knowledge of concepts such as memory models, cache performances, pipe-lining, branch-prediction, computationally efficient algorithms, pitfalls of multi-threading, lock-free programming, etc.
This set of practice exams are prepared to cover these topics.
Do you know why high-frequency-trading applications would disable the Nagel's algorithm in networking?
Do you know about the Google's dense_hash_map and spare_hash_map that can have better performance than STL's std::unordered_map?
Do you know about the Binet's formula?
Do you know how to efficiently check if a matrix multiplication is correct, without doing the O(N^3) complex multiplication?
Do you know about Red-Black trees and B-trees?
Do you know how to keep a FIX protocol session alive?
Do you know what is cache warming and how to do it?
Do you know about kernel by-passing and how you can do it with library functions like sendfile()?
Do you know the cost of branch prediction misses and how to minimize it?
Do you know under what conditions quick sort is faster than merge sort?
Do you know about catastrophic cancellation of floating-point arithmetic?
Do you know about the zero-cost exception model of C++?
Do you know how to efficiently initialize a shared_ptr to minimize dynamic memory allocations?
Do you know about small-size-optimization and small-string optimization (SSO) of C++?
Do you know how to perform compile-time calculations to minimize run-time execution delay?
These set of practice questions are carefully prepared to focus on the needs of a software engineer in a financial institution, who is required to write fast, deterministic and memory-aware applications.
Please note that the questions are focused towards C++ language and Linux systems.
The questions may seem too specific or too far-fetched to be asked in an interview. But knowing these concepts would allow you to showcase your deeper understanding of the OS, memory model and algorithms so that you can impress your interviewer and stand out from the rest of the candidates.
I wish you all the best of luck.
- Computer science and C++ and Linux knowledge