Doesn’t know the difference between Array and LinkedList
Able to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasks
Knows space and time tradeoffs of the basic data structures, Arrays vs LinkedLists, Able to explain how hashtables can be implemented and can handle collisions, Priority queues and ways to implement them etc.
Knowledge of advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.
Unable to find the average of numbers in an array (It’s hard to believe but I’ve interviewed such candidates)
Basic sorting, searching and data structure traversal and retrieval algorithms
Tree, Graph, simple greedy and divide and conquer algorithms, is able to understand the relevance of the levels of this matrix.
Able to recognize and code dynamic programming solutions, good knowledge of graph algorithms, good knowledge of numerical computation algorithms, able to identify NP problems etc.
Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!
Doesn’t know what a compiler, linker or interpreter is
Basic understanding of compilers, linker and interpreters. Understands what assembly code is and how things work at the hardware level. Some knowledge of virtual memory and paging.
Understands kernel mode vs. user mode, multi-threading, synchronization primitives and how they’re implemented, able to read assembly code. Understands how networks work, understanding of network protocols and socket level programming.