Skip to main content

Tekion

πŸš€ My Tekion Frontend Engineer Interview Experience (2025) | Software Engineer II

πŸ“Œ Role: Software Engineer II (Frontend)
🏒 Company: Tekion Corp
🎯 Topics Covered: JavaScript DSA, Currying, Polyfills, Machine Coding, System Design
πŸ—“οΈ Total Rounds: 4 (DSA, Machine Coding, LLD + HLD, HM Discussion)


🧠 Round 1: Data Structures & Algorithms

1️⃣ Polyfill for bind() Method in JavaScript

πŸ“Œ Concept Tested: Understanding of this, closures, and function binding.

// βœ… Polyfill for Function.prototype.bind
Function.prototype.myBind = function (thisContext, ...argsArray) {
  const parentFunction = this; // πŸ‘‰ Store the original function (the one we're binding)

  // πŸ‘‡ Return a new function that captures both initial & later arguments
  return function bindedFun(...funArgs) {
    // πŸ‘‡ Use apply() to call the original function with 'thisContext' and combined arguments
    return parentFunction.apply(thisContext, [...argsArray, ...funArgs]);
  };
};

const obj = {
  name: 'Gourav',
};

function test(age) {
  console.log(this.name, age); // πŸ‘‰ 'this' refers to the bound context
}

let bindedFunc = test.myBind(obj); // πŸ”— Bind 'obj' as the context
bindedFunc(29); // βœ… Output: Gourav 29

Problem Statement

πŸ’‘ Key Takeaways

  • apply(context, args) allows dynamic function invocation with custom this.
  • The polyfill ensures:
    • this context is fixed.
    • Arguments can be passed in two stages: at bind time and at call time.
  • This is helpful in React event handlers, callbacks, and more.

πŸ’‘ JavaScript Tip: .bind() returns a new function with a fixed this context. Closures help preserve context across invocations.


2️⃣ Currying Function in JavaScript

πŸ“Œ Concept Tested: Higher-order functions, recursion, and argument handling.

// βœ… Generic Curry Function in JavaScript
function curry(func) {
  // Returns a new function that handles currying
  return function myCurried(...args) {
    // πŸ‘‰ If enough arguments are provided, call the original function
    if (args.length >= func.length) {
      return func(...args); // βœ… Call original function with collected args
    } else {
      // πŸ” Not enough args yet – return a function that takes more
      return (...args2) => myCurried(...args, ...args2); // πŸ” Keep collecting
    }
  };
}

function test(a, b, c) {
  return a + b + c; // Simple function that takes 3 arguments
}

const curriedFunction = curry(test);

console.log(curriedFunction(1, 2, 3));     // βœ… Output: 6
console.log(curriedFunction(1, 2)(3));     // βœ… Output: 6
console.log(curriedFunction(1)(2)(3));     // βœ… Output: 6

Problem Statement

🧠 JavaScript Tips

  • func.length gives the number of expected parameters for a function.
  • This technique is useful when:
    • You're building functional pipelines.
    • You want partial application (pre-filling some arguments).
  • Currying helps make your code more modular and reusable ♻️

πŸ’‘ Note: Currying transforms a multi-argument function into a series of unary functions.


3️⃣ Machine Coding – πŸ•’ Stopwatch Component (React)

πŸ“Œ Functionalities:

  • Play / Pause ⏯️
  • Stop ⏹️
  • Reset πŸ”„

πŸ’‘ Tip: Use useRef to persist timers and useEffect for cleanup.


🧩 Round 2: Low-Level Design (LLD)

1️⃣ Word Guess Game πŸŸ©πŸŸ¨β¬› (Similar to Wordle)

πŸ“Œ UI-Driven Machine Coding Task

Expected UI

Asked:

  • Error & success handling logic
  • Grid rendering performance
  • Keyboard UX design

πŸ’‘ Tip: Use a 2D array to represent the board state, map user input to that structure, and validate against the correct word using character-wise comparisons.


2️⃣ Polyfill for componentDidUpdate() in Functional Components

import { useEffect, useRef } from 'react';

/**
 * πŸ”„ useComponentDidUpdate
 * A custom React hook that mimics `componentDidUpdate` lifecycle behavior.
 * It skips the initial render and only runs the callback on updates.
 *
 * @param {Function} callback - Function to be called on update.
 * @param {Array} deps - Dependency array to watch for changes.
 */
