I am grateful for the support I received from the online coding community, and now I would like to share my interview experiences and feedback. \n\n### Myself / Summary\n___\nExperience: 2.5 years as a Full-Stack Software Engineer\nPrevious Role: Full-stack Software Engineer + Part-time Remote Full-stack Software Engineer (2 jobs)\nDate started applying: End of January / Beginning of February \nDate offer accepted: Mid-March \nTotal companies applied to: ~60\nTotal companies interviewed with: ~16\n\n### Preparation\n____\n#### Overview\nThe majority of my preparation involved practicing leetcode-style questions on various platforms. I completed approximately 150 problems, including 60 easy, 80 medium, and 10 hard. I also completed the Udemy course "Master the Coding Interview: Data Structures + Algorithms" by Andrei Neagoie. For system design, I primarily watched YouTube videos, such as "Design Twitter", "Design a Parking Lot", and TechLead's video. Finally, I dedicated 15-20 hours to thoroughly documenting my top 6-8 most successful and complex projects, in preparation for the behavioral interview stages.\n\n#### The Turning Point\nInitially, I attempted to balance my preparation with my full-time and part-time jobs, which slowed down my progress. However, as I began receiving interviews with prominent companies, I felt increased pressure due to my non-CS background. I realized I needed more time to prepare to compete effectively. Watching a video by Nick White was a turning point for me. He mentioned successfully interviewing at Google and Uber by studying full-time for a month. Inspired by this, I submitted my two-week notice at my full-time job, giving me 2.5 weeks to study full-time. I believe this decision was crucial to my success in the interviews.\n\n#### Leetcode Strategy\nI compiled a list of core data structures and algorithms recommended for Google and Facebook interview preparation, which align with those commonly found in YouTube and Google searches. These include strings, arrays, trees, linked lists, stacks, queues, hash tables, sorting, graphs, dynamic programming, etc. I then worked on problems from each area, starting with "Easy" difficulty and progressing to "Medium" difficulty. I did not focus on multiple problems from the same area (e.g., multiple tree problems followed by multiple array problems). Instead, I followed a pattern like array =\u003e string =\u003e dynamic programming =\u003e linked list, etc. As onsite interview dates approached, I utilized LeetCode Premium to filter problems by company and concentrated on those specific problems.\n\nRegarding my approach to individual problems, if I was completely stuck, I would still dedicate up to an hour or two to attempt a brute-force solution. Once I solved, or failed to solve, a problem, I would review the solutions in the discussion section and compare them to my solution in terms of complexity and conciseness. If my solution was significantly weaker, I would clear my code and try again later that day or the following day to ensure I understood how to write the more optimal solution. For unfamiliar or particularly challenging problems, I would search YouTube for detailed explanation videos, such as for n-queens, word ladder, longest palindromic substring, etc.\n\n### Interview Experiences\n___\n\n#### PayPal [NDA - LATE OFFER]\n* Position\n * Full-stack Software Engineer\n* Overview\n * Applied directly on their website\n * Participated in the onsite interview process\n* Interview Result\n * Initially rejected, but received a call a couple of weeks later inquiring about my continued interest. By then, I had accepted another offer, so I declined and expressed my gratitude.\n* Interview Experience\n * Mostly positive\n * Some interview stages felt a bit adversarial, creating a sense of "why should we even be considering you?"\n\n#### HackerRank [OFFER]\n* Position\n * Front-end Software Engineer\n* Application\n * Applied directly on their website\n * Received an email invitation to complete their initial online assessment (no phone call yet)\n* Stage 1: Online Assessment (on HackerRank)\n * Two hours to complete two small React projects (completed via HackerRank's "projects") which allowed cloning a repo and pushing changes via git (a unique and enjoyable experience)\n * The first project involved building components to render a list of items in a table, with sorting capabilities by various fields.\n * The second project was similar to the first, but included adding routes, navigating to routes, and filtering data based on the route path.\n* Stage 2: Phone call with Eng Manager (technical + behavioral)\n * The call was a positive experience lasting approximately 90-120 minutes.\n * It included situational questions that were both behavioral and technical, as well as a range of specific front-end and React questions.\n* Stage 3: Virtual Onsite Part I (the virtual onsite was split into two days)\n * The in-person onsite was transitioned to virtual due to COVID-19.\n * Interview 1: System Design\n * Design a web app where people can play tic-tac-toe together.\n * Interview 2: Coding Challenge\n * Challenge 1\n * Given a grammatically correct English sentence, return a new sentence with all words sorted by length, while preserving capitalization and punctuation.\n * Challenge 2\n * Leetcode #121 - Best Time to Buy and Sell Stock\n* Interview 3: React Project\n * Given a portion of HackerRank's custom component library, build a simple tabs component (allowing selection of tab 1 or tab 2 to display corresponding content).\n* Stage 4: Virtual Onsite Part II\n * Interview 1: Behavioral\n * Provide examples of how I personified HackerRank's core values.\n * Interview 2: Technical + Business\n * General conversation with an engineering SVP about the company and myself.\n * Interview 3: Wrap-up with Recruiter\n* Interview Result\n * Informed that I passed the onsite and they would be proceeding with an offer.\n * I accepted an offer with my top choice company before they could finalize their offer, so I informed them and expressed my gratitude for the experience.\n* Interview Experience\n * Very positive\n * I was excited to interview with a YC company and impressed with their products and the individuals I interacted with.\n\n#### Amazon [OFFER]\n* Position\n * Software Development Engineer\n* Application\n * A recruiter reached out to me via Hired.com and invited me for an initial phone call.\n* Stage 1: Call with recruiter\n * Quick and straightforward conversation about the position, the company, my background/experience, and the interview process.\n* Stage 2: Online Assessment\n * Overview\n * 90 minutes to complete two medium leetcode-style questions and write about my solutions and their space/time complexity.\n * Question 1\n * Leetcode #419 - Battleships in a Board\n * Question 2\n * Leetcode #200 - Number of Islands\n* Stage 3: Tech Phone Screen\n * Overview\n * 45-minute call with a senior engineer, including behavioral questions and a coding challenge.\n * Coding Challenge\n * Write a function that takes an array of numbers and returns the second-largest number.\n* Stage 4: Virtual Onsite\n * Interview 1: LP + Coding Challenge\n * Overview\n * Amazon interviews emphasize leadership principles, so I was asked one or two LP questions and the coding challenge.\n * Coding Challenge\n * Assume a Google Analytics page tracker logs user page transitions (e.g., user went from Page 1 to Page 2). Write a function that takes an array of page logs and two pages and returns whether there exists a transitive link between those pages (e.g., if the user went from Page 1 to Page 2 to Page 3, there is a transitive link between Page 1 and Page 3).\n * Interview 2: LP + System Design\n * System Design\n * Design a system that handles the checkout payment part of an e-commerce app (when a user is in their cart and submits payment).\n * Interview 3: LP + Coding Challenge\n * Coding Challenge\n * Write a function that takes a tree and returns the maximum width.\n * Interview 4: LP + Coding Challenge\n * Coding Challenge\n * "Build tic-tac-toe"\n* Interview Result\n * Received notification later that afternoon that I passed and would be receiving an offer.\n * The offer was very attractive, but I wanted to wait for responses from Google and Facebook first.\n * Ultimately declined the offer due to accepting Facebook's offer.\n* Interview Experience\n * Very positive\n * Recruiters were outstanding and incredibly helpful.\n * Interviews were challenging.\n * The only negative comment is that I didn't feel a strong connection with three out of the four onsite interviewers. It was difficult to gauge their satisfaction with my responses during the interviews.\n\n#### Google [was in hiring committee stage]\n* Position\n * Software Engineer\n* Application\n * A Google recruiter cold-messaged me on LinkedIn six months prior, when I wasn't actively interviewing.\n * I followed up with that recruiter and was able to skip directly to an onsite interview.\n* Stage 1: Call with recruiter\n * Quick and straightforward conversation about the position, the company, my background/experience, and the interview process.\n* Stage 2: Virtual Onsite\n * Interview 1: Coding Challenge\n * Coding Challenge\n * Write a function that takes an array of words and returns their shortened letter-count version (e.g., ["google", "word"] =\u003e ["g4e", "w2d\