I hate the system / I understand the system / Thank you LeetCode!

I hate the system

This technical evaluation system feels so screwed up. Unfortunately, before asking about your technical background, or learning about the novelty in the things you’ve built, a majority of modern tech companies blast and pigeon-hole applicants with rounds of just coding problems which really only span ~15 concepts/data structures/algorithms before even getting to know you. They do not discriminate on age, or experience. Engineers who’ve been in the industry for years get evaluated on the same playing field as newbs, both being tested on these same old data structures/algorithm questions.

People gripe and complain about how these problems are dumb and how they don’t adequately measure the skill-level of a software engineer, or that these data structures / algorithms are not used frequently in a massive percentage of coding jobs, or that it’s all just from our freshman CS class and who remembers that!

I understand the system (as it stands)

Guilty, these are similar gripes to how I felt. I hate the system. From the POV of these major tech companies, what are they to do to evaluate everyone as software engineers trying to join their company? How can they measure competency? What is something they can standardize across to evaluate all applicants fairly? Oh yes, these core concepts in CS that everyone should know! Those who can problem-solve and utilize the most fundamental data structures/algorithms to solve their problems are seemingly the most competent! The flaws in our assumptions are blatantly obvious but ultimately and unfortunately, it makes some adequate/passing amount of sense. Especially when you take into account the cost of interviewing, why bother getting to know us when all that matters is competency? As much as I hate it, I understand the system.

In my opinion, this concept of evaluating software engineering competency should be more vocalized. There’s so many senior engineers who are not aware of this process, but they’re excellent coders. Perhaps a standardized test score like with the MCAT is necessary. Creating a better system should be continually discussed and improved, or are we not in the tech industry? I’m not sure what the solution is, but let’s get a discussion brewing.

My story

Now I want to talk a little about my own story. For reference, I studied math at a solid ranked university, but did half my coursework in computer science. I graduated with a 3.3 GPA, and have 1 YoE.

Late into my college career, I struggled majorly with these LeetCode-style interview problems even though I was extremely comfortable in building software applications from scratch. These struggles sprouted some major insecurities within me. I doubted myself, and my technical ability. In my upper-classmen years, I felt like I had lost my edge since I took my first course in data structures and algorithms back in high school and then again in my freshman year. Seeing others succeed by getting past these problems made me feel even worse about myself.

Like you and many others, I have some big-time goals and aspirations. Looking ahead at what it takes to get where I want to go, and understanding the system that lies in front of me, I knew I had to face my demons once and for all, and forget about what anyone else was doing except for me and my prep towards these coding problems.

I knew the only way to prove to these other companies that I got what it takes was to play and succeed within the system. I knew my interviewers didn’t care about anything except turning back a standardized feedback report on how I did while performing my coding challenge. Before I thought that mattered more, but after several interviews, you learn to have your mind be 100% focused and ready to problem-solve and to keep the chit-chat concise.

Google had reached out to me earlier this year, and from there, I told them to give me 2 months before my first interview to study.

I put in 2-3 hrs after work for 4 out of 5 workdays, and 4 hours on the weekend days. Many times, I got mentally weak and would skip a few days or have days of rough practice. I tried to do every LeetCode Contest on Saturday nights. Ah covid was good for keeping me in the house for this! My goal was to answer 3 out of 4 questions on the contests. I had read that’s when you’re ready to interview. I totally agree.

3 out of 4 means you know easy through medium proficiently. If you can get this multiple weeks in a row, then you really got it. After 4 weeks, I started to notice easy’s were a piece of cake (most of the time). After 8 weeks, mediums became consistent and I was ready for whatever concept they threw at me in some fashion. I’m not at the level of consistent hard’s, occasionally I’ll knock a few out, but I would need to get my ass in gear again.

I learned early on that you don’t want to just do the “most liked” or “top rated” problems, that won’t cover the bases for you in a holistic way. You have to be ready for ANY problem on leetCode or coding interview and remember, it all boils down to like 15 concepts! I learned to study by concept. My days, I would assign Tree day, DP/BFS/DFS Day, Review Day, etc.

I started to grow tremendously in my skill set after doing the top problems from each of those categories. My first habit when seeing a problem in an interview or one fresh in a LeetCode competition, I always want to lay out the facts and ask what data structure/alg is this problem trying to exercise?

I kept a private github repository of my favorite problems separated by concept into individual markdown files. I would put the LeetCode problem link, a code block of my solution, and bullet points of takeaways I got from that problem. I would always review this guide just before my interviews.

I loved going through LeetCode’s discussion page on each problem. Sometimes, studying code became casual reading by just browsing through different top problems and reading the top rated solution for that problem and trying to understand it. I would always check the discussion pages if I solved the problem or not, there’s always another POV to take!

Thank you LeetCode

After months of grinding through various interviews with Google, Apple, and Zoox, I made it through with Google for an L3 role in the Bay Area and have given myself a career I’ve always dreamed of.

Thank you LeetCode. You helped me achieve a goal of mine, I’m so excited for what’s ahead. I want to send my story out in hopes it inspires others to be realistic with what’s in front of you, and to keep grinding and believing in yourself in route to your goals.

