1) - What is a thread?
2) - What types of mutual exclusion are used in multithreaded programming.
3) - Describe the benefits/downsides of some of these vs others.
4) - Various questions about C++ object oriented stuff. Questions about classes, virtual functions, thing like that.
Regarding the programming assignment:
First and foremost, if you have a friend who codes in C/C++ or an industry friend, have them look over your code to make sure you didn't make any obvious errors. I did not have this resource available.
For the love of all that is holy, when you do the programming assignment, make sure you're checking malloc for a possible null return every time you call it. This is almost never a problem for dinky little school assignments, but for big boy appliances, this becomes a very serious matter. This is something I did not learn at school for whatever reason, but it's so obvious once you know it, as to why it's important. Everything about this assignment is about scalability, performance, and reliability. So have your code check for anything that has the potential to create undefined behaviour. Check all relevant system calls for null returns. Basically if something can produce an error, check for it and handle it.
They're going to want header files. Do not link .c files. If you think it won't matter, it definitely will. That goes for anything you can think of. For every time I thought, "This is an intro role and I'm running out of time, better try to make sure all the big stuff is working and the broadstrokes are in place.", I got dinged. About 2/3 of the things I knew could be problems with my code were on the critique, so if you think it's a problem, it's going to be a problem. As you can see, with the loose time limit, this gets very tricky.
Also, if you do not use the most efficient data structures possible for what they want, you are going to get dinged.
Check for null when attempting to create objects. Once again, this should seem obvious, when stated, but mistakes happen.
Any variable shared between threads should be protected by some mutual exclusion device. I mean any variable, this would seem obvious, but when you're 20 - 30 hours in, and mentally exhausted from your primary job, mistakes occur. (This will not be a problem for someone who codes multi-threaded code frequently or already does this type of work in their primary job.)
Use libraries. What i mean by this is do not code this thing in C. Even if you're "better at C", go use C++ and its rich plethora of libraries. It will save you a massive amount of time, and you won't have to worry about debugging your own data-structures. This was probably my biggest mistake.
Carefully consider the means of mutual exclusion you are using on that programming assignment. They will care. I did not think that what I chose would be as a big of a problem as they thought it to be (I thought it was actually the right choice), but they are literally the experts, so be *very* careful. They are absolutely thinking about scalability/maintainability. Treat the hw assignment like an actual piece of code they'd sell to a client. (Note, this becomes difficult with the time limit imposed). This is not a test to see if generally understand multi-threaded code. It's a test to see if you can write *very* clean, performance-centric code and could be made to work on their codebase from day 1. Fwiw, this was not relayed well by the paper they include for the assingment, imo.
It's mainly because of the paragraph above that I believe they are not actually looking for fresh college grades. They want people who already have at least 100+ hours of writing multi-threaded code under their belt. So yes, there are going to be fresh college grads with this experience, but not a whole lot. It just seems like they should say that they are looking for Junior dev's with 1 - 2 years of C/C++ multi-threading experience instead of 0-2. Your chances of getting this position are also a lot higher if you don't have a full-time job and can sit down and go over your code over and over and over again. I tried to do this, and actually spent a lot of time planning but I ran out of time. I could have turned it in later, but then the problem becomes you can't write code as fast as they want so then you're a slow programmer. (Which is totally fair imo, I just wish the description of the job relayed this more accurately.) ¯\_(ツ)_/¯
However, with all of that said, they were very respectful and treated me rather nicely. I just wish they threw some pointers in as to what they were looking for in the assignment beforehand. What they REALLY wanted and why they wanted it. I effectively sacrificed my last month and a half to them (I was studying and trying my very hardest) and if I had 1 more week to work on the assignment things would have probably turned out differently, so I feel pretty darn sad about the whole thing.