Bank of America
Bank of America Quantitative Developer Interview Questions & Reviews
Getting an Interview
- Popular Job Titles:
- Teller (286)
- Personal Banker (144)
- Technology Analyst (43)
- Banking Center Manager (42)
- Intern (40)
- Customer Service Representative (35)
- Vice President (29)
- Analyst (29)
- Summer Analyst (29)
- Teller Operations Specialist (28)
- Sales & Service Specialist (23)
- Financial Analyst (22)
- Investment Banking Analyst (19)
- Sales and Service Specialist (19)
- Business Analyst (17)
- Software Engineer (16)
- Operations Analyst (15)
- Bank Teller (15)
- Software Developer (15)
- Team Member (15)
- Project Manager (13)
- Assistant Vice President (13)
- Banking Center Assistant Manager (13)
- Senior Software Engineer (12)
- Associate (12)
- Fraud Analyst (12)
- Quantitative Analyst (12)
- Financial Advisor (12)
- Financial Advisor Trainee (11)
- Credit Analyst (11)
Quantitative Developer Interview (Neutral Experience; Average Interview)
I applied through an employee referral and the process took 2 months - interviewed at Bank of America in June 2009.
Interview Details – The very first stage of the process was an at-home, 2-hour C++ coding test. The text of the test is below:
1) Make an inheritance hierarchy with at least two classes representing mathematical functions (e.g. y=f(x)) that take 1 double as input and return 1 double as output. Each class should provide a method that evaluates f(x), and any other methods you find appropriate or necessary to solve the rest of the test or to make the classes useful in practice.
1a) One class should implement the function y = a * x, where a is constant for each instance of the class.
1b) One class should implement the function y = x * x.
1c) You may add any other classes or methods you think will make it easier for other people to use or extend your inheritance hierarchy.
2) Now, make a new class called SumOfFunctions that holds a C-style array of pointers to objects from the Function classes you wrote for problem #1. (i.e. a raw, C-style pointer to an array of N raw, C-style pointers). The pointers stored in the SumOfFunctions class will include both pointers to your x*x class, pointers to a*x objects with different values of a, and pointers to new derived classes added to your hierarchy by other programmers. Your SumOfFunctions class will be used frequently in an STL container. Give it the following methods:
2a) a method that takes x as input and computes the sum of the f(x) values for each Function in the array.
2b) a method that adds a copy of a Function object to the array.
2c) any other methods necessary to use your SumOfFunctions class in an STL container, or that otherwise make your class reliable and convenient for other developers to use.
3) Make a new templatized C++ function that computes the difference f(x) - g(x) between two functions f(x) and g(x) represented as classes, e.g. these classes could be your Function class from #1, your
SumOfFunctions class from #2, or a completely different class that also has a method to compute y = f(x) but which does not inherit from any other class. Your function should take the two objects f and g and the point x as input.
--- END ---
The fundamental difficulty here is that you have to implement a vector-like container. As you add items to the container, it should grow. The correct way to do this is to increase the size of the underlying array by a multiplicative factor once you add so many elements that the underlying array is full. You must also remember to implement a default constructor, copy constructor, operator= and destructor properly, so that your solution is capable of living in an STL container. Also, make sure that you don't have any memory leaks or stale pointers.
After I completed the test, a few days later I was contacted by a developer on their team for a 30-min phone interview. It consisted of basic C++ questions: difference between a reference and a pointer? explain Boost shared_ptrs, what 4 functions does the C++ compiler give your classes automatically? difference between a class and a struct? What is the slicing problem in C++? what is a functor object?
One week later, I was invited for a full day of interviews. It began at 8 am and I didn't leave until 5:30 pm. The schedule looked something like this (names changed to protect the innocent):
8:00-8:30 Donald Knight SVP
- Draw how Newton's Method works on a whiteboard
- Finding the maximum of a convex function
- Runtime of a sorting algorithms
8:30-9:00 Daniel Proton SVP
- Asked me about experience with source control and build automation
9:00-9:30 Larry Flanders VP
- Asked me to whiteboard a String "reverse" function
9:30-11:30 Coding Test
- The test was to write an implementation of Newton's Method. the code should output iter#, x, and f(x) on each iteration. test cases: were sin(x), x^2-1, and (x^2-1)*e^x
12:30-12:45 John Michael VP
- We just chatted about the job and my experience.
12:45-1:00 Qiong Dong AVP
- Asked me to explain my dissertation reseach.
1:00-1:15 Sam Hannity VP
- Asked me about how to transform a linear program into standard form
1:15-1:30 Bruce Donaldson SVP
- Asked me the 1-out-of-3 "stay-or-switch" puzzle
1:30-1:45 Fred Dewey AVP
- Asked me a puzzle: How many integers between 1 and 1000 contain a '3'? Answer: 271. Use the inclusion-exclusion principle in combinatorics to calculate the answer.
1:45-2:15 Cary Listerbaum Managing Director
- Asked me a puzzle: using only 1 4-minute and 1 7-minute hourglass, measure exactly 9 minutes. Don't assume that the 9 minutes has to begin immediately, one solution is to solve 4 x - 7 y = +/- 9, where x and y are integers.
2:15-2:45 Stan Headley Managing Director
- Just talked about his team and what they did.
2:45-3:30 Coding Test Review
- Went over both the at-home and on-site coding tests in fine detail.
Interviews for Top Jobs at Bank of America