Here are some of my concepts and favorite problems:

Backtracking:
https://leetcode.com/problems/letter-combinations-of-a-phone-number/
https://leetcode.com/problems/combination-sum/
https://leetcode.com/problems/combination-sum-ii/
https://leetcode.com/problems/permutations-ii/

Binary Search:
https://leetcode.com/problems/search-insert-position/
https://leetcode.com/problems/split-array-largest-sum/
https://leetcode.com/problems/koko-eating-bananas/
https://leetcode.com/problems/minimize-max-distance-to-gas-station/
https://leetcode.com/problems/find-in-mountain-array/
https://leetcode.com/problems/search-in-rotated-sorted-array/

DFS/BFS:
https://leetcode.com/problems/number-of-islands/
https://leetcode.com/problems/open-the-lock/
https://leetcode.com/problems/longest-increasing-path-in-a-matrix/
https://leetcode.com/problems/friend-circles/
https://leetcode.com/problems/walls-and-gates/
https://leetcode.com/problems/time-needed-to-inform-all-employees/
https://leetcode.com/problems/word-ladder/
https://leetcode.com/problems/word-break-ii/

Dynamic Programming (DP):
https://leetcode.com/problems/coin-change/
https://leetcode.com/problems/max-dot-product-of-two-subsequences/
https://leetcode.com/problems/maximum-subarray/
https://leetcode.com/problems/maximum-product-subarray/
https://leetcode.com/problems/longest-palindromic-substring/
https://leetcode.com/problems/maximal-rectangle/
https://leetcode.com/problems/unique-binary-search-trees/
https://leetcode.com/problems/minimum-distance-to-type-a-word-using-two-fingers/
https://leetcode.com/problems/longest-string-chain/
https://leetcode.com/discuss/interview-question/653576/Google-or-Phone-or-Common-substrings-between-two-strings
https://leetcode.com/problems/maximal-square/
https://leetcode.com/problems/minimum-falling-path-sum/
https://leetcode.com/problems/word-break/

Graph:
https://leetcode.com/problems/evaluate-division/

Greedy:
https://leetcode.com/problems/split-array-into-consecutive-subsequences/

Heap:
https://leetcode.com/problems/merge-k-sorted-lists/
https://leetcode.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit
https://leetcode.com/problems/find-median-from-data-stream/

Linked List:
https://leetcode.com/problems/add-two-numbers/
https://leetcode.com/problems/palindrome-linked-list/
https://leetcode.com/problems/reverse-nodes-in-k-group/
https://leetcode.com/problems/sort-list/

Sliding Window:
https://leetcode.com/problems/longest-substring-without-repeating-characters
https://leetcode.com/problems/minimum-window-substring/
https://leetcode.com/problems/minimum-window-subsequence/
https://leetcode.com/problems/longest-substring-with-at-most-k-distinct-characters/
https://leetcode.com/problems/find-two-non-overlapping-sub-arrays-each-with-target-sum/

Stack:
https://leetcode.com/problems/decode-string/
https://leetcode.com/problems/validate-stack-sequences/

Tree:
https://leetcode.com/problems/invert-binary-tree/
https://leetcode.com/problems/binary-tree-maximum-path-sum/
https://leetcode.com/problems/diameter-of-binary-tree/
https://leetcode.com/problems/binary-tree-right-side-view/
https://leetcode.com/problems/path-sum-ii/
https://leetcode.com/problems/path-sum/
https://leetcode.com/problems/same-tree/
https://leetcode.com/problems/validate-binary-search-tree/
https://leetcode.com/problems/binary-tree-preorder-traversal/
https://leetcode.com/problems/binary-tree-inorder-traversal/
https://leetcode.com/problems/delete-nodes-and-return-forest/
https://leetcode.com/problems/flip-equivalent-binary-trees/
https://leetcode.com/problems/unique-binary-search-trees-ii/
https://leetcode.com/problems/inorder-successor-in-bst/
https://leetcode.com/problems/binary-search-tree-iterator/
https://leetcode.com/problems/balanced-binary-tree/
https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
https://leetcode.com/problems/distribute-coins-in-binary-tree/
https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree
https://leetcode.com/problems/serialize-and-deserialize-binary-tree/
https://leetcode.com/problems/find-duplicate-subtrees/
https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/
https://leetcode.com/problems/symmetric-tree/

Trie:
https://leetcode.com/problems/add-and-search-word-data-structure-design/
https://leetcode.com/problems/design-search-autocomplete-system/

Also, bonus, general words of advice:

  • Do the LeetCode Saturday Contests
  • Don’t be afraid to ask or give yourself a lot of time to prep for these interviews
  • Grind by concept, not by most liked
  • Tree & BFS/DFS & sliding window problems need to be cash money
  • Create iterative and recursive solutions for BFS/DFS/Tree problems
  • Study a summarized markdown of all takeaways from each concept to study just before an interview
  • If you’re an ultra tryhard, read LeetCode problem articles as you fall asleep
  • If you’re super ultra tryhard, go to sleep critically solving problems in your head while you fall asleep (even dream about them)
  • ^Ok not entirely recommended lol
Comments (2)