I applied to Cisco via their University Relations website. The interview process took approximately two weeks, with about one month before the original interview was scheduled. There were two interviews: a technical phone screen (approximately 1 to 1.5 hours) and a more in-depth, typical technical interview. I was applying for their Ottawa, ON office. All coding questions were done in C, with a massive emphasis on C knowledge.
The phone screen was fairly straightforward. I spoke with a veteran employee (15+ years) at Cisco, who started off by asking me about my resume and my ability to code in different languages. Then, they asked me some general knowledge questions about operating systems (e.g., mutex vs. semaphore, process vs. thread, if a thread crashes, do all other threads crash too, where would you use a mutex over a semaphore?). They then proceeded to move on to two coding questions:
head and node, code the function to insert the element into a linked list.All coding here was done in Notepad.
The second stage consisted of two back-to-back, approximately 1 to 1.5 hour long interviews. The interviewers were in pairs, and in my case, were done over WebEx as I was not able to attend onsite in Ottawa, ON. One set of interviewers were slightly younger with the company (1-2 years), and the second set were also veterans (~10-15+ years). For this part, I was given the choice to code in an IDE of my choice (I ultimately chose a text editor).
The first set of interviews tested my knowledge more on the internet and data structures side of things. Lots of questions related to data structure knowledge, usage, as well as runtime complexities (e.g., why use a linked list over a tree? What is a BST, hash table, or linked list? What is the worst-case/best-case runtime? Provide a scenario where you would implement a hash table over any other data structure? Explain the difference between TCP/UDP?). This was followed by a typical "please tell me what's wrong with this function" question (there were three errors), and then a single programming question: write a function that prints or returns the largest or smallest integers in an array.
The second interview focused more on parallel programming knowledge (e.g., problems with parallel programming, mutexes/semaphores, deadlocks, race conditions; a whole lot of OS knowledge is really good to have here, as well as related experience). This interview went similarly to the first: a question regarding "point out the errors in this function" (there were multiple errors), followed by a two-part programming question:
Write a struct for a DB record called phone_rec that contains:
a. Employee's last name
b. Their phone number
If there is a pool of phone numbers and you are given the size of the pool, search and return the phone number based on 'name.' Otherwise, allocate an unused phone number and save the entry in an array. Return the phone number.
Overall, the interviewers were friendly and happy to provide hints should you ask for them. Be sure to point out limitations/edge cases in your code and address them as soon as time permits in the interview. Make sure you're comfortable coding on a whiteboard or notepad.
Write a C function that prints or returns the largest/smallest integers in an array.
General OS Knowledge:
General Data Structures Knowledge:
Given a function prototype that takes in head and *node, write a function that inserts the given node into a specific location in a sorted linked list.
The following metrics were computed from 23 interview experiences for the Cisco Software Engineer role in Ottawa, Ontario.
Cisco's interview process for their Software Engineer roles in Ottawa, Ontario is very selective, failing most engineers who go through it.
Candidates reported having very good feelings for Cisco's Software Engineer interview process in Ottawa, Ontario.