Taro Logo

Software Engineer - SolidFire Interview Experience - United States

July 30, 2018
Positive ExperienceNo Offer

Process

Steps:

    • Received call from a university relations recruiter. They're gauging your interest/basic experience/basic social competence.
    • Received a screening call from the team I applied for's manager. Basically gauging interest, talking about the position, and then some basic programming questions to weed out completely unfit candidates.
    • Talked with the technical team. Two engi's talk to you about multithreading concepts from a system's level approach. Know your basic multithreading concepts/systems concepts. Also know Object Oriented C++ topics.
    • Write a coding assignment. They do not give you a lot of time for this (If you already work a busy full-time job, this is legitimately a challenge unless you already code multithreaded programs every month). Please, do not head my advice lightly, they are not playing games over there. There's technically "no deadline", but they effectively don't want you to take longer than 2 weeks. If you don't write this type of code often, try to take vacation time to do a good job if you want the job bad enough. If you are fresh out of college, they are looking for someone who has already programmed several pieces of multi-threaded code in C/C++, otherwise they want someone who has already spent a year or two writing such code. I would advise spending all of your time before you get to this point studying best practices in C/C++. While it is an "intro" role, I think they want someone with a lot of experience for "intro". It seems they are more or less looking for someone who already has some professional experience writing multi-threaded C/C++ code. Many of their critiques applied to my code were things I didn't learn in school, which left me a little salty because they are all easily fixed - things that I didn't think would be a problem for an intro role. The good news is they will give you a lot of feedback on why your code is bad, which is nice.
    • Never made it to this point, but you have an On-Site where they probably try to make sure you're not a sociopath/capable of socializing properly/capable of working with a team. I'm assuming if you make it to this point, they're pretty intent on hiring you.

Questions

    • What is a thread?
    • What types of mutual exclusion are used in multithreaded programming.
    • Describe the benefits/downsides of some of these vs others.
    • 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 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.

Was this helpful?

Interview Statistics

The following metrics were computed from 1 interview experience for the NetApp Software Engineer - SolidFire role in United States.

Success Rate

0%
Pass Rate

NetApp's interview process for their Software Engineer - SolidFire roles in the United States is extremely selective, failing the vast majority of engineers.

Experience Rating

Positive100%
Neutral0%
Negative0%

Candidates reported having very good feelings for NetApp's Software Engineer - SolidFire interview process in United States.

NetApp Work Experiences