Archive of tech interview questions of Google, Amazon, FB, Samsung and et al.
github.com
github.com
Of course, I don't necessarily agree that LeetCode style questions should do the gatekeeping at Big N, but the procedure above has worked for me at three of the big companies. I'm sorry if you have dependents and need to work full-time while you study.
[1] https://en.wikipedia.org/wiki/Introduction_to_Algorithms
I would suggest putting a barrier to hiring that flavors younger candidates that have graduated from a CS program more recently as unethical.
The point I"m making here is: Is your interviewing bar set to hire individuals who are qualified and capable of performing the job you're hiring for? The leetcode interviews hire those who are good at leetcoding, not the ones that are experienced.
These questions test for some mixture of (1) IQ, (2) communication abilities, (3) willingness to put in the time, and (4) ability to learn.
Traditional interviews which discuss candidate experience test for only (2) and knowledge questions test for only (3) and (4).
To be frank, if you don't have the time or ability to review 1-2 classes worth of college material, then that raises some serious red flags.
Not nearly as much of a red flag as your stance is on this.
These questions have their own tricks and expectations. For example, in place shuffling. The way that question is worded implies you would know "oh yes fisher yates shuffle". Without looking it up, would you know what that algorithm entails? Would you know to study it? Would you even be guaranteed to cover it in your studies?
It's hardly a consideration about IQ when you have questions like detecting a loop in a linked list. (Theres a restriction that common question has.. but the solution of it was the product of an academic research paper in the 60s) Asking someone, where that's not fresh in their head is no longer an iq test but a trivia hazing ritual. Will they use that in their job? (No they shouldn't)
So back to your statement- Reasons why they didn't have enough time:
1. They just got laid off and they're navigating the new life change and possible loss of income. It's really hard to manage the interviews, the recruiters, opportunities, and emotional challenges at that time. It's not a conducive time to interview well, go through all of these coding challenges, and review 1-2 classes worth of college material (which may or may not be relevant at the time).
2. They have a family or dependents (there are laws that protect against this)
3. Their current work place is expecting unrealistic hours and they're trying to get out. (Weekends+nights)
4. Their age, the longer you're in software engineering, the less that it becomes about "I submitted optimal code always" and the more it becomes about managing the project in the correct order and execution. (Are good practices being followed, how do we identify the nasty corner cases, etc) If you're a senior engineer or higher and they can answer about how to implement a red black tree from scratch.. that's a red flag. (Also, Age discrimination is illegal)
Interviews should be a balance between testing problem solving, ability to learn, and knowledge that applies to the actual job they would be doing.
I interviewed with booking.com in Amsterdam a couple years ago and it was the same thing — same questions testing prep.
I interviewed for one American company once. Didn't like it despite the nice hotel. I also didn't get the job.
If you want a job in those companies, sure. But if you want a decent job in a decent software company, you don't have to go through all that show. There are companies that don't ask that sort of questions and instead they interview you in a sane manner (they ask about past experience, they let you talk about what you actually know... The whole interview feels like a conversation).
There are exceptions, but they are getting fewer and fewer. i.e. some companies that did not leetcode when I got my current job (5 years ago) are now leetcoding. Even companies in that famous "they don't whiteboard" list will leetcode you from my experience (I reckon its really a team by team basis thing).
You might be able to find a good company that will not leetcode you, but if you are trying to maximize your potential to get a good job at a good company, the best strategy is to grind leetcode, as opposed to hunting for a White Whale.
My own definition of a good company to work for as a SWE would be somewhere that:
- treats and respects tech and technologists as valuable first class citizens. Not merely a necessary evil.
- good compensation and perks.
- good working environment.
- great, talented colleagues.
- bonus: looks great on your resume and opens doors to potential future opportunities.
I would say most jobs at most well known tech companies (say, FAANG and others) would qualify...and most are gatekeeped by leetcode. I'm guessing you would not consider these to be good companies?
leetcode and puzzle-based interviews are indicative of thoughtless interview process that are lacking evidence as to their efficacy. Google used to focus on puzzles so everyone followed. Eventually google thought to look at the efficacy and realized it was poor, so google focused much less on the puzzles and it's taking a long time for folks to catch up. If an organization claims to respect evidence (as most large tech companies do) but have lackluster or nonexistent feedback loops around interviews, that hypocrisy is a red flag.
Take home tests like leetcode show a lack of respect and trust in the engineers, which I consider a bad work environment.
The high pay is usually because the organizations have tons of cash and are rarely indicative of interesting work (or the work is interesting but the product is discarded after completion). Most large, high paying, highly respected software companies have been stagnating for over a decade and sailing through on their monopolies. Then there are ethical considerations. At least that's how I justify avoiding that world. Maybe I'm totally out of touch with reality.
These questions are a less bad way of filtering people out than others. They're not the only filters used, and others have different tradeoffs. Sometimes if you're hitting these questions it's because the other filters have already excluded you.
If a given company has a lot of people who want to work for it then it makes sense for that company to have people attempt very challenging programming exercises so that the org can filter the applicant pool down to the number of positions they have open.
These companies have the luxury of being able to have hiring processes that turn away perfectly good applicants that couldn't pass their tests (false negatives).
Perhaps. I would also encourage companies to look past programming ability, and consider things like work ethic etc. I would argue that once you can do the job, reliably showing up and working hard every day has a lot of impact.
Maybe we're not as special as we think and not just a few mythical uberengineers are qualified to do the take-something-from-here-and-put-it-there coding that is 90% of the field...
Be ready for a surprise. Almost anyone who can spend 3-6 months on solving every single problem at LeetCode\HackerRank can crack these so called high caliber interviews. Unfortunately, a lot of us deny to take that route
* Searching algorithms
* Sorting algorithms
* Dynamic Programming (memoization)
* Graph operations (traversal, best path, minimum spanning set)
* Maps & Hashing.
* Heaps or trees. E.g. finding a median or top-k elements.
Every once in a while you'll get a more exotic problem that requires something like a bloom filter or a trie.
But that's just enough to get the solution. A good interviewer will also see if you can build this solution in a way that has effective abstractions. They'll also probe real-world concerns like data locality. For instance, one solution might be better in terms of big-O notation performance but might have worse access data pattern than other solutions.
All questions and their solutions should be exposed, so big tech can get to work on fixing their interview process?
Don't problems have to be rotated eventually anyway? You'd think otherwise there would be secret silos of problems and those in the know will have much better results than anyone else.
It's hard to find a problem that is good at selecting candidates yet doable in 30-60 minutes and different from the problems other colleagues use in their interviews. Most problems are either too difficult or too easy.
I am all supportive of people trying to game these big companies. Play stupid games, win stupid prizes.
I think individual questions that got posted would be blacklisted ten years ago. But nowadays, there are so many people doing interviews and such a large bank of questions (public and otherwise) that the blacklist isn’t so big a deal. Because there are so many vetted questions to ask, you can pick one and not worry to hard candidates may have done drills using that specific question. And if they have, you can have a second question on standby.
As an interviewer, I’m happy to see questions posted. You get to see people share their experiences answering it and make the question better, rephrase things to be less ambiguous or misleading, maybe tweak some wording that trips up non-native speakers, or decide that people have a bad experience answering it and you should drop the question. As an interviewer, I also ask questions from the blacklist. I’m not gonna say something arrogant like “I can tell” if you knew the question ahead of time, but my job as interviewer is to get the best information about you that I can to the hiring committee, and balancing that with the goal of giving you a pleasant enough experience during the interview that you want to accept an offer. Trying to catch cheaters is not my top priority.
All of this being colored by the facts that the interview process itself is a bit traumatic and people running interviews often don’t run them well.
Also, it's possible for interviewers to detect candidates who study the problem beforehand. A couple questions at Dropbox were spread online for years, and it would become clear which candidates read up on those questions online. Some would propose, without prompting, solutions to older iterations of the interview question.
You’re free to ask the questions that you liked, but I found it helpful to use one of the questions from the bank that had a ton of commentary, and then polish it to my own interview style.
As an interviewer you then have to scrap that question and ask a new question on the fly. This is bad for the candidate because there is now less time and it might be a question the interviewer is less comfortable asking.
e.g. Why is this the right solution? Why not another approach? What are the tradeoffs? Where does this solution fail?
This comment in the README is pretty shitty - those sorts of fixes are still valuable.
Before I could solve your average programming riddle I scoffed at them. Now that I have some experience solving them I feel like it is truly a form of mind expanding knowledge and should be valued not only in hiring but in life in general.
That's not an unpopular opinion among people who devote energy to solving programming riddles.
The need to validate one's own life choices is a common cognitive bias, if nothing else.
Giving a candidate a problem they haven't seen before and observing their problem solving skills and mentality doesn't sound so bad on paper. However the process has been gamified and as a result the expectations for what a candidate should know and accomplish have increased. This ends up favoring younger candidates and/or fresh grads, since on average they can expend greater time and energy into studying for these types of interviews and their algorithms & data structure courses are still fresh in their minds. A more senior candidate or a person with more responsibilities outside of work (taking care of children, parents, etc) won't be able to invest as much time into studying these types of problems. The original purpose of the interview is also obfuscated - did the candidate genuinely show good problem solving skills or did they see the question before and merely memorized the solution? As a hiring manager I've seen multiple instances of the latter.
I think the utility of spending time on these problems varies from person to person. I personally find it more useful to delve into distributed systems, cryptopgraphy, networking, or operating systems. These topics have made me a much better engineer and improved my problem solving skills, more so than programming riddles which gave me diminishing returns over time.
I think Netflix is also similar?