function useComponentDidUpdate(callback, deps) {
  const hasMounted = useRef(false); // 🧠 Keeps track if component has mounted

  useEffect(() => {
    if (hasMounted.current) {
      // βœ… Run callback only on updates (not initial mount)
      callback();
    } else {
      // πŸ›‘ Skip the first render
      hasMounted.current = true;
    }
  }, deps); // πŸ‘€ Watch these dependencies
}

Code Block

πŸ’‘ Note: Mimics class-based componentDidUpdate() for functional components by skipping the first render.


πŸ—οΈ Round 3: High-Level Design (HLD)

1️⃣ tekion.com Performance Optimization 🌐

  • Lazy Loading & Code Splitting – with React.lazy and dynamic imports
  • SSR & Caching – Reduce FCP & TTFB
  • CLS, LCP, TBT fixes – Optimize image loading, reduce heavy JS
  • Debounce API Calls & use IntersectionObserver for lazy UI

2️⃣ Machine Coding: 🧱 Dynamic Grid Component

πŸ“Œ Build a reusable grid based on:

  • Row/column input
  • Efficient rendering on large data

πŸ’‘ Use memoization (React.memo, useMemo) and virtualization (react-window) to handle large datasets.


🀝 Round 4: Hiring Manager Discussion

Topics Discussed:

  • Current architecture & tech stack at my company
  • System Design for πŸ” Flipkart Search Bar (pagination, throttling, autocomplete)
My Frontend System Design For Flipkart Search Bar
  • Verbal Design of πŸ”” LinkedIn Notification Section
  • Real-world conflict handling with dev teams
  • My motivation to join Tekion

πŸ’Έ Offer Details

ComponentValue
πŸ§‘β€πŸ’» DesignationSoftware Engineer II
🏒 ModeHybrid
πŸ’° Fixed CTCβ‚Ή36L
πŸ’Έ Joining Bonusβ‚Ή3L
πŸͺ™ Retention Bonusβ‚Ή1L
πŸ“Š ESOPSβ‚Ή44L (6000 units @ $9)
πŸ“¦ Total 1st Yearβ‚Ή51L

Hey there from LearnYard! πŸ‘‹

Glad to see you exploring the free content from our course! We’ve shared 10 valuable articles at no cost to help you get a real feel of what’s inside.

If you’ve found these helpful, we’d love to know! πŸ’¬
Share your thoughts or key takeaways on LinkedIn, Twitter, or Instagram β€” and don’t forget to tag Gourav Hammad & Mohammad Fraz. We’ll personally respond to your post!

Thanks for being part of the LearnYard journey. Keep learning, keep growing! πŸš€


Loved the free content? Want access to the full course β€” for free? πŸ’Έ

Here’s how: share the course with your friends using your affiliate link (you’ll find it on your profile or home page), and earn 20% commission on each sale.

Just 4–5 sales and you’ll recover the full course price of β‚Ή999/- πŸ”
So why wait? Start sharing, start earning, and unlock the rest of the course effortlessly! πŸ› οΈπŸ“ˆ


πŸ’‘ Tips to Crack the Tekion Interview

  • Master JavaScript fundamentals: closures, this, promises, async/await
  • Practice Polyfills for core JS methods (bind, call, apply, debounce, throttle)
  • Build and refactor real-world UI components (e.g., Stopwatch, Grid, Wordle)
  • Focus on DSA with JavaScript β€” arrays, strings, maps, recursion
  • Be ready for machine coding and system design discussions
  • Show clarity in code structuring, naming, and performance optimizations
  • During HM round: Highlight ownership, decision-making, and team collaboration

  • JavaScript ES6+ (spread, rest, destructuring, arrow functions)
  • React Hooks (useEffect, useMemo, useCallback, custom hooks)
  • Component lifecycle and render optimizations
  • Low-Level Design (LLD): Modals, Search Bar, Grid, Wordle
  • High-Level Design (HLD): Architecture of scalable apps
  • Problem Solving with recursion, sliding window, and frequency maps
  • Event loop, microtasks/macrotasks, and async behavior

πŸ“’ Hashtags for Visibility

#TekionInterview #FrontendInterview #JavaScriptDSA #ReactMachineCoding #SystemDesignFrontend #TechInterviewTips #FrontendEngineering #WebDevelopment #JavaScriptMastery #TechJourney #LearnYard