From charlesreid1

Project Gopher

Organizing notes in preparation for 2019 technical interview.

Full list of topics: https://git.charlesreid1.com/cs/study-plan/src/branch/master/SoftwareEngineering.md

Top level topics:

  • Algorithm complexity
  • Sorting - know how to sort, know at least 2 O(n log n) sort methods (merge sort and quicksort)
  • Hashtables - the most useful data structure known to humankind.
  • Trees - this is basic stuff, BFS/DFS, so learn it.
  • Graphs - twice as important as you think they are.
  • Other Data Structures - fill up your brain with other data structures.
  • Math - discrete math, combinatorics, probability.
  • Systems - operating system level, concurrency, threads, processing, memory.

Links: Template:AlgorithmsFlag

Week 1

Sorting:

Week 2

Week 2A

Code:

  • Write simple code with correct syntax.
    • Java
    • Python

Strategy:

  • Walk through the algorithm (coding it) on paper.
  • Then code it on the computer. Note any errors and problems.

Arrays:

  • Implement Fisher-Yates shuffle
  • Implement any shuffle
  • Find the nearest integer to X in the array (binary search + variations)
  • Implement any sort algorithm (merge sort)
  • Implement another sort algorithm (quick sort)
  • The merge sort you used is recursive. Can you do it non-recursively?

Language-specific array basics:

  • Java arrays class
  • Creating arrays
  • Accessing arrays (first, last, range)
  • Basic info about arrays:
    • Length
    • Slice
    • Reverse
    • Sort (built-in)

Algorithm analysis:

  • Review costs of each operation


Week 2B

Code:

  • Write simple code with correct syntax.
    • Java
    • Python

Strategy:

  • Walk through the algorithm (coding it) on paper.
  • Then code it on the computer. Note any errors and problems.

Lists: - definitions - abstract data type: methods - abstract data type: more ornate/fancy methods

Language-specific list basics: - Java built-in list types, and built-in methods - Python list basics

Language-specific implementations: - singular linked list - circular linked list - doubly linked list - array list - (have the basic list of methods for each of these types ready to go - how do they relate to the ADT above?)

Algorithms for each implementation of the types of lists above: - get, set - clear, clone - equals - addfront, addback - removefront, removeback



Flags





See also: