Steps:
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 null behavior. 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 broad strokes 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 multithreaded 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 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 homework 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 you generally understand multithreaded 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 assignment, 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 multithreaded 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 Devs with 1-2 years of C/C++ multithreading 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.
The following metrics were computed from 1 interview experience for the NetApp Software Engineer - SolidFire role in United States.
NetApp's interview process for their Software Engineer - SolidFire roles in the United States is extremely selective, failing the vast majority of engineers.
Candidates reported having very good feelings for NetApp's Software Engineer - SolidFire interview process in United States.