● Basic Mathematics
■ Polynomials, Equations, Functions, Relations
■ Limits and Continuity
■ Differentiation and Applications
■ L’ Hopital theorem
○ Basics of Counting
■ Permutations and Combinations
■ Recurrence Relations
■ Probability and Expected Values
○ Introductory Number Theory
■ GCD, LCM, modular arithmetics
■ Prime numbers, Integer Factorization
● Programming Knowledge
○ Operator Precedence
○ Bit Manipulation
○ Storage Level Details
○ Best Practices and Patterns
○ Common Coding Mistakes
○ Operating Systems
○ Distributed Sense
● Discuss input scenarios and test cases.
● Spend a moment on boundary cases.
● Clearly state assumptions.
● Do not hesitate to give a brute-force suggestion.
● If you are not able to move ahead take more test cases and observe.
● If you still cannot do beyond brute-force, ask the expected time complexity.
● Try to discuss about complexity of your solution before code.
● Ask interviewer if you should do better.
● Null checks.
● No magical constants.
● Write comments if and when needed.
● Dry run without miss.
● Mention invariants, if you have any.
● Try to catch the errors once written.
● Talk about correctness before interviewer asks you.
● If interviewer said there is a better solution, ask politely if he can reveal that.
● Questions at the end of interview ?
● Art of Computer Programming
● Algorithms by Dasgupta
● Steven Skiena