<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by GreatFrontEnd on Medium]]></title>
        <description><![CDATA[Stories by GreatFrontEnd on Medium]]></description>
        <link>https://medium.com/@greatfrontend?source=rss-ca17f8ab5fbd------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*DghMfImmZkwAP5u_Upf3TA.png</url>
            <title>Stories by GreatFrontEnd on Medium</title>
            <link>https://medium.com/@greatfrontend?source=rss-ca17f8ab5fbd------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 07 Apr 2026 07:35:48 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@greatfrontend/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[The complete Blind 75 List guide: Master data structures and algorithms for technical interviews]]></title>
            <link>https://medium.com/@greatfrontend/the-complete-blind-75-list-guide-master-data-structures-and-algorithms-for-technical-interviews-1420bd7ed264?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/1420bd7ed264</guid>
            <category><![CDATA[blind75]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Mon, 22 Dec 2025 18:02:09 GMT</pubDate>
            <atom:updated>2025-12-22T18:02:09.446Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*txZnJ7CMhH462vk0nATDYA.png" /></figure><p>Are you preparing for technical interviews at top tech companies? If so, you’ve probably heard about the famous <strong>Blind 75 list</strong>. This curated collection of coding problems has become the gold standard for interview preparation, helping thousands of engineers land jobs at companies like Google, Amazon, and Meta.</p><p>In this comprehensive guide, I’ll break down everything you need to know about the Blind 75 list, why it’s so effective, and how to use it strategically for your interview prep.</p><h3>What is the Blind 75 list?</h3><p>The Blind 75 list is a carefully curated collection of 75 coding problems that cover the most essential data structures and algorithms concepts tested in technical interviews. Originally shared on the Blind app (hence the name), this list has gained massive popularity because it focuses on quality over quantity.</p><p>Unlike other resources that overwhelm you with hundreds of problems, the Blind 75 list strategically selects problems that:</p><ul><li>Cover fundamental programming patterns</li><li>Appear frequently in real interviews</li><li>Build upon each other to reinforce learning</li><li>Provide maximum learning impact with minimal time investment</li></ul><h3>Why the Blind 75 list is so effective</h3><h4>1. Curated for maximum impact</h4><p>Every problem on the Blind 75 list serves a specific purpose. You won’t waste time on obscure problems that rarely appear in interviews. Instead, you’ll focus on patterns and techniques that interviewers actually test.</p><h4>2. Balanced difficulty progression</h4><p>The list includes problems ranging from easy to hard, allowing you to build confidence while gradually tackling more complex challenges. This balanced approach prevents frustration and maintains steady progress.</p><h4>3. Comprehensive topic coverage</h4><p>The Blind 75 list covers essential topics including:</p><ul><li>Arrays and strings</li><li>Linked lists</li><li>Trees and graphs</li><li>Dynamic programming</li><li>Binary search</li><li>Sorting algorithms</li><li>Hash maps</li><li>Stack and queue operations</li></ul><h4>4. Time-efficient preparation</h4><p>With only 75 problems, you can realistically complete the entire list in 4–6 weeks with consistent practice. This focused approach is perfect for busy professionals who need efficient interview prep.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Auj2CF_bUYQq1ppcwVMl6Q.png" /></figure><h3>Essential problems from the Blind 75 list</h3><p>While I can’t share premium solutions here, let me highlight some key problem types you’ll encounter:</p><h4>Array problems</h4><ul><li><strong>Two sum</strong>: Finding pairs that add up to a target</li><li><strong>Maximum subarray</strong>: Understanding dynamic programming basics</li><li><strong>Product of array except self</strong>: Working with array manipulation</li></ul><h4>Tree problems</h4><ul><li><strong>Maximum depth of binary tree</strong>: Fundamental tree traversal</li><li><strong>Valid binary search tree</strong>: Understanding BST properties</li><li><strong>Lowest common ancestor</strong>: Advanced tree algorithms</li></ul><h4>String problems</h4><ul><li><strong>Valid anagram</strong>: Hash map applications</li><li><strong>Longest palindromic substring</strong>: String manipulation techniques</li><li><strong>Group snagrams</strong>: Complex data structure usage</li></ul><p>These problems form the foundation of most technical interviews and teach you reusable patterns you’ll apply to similar questions.</p><h3>How to Approach the Blind 75 List Strategically</h3><h4>Week 1–2: Foundation building</h4><p>Start with easier problems focusing on arrays, strings, and basic data structures. Don’t rush, understanding the patterns is more important than speed.</p><h4>Week 3–4: Tree and graph exploration</h4><p>Dive into tree traversals, binary search trees, and basic graph algorithms. These concepts appear frequently in interviews.</p><h4>Week 5–6: Advanced topics</h4><p>Tackle dynamic programming, complex algorithms, and harder problems. By now, you should recognize common patterns and solve problems more efficiently.</p><h4>Daily practice tips</h4><ol><li><strong>Solve 1–2 problems daily</strong> rather than cramming</li><li><strong>Write solutions by hand first</strong> before coding</li><li><strong>Time yourself</strong> to simulate interview pressure</li><li><strong>Review solutions</strong> even when you solve problems correctly</li><li><strong>Practice explaining your approach</strong> out loud</li></ol><h3>Common mistakes to avoid</h3><h4>1. Jumping to hard problems too early</h4><p>Resist the temptation to tackle difficult problems before mastering the basics. Build your foundation systematically.</p><h4>2. Memorizing solutions instead of understanding patterns</h4><p>Focus on understanding the underlying patterns and techniques rather than memorizing specific solutions.</p><h4>3. Skipping the “easy” problems</h4><p>Easy problems teach fundamental patterns you’ll need for harder questions. Don’t skip them thinking they’re beneath you.</p><h4>4. Not practicing code implementation</h4><p>Understanding the algorithm is just the first step. Practice writing clean, bug-free code under time pressure.</p><h3>Why Front End engineers should master the blind 75 list</h3><p>As a front end engineer, you might wonder why data structures and algorithms matter for your role. Here’s the reality: most tech companies use the same interview process for all engineering roles, regardless of specialization.</p><p>Companies like Google, Meta, and Amazon expect front-end engineers to demonstrate strong algorithmic thinking. The Blind 75 list prepares you for these standardized technical rounds while building problem-solving skills that make you a better engineer overall.</p><h3>Maximizing Your Blind 75 Practice</h3><h4>Choose the right platform</h4><p>While you can find the Blind 75 list on various platforms, having access to quality solutions and test cases makes a significant difference. Look for platforms that offer:</p><ul><li>Solutions in your preferred programming language (JavaScript/TypeScript for front-end engineers)</li><li>Automated testing to verify your solutions</li><li>In-browser coding environments</li><li>Detailed explanations from experienced engineers</li></ul><h4>Focus on JavaScript/TypeScript implementation</h4><p>If you’re a front-end engineer, practicing in JavaScript or TypeScript gives you an advantage. You’ll be more comfortable with the syntax during interviews and can leverage language-specific features effectively.</p><h4>Track your progress</h4><p>Keep a spreadsheet or use a platform that tracks your progress through the Blind 75 list. Seeing your advancement helps maintain motivation during challenging periods.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*islwHREV1nFOVMy4zcSm9w.png" /></figure><h3>The bottom line: Your path to interview success</h3><p>The Blind 75 list has earned its reputation as the most effective resource for technical interview preparation. It’s not about memorizing 75 solutions, it’s about understanding the fundamental patterns that appear in thousands of possible interview questions.</p><p>By working through this curated list systematically, you’ll develop the algorithmic thinking and coding skills needed to excel in technical interviews at any top tech company.</p><p>Remember, consistency beats intensity. Dedicate time daily to work through these problems, focus on understanding rather than memorization, and practice implementing clean solutions under time pressure.</p><h3>Ready to start your blind 75 journey?</h3><p>The Blind 75 list is your roadmap to technical interview success, but having the right resources makes all the difference. You need quality solutions, proper test cases, and an environment designed specifically for interview preparation.</p><p><strong>Want to practice the Blind 75 list with solutions specifically tailored for front-end engineers?</strong> Check out<a href="https://www.greatfrontend.com/interviews/blind75"> GreatFrontEnd’s Blind 75 collection</a>, where you’ll find every problem solved in JavaScript and TypeScript by ex-interviewers from top tech companies.</p><p>With automated test cases, in-browser coding, and detailed explanations, you’ll master these essential problems faster and more effectively than studying alone.</p><p>Start your preparation today, your dream job is waiting.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1420bd7ed264" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The complete front end developer CV guide that actually gets you interviews]]></title>
            <link>https://medium.com/@greatfrontend/the-complete-front-end-developer-cv-guide-that-actually-gets-you-interviews-281d92dde624?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/281d92dde624</guid>
            <category><![CDATA[cv-writing]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[resume-writing-tips]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[resume]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Fri, 19 Dec 2025 10:02:21 GMT</pubDate>
            <atom:updated>2025-12-19T10:14:52.033Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Front end developer CV guide explaining how to write an ATS-friendly resume that highlights real impact and helps developers get more interviews" src="https://cdn-images-1.medium.com/max/1024/1*zBF6cIHDxENMDQ3TMe4-xQ.png" /></figure><p><em>Stop getting rejected. Here’s how to write a CV that makes hiring managers want to meet you.</em></p><p>Let me guess. You’ve been sending out your CV for weeks, maybe even months, and you’re barely getting any responses.</p><p>You know you’re a good developer. You can build beautiful, responsive websites. You understand JavaScript inside and out. But somehow, your CV isn’t opening doors.</p><p>Here’s the brutal truth: Most front end developer CVs are terrible. They either look like they were designed in 1995, or they’re so fancy that applicant tracking systems (ATS) can’t even read them.</p><p>I’ve reviewed hundreds of CVs from front end developers at all levels, and I’ve noticed some patterns. The developers who get interviews, especially at top companies, follow specific rules that most people don’t know about.</p><p>As someone who’s helped thousands of developers improve their CVs and land jobs at companies like Google, Meta, and Amazon, I’m going to share exactly what works and what doesn’t.</p><h3>Why your current CV isn’t working</h3><p>Before we dive into solutions, let’s talk about why most front end developer CVs fail:</p><p><strong>Problem #1: They look unprofessional</strong> You’re a front end developer. If your CV doesn’t look good, hiring managers assume you can’t design good user interfaces either.</p><p><strong>Problem #2: They’re not ATS-friendly</strong> 60% of large companies use applicant tracking systems to filter CVs before humans even see them. Fancy designs often get rejected automatically.</p><p><strong>Problem #3: They don’t show impact</strong> Most developers just list their job duties instead of showing the results they achieved.</p><p><strong>Problem #4: They include irrelevant skills</strong> Adding every JavaScript library you’ve touched once makes you look unfocused, not versatile.</p><figure><img alt="Step-by-step front end developer CV structure showing header, work experience, skills, projects, education, and final ATS checks to improve interview chances" src="https://cdn-images-1.medium.com/max/1024/1*NzWhRoX1uTyIwDFG-OWXDQ.png" /></figure><p>Let’s fix these problems one by one.</p><h3>The foundation: CV structure that works</h3><p>Your CV should follow this exact structure:</p><ol><li><strong>Header</strong> (Name, contact info, portfolio link)</li><li><strong>Professional Summary</strong> (2–3 lines max)</li><li><strong>Work Experience</strong> (The biggest section)</li><li><strong>Skills</strong> (Carefully curated)</li><li><strong>Projects</strong> (Portfolio highlights)</li><li><strong>Education</strong> (Keep it brief)</li></ol><p><strong>Length rule:</strong> One page if you have less than 5 years of experience. Two pages maximum, no matter how senior you are.</p><figure><img alt="Step-by-step front end developer CV structure showing header, work experience, skills, projects, education, and final ATS checks to improve interview chances" src="https://cdn-images-1.medium.com/max/1024/1*ua05qhVPrVnd1dljUo7sGg.png" /></figure><h3>Making your CV look professional (without breaking ATS)</h3><p>Here’s the secret: Your CV needs to look good to humans but simple enough for machines to read.</p><p><strong>Do this:</strong></p><ul><li>Use a single-column layout</li><li>Stick to standard fonts (Arial, Calibri, or Garamond)</li><li>Use consistent formatting throughout</li><li>Save as PDF for submission</li><li>Use bullet points for easy scanning</li></ul><p><strong>Don’t do this:</strong></p><ul><li>Create your CV in Photoshop or Canva</li><li>Use multiple columns</li><li>Add graphics or images</li><li>Use fancy fonts that might not display properly</li><li>Submit as a Word document</li></ul><p><strong>Pro tip:</strong> Test your CV by copying and pasting the text into a plain text editor. If it looks messy, ATS systems will struggle too.</p><h3>The work experience section that gets You noticed</h3><p>This is where most developers mess up. They write boring job descriptions instead of impressive achievements.</p><p><strong>Bad example:</strong> “Built websites using HTML, CSS, and JavaScript”</p><p><strong>Good example:</strong> “Built a performant e-commerce website serving 20,000+ monthly users with React and Next.js, achieving 98 Lighthouse score and sub-2-second load times. Increased conversion rate by 15% through UX improvements.”</p><p>See the difference? The second example shows:</p><ul><li>Scale (20,000+ users)</li><li>Technology choices (React, Next.js)</li><li>Performance metrics (Lighthouse score, load times)</li><li>Business impact (15% conversion increase)</li></ul><p><strong>Here’s what to highlight in your experience:</strong></p><p><strong>Performance improvements:</strong> “Reduced page load time by 40% through code splitting and lazy loading”</p><p><strong>User impact:</strong> “Built responsive design system used across 12 product teams, improving development speed by 30%”</p><p><strong>Technical achievements:</strong> “Migrated legacy jQuery codebase (50,000+ lines) to React, reducing bugs by 60%”</p><p><strong>Testing and quality:</strong> “Increased test coverage from 30% to 85%, reducing production bugs by 50%”</p><h3>The skills section that actually helps</h3><p>Most developers list way too many skills. This dilutes the impact and makes you look unfocused.</p><p><strong>The rule:</strong> Include only skills that are either:</p><ol><li>Listed in the job description</li><li>Critical to front end architecture</li><li>Widely used or trending</li><li>Show your breadth without overwhelming</li></ol><p><strong>Bad example:</strong></p><blockquote>Languages: HTML, CSS, JavaScript, TypeScript, Python, Java, C++, PHP</blockquote><blockquote>Technologies: React, Angular, Vue, Svelte, jQuery, Bootstrap, Tailwind, Sass, Less, Webpack, Vite, Parcel, Rollup, Jest, Mocha, Jasmine, Cypress, Selenium, GraphQL, REST, Node.js, Express, MongoDB, PostgreSQL…</blockquote><p><strong>Good example:</strong></p><p>Languages: HTML, CSS, JavaScript, TypeScript</p><p>Technologies: React, Next.js, Tailwind CSS, Jest, Cypress, GraphQL, Webpack</p><blockquote><strong>Pro tip:</strong> Look at the job description and make sure your skills section includes the technologies they mention (if you actually know them).</blockquote><h3>Projects that prove your skills</h3><p>Your projects section is crucial, especially if you’re early in your career or changing jobs. This is where you show off modern technologies and personal passion.</p><p><strong>What makes a great project entry:</strong></p><p><strong>Clear description:</strong> What does it do and why did you build it? <strong>Technology stack:</strong> What did you use and why? <strong>Live links:</strong> GitHub repo and deployed version <strong>Key achievements:</strong> Performance, user feedback, technical challenges solved</p><p><strong>Example:</strong></p><p>Personal Finance Tracker | React, Node.js, MongoDB</p><p>- Built full-stack web app helping users track expenses and set budgets</p><p>- Implemented real-time data visualization with Chart.js showing spending patterns</p><p>- Added OAuth authentication and secure data encryption</p><p>- Live: myfinanceapp.com | Code: github.com/yourname/finance-tracker</p><p><strong>Bonus points for:</strong></p><ul><li>Open source contributions</li><li>Projects using technologies the company uses</li><li>Apps that solve real problems</li><li>Code with good documentation and tests</li></ul><h3>Common mistakes that kill your chances</h3><p><strong>Mistake #1: Generic professional summary</strong> “Experienced front end developer with passion for creating user-friendly websites.”</p><p><strong>Better:</strong> “Front end developer with 4+ years building scalable React applications. Improved core product performance by 40% at previous role, serving 100k+ daily users.”</p><p><strong>Mistake #2: Listing outdated skills</strong> Don’t mention jQuery, Flash, or Internet Explorer unless the job specifically requires them.</p><p><strong>Mistake #3: No quantifiable achievements</strong> Instead of “improved website performance,” write “reduced load time from 8 seconds to 2 seconds.”</p><p><strong>Mistake #4: Too much personal information</strong> Skip the photo, age, marital status, and hobbies unless they’re directly relevant.</p><p><strong>Mistake #5: Ignoring mobile optimization</strong> Your CV should look good on phones too. Many recruiters review CVs on mobile devices.</p><h3>Tailoring your CV for different types of companies</h3><p><strong>For startups:</strong></p><ul><li>Emphasize versatility and ability to wear multiple hats</li><li>Highlight experience with modern tech stacks</li><li>Show examples of moving fast and iterating</li></ul><p><strong>For large corporations:</strong></p><ul><li>Focus on scale and collaboration</li><li>Mention experience with large codebases</li><li>Highlight process improvements and best practices</li></ul><p><strong>For agencies:</strong></p><ul><li>Show variety in projects and clients</li><li>Emphasize ability to work under tight deadlines</li><li>Include examples of different industries you’ve worked in</li></ul><h3>The final checklist</h3><p>Before sending your CV, make sure you’ve covered these basics:</p><p>✅ <strong>Contact information is current</strong> (especially your phone number)<br>✅ <strong>Portfolio link works</strong> and shows your best work<br>✅ <strong>No typos or grammatical errors</strong> (seriously, proofread everything)<br>✅ <strong>Consistent formatting</strong> throughout the document<br>✅ <strong>Relevant keywords</strong> from the job description are included<br>✅ <strong>File name is professional</strong> (FirstName-LastName-CV.pdf)<br>✅ <strong>PDF format</strong> for consistent display across devices</p><h3>Ready to land your next front end developer role?</h3><p>Writing a great CV is just the first step. Once you start getting interviews, you’ll need to prove your technical skills and problem-solving abilities.</p><p>That’s where practice makes the difference. At GreatFrontEnd, we help developers prepare for the entire interview process:</p><p>✅ <strong>Practice real interview questions</strong> used at top companies<br>✅ <strong>Build projects</strong> that showcase your skills<br>✅ <strong>Learn from detailed solutions</strong> written by senior engineers<br>✅ <strong>Master the concepts</strong> that actually matter in interviews</p><p>Over 34,000 developers have used our platform to prepare for interviews at companies like Google, Amazon, and Meta.</p><p><a href="https://www.greatfrontend.com/questions"><strong>Start practicing front end interview questions →</strong></a></p><p>Remember, your CV is your first impression. Make it count by showing not just what you’ve done, but the impact you’ve made. Focus on results, keep it clean and professional, and always tailor it to the job you want.</p><p><em>What’s worked best for you when writing CVs? Share your tips in the comments below!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=281d92dde624" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript Closures: The one concept that will make you a better developer]]></title>
            <link>https://medium.com/@greatfrontend/javascript-closures-the-one-concept-that-will-make-you-a-better-developer-11a4ae17c124?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/11a4ae17c124</guid>
            <category><![CDATA[javascript-closure]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Thu, 18 Dec 2025 16:30:41 GMT</pubDate>
            <atom:updated>2025-12-18T16:30:41.732Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="JavaScript closures explained with examples showing how functions remember variables from outer scope and why closures matter for developers" src="https://cdn-images-1.medium.com/max/1024/1*hIPXRI4M6Q-FrUK95j5uHQ.png" /><figcaption>Step by step explanation of how JavaScript closures work, from function creation and scope capture to memory retention and real world usage in callbacks, counters, and React hooks</figcaption></figure><p><em>Understanding closures is like unlocking a secret superpower in JavaScript. Here’s everything you need to know.</em></p><p>I’ll be honest with you. When I first encountered JavaScript closures, I thought they were some advanced, mystical concept that only senior developers needed to worry about.</p><p>Boy, was I wrong.</p><p>Closures aren’t just an advanced topic, they’re everywhere in JavaScript. If you’ve ever written an event handler, used a callback function, or worked with React hooks, you’ve already been using closures without even realizing it.</p><p>The problem is, most developers never take the time to truly understand what’s happening under the hood. They copy code that works, but when things break or when an interviewer asks them to explain closures, they’re stuck.</p><p>After reviewing thousands of JavaScript interview questions and talking to developers at all levels, I’ve realized that understanding closures is what separates developers who just write code from those who truly understand JavaScript.</p><p>So let’s fix that. In this article, I’ll explain closures in a way that actually makes sense, show you why they’re useful, and give you the confidence to use them in your own code.</p><h3>What exactly is a Closure?</h3><figure><img alt="What is a JavaScript closure and why it matters, including use cases like private variables, callbacks, event handlers, and React hooks" src="https://cdn-images-1.medium.com/max/1024/1*Zcgifhbbci4eahXHss-ZMw.png" /></figure><p>Let me start with a definition that doesn’t sound like it came from a computer science textbook:</p><p><strong>A closure is a function that remembers variables from the place where it was created, even after that place is gone.</strong></p><p>Think of it like a backpack. When you create a function inside another function, that inner function packs a backpack with all the variables it might need from its surroundings. Even if you take that function somewhere else, it still has its backpack with all those variables.</p><p>Here’s the simplest example:</p><pre>javascript<br>function outerFunction() {<br>  const message = &quot;Hello from the outside!&quot;;<br>  <br>  function innerFunction() {<br>    console.log(message); // This still works!<br>  }<br>  <br>  return innerFunction;<br>}<br><br>const myFunction = outerFunction();<br>myFunction(); // &quot;Hello from the outside!&quot;</pre><p>What’s happening here? Even though outerFunction finished running, innerFunction still remembers the messagevariable. That’s a closure.</p><h3>The “aha!” moment: A real-world example</h3><p>Let’s look at something you probably see every day, a counter:</p><pre>javascript<br>function createCounter() {<br>  let count = 0;<br>  <br>  return function() {<br>    count++;<br>    return count;<br>  };<br>}<br><br>const counter = createCounter();<br>console.log(counter()); // 1<br>console.log(counter()); // 2<br>console.log(counter()); // 3</pre><p>This is where closures get interesting. Each time you call counter(), it remembers the previous value of count. The variable count is “private”, you can’t access it directly from outside, but the inner function can still see it and modify it.</p><p><strong>Why is this powerful?</strong> You’ve just created a private variable in JavaScript! The count variable can’t be accidentally changed by other parts of your code.</p><h3>Closures are everywhere (you just didn’t know it)</h3><p>Remember when I said you’ve probably already used closures? Here are some places you’ve definitely encountered them:</p><h4>Event Handlers</h4><pre>javascript<br>function setupButton(name) {<br>  const button = document.getElementById(&#39;myButton&#39;);<br>  <br>  button.addEventListener(&#39;click&#39;, function() {<br>    alert(&#39;Hello &#39; + name + &#39;!&#39;); // &#39;name&#39; is from the outer scope<br>  });<br>}<br><br>setupButton(&#39;John&#39;);</pre><p>That event handler? It’s a closure. It remembers the name variable even after setupButton finishes running.</p><h4>React Hooks</h4><p>If you’ve used React, you’ve definitely worked with closures:</p><pre>javascript<br>function Counter() {<br>  const [count, setCount] = useState(0);<br>  <br>  const handleClick = () =&gt; {<br>    setCount(count + 1); // Closure captures &#39;count&#39; and &#39;setCount&#39;<br>  };<br>  <br>  return &lt;button onClick={handleClick}&gt;Count: {count}&lt;/button&gt;;<br>}</pre><p>That handleClick function? Yep, it’s a closure too.</p><h4>Array Methods</h4><p>Even simple array methods use closures:</p><pre>javascript<br>const numbers = [1, 2, 3, 4, 5];<br>const multiplier = 3;<br><br>const tripled = numbers.map(function(num) {<br>  return num * multiplier; // &#39;multiplier&#39; comes from outside<br>});</pre><figure><img alt="Step by step explanation of how JavaScript closures work, from function creation and scope capture to memory retention and real world usage in callbacks, counters, and React hooks" src="https://cdn-images-1.medium.com/max/1024/1*qXbefl_9iY87P3s_efA30A.png" /></figure><h3>Common interview questions about Closures</h3><p>Here are the questions I see most often in JavaScript interviews:</p><h4>Question 1: The classic loop problem</h4><p><strong>“What will this code output, and why?”</strong></p><pre>javascript<br>for (var i = 0; i &lt; 3; i++) {<br>  setTimeout(function() {<br>    console.log(i);<br>  }, 1000);<br>}</pre><p><strong>Answer:</strong> It will print 3 three times, not 0, 1, 2 like you might expect.</p><p><strong>Why?</strong> By the time the setTimeout functions run, the loop has finished and i is 3. All three functions share the same reference to i.</p><p><strong>How to fix it:</strong> Use let instead of var, or create a new scope:</p><pre>javascript<br>for (let i = 0; i &lt; 3; i++) {<br>  setTimeout(function() {<br>    console.log(i); // Now prints 0, 1, 2<br>  }, 1000);<br>}</pre><h4>Question 2: Creating multiple functions</h4><p><strong>“How would you create multiple counter functions that each maintain their own count?”</strong></p><pre>javascript<br>function createCounter() {<br>  let count = 0;<br>  return function() {<br>    count++;<br>    return count;<br>  };<br>}<br><br>const counter1 = createCounter();<br>const counter2 = createCounter();<br><br>console.log(counter1()); // 1<br>console.log(counter1()); // 2<br>console.log(counter2()); // 1 (separate counter!)</pre><p>Each call to createCounter() creates a new closure with its own count variable.</p><h3>Why closures matter for your career</h3><p>Understanding closures isn’t just about passing interviews. Here’s why they’re genuinely useful:</p><p><strong>1. Data Privacy:</strong> JavaScript doesn’t have built-in private variables, but closures let you create them.</p><p><strong>2. Functional Programming:</strong> Closures enable powerful patterns like currying and partial application.</p><p><strong>3. Module Patterns:</strong> Before ES6 modules, closures were the main way to create modules with private and public methods.</p><p><strong>4. Better Code Organization:</strong> Closures help you write cleaner, more organized code by keeping related data and functions together.</p><h3>Advanced closure patterns</h3><p>Once you understand the basics, here are some advanced patterns that’ll make you look like a JavaScript ninja:</p><h4>The Module Pattern</h4><pre>javascript<br>const Calculator = (function() {<br>  let result = 0; // Private variable<br>  <br>  return {<br>    add: function(x) {<br>      result += x;<br>      return this;<br>    },<br>    multiply: function(x) {<br>      result *= x;<br>      return this;<br>    },<br>    getResult: function() {<br>      return result;<br>    }<br>  };<br>})();<br><br>Calculator.add(5).multiply(3).getResult(); // 15</pre><h4>Function Factories</h4><pre>javascript<br>function createValidator(type) {<br>  const patterns = {<br>    email: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,<br>    phone: /^\(\d{3}\)\s\d{3}-\d{4}$/<br>  };<br>  <br>  return function(input) {<br>    return patterns[type].test(input);<br>  };<br>}<br><br>const emailValidator = createValidator(&#39;email&#39;);<br>const phoneValidator = createValidator(&#39;phone&#39;);<br><br>console.log(emailValidator(&#39;test@example.com&#39;)); // true</pre><h3>Common pitfalls to avoid</h3><p><strong>Memory Leaks:</strong> Closures keep references to their outer scope, which can prevent garbage collection. Be mindful in long-running applications.</p><p><strong>Performance:</strong> Creating many closures can impact performance. In most cases, this isn’t a problem, but be aware of it in performance-critical code.</p><p><strong>Debugging Confusion:</strong> Closures can make debugging trickier because variables might come from unexpected places.</p><h3>Ready to master javaScript closures?</h3><p>Understanding closures is just the beginning. If you really want to level up your JavaScript skills, you need to practice with real interview questions and get feedback on your code.</p><p>At GreatFrontEnd, we have dozens of JavaScript questions that test your understanding of closures, scope, and other fundamental concepts. You can:</p><p>✅ <strong>Practice coding directly in your browser</strong> — No setup required<br>✅ <strong>Get instant feedback</strong> with our automated test cases<br>✅ <strong>Learn from detailed explanations</strong> written by senior engineers<br>✅ <strong>Master JavaScript concepts</strong> that actually matter in interviews</p><p><a href="https://www.greatfrontend.com/questions/quiz/what-is-a-closure-in-javascript-and-how-why-would-you-use-one"><strong>Start practicing JavaScript closures on GreatFrontEnd →</strong></a></p><p>The difference between a junior developer and a senior developer often comes down to understanding concepts like closures. Don’t just memorize the syntax, understand how it works and why it’s useful.</p><p>Your future self (and your interviewer) will thank you.</p><p><em>Have you encountered tricky closure questions in interviews? Share your experience in the comments below!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=11a4ae17c124" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[10 essential HTML interview questions every developer should master]]></title>
            <link>https://medium.com/@greatfrontend/10-essential-html-interview-questions-every-developer-should-master-7168dae5aa3b?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/7168dae5aa3b</guid>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[html-interview-questions]]></category>
            <category><![CDATA[html]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Wed, 17 Dec 2025 10:20:26 GMT</pubDate>
            <atom:updated>2025-12-17T10:20:26.903Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="10 Essential HTML Interview Questions Every Developer Should Master — overview of the most common HTML topics asked in front-end interviews including semantic elements, accessibility, forms, responsive images, and performance." src="https://cdn-images-1.medium.com/max/1024/1*LeYXb0NifHE93uFlGvLX8Q.png" /></figure><p><em>Getting ready for that front-end interview? Here are the HTML questions you absolutely need to know.</em></p><p>You know that feeling when you walk into a tech interview thinking you’ve got HTML covered, only to get stumped by what seems like a “simple” question about semantic elements or accessibility?</p><p>I’ve been there. And after talking to hundreds of developers who’ve interviewed at companies like Google, Meta, and Amazon, I’ve noticed something: HTML questions are often the make-or-break moment in front-end interviews.</p><p>Why? Because interviewers use HTML questions to quickly assess whether you understand web fundamentals or if you’re simply copying code from Stack Overflow or generating answers with AI, without real context.</p><p>The thing is, most developers spend weeks grinding LeetCode algorithms but barely review HTML basics. Big mistake. I’ve seen brilliant React developers get rejected because they couldn’t explain the difference between section and div.</p><p>At GreatFrontEnd, we’ve analyzed thousands of interview experiences and identified the HTML questions that come up again and again. Here are the 10 most essential ones you need to master.</p><figure><img alt="HTML interview preparation summary comparing what interviewers test — semantic structure, accessibility, real-world components, and performance — with why each concept matters for front-end roles.”" src="https://cdn-images-1.medium.com/max/1024/1*x2TNRfvmXVkgFobqjsWojA.png" /></figure><h3>Question 1: Build a simple counter</h3><p><strong>Why interviewers ask this:</strong> It’s the perfect warm-up question that tests your understanding of basic HTML structure, event handling, and DOM manipulation.</p><p><strong>What they’re really testing:</strong> Can you write clean, semantic HTML? Do you understand the relationship between HTML, CSS, and JavaScript?</p><p><strong>The setup is simple:</strong> Create a button that shows a number. Every time someone clicks it, the number goes up by one.</p><p>Sounds easy, right? But you’d be surprised how many people overthink this or write messy code.</p><p><strong>Key things to remember:</strong></p><ul><li>Use semantic HTML elements</li><li>Keep your JavaScript clean and simple</li><li>Think about accessibility from the start</li></ul><p>Want to practice this one? <a href="https://www.greatfrontend.com/questions/user-interface/counter"><strong>Try the Counter question on GreatFrontEnd →</strong></a></p><h3>Question 2: Create an accessible accordion</h3><p><strong>Why this matters:</strong> Accordions are everywhere in modern web apps, and building an accessible one requires solid HTML knowledge.</p><p><strong>What trips people up:</strong> Most developers can make an accordion work, but making it accessible? That’s where things get tricky.</p><p><strong>The challenge:</strong> Build a component that shows a list of sections. Each section has a title and content. Click the title, and the content expands or collapses.</p><p><strong>The accessibility part is crucial:</strong></p><ul><li>Screen readers need to understand what’s happening</li><li>Keyboard navigation must work properly</li><li>ARIA attributes should be used correctly</li></ul><p>This question separates developers who just make things work from those who build inclusive experiences.</p><p><a href="https://www.greatfrontend.com/questions/user-interface/accordion"><strong>Practice building an accessible accordion →</strong></a></p><h3>Question 3: HTML semantic elements deep dive</h3><p><strong>The question:</strong> “Explain the difference between section, article, aside and div. When would you use each one?”</p><p><strong>Why interviewers love this:</strong> It reveals whether you understand modern HTML or if you’re still thinking like it’s 2005.</p><p><strong>Here’s what they want to hear:</strong></p><ul><li>&lt;div&gt; is for generic containers with no semantic meaning</li><li>&lt;section&gt; groups related content together</li><li>&lt;article is for standalone content that makes sense by itself</li><li>&lt;aside&gt; is for content that’s related but not essential</li></ul><p><strong>Pro tip:</strong> Think about how a screen reader would interpret your choices. If you’re just using divs everywhere, you’re making the web less accessible.</p><h3>Question 4: Form validation and accessibility</h3><p><strong>The scenario:</strong> Build a contact form that validates user input and works well for everyone.</p><p><strong>Why this comes up:</strong> Forms are fundamental to web development, but most developers build forms that are frustrating for users with disabilities.</p><p><strong>What makes this tricky:</strong></p><ul><li>Client-side validation vs server-side validation</li><li>Error message placement and association</li><li>Making sure screen readers can navigate smoothly</li><li>Proper labeling of form controls</li></ul><p><strong>The basics everyone should know:</strong></p><ul><li>Every input needs a proper label</li><li>Error messages should be associated with their inputs</li><li>Required fields should be clearly marked</li><li>Validation should be accessible and helpful</li></ul><p><a href="https://www.greatfrontend.com/questions/user-interface/contact-form"><strong>Build a proper contact form →</strong></a></p><h3>Question 5: The box model challenge</h3><p><strong>The question:</strong> “Explain the CSS box model and how box-sizing affects it.”</p><p><strong>Why it matters:</strong> Understanding the box model is fundamental to CSS layout, but many developers still get confused by padding, borders, and margins.</p><p><strong>What they’re looking for:</strong></p><ul><li>Clear explanation of content, padding, border, and margin</li><li>Understanding of box-sizing: border-box vs content-box</li><li>Real examples of when each approach is useful</li></ul><p><strong>Common mistake:</strong> Explaining the theory but not being able to apply it practically.</p><h3>Question 6: Responsive images and performance</h3><p><strong>The challenge:</strong> “How would you implement responsive images that load efficiently across different devices?”</p><p><strong>Why this comes up:</strong> Images are often the biggest performance bottleneck on websites, and handling them properly requires understanding multiple HTML and CSS concepts.</p><p><strong>Key concepts to cover:</strong></p><ul><li>The srcset attribute and how it works</li><li>Art direction with the &lt;picture&gt; element</li><li>Loading performance with loading=”lazy”</li><li>Modern image formats and fallbacks</li></ul><p><strong>What separates good answers:</strong> Mentioning both performance AND user experience considerations.</p><h3>Question 7: HTML5 APIs and modern features</h3><p><strong>Typical question:</strong> “What are some HTML5 APIs you’ve used, and how do they improve user experience?”</p><p><strong>Why interviewers ask this:</strong> They want to see if you keep up with web standards and think beyond basic markup.</p><p><strong>Strong answers might include:</strong></p><ul><li>Local Storage for offline capabilities</li><li>Geolocation for location-based features</li><li>File API for drag-and-drop uploads</li><li>History API for single-page applications</li></ul><p><strong>Pro tip:</strong> Don’t just list APIs. Explain when and why you’d use them.</p><h3>Question 8: Build a data table with accessibility</h3><p><strong>The task:</strong> Create a table that displays user data with proper accessibility features.</p><p><strong>Why this matters:</strong> Tables seem simple, but making them accessible and usable requires understanding semantic HTML structure.</p><p><strong>Key considerations:</strong></p><ul><li>Proper table headers and their association with data</li><li>Caption and summary for screen readers</li><li>Handling large datasets with pagination</li><li>Making tables work on mobile devices</li></ul><p><a href="https://www.greatfrontend.com/questions/user-interface/data-table"><strong>Try building an accessible data table →</strong></a></p><h3>Question 9: Custom HTML elements and web components</h3><p><strong>The question:</strong> “How would you create a custom HTML element? What are the benefits and drawbacks?”</p><p><strong>Why it’s relevant:</strong> Web Components are becoming more important, and this question tests advanced HTML knowledge.</p><p><strong>What good answers include:</strong></p><ul><li>Understanding of Custom Elements API</li><li>Lifecycle methods and their purposes</li><li>Shadow DOM and style encapsulation</li><li>When to use web components vs frameworks</li></ul><p><strong>Bonus points:</strong> Mentioning accessibility considerations in custom elements.</p><h3>Question 10: Performance and HTML structure</h3><p><strong>The challenge:</strong> “How does HTML structure affect website performance? What techniques do you use to optimize loading?”</p><p><strong>Why this matters:</strong> HTML isn’t just about structure, it directly impacts how fast your site loads and feels.</p><p><strong>Key optimization techniques:</strong></p><ul><li>Critical CSS inlining</li><li>Resource hints like preload and prefetch</li><li>Lazy loading for images and iframes</li><li>Proper script loading with async and defer</li></ul><p><strong>Advanced topic:</strong> Understanding how the browser parser works and how HTML structure affects rendering.</p><figure><img alt="Step-by-step infographic explaining how interviewers evaluate HTML skills: building a counter, creating an accessible accordion, understanding semantic tags, accessible form validation, CSS box model, responsive images, HTML5 APIs, accessible tables, custom elements, and performance optimization." src="https://cdn-images-1.medium.com/max/1024/1*qfJG2y9cz97HcOC7rvgm-g.png" /></figure><h3>Ready to ace your HTML interview?</h3><p>These 10 questions cover the fundamentals that every front-end developer should master. But here’s the thing , knowing the theory is just the first step. You need to practice actually building these solutions.</p><p>That’s exactly why we created GreatFrontEnd. Instead of just reading about HTML concepts, you can:</p><p>✅ <strong>Code directly in your browser</strong> — No setup required<br>✅ <strong>Get instant feedback</strong> with automated test cases<br>✅ <strong>Learn from detailed solutions</strong> written by ex-FAANG engineers<br>✅ <strong>Practice with 90+ HTML questions</strong> covering every topic you’ll encounter</p><p><strong>The best part?</strong> Over 34,000 developers have already used our platform to prepare for interviews at companies like Google, Amazon, and Meta.</p><p>Want to see how you’d handle these questions under pressure? <a href="https://www.greatfrontend.com/questions/html-interview-questions"><strong>Start practicing on GreatFrontEnd →</strong></a></p><p>Remember, HTML might seem basic, but it’s the foundation everything else is built on. Master these fundamentals, and you’ll stand out in any front-end interview.</p><p><em>What HTML questions have you encountered in interviews? Drop a comment below, I’d love to hear about your experiences.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7168dae5aa3b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[10 Essential React interview questions every developer should master in 2026]]></title>
            <link>https://medium.com/@greatfrontend/10-essential-react-interview-questions-every-developer-should-master-in-2026-0c11004c631f?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/0c11004c631f</guid>
            <category><![CDATA[react-interview-question]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Tue, 16 Dec 2025 09:31:21 GMT</pubDate>
            <atom:updated>2025-12-16T09:31:21.767Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Feature image showing the title ’10 Essential React Interview Questions for 2026’ with minimalist line icons representing key React components on a black background" src="https://cdn-images-1.medium.com/max/1024/1*kRnKjzcEP5qMTlfUgVrx8w.png" /></figure><p>React interviews can be nerve-wracking. You’ve studied the docs, built some projects, and feel confident about your skills. But then you sit down for the coding round, and suddenly your mind goes blank when the interviewer asks you to build a “simple” component.</p><p>Here’s the thing , React interviews aren’t just about knowing the syntax. Interviewers want to see how you think, how you structure components, and how you handle real-world scenarios. After helping thousands of developers prepare for their React interviews at GreatFrontEnd, I’ve noticed some patterns in what companies actually ask.</p><p>Today, I’m sharing 10 React questions that keep showing up in interviews. These aren’t random coding puzzles , they’re practical components you’ll likely build in your actual job. Master these, and you’ll walk into your next interview with confidence.</p><h3>Why these questions matter</h3><figure><img alt="Banner image comparing what React interview questions test versus why they matter, shown with lime line icons on a dark-mode layout." src="https://cdn-images-1.medium.com/max/1024/1*Lf02OO0qyS4dWIaHLHJ8VQ.png" /></figure><p>Before we dive in, let me explain why I picked these specific questions. Each one tests different React concepts that interviewers care about:</p><ul><li><strong>Component structure</strong> — Can you break down a problem into logical pieces?</li><li><strong>State management</strong> — Do you know when and how to use useState, useEffect?</li><li><strong>Event handling</strong> — Can you make components interactive?</li><li><strong>Props and data flow</strong> — Do you understand how data moves through React?</li><li><strong>Real-world thinking</strong> — Can you build something users would actually use?</li></ul><p>Let’s get started.</p><h3>Beginner level questions</h3><h4>1. Contact form</h4><p><strong>What it tests:</strong> Form handling, controlled components, validation</p><p>Build a contact form that collects user information and submits it to an API. Sounds simple, right? But this question reveals a lot about how you handle form state, validation, and user feedback.</p><p><strong>What interviewers look for:</strong></p><ul><li>Controlled vs uncontrolled components</li><li>Form validation patterns</li><li>Error handling and user feedback</li><li>Clean state management</li></ul><p><strong>Practice tip:</strong> Focus on making the form accessible and user-friendly. Think about error messages, loading states, and success feedback.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/contact-form"> Practice this question on GreatFrontEnd</a></p><h4>2. Progress bar</h4><p><strong>What it tests:</strong> Dynamic styling, props handling, visual feedback</p><p>Create a progress bar that shows completion percentage. This question tests your ability to work with dynamic styles and create visual feedback for users.</p><p><strong>What interviewers look for:</strong></p><ul><li>How you handle dynamic styling</li><li>Props validation and default values</li><li>Clean, reusable component design</li><li>Smooth visual transitions</li></ul><p><strong>Practice tip:</strong> Think about edge cases , what happens with invalid percentages? How do you make it look smooth?</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/progress-bar"> Practice this question on GreatFrontEnd</a></p><h4>3. Temperature converter</h4><p><strong>What it tests:</strong> Two-way data binding, calculations, controlled inputs</p><p>Build a widget that converts between Celsius and Fahrenheit. This seems basic, but it’s a great test of how you handle two-way data flow.</p><p><strong>What interviewers look for:</strong></p><ul><li>Bidirectional data updates</li><li>Input handling and validation</li><li>Mathematical accuracy</li><li>User experience considerations</li></ul><p><strong>Practice tip:</strong> Make sure both inputs stay in sync when one changes. Handle decimal places gracefully.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/temperature-converter"> Practice this question on GreatFrontEnd</a></p><h4>4. Accordion</h4><p><strong>What it tests:</strong> Conditional rendering, state management, user interaction</p><p>Create an accordion component with collapsible sections. This tests your understanding of conditional rendering and managing multiple component states.</p><p><strong>What interviewers look for:</strong></p><ul><li>Clean state management for multiple sections</li><li>Smooth expand/collapse behavior</li><li>Proper event handling</li><li>Reusable component structure</li></ul><p><strong>Practice tip:</strong> Consider whether multiple sections can be open at once, and how to handle default states.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/accordion"> Practice this question on GreatFrontEnd</a></p><h3>Intermediate Level Questions</h3><h4>5. Todo list</h4><p><strong>What it tests:</strong> List manipulation, CRUD operations, local state management</p><p>Build a todo list where users can add, delete, and mark tasks as complete. This is a classic that tests your ability to manage arrays and handle multiple operations.</p><p><strong>What interviewers look for:</strong></p><ul><li>Efficient list updates</li><li>Proper key handling for list items</li><li>State immutability</li><li>User experience polish</li></ul><p><strong>Practice tip:</strong> Pay attention to how you update the array state. Avoid common pitfalls like mutating state directly.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/todo-list"> Practice this question on GreatFrontEnd</a></p><h4>6. Star rating</h4><p><strong>What it tests:</strong> Interactive components, visual feedback, event handling</p><p>Create a star rating component where users can click to set a rating. This tests your ability to create intuitive user interactions.</p><p><strong>What interviewers look for:</strong></p><ul><li>Hover effects and visual feedback</li><li>Click handling and state updates</li><li>Clean component API design</li><li>Accessibility considerations</li></ul><p><strong>Practice tip:</strong> Think about the user experience , hover states, visual feedback, and making it obvious how to interact.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/star-rating"> Practice this question on GreatFrontEnd</a></p><h4>7. Modal dialog</h4><p><strong>What it tests:</strong> Portal usage, focus management, event handling, accessibility</p><p>Build a modal that can be opened and closed. This question goes deeper into React patterns and accessibility.</p><p><strong>What interviewers look for:</strong></p><ul><li>Proper modal implementation (portals)</li><li>Focus management and accessibility</li><li>Backdrop click handling</li><li>Clean open/close logic</li></ul><p><strong>Practice tip:</strong> Focus on accessibility , keyboard navigation, focus trapping, and screen reader support.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/modal-dialog"> Practice this question on GreatFrontEnd</a></p><h4>8. Tabs component</h4><p><strong>What it tests:</strong> Component composition, state management, navigation patterns</p><p>Create a tabs interface that shows different content panels. This tests your understanding of component composition and navigation patterns.</p><p><strong>What interviewers look for:</strong></p><ul><li>Clean tab switching logic</li><li>Proper content organization</li><li>Reusable component design</li><li>Keyboard navigation support</li></ul><p><strong>Practice tip:</strong> Think about how to make the API flexible , can tabs be added dynamically? How do you handle tab labels and content?</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/tabs"> Practice this question on GreatFrontEnd</a></p><h3>Advanced level questions</h3><h4>9. Image carousel</h4><p><strong>What it tests:</strong> Complex state management, performance optimization, user interactions</p><p>Build an image carousel with navigation controls. This tests your ability to handle more complex user interactions and performance considerations.</p><p><strong>What interviewers look for:</strong></p><ul><li>Smooth transitions between images</li><li>Navigation control implementation</li><li>Performance with large image sets</li><li>Touch/swipe support considerations</li></ul><p><strong>Practice tip:</strong> Focus on the user experience , smooth transitions, proper loading states, and intuitive controls.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/image-carousel"> Practice this question on GreatFrontEnd</a></p><h4>10. Data table with pagination</h4><p><strong>What it tests:</strong> Performance optimization, complex state management, user experience</p><p>Create a data table that can handle large datasets with pagination. This is where things get interesting , you need to think about performance and user experience.</p><p><strong>What interviewers look for:</strong></p><ul><li>Efficient data handling</li><li>Pagination logic and state management</li><li>Table performance with large datasets</li><li>User experience considerations</li></ul><p><strong>Practice tip:</strong> Think about loading states, error handling, and how to make pagination intuitive for users.</p><p>→<a href="https://www.greatfrontend.com/questions/user-interface/data-table"> Practice this question on GreatFrontEnd</a></p><figure><img alt="Horizontal infographic summarizing ten essential React interview components including contact form, progress bar, accordion, modal, tabs, carousel, and data table." src="https://cdn-images-1.medium.com/max/1024/1*Dv76GJgGsicSehakCpDrdA.png" /></figure><h3>How to practice effectively</h3><p>Here’s my advice for getting the most out of these questions:</p><p><strong>Start with the basics:</strong> Even if you’re experienced, work through the beginner questions first. They’ll help you establish good patterns and remind you of fundamentals.</p><p><strong>Focus on user experience:</strong> Don’t just make it work, make it feel good to use. Think about loading states, error handling, and accessibility.</p><p><strong>Practice explaining your approach:</strong> In real interviews, you’ll need to talk through your thinking. Practice explaining why you chose certain patterns or approaches.</p><p><strong>Time yourself:</strong> Give yourself realistic time constraints. Most interview coding sessions are 45–60 minutes.</p><p><strong>Review solutions:</strong> After attempting each question, study different approaches. There’s usually more than one way to solve these problems.</p><h3>What’s next?</h3><p>These 10 questions will give you a solid foundation for React interviews. But if you want to go deeper, I recommend checking out our complete collection of 50 React coding questions on GreatFrontEnd. Each question includes:</p><ul><li>Interactive coding environment</li><li>Comprehensive test cases</li><li>Expert solutions and explanations</li><li>Difficulty progression from beginner to advanced</li></ul><p>You can also explore our React Interview Playbook, which covers everything from common React concepts to advanced patterns that senior developers need to know.</p><p>Remember, the goal isn’t just to memorize solutions, it’s to understand the patterns and thinking behind them. When you can confidently approach any React component challenge, you’ll know you’re ready for your interviews.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0c11004c631f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Choosing the right headless UI library for your React project]]></title>
            <link>https://medium.com/@greatfrontend/choosing-the-right-headless-ui-library-for-your-react-project-7fe9670a6174?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/7fe9670a6174</guid>
            <category><![CDATA[headless-ui]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[react-ui-library]]></category>
            <category><![CDATA[ui-library]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Mon, 15 Dec 2025 10:13:33 GMT</pubDate>
            <atom:updated>2025-12-15T10:19:33.675Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Feature image for article explaining how to choose the right headless UI library for React applications, highlighting component flexibility and unstyled UI design" src="https://cdn-images-1.medium.com/max/1024/1*QKpVsnjtK_xC7QCeo_0xRA.png" /></figure><p>Building React apps with custom designs can be tricky. You want components that work perfectly but don’t force you into a specific look. That’s where headless UI libraries come in.</p><p>These libraries give you all the functionality &amp; accessibility, keyboard navigation, focus management, without any styling. You get the behavior, you control the appearance.</p><p>But with so many options out there, which one should you pick for your project?</p><h3>What makes headless UI libraries special</h3><p>Think of headless UI libraries as the engine of a car. They handle all the complex stuff under the hood while letting you design the exterior however you want.</p><p>Regular component libraries like Material-UI or Bootstrap come with predefined styles. They look great out of the box, but customizing them can be a pain. Headless libraries flip this approach, they give you rock-solid functionality and let you handle the styling completely.</p><figure><img alt="Comparison of top headless UI libraries for React in 2025, including Radix UI, Headless UI, React Aria, Aria Kit, and Ark UI, summarizing when developers should choose each library." src="https://cdn-images-1.medium.com/max/1024/1*csnZL6E9MnRKlPYpIM4RgQ.png" /></figure><h3>The top players in 2025</h3><p>Let me walk you through the libraries that are making waves this year.</p><h4>Radix UI</h4><p><strong>The comprehensive choice</strong></p><p>Radix UI is like the Swiss Army knife of headless libraries. With 32 components, it covers almost everything you’ll need for a modern web app.</p><p><strong>What makes it great:</strong></p><ul><li>Zero configuration needed</li><li>Works perfectly with Tailwind CSS</li><li>Amazing TypeScript support</li><li>Used by big companies like Linear and Modulz</li></ul><p><strong>Best for:</strong> Teams who want a complete solution and don’t mind a slightly larger bundle size.</p><p><strong>The numbers:</strong> 13.5k GitHub stars, 1.3M weekly downloads</p><h4>Headless UI</h4><p><strong>The tailwind team’s pick</strong></p><p>Created by the same team behind Tailwind CSS, Headless UI focuses on doing fewer things exceptionally well.</p><p><strong>What makes it great:</strong></p><ul><li>Perfect integration with Tailwind</li><li>Rock-solid accessibility</li><li>Clean, simple API</li><li>Excellent documentation</li></ul><p><strong>Best for:</strong> Projects already using Tailwind CSS or teams who prefer a minimalist approach.</p><p><strong>The numbers:</strong> 23.6k GitHub stars, 1.3M weekly downloads</p><h4>React aria</h4><p><strong>The accessibility champion</strong></p><p>Adobe’s React Aria takes accessibility seriously. Really seriously. If you need to meet strict accessibility requirements, this is your go-to.</p><p><strong>What makes it great:</strong></p><ul><li>Built-in internationalization</li><li>Adaptive interactions (works on mobile and desktop)</li><li>Screen reader optimization</li><li>Comprehensive accessibility features</li></ul><p><strong>Best for:</strong> Enterprise applications or any project where accessibility compliance is critical.</p><p><strong>The numbers:</strong> 11.1k GitHub stars, 116k weekly downloads</p><h4>Aria kit</h4><p><strong>The modern alternative</strong></p><p>Aria Kit brings fresh ideas to the headless UI space with a focus on modern React patterns and excellent developer experience.</p><p><strong>What makes it great:</strong></p><ul><li>Uses modern React patterns</li><li>Great TypeScript support</li><li>Excellent state management</li><li>Clean component composition</li></ul><p><strong>Best for:</strong> Teams who want modern React patterns and don’t mind working with a newer library.</p><p><strong>The numbers:</strong> 7.5k GitHub stars, 53k weekly downloads</p><h4>Ark UI</h4><p><strong>The framework agnostic</strong></p><p>While we’re focusing on React, Ark UI deserves a mention because it works across multiple frameworks, React, Vue, and Solid.</p><p><strong>What makes it great:</strong></p><ul><li>Consistent API across frameworks</li><li>State machines for predictable behavior</li><li>Great for design systems</li><li>Scalable architecture</li></ul><p><strong>Best for:</strong> Teams working with multiple frameworks or planning to expand beyond React.</p><p><strong>The numbers:</strong> 2.8k GitHub stars, 29k weekly downloads</p><h3>How to pick the right one</h3><p>Choosing a headless UI library isn’t just about features, it’s about what fits your project and team.</p><figure><img alt="Infographic showing how to choose the right headless UI library for a React project based on styling approach, developer experience, accessibility requirements, component coverage, and project complexity." src="https://cdn-images-1.medium.com/max/1024/1*rlh72zzscTC4lQK14dbsuw.png" /></figure><h4>Consider your styling approach</h4><p><strong>Using tailwind CSS?</strong> → Headless UI is your best bet. It’s made by the same team and the integration is seamless.</p><p><strong>Building a custom design system?</strong> → Radix UI gives you the most components to work with.</p><p><strong>Need maximum accessibility?</strong> → React Aria has the most comprehensive accessibility features.</p><h4>Think about your team</h4><p><strong>New to headless UI?</strong> → Start with Headless UI. It has the gentlest learning curve.</p><p><strong>Want cutting edge React patterns?</strong> → Aria Kit embraces modern React development.</p><p><strong>Working with designers who know CSS-in-JS?</strong> → Radix UI plays nicely with styled-components and emotion.</p><h4>Project requirements matter</h4><p><strong>Building for enterprise?</strong> → React Aria’s accessibility and internationalization features are hard to beat.</p><p><strong>Creating a quick prototype?</strong> → Headless UI gets you up and running fast.</p><p><strong>Planning a long-term design system?</strong> → Radix UI’s comprehensive component set will grow with you.</p><h3>Quick comparison</h3><figure><img alt="Feature comparison table of headless UI libraries — Radix UI, Headless UI, React Aria, Aria Kit, and Ark UI — showing components count, ideal use cases, and learning curve." src="https://cdn-images-1.medium.com/max/1024/1*eS10RuzLb0e7_Npc8VQiMA.png" /></figure><h3>My take</h3><p>If you’re just starting with headless UI libraries, go with <strong>Headless UI</strong>. It’s simple, well-documented, and works great with Tailwind.</p><p>For larger projects where you need more components, <strong>Radix UI</strong> is fantastic. The API is consistent, and you’ll find components for almost every use case.</p><p>If accessibility is non-negotiable, like for government or enterprise apps, <strong>React aria</strong> is worth the extra complexity.</p><h3>Want to practice?</h3><p>Theory is great, but nothing beats hands-on experience. If you want to see these libraries in action with real examples and practice implementing them yourself, check out our<a href="https://www.greatfrontend.com/blog/top-headless-ui-libraries-for-react-in-2024"> complete guide to headless UI libraries</a>.</p><p>We’ve got detailed code examples, implementation tips, and practice exercises to help you master whichever library you choose.</p><h3>What’s your experience?</h3><p>Have you worked with any of these libraries? Which one worked best for your project? I’d love to hear about your experience in the comments below.</p><p>And if you’re preparing for front end interviews, headless UI libraries are definitely something worth knowing about. Many companies are moving toward this approach, and being familiar with the concepts will definitely help in your next interview.</p><p>Originally published on<a href="https://www.greatfrontend.com"> GreatFrontEnd</a>, where front end developers level up their skills.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7fe9670a6174" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Server-Sent events explained]]></title>
            <link>https://medium.com/@greatfrontend/server-sent-events-explained-1c4aa85ab087?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/1c4aa85ab087</guid>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[server-sent-events]]></category>
            <category><![CDATA[frontend]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Fri, 12 Dec 2025 10:14:40 GMT</pubDate>
            <atom:updated>2025-12-12T10:14:40.909Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Feature image explaining Server-Sent Events (SSE), showing server-to-browser one-way communication used for real-time updates in modern web applications" src="https://cdn-images-1.medium.com/max/1024/1*RJ4iSCBxyH4JtHLY2O8R8Q.png" /></figure><p>Ever wondered how news websites show breaking news instantly, or how your favorite chat app gets new messages without you refreshing the page? The magic behind this real-time communication is often Server-Sent Events (SSE).</p><p>If you’re a front end developer preparing for interviews or just curious about how modern web apps work, SSE is definitely worth understanding. Let’s break it down in simple terms.</p><h3>What are server-sent events?</h3><p>Think of Server-Sent Events like a one-way radio broadcast. Your web page tunes into a server’s “radio station” and receives updates whenever the server has something new to share. Unlike regular web requests where you ask for information and get a response, SSE keeps the connection open so the server can send you updates anytime.</p><p>The best part? It’s built right into modern browsers, so you don’t need any fancy libraries to get started.</p><figure><img alt="Visual comparison of SSE vs WebSockets highlighting one-way vs two-way communication, text vs binary data, and when front-end developers should choose SSE over WebSockets." src="https://cdn-images-1.medium.com/max/1024/1*Id08qVsYE8X7WxsIWVt5qA.png" /></figure><h3>SSE vs WebSockets: Which one to pick?</h3><p>When people talk about real-time web communication, WebSockets usually come up too. Here’s a quick comparison to help you understand when to use what:</p><figure><img alt="Feature comparison chart of SSE versus WebSockets showing differences in communication type, data format, connection protocol, implementation complexity, and browser support." src="https://cdn-images-1.medium.com/max/1024/1*q-LkItok8SNZufWG25uijg.png" /></figure><p><strong>Use SSE when</strong>: You need live updates but don’t need to send data back to the server frequently (news feeds, stock prices, notifications).</p><p><strong>Use WebSockets when</strong>: You need real-time chat, gaming, or collaborative editing where both sides need to communicate actively.</p><h3>Getting started with SSE</h3><p>The beauty of Server-Sent Events lies in their simplicity. Here’s how you can start receiving real-time updates in just a few lines of JavaScript:</p><pre>javascript<br>// Connect to the server&#39;s event stream<br>const eventSource = new EventSource(&#39;/live-updates&#39;);<br><br>// Listen for messages<br>eventSource.onmessage = function(event) {<br>    console.log(&#39;New update:&#39;, event.data);<br>    // Update your UI here<br>};<br><br>// Handle connection events<br>eventSource.onopen = function() {<br>    console.log(&#39;Connected to live updates&#39;);<br>};<br><br>eventSource.onerror = function() {<br>    console.log(&#39;Connection error - will retry automatically&#39;);<br>};</pre><p>That’s it! Your webpage is now listening for real-time updates. The browser handles reconnections automatically if the connection drops, which is pretty neat.</p><h3>Real-world applications</h3><p>SSE shines in several scenarios:</p><p><strong>Live sports scores</strong>: Sports websites use SSE to update scores in real-time without users hitting refresh constantly.</p><p><strong>Stock price updates</strong>: Financial platforms stream live price changes to keep traders informed instantly.</p><p><strong>System monitoring</strong>: Dashboards showing server health, user activity, or application metrics benefit from continuous data streams.</p><p><strong>News feeds</strong>: Breaking news alerts and live blog updates reach readers immediately.</p><p><strong>Progress tracking</strong>: File uploads, data processing, or any long-running task can send progress updates to keep users informed.</p><figure><img alt="Step-by-step infographic explaining how Server-Sent Events work, including connection setup, server pushing events, client message handling, automatic reconnection, and real-world SSE use cases." src="https://cdn-images-1.medium.com/max/1024/1*wxUh685WnuPxe1Xdr4cxMg.png" /></figure><h3>Why developers love SSE</h3><p><strong>Simple implementation</strong>: No complex protocols or libraries needed. If you know basic JavaScript, you’re good to go.</p><p><strong>Automatic reconnection</strong>: The browser handles connection drops and retries for you. Less code to maintain.</p><p><strong>Built-in browser support</strong>: Works across all modern browsers without polyfills.</p><p><strong>Lightweight</strong>: Less overhead compared to WebSockets for one-way communication.</p><p><strong>Standard HTTP</strong>: Works with existing infrastructure, load balancers, and CDNs without special configuration.</p><h3>Things to keep in mind</h3><p>While SSE is fantastic, there are a few limitations worth knowing:</p><p><strong>Text only</strong>: You can only send text data, so binary files need to be encoded (which adds overhead).</p><p><strong>One direction</strong>: If you need to send data back to the server frequently, WebSockets might be better.</p><p><strong>Connection limits</strong>: Browsers limit concurrent SSE connections per domain (usually around 6), though HTTP/2 helps with this.</p><p><strong>Mobile considerations</strong>: On mobile networks, connections might drop more frequently, but the automatic reconnection handles this gracefully.</p><h3>Getting interview-ready</h3><p>Server-Sent Events frequently come up in front end interviews because they demonstrate understanding of:</p><ul><li>Real-time communication patterns</li><li>Browser APIs</li><li>Performance considerations</li><li>When to choose different technologies</li></ul><p>Interviewers love asking about the trade-offs between SSE and WebSockets, so make sure you understand both technologies and their use cases.</p><h3>Ready to practice?</h3><p>Understanding SSE conceptually is great, but nothing beats hands-on practice. If you want to dive deeper with comprehensive examples, practice questions, and real interview scenarios, check out our complete<a href="https://www.greatfrontend.com/questions/quiz/what-are-server-sent-events"> Server-Sent Events guide on GreatFrontEnd</a>.</p><p>You’ll find detailed code examples for both client and server implementations, plus practice questions that help you master SSE for your next interview.</p><p>Server-Sent Events might seem like a small piece of the web development puzzle, but they’re incredibly powerful for creating engaging, real-time user experiences. Start with simple implementations and gradually build more complex applications as you get comfortable with the technology.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1c4aa85ab087" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript closures: What every developer should know]]></title>
            <link>https://medium.com/@greatfrontend/javascript-closures-what-every-developer-should-know-343d4ef35103?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/343d4ef35103</guid>
            <category><![CDATA[javascript-closure]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[frontend-interviews]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Thu, 11 Dec 2025 06:04:40 GMT</pubDate>
            <atom:updated>2025-12-11T06:04:40.842Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="JavaScript Closures interview guide with visual code example and JavaScript logo explaining closure concepts for advanced JS developers" src="https://cdn-images-1.medium.com/max/1024/1*DVg019JWfVcWWZgyoOb59g.png" /></figure><p>You’re debugging your JavaScript code at 2 AM, and something weird is happening. A function is somehow accessing a variable that should have been destroyed ages ago. Welcome to the world of closures, one of JavaScript’s most powerful features that can either save your day or drive you completely insane.</p><p>I’ve been there. Early in my career, closures felt like black magic. But once I understood them, they became one of my favorite tools for writing clean, efficient code. Let me break them down in a way that actually makes sense.</p><h3>What’s a closure, actually?</h3><p>Here’s the deal: a closure happens when a function “remembers” variables from the place where it was created, even after that place is long gone.</p><p>Think of it like this, imagine you’re moving out of your apartment, but you pack a suitcase with your favorite things. Even in your new place, you still have access to everything in that suitcase. That’s exactly what closures do with variables.</p><pre>javascript<br>function createPersonalGreeting(name) {<br>  // This variable lives here<br>  const personalMessage = `Hey there, ${name}!`;<br>  <br>  // This function &quot;packs&quot; personalMessage in its suitcase<br>  return function() {<br>    console.log(personalMessage);<br>  };<br>}<br><br>const greetJohn = createPersonalGreeting(&quot;John&quot;);<br>greetJohn(); // &quot;Hey there, John!&quot;</pre><p>Even though createPersonalGreeting finished running, the returned function still remembers personalMessage. That’s closure in action.</p><figure><img alt="Infographic explaining how JavaScript closures work with outer function variable creation and inner function retaining scope access" src="https://cdn-images-1.medium.com/max/1024/1*7168zJ8lv3VLDn-bwFibFQ.png" /></figure><h3>Why should you care?</h3><p>Closures aren’t just a fancy concept to impress people at meetups. They solve real problems every day.</p><p><strong>Problem 1: Creating private variables</strong></p><p>JavaScript doesn’t have true private variables, but closures give us the next best thing:</p><pre>javascript<br>function createBankAccount(initialBalance) {<br>  let balance = initialBalance;<br>  <br>  return {<br>    deposit: function(amount) {<br>      balance += amount;<br>      return balance;<br>    },<br>    withdraw: function(amount) {<br>      if (amount &lt;= balance) {<br>        balance -= amount;<br>        return balance;<br>      }<br>      return &quot;Insufficient funds&quot;;<br>    },<br>    getBalance: function() {<br>      return balance;<br>    }<br>  };<br>}<br><br>const myAccount = createBankAccount(100);<br>console.log(myAccount.getBalance()); // 100<br>myAccount.deposit(50);<br>console.log(myAccount.getBalance()); // 150<br><br>// You can&#39;t directly access or modify balance from outside<br>console.log(myAccount.balance); // undefined</pre><p>The balance variable is completely protected. The only way to interact with it is through the methods we provide. Pretty neat, right?</p><p><strong>Problem 2: Event handlers that remember context</strong></p><p>This one trips up a lot of developers:</p><pre>javascript<br>function setupButtons() {<br>  const buttons = document.querySelectorAll(&#39;.action-btn&#39;);<br>  <br>  for (let i = 0; i &lt; buttons.length; i++) {<br>    buttons[i].addEventListener(&#39;click&#39;, function() {<br>      console.log(`Button ${i + 1} was clicked`);<br>    });<br>  }<br>}</pre><p>Each click handler remembers its own value of i. Without closures, they’d all show the same number (spoiler: it would be the last value of i).</p><h3>The classic gotcha (and how to fix it)</h3><p>Here’s where most developers get confused. Check out this code:</p><pre>javascript<br>// This doesn&#39;t work like you&#39;d expect<br>function createCounters() {<br>  const counters = [];<br>  <br>  for (var i = 0; i &lt; 3; i++) {<br>    counters.push(function() {<br>      console.log(i);<br>    });<br>  }<br>  <br>  return counters;<br>}<br><br>const myCounters = createCounters();<br>myCounters[0](); // 3 (not 0!)<br>myCounters[1](); // 3 (not 1!)<br>myCounters[2](); // 3 (not 2!)<br>What happened? All the functions share the same i variable, and by the time any of them run, the loop is done and i equals 3.<br>The fix? Create a new scope for each iteration:<br>javascript<br>function createCounters() {<br>  const counters = [];<br>  <br>  for (let i = 0; i &lt; 3; i++) { // Using &#39;let&#39; instead of &#39;var&#39;<br>    counters.push(function() {<br>      console.log(i);<br>    });<br>  }<br>  <br>  return counters;<br>}<br><br>const myCounters = createCounters();<br>myCounters[0](); // 0<br>myCounters[1](); // 1<br>myCounters[2](); // 2</pre><p>Using let creates a new binding for each iteration. Problem solved.</p><h3>Real-world example: A simple timer</h3><p>Here’s something you might actually use in a project:</p><pre>javascript<br>function createTimer(startTime = 0) {<br>  let currentTime = startTime;<br>  let isRunning = false;<br>  let intervalId = null;<br>  <br>  return {<br>    start: function() {<br>      if (!isRunning) {<br>        isRunning = true;<br>        intervalId = setInterval(function() {<br>          currentTime++;<br>          console.log(`Time: ${currentTime}s`);<br>        }, 1000);<br>      }<br>    },<br>    <br>    stop: function() {<br>      if (isRunning) {<br>        isRunning = false;<br>        clearInterval(intervalId);<br>      }<br>    },<br>    <br>    reset: function() {<br>      currentTime = startTime;<br>      this.stop();<br>    },<br>    <br>    getTime: function() {<br>      return currentTime;<br>    }<br>  };<br>}<br><br>const myTimer = createTimer(10);<br>myTimer.start(); // Starts counting from 10<br>// Later...<br>myTimer.stop();<br>console.log(myTimer.getTime()); // Shows current time</pre><p>Each timer instance has its own private state. You can create multiple timers, and they won’t interfere with each other.</p><figure><img alt="JavaScript closure memory model showing outer scope variables and how the inner function preserves access after execution" src="https://cdn-images-1.medium.com/max/1024/1*94au0-H3VBq-YVZC-K525Q.png" /></figure><h3>When closures can bite you</h3><p>Closures aren’t always your friend. They can cause memory leaks if you’re not careful:</p><pre>javascript<br>function attachListeners() {<br>  const hugeArray = new Array(1000000).fill(&#39;data&#39;);<br>  <br>  document.getElementById(&#39;button&#39;).addEventListener(&#39;click&#39;, function() {<br>    // This function keeps hugeArray alive in memory<br>    // even though we only need one small piece<br>    console.log(&#39;Button clicked&#39;);<br>  });<br>}</pre><p>The event handler creates a closure that holds onto hugeArray, preventing garbage collection. In cases like this, be mindful of what variables your closures are capturing.</p><h3>The bottom line</h3><p>Closures are everywhere in JavaScript. Every time you use callbacks, event handlers, or any function that references variables from its outer scope, you’re using closures.</p><p>They’re not magic, they’re just functions with good memory. Once you get comfortable with them, you’ll start seeing elegant solutions to problems that used to require ugly workarounds.</p><p>The key is practice. Start simple, experiment with the examples above, and gradually work your way up to more complex scenarios.</p><p><strong>Want to test your understanding?</strong> Try building a closure-based solution the next time you need private variables or persistent state in your code. And if you’re preparing for interviews, closures are definitely worth mastering, they come up constantly in technical discussions.</p><p>Ready to dive deeper into JavaScript concepts like closures? Check out our collection of<a href="https://www.greatfrontend.com/questions/quiz/what-is-a-closure-and-how-why-would-you-use-one"> JavaScript questions</a> where you can practice with real coding challenges and get instant feedback. Perfect for sharpening your skills and building confidence for your next technical interview.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=343d4ef35103" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[When to use debouncing vs throttling: A developer’s quick guide]]></title>
            <link>https://medium.com/@greatfrontend/when-to-use-debouncing-vs-throttling-a-developers-quick-guide-26eb507941e0?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/26eb507941e0</guid>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[debouncing-in-javascript]]></category>
            <category><![CDATA[throttling-in-javascript]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Wed, 10 Dec 2025 04:59:18 GMT</pubDate>
            <atom:updated>2025-12-10T04:59:18.855Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Overview of debouncing vs throttling concepts used in front end performance optimization" src="https://cdn-images-1.medium.com/max/1024/1*larsSZ7JSkY92FDjtz6t4g.png" /></figure><p>Picture this: You’re building a search feature and every keystroke triggers an API call. Or your scroll event handler is firing hundreds of times per second, making your app crawl. These aren’t just minor annoyances, they’re performance killers that can frustrate users and crash browsers.</p><p>The good news? Two simple techniques can solve most of these problems: debouncing and throttling. But here’s where many developers get stuck, when do you use which one?</p><h3><strong>The elevator button problem</strong></h3><figure><img alt="Elevator button analogy explaining the difference between debouncing and throttling for better event handling decisions." src="https://cdn-images-1.medium.com/max/1024/1*XTnoPCrABBJcDb4fHC5ntg.png" /></figure><p>Think about pressing an elevator button. With <strong>debouncing</strong>, it’s like the elevator waits until you’ve completely stopped pressing buttons before deciding which floor to go to. With <strong>throttling</strong>, it’s like the elevator only listens to button presses once every few seconds, no matter how frantically you press.</p><p><strong>Debouncing</strong> delays action until things calm down. <strong>Throttling</strong> limits how often actions can happen.</p><figure><img alt="Visual comparison highlighting how debouncing delays actions while throttling limits execution frequency in web applications." src="https://cdn-images-1.medium.com/max/1024/1*3PYA0liCMN4TKPwFVULjIA.png" /></figure><h3><strong>Real scenarios where you need debouncing</strong></h3><h4>Search autocomplete</h4><p>You don’t want to hit your search API for every single letter someone types. Instead, wait until they pause typing:</p><pre>javascript<br>// Wait 300ms after user stops typing<br>const debouncedSearch = debounce(searchAPI, 300);</pre><h4>Form validation</h4><p>Don’t show error messages while someone is still typing their email. Give them a chance to finish first.</p><h4>Button click protection</h4><p>Prevent accidental double-clicks that could submit a form twice or charge a credit card multiple times.</p><h4>Auto-save features</h4><p>In text editors, you want to save work, but not on every single character change. Wait for natural pauses.</p><h3>Real scenarios where you need throttling</h3><h4>Scroll events</h4><p>Scroll events can fire 60+ times per second. You don’t need to update your “scroll to top” button position that frequently:</p><pre>javascript<br>// Update at most once every 100ms<br>const throttledScroll = throttle(updateScrollPosition, 100);</pre><h4>Window resize</h4><p>When users resize their browser window, you might need to recalculate layouts, but not 50 times per second.</p><h4>Mouse movement tracking</h4><p>If you’re building a drawing app or tracking mouse coordinates, throttling prevents overwhelming your system.</p><h4>API rate limiting</h4><p>Some APIs only allow a certain number of calls per minute. Throttling helps you stay within those limits.</p><figure><img alt="Quick reference guide showing when developers should use debouncing or throttling to improve UI performance." src="https://cdn-images-1.medium.com/max/1024/1*MaXmgAzNlnzZFDBBMpKx8A.png" /></figure><h3>The quick decision guide</h3><p><strong>Use debouncing when:</strong></p><ul><li>You want to wait until activity stops</li><li>The last action is what matters most</li><li>Examples: search, form validation, auto-save</li></ul><p><strong>Use throttling when:</strong></p><ul><li>You want regular, consistent updates</li><li>You need to maintain responsiveness during continuous activity</li><li>Examples: scroll events, resize events, mouse tracking</li></ul><h3>Common mistakes to avoid</h3><p><strong>Don’t debounce everything.</strong> I’ve seen developers debounce button clicks with long delays, making their app feel sluggish. Users expect immediate feedback from buttons.</p><p><strong>Don’t throttle user input.</strong> Throttling keystrokes or form inputs creates a terrible user experience. People notice when their typing feels delayed.</p><p><strong>Pick the right timing.</strong> A 300ms debounce works well for search, but it’s too slow for auto-save. A 100ms throttle is good for scroll events, but too aggressive for API calls.</p><h3>Testing your implementation</h3><p>Here’s a simple way to test if you’ve chosen correctly:</p><ul><li><strong>For debouncing</strong>: Rapidly trigger the event, then stop. The function should only execute once after you stop.</li><li><strong>For throttling</strong>: Continuously trigger the event. The function should execute at regular intervals, not constantly.</li></ul><h3>The bottom line</h3><p>Debouncing and throttling aren’t just performance optimizations , they’re essential tools for building responsive, user-friendly applications. The key is understanding your specific use case and choosing the right technique.</p><p>Remember: debounce when you want to wait for calm, throttle when you want to limit frequency during activity.</p><p>Want to practice implementing these concepts with real examples and see how they perform in different scenarios? Check out our<a href="https://www.greatfrontend.com/questions/quiz/explain-the-concept-of-debouncing-and-throttling"> comprehensive interactive guide</a> where you can experiment with code and test your understanding with hands-on exercises.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=26eb507941e0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[5 Resume Mistakes That Kill Front End Developer Interviews (Before They Even Start)]]></title>
            <link>https://medium.com/@greatfrontend/5-resume-mistakes-that-kill-front-end-developer-interviews-before-they-even-start-cfebf98155cd?source=rss-ca17f8ab5fbd------2</link>
            <guid isPermaLink="false">https://medium.com/p/cfebf98155cd</guid>
            <category><![CDATA[resume-writing-tips]]></category>
            <category><![CDATA[frontend]]></category>
            <dc:creator><![CDATA[GreatFrontEnd]]></dc:creator>
            <pubDate>Tue, 09 Dec 2025 04:39:50 GMT</pubDate>
            <atom:updated>2025-12-09T04:39:50.572Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Resume mistake to avoid for font end interview" src="https://cdn-images-1.medium.com/max/1024/1*6X717ocmALCzpiEML_Sy2g.png" /></figure><p>Last month, I was helping a friend review resumes for a front end position at his startup. Out of 150 applications, we rejected 80% within the first 30 seconds.</p><p>Not because these developers lacked skills. But because their resumes made basic mistakes that screamed “I don’t understand what front end development is about.”</p><p>Here are the five biggest mistakes I see front end developers make on their resumes, and how to fix them fast.</p><h3>Mistake #1: Using Generic Job Titles</h3><p><strong>What I see:</strong> “Software Engineer at XYZ Company”</p><p><strong>Why it’s killing you:</strong> When a recruiter searches for “front end developer” in their system, your resume doesn’t show up. You’re invisible.</p><p><strong>The fix:</strong> Be specific about what you actually do.</p><p>Instead of: “Software Engineer” Use: “Front End Engineer” or “Front End Software Engineer”</p><p>If your official title is generic but you’ve been doing front end work, use what reflects your actual role. Nobody’s going to call HR to verify your exact title. They care about what you can do.</p><p><strong>Pro tip:</strong> Sprinkle “front end” throughout your resume. ATS systems love keyword matches.</p><h3>Mistake #2: Ugly, Hard-to-Read Formatting</h3><p>Here’s the thing, you’re applying to build user interfaces. If your resume looks like it was designed in 1995, what does that say about your design sense?</p><p><strong>What kills resumes:</strong></p><ul><li>Fancy fonts that don’t load properly</li><li>Multiple columns that confuse ATS systems</li><li>Tiny text that requires a magnifying glass</li><li>Colors that don’t print well</li></ul><p><strong>The fix:</strong></p><ul><li>Single column layout</li><li>Common fonts (Arial, Calibri, nothing fancy)</li><li>11pt font minimum</li><li>Clean, simple design</li></ul><p>Your resume doesn’t need to look like a Dribbble shot. It just needs to look professional and be easy to read.</p><figure><img alt="Infographic showing resume mistakes to avoid for front end developers" src="https://cdn-images-1.medium.com/max/1024/1*TV9ZtQKDgi63uPkDnDMJcA.png" /></figure><h3>Mistake #3: Boring Project Descriptions</h3><p><strong>What I see:</strong> “Built a website using React, CSS, and JavaScript”</p><p><strong>What I think:</strong> “So did every bootcamp graduate last week.”</p><p><strong>What you should write instead:</strong></p><p>“Built a performant e-commerce site handling 500+ daily transactions. Reduced page load time by 40% using code splitting and lazy loading. Technologies: Next.js, React, Stripe API, CSS modules. 15k monthly active users.”</p><p>See the difference? The second one tells me:</p><ul><li>Scale (500+ transactions, 15k users)</li><li>Impact (40% faster load time)</li><li>Technical decisions (code splitting, lazy loading)</li><li>Business value (e-commerce, transactions)</li></ul><p><strong>Quick formula:</strong> What you built + Scale + Impact + Technologies used</p><h3>Mistake #4: Listing Every JavaScript Library Ever Created</h3><p>I once saw a resume that listed 47 different technologies. Forty-seven.</p><p><strong>Here’s what happens:</strong> Instead of looking impressive, you look like you don’t know what actually matters.</p><p><strong>The fix:</strong> Be strategic about what you include.</p><p><strong>Include technologies that:</strong></p><ul><li>Appear in the job listing</li><li>Influence architecture (React, Angular, Vue)</li><li>Show you’re current (TypeScript, Tailwind CSS)</li><li>Demonstrate depth (if you know Redux, you understand state management)</li></ul><p><strong>Don’t include:</strong></p><ul><li>Every utility library (Lodash, Moment.js)</li><li>Basic tools everyone uses (npm, Chrome DevTools)</li><li>Technologies you touched once in a tutorial</li></ul><p><strong>Example skills section:</strong> Languages: HTML, CSS, JavaScript, TypeScript Technologies: React, Next.js, Tailwind CSS, Jest, Cypress, GraphQL</p><p>Clean. Focused. Shows modern stack knowledge.</p><h3>Mistake #5: No Personal Projects (or Terrible Ones)</h3><p>“But I have work experience!”</p><p>Great. But front end moves fast. React 18 features, CSS Grid, modern deployment tools — if you’re not building side projects, how do I know you keep up?</p><p><strong>What makes a good project:</strong></p><ul><li>Solves a real problem (not another todo app)</li><li>Uses modern technologies</li><li>Has a live demo I can click</li><li>Code is on GitHub with a good README</li><li>Shows your thought process</li></ul><p><strong>Red flags:</strong></p><ul><li>Projects from 2019 using jQuery</li><li>Broken demo links</li><li>No code available</li><li>Generic tutorials you followed</li></ul><p><strong>Quick project ideas that impress:</strong></p><ul><li>A tool that solves a problem you have</li><li>An app that uses a modern API</li><li>Something that shows performance optimization</li><li>A component library or design system</li></ul><h3>The Bottom Line</h3><p>Your resume has one job: get you an interview.</p><p>These five fixes won’t guarantee you’ll get hired. But they’ll get you past that first 30-second screening where most resumes die.</p><p>Front end development is competitive. Your resume needs to show you understand both the technical and visual sides of the job.</p><p><strong>Want the complete guide?</strong> I’ve put together a comprehensive front end resume playbook with examples, templates, and detailed breakdowns of what works.<a href="https://www.greatfrontend.com/front-end-interview-playbook/resume"> Check it out here</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cfebf98155cd" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>