**Behavioral Questions**

Think about good examples you can describe from school (or internship) projects that were successful, in which you played an important role. Think about projects that went wrong initially and how the situation was corrected. What did you learn from the situation? what would you do different next time? think about a difficult bug you had to solve and how you approached the solution. Think about the different programming languages and which ones you like best and why. Always be very honest in your answers, since the interviewer can easily spot when you are making up stuff. Do not come across as the “perfect programmer”. Show that you have made some mistakes and have learn from them. Show that you have good communication skills, good team work skills, that you are a rapid learner, that you go the extra mile…

**Technical Questions**

Refresh some of the core CS concepts:

**Data structures**- Study some of the basic data structures:
- array, list, tree, binary search tree (bsd), queue, heap, map (dict/hash), set

- What are the main characteristics/properties of each structure?
- What are the pros and cons of each structure?
- What is the big-O complexity of the common operations (insert, find, delete, access) on these structures?
- e.g accessing an element from an array is O(1), while on a list is O(n)
- e.g searching for an element in a BSD is O(log n)

- Study some of the basic data structures:
**Algorithms**- Learn some basic algorithms, know how they work, and what is their big-O complexity
- Sorting algorithms: bubble sort (n^2), quick sort (n log(n)), merge sort (n log(n))
- Tree traversal algorithms (https://en.wikipedia.org/wiki/Tree_traversal)

- Learn some basic algorithms, know how they work, and what is their big-O complexity

During the technical interview: ask lots of questions to the interviewer. Repeat the problem statement to him to prove that you understood the problem. Verify assumptions with the interviewer: “is it ok to assume that this function will never receive a NULL string?”. It is ok to ask for help, don’t stay silent. Selecting the correct data structure for a solution usually takes you 80% there. Consider different data structures and always start with the simpler ones (array, list) before you jump into trees and graphs. Do some design before you implement any code. If you have access to paper / white board, draw your data structure, fill it with some sample data and verbally walk the interviewer through your solution. Write clean code, use good meaningful self documented variable names, use proper indentation. Pretend the interviewer is a coworker and work with him through the problem. This shows him that you are a person he would like to work with on a daily basis. The same goes for you, see if you would like to be on a team with this person.

Here are two books that help you prepare for a technical interview. I highly recommend getting at least one and solving some of the problems in them. And actually SOLVE the problems. Do not just read the answer, because if you do that, the solution wont stick in your brain. If you solve it, you won’t ever forget it.

- Programming Interviews: The Insiders’ Guide Paperback by Adnan Aziz
- Cracking the Coding Interview by Gayle Laakmann McDowell

Adnan Aziz has a website at UT and posted a PDF for free that includes a lot of content from one of the books, which you can download for free.

You should also look into online tools that help you prepare for programming interviews like:

- LeetCode
- HackerRank
- InterviewCake